Test 2 Wiki template rendered - mestato/EPP622_2026 GitHub Wiki
Lab Notebook Wiki — Template
Instructions: Copy each the template to your own github wiki. You are welcome to break into multiple pages if that makes it easier for you, just keep all the sections.
Every command must be copy-pasteable and complete. Not ran fastp on the samples. The actual command, with the actual arguments, in a formatted code block.
Each command needs a comment. What are you running and why? No need to be too long, but something like "Running FastQC to check the quality of the reads."
Your Name: -
Server: -
Repository URL: -
Setup
Create directory and symbolically link provided files.
commands
Step 1: Quality Control (FastQC + MultiQC)
Commands
Comments
commands
MultiQC gives a rounded number for total reads and does not report total bases per sample. To find out those numbers use this:
for f in *.fastq.gz; do
echo -ne "$f\t"
zcat "$f" | awk 'NR%4==2{r++; b+=length($0)} END{printf "%d\t%d\t%.1f\n", r, b, b/r}'
done | column -t
This gives the total reads, then the total bases, then the average read length for each file.
Results
MultiQC report path and name: _______
One sample has adapter and polyG issues, one sample has low quality, one sample has low coverage, and one is problem free. Label each sample below with its quality issues. For each sample, report R1 + R2.
| Sample | Total reads | Total bases | Quality issues? |
|---|---|---|---|
| A | - | - | - |
| B | - | - | - |
| C | - | - | - |
| D | - | - | - |
Step 2: Read Trimming and Filtering (fastp)
WARNING: Because these reads are simulated, fastp fails to identify that they need poly-G tail trimming. Turn that on with a flag.
ADVICE: Its easier to compare the reads pre and post trimming if you run multiqc on the results of fastqc of the trimmed files (and do not use the .json files from fastp).
Commands
Comments
commands
MultiQC gives a rounded number for total reads and does not report total bases per sample. To find out those numbers use this:
for f in *.fastq.gz; do
echo -ne "$f\t"
zcat "$f" | awk 'NR%4==2{r++; b+=length($0)} END{printf "%d\t%d\t%.1f\n", r, b, b/r}'
done | column -t
This gives the total reads, then the total bases, then the average read length for each file.
Results
MultiQC report path and name: _______
For each sample, report R1 + R2.
| Sample | Reads before | Reads after | Mean length before | Mean length after |
|---|---|---|---|---|
| A | - | - | - | - |
| B | - | - | - | - |
| C | - | - | - | - |
| D | - | - | - | - |
Step 3: Alignment (bwa-mem2 + samtools)
Commands
Comments
commands
Results
MultiQC report path and name: _______
| Sample | % mapped | % properly paired | Mean depth |
|---|---|---|---|
| A | - | - | - |
| B | - | - | - |
| C | - | - | - |
| D | - | - | - |
Step 4: Variant Calling (bcftools mpileup + call)
Commands
Comments
commands
Results
bcftools stats report path and name: _______
Step 5: Filtering (bcftools filter)
Commands
I am going to try a gentle filtering and more stingent filtering. (WARNING: These are different filters than what we have seen in class.)
Gentle: exclude variants with a QUAL less than 20 or less than 5 total read depth across all samples.
Stringent: exclude variants with a QUAL less than 30 or less than 10 total read depth across all samples or a site level mapping quality (root mean square) of less than 40
#filtering gentle
#filtering stringent
# bcftools stats on gentle
# bcftools stats on stringent
Results
bcftools stats report path and name for gentle filtering: _______
bcftools stats report path and name: for stringent filtering: _______
| VCF | number of SNPs |
|---|---|
| raw | - |
| gentle | - |
| stringent | - |
Step 6: Evaluation Against the Truth Set
Commands
Link to the provided evaluate_snps_v4.py and truth_snps.vcf. Find the precision, recall and F1 for gently filtered and stringently filtered SNP sets.
Example of how to run evaluate_snps_v4.py:
python3 evaluate_snps_v4.py \
--truth truth_snps.vcf --calls <yourvcffile> \
--all-samples --tag strict --outdir outdir
code
Directory structure
From this folder that holds all my analysis, here is the directory structure (paste the output of: tree .):
#output of tree command:
Results
| Sample | Filter | TP | FP | FN | Precision | Recall | F1 |
|---|---|---|---|---|---|---|---|
| A | raw | - | - | - | - | - | - |
| A | gentle | - | - | - | - | - | - |
| A | strict | - | - | - | - | - | - |
| B | raw | - | - | - | - | - | - |
| B | gentle | - | - | - | - | - | - |
| B | strict | - | - | - | - | - | - |
| C | raw | - | - | - | - | - | - |
| C | gentle | - | - | - | - | - | - |
| C | strict | - | - | - | - | - | - |
| D | raw | - | - | - | - | - | - |
| D | gentle | - | - | - | - | - | - |
| D | strict | - | - | - | - | - | - |
Assignment Analysis - Questions to answer
Minimum one paragraph each.
How did samples differ from each other in read count versus in read quality? Why does each matter for SNP calling?
What are the relative merits and drawbacks of filtering? Interpret the above chart in terms of the original quality issues, and how those yielded different outcomes. When is filtering a good idea vs when it is it a bad idea? Think specifically about false positives vs false negatives.
Pick two false negatives and two false positives, from any sample. For each, tell me the sample, tell me the chromosome and coordinate location, put in a screenshot of IGV or JBrowse, and explain the specific cause of the FN or FP call.
AI Analysis - Pipeline Audit
This is an evaluation of the pipeline you generated at the beginning of the learning module. Provide full sentences and thoughtful rationale.
Model used:
Date generated:
Exact prompt:
Minimum one paragraph each.
Three things it got right.
Three things you don't understand and would want to learn more about before using. Or do you understand all of it? If so be ready to answer questions about it.
How specifically would you assess the results of this pipeline for accuracy?
What did the labs teach you that turned out to matter for evaluating the AI-generated code?
What is the value of learning about a computational genomics task before using AI for it — or is there none?