diff --git a/CHANGELOG.md b/CHANGELOG.md index f7a58fe..14dd1c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,5 @@ +## ASPEN development version + ## ASPEN 1.2.0 - Add `hs1_chrR` as a supported reference genome (T2T-CHM13 + chrR rDNA unit from [Paralkar lab](https://github.com/vikramparalkar/rDNA-Mapping-Genomes)). (#117, @kopardev) diff --git a/VERSION b/VERSION index 26aaba0..0c64b5c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.0 +1.2.0-dev diff --git a/docs/deployment.md b/docs/deployment.md index cb73f08..9a65142 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -31,13 +31,13 @@ ASPEN requires a sample manifest file (`samples.tsv`) to identify and organize y - `path_to_R2_fastq`: Absolute path to the Read 2 FASTQ file (required for paired-end data). !!! note - Symlinks for R1 and R2 files will be created in the results directory, named as `.R1.fastq.gz` and `.R2.fastq.gz`, respectively. Therefore, original filenames do not need to be altered. +Symlinks for R1 and R2 files will be created in the results directory, named as `.R1.fastq.gz` and `.R2.fastq.gz`, respectively. Therefore, original filenames do not need to be altered. !!! note - The `replicateName` is used as a prefix for individual peak calls, while the `sampleName` serves as a prefix for consensus peak calls. +The `replicateName` is used as a prefix for individual peak calls, while the `sampleName` serves as a prefix for consensus peak calls. !!! warning "Biological vs. technical replicates" - ASPEN expects **one row per biological replicate**. If you sequenced the same sample across multiple lanes or sequencing runs (technical replicates), you must **concatenate those FASTQ files into a single file** before creating your manifest — ASPEN does not merge lanes internally. +ASPEN expects **one row per biological replicate**. If you sequenced the same sample across multiple lanes or sequencing runs (technical replicates), you must **concatenate those FASTQ files into a single file** before creating your manifest — ASPEN does not merge lanes internally. | Replicate type | Definition | What to do | |---|---|---| @@ -53,7 +53,7 @@ ASPEN requires a sample manifest file (`samples.tsv`) to identify and organize y DESeq2 (used in `diffatac`) requires **at least 2 biological replicates per group**. Technical replicates do not count as biological replicates and will not satisfy this requirement. !!! note - For differential ATAC analysis, create a `contrasts.tsv` file with two columns (Group1 and Group2 ... aka Sample1 and Sample2, without headers) and place it in the output directory after initialization. Ensure each group/sample in the contrast has at least two biological replicates, as DESeq2 requires this for accurate contrast calculations. +For differential ATAC analysis, create a `contrasts.tsv` file with two columns (Group1 and Group2 ... aka Sample1 and Sample2, without headers) and place it in the output directory after initialization. Ensure each group/sample in the contrast has at least two biological replicates, as DESeq2 requires this for accurate contrast calculations. ## 🏃 Running the ASPEN Pipeline diff --git a/docs/limitations.md b/docs/limitations.md index 9fde857..7eed620 100644 --- a/docs/limitations.md +++ b/docs/limitations.md @@ -8,14 +8,14 @@ - **Genomes supported**: Genomes supported is limited to: -| Genome Assembly | Organism | Scientific Name | -| --------------- | --------------- | ---------------- | -| hg38 | Human | _Homo sapiens_ | -| hg19 | Human | _Homo sapiens_ | -| mm10 | Mouse | _Mus musculus_ | -| mmul10 | Rhesus Monkey | _Macaca mulatta_ | -| bosTau9 | Domestic Cattle | _Bos taurus_ | -| hs1 | Human | _Homo sapiens_ (T2T-CHM13) | +| Genome Assembly | Organism | Scientific Name | +| --------------- | --------------- | ----------------------------------------------------------- | +| hg38 | Human | _Homo sapiens_ | +| hg19 | Human | _Homo sapiens_ | +| mm10 | Mouse | _Mus musculus_ | +| mmul10 | Rhesus Monkey | _Macaca mulatta_ | +| bosTau9 | Domestic Cattle | _Bos taurus_ | +| hs1 | Human | _Homo sapiens_ (T2T-CHM13) | | hs1_chrR | Human | _Homo sapiens_ (T2T-CHM13 + chrR rDNA unit; see note below) | !!! tip "Use `hs1_chrR` for ribosomal DNA chromatin accessibility studies" diff --git a/docs/outputs.md b/docs/outputs.md index 140de66..17ccfec 100644 --- a/docs/outputs.md +++ b/docs/outputs.md @@ -138,7 +138,7 @@ important for interpreting output files and configuring the pipeline correctly. **Round 1 — Per-sample consensus** (`*.macs2.consensus.bed` / `*.genrich.consensus.bed`) -> *"Which peaks are reproducible across biological replicates of the same sample?"* +> _"Which peaks are reproducible across biological replicates of the same sample?"_ 1. All replicate tagAlign files for a sample are **pooled** and passed to MACS2/Genrich together → produces a large set of candidate peaks from the pooled data. 2. Each candidate peak is checked for overlap with peaks called in each **individual replicate**. @@ -152,7 +152,7 @@ replicate 3 peaks ─┘ (≥ min_replicates) **Round 2 — ROI consensus** (`ROI.macs2.bed` / `ROI.genrich.bed`) -> *"Across ALL samples, what is the unified set of fixed-width windows for differential accessibility analysis?"* +> _"Across ALL samples, what is the unified set of fixed-width windows for differential accessibility analysis?"_ 1. Per-sample consensus peaks are converted to **fixed-width windows** (default: 500 bp, centered on the peak summit) using the method from [Corces et al. 2018](https://doi.org/10.1038/nmeth.4396). Window width is controlled by `fixed_width` in `config.yaml`. 2. Fixed-width peaks from all samples are **merged** → `ROI.macs2.bed` — the master set of regions used for DESeq2 read counting and differential accessibility analysis. @@ -165,11 +165,12 @@ sample3.consensus.bed ─► fixed-width peaks ─┘ ``` !!! tip "Config knobs that control consensus" - | Parameter | Default | Effect | - |---|---|---| - | `consensus_min_replicates` | `1` | Min. replicates a peak must appear in to be retained in per-sample consensus | - | `consensus_min_spm` | `5` | Min. signal-per-million reads threshold for a peak to be included | - | `fixed_width` | `500` | Width (bp) of fixed-width peaks used to build the ROI set | + +| Parameter | Default | Effect | +| -------------------------- | ------- | ---------------------------------------------------------------------------- | +| `consensus_min_replicates` | `1` | Min. replicates a peak must appear in to be retained in per-sample consensus | +| `consensus_min_spm` | `5` | Min. signal-per-million reads threshold for a peak to be included | +| `fixed_width` | `500` | Width (bp) of fixed-width peaks used to build the ROI set | #### Peak Annotation folder diff --git a/workflow/scripts/ccbr_annotate_bed.R b/workflow/scripts/ccbr_annotate_bed.R index 2b6d169..0906ea9 100644 --- a/workflow/scripts/ccbr_annotate_bed.R +++ b/workflow/scripts/ccbr_annotate_bed.R @@ -118,7 +118,9 @@ if (args$genome == "bosTau9") { tdb <- TxDb.Btaurus.UCSC.bosTau9.refGene } if (args$genome %in% c("hs1", "hs1_chrR")) { - tdb <- AnnotationDbi::loadDb("/opt2/annotation/TxDb.Hsapiens.NCBI.T2T.CHM13v2.0.sqlite") + tdb <- AnnotationDbi::loadDb( + "/opt2/annotation/TxDb.Hsapiens.NCBI.T2T.CHM13v2.0.sqlite" + ) } diff --git a/workflow/scripts/ccbr_annotate_peaks.R b/workflow/scripts/ccbr_annotate_peaks.R index d4990df..5835bca 100644 --- a/workflow/scripts/ccbr_annotate_peaks.R +++ b/workflow/scripts/ccbr_annotate_peaks.R @@ -118,7 +118,9 @@ if (args$genome == "bosTau9") { tdb <- TxDb.Btaurus.UCSC.bosTau9.refGene } if (args$genome %in% c("hs1", "hs1_chrR")) { - tdb <- AnnotationDbi::loadDb("/opt2/annotation/TxDb.Hsapiens.NCBI.T2T.CHM13v2.0.sqlite") + tdb <- AnnotationDbi::loadDb( + "/opt2/annotation/TxDb.Hsapiens.NCBI.T2T.CHM13v2.0.sqlite" + ) } diff --git a/workflow/scripts/ccbr_atac_bam2tn5bed.py b/workflow/scripts/ccbr_atac_bam2tn5bed.py index 2e27a5a..f210939 100644 --- a/workflow/scripts/ccbr_atac_bam2tn5bed.py +++ b/workflow/scripts/ccbr_atac_bam2tn5bed.py @@ -237,6 +237,4 @@ def extract_fragments(input_bam, output_tn5, output_reads, threads, chrom_sizes) ) args = parser.parse_args() genome_sizes = parse_genome_sizes(args.genomefile) - extract_fragments( - args.bam, args.tn5bed, args.readsbed, args.ncpus, genome_sizes - ) + extract_fragments(args.bam, args.tn5bed, args.readsbed, args.ncpus, genome_sizes) diff --git a/workflow/scripts/ccbr_bam_filter_by_mapq.py b/workflow/scripts/ccbr_bam_filter_by_mapq.py index 81c9eaf..23ff49a 100644 --- a/workflow/scripts/ccbr_bam_filter_by_mapq.py +++ b/workflow/scripts/ccbr_bam_filter_by_mapq.py @@ -42,4 +42,4 @@ continue pairedreads.write(read) samfile.close() -pairedreads.close() \ No newline at end of file +pairedreads.close()