[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-ngs-quality-control":3,"mdc-ofsazw-key":49,"related-org-aws-labs-ngs-quality-control":3510,"related-repo-aws-labs-ngs-quality-control":3690},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":44,"sourceUrl":47,"mdContent":48},"ngs-quality-control","run NGS quality control pipelines","NGS quality control pipeline for short-read sequencing data. Triggers on FastQC, QC, quality control, adapter trimming, coverage, mosdepth, Picard metrics, fastp, MultiQC, sequencing QC, BAM QC, WGS\u002FWES coverage analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aws-labs","AWS Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws-labs.png","awslabs",[13,17,20,23],{"name":14,"slug":15,"type":16},"Data Pipeline","data-pipeline","tag",{"name":18,"slug":19,"type":16},"Bioinformatics","bioinformatics",{"name":21,"slug":22,"type":16},"AWS","aws",{"name":24,"slug":25,"type":16},"Genomics","genomics",4,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fhcls-agent-skills","2026-07-12T08:37:50.555186",null,0,[32,33,34,35,36,37,25,38,39,40,41,42,43],"agent-skills","agentcore","ai-agents","amazon-quick-desktop","claims-processing","drug-discovery","healthcare-ai","kiro","life-sciences","medical-imaging","risk-adjustment","strands-agents",{"repoUrl":27,"stars":26,"forks":30,"topics":45,"description":46},[32,33,34,35,36,37,25,38,39,40,41,42,43],"Agent skills for healthcare and life sciences: genomics, imaging, claims, drug discovery, and more. Works with Amazon Quick, Kiro, Amazon AgentCore, AWS Strands SDK, Claude Code, Codex, and any Agent Skills-compatible platform.","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fhcls-agent-skills\u002Ftree\u002FHEAD\u002Fskills\u002Fngs-quality-control","---\nname: ngs-quality-control\ndescription: NGS quality control pipeline for short-read sequencing data. Triggers on FastQC, QC, quality control, adapter trimming, coverage, mosdepth, Picard metrics, fastp, MultiQC, sequencing QC, BAM QC, WGS\u002FWES coverage analysis.\nusage: Invoke when running QC on short-read sequencing data, including FastQC, adapter trimming, coverage analysis, or MultiQC reporting.\nversion: 1.0.0\nvalidated_against:\n  date: 2025-01-15\n  packages: {fastqc: \"0.12.1\", fastp: \"0.23.4\", mosdepth: \"0.3.8\"}\ntags: [skill, category:pipeline, genomics, quality-control, fastqc, ngs, hcls]\n---\n\n# NGS Quality Control\n\n## Overview\n\nThis skill encodes a reproducible QC workflow for Illumina short-read sequencing data across the full lifecycle: raw reads → trimmed reads → aligned BAMs. It produces deterministic metrics suitable for QC gating in WGS, WES, and targeted panel projects.\n\nPipeline stages:\n\n1. **Raw-read QC** — FastQC per FASTQ, aggregated with MultiQC.\n2. **Adapter\u002Fquality trimming** — fastp with paired-end adapter detection.\n3. **Post-trim QC** — FastQC + MultiQC on trimmed reads.\n4. **Alignment QC** — samtools stats\u002Fflagstat, Picard metric suites.\n5. **Coverage QC** — mosdepth (genome windows or target BED).\n6. **Aggregation** — MultiQC over all tool outputs for a single-HTML summary.\n\n## Usage\n\nAssume `THREADS=8`, `OUT=qc_out`, paired FASTQs `sample_R1.fastq.gz` \u002F `sample_R2.fastq.gz`, coordinate-sorted `sample.bam` with index, reference `ref.fasta`, and (for WES\u002Fpanel) target intervals.\n\n### 1. Raw FASTQ QC — FastQC\n\n```bash\nmkdir -p $OUT\u002Ffastqc_raw\nfastqc -t $THREADS -o $OUT\u002Ffastqc_raw *.fastq.gz\n```\n\nKey FastQC modules to inspect:\n\n- **Per base sequence quality** — Q30 drop-off toward 3′ end indicates trimming need.\n- **Per sequence quality scores** — bimodal distribution flags a failing tile\u002Flane.\n- **Per base sequence content** — first ~12 bp bias is normal (random-hexamer priming); large bias elsewhere flags adapter\u002Fcontamination.\n- **Per sequence GC content** — deviation from expected species GC → contamination or bias.\n- **Sequence Duplication Levels** — high duplication in non-amplicon libraries → library complexity issue.\n- **Overrepresented sequences** — adapter readthrough, rRNA, PhiX carryover.\n- **Adapter Content** — confirms which adapter set to trim.\n\n### 2. Adapter & Quality Trimming — fastp\n\n```bash\nmkdir -p $OUT\u002Ffastp\nfastp \\\n  -i sample_R1.fastq.gz -I sample_R2.fastq.gz \\\n  -o $OUT\u002Ffastp\u002Fsample_R1.trim.fastq.gz -O $OUT\u002Ffastp\u002Fsample_R2.trim.fastq.gz \\\n  --detect_adapter_for_pe \\\n  --thread $THREADS \\\n  --html $OUT\u002Ffastp\u002Fsample.fastp.html \\\n  --json $OUT\u002Ffastp\u002Fsample.fastp.json\n```\n\nUseful additional flags:\n\n- `--qualified_quality_phred 20` — base quality threshold (default 15).\n- `--length_required 50` — drop reads shorter than 50 bp post-trim.\n- `--cut_tail --cut_tail_window_size 4 --cut_tail_mean_quality 20` — sliding window 3′ quality trim.\n- `--dedup` — in-memory PCR duplicate removal (read-pair identity; prefer Picard\u002FMarkDuplicates post-alignment for most workflows).\n\n### 3. Post-trim QC + MultiQC\n\n```bash\nmkdir -p $OUT\u002Ffastqc_trim\nfastqc -t $THREADS -o $OUT\u002Ffastqc_trim $OUT\u002Ffastp\u002F*.trim.fastq.gz\n\nmultiqc $OUT -o $OUT\u002Fmultiqc\n```\n\nMultiQC auto-detects FastQC, fastp, Picard, samtools, and mosdepth outputs in the scanned directory.\n\n### 4. Alignment QC — samtools\n\n```bash\nsamtools flagstat -@ $THREADS sample.bam > $OUT\u002Fsamtools\u002Fsample.flagstat.txt\nsamtools stats    -@ $THREADS sample.bam > $OUT\u002Fsamtools\u002Fsample.stats.txt\nsamtools idxstats sample.bam               > $OUT\u002Fsamtools\u002Fsample.idxstats.txt\n```\n\nPull from `samtools stats`: `raw total sequences`, `reads mapped`, `error rate`, `insert size average`, `insert size standard deviation`.\n\n### 5. Picard Metric Suites\n\nPicard requires a sequence dictionary (`ref.dict`) next to `ref.fasta` (`picard CreateSequenceDictionary R=ref.fasta`) and a Picard-format interval list for hybrid-capture metrics (`.interval_list`, header = BAM `@SQ` lines; **not** a plain BED).\n\n```bash\n# Convert BED → interval_list (required for CollectHsMetrics)\npicard BedToIntervalList \\\n  I=targets.bed O=targets.interval_list SD=ref.dict\n\n# General alignment metrics (all library types)\npicard CollectAlignmentSummaryMetrics \\\n  R=ref.fasta I=sample.bam O=$OUT\u002Fpicard\u002Fsample.alignment_metrics.txt\n\n# Insert size distribution (paired-end)\npicard CollectInsertSizeMetrics \\\n  I=sample.bam O=$OUT\u002Fpicard\u002Fsample.insert_size.txt \\\n  H=$OUT\u002Fpicard\u002Fsample.insert_size.pdf\n\n# WGS coverage metrics\npicard CollectWgsMetrics \\\n  R=ref.fasta I=sample.bam O=$OUT\u002Fpicard\u002Fsample.wgs_metrics.txt\n\n# WES \u002F targeted panel hybrid-selection metrics\npicard CollectHsMetrics \\\n  R=ref.fasta I=sample.bam O=$OUT\u002Fpicard\u002Fsample.hs_metrics.txt \\\n  BAIT_INTERVALS=baits.interval_list \\\n  TARGET_INTERVALS=targets.interval_list\n```\n\n### 6. Coverage — mosdepth\n\n```bash\n# WGS: 500 bp fixed windows\nmosdepth --by 500 --threads $THREADS --fast-mode --no-per-base \\\n  $OUT\u002Fmosdepth\u002Fsample_wgs sample.bam\n\n# WES \u002F panel: per-target coverage\nmosdepth --by targets.bed --threads $THREADS --no-per-base \\\n  $OUT\u002Fmosdepth\u002Fsample_wes sample.bam\n```\n\nOutputs of interest:\n\n- `*.mosdepth.summary.txt` — mean depth per chromosome and total.\n- `*.mosdepth.region.dist.txt` — cumulative fraction of regions at ≥X coverage (use for `% targets ≥20x`).\n- `*.regions.bed.gz` — per-window\u002Fper-target mean depth.\n\nAdd `--quantize 0:1:10:30:` for stratified coverage bins, or `--thresholds 10,20,30,50` to emit per-region pass counts at those depths.\n\n\n## Response Format\n\n- Lead with the command or code the user needs — explain after\n- Structure as: confirm inputs → working code → key parameters explained → gotchas\n- One complete working example per task; do not show every alternative\n- Keep code comments minimal and functional (what, not why-it-exists)\n- Target: 50-100 lines of code with brief surrounding explanation\n\n## Core Concepts\n\n### QC Tool Selection by Sequencing Type\n\n| Sequencing type | Coverage tool | Coverage metric | Picard suite | Key threshold |\n|----------------|--------------|-----------------|--------------|---------------|\n| WGS | mosdepth `--by 500` | CollectWgsMetrics | `PCT_20X ≥ 95%` | Mean ≥ 30× |\n| WES | mosdepth `--by targets.bed` | CollectHsMetrics | `PCT_TARGET_BASES_20X ≥ 80%` | On-target ≥ 60% |\n| Targeted panel | mosdepth `--by targets.bed` | CollectHsMetrics | `PCT_TARGET_BASES_20X ≥ 95%` | Mean ≥ 500× (somatic) |\n| RNA-seq | — (use featureCounts\u002FSTAR logs) | CollectRnaSeqMetrics | `PCT_CODING_BASES` | rRNA \u003C 10% |\n\n**All types:** FastQC (raw + trimmed) → fastp (trim) → samtools flagstat → MultiQC (aggregate).\n\n### Quality encoding detection\n\nModern Illumina (CASAVA ≥1.8, 2011+) emits **Phred+33** (Sanger). Legacy data (Illumina 1.3–1.7, Solexa) used **Phred+64**. Aligners expect Phred+33.\n\n- FastQC reports encoding in `Basic Statistics → Encoding`. Look for `Sanger \u002F Illumina 1.9`.\n- Quick CLI check — inspect the quality-line ASCII range:\n\n  ```bash\n  zcat sample_R1.fastq.gz | head -4000 \\\n    | awk 'NR%4==0' \\\n    | od -An -c | tr -s ' \\n' '\\n' \\\n    | awk 'length==1' | sort -u\n  ```\n\n  Characters in the `!`–`I` range → Phred+33; characters `@`–`h` → Phred+64.\n- Convert legacy data: `seqtk seq -Q64 -V in.fq > out.fq` (shifts +64 → +33).\n\n### Trim parameter intent\n\n- **Adapter trimming** is for read-through into the adapter (insert \u003C read length). `--detect_adapter_for_pe` uses read overlap, which is more reliable than sequence-based detection for paired-end.\n- **Quality trimming** is for 3′ quality decay on 2-channel chemistry (NextSeq\u002FNovaSeq emit poly-G at dark cycles; use `--trim_poly_g` for those platforms — fastp auto-enables it by platform detection).\n- Do not hard-clip fixed lengths unless you know the library design (UMIs, inline barcodes).\n\n### Duplication: optical vs PCR\n\n- `samtools flagstat` \"duplicates\" reflects whatever flag is set in the BAM (usually by Picard MarkDuplicates or samtools markdup). Run MarkDuplicates **after** alignment, not on trimmed FASTQs.\n- `CollectWgsMetrics` \u002F `CollectHsMetrics` report `PCT_EXC_DUPE` — fraction of bases excluded due to duplication. This is the canonical dup rate for coverage-based QC.\n\n### Coverage: mean vs uniformity\n\nMean depth alone is insufficient. Report both:\n\n- **Mean target coverage** (`MEAN_TARGET_COVERAGE` from HsMetrics; `MEAN_COVERAGE` from WgsMetrics).\n- **Coverage breadth** — `% targets ≥20x` \u002F `% genome ≥20x` (`PCT_TARGET_BASES_20X`, `PCT_20X` in Picard; mosdepth `region.dist.txt`).\n\nA panel with mean 200x but only 70% of targets at 20x has a coverage-uniformity problem (capture efficiency, GC bias).\n\n## Quick Reference\n\n### Quality thresholds (typical gating)\n\n| Metric | WGS | WES | Targeted panel | Source |\n| --- | --- | --- | --- | --- |\n| Mean coverage | ≥ 30× | ≥ 50× on-target | ≥ 500× (somatic), ≥ 100× (germline) | WgsMetrics \u002F HsMetrics |\n| Breadth at 20× | ≥ 95% genome | ≥ 80% of targets | ≥ 95% of targets | Picard `PCT_20X` \u002F mosdepth |\n| Breadth at 10× (germline) | ≥ 90% | ≥ 90% of targets | ≥ 98% of targets | Picard `PCT_10X` |\n| Duplicate rate | \u003C 30% | \u003C 40% | \u003C 50% (UMI recommended) | MarkDuplicates \u002F Picard `PCT_EXC_DUPE` |\n| Mapping rate | > 95% | > 95% | > 95% | samtools flagstat \u002F AlignmentSummaryMetrics |\n| Mean base quality | ≥ Q30 across ≥ 80% of bases | same | same | FastQC \u002F fastp |\n| Insert size (PE150) | 300–500 bp, SD \u003C 20% of mean | 150–300 bp | library-specific | CollectInsertSizeMetrics |\n| On-target (capture) | n\u002Fa | ≥ 60% (`PCT_SELECTED_BASES`) | ≥ 70% | CollectHsMetrics |\n| Contamination | \u003C 1% | \u003C 1% | \u003C 1% | VerifyBamID (outside this skill) |\n\n### One-liners\n\n```bash\n# Full raw → trimmed → FastQC → MultiQC\nfastqc -t 8 -o qc\u002Fraw *.fastq.gz && \\\nfastp -i R1.fq.gz -I R2.fq.gz -o R1.trim.fq.gz -O R2.trim.fq.gz \\\n      --detect_adapter_for_pe --thread 8 --html fastp.html --json fastp.json && \\\nfastqc -t 8 -o qc\u002Ftrim *.trim.fq.gz && \\\nmultiqc qc -o qc\u002Fmultiqc\n\n# BAM QC bundle\nsamtools flagstat sample.bam > qc\u002Fsample.flagstat.txt\npicard CollectAlignmentSummaryMetrics R=ref.fasta I=sample.bam O=qc\u002Faln.txt\npicard CollectInsertSizeMetrics I=sample.bam O=qc\u002Fins.txt H=qc\u002Fins.pdf\nmosdepth --by 500 --threads 8 --fast-mode --no-per-base qc\u002Fsample sample.bam\n```\n\n### Tool roles at a glance\n\n| Tool | Input | Primary output | Use for |\n| --- | --- | --- | --- |\n| FastQC | FASTQ | per-file HTML\u002Fzip | raw & post-trim read quality |\n| fastp | FASTQ pair | trimmed FASTQ + JSON\u002FHTML | adapter + quality trimming |\n| samtools stats\u002Fflagstat | BAM | text | mapping counts, error rate |\n| Picard AlignmentSummary | BAM | text | strand balance, PF reads, Q20\u002FQ30 aligned bases |\n| Picard InsertSize | BAM | text + PDF | PE insert distribution |\n| Picard WgsMetrics | BAM | text | WGS coverage + breadth |\n| Picard HsMetrics | BAM | text | WES\u002Fpanel on-target & coverage |\n| mosdepth | BAM | BED + dist | fast windowed \u002F per-target depth |\n| MultiQC | directory | single HTML | cohort aggregation |\n\n## Common Mistakes\n\n- **Wrong:** Running FastQC only after trimming\n  **Right:** Run FastQC on *both* raw and trimmed reads\n  **Why:** Pre-trim QC diagnoses the library; post-trim QC confirms trimming worked without over-clipping\n\n- **Wrong:** Passing a raw BED file to Picard CollectHsMetrics\n  **Right:** Convert to Picard-format `.interval_list` via `picard BedToIntervalList I=x.bed O=x.interval_list SD=ref.dict`\n  **Why:** `BAIT_INTERVALS`\u002F`TARGET_INTERVALS` require `.interval_list` with a full `@SQ` header; a raw BED will fail or silently produce wrong metrics\n\n- **Wrong:** Using interval-list files with mismatched contig names or sort order\n  **Right:** Ensure contig names (`chr1` vs `1`) and `@SQ` ordering match the BAM header exactly\n  **Why:** Mismatches cause silent metric errors or tool failures\n\n- **Wrong:** Running MarkDuplicates on trimmed FASTQs or name-sorted BAMs\n  **Right:** Run MarkDuplicates only on coordinate-sorted, aligned BAMs\n  **Why:** MarkDuplicates requires coordinate-sorted aligned reads to identify optical and PCR duplicates\n\n- **Wrong:** Reporting only mean coverage as the QC metric\n  **Right:** Always pair mean depth with breadth (`% ≥20x`) and duplicate rate\n  **Why:** A high mean with poor uniformity hides failing targets\n\n- **Wrong:** Trusting auto-encoding detection on pre-2012 FASTQ data\n  **Right:** Verify Phred encoding explicitly before alignment for ancient data\n  **Why:** Phred+64 data passed to a modern aligner produces silently wrong base qualities\n\n- **Wrong:** Merging lanes\u002Fsamples before running per-lane QC\n  **Right:** Run FastQC per lane\u002FFASTQ first; merge only after per-lane QC passes\n  **Why:** A single bad lane becomes unidentifiable once merged\n\n- **Wrong:** Using `--dedup` in fastp as the primary deduplication step\n  **Right:** Use Picard MarkDuplicates or `samtools markdup` post-alignment for deduplication\n  **Why:** fastp `--dedup` only catches exact-sequence duplicates pre-alignment, missing alignment-based duplicates\n\n- **Wrong:** Running mosdepth on large genomes without `--no-per-base`\n  **Right:** Always use `--no-per-base` for QC on large genomes\n  **Why:** Per-base output is enormous and rarely needed; windowed\u002Fregion output is sufficient for QC\n\n## References\n\n- FastQC: https:\u002F\u002Fwww.bioinformatics.babraham.ac.uk\u002Fprojects\u002Ffastqc\u002F\n- fastp: Chen et al. Bioinformatics 2018, https:\u002F\u002Fdoi.org\u002F10.1093\u002Fbioinformatics\u002Fbty560\n- Picard: https:\u002F\u002Fbroadinstitute.github.io\u002Fpicard\u002F\n- mosdepth: Pedersen & Quinlan, Bioinformatics 2018, https:\u002F\u002Fdoi.org\u002F10.1093\u002Fbioinformatics\u002Fbtx699\n- Coverage recommendations: Sims et al. Nat Rev Genet 2014, https:\u002F\u002Fdoi.org\u002F10.1038\u002Fnrg3642\n",{"data":50,"body":66},{"name":4,"description":6,"usage":51,"version":52,"validated_against":53,"tags":59},"Invoke when running QC on short-read sequencing data, including FastQC, adapter trimming, coverage analysis, or MultiQC reporting.","1.0.0",{"date":54,"packages":55},"2025-01-15",{"fastqc":56,"fastp":57,"mosdepth":58},"0.12.1","0.23.4","0.3.8",[60,61,25,62,63,64,65],"skill","category:pipeline","quality-control","fastqc","ngs","hcls",{"type":67,"children":68},"root",[69,77,84,90,95,161,167,221,228,310,315,389,395,565,570,617,623,732,737,743,860,909,915,966,1297,1303,1442,1447,1491,1512,1518,1546,1552,1558,1743,1753,1759,1778,2030,2036,2080,2086,2131,2137,2142,2215,2220,2226,2232,2537,2543,2887,2893,3121,3127,3438,3444,3504],{"type":70,"tag":71,"props":72,"children":73},"element","h1",{"id":4},[74],{"type":75,"value":76},"text","NGS Quality Control",{"type":70,"tag":78,"props":79,"children":81},"h2",{"id":80},"overview",[82],{"type":75,"value":83},"Overview",{"type":70,"tag":85,"props":86,"children":87},"p",{},[88],{"type":75,"value":89},"This skill encodes a reproducible QC workflow for Illumina short-read sequencing data across the full lifecycle: raw reads → trimmed reads → aligned BAMs. It produces deterministic metrics suitable for QC gating in WGS, WES, and targeted panel projects.",{"type":70,"tag":85,"props":91,"children":92},{},[93],{"type":75,"value":94},"Pipeline stages:",{"type":70,"tag":96,"props":97,"children":98},"ol",{},[99,111,121,131,141,151],{"type":70,"tag":100,"props":101,"children":102},"li",{},[103,109],{"type":70,"tag":104,"props":105,"children":106},"strong",{},[107],{"type":75,"value":108},"Raw-read QC",{"type":75,"value":110}," — FastQC per FASTQ, aggregated with MultiQC.",{"type":70,"tag":100,"props":112,"children":113},{},[114,119],{"type":70,"tag":104,"props":115,"children":116},{},[117],{"type":75,"value":118},"Adapter\u002Fquality trimming",{"type":75,"value":120}," — fastp with paired-end adapter detection.",{"type":70,"tag":100,"props":122,"children":123},{},[124,129],{"type":70,"tag":104,"props":125,"children":126},{},[127],{"type":75,"value":128},"Post-trim QC",{"type":75,"value":130}," — FastQC + MultiQC on trimmed reads.",{"type":70,"tag":100,"props":132,"children":133},{},[134,139],{"type":70,"tag":104,"props":135,"children":136},{},[137],{"type":75,"value":138},"Alignment QC",{"type":75,"value":140}," — samtools stats\u002Fflagstat, Picard metric suites.",{"type":70,"tag":100,"props":142,"children":143},{},[144,149],{"type":70,"tag":104,"props":145,"children":146},{},[147],{"type":75,"value":148},"Coverage QC",{"type":75,"value":150}," — mosdepth (genome windows or target BED).",{"type":70,"tag":100,"props":152,"children":153},{},[154,159],{"type":70,"tag":104,"props":155,"children":156},{},[157],{"type":75,"value":158},"Aggregation",{"type":75,"value":160}," — MultiQC over all tool outputs for a single-HTML summary.",{"type":70,"tag":78,"props":162,"children":164},{"id":163},"usage",[165],{"type":75,"value":166},"Usage",{"type":70,"tag":85,"props":168,"children":169},{},[170,172,179,181,187,189,195,197,203,205,211,213,219],{"type":75,"value":171},"Assume ",{"type":70,"tag":173,"props":174,"children":176},"code",{"className":175},[],[177],{"type":75,"value":178},"THREADS=8",{"type":75,"value":180},", ",{"type":70,"tag":173,"props":182,"children":184},{"className":183},[],[185],{"type":75,"value":186},"OUT=qc_out",{"type":75,"value":188},", paired FASTQs ",{"type":70,"tag":173,"props":190,"children":192},{"className":191},[],[193],{"type":75,"value":194},"sample_R1.fastq.gz",{"type":75,"value":196}," \u002F ",{"type":70,"tag":173,"props":198,"children":200},{"className":199},[],[201],{"type":75,"value":202},"sample_R2.fastq.gz",{"type":75,"value":204},", coordinate-sorted ",{"type":70,"tag":173,"props":206,"children":208},{"className":207},[],[209],{"type":75,"value":210},"sample.bam",{"type":75,"value":212}," with index, reference ",{"type":70,"tag":173,"props":214,"children":216},{"className":215},[],[217],{"type":75,"value":218},"ref.fasta",{"type":75,"value":220},", and (for WES\u002Fpanel) target intervals.",{"type":70,"tag":222,"props":223,"children":225},"h3",{"id":224},"_1-raw-fastq-qc-fastqc",[226],{"type":75,"value":227},"1. Raw FASTQ QC — FastQC",{"type":70,"tag":229,"props":230,"children":235},"pre",{"className":231,"code":232,"language":233,"meta":234,"style":234},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","mkdir -p $OUT\u002Ffastqc_raw\nfastqc -t $THREADS -o $OUT\u002Ffastqc_raw *.fastq.gz\n","bash","",[236],{"type":70,"tag":173,"props":237,"children":238},{"__ignoreMap":234},[239,268],{"type":70,"tag":240,"props":241,"children":244},"span",{"class":242,"line":243},"line",1,[245,251,257,263],{"type":70,"tag":240,"props":246,"children":248},{"style":247},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[249],{"type":75,"value":250},"mkdir",{"type":70,"tag":240,"props":252,"children":254},{"style":253},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[255],{"type":75,"value":256}," -p",{"type":70,"tag":240,"props":258,"children":260},{"style":259},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[261],{"type":75,"value":262}," $OUT",{"type":70,"tag":240,"props":264,"children":265},{"style":253},[266],{"type":75,"value":267},"\u002Ffastqc_raw\n",{"type":70,"tag":240,"props":269,"children":271},{"class":242,"line":270},2,[272,276,281,286,291,295,300,305],{"type":70,"tag":240,"props":273,"children":274},{"style":247},[275],{"type":75,"value":63},{"type":70,"tag":240,"props":277,"children":278},{"style":253},[279],{"type":75,"value":280}," -t",{"type":70,"tag":240,"props":282,"children":283},{"style":259},[284],{"type":75,"value":285}," $THREADS ",{"type":70,"tag":240,"props":287,"children":288},{"style":253},[289],{"type":75,"value":290},"-o",{"type":70,"tag":240,"props":292,"children":293},{"style":259},[294],{"type":75,"value":262},{"type":70,"tag":240,"props":296,"children":297},{"style":253},[298],{"type":75,"value":299},"\u002Ffastqc_raw",{"type":70,"tag":240,"props":301,"children":302},{"style":259},[303],{"type":75,"value":304}," *",{"type":70,"tag":240,"props":306,"children":307},{"style":253},[308],{"type":75,"value":309},".fastq.gz\n",{"type":70,"tag":85,"props":311,"children":312},{},[313],{"type":75,"value":314},"Key FastQC modules to inspect:",{"type":70,"tag":316,"props":317,"children":318},"ul",{},[319,329,339,349,359,369,379],{"type":70,"tag":100,"props":320,"children":321},{},[322,327],{"type":70,"tag":104,"props":323,"children":324},{},[325],{"type":75,"value":326},"Per base sequence quality",{"type":75,"value":328}," — Q30 drop-off toward 3′ end indicates trimming need.",{"type":70,"tag":100,"props":330,"children":331},{},[332,337],{"type":70,"tag":104,"props":333,"children":334},{},[335],{"type":75,"value":336},"Per sequence quality scores",{"type":75,"value":338}," — bimodal distribution flags a failing tile\u002Flane.",{"type":70,"tag":100,"props":340,"children":341},{},[342,347],{"type":70,"tag":104,"props":343,"children":344},{},[345],{"type":75,"value":346},"Per base sequence content",{"type":75,"value":348}," — first ~12 bp bias is normal (random-hexamer priming); large bias elsewhere flags adapter\u002Fcontamination.",{"type":70,"tag":100,"props":350,"children":351},{},[352,357],{"type":70,"tag":104,"props":353,"children":354},{},[355],{"type":75,"value":356},"Per sequence GC content",{"type":75,"value":358}," — deviation from expected species GC → contamination or bias.",{"type":70,"tag":100,"props":360,"children":361},{},[362,367],{"type":70,"tag":104,"props":363,"children":364},{},[365],{"type":75,"value":366},"Sequence Duplication Levels",{"type":75,"value":368}," — high duplication in non-amplicon libraries → library complexity issue.",{"type":70,"tag":100,"props":370,"children":371},{},[372,377],{"type":70,"tag":104,"props":373,"children":374},{},[375],{"type":75,"value":376},"Overrepresented sequences",{"type":75,"value":378}," — adapter readthrough, rRNA, PhiX carryover.",{"type":70,"tag":100,"props":380,"children":381},{},[382,387],{"type":70,"tag":104,"props":383,"children":384},{},[385],{"type":75,"value":386},"Adapter Content",{"type":75,"value":388}," — confirms which adapter set to trim.",{"type":70,"tag":222,"props":390,"children":392},{"id":391},"_2-adapter-quality-trimming-fastp",[393],{"type":75,"value":394},"2. Adapter & Quality Trimming — fastp",{"type":70,"tag":229,"props":396,"children":398},{"className":231,"code":397,"language":233,"meta":234,"style":234},"mkdir -p $OUT\u002Ffastp\nfastp \\\n  -i sample_R1.fastq.gz -I sample_R2.fastq.gz \\\n  -o $OUT\u002Ffastp\u002Fsample_R1.trim.fastq.gz -O $OUT\u002Ffastp\u002Fsample_R2.trim.fastq.gz \\\n  --detect_adapter_for_pe \\\n  --thread $THREADS \\\n  --html $OUT\u002Ffastp\u002Fsample.fastp.html \\\n  --json $OUT\u002Ffastp\u002Fsample.fastp.json\n",[399],{"type":70,"tag":173,"props":400,"children":401},{"__ignoreMap":234},[402,422,435,463,498,511,525,547],{"type":70,"tag":240,"props":403,"children":404},{"class":242,"line":243},[405,409,413,417],{"type":70,"tag":240,"props":406,"children":407},{"style":247},[408],{"type":75,"value":250},{"type":70,"tag":240,"props":410,"children":411},{"style":253},[412],{"type":75,"value":256},{"type":70,"tag":240,"props":414,"children":415},{"style":259},[416],{"type":75,"value":262},{"type":70,"tag":240,"props":418,"children":419},{"style":253},[420],{"type":75,"value":421},"\u002Ffastp\n",{"type":70,"tag":240,"props":423,"children":424},{"class":242,"line":270},[425,430],{"type":70,"tag":240,"props":426,"children":427},{"style":247},[428],{"type":75,"value":429},"fastp",{"type":70,"tag":240,"props":431,"children":432},{"style":259},[433],{"type":75,"value":434}," \\\n",{"type":70,"tag":240,"props":436,"children":438},{"class":242,"line":437},3,[439,444,449,454,459],{"type":70,"tag":240,"props":440,"children":441},{"style":253},[442],{"type":75,"value":443},"  -i",{"type":70,"tag":240,"props":445,"children":446},{"style":253},[447],{"type":75,"value":448}," sample_R1.fastq.gz",{"type":70,"tag":240,"props":450,"children":451},{"style":253},[452],{"type":75,"value":453}," -I",{"type":70,"tag":240,"props":455,"children":456},{"style":253},[457],{"type":75,"value":458}," sample_R2.fastq.gz",{"type":70,"tag":240,"props":460,"children":461},{"style":259},[462],{"type":75,"value":434},{"type":70,"tag":240,"props":464,"children":465},{"class":242,"line":26},[466,471,475,480,485,489,494],{"type":70,"tag":240,"props":467,"children":468},{"style":253},[469],{"type":75,"value":470},"  -o",{"type":70,"tag":240,"props":472,"children":473},{"style":259},[474],{"type":75,"value":262},{"type":70,"tag":240,"props":476,"children":477},{"style":253},[478],{"type":75,"value":479},"\u002Ffastp\u002Fsample_R1.trim.fastq.gz",{"type":70,"tag":240,"props":481,"children":482},{"style":253},[483],{"type":75,"value":484}," -O",{"type":70,"tag":240,"props":486,"children":487},{"style":259},[488],{"type":75,"value":262},{"type":70,"tag":240,"props":490,"children":491},{"style":253},[492],{"type":75,"value":493},"\u002Ffastp\u002Fsample_R2.trim.fastq.gz",{"type":70,"tag":240,"props":495,"children":496},{"style":259},[497],{"type":75,"value":434},{"type":70,"tag":240,"props":499,"children":501},{"class":242,"line":500},5,[502,507],{"type":70,"tag":240,"props":503,"children":504},{"style":253},[505],{"type":75,"value":506},"  --detect_adapter_for_pe",{"type":70,"tag":240,"props":508,"children":509},{"style":259},[510],{"type":75,"value":434},{"type":70,"tag":240,"props":512,"children":514},{"class":242,"line":513},6,[515,520],{"type":70,"tag":240,"props":516,"children":517},{"style":253},[518],{"type":75,"value":519},"  --thread",{"type":70,"tag":240,"props":521,"children":522},{"style":259},[523],{"type":75,"value":524}," $THREADS \\\n",{"type":70,"tag":240,"props":526,"children":528},{"class":242,"line":527},7,[529,534,538,543],{"type":70,"tag":240,"props":530,"children":531},{"style":253},[532],{"type":75,"value":533},"  --html",{"type":70,"tag":240,"props":535,"children":536},{"style":259},[537],{"type":75,"value":262},{"type":70,"tag":240,"props":539,"children":540},{"style":253},[541],{"type":75,"value":542},"\u002Ffastp\u002Fsample.fastp.html",{"type":70,"tag":240,"props":544,"children":545},{"style":259},[546],{"type":75,"value":434},{"type":70,"tag":240,"props":548,"children":550},{"class":242,"line":549},8,[551,556,560],{"type":70,"tag":240,"props":552,"children":553},{"style":253},[554],{"type":75,"value":555},"  --json",{"type":70,"tag":240,"props":557,"children":558},{"style":259},[559],{"type":75,"value":262},{"type":70,"tag":240,"props":561,"children":562},{"style":253},[563],{"type":75,"value":564},"\u002Ffastp\u002Fsample.fastp.json\n",{"type":70,"tag":85,"props":566,"children":567},{},[568],{"type":75,"value":569},"Useful additional flags:",{"type":70,"tag":316,"props":571,"children":572},{},[573,584,595,606],{"type":70,"tag":100,"props":574,"children":575},{},[576,582],{"type":70,"tag":173,"props":577,"children":579},{"className":578},[],[580],{"type":75,"value":581},"--qualified_quality_phred 20",{"type":75,"value":583}," — base quality threshold (default 15).",{"type":70,"tag":100,"props":585,"children":586},{},[587,593],{"type":70,"tag":173,"props":588,"children":590},{"className":589},[],[591],{"type":75,"value":592},"--length_required 50",{"type":75,"value":594}," — drop reads shorter than 50 bp post-trim.",{"type":70,"tag":100,"props":596,"children":597},{},[598,604],{"type":70,"tag":173,"props":599,"children":601},{"className":600},[],[602],{"type":75,"value":603},"--cut_tail --cut_tail_window_size 4 --cut_tail_mean_quality 20",{"type":75,"value":605}," — sliding window 3′ quality trim.",{"type":70,"tag":100,"props":607,"children":608},{},[609,615],{"type":70,"tag":173,"props":610,"children":612},{"className":611},[],[613],{"type":75,"value":614},"--dedup",{"type":75,"value":616}," — in-memory PCR duplicate removal (read-pair identity; prefer Picard\u002FMarkDuplicates post-alignment for most workflows).",{"type":70,"tag":222,"props":618,"children":620},{"id":619},"_3-post-trim-qc-multiqc",[621],{"type":75,"value":622},"3. Post-trim QC + MultiQC",{"type":70,"tag":229,"props":624,"children":626},{"className":231,"code":625,"language":233,"meta":234,"style":234},"mkdir -p $OUT\u002Ffastqc_trim\nfastqc -t $THREADS -o $OUT\u002Ffastqc_trim $OUT\u002Ffastp\u002F*.trim.fastq.gz\n\nmultiqc $OUT -o $OUT\u002Fmultiqc\n",[627],{"type":70,"tag":173,"props":628,"children":629},{"__ignoreMap":234},[630,650,697,706],{"type":70,"tag":240,"props":631,"children":632},{"class":242,"line":243},[633,637,641,645],{"type":70,"tag":240,"props":634,"children":635},{"style":247},[636],{"type":75,"value":250},{"type":70,"tag":240,"props":638,"children":639},{"style":253},[640],{"type":75,"value":256},{"type":70,"tag":240,"props":642,"children":643},{"style":259},[644],{"type":75,"value":262},{"type":70,"tag":240,"props":646,"children":647},{"style":253},[648],{"type":75,"value":649},"\u002Ffastqc_trim\n",{"type":70,"tag":240,"props":651,"children":652},{"class":242,"line":270},[653,657,661,665,669,673,678,682,687,692],{"type":70,"tag":240,"props":654,"children":655},{"style":247},[656],{"type":75,"value":63},{"type":70,"tag":240,"props":658,"children":659},{"style":253},[660],{"type":75,"value":280},{"type":70,"tag":240,"props":662,"children":663},{"style":259},[664],{"type":75,"value":285},{"type":70,"tag":240,"props":666,"children":667},{"style":253},[668],{"type":75,"value":290},{"type":70,"tag":240,"props":670,"children":671},{"style":259},[672],{"type":75,"value":262},{"type":70,"tag":240,"props":674,"children":675},{"style":253},[676],{"type":75,"value":677},"\u002Ffastqc_trim",{"type":70,"tag":240,"props":679,"children":680},{"style":259},[681],{"type":75,"value":262},{"type":70,"tag":240,"props":683,"children":684},{"style":253},[685],{"type":75,"value":686},"\u002Ffastp\u002F",{"type":70,"tag":240,"props":688,"children":689},{"style":259},[690],{"type":75,"value":691},"*",{"type":70,"tag":240,"props":693,"children":694},{"style":253},[695],{"type":75,"value":696},".trim.fastq.gz\n",{"type":70,"tag":240,"props":698,"children":699},{"class":242,"line":437},[700],{"type":70,"tag":240,"props":701,"children":703},{"emptyLinePlaceholder":702},true,[704],{"type":75,"value":705},"\n",{"type":70,"tag":240,"props":707,"children":708},{"class":242,"line":26},[709,714,719,723,727],{"type":70,"tag":240,"props":710,"children":711},{"style":247},[712],{"type":75,"value":713},"multiqc",{"type":70,"tag":240,"props":715,"children":716},{"style":259},[717],{"type":75,"value":718}," $OUT ",{"type":70,"tag":240,"props":720,"children":721},{"style":253},[722],{"type":75,"value":290},{"type":70,"tag":240,"props":724,"children":725},{"style":259},[726],{"type":75,"value":262},{"type":70,"tag":240,"props":728,"children":729},{"style":253},[730],{"type":75,"value":731},"\u002Fmultiqc\n",{"type":70,"tag":85,"props":733,"children":734},{},[735],{"type":75,"value":736},"MultiQC auto-detects FastQC, fastp, Picard, samtools, and mosdepth outputs in the scanned directory.",{"type":70,"tag":222,"props":738,"children":740},{"id":739},"_4-alignment-qc-samtools",[741],{"type":75,"value":742},"4. Alignment QC — samtools",{"type":70,"tag":229,"props":744,"children":746},{"className":231,"code":745,"language":233,"meta":234,"style":234},"samtools flagstat -@ $THREADS sample.bam > $OUT\u002Fsamtools\u002Fsample.flagstat.txt\nsamtools stats    -@ $THREADS sample.bam > $OUT\u002Fsamtools\u002Fsample.stats.txt\nsamtools idxstats sample.bam               > $OUT\u002Fsamtools\u002Fsample.idxstats.txt\n",[747],{"type":70,"tag":173,"props":748,"children":749},{"__ignoreMap":234},[750,791,829],{"type":70,"tag":240,"props":751,"children":752},{"class":242,"line":243},[753,758,763,768,772,776,782,786],{"type":70,"tag":240,"props":754,"children":755},{"style":247},[756],{"type":75,"value":757},"samtools",{"type":70,"tag":240,"props":759,"children":760},{"style":253},[761],{"type":75,"value":762}," flagstat",{"type":70,"tag":240,"props":764,"children":765},{"style":253},[766],{"type":75,"value":767}," -@",{"type":70,"tag":240,"props":769,"children":770},{"style":259},[771],{"type":75,"value":285},{"type":70,"tag":240,"props":773,"children":774},{"style":253},[775],{"type":75,"value":210},{"type":70,"tag":240,"props":777,"children":779},{"style":778},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[780],{"type":75,"value":781}," >",{"type":70,"tag":240,"props":783,"children":784},{"style":259},[785],{"type":75,"value":262},{"type":70,"tag":240,"props":787,"children":788},{"style":253},[789],{"type":75,"value":790},"\u002Fsamtools\u002Fsample.flagstat.txt\n",{"type":70,"tag":240,"props":792,"children":793},{"class":242,"line":270},[794,798,803,808,812,816,820,824],{"type":70,"tag":240,"props":795,"children":796},{"style":247},[797],{"type":75,"value":757},{"type":70,"tag":240,"props":799,"children":800},{"style":253},[801],{"type":75,"value":802}," stats",{"type":70,"tag":240,"props":804,"children":805},{"style":253},[806],{"type":75,"value":807},"    -@",{"type":70,"tag":240,"props":809,"children":810},{"style":259},[811],{"type":75,"value":285},{"type":70,"tag":240,"props":813,"children":814},{"style":253},[815],{"type":75,"value":210},{"type":70,"tag":240,"props":817,"children":818},{"style":778},[819],{"type":75,"value":781},{"type":70,"tag":240,"props":821,"children":822},{"style":259},[823],{"type":75,"value":262},{"type":70,"tag":240,"props":825,"children":826},{"style":253},[827],{"type":75,"value":828},"\u002Fsamtools\u002Fsample.stats.txt\n",{"type":70,"tag":240,"props":830,"children":831},{"class":242,"line":437},[832,836,841,846,851,855],{"type":70,"tag":240,"props":833,"children":834},{"style":247},[835],{"type":75,"value":757},{"type":70,"tag":240,"props":837,"children":838},{"style":253},[839],{"type":75,"value":840}," idxstats",{"type":70,"tag":240,"props":842,"children":843},{"style":253},[844],{"type":75,"value":845}," sample.bam",{"type":70,"tag":240,"props":847,"children":848},{"style":778},[849],{"type":75,"value":850},"               >",{"type":70,"tag":240,"props":852,"children":853},{"style":259},[854],{"type":75,"value":262},{"type":70,"tag":240,"props":856,"children":857},{"style":253},[858],{"type":75,"value":859},"\u002Fsamtools\u002Fsample.idxstats.txt\n",{"type":70,"tag":85,"props":861,"children":862},{},[863,865,871,873,879,880,886,887,893,894,900,901,907],{"type":75,"value":864},"Pull from ",{"type":70,"tag":173,"props":866,"children":868},{"className":867},[],[869],{"type":75,"value":870},"samtools stats",{"type":75,"value":872},": ",{"type":70,"tag":173,"props":874,"children":876},{"className":875},[],[877],{"type":75,"value":878},"raw total sequences",{"type":75,"value":180},{"type":70,"tag":173,"props":881,"children":883},{"className":882},[],[884],{"type":75,"value":885},"reads mapped",{"type":75,"value":180},{"type":70,"tag":173,"props":888,"children":890},{"className":889},[],[891],{"type":75,"value":892},"error rate",{"type":75,"value":180},{"type":70,"tag":173,"props":895,"children":897},{"className":896},[],[898],{"type":75,"value":899},"insert size average",{"type":75,"value":180},{"type":70,"tag":173,"props":902,"children":904},{"className":903},[],[905],{"type":75,"value":906},"insert size standard deviation",{"type":75,"value":908},".",{"type":70,"tag":222,"props":910,"children":912},{"id":911},"_5-picard-metric-suites",[913],{"type":75,"value":914},"5. Picard Metric Suites",{"type":70,"tag":85,"props":916,"children":917},{},[918,920,926,928,933,935,941,943,949,951,957,959,964],{"type":75,"value":919},"Picard requires a sequence dictionary (",{"type":70,"tag":173,"props":921,"children":923},{"className":922},[],[924],{"type":75,"value":925},"ref.dict",{"type":75,"value":927},") next to ",{"type":70,"tag":173,"props":929,"children":931},{"className":930},[],[932],{"type":75,"value":218},{"type":75,"value":934}," (",{"type":70,"tag":173,"props":936,"children":938},{"className":937},[],[939],{"type":75,"value":940},"picard CreateSequenceDictionary R=ref.fasta",{"type":75,"value":942},") and a Picard-format interval list for hybrid-capture metrics (",{"type":70,"tag":173,"props":944,"children":946},{"className":945},[],[947],{"type":75,"value":948},".interval_list",{"type":75,"value":950},", header = BAM ",{"type":70,"tag":173,"props":952,"children":954},{"className":953},[],[955],{"type":75,"value":956},"@SQ",{"type":75,"value":958}," lines; ",{"type":70,"tag":104,"props":960,"children":961},{},[962],{"type":75,"value":963},"not",{"type":75,"value":965}," a plain BED).",{"type":70,"tag":229,"props":967,"children":969},{"className":231,"code":968,"language":233,"meta":234,"style":234},"# Convert BED → interval_list (required for CollectHsMetrics)\npicard BedToIntervalList \\\n  I=targets.bed O=targets.interval_list SD=ref.dict\n\n# General alignment metrics (all library types)\npicard CollectAlignmentSummaryMetrics \\\n  R=ref.fasta I=sample.bam O=$OUT\u002Fpicard\u002Fsample.alignment_metrics.txt\n\n# Insert size distribution (paired-end)\npicard CollectInsertSizeMetrics \\\n  I=sample.bam O=$OUT\u002Fpicard\u002Fsample.insert_size.txt \\\n  H=$OUT\u002Fpicard\u002Fsample.insert_size.pdf\n\n# WGS coverage metrics\npicard CollectWgsMetrics \\\n  R=ref.fasta I=sample.bam O=$OUT\u002Fpicard\u002Fsample.wgs_metrics.txt\n\n# WES \u002F targeted panel hybrid-selection metrics\npicard CollectHsMetrics \\\n  R=ref.fasta I=sample.bam O=$OUT\u002Fpicard\u002Fsample.hs_metrics.txt \\\n  BAIT_INTERVALS=baits.interval_list \\\n  TARGET_INTERVALS=targets.interval_list\n",[970],{"type":70,"tag":173,"props":971,"children":972},{"__ignoreMap":234},[973,982,999,1017,1024,1032,1048,1076,1083,1092,1109,1135,1153,1161,1170,1187,1212,1220,1229,1246,1275,1288],{"type":70,"tag":240,"props":974,"children":975},{"class":242,"line":243},[976],{"type":70,"tag":240,"props":977,"children":979},{"style":978},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[980],{"type":75,"value":981},"# Convert BED → interval_list (required for CollectHsMetrics)\n",{"type":70,"tag":240,"props":983,"children":984},{"class":242,"line":270},[985,990,995],{"type":70,"tag":240,"props":986,"children":987},{"style":247},[988],{"type":75,"value":989},"picard",{"type":70,"tag":240,"props":991,"children":992},{"style":253},[993],{"type":75,"value":994}," BedToIntervalList",{"type":70,"tag":240,"props":996,"children":997},{"style":259},[998],{"type":75,"value":434},{"type":70,"tag":240,"props":1000,"children":1001},{"class":242,"line":437},[1002,1007,1012],{"type":70,"tag":240,"props":1003,"children":1004},{"style":253},[1005],{"type":75,"value":1006},"  I=targets.bed",{"type":70,"tag":240,"props":1008,"children":1009},{"style":253},[1010],{"type":75,"value":1011}," O=targets.interval_list",{"type":70,"tag":240,"props":1013,"children":1014},{"style":253},[1015],{"type":75,"value":1016}," SD=ref.dict\n",{"type":70,"tag":240,"props":1018,"children":1019},{"class":242,"line":26},[1020],{"type":70,"tag":240,"props":1021,"children":1022},{"emptyLinePlaceholder":702},[1023],{"type":75,"value":705},{"type":70,"tag":240,"props":1025,"children":1026},{"class":242,"line":500},[1027],{"type":70,"tag":240,"props":1028,"children":1029},{"style":978},[1030],{"type":75,"value":1031},"# General alignment metrics (all library types)\n",{"type":70,"tag":240,"props":1033,"children":1034},{"class":242,"line":513},[1035,1039,1044],{"type":70,"tag":240,"props":1036,"children":1037},{"style":247},[1038],{"type":75,"value":989},{"type":70,"tag":240,"props":1040,"children":1041},{"style":253},[1042],{"type":75,"value":1043}," CollectAlignmentSummaryMetrics",{"type":70,"tag":240,"props":1045,"children":1046},{"style":259},[1047],{"type":75,"value":434},{"type":70,"tag":240,"props":1049,"children":1050},{"class":242,"line":527},[1051,1056,1061,1066,1071],{"type":70,"tag":240,"props":1052,"children":1053},{"style":253},[1054],{"type":75,"value":1055},"  R=ref.fasta",{"type":70,"tag":240,"props":1057,"children":1058},{"style":253},[1059],{"type":75,"value":1060}," I=sample.bam",{"type":70,"tag":240,"props":1062,"children":1063},{"style":253},[1064],{"type":75,"value":1065}," O=",{"type":70,"tag":240,"props":1067,"children":1068},{"style":259},[1069],{"type":75,"value":1070},"$OUT",{"type":70,"tag":240,"props":1072,"children":1073},{"style":253},[1074],{"type":75,"value":1075},"\u002Fpicard\u002Fsample.alignment_metrics.txt\n",{"type":70,"tag":240,"props":1077,"children":1078},{"class":242,"line":549},[1079],{"type":70,"tag":240,"props":1080,"children":1081},{"emptyLinePlaceholder":702},[1082],{"type":75,"value":705},{"type":70,"tag":240,"props":1084,"children":1086},{"class":242,"line":1085},9,[1087],{"type":70,"tag":240,"props":1088,"children":1089},{"style":978},[1090],{"type":75,"value":1091},"# Insert size distribution (paired-end)\n",{"type":70,"tag":240,"props":1093,"children":1095},{"class":242,"line":1094},10,[1096,1100,1105],{"type":70,"tag":240,"props":1097,"children":1098},{"style":247},[1099],{"type":75,"value":989},{"type":70,"tag":240,"props":1101,"children":1102},{"style":253},[1103],{"type":75,"value":1104}," CollectInsertSizeMetrics",{"type":70,"tag":240,"props":1106,"children":1107},{"style":259},[1108],{"type":75,"value":434},{"type":70,"tag":240,"props":1110,"children":1112},{"class":242,"line":1111},11,[1113,1118,1122,1126,1131],{"type":70,"tag":240,"props":1114,"children":1115},{"style":253},[1116],{"type":75,"value":1117},"  I=sample.bam",{"type":70,"tag":240,"props":1119,"children":1120},{"style":253},[1121],{"type":75,"value":1065},{"type":70,"tag":240,"props":1123,"children":1124},{"style":259},[1125],{"type":75,"value":1070},{"type":70,"tag":240,"props":1127,"children":1128},{"style":253},[1129],{"type":75,"value":1130},"\u002Fpicard\u002Fsample.insert_size.txt",{"type":70,"tag":240,"props":1132,"children":1133},{"style":259},[1134],{"type":75,"value":434},{"type":70,"tag":240,"props":1136,"children":1138},{"class":242,"line":1137},12,[1139,1144,1148],{"type":70,"tag":240,"props":1140,"children":1141},{"style":253},[1142],{"type":75,"value":1143},"  H=",{"type":70,"tag":240,"props":1145,"children":1146},{"style":259},[1147],{"type":75,"value":1070},{"type":70,"tag":240,"props":1149,"children":1150},{"style":253},[1151],{"type":75,"value":1152},"\u002Fpicard\u002Fsample.insert_size.pdf\n",{"type":70,"tag":240,"props":1154,"children":1156},{"class":242,"line":1155},13,[1157],{"type":70,"tag":240,"props":1158,"children":1159},{"emptyLinePlaceholder":702},[1160],{"type":75,"value":705},{"type":70,"tag":240,"props":1162,"children":1164},{"class":242,"line":1163},14,[1165],{"type":70,"tag":240,"props":1166,"children":1167},{"style":978},[1168],{"type":75,"value":1169},"# WGS coverage metrics\n",{"type":70,"tag":240,"props":1171,"children":1173},{"class":242,"line":1172},15,[1174,1178,1183],{"type":70,"tag":240,"props":1175,"children":1176},{"style":247},[1177],{"type":75,"value":989},{"type":70,"tag":240,"props":1179,"children":1180},{"style":253},[1181],{"type":75,"value":1182}," CollectWgsMetrics",{"type":70,"tag":240,"props":1184,"children":1185},{"style":259},[1186],{"type":75,"value":434},{"type":70,"tag":240,"props":1188,"children":1190},{"class":242,"line":1189},16,[1191,1195,1199,1203,1207],{"type":70,"tag":240,"props":1192,"children":1193},{"style":253},[1194],{"type":75,"value":1055},{"type":70,"tag":240,"props":1196,"children":1197},{"style":253},[1198],{"type":75,"value":1060},{"type":70,"tag":240,"props":1200,"children":1201},{"style":253},[1202],{"type":75,"value":1065},{"type":70,"tag":240,"props":1204,"children":1205},{"style":259},[1206],{"type":75,"value":1070},{"type":70,"tag":240,"props":1208,"children":1209},{"style":253},[1210],{"type":75,"value":1211},"\u002Fpicard\u002Fsample.wgs_metrics.txt\n",{"type":70,"tag":240,"props":1213,"children":1215},{"class":242,"line":1214},17,[1216],{"type":70,"tag":240,"props":1217,"children":1218},{"emptyLinePlaceholder":702},[1219],{"type":75,"value":705},{"type":70,"tag":240,"props":1221,"children":1223},{"class":242,"line":1222},18,[1224],{"type":70,"tag":240,"props":1225,"children":1226},{"style":978},[1227],{"type":75,"value":1228},"# WES \u002F targeted panel hybrid-selection metrics\n",{"type":70,"tag":240,"props":1230,"children":1232},{"class":242,"line":1231},19,[1233,1237,1242],{"type":70,"tag":240,"props":1234,"children":1235},{"style":247},[1236],{"type":75,"value":989},{"type":70,"tag":240,"props":1238,"children":1239},{"style":253},[1240],{"type":75,"value":1241}," CollectHsMetrics",{"type":70,"tag":240,"props":1243,"children":1244},{"style":259},[1245],{"type":75,"value":434},{"type":70,"tag":240,"props":1247,"children":1249},{"class":242,"line":1248},20,[1250,1254,1258,1262,1266,1271],{"type":70,"tag":240,"props":1251,"children":1252},{"style":253},[1253],{"type":75,"value":1055},{"type":70,"tag":240,"props":1255,"children":1256},{"style":253},[1257],{"type":75,"value":1060},{"type":70,"tag":240,"props":1259,"children":1260},{"style":253},[1261],{"type":75,"value":1065},{"type":70,"tag":240,"props":1263,"children":1264},{"style":259},[1265],{"type":75,"value":1070},{"type":70,"tag":240,"props":1267,"children":1268},{"style":253},[1269],{"type":75,"value":1270},"\u002Fpicard\u002Fsample.hs_metrics.txt",{"type":70,"tag":240,"props":1272,"children":1273},{"style":259},[1274],{"type":75,"value":434},{"type":70,"tag":240,"props":1276,"children":1278},{"class":242,"line":1277},21,[1279,1284],{"type":70,"tag":240,"props":1280,"children":1281},{"style":253},[1282],{"type":75,"value":1283},"  BAIT_INTERVALS=baits.interval_list",{"type":70,"tag":240,"props":1285,"children":1286},{"style":259},[1287],{"type":75,"value":434},{"type":70,"tag":240,"props":1289,"children":1291},{"class":242,"line":1290},22,[1292],{"type":70,"tag":240,"props":1293,"children":1294},{"style":253},[1295],{"type":75,"value":1296},"  TARGET_INTERVALS=targets.interval_list\n",{"type":70,"tag":222,"props":1298,"children":1300},{"id":1299},"_6-coverage-mosdepth",[1301],{"type":75,"value":1302},"6. Coverage — mosdepth",{"type":70,"tag":229,"props":1304,"children":1306},{"className":231,"code":1305,"language":233,"meta":234,"style":234},"# WGS: 500 bp fixed windows\nmosdepth --by 500 --threads $THREADS --fast-mode --no-per-base \\\n  $OUT\u002Fmosdepth\u002Fsample_wgs sample.bam\n\n# WES \u002F panel: per-target coverage\nmosdepth --by targets.bed --threads $THREADS --no-per-base \\\n  $OUT\u002Fmosdepth\u002Fsample_wes sample.bam\n",[1307],{"type":70,"tag":173,"props":1308,"children":1309},{"__ignoreMap":234},[1310,1318,1360,1378,1385,1393,1426],{"type":70,"tag":240,"props":1311,"children":1312},{"class":242,"line":243},[1313],{"type":70,"tag":240,"props":1314,"children":1315},{"style":978},[1316],{"type":75,"value":1317},"# WGS: 500 bp fixed windows\n",{"type":70,"tag":240,"props":1319,"children":1320},{"class":242,"line":270},[1321,1326,1331,1337,1342,1346,1351,1356],{"type":70,"tag":240,"props":1322,"children":1323},{"style":247},[1324],{"type":75,"value":1325},"mosdepth",{"type":70,"tag":240,"props":1327,"children":1328},{"style":253},[1329],{"type":75,"value":1330}," --by",{"type":70,"tag":240,"props":1332,"children":1334},{"style":1333},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1335],{"type":75,"value":1336}," 500",{"type":70,"tag":240,"props":1338,"children":1339},{"style":253},[1340],{"type":75,"value":1341}," --threads",{"type":70,"tag":240,"props":1343,"children":1344},{"style":259},[1345],{"type":75,"value":285},{"type":70,"tag":240,"props":1347,"children":1348},{"style":253},[1349],{"type":75,"value":1350},"--fast-mode",{"type":70,"tag":240,"props":1352,"children":1353},{"style":253},[1354],{"type":75,"value":1355}," --no-per-base",{"type":70,"tag":240,"props":1357,"children":1358},{"style":259},[1359],{"type":75,"value":434},{"type":70,"tag":240,"props":1361,"children":1362},{"class":242,"line":437},[1363,1368,1373],{"type":70,"tag":240,"props":1364,"children":1365},{"style":259},[1366],{"type":75,"value":1367},"  $OUT",{"type":70,"tag":240,"props":1369,"children":1370},{"style":253},[1371],{"type":75,"value":1372},"\u002Fmosdepth\u002Fsample_wgs",{"type":70,"tag":240,"props":1374,"children":1375},{"style":253},[1376],{"type":75,"value":1377}," sample.bam\n",{"type":70,"tag":240,"props":1379,"children":1380},{"class":242,"line":26},[1381],{"type":70,"tag":240,"props":1382,"children":1383},{"emptyLinePlaceholder":702},[1384],{"type":75,"value":705},{"type":70,"tag":240,"props":1386,"children":1387},{"class":242,"line":500},[1388],{"type":70,"tag":240,"props":1389,"children":1390},{"style":978},[1391],{"type":75,"value":1392},"# WES \u002F panel: per-target coverage\n",{"type":70,"tag":240,"props":1394,"children":1395},{"class":242,"line":513},[1396,1400,1404,1409,1413,1417,1422],{"type":70,"tag":240,"props":1397,"children":1398},{"style":247},[1399],{"type":75,"value":1325},{"type":70,"tag":240,"props":1401,"children":1402},{"style":253},[1403],{"type":75,"value":1330},{"type":70,"tag":240,"props":1405,"children":1406},{"style":253},[1407],{"type":75,"value":1408}," targets.bed",{"type":70,"tag":240,"props":1410,"children":1411},{"style":253},[1412],{"type":75,"value":1341},{"type":70,"tag":240,"props":1414,"children":1415},{"style":259},[1416],{"type":75,"value":285},{"type":70,"tag":240,"props":1418,"children":1419},{"style":253},[1420],{"type":75,"value":1421},"--no-per-base",{"type":70,"tag":240,"props":1423,"children":1424},{"style":259},[1425],{"type":75,"value":434},{"type":70,"tag":240,"props":1427,"children":1428},{"class":242,"line":527},[1429,1433,1438],{"type":70,"tag":240,"props":1430,"children":1431},{"style":259},[1432],{"type":75,"value":1367},{"type":70,"tag":240,"props":1434,"children":1435},{"style":253},[1436],{"type":75,"value":1437},"\u002Fmosdepth\u002Fsample_wes",{"type":70,"tag":240,"props":1439,"children":1440},{"style":253},[1441],{"type":75,"value":1377},{"type":70,"tag":85,"props":1443,"children":1444},{},[1445],{"type":75,"value":1446},"Outputs of interest:",{"type":70,"tag":316,"props":1448,"children":1449},{},[1450,1461,1480],{"type":70,"tag":100,"props":1451,"children":1452},{},[1453,1459],{"type":70,"tag":173,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":75,"value":1458},"*.mosdepth.summary.txt",{"type":75,"value":1460}," — mean depth per chromosome and total.",{"type":70,"tag":100,"props":1462,"children":1463},{},[1464,1470,1472,1478],{"type":70,"tag":173,"props":1465,"children":1467},{"className":1466},[],[1468],{"type":75,"value":1469},"*.mosdepth.region.dist.txt",{"type":75,"value":1471}," — cumulative fraction of regions at ≥X coverage (use for ",{"type":70,"tag":173,"props":1473,"children":1475},{"className":1474},[],[1476],{"type":75,"value":1477},"% targets ≥20x",{"type":75,"value":1479},").",{"type":70,"tag":100,"props":1481,"children":1482},{},[1483,1489],{"type":70,"tag":173,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":75,"value":1488},"*.regions.bed.gz",{"type":75,"value":1490}," — per-window\u002Fper-target mean depth.",{"type":70,"tag":85,"props":1492,"children":1493},{},[1494,1496,1502,1504,1510],{"type":75,"value":1495},"Add ",{"type":70,"tag":173,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":75,"value":1501},"--quantize 0:1:10:30:",{"type":75,"value":1503}," for stratified coverage bins, or ",{"type":70,"tag":173,"props":1505,"children":1507},{"className":1506},[],[1508],{"type":75,"value":1509},"--thresholds 10,20,30,50",{"type":75,"value":1511}," to emit per-region pass counts at those depths.",{"type":70,"tag":78,"props":1513,"children":1515},{"id":1514},"response-format",[1516],{"type":75,"value":1517},"Response Format",{"type":70,"tag":316,"props":1519,"children":1520},{},[1521,1526,1531,1536,1541],{"type":70,"tag":100,"props":1522,"children":1523},{},[1524],{"type":75,"value":1525},"Lead with the command or code the user needs — explain after",{"type":70,"tag":100,"props":1527,"children":1528},{},[1529],{"type":75,"value":1530},"Structure as: confirm inputs → working code → key parameters explained → gotchas",{"type":70,"tag":100,"props":1532,"children":1533},{},[1534],{"type":75,"value":1535},"One complete working example per task; do not show every alternative",{"type":70,"tag":100,"props":1537,"children":1538},{},[1539],{"type":75,"value":1540},"Keep code comments minimal and functional (what, not why-it-exists)",{"type":70,"tag":100,"props":1542,"children":1543},{},[1544],{"type":75,"value":1545},"Target: 50-100 lines of code with brief surrounding explanation",{"type":70,"tag":78,"props":1547,"children":1549},{"id":1548},"core-concepts",[1550],{"type":75,"value":1551},"Core Concepts",{"type":70,"tag":222,"props":1553,"children":1555},{"id":1554},"qc-tool-selection-by-sequencing-type",[1556],{"type":75,"value":1557},"QC Tool Selection by Sequencing Type",{"type":70,"tag":1559,"props":1560,"children":1561},"table",{},[1562,1596],{"type":70,"tag":1563,"props":1564,"children":1565},"thead",{},[1566],{"type":70,"tag":1567,"props":1568,"children":1569},"tr",{},[1570,1576,1581,1586,1591],{"type":70,"tag":1571,"props":1572,"children":1573},"th",{},[1574],{"type":75,"value":1575},"Sequencing type",{"type":70,"tag":1571,"props":1577,"children":1578},{},[1579],{"type":75,"value":1580},"Coverage tool",{"type":70,"tag":1571,"props":1582,"children":1583},{},[1584],{"type":75,"value":1585},"Coverage metric",{"type":70,"tag":1571,"props":1587,"children":1588},{},[1589],{"type":75,"value":1590},"Picard suite",{"type":70,"tag":1571,"props":1592,"children":1593},{},[1594],{"type":75,"value":1595},"Key threshold",{"type":70,"tag":1597,"props":1598,"children":1599},"tbody",{},[1600,1639,1676,1711],{"type":70,"tag":1567,"props":1601,"children":1602},{},[1603,1609,1620,1625,1634],{"type":70,"tag":1604,"props":1605,"children":1606},"td",{},[1607],{"type":75,"value":1608},"WGS",{"type":70,"tag":1604,"props":1610,"children":1611},{},[1612,1614],{"type":75,"value":1613},"mosdepth ",{"type":70,"tag":173,"props":1615,"children":1617},{"className":1616},[],[1618],{"type":75,"value":1619},"--by 500",{"type":70,"tag":1604,"props":1621,"children":1622},{},[1623],{"type":75,"value":1624},"CollectWgsMetrics",{"type":70,"tag":1604,"props":1626,"children":1627},{},[1628],{"type":70,"tag":173,"props":1629,"children":1631},{"className":1630},[],[1632],{"type":75,"value":1633},"PCT_20X ≥ 95%",{"type":70,"tag":1604,"props":1635,"children":1636},{},[1637],{"type":75,"value":1638},"Mean ≥ 30×",{"type":70,"tag":1567,"props":1640,"children":1641},{},[1642,1647,1657,1662,1671],{"type":70,"tag":1604,"props":1643,"children":1644},{},[1645],{"type":75,"value":1646},"WES",{"type":70,"tag":1604,"props":1648,"children":1649},{},[1650,1651],{"type":75,"value":1613},{"type":70,"tag":173,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":75,"value":1656},"--by targets.bed",{"type":70,"tag":1604,"props":1658,"children":1659},{},[1660],{"type":75,"value":1661},"CollectHsMetrics",{"type":70,"tag":1604,"props":1663,"children":1664},{},[1665],{"type":70,"tag":173,"props":1666,"children":1668},{"className":1667},[],[1669],{"type":75,"value":1670},"PCT_TARGET_BASES_20X ≥ 80%",{"type":70,"tag":1604,"props":1672,"children":1673},{},[1674],{"type":75,"value":1675},"On-target ≥ 60%",{"type":70,"tag":1567,"props":1677,"children":1678},{},[1679,1684,1693,1697,1706],{"type":70,"tag":1604,"props":1680,"children":1681},{},[1682],{"type":75,"value":1683},"Targeted panel",{"type":70,"tag":1604,"props":1685,"children":1686},{},[1687,1688],{"type":75,"value":1613},{"type":70,"tag":173,"props":1689,"children":1691},{"className":1690},[],[1692],{"type":75,"value":1656},{"type":70,"tag":1604,"props":1694,"children":1695},{},[1696],{"type":75,"value":1661},{"type":70,"tag":1604,"props":1698,"children":1699},{},[1700],{"type":70,"tag":173,"props":1701,"children":1703},{"className":1702},[],[1704],{"type":75,"value":1705},"PCT_TARGET_BASES_20X ≥ 95%",{"type":70,"tag":1604,"props":1707,"children":1708},{},[1709],{"type":75,"value":1710},"Mean ≥ 500× (somatic)",{"type":70,"tag":1567,"props":1712,"children":1713},{},[1714,1719,1724,1729,1738],{"type":70,"tag":1604,"props":1715,"children":1716},{},[1717],{"type":75,"value":1718},"RNA-seq",{"type":70,"tag":1604,"props":1720,"children":1721},{},[1722],{"type":75,"value":1723},"— (use featureCounts\u002FSTAR logs)",{"type":70,"tag":1604,"props":1725,"children":1726},{},[1727],{"type":75,"value":1728},"CollectRnaSeqMetrics",{"type":70,"tag":1604,"props":1730,"children":1731},{},[1732],{"type":70,"tag":173,"props":1733,"children":1735},{"className":1734},[],[1736],{"type":75,"value":1737},"PCT_CODING_BASES",{"type":70,"tag":1604,"props":1739,"children":1740},{},[1741],{"type":75,"value":1742},"rRNA \u003C 10%",{"type":70,"tag":85,"props":1744,"children":1745},{},[1746,1751],{"type":70,"tag":104,"props":1747,"children":1748},{},[1749],{"type":75,"value":1750},"All types:",{"type":75,"value":1752}," FastQC (raw + trimmed) → fastp (trim) → samtools flagstat → MultiQC (aggregate).",{"type":70,"tag":222,"props":1754,"children":1756},{"id":1755},"quality-encoding-detection",[1757],{"type":75,"value":1758},"Quality encoding detection",{"type":70,"tag":85,"props":1760,"children":1761},{},[1762,1764,1769,1771,1776],{"type":75,"value":1763},"Modern Illumina (CASAVA ≥1.8, 2011+) emits ",{"type":70,"tag":104,"props":1765,"children":1766},{},[1767],{"type":75,"value":1768},"Phred+33",{"type":75,"value":1770}," (Sanger). Legacy data (Illumina 1.3–1.7, Solexa) used ",{"type":70,"tag":104,"props":1772,"children":1773},{},[1774],{"type":75,"value":1775},"Phred+64",{"type":75,"value":1777},". Aligners expect Phred+33.",{"type":70,"tag":316,"props":1779,"children":1780},{},[1781,1801,2017],{"type":70,"tag":100,"props":1782,"children":1783},{},[1784,1786,1792,1794,1800],{"type":75,"value":1785},"FastQC reports encoding in ",{"type":70,"tag":173,"props":1787,"children":1789},{"className":1788},[],[1790],{"type":75,"value":1791},"Basic Statistics → Encoding",{"type":75,"value":1793},". Look for ",{"type":70,"tag":173,"props":1795,"children":1797},{"className":1796},[],[1798],{"type":75,"value":1799},"Sanger \u002F Illumina 1.9",{"type":75,"value":908},{"type":70,"tag":100,"props":1802,"children":1803},{},[1804,1806,1980,1984,1986,1992,1994,2000,2002,2008,2009,2015],{"type":75,"value":1805},"Quick CLI check — inspect the quality-line ASCII range:",{"type":70,"tag":229,"props":1807,"children":1809},{"className":231,"code":1808,"language":233,"meta":234,"style":234},"zcat sample_R1.fastq.gz | head -4000 \\\n  | awk 'NR%4==0' \\\n  | od -An -c | tr -s ' \\n' '\\n' \\\n  | awk 'length==1' | sort -u\n",[1810],{"type":70,"tag":173,"props":1811,"children":1812},{"__ignoreMap":234},[1813,1844,1876,1942],{"type":70,"tag":240,"props":1814,"children":1815},{"class":242,"line":243},[1816,1821,1825,1830,1835,1840],{"type":70,"tag":240,"props":1817,"children":1818},{"style":247},[1819],{"type":75,"value":1820},"zcat",{"type":70,"tag":240,"props":1822,"children":1823},{"style":253},[1824],{"type":75,"value":448},{"type":70,"tag":240,"props":1826,"children":1827},{"style":778},[1828],{"type":75,"value":1829}," |",{"type":70,"tag":240,"props":1831,"children":1832},{"style":247},[1833],{"type":75,"value":1834}," head",{"type":70,"tag":240,"props":1836,"children":1837},{"style":253},[1838],{"type":75,"value":1839}," -4000",{"type":70,"tag":240,"props":1841,"children":1842},{"style":259},[1843],{"type":75,"value":434},{"type":70,"tag":240,"props":1845,"children":1846},{"class":242,"line":270},[1847,1852,1857,1862,1867,1872],{"type":70,"tag":240,"props":1848,"children":1849},{"style":778},[1850],{"type":75,"value":1851},"  |",{"type":70,"tag":240,"props":1853,"children":1854},{"style":247},[1855],{"type":75,"value":1856}," awk",{"type":70,"tag":240,"props":1858,"children":1859},{"style":778},[1860],{"type":75,"value":1861}," '",{"type":70,"tag":240,"props":1863,"children":1864},{"style":253},[1865],{"type":75,"value":1866},"NR%4==0",{"type":70,"tag":240,"props":1868,"children":1869},{"style":778},[1870],{"type":75,"value":1871},"'",{"type":70,"tag":240,"props":1873,"children":1874},{"style":259},[1875],{"type":75,"value":434},{"type":70,"tag":240,"props":1877,"children":1878},{"class":242,"line":437},[1879,1883,1888,1893,1898,1902,1907,1912,1916,1921,1925,1929,1934,1938],{"type":70,"tag":240,"props":1880,"children":1881},{"style":778},[1882],{"type":75,"value":1851},{"type":70,"tag":240,"props":1884,"children":1885},{"style":247},[1886],{"type":75,"value":1887}," od",{"type":70,"tag":240,"props":1889,"children":1890},{"style":253},[1891],{"type":75,"value":1892}," -An",{"type":70,"tag":240,"props":1894,"children":1895},{"style":253},[1896],{"type":75,"value":1897}," -c",{"type":70,"tag":240,"props":1899,"children":1900},{"style":778},[1901],{"type":75,"value":1829},{"type":70,"tag":240,"props":1903,"children":1904},{"style":247},[1905],{"type":75,"value":1906}," tr",{"type":70,"tag":240,"props":1908,"children":1909},{"style":253},[1910],{"type":75,"value":1911}," -s",{"type":70,"tag":240,"props":1913,"children":1914},{"style":778},[1915],{"type":75,"value":1861},{"type":70,"tag":240,"props":1917,"children":1918},{"style":253},[1919],{"type":75,"value":1920}," \\n",{"type":70,"tag":240,"props":1922,"children":1923},{"style":778},[1924],{"type":75,"value":1871},{"type":70,"tag":240,"props":1926,"children":1927},{"style":778},[1928],{"type":75,"value":1861},{"type":70,"tag":240,"props":1930,"children":1931},{"style":253},[1932],{"type":75,"value":1933},"\\n",{"type":70,"tag":240,"props":1935,"children":1936},{"style":778},[1937],{"type":75,"value":1871},{"type":70,"tag":240,"props":1939,"children":1940},{"style":259},[1941],{"type":75,"value":434},{"type":70,"tag":240,"props":1943,"children":1944},{"class":242,"line":26},[1945,1949,1953,1957,1962,1966,1970,1975],{"type":70,"tag":240,"props":1946,"children":1947},{"style":778},[1948],{"type":75,"value":1851},{"type":70,"tag":240,"props":1950,"children":1951},{"style":247},[1952],{"type":75,"value":1856},{"type":70,"tag":240,"props":1954,"children":1955},{"style":778},[1956],{"type":75,"value":1861},{"type":70,"tag":240,"props":1958,"children":1959},{"style":253},[1960],{"type":75,"value":1961},"length==1",{"type":70,"tag":240,"props":1963,"children":1964},{"style":778},[1965],{"type":75,"value":1871},{"type":70,"tag":240,"props":1967,"children":1968},{"style":778},[1969],{"type":75,"value":1829},{"type":70,"tag":240,"props":1971,"children":1972},{"style":247},[1973],{"type":75,"value":1974}," sort",{"type":70,"tag":240,"props":1976,"children":1977},{"style":253},[1978],{"type":75,"value":1979}," -u\n",{"type":70,"tag":1981,"props":1982,"children":1983},"br",{},[],{"type":75,"value":1985},"Characters in the ",{"type":70,"tag":173,"props":1987,"children":1989},{"className":1988},[],[1990],{"type":75,"value":1991},"!",{"type":75,"value":1993},"–",{"type":70,"tag":173,"props":1995,"children":1997},{"className":1996},[],[1998],{"type":75,"value":1999},"I",{"type":75,"value":2001}," range → Phred+33; characters ",{"type":70,"tag":173,"props":2003,"children":2005},{"className":2004},[],[2006],{"type":75,"value":2007},"@",{"type":75,"value":1993},{"type":70,"tag":173,"props":2010,"children":2012},{"className":2011},[],[2013],{"type":75,"value":2014},"h",{"type":75,"value":2016}," → Phred+64.",{"type":70,"tag":100,"props":2018,"children":2019},{},[2020,2022,2028],{"type":75,"value":2021},"Convert legacy data: ",{"type":70,"tag":173,"props":2023,"children":2025},{"className":2024},[],[2026],{"type":75,"value":2027},"seqtk seq -Q64 -V in.fq > out.fq",{"type":75,"value":2029}," (shifts +64 → +33).",{"type":70,"tag":222,"props":2031,"children":2033},{"id":2032},"trim-parameter-intent",[2034],{"type":75,"value":2035},"Trim parameter intent",{"type":70,"tag":316,"props":2037,"children":2038},{},[2039,2057,2075],{"type":70,"tag":100,"props":2040,"children":2041},{},[2042,2047,2049,2055],{"type":70,"tag":104,"props":2043,"children":2044},{},[2045],{"type":75,"value":2046},"Adapter trimming",{"type":75,"value":2048}," is for read-through into the adapter (insert \u003C read length). ",{"type":70,"tag":173,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":75,"value":2054},"--detect_adapter_for_pe",{"type":75,"value":2056}," uses read overlap, which is more reliable than sequence-based detection for paired-end.",{"type":70,"tag":100,"props":2058,"children":2059},{},[2060,2065,2067,2073],{"type":70,"tag":104,"props":2061,"children":2062},{},[2063],{"type":75,"value":2064},"Quality trimming",{"type":75,"value":2066}," is for 3′ quality decay on 2-channel chemistry (NextSeq\u002FNovaSeq emit poly-G at dark cycles; use ",{"type":70,"tag":173,"props":2068,"children":2070},{"className":2069},[],[2071],{"type":75,"value":2072},"--trim_poly_g",{"type":75,"value":2074}," for those platforms — fastp auto-enables it by platform detection).",{"type":70,"tag":100,"props":2076,"children":2077},{},[2078],{"type":75,"value":2079},"Do not hard-clip fixed lengths unless you know the library design (UMIs, inline barcodes).",{"type":70,"tag":222,"props":2081,"children":2083},{"id":2082},"duplication-optical-vs-pcr",[2084],{"type":75,"value":2085},"Duplication: optical vs PCR",{"type":70,"tag":316,"props":2087,"children":2088},{},[2089,2107],{"type":70,"tag":100,"props":2090,"children":2091},{},[2092,2098,2100,2105],{"type":70,"tag":173,"props":2093,"children":2095},{"className":2094},[],[2096],{"type":75,"value":2097},"samtools flagstat",{"type":75,"value":2099}," \"duplicates\" reflects whatever flag is set in the BAM (usually by Picard MarkDuplicates or samtools markdup). Run MarkDuplicates ",{"type":70,"tag":104,"props":2101,"children":2102},{},[2103],{"type":75,"value":2104},"after",{"type":75,"value":2106}," alignment, not on trimmed FASTQs.",{"type":70,"tag":100,"props":2108,"children":2109},{},[2110,2115,2116,2121,2123,2129],{"type":70,"tag":173,"props":2111,"children":2113},{"className":2112},[],[2114],{"type":75,"value":1624},{"type":75,"value":196},{"type":70,"tag":173,"props":2117,"children":2119},{"className":2118},[],[2120],{"type":75,"value":1661},{"type":75,"value":2122}," report ",{"type":70,"tag":173,"props":2124,"children":2126},{"className":2125},[],[2127],{"type":75,"value":2128},"PCT_EXC_DUPE",{"type":75,"value":2130}," — fraction of bases excluded due to duplication. This is the canonical dup rate for coverage-based QC.",{"type":70,"tag":222,"props":2132,"children":2134},{"id":2133},"coverage-mean-vs-uniformity",[2135],{"type":75,"value":2136},"Coverage: mean vs uniformity",{"type":70,"tag":85,"props":2138,"children":2139},{},[2140],{"type":75,"value":2141},"Mean depth alone is insufficient. Report both:",{"type":70,"tag":316,"props":2143,"children":2144},{},[2145,2170],{"type":70,"tag":100,"props":2146,"children":2147},{},[2148,2153,2154,2160,2162,2168],{"type":70,"tag":104,"props":2149,"children":2150},{},[2151],{"type":75,"value":2152},"Mean target coverage",{"type":75,"value":934},{"type":70,"tag":173,"props":2155,"children":2157},{"className":2156},[],[2158],{"type":75,"value":2159},"MEAN_TARGET_COVERAGE",{"type":75,"value":2161}," from HsMetrics; ",{"type":70,"tag":173,"props":2163,"children":2165},{"className":2164},[],[2166],{"type":75,"value":2167},"MEAN_COVERAGE",{"type":75,"value":2169}," from WgsMetrics).",{"type":70,"tag":100,"props":2171,"children":2172},{},[2173,2178,2180,2185,2186,2192,2193,2199,2200,2206,2208,2214],{"type":70,"tag":104,"props":2174,"children":2175},{},[2176],{"type":75,"value":2177},"Coverage breadth",{"type":75,"value":2179}," — ",{"type":70,"tag":173,"props":2181,"children":2183},{"className":2182},[],[2184],{"type":75,"value":1477},{"type":75,"value":196},{"type":70,"tag":173,"props":2187,"children":2189},{"className":2188},[],[2190],{"type":75,"value":2191},"% genome ≥20x",{"type":75,"value":934},{"type":70,"tag":173,"props":2194,"children":2196},{"className":2195},[],[2197],{"type":75,"value":2198},"PCT_TARGET_BASES_20X",{"type":75,"value":180},{"type":70,"tag":173,"props":2201,"children":2203},{"className":2202},[],[2204],{"type":75,"value":2205},"PCT_20X",{"type":75,"value":2207}," in Picard; mosdepth ",{"type":70,"tag":173,"props":2209,"children":2211},{"className":2210},[],[2212],{"type":75,"value":2213},"region.dist.txt",{"type":75,"value":1479},{"type":70,"tag":85,"props":2216,"children":2217},{},[2218],{"type":75,"value":2219},"A panel with mean 200x but only 70% of targets at 20x has a coverage-uniformity problem (capture efficiency, GC bias).",{"type":70,"tag":78,"props":2221,"children":2223},{"id":2222},"quick-reference",[2224],{"type":75,"value":2225},"Quick Reference",{"type":70,"tag":222,"props":2227,"children":2229},{"id":2228},"quality-thresholds-typical-gating",[2230],{"type":75,"value":2231},"Quality thresholds (typical gating)",{"type":70,"tag":1559,"props":2233,"children":2234},{},[2235,2263],{"type":70,"tag":1563,"props":2236,"children":2237},{},[2238],{"type":70,"tag":1567,"props":2239,"children":2240},{},[2241,2246,2250,2254,2258],{"type":70,"tag":1571,"props":2242,"children":2243},{},[2244],{"type":75,"value":2245},"Metric",{"type":70,"tag":1571,"props":2247,"children":2248},{},[2249],{"type":75,"value":1608},{"type":70,"tag":1571,"props":2251,"children":2252},{},[2253],{"type":75,"value":1646},{"type":70,"tag":1571,"props":2255,"children":2256},{},[2257],{"type":75,"value":1683},{"type":70,"tag":1571,"props":2259,"children":2260},{},[2261],{"type":75,"value":2262},"Source",{"type":70,"tag":1597,"props":2264,"children":2265},{},[2266,2294,2329,2362,2395,2421,2448,2476,2511],{"type":70,"tag":1567,"props":2267,"children":2268},{},[2269,2274,2279,2284,2289],{"type":70,"tag":1604,"props":2270,"children":2271},{},[2272],{"type":75,"value":2273},"Mean coverage",{"type":70,"tag":1604,"props":2275,"children":2276},{},[2277],{"type":75,"value":2278},"≥ 30×",{"type":70,"tag":1604,"props":2280,"children":2281},{},[2282],{"type":75,"value":2283},"≥ 50× on-target",{"type":70,"tag":1604,"props":2285,"children":2286},{},[2287],{"type":75,"value":2288},"≥ 500× (somatic), ≥ 100× (germline)",{"type":70,"tag":1604,"props":2290,"children":2291},{},[2292],{"type":75,"value":2293},"WgsMetrics \u002F HsMetrics",{"type":70,"tag":1567,"props":2295,"children":2296},{},[2297,2302,2307,2312,2317],{"type":70,"tag":1604,"props":2298,"children":2299},{},[2300],{"type":75,"value":2301},"Breadth at 20×",{"type":70,"tag":1604,"props":2303,"children":2304},{},[2305],{"type":75,"value":2306},"≥ 95% genome",{"type":70,"tag":1604,"props":2308,"children":2309},{},[2310],{"type":75,"value":2311},"≥ 80% of targets",{"type":70,"tag":1604,"props":2313,"children":2314},{},[2315],{"type":75,"value":2316},"≥ 95% of targets",{"type":70,"tag":1604,"props":2318,"children":2319},{},[2320,2322,2327],{"type":75,"value":2321},"Picard ",{"type":70,"tag":173,"props":2323,"children":2325},{"className":2324},[],[2326],{"type":75,"value":2205},{"type":75,"value":2328}," \u002F mosdepth",{"type":70,"tag":1567,"props":2330,"children":2331},{},[2332,2337,2342,2347,2352],{"type":70,"tag":1604,"props":2333,"children":2334},{},[2335],{"type":75,"value":2336},"Breadth at 10× (germline)",{"type":70,"tag":1604,"props":2338,"children":2339},{},[2340],{"type":75,"value":2341},"≥ 90%",{"type":70,"tag":1604,"props":2343,"children":2344},{},[2345],{"type":75,"value":2346},"≥ 90% of targets",{"type":70,"tag":1604,"props":2348,"children":2349},{},[2350],{"type":75,"value":2351},"≥ 98% of targets",{"type":70,"tag":1604,"props":2353,"children":2354},{},[2355,2356],{"type":75,"value":2321},{"type":70,"tag":173,"props":2357,"children":2359},{"className":2358},[],[2360],{"type":75,"value":2361},"PCT_10X",{"type":70,"tag":1567,"props":2363,"children":2364},{},[2365,2370,2375,2380,2385],{"type":70,"tag":1604,"props":2366,"children":2367},{},[2368],{"type":75,"value":2369},"Duplicate rate",{"type":70,"tag":1604,"props":2371,"children":2372},{},[2373],{"type":75,"value":2374},"\u003C 30%",{"type":70,"tag":1604,"props":2376,"children":2377},{},[2378],{"type":75,"value":2379},"\u003C 40%",{"type":70,"tag":1604,"props":2381,"children":2382},{},[2383],{"type":75,"value":2384},"\u003C 50% (UMI recommended)",{"type":70,"tag":1604,"props":2386,"children":2387},{},[2388,2390],{"type":75,"value":2389},"MarkDuplicates \u002F Picard ",{"type":70,"tag":173,"props":2391,"children":2393},{"className":2392},[],[2394],{"type":75,"value":2128},{"type":70,"tag":1567,"props":2396,"children":2397},{},[2398,2403,2408,2412,2416],{"type":70,"tag":1604,"props":2399,"children":2400},{},[2401],{"type":75,"value":2402},"Mapping rate",{"type":70,"tag":1604,"props":2404,"children":2405},{},[2406],{"type":75,"value":2407},"> 95%",{"type":70,"tag":1604,"props":2409,"children":2410},{},[2411],{"type":75,"value":2407},{"type":70,"tag":1604,"props":2413,"children":2414},{},[2415],{"type":75,"value":2407},{"type":70,"tag":1604,"props":2417,"children":2418},{},[2419],{"type":75,"value":2420},"samtools flagstat \u002F AlignmentSummaryMetrics",{"type":70,"tag":1567,"props":2422,"children":2423},{},[2424,2429,2434,2439,2443],{"type":70,"tag":1604,"props":2425,"children":2426},{},[2427],{"type":75,"value":2428},"Mean base quality",{"type":70,"tag":1604,"props":2430,"children":2431},{},[2432],{"type":75,"value":2433},"≥ Q30 across ≥ 80% of bases",{"type":70,"tag":1604,"props":2435,"children":2436},{},[2437],{"type":75,"value":2438},"same",{"type":70,"tag":1604,"props":2440,"children":2441},{},[2442],{"type":75,"value":2438},{"type":70,"tag":1604,"props":2444,"children":2445},{},[2446],{"type":75,"value":2447},"FastQC \u002F fastp",{"type":70,"tag":1567,"props":2449,"children":2450},{},[2451,2456,2461,2466,2471],{"type":70,"tag":1604,"props":2452,"children":2453},{},[2454],{"type":75,"value":2455},"Insert size (PE150)",{"type":70,"tag":1604,"props":2457,"children":2458},{},[2459],{"type":75,"value":2460},"300–500 bp, SD \u003C 20% of mean",{"type":70,"tag":1604,"props":2462,"children":2463},{},[2464],{"type":75,"value":2465},"150–300 bp",{"type":70,"tag":1604,"props":2467,"children":2468},{},[2469],{"type":75,"value":2470},"library-specific",{"type":70,"tag":1604,"props":2472,"children":2473},{},[2474],{"type":75,"value":2475},"CollectInsertSizeMetrics",{"type":70,"tag":1567,"props":2477,"children":2478},{},[2479,2484,2489,2502,2507],{"type":70,"tag":1604,"props":2480,"children":2481},{},[2482],{"type":75,"value":2483},"On-target (capture)",{"type":70,"tag":1604,"props":2485,"children":2486},{},[2487],{"type":75,"value":2488},"n\u002Fa",{"type":70,"tag":1604,"props":2490,"children":2491},{},[2492,2494,2500],{"type":75,"value":2493},"≥ 60% (",{"type":70,"tag":173,"props":2495,"children":2497},{"className":2496},[],[2498],{"type":75,"value":2499},"PCT_SELECTED_BASES",{"type":75,"value":2501},")",{"type":70,"tag":1604,"props":2503,"children":2504},{},[2505],{"type":75,"value":2506},"≥ 70%",{"type":70,"tag":1604,"props":2508,"children":2509},{},[2510],{"type":75,"value":1661},{"type":70,"tag":1567,"props":2512,"children":2513},{},[2514,2519,2524,2528,2532],{"type":70,"tag":1604,"props":2515,"children":2516},{},[2517],{"type":75,"value":2518},"Contamination",{"type":70,"tag":1604,"props":2520,"children":2521},{},[2522],{"type":75,"value":2523},"\u003C 1%",{"type":70,"tag":1604,"props":2525,"children":2526},{},[2527],{"type":75,"value":2523},{"type":70,"tag":1604,"props":2529,"children":2530},{},[2531],{"type":75,"value":2523},{"type":70,"tag":1604,"props":2533,"children":2534},{},[2535],{"type":75,"value":2536},"VerifyBamID (outside this skill)",{"type":70,"tag":222,"props":2538,"children":2540},{"id":2539},"one-liners",[2541],{"type":75,"value":2542},"One-liners",{"type":70,"tag":229,"props":2544,"children":2546},{"className":231,"code":2545,"language":233,"meta":234,"style":234},"# Full raw → trimmed → FastQC → MultiQC\nfastqc -t 8 -o qc\u002Fraw *.fastq.gz && \\\nfastp -i R1.fq.gz -I R2.fq.gz -o R1.trim.fq.gz -O R2.trim.fq.gz \\\n      --detect_adapter_for_pe --thread 8 --html fastp.html --json fastp.json && \\\nfastqc -t 8 -o qc\u002Ftrim *.trim.fq.gz && \\\nmultiqc qc -o qc\u002Fmultiqc\n\n# BAM QC bundle\nsamtools flagstat sample.bam > qc\u002Fsample.flagstat.txt\npicard CollectAlignmentSummaryMetrics R=ref.fasta I=sample.bam O=qc\u002Faln.txt\npicard CollectInsertSizeMetrics I=sample.bam O=qc\u002Fins.txt H=qc\u002Fins.pdf\nmosdepth --by 500 --threads 8 --fast-mode --no-per-base qc\u002Fsample sample.bam\n",[2547],{"type":70,"tag":173,"props":2548,"children":2549},{"__ignoreMap":234},[2550,2558,2602,2650,2695,2736,2757,2764,2772,2796,2821,2846],{"type":70,"tag":240,"props":2551,"children":2552},{"class":242,"line":243},[2553],{"type":70,"tag":240,"props":2554,"children":2555},{"style":978},[2556],{"type":75,"value":2557},"# Full raw → trimmed → FastQC → MultiQC\n",{"type":70,"tag":240,"props":2559,"children":2560},{"class":242,"line":270},[2561,2565,2569,2574,2579,2584,2588,2593,2598],{"type":70,"tag":240,"props":2562,"children":2563},{"style":247},[2564],{"type":75,"value":63},{"type":70,"tag":240,"props":2566,"children":2567},{"style":253},[2568],{"type":75,"value":280},{"type":70,"tag":240,"props":2570,"children":2571},{"style":1333},[2572],{"type":75,"value":2573}," 8",{"type":70,"tag":240,"props":2575,"children":2576},{"style":253},[2577],{"type":75,"value":2578}," -o",{"type":70,"tag":240,"props":2580,"children":2581},{"style":253},[2582],{"type":75,"value":2583}," qc\u002Fraw",{"type":70,"tag":240,"props":2585,"children":2586},{"style":259},[2587],{"type":75,"value":304},{"type":70,"tag":240,"props":2589,"children":2590},{"style":253},[2591],{"type":75,"value":2592},".fastq.gz",{"type":70,"tag":240,"props":2594,"children":2595},{"style":778},[2596],{"type":75,"value":2597}," &&",{"type":70,"tag":240,"props":2599,"children":2600},{"style":259},[2601],{"type":75,"value":434},{"type":70,"tag":240,"props":2603,"children":2604},{"class":242,"line":437},[2605,2609,2614,2619,2623,2628,2632,2637,2641,2646],{"type":70,"tag":240,"props":2606,"children":2607},{"style":247},[2608],{"type":75,"value":429},{"type":70,"tag":240,"props":2610,"children":2611},{"style":253},[2612],{"type":75,"value":2613}," -i",{"type":70,"tag":240,"props":2615,"children":2616},{"style":253},[2617],{"type":75,"value":2618}," R1.fq.gz",{"type":70,"tag":240,"props":2620,"children":2621},{"style":253},[2622],{"type":75,"value":453},{"type":70,"tag":240,"props":2624,"children":2625},{"style":253},[2626],{"type":75,"value":2627}," R2.fq.gz",{"type":70,"tag":240,"props":2629,"children":2630},{"style":253},[2631],{"type":75,"value":2578},{"type":70,"tag":240,"props":2633,"children":2634},{"style":253},[2635],{"type":75,"value":2636}," R1.trim.fq.gz",{"type":70,"tag":240,"props":2638,"children":2639},{"style":253},[2640],{"type":75,"value":484},{"type":70,"tag":240,"props":2642,"children":2643},{"style":253},[2644],{"type":75,"value":2645}," R2.trim.fq.gz",{"type":70,"tag":240,"props":2647,"children":2648},{"style":259},[2649],{"type":75,"value":434},{"type":70,"tag":240,"props":2651,"children":2652},{"class":242,"line":26},[2653,2658,2663,2667,2672,2677,2682,2687,2691],{"type":70,"tag":240,"props":2654,"children":2655},{"style":253},[2656],{"type":75,"value":2657},"      --detect_adapter_for_pe",{"type":70,"tag":240,"props":2659,"children":2660},{"style":253},[2661],{"type":75,"value":2662}," --thread",{"type":70,"tag":240,"props":2664,"children":2665},{"style":1333},[2666],{"type":75,"value":2573},{"type":70,"tag":240,"props":2668,"children":2669},{"style":253},[2670],{"type":75,"value":2671}," --html",{"type":70,"tag":240,"props":2673,"children":2674},{"style":253},[2675],{"type":75,"value":2676}," fastp.html",{"type":70,"tag":240,"props":2678,"children":2679},{"style":253},[2680],{"type":75,"value":2681}," --json",{"type":70,"tag":240,"props":2683,"children":2684},{"style":253},[2685],{"type":75,"value":2686}," fastp.json",{"type":70,"tag":240,"props":2688,"children":2689},{"style":778},[2690],{"type":75,"value":2597},{"type":70,"tag":240,"props":2692,"children":2693},{"style":259},[2694],{"type":75,"value":434},{"type":70,"tag":240,"props":2696,"children":2697},{"class":242,"line":500},[2698,2702,2706,2710,2714,2719,2723,2728,2732],{"type":70,"tag":240,"props":2699,"children":2700},{"style":247},[2701],{"type":75,"value":63},{"type":70,"tag":240,"props":2703,"children":2704},{"style":253},[2705],{"type":75,"value":280},{"type":70,"tag":240,"props":2707,"children":2708},{"style":1333},[2709],{"type":75,"value":2573},{"type":70,"tag":240,"props":2711,"children":2712},{"style":253},[2713],{"type":75,"value":2578},{"type":70,"tag":240,"props":2715,"children":2716},{"style":253},[2717],{"type":75,"value":2718}," qc\u002Ftrim",{"type":70,"tag":240,"props":2720,"children":2721},{"style":259},[2722],{"type":75,"value":304},{"type":70,"tag":240,"props":2724,"children":2725},{"style":253},[2726],{"type":75,"value":2727},".trim.fq.gz",{"type":70,"tag":240,"props":2729,"children":2730},{"style":778},[2731],{"type":75,"value":2597},{"type":70,"tag":240,"props":2733,"children":2734},{"style":259},[2735],{"type":75,"value":434},{"type":70,"tag":240,"props":2737,"children":2738},{"class":242,"line":513},[2739,2743,2748,2752],{"type":70,"tag":240,"props":2740,"children":2741},{"style":247},[2742],{"type":75,"value":713},{"type":70,"tag":240,"props":2744,"children":2745},{"style":253},[2746],{"type":75,"value":2747}," qc",{"type":70,"tag":240,"props":2749,"children":2750},{"style":253},[2751],{"type":75,"value":2578},{"type":70,"tag":240,"props":2753,"children":2754},{"style":253},[2755],{"type":75,"value":2756}," qc\u002Fmultiqc\n",{"type":70,"tag":240,"props":2758,"children":2759},{"class":242,"line":527},[2760],{"type":70,"tag":240,"props":2761,"children":2762},{"emptyLinePlaceholder":702},[2763],{"type":75,"value":705},{"type":70,"tag":240,"props":2765,"children":2766},{"class":242,"line":549},[2767],{"type":70,"tag":240,"props":2768,"children":2769},{"style":978},[2770],{"type":75,"value":2771},"# BAM QC bundle\n",{"type":70,"tag":240,"props":2773,"children":2774},{"class":242,"line":1085},[2775,2779,2783,2787,2791],{"type":70,"tag":240,"props":2776,"children":2777},{"style":247},[2778],{"type":75,"value":757},{"type":70,"tag":240,"props":2780,"children":2781},{"style":253},[2782],{"type":75,"value":762},{"type":70,"tag":240,"props":2784,"children":2785},{"style":253},[2786],{"type":75,"value":845},{"type":70,"tag":240,"props":2788,"children":2789},{"style":778},[2790],{"type":75,"value":781},{"type":70,"tag":240,"props":2792,"children":2793},{"style":253},[2794],{"type":75,"value":2795}," qc\u002Fsample.flagstat.txt\n",{"type":70,"tag":240,"props":2797,"children":2798},{"class":242,"line":1094},[2799,2803,2807,2812,2816],{"type":70,"tag":240,"props":2800,"children":2801},{"style":247},[2802],{"type":75,"value":989},{"type":70,"tag":240,"props":2804,"children":2805},{"style":253},[2806],{"type":75,"value":1043},{"type":70,"tag":240,"props":2808,"children":2809},{"style":253},[2810],{"type":75,"value":2811}," R=ref.fasta",{"type":70,"tag":240,"props":2813,"children":2814},{"style":253},[2815],{"type":75,"value":1060},{"type":70,"tag":240,"props":2817,"children":2818},{"style":253},[2819],{"type":75,"value":2820}," O=qc\u002Faln.txt\n",{"type":70,"tag":240,"props":2822,"children":2823},{"class":242,"line":1111},[2824,2828,2832,2836,2841],{"type":70,"tag":240,"props":2825,"children":2826},{"style":247},[2827],{"type":75,"value":989},{"type":70,"tag":240,"props":2829,"children":2830},{"style":253},[2831],{"type":75,"value":1104},{"type":70,"tag":240,"props":2833,"children":2834},{"style":253},[2835],{"type":75,"value":1060},{"type":70,"tag":240,"props":2837,"children":2838},{"style":253},[2839],{"type":75,"value":2840}," O=qc\u002Fins.txt",{"type":70,"tag":240,"props":2842,"children":2843},{"style":253},[2844],{"type":75,"value":2845}," H=qc\u002Fins.pdf\n",{"type":70,"tag":240,"props":2847,"children":2848},{"class":242,"line":1137},[2849,2853,2857,2861,2865,2869,2874,2878,2883],{"type":70,"tag":240,"props":2850,"children":2851},{"style":247},[2852],{"type":75,"value":1325},{"type":70,"tag":240,"props":2854,"children":2855},{"style":253},[2856],{"type":75,"value":1330},{"type":70,"tag":240,"props":2858,"children":2859},{"style":1333},[2860],{"type":75,"value":1336},{"type":70,"tag":240,"props":2862,"children":2863},{"style":253},[2864],{"type":75,"value":1341},{"type":70,"tag":240,"props":2866,"children":2867},{"style":1333},[2868],{"type":75,"value":2573},{"type":70,"tag":240,"props":2870,"children":2871},{"style":253},[2872],{"type":75,"value":2873}," --fast-mode",{"type":70,"tag":240,"props":2875,"children":2876},{"style":253},[2877],{"type":75,"value":1355},{"type":70,"tag":240,"props":2879,"children":2880},{"style":253},[2881],{"type":75,"value":2882}," qc\u002Fsample",{"type":70,"tag":240,"props":2884,"children":2885},{"style":253},[2886],{"type":75,"value":1377},{"type":70,"tag":222,"props":2888,"children":2890},{"id":2889},"tool-roles-at-a-glance",[2891],{"type":75,"value":2892},"Tool roles at a glance",{"type":70,"tag":1559,"props":2894,"children":2895},{},[2896,2922],{"type":70,"tag":1563,"props":2897,"children":2898},{},[2899],{"type":70,"tag":1567,"props":2900,"children":2901},{},[2902,2907,2912,2917],{"type":70,"tag":1571,"props":2903,"children":2904},{},[2905],{"type":75,"value":2906},"Tool",{"type":70,"tag":1571,"props":2908,"children":2909},{},[2910],{"type":75,"value":2911},"Input",{"type":70,"tag":1571,"props":2913,"children":2914},{},[2915],{"type":75,"value":2916},"Primary output",{"type":70,"tag":1571,"props":2918,"children":2919},{},[2920],{"type":75,"value":2921},"Use for",{"type":70,"tag":1597,"props":2923,"children":2924},{},[2925,2948,2970,2992,3013,3035,3056,3077,3098],{"type":70,"tag":1567,"props":2926,"children":2927},{},[2928,2933,2938,2943],{"type":70,"tag":1604,"props":2929,"children":2930},{},[2931],{"type":75,"value":2932},"FastQC",{"type":70,"tag":1604,"props":2934,"children":2935},{},[2936],{"type":75,"value":2937},"FASTQ",{"type":70,"tag":1604,"props":2939,"children":2940},{},[2941],{"type":75,"value":2942},"per-file HTML\u002Fzip",{"type":70,"tag":1604,"props":2944,"children":2945},{},[2946],{"type":75,"value":2947},"raw & post-trim read quality",{"type":70,"tag":1567,"props":2949,"children":2950},{},[2951,2955,2960,2965],{"type":70,"tag":1604,"props":2952,"children":2953},{},[2954],{"type":75,"value":429},{"type":70,"tag":1604,"props":2956,"children":2957},{},[2958],{"type":75,"value":2959},"FASTQ pair",{"type":70,"tag":1604,"props":2961,"children":2962},{},[2963],{"type":75,"value":2964},"trimmed FASTQ + JSON\u002FHTML",{"type":70,"tag":1604,"props":2966,"children":2967},{},[2968],{"type":75,"value":2969},"adapter + quality trimming",{"type":70,"tag":1567,"props":2971,"children":2972},{},[2973,2978,2983,2987],{"type":70,"tag":1604,"props":2974,"children":2975},{},[2976],{"type":75,"value":2977},"samtools stats\u002Fflagstat",{"type":70,"tag":1604,"props":2979,"children":2980},{},[2981],{"type":75,"value":2982},"BAM",{"type":70,"tag":1604,"props":2984,"children":2985},{},[2986],{"type":75,"value":75},{"type":70,"tag":1604,"props":2988,"children":2989},{},[2990],{"type":75,"value":2991},"mapping counts, error rate",{"type":70,"tag":1567,"props":2993,"children":2994},{},[2995,3000,3004,3008],{"type":70,"tag":1604,"props":2996,"children":2997},{},[2998],{"type":75,"value":2999},"Picard AlignmentSummary",{"type":70,"tag":1604,"props":3001,"children":3002},{},[3003],{"type":75,"value":2982},{"type":70,"tag":1604,"props":3005,"children":3006},{},[3007],{"type":75,"value":75},{"type":70,"tag":1604,"props":3009,"children":3010},{},[3011],{"type":75,"value":3012},"strand balance, PF reads, Q20\u002FQ30 aligned bases",{"type":70,"tag":1567,"props":3014,"children":3015},{},[3016,3021,3025,3030],{"type":70,"tag":1604,"props":3017,"children":3018},{},[3019],{"type":75,"value":3020},"Picard InsertSize",{"type":70,"tag":1604,"props":3022,"children":3023},{},[3024],{"type":75,"value":2982},{"type":70,"tag":1604,"props":3026,"children":3027},{},[3028],{"type":75,"value":3029},"text + PDF",{"type":70,"tag":1604,"props":3031,"children":3032},{},[3033],{"type":75,"value":3034},"PE insert distribution",{"type":70,"tag":1567,"props":3036,"children":3037},{},[3038,3043,3047,3051],{"type":70,"tag":1604,"props":3039,"children":3040},{},[3041],{"type":75,"value":3042},"Picard WgsMetrics",{"type":70,"tag":1604,"props":3044,"children":3045},{},[3046],{"type":75,"value":2982},{"type":70,"tag":1604,"props":3048,"children":3049},{},[3050],{"type":75,"value":75},{"type":70,"tag":1604,"props":3052,"children":3053},{},[3054],{"type":75,"value":3055},"WGS coverage + breadth",{"type":70,"tag":1567,"props":3057,"children":3058},{},[3059,3064,3068,3072],{"type":70,"tag":1604,"props":3060,"children":3061},{},[3062],{"type":75,"value":3063},"Picard HsMetrics",{"type":70,"tag":1604,"props":3065,"children":3066},{},[3067],{"type":75,"value":2982},{"type":70,"tag":1604,"props":3069,"children":3070},{},[3071],{"type":75,"value":75},{"type":70,"tag":1604,"props":3073,"children":3074},{},[3075],{"type":75,"value":3076},"WES\u002Fpanel on-target & coverage",{"type":70,"tag":1567,"props":3078,"children":3079},{},[3080,3084,3088,3093],{"type":70,"tag":1604,"props":3081,"children":3082},{},[3083],{"type":75,"value":1325},{"type":70,"tag":1604,"props":3085,"children":3086},{},[3087],{"type":75,"value":2982},{"type":70,"tag":1604,"props":3089,"children":3090},{},[3091],{"type":75,"value":3092},"BED + dist",{"type":70,"tag":1604,"props":3094,"children":3095},{},[3096],{"type":75,"value":3097},"fast windowed \u002F per-target depth",{"type":70,"tag":1567,"props":3099,"children":3100},{},[3101,3106,3111,3116],{"type":70,"tag":1604,"props":3102,"children":3103},{},[3104],{"type":75,"value":3105},"MultiQC",{"type":70,"tag":1604,"props":3107,"children":3108},{},[3109],{"type":75,"value":3110},"directory",{"type":70,"tag":1604,"props":3112,"children":3113},{},[3114],{"type":75,"value":3115},"single HTML",{"type":70,"tag":1604,"props":3117,"children":3118},{},[3119],{"type":75,"value":3120},"cohort aggregation",{"type":70,"tag":78,"props":3122,"children":3124},{"id":3123},"common-mistakes",[3125],{"type":75,"value":3126},"Common Mistakes",{"type":70,"tag":316,"props":3128,"children":3129},{},[3130,3162,3226,3270,3291,3320,3341,3362,3405],{"type":70,"tag":100,"props":3131,"children":3132},{},[3133,3138,3140,3145,3147,3153,3155,3160],{"type":70,"tag":104,"props":3134,"children":3135},{},[3136],{"type":75,"value":3137},"Wrong:",{"type":75,"value":3139}," Running FastQC only after trimming\n",{"type":70,"tag":104,"props":3141,"children":3142},{},[3143],{"type":75,"value":3144},"Right:",{"type":75,"value":3146}," Run FastQC on ",{"type":70,"tag":3148,"props":3149,"children":3150},"em",{},[3151],{"type":75,"value":3152},"both",{"type":75,"value":3154}," raw and trimmed reads\n",{"type":70,"tag":104,"props":3156,"children":3157},{},[3158],{"type":75,"value":3159},"Why:",{"type":75,"value":3161}," Pre-trim QC diagnoses the library; post-trim QC confirms trimming worked without over-clipping",{"type":70,"tag":100,"props":3163,"children":3164},{},[3165,3169,3171,3175,3177,3182,3184,3190,3194,3196,3202,3204,3210,3212,3217,3219,3224],{"type":70,"tag":104,"props":3166,"children":3167},{},[3168],{"type":75,"value":3137},{"type":75,"value":3170}," Passing a raw BED file to Picard CollectHsMetrics\n",{"type":70,"tag":104,"props":3172,"children":3173},{},[3174],{"type":75,"value":3144},{"type":75,"value":3176}," Convert to Picard-format ",{"type":70,"tag":173,"props":3178,"children":3180},{"className":3179},[],[3181],{"type":75,"value":948},{"type":75,"value":3183}," via ",{"type":70,"tag":173,"props":3185,"children":3187},{"className":3186},[],[3188],{"type":75,"value":3189},"picard BedToIntervalList I=x.bed O=x.interval_list SD=ref.dict",{"type":70,"tag":104,"props":3191,"children":3192},{},[3193],{"type":75,"value":3159},{"type":75,"value":3195}," ",{"type":70,"tag":173,"props":3197,"children":3199},{"className":3198},[],[3200],{"type":75,"value":3201},"BAIT_INTERVALS",{"type":75,"value":3203},"\u002F",{"type":70,"tag":173,"props":3205,"children":3207},{"className":3206},[],[3208],{"type":75,"value":3209},"TARGET_INTERVALS",{"type":75,"value":3211}," require ",{"type":70,"tag":173,"props":3213,"children":3215},{"className":3214},[],[3216],{"type":75,"value":948},{"type":75,"value":3218}," with a full ",{"type":70,"tag":173,"props":3220,"children":3222},{"className":3221},[],[3223],{"type":75,"value":956},{"type":75,"value":3225}," header; a raw BED will fail or silently produce wrong metrics",{"type":70,"tag":100,"props":3227,"children":3228},{},[3229,3233,3235,3239,3241,3247,3249,3255,3257,3262,3264,3268],{"type":70,"tag":104,"props":3230,"children":3231},{},[3232],{"type":75,"value":3137},{"type":75,"value":3234}," Using interval-list files with mismatched contig names or sort order\n",{"type":70,"tag":104,"props":3236,"children":3237},{},[3238],{"type":75,"value":3144},{"type":75,"value":3240}," Ensure contig names (",{"type":70,"tag":173,"props":3242,"children":3244},{"className":3243},[],[3245],{"type":75,"value":3246},"chr1",{"type":75,"value":3248}," vs ",{"type":70,"tag":173,"props":3250,"children":3252},{"className":3251},[],[3253],{"type":75,"value":3254},"1",{"type":75,"value":3256},") and ",{"type":70,"tag":173,"props":3258,"children":3260},{"className":3259},[],[3261],{"type":75,"value":956},{"type":75,"value":3263}," ordering match the BAM header exactly\n",{"type":70,"tag":104,"props":3265,"children":3266},{},[3267],{"type":75,"value":3159},{"type":75,"value":3269}," Mismatches cause silent metric errors or tool failures",{"type":70,"tag":100,"props":3271,"children":3272},{},[3273,3277,3279,3283,3285,3289],{"type":70,"tag":104,"props":3274,"children":3275},{},[3276],{"type":75,"value":3137},{"type":75,"value":3278}," Running MarkDuplicates on trimmed FASTQs or name-sorted BAMs\n",{"type":70,"tag":104,"props":3280,"children":3281},{},[3282],{"type":75,"value":3144},{"type":75,"value":3284}," Run MarkDuplicates only on coordinate-sorted, aligned BAMs\n",{"type":70,"tag":104,"props":3286,"children":3287},{},[3288],{"type":75,"value":3159},{"type":75,"value":3290}," MarkDuplicates requires coordinate-sorted aligned reads to identify optical and PCR duplicates",{"type":70,"tag":100,"props":3292,"children":3293},{},[3294,3298,3300,3304,3306,3312,3314,3318],{"type":70,"tag":104,"props":3295,"children":3296},{},[3297],{"type":75,"value":3137},{"type":75,"value":3299}," Reporting only mean coverage as the QC metric\n",{"type":70,"tag":104,"props":3301,"children":3302},{},[3303],{"type":75,"value":3144},{"type":75,"value":3305}," Always pair mean depth with breadth (",{"type":70,"tag":173,"props":3307,"children":3309},{"className":3308},[],[3310],{"type":75,"value":3311},"% ≥20x",{"type":75,"value":3313},") and duplicate rate\n",{"type":70,"tag":104,"props":3315,"children":3316},{},[3317],{"type":75,"value":3159},{"type":75,"value":3319}," A high mean with poor uniformity hides failing targets",{"type":70,"tag":100,"props":3321,"children":3322},{},[3323,3327,3329,3333,3335,3339],{"type":70,"tag":104,"props":3324,"children":3325},{},[3326],{"type":75,"value":3137},{"type":75,"value":3328}," Trusting auto-encoding detection on pre-2012 FASTQ data\n",{"type":70,"tag":104,"props":3330,"children":3331},{},[3332],{"type":75,"value":3144},{"type":75,"value":3334}," Verify Phred encoding explicitly before alignment for ancient data\n",{"type":70,"tag":104,"props":3336,"children":3337},{},[3338],{"type":75,"value":3159},{"type":75,"value":3340}," Phred+64 data passed to a modern aligner produces silently wrong base qualities",{"type":70,"tag":100,"props":3342,"children":3343},{},[3344,3348,3350,3354,3356,3360],{"type":70,"tag":104,"props":3345,"children":3346},{},[3347],{"type":75,"value":3137},{"type":75,"value":3349}," Merging lanes\u002Fsamples before running per-lane QC\n",{"type":70,"tag":104,"props":3351,"children":3352},{},[3353],{"type":75,"value":3144},{"type":75,"value":3355}," Run FastQC per lane\u002FFASTQ first; merge only after per-lane QC passes\n",{"type":70,"tag":104,"props":3357,"children":3358},{},[3359],{"type":75,"value":3159},{"type":75,"value":3361}," A single bad lane becomes unidentifiable once merged",{"type":70,"tag":100,"props":3363,"children":3364},{},[3365,3369,3371,3376,3378,3382,3384,3390,3392,3396,3398,3403],{"type":70,"tag":104,"props":3366,"children":3367},{},[3368],{"type":75,"value":3137},{"type":75,"value":3370}," Using ",{"type":70,"tag":173,"props":3372,"children":3374},{"className":3373},[],[3375],{"type":75,"value":614},{"type":75,"value":3377}," in fastp as the primary deduplication step\n",{"type":70,"tag":104,"props":3379,"children":3380},{},[3381],{"type":75,"value":3144},{"type":75,"value":3383}," Use Picard MarkDuplicates or ",{"type":70,"tag":173,"props":3385,"children":3387},{"className":3386},[],[3388],{"type":75,"value":3389},"samtools markdup",{"type":75,"value":3391}," post-alignment for deduplication\n",{"type":70,"tag":104,"props":3393,"children":3394},{},[3395],{"type":75,"value":3159},{"type":75,"value":3397}," fastp ",{"type":70,"tag":173,"props":3399,"children":3401},{"className":3400},[],[3402],{"type":75,"value":614},{"type":75,"value":3404}," only catches exact-sequence duplicates pre-alignment, missing alignment-based duplicates",{"type":70,"tag":100,"props":3406,"children":3407},{},[3408,3412,3414,3419,3423,3425,3430,3432,3436],{"type":70,"tag":104,"props":3409,"children":3410},{},[3411],{"type":75,"value":3137},{"type":75,"value":3413}," Running mosdepth on large genomes without ",{"type":70,"tag":173,"props":3415,"children":3417},{"className":3416},[],[3418],{"type":75,"value":1421},{"type":70,"tag":104,"props":3420,"children":3421},{},[3422],{"type":75,"value":3144},{"type":75,"value":3424}," Always use ",{"type":70,"tag":173,"props":3426,"children":3428},{"className":3427},[],[3429],{"type":75,"value":1421},{"type":75,"value":3431}," for QC on large genomes\n",{"type":70,"tag":104,"props":3433,"children":3434},{},[3435],{"type":75,"value":3159},{"type":75,"value":3437}," Per-base output is enormous and rarely needed; windowed\u002Fregion output is sufficient for QC",{"type":70,"tag":78,"props":3439,"children":3441},{"id":3440},"references",[3442],{"type":75,"value":3443},"References",{"type":70,"tag":316,"props":3445,"children":3446},{},[3447,3460,3471,3482,3493],{"type":70,"tag":100,"props":3448,"children":3449},{},[3450,3452],{"type":75,"value":3451},"FastQC: ",{"type":70,"tag":3453,"props":3454,"children":3458},"a",{"href":3455,"rel":3456},"https:\u002F\u002Fwww.bioinformatics.babraham.ac.uk\u002Fprojects\u002Ffastqc\u002F",[3457],"nofollow",[3459],{"type":75,"value":3455},{"type":70,"tag":100,"props":3461,"children":3462},{},[3463,3465],{"type":75,"value":3464},"fastp: Chen et al. Bioinformatics 2018, ",{"type":70,"tag":3453,"props":3466,"children":3469},{"href":3467,"rel":3468},"https:\u002F\u002Fdoi.org\u002F10.1093\u002Fbioinformatics\u002Fbty560",[3457],[3470],{"type":75,"value":3467},{"type":70,"tag":100,"props":3472,"children":3473},{},[3474,3476],{"type":75,"value":3475},"Picard: ",{"type":70,"tag":3453,"props":3477,"children":3480},{"href":3478,"rel":3479},"https:\u002F\u002Fbroadinstitute.github.io\u002Fpicard\u002F",[3457],[3481],{"type":75,"value":3478},{"type":70,"tag":100,"props":3483,"children":3484},{},[3485,3487],{"type":75,"value":3486},"mosdepth: Pedersen & Quinlan, Bioinformatics 2018, ",{"type":70,"tag":3453,"props":3488,"children":3491},{"href":3489,"rel":3490},"https:\u002F\u002Fdoi.org\u002F10.1093\u002Fbioinformatics\u002Fbtx699",[3457],[3492],{"type":75,"value":3489},{"type":70,"tag":100,"props":3494,"children":3495},{},[3496,3498],{"type":75,"value":3497},"Coverage recommendations: Sims et al. Nat Rev Genet 2014, ",{"type":70,"tag":3453,"props":3499,"children":3502},{"href":3500,"rel":3501},"https:\u002F\u002Fdoi.org\u002F10.1038\u002Fnrg3642",[3457],[3503],{"type":75,"value":3500},{"type":70,"tag":3505,"props":3506,"children":3507},"style",{},[3508],{"type":75,"value":3509},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3511,"total":3689},[3512,3531,3552,3562,3575,3588,3598,3608,3629,3644,3659,3674],{"slug":3513,"name":3513,"fn":3514,"description":3515,"org":3516,"tags":3517,"stars":3528,"repoUrl":3529,"updatedAt":3530},"agentcore-investigation","investigate Bedrock AgentCore runtime sessions","Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session\u002Ftrace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3518,3519,3522,3525],{"name":21,"slug":22,"type":16},{"name":3520,"slug":3521,"type":16},"Debugging","debugging",{"name":3523,"slug":3524,"type":16},"Logs","logs",{"name":3526,"slug":3527,"type":16},"Observability","observability",9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":3532,"name":3533,"fn":3534,"description":3535,"org":3536,"tags":3537,"stars":3528,"repoUrl":3529,"updatedAt":3551},"amazon-aurora-dsql","amazon aurora dsql","build applications with Aurora DSQL","Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django\u002FHibernate\u002FRails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, DSQL foreign key, DSQL OCC retry, DSQL multi-region, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3538,3541,3542,3545,3548],{"name":3539,"slug":3540,"type":16},"Aurora","aurora",{"name":21,"slug":22,"type":16},{"name":3543,"slug":3544,"type":16},"Database","database",{"name":3546,"slug":3547,"type":16},"Serverless","serverless",{"name":3549,"slug":3550,"type":16},"SQL","sql","2026-07-12T08:36:45.053393",{"slug":3553,"name":3554,"fn":3534,"description":3535,"org":3555,"tags":3556,"stars":3528,"repoUrl":3529,"updatedAt":3561},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3557,3558,3559,3560],{"name":21,"slug":22,"type":16},{"name":3543,"slug":3544,"type":16},{"name":3546,"slug":3547,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-12T08:36:42.694299",{"slug":3563,"name":3564,"fn":3534,"description":3535,"org":3565,"tags":3566,"stars":3528,"repoUrl":3529,"updatedAt":3574},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3567,3568,3569,3572,3573],{"name":21,"slug":22,"type":16},{"name":3543,"slug":3544,"type":16},{"name":3570,"slug":3571,"type":16},"Migration","migration",{"name":3546,"slug":3547,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-12T08:36:38.584057",{"slug":3576,"name":3577,"fn":3534,"description":3535,"org":3578,"tags":3579,"stars":3528,"repoUrl":3529,"updatedAt":3587},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3580,3581,3582,3585,3586],{"name":21,"slug":22,"type":16},{"name":3543,"slug":3544,"type":16},{"name":3583,"slug":3584,"type":16},"PostgreSQL","postgresql",{"name":3546,"slug":3547,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-12T08:36:46.530743",{"slug":3589,"name":3590,"fn":3534,"description":3535,"org":3591,"tags":3592,"stars":3528,"repoUrl":3529,"updatedAt":3597},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3593,3594,3595,3596],{"name":21,"slug":22,"type":16},{"name":3543,"slug":3544,"type":16},{"name":3546,"slug":3547,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-12T08:36:48.104182",{"slug":3599,"name":3599,"fn":3534,"description":3535,"org":3600,"tags":3601,"stars":3528,"repoUrl":3529,"updatedAt":3607},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3602,3603,3604,3605,3606],{"name":21,"slug":22,"type":16},{"name":3543,"slug":3544,"type":16},{"name":3570,"slug":3571,"type":16},{"name":3546,"slug":3547,"type":16},{"name":3549,"slug":3550,"type":16},"2026-07-12T08:36:36.374512",{"slug":3609,"name":3609,"fn":3610,"description":3611,"org":3612,"tags":3613,"stars":3626,"repoUrl":3627,"updatedAt":3628},"cost-efficiency-analyzer","analyze cost efficiency and expenses","Analyzes cost structure, cost efficiency, and expense management from P&L data. Use when the user asks about costs, expenses, COGS, operating expenses, cost ratios, cost control, spending efficiency, margin compression from cost side, or wants to understand where money is going. Also use for \"are we spending too much\", \"cost breakdown\", \"expense analysis\", or \"how efficient are our operations\". NOT for revenue or top-line analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3614,3617,3620,3623],{"name":3615,"slug":3616,"type":16},"Accounting","accounting",{"name":3618,"slug":3619,"type":16},"Analytics","analytics",{"name":3621,"slug":3622,"type":16},"Cost Optimization","cost-optimization",{"name":3624,"slug":3625,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":3630,"name":3630,"fn":3631,"description":3632,"org":3633,"tags":3634,"stars":3626,"repoUrl":3627,"updatedAt":3643},"executive-financial-briefing","generate executive financial briefings","Generates a concise executive-level financial briefing or summary suitable for a CEO, CFO, or board presentation. Use when the user asks for a summary, briefing, executive summary, board update, financial overview, financial health check, or \"how is the business doing\". Covers the full P&L picture in one page. Also use for \"give me the highlights\", \"what do I need to know\", or \"quick financial update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3635,3636,3637,3640],{"name":21,"slug":22,"type":16},{"name":3624,"slug":3625,"type":16},{"name":3638,"slug":3639,"type":16},"Management","management",{"name":3641,"slug":3642,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":3645,"name":3645,"fn":3646,"description":3647,"org":3648,"tags":3649,"stars":3626,"repoUrl":3627,"updatedAt":3658},"multi-quarter-trend-analysis","analyze multi-quarter financial trends","Analyzes financial trends across multiple quarters by comparing P&L metrics over time. Use when the user wants to see trends, patterns, trajectories, or directional movement across 3 or more quarters. Also use for \"how are we trending\", \"show me the trend\", \"track performance over time\", \"quarter over quarter comparison across all quarters\", or any multi-period longitudinal analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3650,3651,3652,3655],{"name":3618,"slug":3619,"type":16},{"name":3624,"slug":3625,"type":16},{"name":3653,"slug":3654,"type":16},"Financial Statements","financial-statements",{"name":3656,"slug":3657,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":3660,"name":3660,"fn":3661,"description":3662,"org":3663,"tags":3664,"stars":3626,"repoUrl":3627,"updatedAt":3673},"pdf","process and manipulate PDF documents","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3665,3668,3671],{"name":3666,"slug":3667,"type":16},"Automation","automation",{"name":3669,"slug":3670,"type":16},"Documents","documents",{"name":3672,"slug":3660,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":3675,"name":3675,"fn":3676,"description":3677,"org":3678,"tags":3679,"stars":3626,"repoUrl":3627,"updatedAt":3688},"quarterly-kpi-calculator","calculate quarterly financial KPIs","Calculates quarterly financial KPIs from P&L data. P&L figures can be provided directly by the user or fetched from the financial data MCP server. Use when the user wants KPI calculations such as Gross Margin %, EBITDA Margin %, Operating Expense Ratio, or Revenue Growth % QoQ. Also use for quarterly performance review, P&L analysis, or interpreting financial ratios against benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3680,3681,3684,3685],{"name":3615,"slug":3616,"type":16},{"name":3682,"slug":3683,"type":16},"Data Analysis","data-analysis",{"name":3624,"slug":3625,"type":16},{"name":3686,"slug":3687,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",150,{"items":3691,"total":3786},[3692,3711,3724,3738,3750,3763,3776],{"slug":3693,"name":3693,"fn":3694,"description":3695,"org":3696,"tags":3697,"stars":26,"repoUrl":27,"updatedAt":3710},"aws-genai-ml-architect","design AWS GenAI and ML architectures","Reasoning skill for designing AWS GenAI and ML architectures for healthcare and life sciences workloads. Use when the user asks to choose between SageMaker and Bedrock, design a RAG system over medical literature, architect clinical NLP or medical imaging inference, plan genomics or drug discovery pipelines on AWS, address HIPAA\u002FPHI compliance in ML systems, design MLOps for regulated clinical models, or optimize cost for HCLS ML workloads. Triggers include \"AWS architecture\", \"SageMaker vs Bedrock\", \"HIPAA ML\", \"clinical RAG\", \"medical imaging inference\", \"genomics on AWS\", \"PHI training\", \"MLOps healthcare\", \"Bedrock guardrails\", \"HealthLake\", \"HCLS cloud architecture\", \"BAA compliance\", \"SageMaker endpoint\", \"Bedrock knowledge base\", \"clinical NLP on AWS\", \"FDA SaMD on AWS\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3698,3701,3702,3705,3707],{"name":3699,"slug":3700,"type":16},"Architecture","architecture",{"name":21,"slug":22,"type":16},{"name":3703,"slug":3704,"type":16},"Healthcare","healthcare",{"name":3706,"slug":40,"type":16},"Life Sciences",{"name":3708,"slug":3709,"type":16},"LLM","llm","2026-07-12T08:38:07.975937",{"slug":3712,"name":3712,"fn":3713,"description":3714,"org":3715,"tags":3716,"stars":26,"repoUrl":27,"updatedAt":3723},"biomarker-discovery","guide biomarker discovery and validation","Reason about biomarker discovery and validation in HCLS — classifying biomarker intent, choosing feature-selection and cross-validation strategies, avoiding leakage, and planning external replication. Use when the user asks to discover, develop, or validate a biomarker; select features from high-dimensional omics or clinical data; design a validation study; choose evaluation metrics; justify sample size; combine multi-omics signals; or assess clinical utility. Triggers include \"discover a biomarker\", \"validate biomarker\", \"prognostic vs predictive\", \"feature selection\", \"LASSO vs elastic net\", \"nested cross-validation\", \"data leakage\", \"C-index\", \"time-dependent AUC\", \"decision curve analysis\", \"external validation cohort\", \"events per variable\", \"optimism-corrected\", \"multi-omics integration\", \"clinical utility of a biomarker\", \"is this biomarker ready\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3717,3718,3719,3720],{"name":21,"slug":22,"type":16},{"name":18,"slug":19,"type":16},{"name":3706,"slug":40,"type":16},{"name":3721,"slug":3722,"type":16},"Research","research","2026-07-12T08:37:49.295301",{"slug":3725,"name":3725,"fn":3726,"description":3727,"org":3728,"tags":3729,"stars":26,"repoUrl":27,"updatedAt":3737},"cdisc-compliance","reason about CDISC SDTM and ADaM implementation","Reason about CDISC SDTM and ADaM implementation for regulatory submissions. Use when the user asks about SDTM domain mapping, ADaM dataset design, controlled terminology versioning, define.xml completeness, FDA or PMDA submission requirements, query prioritization by clinical impact, SUPPQUAL usage, or CDISC compliance review. Triggers include \"SDTM mapping\", \"ADaM dataset\", \"CDISC compliance\", \"controlled terminology\", \"define.xml\", \"FDA submission data\", \"PMDA submission\", \"SDTM domain\", \"ADSL\", \"ADAE\", \"ADLB\", \"BDS structure\", \"SUPPQUAL\", \"RELREC\", \"value-level metadata\", \"CDISC CT\", \"regulatory submission data standards\", \"eCTD datasets\", \"SDTM 3.3\", \"ADaM 1.1\", \"query prioritization\", \"clinical data review\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3730,3733,3734],{"name":3731,"slug":3732,"type":16},"Clinical Trials","clinical-trials",{"name":3706,"slug":40,"type":16},{"name":3735,"slug":3736,"type":16},"Regulatory Compliance","regulatory-compliance","2026-07-12T08:37:33.35594",{"slug":3739,"name":3739,"fn":3740,"description":3741,"org":3742,"tags":3743,"stars":26,"repoUrl":27,"updatedAt":3749},"cell-type-annotation","annotate single-cell RNA-seq clusters","Generate code to assign cell type labels to single-cell RNA-seq clusters using CellTypist, SingleR, marker-based annotation, or reference label transfer (scANVI\u002Fingest). Triggers on requests to \"annotate cell types\", \"label clusters\", \"run CellTypist\", \"SingleR annotation\", \"marker gene dotplot\", \"transfer labels from reference atlas\", \"cell identity\", \"automated annotation\", \"reference mapping\", \"scANVI label transfer\", \"canonical markers\", \"immune cell types\", \"hierarchical annotation\", \"majority voting CellTypist\", \"over-clustering annotation\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3744,3745,3746,3747],{"name":18,"slug":19,"type":16},{"name":3682,"slug":3683,"type":16},{"name":3706,"slug":40,"type":16},{"name":1718,"slug":3748,"type":16},"rna-seq","2026-07-12T08:38:05.443454",{"slug":3751,"name":3751,"fn":3752,"description":3753,"org":3754,"tags":3755,"stars":26,"repoUrl":27,"updatedAt":3762},"cheminformatics","calculate molecular properties with RDKit","Cheminformatics pipeline for small-molecule property calculation, filtering, and similarity analysis using RDKit. Use when the user asks to compute molecular descriptors, filter compounds by Lipinski or Veber rules, detect PAINS, calculate fingerprint similarity, run matched molecular pair analysis, generate ADMET descriptors, or process SMILES. Triggers include \"RDKit\", \"molecular descriptors\", \"Lipinski\", \"rule of five\", \"Veber\", \"PAINS\", \"pan-assay interference\", \"Morgan fingerprint\", \"Tanimoto\", \"fingerprint similarity\", \"matched molecular pair\", \"MMP\", \"mmpdb\", \"ADMET\", \"druglikeness\", \"SMILES\", \"cheminformatics\", \"compound filtering\", \"chemical similarity\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3756,3757,3760,3761],{"name":18,"slug":19,"type":16},{"name":3758,"slug":3759,"type":16},"Chemistry","chemistry",{"name":3682,"slug":3683,"type":16},{"name":3721,"slug":3722,"type":16},"2026-07-12T08:37:28.334619",{"slug":3764,"name":3764,"fn":3765,"description":3766,"org":3767,"tags":3768,"stars":26,"repoUrl":27,"updatedAt":3775},"claims-analytics","analyze and parse healthcare claims data","Pipeline skill for healthcare claims data parsing, analysis, and fraud detection. Use when the user asks to parse X12 837 or 835 claim files, manipulate ICD-10 CPT or HCPCS codes, detect billing pattern anomalies, profile providers against specialty peers, identify outlier billing behavior, validate NCCI edits programmatically, detect duplicate claims, run Benford's law analysis on charges, build claims data pipelines, or analyze E&M code distributions. Triggers include \"parse X12 837\", \"parse 835\", \"claims SQL\", \"ICD-10 manipulation\", \"CPT code analysis\", \"provider profiling\", \"billing outlier\", \"NCCI validation code\", \"duplicate claim detection\", \"Benford's law charges\", \"claims ETL\", \"E&M distribution analysis\", \"claims analytics pipeline\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3769,3770,3771,3774],{"name":3682,"slug":3683,"type":16},{"name":3703,"slug":3704,"type":16},{"name":3772,"slug":3773,"type":16},"Insurance","insurance",{"name":3706,"slug":40,"type":16},"2026-07-12T08:37:34.815088",{"slug":3777,"name":3777,"fn":3778,"description":3779,"org":3780,"tags":3781,"stars":26,"repoUrl":27,"updatedAt":3785},"claims-billing-rules","analyze healthcare claims billing rules","Reasoning skill for healthcare claims billing rules and fraud detection logic. Use when the user asks about CMS billing rules, place of service codes, global surgery periods, modifier usage (25 59 76 77), NCCI edit logic, column 1 column 2 code pairs, mutually exclusive procedures, modifier indicators, fraud waste and abuse patterns, E&M upcoding, unbundling, phantom billing, impossible day detection, coding error versus fraud distinction, FWA investigation methodology, or claims audit logic. Triggers include \"CMS billing rules\", \"NCCI edits\", \"modifier 25\", \"modifier 59\", \"global surgery period\", \"upcoding\", \"unbundling\", \"phantom billing\", \"impossible day\", \"FWA\", \"fraud waste abuse\", \"coding error vs fraud\", \"claims audit\", \"billing compliance\", \"E&M level selection\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3782,3783,3784],{"name":3703,"slug":3704,"type":16},{"name":3772,"slug":3773,"type":16},{"name":3735,"slug":3736,"type":16},"2026-07-12T08:38:28.210856",40]