diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..07fe41c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# GitHub syntax highlighting +pixi.lock linguist-language=YAML linguist-generated=true diff --git a/.gitignore b/.gitignore index d40d6df..9b28e89 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ tmp/ .nf-test* work/ results/ +target/ +.pixi +*.egg-info diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..d453772 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,258 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anstream" +version = "0.6.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" + +[[package]] +name = "anstyle-parse" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "clap" +version = "4.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" + +[[package]] +name = "colorchoice" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "multi_align" +version = "0.1.0" +dependencies = [ + "clap", + "thiserror", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6af063034fc1935ede7be0122941bafa9bacb949334d090b77ca98b5817c7d9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..49f3209 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,5 @@ +[workspace] +resolver = "2" +members = [ + "crates/multi_align", +] \ No newline at end of file diff --git a/bin/multi_align b/bin/multi_align new file mode 120000 index 0000000..e4dc774 --- /dev/null +++ b/bin/multi_align @@ -0,0 +1 @@ +../target/release/multi_align \ No newline at end of file diff --git a/crates/multi_align/Cargo.toml b/crates/multi_align/Cargo.toml new file mode 100644 index 0000000..004a9c3 --- /dev/null +++ b/crates/multi_align/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "multi_align" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version = "4.5.16", features = ["derive"] } +thiserror = "1.0.63" diff --git a/crates/multi_align/src/backends/bowtie2.rs b/crates/multi_align/src/backends/bowtie2.rs new file mode 100644 index 0000000..03720f1 --- /dev/null +++ b/crates/multi_align/src/backends/bowtie2.rs @@ -0,0 +1,266 @@ +use std::{ + path::PathBuf, + process::{Command, ExitStatus}, +}; + +use crate::{ + Aligner, AlignerParams, AlignerResult, AlignmentMapFormat, CompressionFormat, FastQInput, + FastaFile, +}; + +pub struct Bowtie2Backend { + path: Option, +} + +#[derive(Debug, Clone, Copy)] +pub enum Preset { + VeryFast, + Fast, + Sensitive, + VerySensitive, +} + +pub struct Bowtie2IndexedFasta(pub FastaFile); + +pub struct Bowtie2Args { + fastq: Option, + nthreads: usize, + indexed_fasta: Option, + preset: Preset, + allow_spliced_alignments: bool, + extras: Vec, + output: Option, + local: bool, + memory_map: bool, +} + +impl Bowtie2Args { + pub fn append_extra(&mut self, extra: String) -> &mut Self { + self.extras.push(extra); + self + } + + pub fn preset(&mut self, preset: Preset) -> &mut Self { + self.preset = preset; + self + } + + pub fn memory_map(&mut self, memory_map: bool) -> &mut Self { + self.memory_map = memory_map; + self + } + + pub fn local(&mut self) -> &mut Self { + self.local = true; + self + } + + pub fn end_to_end(&mut self) -> &mut Self { + self.local = false; + self + } +} + +impl AlignerParams for Bowtie2Args { + type GenomeIndex = Bowtie2IndexedFasta; + + fn new() -> Self { + Bowtie2Args { + fastq: None, + nthreads: 1, + indexed_fasta: None, + allow_spliced_alignments: true, + preset: Preset::VerySensitive, + extras: Vec::new(), + memory_map: true, + local: false, + output: None, + } + } + + fn set_output(&mut self, output: PathBuf) -> Option<&mut Self> { + self.output = Some(output); + Some(self) + } + + fn threads(&mut self, threads: usize) -> Option<&mut Self> { + self.nthreads = threads; + Some(self) + } + + fn fastq(&mut self, fastq: FastQInput) -> Option<&mut Self> { + self.fastq = Some(fastq); + Some(self) + } + + fn genome_index(&mut self, index: Bowtie2IndexedFasta) -> Option<&mut Self> { + self.indexed_fasta = Some(index); + Some(self) + } + + fn allow_spliced_alignments(&mut self, allow: bool) -> Option<&mut Self> { + self.allow_spliced_alignments = allow; + Some(self) + } + + fn commit<'a, 'b: 'a>(&'a self, cmd: &'b mut Command) -> Option<&'b mut Command> { + cmd.arg("-q"); + + if self.local { + cmd.arg("--local"); + } else { + cmd.arg("--end-to-end"); + } + + cmd.arg("-p").arg(self.nthreads.to_string()); + + if self.memory_map { + cmd.arg("--mm"); + } + + let suffix = if self.local { "-local" } else { "" }; + match self.preset { + Preset::VeryFast => { + cmd.arg(format!("--very-fast{}", suffix)); + } + Preset::Fast => { + cmd.arg(format!("--fast{}", suffix)); + } + Preset::Sensitive => { + cmd.arg(format!("--sensitive{}", suffix)); + } + Preset::VerySensitive => { + cmd.arg(format!("--very-sensitive{}", suffix)); + } + } + + if let Some(output) = &self.output { + cmd.arg("-S").arg(output); + } + + for extra in &self.extras { + cmd.arg(extra); + } + + if let Some(index) = &self.indexed_fasta { + cmd.arg("-x").arg(&index.0 .0); + } else { + return None; + } + + match &self.fastq { + Some(FastQInput::Forward(f)) => { + cmd.arg("-U").arg(f); + } + Some(FastQInput::Reverse(r)) => { + cmd.arg("-U").arg(r); + } + Some(FastQInput::ForwardReverse(f, r)) => { + cmd.arg("-1").arg(f).arg("-2").arg(r); + } + Some(FastQInput::ReverseForward(r, f)) => { + cmd.arg("-1").arg(f).arg("-2").arg(r); + } + None => { + return None; + } + } + + Some(cmd) + } +} + +pub struct Bowtie2Result { + pub sam: PathBuf, +} + +impl AlignerResult for Bowtie2Result { + fn alignment_maps( + &self, + ) -> impl Iterator { + vec![( + self.sam.clone(), + AlignmentMapFormat::Sam, + CompressionFormat::None, + )] + .into_iter() + } + + fn statistics(&self) -> Option { + None + } +} + +impl Bowtie2Backend { + pub fn new() -> Self { + Bowtie2Backend { path: None } + } + + pub fn new_with_path(path: String) -> Self { + Bowtie2Backend { path: Some(path) } + } +} + +#[derive(Debug, thiserror::Error)] +pub enum Bowtie2Error { + #[error("IO error: {0}")] + Io(#[from] std::io::Error), + #[error("Non-zero status: {0}")] + ExitStatus(ExitStatus), +} + +impl From for Bowtie2Error { + fn from(e: ExitStatus) -> Self { + Bowtie2Error::ExitStatus(e) + } +} + +impl Aligner for Bowtie2Backend { + type Params = Bowtie2Args; + type Result = Bowtie2Result; + type Error = Bowtie2Error; + + fn new() -> Self { + Bowtie2Backend { path: None } + } + + fn new_with_path(path: String) -> Self { + Bowtie2Backend { path: Some(path) } + } + + fn name() -> &'static str { + "bowtie2" + } + + fn index( + &self, + input: FastaFile, + nthreads: usize, + ) -> Result<::GenomeIndex, Self::Error> { + Command::new(self.path.as_ref().unwrap_or(&"bowtie2-build".to_string())) + .arg("-f") + .arg("--threads") + .arg(nthreads.to_string()) + .arg(&input.0) + .arg(&input.0) + .output()?; + + Ok(Bowtie2IndexedFasta(input)) + } + + fn exec(&self, params: &mut Self::Params) -> Result { + let mut cmd = Command::new(self.path.as_ref().unwrap_or(&"bowtie2".to_string())); + + params.commit(&mut cmd); + + let status = cmd.status()?; + + if status.success() { + Ok(Bowtie2Result { + sam: params.output.clone().unwrap(), + }) + } else { + Err(status.into()) + } + } +} diff --git a/crates/multi_align/src/backends/bwa_mem.rs b/crates/multi_align/src/backends/bwa_mem.rs new file mode 100644 index 0000000..0064c33 --- /dev/null +++ b/crates/multi_align/src/backends/bwa_mem.rs @@ -0,0 +1,208 @@ +use std::{ + path::PathBuf, + process::{Command, ExitStatus}, +}; + +use crate::{ + Aligner, AlignerParams, AlignerResult, AlignmentMapFormat, CompressionFormat, FastQInput, + FastaFile, +}; + +pub struct BwaMemBackend { + path: Option, +} + +pub struct BwaMemIndexedFasta(pub FastaFile); + +pub struct BwaMemArgs { + fastq: Option, + nthreads: usize, + indexed_fasta: Option, + allow_spliced_alignments: bool, + extras: Vec, + output: Option, +} + +impl BwaMemArgs { + pub fn append_extra(&mut self, extra: String) -> &mut Self { + self.extras.push(extra); + self + } +} + +impl AlignerParams for BwaMemArgs { + type GenomeIndex = BwaMemIndexedFasta; + + fn new() -> Self { + BwaMemArgs { + fastq: None, + nthreads: 1, + indexed_fasta: None, + allow_spliced_alignments: true, + extras: Vec::new(), + output: None, + } + } + + fn set_output(&mut self, output: PathBuf) -> Option<&mut Self> { + self.output = Some(output); + Some(self) + } + + fn threads(&mut self, threads: usize) -> Option<&mut Self> { + self.nthreads = threads; + Some(self) + } + + fn fastq(&mut self, fastq: FastQInput) -> Option<&mut Self> { + self.fastq = Some(fastq); + Some(self) + } + + fn genome_index(&mut self, index: BwaMemIndexedFasta) -> Option<&mut Self> { + self.indexed_fasta = Some(index); + Some(self) + } + + fn allow_spliced_alignments(&mut self, allow: bool) -> Option<&mut Self> { + self.allow_spliced_alignments = allow; + Some(self) + } + + fn commit<'a, 'b: 'a>(&'a self, cmd: &'b mut Command) -> Option<&'b mut Command> { + cmd.arg("mem"); + + cmd.arg("-t").arg(self.nthreads.to_string()); + + if !self.allow_spliced_alignments { + cmd.arg("-O").arg("2147483647"); + } + + if let Some(output) = &self.output { + cmd.arg("-o").arg(output); + } + + for extra in &self.extras { + cmd.arg(extra); + } + + if let Some(index) = &self.indexed_fasta { + cmd.arg(&index.0 .0); + } + + match &self.fastq { + Some(FastQInput::Forward(f)) => { + cmd.arg(f); + } + Some(FastQInput::Reverse(r)) => { + cmd.arg(r); + } + Some(FastQInput::ForwardReverse(f, r)) => { + cmd.arg(f).arg(r); + } + Some(FastQInput::ReverseForward(r, f)) => { + cmd.arg(r).arg(f); + } + None => { + return None; + } + } + + Some(cmd) + } +} + +pub struct BwaMemResult { + pub sam: PathBuf, +} + +impl AlignerResult for BwaMemResult { + fn alignment_maps( + &self, + ) -> impl Iterator { + vec![( + self.sam.clone(), + AlignmentMapFormat::Sam, + CompressionFormat::None, + )] + .into_iter() + } + + fn statistics(&self) -> Option { + None + } +} + +impl BwaMemBackend { + pub fn new() -> Self { + BwaMemBackend { path: None } + } + + pub fn new_with_path(path: String) -> Self { + BwaMemBackend { path: Some(path) } + } +} + +#[derive(Debug, thiserror::Error)] +pub enum BwaMemError { + #[error("IO error: {0}")] + Io(#[from] std::io::Error), + #[error("Non-zero status: {0}")] + ExitStatus(ExitStatus), +} + +impl From for BwaMemError { + fn from(e: ExitStatus) -> Self { + BwaMemError::ExitStatus(e) + } +} + +impl Aligner for BwaMemBackend { + type Params = BwaMemArgs; + type Result = BwaMemResult; + type Error = BwaMemError; + + fn name() -> &'static str { + "bwa mem" + } + + fn new() -> Self { + BwaMemBackend { path: None } + } + + fn new_with_path(path: String) -> Self { + BwaMemBackend { path: Some(path) } + } + + fn index( + &self, + input: FastaFile, + _nthreads: usize, + ) -> Result<::GenomeIndex, Self::Error> { + Command::new(self.path.as_ref().unwrap_or(&"bwa".to_string())) + .arg("index") + .arg(&input.0) + .output()?; + + Ok(BwaMemIndexedFasta(input)) + } + + fn exec(&self, params: &mut Self::Params) -> Result { + let mut cmd = Command::new(self.path.as_ref().unwrap_or(&"bwa".to_string())); + + params.commit(&mut cmd); + + let status = cmd.status()?; + + if status.success() { + Ok(BwaMemResult { + sam: params + .output + .clone() + .unwrap_or_else(|| PathBuf::from("/dev/stdout")), + }) + } else { + Err(status.into()) + } + } +} diff --git a/crates/multi_align/src/backends/hisat2.rs b/crates/multi_align/src/backends/hisat2.rs new file mode 100644 index 0000000..6b35e5b --- /dev/null +++ b/crates/multi_align/src/backends/hisat2.rs @@ -0,0 +1,216 @@ +use std::{ + io, + path::PathBuf, + process::{Command, ExitStatus}, +}; + +use crate::{Aligner, AlignerParams, AlignerResult, FastQInput}; + +pub struct Hisat2Backend { + path: Option, +} + +pub enum Hisat2Preset { + Fast, + Sensitive, + VerySensitive, +} + +pub struct Hisat2Args { + fastq: Option, + nthreads: usize, + preset: Hisat2Preset, + no_spliced_alignments: bool, + extras: Vec, + output: Option, + index: Option, +} + +impl Hisat2Args { + pub fn append_extra(&mut self, extra: String) -> &mut Self { + self.extras.push(extra); + self + } +} + +pub struct Hisat2Index(pub PathBuf); + +impl AlignerParams for Hisat2Args { + type GenomeIndex = Hisat2Index; + + fn new() -> Self { + Hisat2Args { + fastq: None, + nthreads: 1, + preset: Hisat2Preset::VerySensitive, + no_spliced_alignments: false, + extras: Vec::new(), + output: None, + index: None, + } + } + + fn set_output(&mut self, output: PathBuf) -> Option<&mut Self> { + self.output = Some(output); + Some(self) + } + + fn genome_index(&mut self, index: Self::GenomeIndex) -> Option<&mut Self> { + self.index = Some(index); + Some(self) + } + + fn threads(&mut self, threads: usize) -> Option<&mut Self> { + self.nthreads = threads; + Some(self) + } + + fn fastq(&mut self, fastq: FastQInput) -> Option<&mut Self> { + self.fastq = Some(fastq); + Some(self) + } + + fn allow_spliced_alignments(&mut self, allow: bool) -> Option<&mut Self> { + self.no_spliced_alignments = !allow; + Some(self) + } + + fn commit<'a, 'b: 'a>(&'a self, cmd: &'b mut Command) -> Option<&'b mut Command> { + cmd.arg("--new-summary"); + + match self.preset { + Hisat2Preset::Fast => { + cmd.arg("--very-fast"); + } + Hisat2Preset::Sensitive => { + cmd.arg("--sensitive"); + } + Hisat2Preset::VerySensitive => { + cmd.arg("--very-sensitive"); + } + } + + if self.no_spliced_alignments { + cmd.arg("--no-spliced-alignment"); + } + + cmd.args(self.extras.iter()); + + cmd.arg("-x") + .arg(&self.index.as_ref()?.0) + .arg("-p") + .arg(self.nthreads.to_string()); + + Some(match &self.fastq { + Some(FastQInput::Forward(f)) => cmd.arg("-U").arg(f).arg("--rna-strandness").arg("F"), + Some(FastQInput::Reverse(r)) => cmd.arg("-U").arg(r).arg("--rna-strandness").arg("R"), + Some(FastQInput::ForwardReverse(f, r)) => cmd + .arg("-1") + .arg(f) + .arg("-2") + .arg(r) + .arg("--rna-strandness") + .arg("FR"), + Some(FastQInput::ReverseForward(r, f)) => cmd + .arg("-1") + .arg(f) + .arg("-2") + .arg(r) + .arg("--rna-strandness") + .arg("RF"), + + None => return None, + }) + .map(|cmd| { + if self.output.is_some() { + cmd.arg("-S") + .arg(self.output.clone().unwrap()) + .arg("--summary-file") + .arg(self.output.clone().unwrap().with_extension("mapstats")) + } else { + cmd + } + }) + } +} + +pub struct Hisat2Result { + sam_path: PathBuf, + mapstats_path: PathBuf, +} + +impl AlignerResult for Hisat2Result { + fn alignment_maps( + &self, + ) -> impl Iterator { + vec![( + self.sam_path.clone(), + crate::AlignmentMapFormat::Sam, + crate::CompressionFormat::None, + )] + .into_iter() + } + + fn statistics(&self) -> Option { + Some(self.mapstats_path.clone()) + } +} + +#[derive(Debug, thiserror::Error)] +pub enum Hisat2Error { + #[error("IO error: {0}")] + Io(#[from] io::Error), + #[error("Command exited with non-zero status: {0}")] + Command(ExitStatus), +} + +impl From for Hisat2Error { + fn from(e: ExitStatus) -> Self { + Hisat2Error::Command(e) + } +} + +impl Aligner for Hisat2Backend { + type Params = Hisat2Args; + type Result = Hisat2Result; + type Error = Hisat2Error; + + fn name() -> &'static str { + "hisat2" + } + + fn new() -> Self { + Hisat2Backend { path: None } + } + + fn new_with_path(path: String) -> Self { + Hisat2Backend { path: Some(path) } + } + + fn exec(&self, params: &mut Self::Params) -> Result { + let mut cmd = + std::process::Command::new(self.path.as_ref().unwrap_or(&"hisat2".to_string())); + + let cmd = params + .commit(&mut cmd) + .expect("Incomplete input for hisat2"); + + let status = cmd.status()?; + + if status.success() { + Ok(Hisat2Result { + sam_path: params + .output + .clone() + .unwrap_or_else(|| PathBuf::from("/dev/stdout")), + mapstats_path: params + .output + .clone() + .unwrap_or_else(|| PathBuf::from("/dev/stdout")) + .with_extension("mapstats"), + }) + } else { + Err(status.into()) + } + } +} diff --git a/crates/multi_align/src/backends/mod.rs b/crates/multi_align/src/backends/mod.rs new file mode 100644 index 0000000..2f71f77 --- /dev/null +++ b/crates/multi_align/src/backends/mod.rs @@ -0,0 +1,3 @@ +pub mod bowtie2; +pub mod bwa_mem; +pub mod hisat2; diff --git a/crates/multi_align/src/lib.rs b/crates/multi_align/src/lib.rs new file mode 100644 index 0000000..22dd84a --- /dev/null +++ b/crates/multi_align/src/lib.rs @@ -0,0 +1,89 @@ +use std::{ + path::PathBuf, + process::{Command, ExitStatus}, +}; + +pub mod backends; + +pub enum FastQInput { + Forward(PathBuf), + Reverse(PathBuf), + ForwardReverse(PathBuf, PathBuf), + ReverseForward(PathBuf, PathBuf), +} + +pub struct FastaFile(pub PathBuf); + +#[allow(unused_variables)] +pub trait AlignerParams: Sized { + type GenomeIndex; + + fn new() -> Self; + + fn genome_index(&mut self, index: Self::GenomeIndex) -> Option<&mut Self> { + None + } + + fn fastq(&mut self, fastq: FastQInput) -> Option<&mut Self> { + None + } + + fn threads(&mut self, threads: usize) -> Option<&mut Self> { + None + } + + fn allow_spliced_alignments(&mut self, allow: bool) -> Option<&mut Self> { + None + } + + fn set_output(&mut self, output: PathBuf) -> Option<&mut Self> { + None + } + + fn commit<'a, 'b: 'a>(&'a self, cmd: &'b mut Command) -> Option<&'b mut Command> { + None + } +} + +pub enum AlignmentMapFormat { + Sam, + Bam, + Cram, +} + +pub enum CompressionFormat { + None, + Gzip, + Bgzip, +} + +pub trait AlignerResult { + fn alignment_maps( + &self, + ) -> impl Iterator; + + fn statistics(&self) -> Option { + None + } +} + +pub trait Aligner { + type Params: AlignerParams; + type Result: AlignerResult; + type Error: From; + + fn name() -> &'static str; + + fn new() -> Self; + fn new_with_path(path: String) -> Self; + + fn index( + &self, + _input: FastaFile, + _nthreads: usize, + ) -> Result<::GenomeIndex, Self::Error> { + unimplemented!("{} does not have indexing implemented", Self::name()) + } + + fn exec(&self, params: &mut Self::Params) -> Result; +} diff --git a/crates/multi_align/src/main.rs b/crates/multi_align/src/main.rs new file mode 100644 index 0000000..64dfa61 --- /dev/null +++ b/crates/multi_align/src/main.rs @@ -0,0 +1,176 @@ +use clap::Parser; +use multi_align::{ + backends::{ + bowtie2::{self, Bowtie2Args, Bowtie2Backend, Bowtie2IndexedFasta}, + bwa_mem::{BwaMemArgs, BwaMemBackend, BwaMemIndexedFasta}, + hisat2::{Hisat2Args, Hisat2Backend, Hisat2Index}, + }, + Aligner, AlignerParams, FastQInput, FastaFile, +}; + +#[derive(Debug, Parser)] +struct Args { + #[clap(long)] + input_forward: Option, + #[clap(long)] + input_reverse: Option, + + #[clap(short, long)] + output: String, + #[clap(short, long)] + threads: usize, + #[clap(long, default_value = "true")] + allow_spliced_alignments: Option, + + #[clap(subcommand)] + subcmd: SubCommand, +} + +#[derive(Debug, Parser)] +enum SubCommand { + #[clap(name = "hisat2")] + Hisat2(Hisat2Options), + #[clap(name = "bwa-mem")] + BwaMem(BwaMemOptions), + #[clap(name = "bowtie2")] + Bowtie2(Bowtie2Options), +} + +#[derive(Debug, Parser)] +struct Hisat2Options { + #[clap(long)] + index: String, +} + +#[derive(Debug, Parser)] +struct BwaMemOptions { + #[clap(short, long)] + genome: Option, + + #[clap(long)] + index: Option, +} + +#[derive(Debug, Parser)] +struct Bowtie2Options { + #[clap(short, long)] + genome: Option, + + #[clap(long)] + index: Option, +} + +fn main() { + let args = Args::parse(); + println!("{:?}", args); + + let allow_spliced_alignments = args.allow_spliced_alignments.unwrap_or(true); + + match args.subcmd { + SubCommand::Hisat2(opt) => { + let backend = Hisat2Backend::new(); + backend + .exec( + Hisat2Args::new() + .threads(args.threads) + .expect("Failed to set threads") + .genome_index(Hisat2Index(opt.index.into())) + .expect("Failed to set genome index") + .fastq(match (args.input_forward, args.input_reverse) { + (Some(forward), Some(reverse)) => { + FastQInput::ForwardReverse(forward.into(), reverse.into()) + } + (Some(single), None) => FastQInput::Forward(single.into()), + (None, Some(single)) => FastQInput::Reverse(single.into()), + _ => panic!("Invalid input"), + }) + .expect("Failed to set fastq") + .allow_spliced_alignments(allow_spliced_alignments) + .expect("Failed to set spliced alignments") + .set_output(args.output.into()) + .expect("Failed to set output"), + ) + .expect("Failed to align"); + } + SubCommand::BwaMem(opt) => { + let backend = BwaMemBackend::new(); + + let index = opt + .index + .map(|index| BwaMemIndexedFasta(FastaFile(index.into()))) + .unwrap_or_else(|| { + backend + .index( + FastaFile(opt.genome.expect("Genome file not provided").into()), + args.threads, + ) + .expect("Failed to index genome") + }); + + backend + .exec( + BwaMemArgs::new() + .threads(args.threads) + .expect("Failed to set threads") + .genome_index(index) + .expect("Failed to set genome index") + .fastq(match (args.input_forward, args.input_reverse) { + (Some(forward), Some(reverse)) => { + FastQInput::ForwardReverse(forward.into(), reverse.into()) + } + (Some(single), None) => FastQInput::Forward(single.into()), + (None, Some(single)) => FastQInput::Reverse(single.into()), + _ => panic!("Invalid input"), + }) + .expect("Failed to set fastq") + .allow_spliced_alignments(allow_spliced_alignments) + .expect("Failed to set spliced alignments") + .set_output(args.output.into()) + .expect("Failed to set output"), + ) + .expect("Failed to align"); + } + SubCommand::Bowtie2(opt) => { + let backend = Bowtie2Backend::new(); + + let index = opt + .index + .map(|index| Bowtie2IndexedFasta(FastaFile(index.into()))) + .unwrap_or_else(|| { + backend + .index( + FastaFile(opt.genome.expect("Genome file not provided").into()), + args.threads, + ) + .expect("Failed to index genome") + }); + + backend + .exec( + Bowtie2Args::new() + .local() + .preset(bowtie2::Preset::VerySensitive) + .threads(args.threads) + .expect("Failed to set threads") + .genome_index(index) + .expect("Failed to set genome index") + .fastq(match (args.input_forward, args.input_reverse) { + (Some(forward), Some(reverse)) => { + FastQInput::ForwardReverse(forward.into(), reverse.into()) + } + (Some(single), None) => FastQInput::Forward(single.into()), + (None, Some(single)) => FastQInput::Reverse(single.into()), + _ => panic!("Invalid input"), + }) + .expect("Failed to set fastq") + .allow_spliced_alignments(allow_spliced_alignments) + .expect("Failed to set spliced alignments") + .set_output(args.output.into()) + .expect("Failed to set output"), + ) + .expect("Failed to align"); + } + } + + println!("Done! :)"); +} diff --git a/dbnascent/.gitignore b/dbnascent/.gitignore new file mode 100644 index 0000000..f0ef5a9 --- /dev/null +++ b/dbnascent/.gitignore @@ -0,0 +1,2 @@ +cmp/ +data/ diff --git a/dbnascent/custom.config b/dbnascent/custom.config new file mode 100644 index 0000000..e03cdfd --- /dev/null +++ b/dbnascent/custom.config @@ -0,0 +1,36 @@ +process { + withName: 'PROSEQ2' { + cpus = 4 + memory = '8.GB' + } + + withName: 'DREG_RUN' { + // TODO: actually detect how many GPUs are available + maxForks = 1 + } +} + +params { + input = "dbnascent_samplesheet_mini.csv" + fasta = "/home/yume/datasets/hg38/hg38.fa" + + fasta_indices = "/home/yume/datasets/hg38/hg38.fa.*" + + prep_bw = true + + hisat_indices = "/home/yume/datasets/hg38/hisat2/hg38/genome" + + bbmap_adapters = "/home/yume/datasets/bbmap/adapters.fa" + + + singleEnd = true + unStranded = true + + dreg_model = "/home/yume/datasets/asvm.gdm.6.6M.20170828.rdata" + +} + +executors { + cpus = 16 + memory = "56 GB" +} \ No newline at end of file diff --git a/dbnascent/dbnascent_samplesheet.csv b/dbnascent/dbnascent_samplesheet.csv new file mode 100644 index 0000000..4d03afb --- /dev/null +++ b/dbnascent/dbnascent_samplesheet.csv @@ -0,0 +1,23 @@ +sample,fastq_1,fastq_2 +Li2021comprehensive_MCF7_NaN,./data/SRR10298308.fastq.gz, +Li2021comprehensive_MDA-MB-231_NaN,./data/SRR10298309.fastq.gz, +Wang2020proapoptotic_MCF7_vehicle,./data/SRR10400216.fastq.gz, +Wang2020proapoptotic_MCF7_vehicle,./data/SRR10400217.fastq.gz, +Wang2020proapoptotic_MCF7_hydroxytamoxifen,./data/SRR10400218.fastq.gz, +Wang2020proapoptotic_MCF7_hydroxytamoxifen,./data/SRR10400219.fastq.gz, +Wang2020proapoptotic_MCF7_doxycycline,./data/SRR10400220.fastq.gz, +Wang2020proapoptotic_MCF7_doxycycline,./data/SRR10400221.fastq.gz, +Wang2020proapoptotic_MCF7_doxycycline-hydroxytamoxifen,./data/SRR10400222.fastq.gz, +Wang2020proapoptotic_MCF7_doxycycline-hydroxytamoxifen,./data/SRR10400223.fastq.gz, +Park2020global_TRExBCBL1_NaN,./data/SRR11314417.fastq.gz, +Linnakuosmanen2020nrf2_HUVEC_nitro-octadec-9-enoic-acid,./data/SRR11849647.fastq.gz, +Bi2020enhancer_MCF7_NaN,./data/SRR8743260.fastq.gz, +Bi2020enhancer_MCF7_doxycycline,./data/SRR8743261.fastq.gz, +Bi2020enhancer_MCF7_NaN,./data/SRR8743262.fastq.gz, +Bi2020enhancer_MCF7_NaN,./data/SRR8743265.fastq.gz, +Bi2020enhancer_MCF7_hydroxytamoxifen,./data/SRR8743267.fastq.gz, +Bi2020enhancer_MCF7_hydroxytamoxifen,./data/SRR8743268.fastq.gz, +Wang2020increased_SRZ10466082_NSPC_NaN_REP1,./data/SRR10466082.fastq.gz, +Wang2020increased_SRZ10466082_NSPC_NaN_REP2,./data/SRR10466083.fastq.gz, +Wang2020increased_SRZ10466084_NSPC_NaN_REP1,./data/SRR10466084.fastq.gz, +Wang2020increased_SRZ10466084_NSPC_NaN_REP2,./data/SRR10466085.fastq.gz, diff --git a/dbnascent/dbnascent_samplesheet_mini.csv b/dbnascent/dbnascent_samplesheet_mini.csv new file mode 100644 index 0000000..e5999df --- /dev/null +++ b/dbnascent/dbnascent_samplesheet_mini.csv @@ -0,0 +1,5 @@ +sample,fastq_1,fastq_2 +Wang2020proapoptotic_MCF7_hydroxytamoxifen,./data/SRR10400218.fastq.gz, +Wang2020proapoptotic_MCF7_hydroxytamoxifen,./data/SRR10400219.fastq.gz, +Bi2020enhancer_MCF7_hydroxytamoxifen,./data/SRR8743268.fastq.gz, +Wang2020increased_SRZ10466082_NSPC_NaN_REP1,./data/SRR10466082.fastq.gz, \ No newline at end of file diff --git a/main.nf b/main.nf index cf2d49c..1f3a811 100644 --- a/main.nf +++ b/main.nf @@ -1,6 +1,7 @@ #!/usr/bin/env nextflow include { validateParameters; paramsHelp; paramsSummaryLog; fromSamplesheet } from 'plugin/nf-validation' +include { PREP_BW } from './subworkflows/prep_bw/main.nf' // Print help message, supply typical command line usage for the pipeline if (params.help) { @@ -63,15 +64,29 @@ workflow { ch_chromInfo = Channel.fromPath(file(params.chromInfo)) } - PROSEQ2 ( - ch_cat_fastq, - params.bwa_index, - ch_chromInfo, - params.assay_type, - ) + if (params.prep_bw) { + PREP_BW ( + ch_cat_fastq, + params.fasta, + params.fasta_indices, + ch_chromInfo + ) + | set { ch_plus_minus_bw } + } else { + PROSEQ2 ( + ch_cat_fastq, + params.bwa_index, + ch_chromInfo, + params.assay_type, + ) + + PROSEQ2.out.plus_bigwig + | join (PROSEQ2.out.minus_bigwig, by: [0]) + | set { ch_plus_minus_bw } + } + if(params.run_dreg) { - ch_plus_minus_bw = PROSEQ2.out.plus_bigwig.join(PROSEQ2.out.minus_bigwig, by: [0]) DREG_RUN ( ch_plus_minus_bw, params.dreg_model, diff --git a/modules/local/dreg/main.nf b/modules/local/dreg/main.nf index 68f3820..646e884 100644 --- a/modules/local/dreg/main.nf +++ b/modules/local/dreg/main.nf @@ -17,7 +17,7 @@ process DREG_RUN { tuple val(meta), path("dREG_output_*"), emit: dREG script: - def prefix = "dREG_output_${meta.id}_" + def prefix = "dREG_output_${meta.id}_${meta.aligner}_" """ /dREG/run_dREG.R \\ ${pos_bw} \\ diff --git a/modules/local/proseq2/main.nf b/modules/local/proseq2/main.nf index f1a78b7..2ce0008 100644 --- a/modules/local/proseq2/main.nf +++ b/modules/local/proseq2/main.nf @@ -23,9 +23,11 @@ process PROSEQ2 { task.ext.when == null || task.ext.when script: - prefix = task.ext.prefix ?: "${meta.id}" + mata.aligner = "proseq2.0" + prefix = task.ext.prefix ?: "${meta.id}.${meta.aligner}" def reads_command = meta.single_end ? "-SE" : "-PE" def required_se_options = meta.single_end ? assay_type == "GROseq" ? "-G" : "-P" : "" + // TODO PE """ INDEX=`find -L ./ -name "*.amb" | sed 's/\\.amb\$//'` diff --git a/nextflow.config b/nextflow.config index 26fc28d..714ace1 100644 --- a/nextflow.config +++ b/nextflow.config @@ -26,12 +26,23 @@ profiles { outdir ="results/" } docker.enabled = true + // https://github.com/nf-core/configs/blob/34fabcec2a7e7d68af55745dbf3eeecd81200d92/conf/imperial.config#L81 + containerOptions = { + workflow.containerEngine == "singularity" + ? '--nv --env CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES' + : (workflow.containerEngine == "docker" ? '--gpus all -e CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES' : null) + } wave.enabled = true } utd_ganymede { includeConfig "https://raw.githubusercontent.com/nf-core/configs/master/conf/utd_ganymede.config" wave.enabled = true wave.strategy = ["conda", "container"] + containerOptions = { + workflow.containerEngine == "singularity" + ? '--nv --env CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES' + : (workflow.containerEngine == "docker" ? '--gpus all -e CUDA_VISIBLE_DEVICES=$CUDA_VISIBLE_DEVICES' : null) + } process { cpus = 16 memory = 28.GB diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..fa14319 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,1769 @@ +version: 5 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/bioconda/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.12-h4ab18f5_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/bbmap-39.10-h92535d8_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/linux-64/bedtools-2.31.1-hf5e1c6e_2.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/linux-64/bowtie2-2.5.4-h7071971_4.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/linux-64/bwa-0.7.18-he4a0461_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.32.3-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hbb29018_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/coreutils-9.5-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/curl-8.10.1-hbbe4b11_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/fastqc-0.12.1-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/gsl-1.16-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.5.0-hfac3d4d_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/hisat2-2.2.1-hdbdd923_6.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h5efdd21_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/bioconda/noarch/igvtools-2.17.3-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.1-h2ff4ddf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenssl-static-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-h4852527_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-h6565414_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-mpich.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mpich-4.2.3-h670b19f_100.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/mysql-connector-c-6.1.11-h659d440_1008.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/bioconda/noarch/nextflow-24.04.4-hdfd78af_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-21.0.0-haa376d0_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/preseq-2.0.2-gsl1.16_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.0-h9ebbce0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.13-5_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h50ea8bc_0.tar.bz2 + - conda: https://conda.anaconda.org/bioconda/linux-64/sra-tools-2.9.6-hf484d3e_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/bioconda/linux-64/ucsc-bedgraphtobigwig-469-h9b8f530_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.0-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda +packages: +- kind: conda + name: _libgcc_mutex + version: '0.1' + build: conda_forge + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 + md5: d7c89558ba9fa0495403155b64376d81 + license: None + size: 2562 + timestamp: 1578324546067 +- kind: conda + name: _openmp_mutex + version: '4.5' + build: 2_gnu + build_number: 16 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + sha256: fbe2c5e56a653bebb982eda4876a9178aedfc2b545f25d0ce9c4c0b508253d22 + md5: 73aaf86a425cc6e73fcf236a5a46396d + depends: + - _libgcc_mutex 0.1 conda_forge + - libgomp >=7.5.0 + constrains: + - openmp_impl 9999 + license: BSD-3-Clause + license_family: BSD + size: 23621 + timestamp: 1650670423406 +- kind: conda + name: alsa-lib + version: 1.2.12 + build: h4ab18f5_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.12-h4ab18f5_0.conda + sha256: 64b95dd06d7ca6b54cea03b02da8f1657b9899ca376d0ca7b47823064f55fb16 + md5: 7ed427f0871fd41cb1d9c17727c17589 + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + license_family: GPL + size: 555868 + timestamp: 1718118368236 +- kind: conda + name: bbmap + version: '39.10' + build: h92535d8_0 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/bbmap-39.10-h92535d8_0.tar.bz2 + sha256: 8d8d5de4515b94454e747417a6f7d0559b5c526acb82b2382a7a651312d9102d + md5: a9b402e7ef5af9c6366ecec72ea57d11 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc >=12 + - openjdk >=7.0 + - samtools >=1.21,<2.0a0 + license: UC-LBL license (see package) + size: 14121076 + timestamp: 1728503341010 +- kind: conda + name: bedtools + version: 2.31.1 + build: hf5e1c6e_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/bedtools-2.31.1-hf5e1c6e_2.tar.bz2 + sha256: bb257aa49d4039bd24363d0d5d2948bfb4ae6de2245fe706b1152bfc2229da3f + md5: 55aacbd977c83d6d4849c91310ef48c5 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + size: 1601046 + timestamp: 1720647529569 +- kind: conda + name: bowtie2 + version: 2.5.4 + build: h7071971_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/bowtie2-2.5.4-h7071971_4.tar.bz2 + sha256: d02662a31dbca71f6230065e154b3e00666f387b5083486f16b2f7b563a6f77e + md5: 69822858766e6c8b12ae90d78d54d8ea + depends: + - _openmp_mutex >=4.5 + - libgcc-ng >=12 + - libgomp + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0a0 + - perl + - python + - zstd >=1.5.6,<1.6.0a0 + license: GPL-3.0-only + license_family: GPL3 + size: 14966002 + timestamp: 1724162485205 +- kind: conda + name: bwa + version: 0.7.18 + build: he4a0461_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/bwa-0.7.18-he4a0461_1.tar.bz2 + sha256: f8a9482e07214cd1595f021ff66c327e4d77a903515d11295a7f5db05d3fdb86 + md5: 4ecde7d4a03fabe440a90aea1389d62d + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0a0 + - perl + license: GPL3 + size: 196166 + timestamp: 1721182139359 +- kind: conda + name: bzip2 + version: 1.0.8 + build: h4bc722e_7 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d + md5: 62ee74e96c5ebb0af99386de58cf9553 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: bzip2-1.0.6 + license_family: BSD + size: 252783 + timestamp: 1720974456583 +- kind: conda + name: c-ares + version: 1.32.3 + build: h4bc722e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.32.3-h4bc722e_0.conda + sha256: 3c5a844bb60b0d52d89c3f1bd828c9856417fe33a6102fd8bbd5c13c3351704a + md5: 7624e34ee6baebfc80d67bac76cc9d9d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 179736 + timestamp: 1721834714515 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hbcca054_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + sha256: afee721baa6d988e27fef1832f68d6f32ac8cc99cdf6015732224c2841a09cea + md5: c27d1c142233b5bc9ca570c6e2e0c244 + license: ISC + size: 159003 + timestamp: 1725018903918 +- kind: conda + name: cairo + version: 1.18.0 + build: hbb29018_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hbb29018_2.conda + sha256: 51cfaf4669ad83499b3da215b915c503d36faf6edf6db4681a70b5710842a86c + md5: b6d90276c5aee9b4407dd94eb0cd40a8 + depends: + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libglib >=2.80.2,<3.0a0 + - libpng >=1.6.43,<1.7.0a0 + - libstdcxx-ng >=12 + - libxcb >=1.16,<2.0.0a0 + - libzlib >=1.3.1,<2.0a0 + - pixman >=0.43.2,<1.0a0 + - xorg-libice >=1.1.1,<2.0a0 + - xorg-libsm >=1.2.4,<2.0a0 + - xorg-libx11 >=1.8.9,<2.0a0 + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxrender >=0.9.11,<0.10.0a0 + - zlib + license: LGPL-2.1-only or MPL-1.1 + size: 984224 + timestamp: 1718985592664 +- kind: conda + name: coreutils + version: '9.5' + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/coreutils-9.5-hd590300_0.conda + sha256: 7cd3b0f55aa55bb27b045c30f32b3f6b874ecc006f3abcb274c71a3bcbacb358 + md5: 126d457e0e7a535278e808a7d8960015 + depends: + - libgcc-ng >=12 + license: GPL-3.0-or-later + license_family: GPL + size: 3014238 + timestamp: 1711655132451 +- kind: conda + name: curl + version: 8.10.1 + build: hbbe4b11_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/curl-8.10.1-hbbe4b11_0.conda + sha256: f2c6de198ae7505ab33ce7e86b7767f6492489cfb5635cad164822a9d73f3a5e + md5: 73c561c6b84bda71776c9fa21517e7eb + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libcurl 8.10.1 hbbe4b11_0 + - libgcc >=13 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 173268 + timestamp: 1726659802291 +- kind: conda + name: expat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.3-h5888daf_0.conda + sha256: 65bd479c75ce876f26600cb230d6ebc474086e31fa384af9b4282b36842ed7e2 + md5: 6595440079bed734b113de44ffd3cd0a + depends: + - __glibc >=2.17,<3.0.a0 + - libexpat 2.6.3 h5888daf_0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 137891 + timestamp: 1725568750673 +- kind: conda + name: fastqc + version: 0.12.1 + build: hdfd78af_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/bioconda/noarch/fastqc-0.12.1-hdfd78af_0.tar.bz2 + sha256: 7cc26225d590540ae95cd24940ff42f2da7479dd4cd22ae9ab9298665d06790c + md5: c9f6a4b12229f7331f79c9a00dd6e240 + depends: + - font-ttf-dejavu-sans-mono + - fontconfig + - openjdk >=8.0.144 + - perl + license: GPL >=3 + size: 11664291 + timestamp: 1677946722445 +- kind: conda + name: font-ttf-dejavu-sans-mono + version: '2.37' + build: hab24e00_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b + md5: 0c96522c6bdaed4b1566d11387caaf45 + license: BSD-3-Clause + license_family: BSD + size: 397370 + timestamp: 1566932522327 +- kind: conda + name: font-ttf-inconsolata + version: '3.000' + build: h77eed37_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + sha256: c52a29fdac682c20d252facc50f01e7c2e7ceac52aa9817aaf0bb83f7559ec5c + md5: 34893075a5c9e55cdafac56607368fc6 + license: OFL-1.1 + license_family: Other + size: 96530 + timestamp: 1620479909603 +- kind: conda + name: font-ttf-source-code-pro + version: '2.038' + build: h77eed37_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + sha256: 00925c8c055a2275614b4d983e1df637245e19058d79fc7dd1a93b8d9fb4b139 + md5: 4d59c254e01d9cde7957100457e2d5fb + license: OFL-1.1 + license_family: Other + size: 700814 + timestamp: 1620479612257 +- kind: conda + name: font-ttf-ubuntu + version: '0.83' + build: h77eed37_3 + build_number: 3 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda + sha256: 2821ec1dc454bd8b9a31d0ed22a7ce22422c0aef163c59f49dfdf915d0f0ca14 + md5: 49023d73832ef61042f6a237cb2687e7 + license: LicenseRef-Ubuntu-Font-Licence-Version-1.0 + license_family: Other + size: 1620504 + timestamp: 1727511233259 +- kind: conda + name: fontconfig + version: 2.14.2 + build: h14ed4e7_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda + sha256: 155d534c9037347ea7439a2c6da7c24ffec8e5dd278889b4c57274a1d91e0a83 + md5: 0f69b688f52ff6da70bccb7ff7001d1d + depends: + - expat >=2.5.0,<3.0a0 + - freetype >=2.12.1,<3.0a0 + - libgcc-ng >=12 + - libuuid >=2.32.1,<3.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: MIT + license_family: MIT + size: 272010 + timestamp: 1674828850194 +- kind: conda + name: fonts-conda-ecosystem + version: '1' + build: '0' + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + sha256: a997f2f1921bb9c9d76e6fa2f6b408b7fa549edd349a77639c9fe7a23ea93e61 + md5: fee5683a3f04bd15cbd8318b096a27ab + depends: + - fonts-conda-forge + license: BSD-3-Clause + license_family: BSD + size: 3667 + timestamp: 1566974674465 +- kind: conda + name: fonts-conda-forge + version: '1' + build: '0' + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + sha256: 53f23a3319466053818540bcdf2091f253cbdbab1e0e9ae7b9e509dcaa2a5e38 + md5: f766549260d6815b0c52253f1fb1bb29 + depends: + - font-ttf-dejavu-sans-mono + - font-ttf-inconsolata + - font-ttf-source-code-pro + - font-ttf-ubuntu + license: BSD-3-Clause + license_family: BSD + size: 4102 + timestamp: 1566932280397 +- kind: conda + name: freetype + version: 2.12.1 + build: h267a509_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + sha256: b2e3c449ec9d907dd4656cb0dc93e140f447175b125a3824b31368b06c666bb6 + md5: 9ae35c3d96db2c94ce0cef86efdfa2cb + depends: + - libgcc-ng >=12 + - libpng >=1.6.39,<1.7.0a0 + - libzlib >=1.2.13,<2.0.0a0 + license: GPL-2.0-only OR FTL + size: 634972 + timestamp: 1694615932610 +- kind: conda + name: giflib + version: 5.2.2 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda + sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff + md5: 3bf7b9fd5a7136126e0234db4b87c8b6 + depends: + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 77248 + timestamp: 1712692454246 +- kind: conda + name: graphite2 + version: 1.3.13 + build: h59595ed_1003 + build_number: 1003 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + sha256: 0595b009f20f8f60f13a6398e7cdcbd2acea5f986633adcf85f5a2283c992add + md5: f87c7b7c2cb45f323ffbce941c78ab7c + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: LGPL-2.0-or-later + license_family: LGPL + size: 96855 + timestamp: 1711634169756 +- kind: conda + name: gsl + version: '1.16' + build: '0' + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/gsl-1.16-0.tar.bz2 + sha256: 1474e8a3dd2c3129bd7ec11e6724229b0f7c0a0f0ca3f9ceb7fe7bfc0bda95b3 + md5: 45c3612032d8a9f7257a9f4fcffa3dc4 + arch: x86_64 + platform: linux + license: GPL-3.0 + size: 7223794 +- kind: conda + name: harfbuzz + version: 8.5.0 + build: hfac3d4d_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.5.0-hfac3d4d_0.conda + sha256: a141fc55f8bfdab7db03fe9d8e61cb0f8c8b5970ed6540eda2db7186223f4444 + md5: f5126317dd0ce0ba26945e411ecc6960 + depends: + - cairo >=1.18.0,<2.0a0 + - freetype >=2.12.1,<3.0a0 + - graphite2 + - icu >=73.2,<74.0a0 + - libgcc-ng >=12 + - libglib >=2.80.2,<3.0a0 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 1598244 + timestamp: 1715701061364 +- kind: conda + name: hisat2 + version: 2.2.1 + build: hdbdd923_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/hisat2-2.2.1-hdbdd923_6.tar.bz2 + sha256: 1816b42ba1c08be056066101dd91bfa51a4a55bd4a212cb845e817adad09ad37 + md5: 98bb9f67fee33c105f41a9f86c3f8c23 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - perl + - python >3.5 + license: GPL-3.0 + license_family: GPL + size: 17003961 + timestamp: 1684226696415 +- kind: conda + name: htslib + version: '1.21' + build: h5efdd21_0 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/htslib-1.21-h5efdd21_0.tar.bz2 + sha256: ef5a53fae052a14cbccc50dc2290c80791db3d8a8c5a01435c7aa12f8a53740c + md5: 06b995dc2244c024b45bbb3e53ae2f27 + depends: + - bzip2 >=1.0.8,<2.0a0 + - libcurl >=8.8.0,<9.0a0 + - libdeflate >=1.20,<1.22.0a0 + - libgcc >=12 + - libzlib >=1.2.13,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - xz >=5.2.6,<6.0a0 + license: MIT + license_family: MIT + size: 3166996 + timestamp: 1726172400888 +- kind: conda + name: icu + version: '73.2' + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda + sha256: e12fd90ef6601da2875ebc432452590bc82a893041473bc1c13ef29001a73ea8 + md5: cc47e1facc155f91abd89b11e48e72ff + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 12089150 + timestamp: 1692900650789 +- kind: conda + name: igvtools + version: 2.17.3 + build: hdfd78af_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/bioconda/noarch/igvtools-2.17.3-hdfd78af_0.tar.bz2 + sha256: e57e99754689f612be012b9eb73bd98dcf64f0ec5f53b2dd1dfc165ce53f3c7c + md5: 227e712f7ceb7da32c19916be309da50 + depends: + - openjdk >=17 + license: MIT + license_family: MIT + size: 37856767 + timestamp: 1711389295939 +- kind: conda + name: keyutils + version: 1.6.1 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb + md5: 30186d27e2c9fa62b45fb1476b7200e3 + depends: + - libgcc-ng >=10.3.0 + license: LGPL-2.1-or-later + size: 117831 + timestamp: 1646151697040 +- kind: conda + name: krb5 + version: 1.21.3 + build: h659f571_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + size: 1370023 + timestamp: 1719463201255 +- kind: conda + name: lcms2 + version: '2.16' + build: hb7c19ff_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + sha256: 5c878d104b461b7ef922abe6320711c0d01772f4cd55de18b674f88547870041 + md5: 51bb7010fc86f70eee639b4bb7a894f5 + depends: + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + license: MIT + license_family: MIT + size: 245247 + timestamp: 1701647787198 +- kind: conda + name: ld_impl_linux-64 + version: '2.43' + build: h712a8e2_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + sha256: 0c21387f9a411e3d1f7f2969026bacfece133c8f1e72faea9cde29c0c19e1f3a + md5: 83e1364586ceb8d0739fbc85b5c95837 + depends: + - __glibc >=2.17,<3.0.a0 + constrains: + - binutils_impl_linux-64 2.43 + license: GPL-3.0-only + license_family: GPL + size: 669616 + timestamp: 1727304687962 +- kind: conda + name: lerc + version: 4.0.0 + build: h27087fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + sha256: cb55f36dcd898203927133280ae1dc643368af041a48bcf7c026acb7c47b0c12 + md5: 76bbff344f0134279f225174e9064c8f + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: Apache-2.0 + license_family: Apache + size: 281798 + timestamp: 1657977462600 +- kind: conda + name: libcups + version: 2.3.3 + build: h4637d8d_4 + build_number: 4 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda + sha256: bc67b9b21078c99c6bd8595fe7e1ed6da1f721007726e717f0449de7032798c4 + md5: d4529f4dff3057982a7617c7ac58fde3 + depends: + - krb5 >=1.21.1,<1.22.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: Apache-2.0 + license_family: Apache + size: 4519402 + timestamp: 1689195353551 +- kind: conda + name: libcurl + version: 8.10.1 + build: hbbe4b11_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.10.1-hbbe4b11_0.conda + sha256: 54e6114dfce566c3a22ad3b7b309657e3600cdb668398e95f1301360d5d52c99 + md5: 6e801c50a40301f6978c53976917b277 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libnghttp2 >=1.58.0,<2.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + size: 424900 + timestamp: 1726659794676 +- kind: conda + name: libdeflate + version: '1.21' + build: h4bc722e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda + sha256: 728c24ce835700bfdfdf106bf04233fdb040a61ca4ecfd3f41b46fa90cd4f971 + md5: 36ce76665bf67f5aac36be7a0d21b7f3 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: MIT + license_family: MIT + size: 71163 + timestamp: 1722820138782 +- kind: conda + name: libedit + version: 3.1.20191231 + build: he28a2e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf + md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 + depends: + - libgcc-ng >=7.5.0 + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + size: 123878 + timestamp: 1597616541093 +- kind: conda + name: libev + version: '4.33' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda + sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 + md5: 172bf1cd1ff8629f2b1179945ed45055 + depends: + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 112766 + timestamp: 1702146165126 +- kind: conda + name: libexpat + version: 2.6.3 + build: h5888daf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda + sha256: 4bb47bb2cd09898737a5211e2992d63c555d63715a07ba56eae0aff31fb89c22 + md5: 59f4c43bb1b5ef1c71946ff2cbf59524 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - expat 2.6.3.* + license: MIT + license_family: MIT + size: 73616 + timestamp: 1725568742634 +- kind: conda + name: libffi + version: 3.4.2 + build: h7f98852_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + sha256: ab6e9856c21709b7b517e940ae7028ae0737546122f83c2aa5d692860c3b149e + md5: d645c6d2ac96843a2bfaccd2d62b3ac3 + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 58292 + timestamp: 1636488182923 +- kind: conda + name: libgcc + version: 14.1.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda + sha256: 10fa74b69266a2be7b96db881e18fa62cfa03082b65231e8d652e897c4b335a3 + md5: 002ef4463dd1e2b44a94a4ace468f5d2 + depends: + - _libgcc_mutex 0.1 conda_forge + - _openmp_mutex >=4.5 + constrains: + - libgomp 14.1.0 h77fa898_1 + - libgcc-ng ==14.1.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 846380 + timestamp: 1724801836552 +- kind: conda + name: libgcc-ng + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda + sha256: b91f7021e14c3d5c840fbf0dc75370d6e1f7c7ff4482220940eaafb9c64613b7 + md5: 1efc0ad219877a73ef977af7dbb51f17 + depends: + - libgcc 14.1.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 52170 + timestamp: 1724801842101 +- kind: conda + name: libgfortran + version: 14.1.0 + build: h69a702a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-14.1.0-h69a702a_1.conda + sha256: ed77f04f873e43a26e24d443dd090631eedc7d0ace3141baaefd96a123e47535 + md5: 591e631bc1ae62c64f2ab4f66178c097 + depends: + - libgfortran5 14.1.0 hc5f4f2c_1 + constrains: + - libgfortran-ng ==14.1.0=*_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 52142 + timestamp: 1724801872472 +- kind: conda + name: libgfortran5 + version: 14.1.0 + build: hc5f4f2c_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_1.conda + sha256: c40d7db760296bf9c776de12597d2f379f30e890b9ae70c1de962ff2aa1999f6 + md5: 10a0cef64b784d6ab6da50ebca4e984d + depends: + - libgcc >=14.1.0 + constrains: + - libgfortran 14.1.0 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 1459939 + timestamp: 1724801851300 +- kind: conda + name: libglib + version: 2.82.1 + build: h2ff4ddf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.82.1-h2ff4ddf_0.conda + sha256: fe9bebb2347d0fc8c5c9e1dd0750e0d640061dc66712a4218bad46d0adc11131 + md5: 47a2209fa0df11797df0b767d1de1275 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libiconv >=1.17,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - pcre2 >=10.44,<10.45.0a0 + constrains: + - glib 2.82.1 *_0 + license: LGPL-2.1-or-later + size: 3928640 + timestamp: 1727380513702 +- kind: conda + name: libgomp + version: 14.1.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda + sha256: c96724c8ae4ee61af7674c5d9e5a3fbcf6cd887a40ad5a52c99aa36f1d4f9680 + md5: 23c255b008c4f2ae008f81edcabaca89 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 460218 + timestamp: 1724801743478 +- kind: conda + name: libiconv + version: '1.17' + build: hd590300_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + sha256: 8ac2f6a9f186e76539439e50505d98581472fedb347a20e7d1f36429849f05c9 + md5: d66573916ffcf376178462f1b61c941e + depends: + - libgcc-ng >=12 + license: LGPL-2.1-only + size: 705775 + timestamp: 1702682170569 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + sha256: b954e09b7e49c2f2433d6f3bb73868eda5e378278b0f8c1dd10a7ef090e14f2f + md5: ea25936bb4080d843790b586850f82b8 + depends: + - libgcc-ng >=12 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + size: 618575 + timestamp: 1694474974816 +- kind: conda + name: libmpdec + version: 4.0.0 + build: h4bc722e_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda + sha256: d02d1d3304ecaf5c728e515eb7416517a0b118200cd5eacbe829c432d1664070 + md5: aeb98fdeb2e8f25d43ef71fbacbeec80 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 89991 + timestamp: 1723817448345 +- kind: conda + name: libnghttp2 + version: 1.58.0 + build: h47da74e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda + sha256: 1910c5306c6aa5bcbd623c3c930c440e9c77a5a019008e1487810e3c1d3716cb + md5: 700ac6ea6d53d5510591c4344d5c989a + depends: + - c-ares >=1.23.0,<2.0a0 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.2.0,<4.0a0 + license: MIT + license_family: MIT + size: 631936 + timestamp: 1702130036271 +- kind: conda + name: libopenssl-static + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libopenssl-static-3.3.2-hb9d3cd8_0.conda + sha256: 5397fce172c371df92b9f852585d4090316d547f61712c387144e9d10bf96739 + md5: 3a05a8ba795217e32211b696ad86b77d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - openssl 3.3.2 hb9d3cd8_0 + license: Apache-2.0 + license_family: Apache + size: 2609282 + timestamp: 1725410803652 +- kind: conda + name: libpng + version: 1.6.44 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.44-hadc24fc_0.conda + sha256: e5b14f7a01c2db4362d8591f42f82f336ed48d5e4079e4d1f65d0c2a3637ea78 + md5: f4cc49d7aa68316213e4b12be35308d1 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + size: 290661 + timestamp: 1726234747153 +- kind: conda + name: libsqlite + version: 3.46.1 + build: hadc24fc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + sha256: 9851c049abafed3ee329d6c7c2033407e2fc269d33a75c071110ab52300002b0 + md5: 36f79405ab16bf271edb55b213836dac + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + size: 865214 + timestamp: 1725353659783 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h0841786_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda + sha256: 50e47fd9c4f7bf841a11647ae7486f65220cfc988ec422a4475fe8d5a823824d + md5: 1f5a58e686b13bcfde88b93f547d23fe + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 271133 + timestamp: 1685837707056 +- kind: conda + name: libstdcxx + version: 14.1.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.1.0-hc0a3c3a_1.conda + sha256: 44decb3d23abacf1c6dd59f3c152a7101b7ca565b4ef8872804ceaedcc53a9cd + md5: 9dbb9699ea467983ba8a4ba89b08b066 + depends: + - libgcc 14.1.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3892781 + timestamp: 1724801863728 +- kind: conda + name: libstdcxx-ng + version: 14.1.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-h4852527_1.conda + sha256: a2dc44f97290740cc187bfe94ce543e6eb3c2ea8964d99f189a1d8c97b419b8c + md5: bd2598399a70bb86d8218e95548d735e + depends: + - libstdcxx 14.1.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 52219 + timestamp: 1724801897766 +- kind: conda + name: libtiff + version: 4.7.0 + build: h6565414_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.0-h6565414_0.conda + sha256: f50a0516ec5bbe6270f1a44feb8dae15626c62166d6c02a013bb0e5982eb0dd8 + md5: 80eaf80d84668fa5620ac9ec1b4bf56f + depends: + - __glibc >=2.17,<3.0.a0 + - lerc >=4.0.0,<5.0a0 + - libdeflate >=1.21,<1.22.0a0 + - libgcc >=13 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libstdcxx >=13 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - xz >=5.2.6,<6.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + size: 428159 + timestamp: 1726667242674 +- kind: conda + name: libuuid + version: 2.38.1 + build: h0b41bf4_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + sha256: 787eb542f055a2b3de553614b25f09eefb0a0931b0c87dbcce6efdfd92f04f18 + md5: 40b61aab5c7ba9ff276c41cfffe6b80b + depends: + - libgcc-ng >=12 + license: BSD-3-Clause + license_family: BSD + size: 33601 + timestamp: 1680112270483 +- kind: conda + name: libwebp-base + version: 1.4.0 + build: hd590300_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + sha256: 49bc5f6b1e11cb2babf2a2a731d1a680a5e08a858280876a779dbda06c78c35f + md5: b26e8aa824079e1be0294e7152ca4559 + depends: + - libgcc-ng >=12 + constrains: + - libwebp 1.4.0 + license: BSD-3-Clause + license_family: BSD + size: 438953 + timestamp: 1713199854503 +- kind: conda + name: libxcb + version: 1.17.0 + build: h8a09558_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda + sha256: 666c0c431b23c6cec6e492840b176dde533d48b7e6fb8883f5071223433776aa + md5: 92ed62436b625154323d40d5f2f11dd7 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - pthread-stubs + - xorg-libxau >=1.0.11,<2.0a0 + - xorg-libxdmcp + license: MIT + license_family: MIT + size: 395888 + timestamp: 1727278577118 +- kind: conda + name: libxcrypt + version: 4.4.36 + build: hd590300_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c + md5: 5aa797f8787fe7a17d1b0821485b5adc + depends: + - libgcc-ng >=12 + license: LGPL-2.1-or-later + size: 100393 + timestamp: 1702724383534 +- kind: conda + name: libzlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + sha256: d4bfe88d7cb447768e31650f06257995601f89076080e76df55e3112d4e47dc4 + md5: edb0dca6bc32e4f4789199455a1dbeb8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + size: 60963 + timestamp: 1727963148474 +- kind: conda + name: mpi + version: 1.0.1 + build: mpich + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/mpi-1.0.1-mpich.conda + sha256: eacc189267202669a1c5c849dcca2298f41acb3918f05cf912d7d61ee7176fac + md5: 1052de900d672ec8b3713b8e300a8f06 + license: BSD-3-Clause + license_family: BSD + size: 6522 + timestamp: 1727683134241 +- kind: conda + name: mpich + version: 4.2.3 + build: h670b19f_100 + build_number: 100 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/mpich-4.2.3-h670b19f_100.conda + sha256: 185c8ba393d559cdc92d5668efc0c47b3228b15e9047288d791eaf9097330f10 + md5: f20c61baae087e5092819cfed55ea861 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libgfortran + - libgfortran5 >=13.3.0 + - libstdcxx >=13 + - mpi 1.0.* mpich + license: LicenseRef-MPICH + license_family: Other + size: 13759543 + timestamp: 1727948359420 +- kind: conda + name: mysql-connector-c + version: 6.1.11 + build: h659d440_1008 + build_number: 1008 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/mysql-connector-c-6.1.11-h659d440_1008.conda + sha256: 0d796529e90bf6f511fd7199acfb5cc788e04d853e1afd48aa6bad33a6e49008 + md5: 149e0b89cbbe09397f1147cb3736bcbe + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.1.3,<4.0a0 + license: GPL-2.0-only + license_family: GPL + size: 1268505 + timestamp: 1697651492989 +- kind: conda + name: ncurses + version: '6.5' + build: he02047a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + sha256: 6a1d5d8634c1a07913f1c525db6455918cbc589d745fac46d9d6e30340c8731a + md5: 70caf8bb6cf39a0b6b7efc885f51c0fe + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: X11 AND BSD-3-Clause + size: 889086 + timestamp: 1724658547447 +- kind: conda + name: nextflow + version: 24.04.4 + build: hdfd78af_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/bioconda/noarch/nextflow-24.04.4-hdfd78af_0.tar.bz2 + sha256: 40fd1422c7b3756023b1623e3dfe9a571f6777144e2937831220025a94bbbdfa + md5: 6653531f694b0a8d91411b3352916a2d + depends: + - coreutils + - curl + - openjdk >=11,<=21 + license: Apache-2.0 + size: 32305470 + timestamp: 1722504218797 +- kind: conda + name: openjdk + version: 21.0.0 + build: haa376d0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openjdk-21.0.0-haa376d0_0.conda + sha256: 49055e42e49003ca094ff9db962af928d669711053543744045d21ea865bac97 + md5: 6e0eee5ba66ac5a73734e9618b7601af + depends: + - alsa-lib >=1.2.10,<1.3.0.0a0 + - fontconfig >=2.14.2,<3.0a0 + - fonts-conda-ecosystem + - freetype >=2.12.1,<3.0a0 + - giflib >=5.2.1,<5.3.0a0 + - harfbuzz >=8.2.1,<9.0a0 + - lcms2 >=2.15,<3.0a0 + - libcups >=2.3.3,<2.4.0a0 + - libgcc-ng >=12 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libpng >=1.6.39,<1.7.0a0 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + - xorg-libx11 >=1.8.7,<2.0a0 + - xorg-libxext >=1.3.4,<2.0a0 + - xorg-libxi + - xorg-libxrender >=0.9.11,<0.10.0a0 + - xorg-libxt >=1.3.0,<2.0a0 + - xorg-libxtst + license: GPL-2.0-or-later WITH Classpath-exception-2.0 + license_family: GPL + size: 181283407 + timestamp: 1697171134165 +- kind: conda + name: openssl + version: 3.3.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda + sha256: cee91036686419f6dd6086902acf7142b4916e1c4ba042e9ca23e151da012b6d + md5: 4d638782050ab6faa27275bed57e9b4e + depends: + - __glibc >=2.17,<3.0.a0 + - ca-certificates + - libgcc >=13 + license: Apache-2.0 + license_family: Apache + size: 2891789 + timestamp: 1725410790053 +- kind: conda + name: pcre2 + version: '10.44' + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + size: 952308 + timestamp: 1723488734144 +- kind: conda + name: perl + version: 5.32.1 + build: 7_hd590300_perl5 + build_number: 7 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda + sha256: 9ec32b6936b0e37bcb0ed34f22ec3116e75b3c0964f9f50ecea5f58734ed6ce9 + md5: f2cfec9406850991f4e3d960cc9e3321 + depends: + - libgcc-ng >=12 + - libxcrypt >=4.4.36 + license: GPL-1.0-or-later OR Artistic-1.0-Perl + size: 13344463 + timestamp: 1703310653947 +- kind: conda + name: pixman + version: 0.43.2 + build: h59595ed_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + sha256: 366d28e2a0a191d6c535e234741e0cd1d94d713f76073d8af4a5ccb2a266121e + md5: 71004cbf7924e19c02746ccde9fd7123 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + license: MIT + license_family: MIT + size: 386826 + timestamp: 1706549500138 +- kind: conda + name: preseq + version: 2.0.2 + build: gsl1.16_0 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/preseq-2.0.2-gsl1.16_0.tar.bz2 + sha256: 69b3f6c3c276b1595b6dc1defb9b96357a29f5ff943743325f93fed96da72ff0 + md5: 6aba30f17eb806f230d2384460e74a21 + depends: + - gsl 1.16* + - libgcc + - zlib + license: GNU GENERAL PUBLIC LICENSE + size: 383598 +- kind: conda + name: pthread-stubs + version: '0.4' + build: hb9d3cd8_1002 + build_number: 1002 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda + sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 + md5: b3c17d95b5a10c6e64a21fa17573e70e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 8252 + timestamp: 1726802366959 +- kind: conda + name: python + version: 3.13.0 + build: h9ebbce0_100_cp313 + build_number: 100 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.0-h9ebbce0_100_cp313.conda + sha256: 6ab5179679f0909db828d8316f3b8b379014a82404807310fe7df5a6cf303646 + md5: 08e9aef080f33daeb192b2ddc7e4721f + depends: + - __glibc >=2.17,<3.0.a0 + - bzip2 >=1.0.8,<2.0a0 + - ld_impl_linux-64 >=2.36.1 + - libexpat >=2.6.3,<3.0a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.46.1,<4.0a0 + - libuuid >=2.38.1,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.3.2,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + license: Python-2.0 + size: 33112481 + timestamp: 1728419573472 +- kind: conda + name: python_abi + version: '3.13' + build: 5_cp313 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.13-5_cp313.conda + sha256: 438225b241c5f9bddae6f0178a97f5870a89ecf927dfca54753e689907331442 + md5: 381bbd2a92c863f640a55b6ff3c35161 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 6217 + timestamp: 1723823393322 +- kind: conda + name: readline + version: '8.2' + build: h8228510_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + sha256: 5435cf39d039387fbdc977b0a762357ea909a7694d9528ab40f005e9208744d7 + md5: 47d31b792659ce70f470b5c82fdfb7a4 + depends: + - libgcc-ng >=12 + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + size: 281456 + timestamp: 1679532220005 +- kind: conda + name: samtools + version: '1.21' + build: h50ea8bc_0 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/samtools-1.21-h50ea8bc_0.tar.bz2 + sha256: ff7c3abbb825f58b93b353abb9c78e07c8f92c8a893bea59dbdd6631cbaaf9de + md5: 4a7fe11223f61cb2d950ed54e20c12ce + depends: + - htslib >=1.21,<1.22.0a0 + - libgcc >=12 + - libzlib >=1.2.13,<2.0a0 + - ncurses >=6.5,<7.0a0 + license: MIT + size: 473414 + timestamp: 1726175917627 +- kind: conda + name: sra-tools + version: 2.9.6 + build: hf484d3e_0 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/sra-tools-2.9.6-hf484d3e_0.tar.bz2 + sha256: 43f79f45ec15fe070657d8de7e9b26597ddef1b54061854a452d3db4436bbf9e + md5: 010360b3ab732be603d3798b5d1bacc4 + depends: + - libgcc-ng >=7.3.0 + - libstdcxx-ng >=7.3.0 + license: Public Domain + size: 47261941 + timestamp: 1560371984656 +- kind: conda + name: tk + version: 8.6.13 + build: noxft_h4845f30_101 + build_number: 101 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + sha256: e0569c9caa68bf476bead1bed3d79650bb080b532c64a4af7d8ca286c08dea4e + md5: d453b98d9c83e71da0741bb0ff4d76bc + depends: + - libgcc-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + size: 3318875 + timestamp: 1699202167581 +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + size: 122354 + timestamp: 1728047496079 +- kind: conda + name: ucsc-bedgraphtobigwig + version: '469' + build: h9b8f530_0 + subdir: linux-64 + url: https://conda.anaconda.org/bioconda/linux-64/ucsc-bedgraphtobigwig-469-h9b8f530_0.tar.bz2 + sha256: 214a22e689d5e9661fc15df41f04d2cba1908da35a50b8e43dd57b6dc97012b4 + md5: 882d161cbee36300ca3995e920fdcfa2 + depends: + - libgcc-ng >=12 + - libopenssl-static + - libpng >=1.6.43,<1.7.0a0 + - libuuid >=2.38.1,<3.0a0 + - libzlib >=1.2.13,<2.0a0 + - mysql-connector-c >=6.1.11,<6.1.12.0a0 + - zlib + license: Varies; see http://genome.ucsc.edu/license + size: 2034346 + timestamp: 1724782010462 +- kind: conda + name: xorg-libice + version: 1.1.1 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hb9d3cd8_1.conda + sha256: ec276da68d1c4a3d34a63195b35ca5b248d4aff0812464dcd843d74649b5cec4 + md5: 19608a9656912805b2b9a2f6bd257b04 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 58159 + timestamp: 1727531850109 +- kind: conda + name: xorg-libsm + version: 1.2.4 + build: he73a12e_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-he73a12e_1.conda + sha256: 70e903370977d44c9120a5641ab563887bd48446e9ef6fc2a3f5f60531c2cd6c + md5: 05a8ea5f446de33006171a7afe6ae857 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libuuid >=2.38.1,<3.0a0 + - xorg-libice >=1.1.1,<2.0a0 + license: MIT + license_family: MIT + size: 27516 + timestamp: 1727634669421 +- kind: conda + name: xorg-libx11 + version: 1.8.10 + build: h4f16b4b_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.10-h4f16b4b_0.conda + sha256: c4650634607864630fb03696474a0535f6fce5fda7d81a6462346e071b53dfa7 + md5: 0b666058a179b744a622d0a4a0c56353 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libxcb >=1.17.0,<2.0a0 + - xorg-xorgproto + license: MIT + license_family: MIT + size: 838308 + timestamp: 1727356837875 +- kind: conda + name: xorg-libxau + version: 1.0.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hb9d3cd8_1.conda + sha256: 532a046fee0b3a402db867b6ec55c84ba4cdedb91d817147c8feeae9766be3d6 + md5: 77cbc488235ebbaab2b6e912d3934bae + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 14679 + timestamp: 1727034741045 +- kind: conda + name: xorg-libxdmcp + version: 1.1.5 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda + sha256: 6b250f3e59db07c2514057944a3ea2044d6a8cdde8a47b6497c254520fade1ee + md5: 8035c64cb77ed555e3f150b7b3972480 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 19901 + timestamp: 1727794976192 +- kind: conda + name: xorg-libxext + version: 1.3.6 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda + sha256: da5dc921c017c05f38a38bd75245017463104457b63a1ce633ed41f214159c14 + md5: febbab7d15033c913d53c7a2c102309d + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + size: 50060 + timestamp: 1727752228921 +- kind: conda + name: xorg-libxfixes + version: 6.0.1 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda + sha256: 2fef37e660985794617716eb915865ce157004a4d567ed35ec16514960ae9271 + md5: 4bdb303603e9821baf5fe5fdff1dc8f8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + size: 19575 + timestamp: 1727794961233 +- kind: conda + name: xorg-libxi + version: 1.8.2 + build: hb9d3cd8_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda + sha256: 1a724b47d98d7880f26da40e45f01728e7638e6ec69f35a3e11f92acd05f9e7a + md5: 17dcc85db3c7886650b8908b183d6876 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxfixes >=6.0.1,<7.0a0 + license: MIT + license_family: MIT + size: 47179 + timestamp: 1727799254088 +- kind: conda + name: xorg-libxrender + version: 0.9.11 + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hb9d3cd8_1.conda + sha256: f1217e902c0b1d8bc5d3ce65e483ebf38b049c823c9117b7198cfb16bd2b9143 + md5: a7a49a8b85122b49214798321e2e96b4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-xorgproto + license: MIT + license_family: MIT + size: 37780 + timestamp: 1727529943015 +- kind: conda + name: xorg-libxt + version: 1.3.0 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxt-1.3.0-hb9d3cd8_2.conda + sha256: da032ee35fa329af7b551917764d2e161f8af2f7fdbb4c3e4a0fab47f3d968a0 + md5: d8602724ac0d276c380b97e9eb0f814b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libice >=1.1.1,<2.0a0 + - xorg-libsm >=1.2.4,<2.0a0 + - xorg-libx11 >=1.8.10,<2.0a0 + license: MIT + license_family: MIT + size: 378681 + timestamp: 1727663260353 +- kind: conda + name: xorg-libxtst + version: 1.2.5 + build: hb9d3cd8_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda + sha256: 752fdaac5d58ed863bbf685bb6f98092fe1a488ea8ebb7ed7b606ccfce08637a + md5: 7bbe9a0cc0df0ac5f5a8ad6d6a11af2f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - xorg-libx11 >=1.8.10,<2.0a0 + - xorg-libxext >=1.3.6,<2.0a0 + - xorg-libxi >=1.7.10,<2.0a0 + license: MIT + license_family: MIT + size: 32808 + timestamp: 1727964811275 +- kind: conda + name: xorg-xorgproto + version: '2024.1' + build: hb9d3cd8_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xorg-xorgproto-2024.1-hb9d3cd8_1.conda + sha256: 1316680be6edddee0156b86ec1102fc8286f51c1a5440366ed1db596a2dc3731 + md5: 7c21106b851ec72c037b162c216d8f05 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + license: MIT + license_family: MIT + size: 565425 + timestamp: 1726846388217 +- kind: conda + name: xz + version: 5.2.6 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + sha256: 03a6d28ded42af8a347345f82f3eebdd6807a08526d47899a42d62d319609162 + md5: 2161070d867d1b1204ea749c8eec4ef0 + depends: + - libgcc-ng >=12 + license: LGPL-2.1 and GPL-2.0 + size: 418368 + timestamp: 1660346797927 +- kind: conda + name: zlib + version: 1.3.1 + build: hb9d3cd8_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda + sha256: 5d7c0e5f0005f74112a34a7425179f4eb6e73c92f5d109e6af4ddeca407c92ab + md5: c9f075ab2f33b3bbee9e62d4ad0a6cd8 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libzlib 1.3.1 hb9d3cd8_2 + license: Zlib + license_family: Other + size: 92286 + timestamp: 1727963153079 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 554846 + timestamp: 1714722996770 diff --git a/pixi.toml b/pixi.toml new file mode 100644 index 0000000..1d128e9 --- /dev/null +++ b/pixi.toml @@ -0,0 +1,45 @@ +[project] +authors = ["Edmund Miller ", "eternal-flame-AD "] +channels = ["conda-forge", "bioconda"] +description = "Add a short description here" +name = "dREG-nf" +platforms = ["linux-64"] +version = "0.1.0" + +[system-requirements] +linux = "3.10.0" +libc = { family="glibc", version="2.17" } +# cuda = "12" + +[tasks."build_multi_align"] +cmd = [ + "cargo", + "build", + "--release", + "--manifest-path", + "crates/multi_align/Cargo.toml", +] + +[tasks."run_dbnascent"] +cwd = "dbnascent" +cmd = [ + "nextflow", + "run", + "../main.nf", + "--run_dreg", +] + +[dependencies] +bbmap = ">=39.10,<40" +fastqc = ">=0.12.1,<0.13" +hisat2 = ">=2.2.1,<3" +samtools = ">=1.21,<2" +preseq = ">=2.0.2,<3" +igvtools = ">=2.17.3,<3" +mpich = ">=4.2.3,<5" +bedtools = ">=2.31.1,<3" +sra-tools = ">=2.9.6,<3" +nextflow = ">=24.4.4,<25" +ucsc-bedgraphtobigwig = ">=469,<470" +bwa = ">=0.7.18,<0.8" +bowtie2 = ">=2.5.4,<3" \ No newline at end of file diff --git a/subworkflows/prep_bw/Nascent-Flow.gv b/subworkflows/prep_bw/Nascent-Flow.gv new file mode 100644 index 0000000..8af8dba --- /dev/null +++ b/subworkflows/prep_bw/Nascent-Flow.gv @@ -0,0 +1,221 @@ +digraph G { + compound=true; + rankdir=TB; + + subgraph subg_step_1 { + step_1 [label="S1: SRA Dump", shape=box, fillcolor=orange, style=filled]; + + sra [label="sra_reads 'read_files_sra'", shape=diamond, fillcolor=orange, style=filled]; + + sra -> step_1; + + "fastq"[shape=diamond, fillcolor=green, style=filled]; + step_1 -> "fastq"; + } + + subgraph subg_step_1p { + "S1p: FastQC" [label="S1p: FastQC", shape=box]; + + "fastqc"[shape=diamond, label="fastqc 'fastqc_results'"]; + + "fastq" -> "S1p: FastQC"; + + "S1p: FastQC" -> "fastqc"; + + } + + subgraph subg_step_2 { + s2_hisat2 [label="S2: HISAT2", shape=box, fillcolor=green, style=filled]; + + hisat2_indices [shape=diamond, fillcolor=green, style=filled]; + + hisat2_indices -> s2_hisat2; + fastq -> s2_hisat2; + + trimmed_reads_fastqc [label="trimmed_reads_fastqc", shape=diamond]; + hisat2_sam [label="hisat2_sam", shape=diamond, fillcolor=green, style=filled]; + + s2_hisat2 -> trimmed_reads_fastqc; + s2_hisat2 -> hisat2_sam; + } + + subgraph subg_step2p { + "S2p: FastQC" [label="S2p: FastQC", shape=box, fillcolor=green, style=filled]; + + "fastqc2"[shape=diamond, label="fastqc 'fastqc_results'", fillcolor=green, style=filled]; + + "s2_hisat2" -> "S2p: FastQC"; + + "S2p: FastQC" -> "fastqc2"; + } + + subgraph subg_step_3 { + s3_samtools [label="S3: Samtools", shape=box, fillcolor=green, style=filled]; + + sorted_bam_ch [label="sorted_bam_ch", shape=diamond, fillcolor=green, style=filled]; + cram_ch [label="cram_ch", shape=diamond, fillcolor=green, style=filled]; + millions_mapped [label="millions_mapped", shape=diamond, fillcolor=green, style=filled]; + + s3_samtools -> sorted_bam_ch; + s3_samtools -> cram_ch; + s3_samtools -> millions_mapped; + hisat2_sam -> s3_samtools; + } + + subgraph subg_step_4 { + s4_picard [label="S4: Picard", shape=box]; + + sorted_bam_ch -> s4_picard; + + picard_metrics [label="picard_metrics", shape=diamond]; + s4_picard -> picard_metrics; + } + + subgraph subg_step_4p { + s4p_preseq [label="S4p: Preseq", shape=box]; + + sorted_bam_ch -> s4p_preseq; + + preseq_results [label="preseq_results", shape=diamond]; + + s4p_preseq -> preseq_results; + } + + subgraph subg_step_4pp { + s4pp_rseqc [label="S4pp: RSeQC", shape=box]; + + sorted_bam_ch -> s4pp_rseqc; + + rseqc_results [label="rseqc_results", shape=diamond]; + + s4pp_rseqc -> rseqc_results; + } + + subgraph subg_step_4ppp { + s4ppp_pileup [label="S4ppp: Pileup", shape=box]; + + sorted_bam_ch -> s4ppp_pileup; + + pileup_results [label="pileup_results", shape=diamond]; + + s4ppp_pileup -> pileup_results; + } + + subgraph subg_step_5 { + s5_bedgraphs [label="S5: Bedgraphs", shape=box]; + + sorted_bam_ch -> s5_bedgraphs; + millions_mapped -> s5_bedgraphs; + + bedgraph_results [label="bedgraph_results", shape=diamond]; + + s5_bedgraphs -> bedgraph_results; + } + + subgraph subg_step_5p { + s5p_bigwig [label="S5p: BigWig", shape=box, fillcolor=green, style=filled]; + + cram_ch -> s5p_bigwig; + + chrom_sizes [shape=diamond, fillcolor=green, style=filled]; + + chrom_sizes -> s5p_bigwig; + } + + subgraph subg_step_5pp { + s5pp_normalize_bigwig [label="S5pp: Normalize BigWig", shape=box]; + + s5p_bigwig -> s5pp_normalize_bigwig; + chrom_sizes -> s5pp_normalize_bigwig; + + normalized_bigwig [label="normalized_bigwig", shape=diamond]; + + s5pp_normalize_bigwig -> normalized_bigwig; + } + + subgraph subg_step_5ppp { + s5ppp_igv [label="S5ppp: IGV", shape=box]; + + normalized_bigwig -> s5ppp_igv; + bedgraph_results -> s5ppp_igv; + + tiled_data_ch [label="tiled_data_ch", shape=diamond]; + + s5ppp_igv -> tiled_data_ch; + } + + subgraph subg_step_6 { + s6_multiqc [label="S6: MultiQC", shape=box]; + + fastqc -> s6_multiqc; + trimmed_reads_fastqc -> s6_multiqc; + fastqc2 -> s6_multiqc; + picard_metrics -> s6_multiqc; + preseq_results -> s6_multiqc; + rseqc_results -> s6_multiqc; + pileup_results -> s6_multiqc; + bedgraph_results -> s6_multiqc; + normalized_bigwig -> s6_multiqc; + tiled_data_ch -> s6_multiqc; + + multiqc_report [label="multiqc_report", shape=diamond]; + + s6_multiqc -> multiqc_report; + } + + subgraph subg_step_7 { + s7_fstitch [label="S7: FStitch", shape=box]; + + bedgraph_results -> s7_fstitch; + + fstitch_results [label="fstitch_results", shape=diamond]; + fstitch_bidir_bed [label="fstitch_bidir_bed", shape=diamond]; + + s7_fstitch -> fstitch_results; + s7_fstitch -> fstitch_bidir_bed; + } + + subgraph subg_step_8 { + s8_tfit [label="S8: TFIT", shape=box]; + + bedgraph_results -> s8_tfit; + fstitch_bidir_bed -> s8_tfit; + + tfit_bed [label="tfit_bed", shape=diamond]; + + s8_tfit -> tfit_bed; + } + + subgraph subg_step_10 { + s10_multicov [label="S10: MultiCov", shape=box]; + + cram_ch -> s10_multicov; + + multicov_count_bed [label="multicov_count_bed", shape=diamond]; + + s10_multicov -> multicov_count_bed; + } + + subgraph subg_step_10p { + s10p_merge_multicov [label="S10p: Merge MultiCov", shape=box]; + + multicov_count_bed -> s10p_merge_multicov; + + merged_multicov [label="merged_multicov", shape=diamond]; + + s10p_merge_multicov -> merged_multicov; + } + + subgraph subg_nqc { + s4_nqc [label="NQC", shape=box]; + + picard_metrics -> s4_nqc; + bedgraph_results -> s4_nqc; + fastqc -> s4_nqc; + + nqc_results [label="nqc_results", shape=diamond]; + + s4_nqc -> nqc_results; + } + +} \ No newline at end of file diff --git a/subworkflows/prep_bw/Nascent-Flow.svg b/subworkflows/prep_bw/Nascent-Flow.svg new file mode 100644 index 0000000..4e0cb8f --- /dev/null +++ b/subworkflows/prep_bw/Nascent-Flow.svg @@ -0,0 +1,625 @@ + + + + + + +G + + + +step_1 + +S1: SRA Dump + + + +fastq + +fastq + + + +step_1->fastq + + + + + +sra + +sra_reads 'read_files_sra' + + + +sra->step_1 + + + + + +S1p: FastQC + +S1p: FastQC + + + +fastq->S1p: FastQC + + + + + +s2_hisat2 + +S2: HISAT2 + + + +fastq->s2_hisat2 + + + + + +fastqc + +fastqc 'fastqc_results' + + + +S1p: FastQC->fastqc + + + + + +s6_multiqc + +S6: MultiQC + + + +fastqc->s6_multiqc + + + + + +s4_nqc + +NQC + + + +fastqc->s4_nqc + + + + + +trimmed_reads_fastqc + +trimmed_reads_fastqc + + + +s2_hisat2->trimmed_reads_fastqc + + + + + +hisat2_sam + +hisat2_sam + + + +s2_hisat2->hisat2_sam + + + + + +S2p: FastQC + +S2p: FastQC + + + +s2_hisat2->S2p: FastQC + + + + + +hisat2_indices + +hisat2_indices + + + +hisat2_indices->s2_hisat2 + + + + + +trimmed_reads_fastqc->s6_multiqc + + + + + +s3_samtools + +S3: Samtools + + + +hisat2_sam->s3_samtools + + + + + +fastqc2 + +fastqc 'fastqc_results' + + + +S2p: FastQC->fastqc2 + + + + + +fastqc2->s6_multiqc + + + + + +sorted_bam_ch + +sorted_bam_ch + + + +s3_samtools->sorted_bam_ch + + + + + +cram_ch + +cram_ch + + + +s3_samtools->cram_ch + + + + + +millions_mapped + +millions_mapped + + + +s3_samtools->millions_mapped + + + + + +s4_picard + +S4: Picard + + + +sorted_bam_ch->s4_picard + + + + + +s4p_preseq + +S4p: Preseq + + + +sorted_bam_ch->s4p_preseq + + + + + +s4pp_rseqc + +S4pp: RSeQC + + + +sorted_bam_ch->s4pp_rseqc + + + + + +s4ppp_pileup + +S4ppp: Pileup + + + +sorted_bam_ch->s4ppp_pileup + + + + + +s5_bedgraphs + +S5: Bedgraphs + + + +sorted_bam_ch->s5_bedgraphs + + + + + +s5p_bigwig + +S5p: BigWig + + + +cram_ch->s5p_bigwig + + + + + +s10_multicov + +S10: MultiCov + + + +cram_ch->s10_multicov + + + + + +millions_mapped->s5_bedgraphs + + + + + +picard_metrics + +picard_metrics + + + +s4_picard->picard_metrics + + + + + +picard_metrics->s6_multiqc + + + + + +picard_metrics->s4_nqc + + + + + +preseq_results + +preseq_results + + + +s4p_preseq->preseq_results + + + + + +preseq_results->s6_multiqc + + + + + +rseqc_results + +rseqc_results + + + +s4pp_rseqc->rseqc_results + + + + + +rseqc_results->s6_multiqc + + + + + +pileup_results + +pileup_results + + + +s4ppp_pileup->pileup_results + + + + + +pileup_results->s6_multiqc + + + + + +bedgraph_results + +bedgraph_results + + + +s5_bedgraphs->bedgraph_results + + + + + +s5ppp_igv + +S5ppp: IGV + + + +bedgraph_results->s5ppp_igv + + + + + +bedgraph_results->s6_multiqc + + + + + +s7_fstitch + +S7: FStitch + + + +bedgraph_results->s7_fstitch + + + + + +s8_tfit + +S8: TFIT + + + +bedgraph_results->s8_tfit + + + + + +bedgraph_results->s4_nqc + + + + + +s5pp_normalize_bigwig + +S5pp: Normalize BigWig + + + +s5p_bigwig->s5pp_normalize_bigwig + + + + + +chrom_sizes + +chrom_sizes + + + +chrom_sizes->s5p_bigwig + + + + + +chrom_sizes->s5pp_normalize_bigwig + + + + + +normalized_bigwig + +normalized_bigwig + + + +s5pp_normalize_bigwig->normalized_bigwig + + + + + +normalized_bigwig->s5ppp_igv + + + + + +normalized_bigwig->s6_multiqc + + + + + +tiled_data_ch + +tiled_data_ch + + + +s5ppp_igv->tiled_data_ch + + + + + +tiled_data_ch->s6_multiqc + + + + + +multiqc_report + +multiqc_report + + + +s6_multiqc->multiqc_report + + + + + +fstitch_results + +fstitch_results + + + +s7_fstitch->fstitch_results + + + + + +fstitch_bidir_bed + +fstitch_bidir_bed + + + +s7_fstitch->fstitch_bidir_bed + + + + + +fstitch_bidir_bed->s8_tfit + + + + + +tfit_bed + +tfit_bed + + + +s8_tfit->tfit_bed + + + + + +multicov_count_bed + +multicov_count_bed + + + +s10_multicov->multicov_count_bed + + + + + +s10p_merge_multicov + +S10p: Merge MultiCov + + + +multicov_count_bed->s10p_merge_multicov + + + + + +merged_multicov + +merged_multicov + + + +s10p_merge_multicov->merged_multicov + + + + + +nqc_results + +nqc_results + + + +s4_nqc->nqc_results + + + + + diff --git a/subworkflows/prep_bw/main.nf b/subworkflows/prep_bw/main.nf index 417b73f..55657b7 100644 --- a/subworkflows/prep_bw/main.nf +++ b/subworkflows/prep_bw/main.nf @@ -1,51 +1,76 @@ -// TODO -workflow { - ch_chrom_sizes = Channel.empty() +// include { SRA_DUMP } from './processes/s1_sra_dump/main.nf' +include { BBDUK } from './processes/bbduk/main.nf' +include { MULTI_ALIGN } from './processes/multi_align/main.nf' +include { SAMTOOLS_BAM } from './processes/s3_generate_bam/main.nf' +include { FASTQC } from './processes/fastqc/main.nf' +include { DREG_PREP } from './processes/s5p_dreg_prep/main.nf' + + +params.hisat_indices = 'hisat2/hg38/genome' + +workflow PREP_BW { - ch_fasta = file(params.fasta, checkIfExists: true) + take: + fastq + fasta + fasta_indices + sizes - if (!params.sizes) { + main: + ch_chrom_sizes = Channel.empty() + + if (!sizes) { // // Create chromosome sizes file // - CUSTOM_GETCHROMSIZES ( ch_fasta.map { [ [:], it ] } ) + CUSTOM_GETCHROMSIZES ( fasta.map { [ [:], it ] } ) ch_fai = CUSTOM_GETCHROMSIZES.out.fai.map { it[1] } ch_chrom_sizes = CUSTOM_GETCHROMSIZES.out.sizes.map { it[1] } ch_versions = ch_versions.mix(CUSTOM_GETCHROMSIZES.out.versions) } else { - ch_chrom_sizes = file(params.sizes) + ch_chrom_sizes = sizes } - ch_bam = Channel.fromFilePairs(params.bams, size: -1) - .map { - meta, fastq -> - def fmeta = [:] - // Set meta.id - fmeta.id = meta - // Set meta.single_end - fmeta.single_end = true - [ fmeta, fastq ] - } - - SAMTOOLS_SORT ( ch_bam, ch_fasta ) - SAMTOOLS_INDEX ( SAMTOOLS_SORT.out.bam ) - SAMTOOLS_SORT.out.bam - .join(SAMTOOLS_INDEX.out.bai, by: [0], remainder: true) - .join(SAMTOOLS_INDEX.out.csi, by: [0], remainder: true) - .map { - meta, bam, bai, csi -> - if (bai) { - [ meta, bam, bai ] - } else { - [ meta, bam, csi ] - } - } - .set { ch_bam_bai } - - - // DREG_PREP ( - // ch_bam_bai, - // ch_chrom_sizes, - // params.assay_type - // ) + fastq + | map { [it[0], params.hisat_indices, it[1]] } + | BBDUK // -> { trimmed_reads, trim_stats } + | set { ch_fastq_trimmed } + + ch_fastq_trimmed.trimmed_reads + | map { it[1] } // strip off name and just pass the reads + | FASTQC // -> { fastqc_results } + + Channel.fromList([tuple(aligner: 'bwa-mem', index: fasta), tuple(aligner: 'hisat2', index: params.hisat_indices)]) + | set { aligners } + + ch_fastq_trimmed.trimmed_reads + | combine(aligners) + | map { [ + it[0] + [ aligner : it[2].aligner ], + it[2].aligner, + it[1], + (it[2].index ? it[2].index : fasta), + (it[2].index ? "index" : "genome") + ] } + | set { multi_align_input } + + MULTI_ALIGN(multi_align_input, Channel.fromPath(fasta_indices).collect()) + | set { ch_multi_align_sam } + + + ch_multi_align_sam.aligned_sam + | map { [it[0], fasta, it[1]] } // -> { meta, genome_path, mapped_sam } + | SAMTOOLS_BAM // -> { sorted_bam, sorted_bam_index, sorted_bam_flagstat, sorted_cram, sorted_cram_index } + | set { ch_bam_and_cram } + + ch_bam_and_cram.sorted_cram. + merge(SAMTOOLS_BAM.out.sorted_cram_index) + | map { [it[0], it[1], it[3]] } // -> tuple val(meta), file(cram), file(cram_idx) + | set { dreg_prep_input } + + DREG_PREP(dreg_prep_input, sizes) + + emit: + DREG_PREP.out.plus_bigwig + | join (DREG_PREP.out.minus_bigwig, by: [0]) } diff --git a/subworkflows/prep_bw/processes/bbduk/main.nf b/subworkflows/prep_bw/processes/bbduk/main.nf new file mode 100644 index 0000000..a886cd6 --- /dev/null +++ b/subworkflows/prep_bw/processes/bbduk/main.nf @@ -0,0 +1,140 @@ +process BBDUK { + publishDir "results/bbduk/trim_fastq", mode: 'copy', pattern: "*.trim.fastq.gz" + publishDir "results/bbduk/trim_stats", mode: 'copy', pattern: "*.trimstats.txt" + + cpus 16 + time '4h' + memory '32 GB' + + input: + tuple val(meta), path(indices), path(reads) + + output: + tuple val(meta), path("*.trim.fastq.gz"), emit: trimmed_reads + path "*.{refstats,trimstats}.txt", emit: trim_stats + + script: + prefix_pe = reads[0].toString() - ~/(_1\.)?(_R1)?(\.fq)?(fq)?(\.fastq)?(fastq)?(\.gz)?$/ + prefix_se = reads[0].toString() - ~/(\.fq)?(\.fastq)?(\.gz)?$/ + + def rnastrandness = '' + if (params.forwardStranded && !params.unStranded){ + rnastrandness = params.singleEnd ? '--rna-strandness F' : '--rna-strandness FR' + } else if (params.reverseStranded && !params.unStranded){ + rnastrandness = params.singleEnd ? '--rna-strandness R' : '--rna-strandness RF' + } + + def bbmap_adapters = params.bbmap_adapters + def indices_path = params.hisat_indices + def single_end = meta.single_end + def name = meta.id + + if (!single_end && params.flip) { + """ + echo ${name} + + bbduk.sh -Xmx40g \ + t=16 \ + in=${reads[0]} \ + in2=${reads[1]} \ + out=${prefix_pe}_1.trim.fastq.gz \ + out2=${prefix_pe}_2.trim.fastq.gz \ + ref=${bbmap_adapters} \ + ktrim=r qtrim=rl trimq=10 k=23 mink=11 hdist=1 \ + maq=10 minlen=25 \ + tpe tbo \ + literal=AAAAAAAAAAAAAAAAAAAAAAA \ + stats=${prefix_pe}.trimstats.txt \ + refstats=${prefix_pe}.refstats.txt + + reformat.sh -Xmx40g \ + t=16 \ + in=${prefix_pe}_1.trim.fastq.gz \ + in2=${prefix_pe}_2.trim.fastq.gz \ + out=${prefix_pe}_1.flip.trim.fastq.gz \ + out2=${prefix_pe}_2.flip.trim.fastq.gz \ + rcomp=t + """ + } else if (params.singleEnd && params.flip) { + """ + echo ${name} + + bbduk.sh -Xmx40g \ + t=16 \ + in=${reads} \ + out=${prefix_se}.trim.fastq.gz \ + ref=${bbmap_adapters} \ + ktrim=r qtrim=rl trimq=10 k=23 mink=11 hdist=1 \ + maq=10 minlen=25 \ + literal=AAAAAAAAAAAAAAAAAAAAAAA \ + stats=${prefix_se}.trimstats.txt \ + refstats=${prefix_se}.refstats.txt + + reformat.sh -Xmx40g \ + t=16 \ + in=${prefix_se}.trim.fastq.gz \ + out=${prefix_se}.flip.trim.fastq.gz \ + rcomp=t + """ + } else if (!single_end && params.flipR2) { + """ + echo ${prefix_pe} + + bbduk.sh -Xmx40g \ + t=16 \ + in=${reads[0]} \ + in2=${reads[1]} \ + out=${prefix_pe}_1.trim.fastq.gz \ + out2=${prefix_pe}_2.trim.fastq.gz \ + ref=${bbmap_adapters} \ + ktrim=r qtrim=rl trimq=10 k=23 mink=11 hdist=1 \ + nullifybrokenquality=t \ + maq=10 minlen=25 \ + tpe tbo \ + literal=AAAAAAAAAAAAAAAAAAAAAAA \ + stats=${prefix_pe}.trimstats.txt \ + refstats=${prefix_pe}.refstats.txt + + reformat.sh -Xmx40g \ + t=16 \ + in=${prefix_pe}_1.trim.fastq.gz \ + in2=${prefix_pe}_2.trim.fastq.gz \ + out=${prefix_pe}_1.flip.trim.fastq.gz \ + out2=${prefix_pe}_2.flip.trim.fastq.gz \ + rcompmate=t + """ + } else if (!single_end) { + """ + echo ${prefix_pe} + + bbduk.sh -Xmx40g \ + t=16 \ + in=${reads[0]} \ + in2=${reads[1]} \ + out=${prefix_pe}_1.trim.fastq.gz \ + out2=${prefix_pe}_2.trim.fastq.gz \ + ref=${bbmap_adapters} \ + ktrim=r qtrim=rl trimq=10 k=23 mink=11 hdist=1 \ + maq=10 minlen=25 \ + tpe tbo \ + literal=AAAAAAAAAAAAAAAAAAAAAAA \ + stats=${prefix_pe}.trimstats.txt \ + refstats=${prefix_pe}.refstats.txt + """ + } else { + """ + echo ${prefix_se} + + bbduk.sh -Xmx40g \ + t=16 \ + in=${reads} \ + out=${prefix_se}.trim.fastq.gz \ + ref=${bbmap_adapters} \ + ktrim=r qtrim=rl trimq=10 k=23 mink=11 hdist=1 \ + maq=10 minlen=25 \ + literal=AAAAAAAAAAAAAAAAAAAAAAA \ + stats=${prefix_se}.trimstats.txt \ + refstats=${prefix_se}.refstats.txt + """ + } +} \ No newline at end of file diff --git a/subworkflows/prep_bw/processes/fastqc/main.nf b/subworkflows/prep_bw/processes/fastqc/main.nf new file mode 100644 index 0000000..644b75d --- /dev/null +++ b/subworkflows/prep_bw/processes/fastqc/main.nf @@ -0,0 +1,19 @@ +process FASTQC { + publishDir "results/fastqc", mode: 'symlink' + + cpus 1 + memory '8 GB' + + input: + file input_fastq + + output: + tuple val(input_fastq.baseName), file("*.html"), file("*.zip"), emit: fastqc_results + + script: + prefix = input_fastq.baseName + """ + echo ${prefix} + fastqc ${input_fastq} + """ +} \ No newline at end of file diff --git a/subworkflows/prep_bw/processes/multi_align/main.nf b/subworkflows/prep_bw/processes/multi_align/main.nf new file mode 100644 index 0000000..a01cd64 --- /dev/null +++ b/subworkflows/prep_bw/processes/multi_align/main.nf @@ -0,0 +1,32 @@ +process MULTI_ALIGN { + publishDir "results/multi_align", mode: 'rellink' + + cpus 16 + time '4h' + memory '32 GB' + + input: + tuple val(meta), val(aligner), path(reads), val(reference), val(reference_type) + path indices + + output: + tuple val(meta), path("*.sam"), emit: aligned_sam + + script: + def forward_opt = "--input-forward ${reads[0]}" + def reverse_opt = reads.size() == 2 ? "--input-reverse ${reads[1]}" : "" + def aligner = aligner.toLowerCase() + def input_flag = reference_type == "genome" ? "--genome ${reference}" : "--index ${reference}" + meta.aligner = aligner + + """ + multi_align \ + ${forward_opt} \ + ${reverse_opt} \ + --output ${meta.id}.${aligner}.aligned.sam \ + --threads 16 \ + --allow-spliced-alignments false \ + ${aligner} \ + ${input_flag} + """ +} \ No newline at end of file diff --git a/subworkflows/prep_bw/processes/s1_sra_dump/main.nf b/subworkflows/prep_bw/processes/s1_sra_dump/main.nf new file mode 100644 index 0000000..1737cdd --- /dev/null +++ b/subworkflows/prep_bw/processes/s1_sra_dump/main.nf @@ -0,0 +1,38 @@ +process SRA_DUMP { + publishDir "results/s1_sra_dump", mode: 'rellink' + + input: + file input_sra + + output: + path '*.fastq.gz', emit: fastq + + script: + prefix = input_sra.baseName + if (!params.threadfqdump && !params.singleEnd) { + """ + echo ${prefix} + fastq-dump --split-3 ${reads} --gzip + """ + } else if (!params.threadfqdump) { + """ + echo ${prefix} + fastq-dump ${reads} --gzip + """ + } else if (!params.singleEnd) { + """ + parallel-fastq-dump \ + --threads 8 \ + --gzip \ + --split-3 \ + --sra-id ${reads} + """ + } else { + """ + parallel-fastq-dump \ + --threads 8 \ + --gzip \ + --sra-id ${reads} + """ + } +} \ No newline at end of file diff --git a/subworkflows/prep_bw/processes/s3_generate_bam/main.nf b/subworkflows/prep_bw/processes/s3_generate_bam/main.nf new file mode 100644 index 0000000..4ed8ada --- /dev/null +++ b/subworkflows/prep_bw/processes/s3_generate_bam/main.nf @@ -0,0 +1,29 @@ +process SAMTOOLS_BAM { + publishDir "results/s3_generate_bam", mode: 'rellink' + + cpus 16 + memory '32 GB' + + input: + tuple val(meta), val(genome_path), file(mapped_sam) + + output: + tuple val(meta), path("*.sorted.bam"), emit: sorted_bam + tuple val(meta), path("*.sorted.bam.bai"), emit: sorted_bam_index + tuple val(meta), path("*.flagstat"), emit: sorted_bam_flagstat + tuple val(meta), path("*.sorted.cram"), emit: sorted_cram + tuple val(meta), path("*.sorted.cram.crai"), emit: sorted_cram_index + + script: + def name = meta.id + """ + samtools view -@ 16 -bS -o ${name}.bam ${mapped_sam} + samtools sort -@ 16 ${name}.bam > ${name}.sorted.bam + samtools flagstat ${name}.sorted.bam > ${name}.flagstat + samtools view -@ 16 -F 0x904 -c ${name}.sorted.bam > ${name}.millionsmapped + samtools index ${name}.sorted.bam ${name}.sorted.bam.bai + samtools view -@ 16 -C -T ${genome_path} -o ${name}.cram ${name}.sorted.bam + samtools sort -@ 16 -O cram ${name}.cram > ${name}.sorted.cram + samtools index -c ${name}.sorted.cram ${name}.sorted.cram.crai + """ +} \ No newline at end of file diff --git a/subworkflows/prep_bw/processes/s5p_dreg_prep/main.nf b/subworkflows/prep_bw/processes/s5p_dreg_prep/main.nf new file mode 100644 index 0000000..a07d21f --- /dev/null +++ b/subworkflows/prep_bw/processes/s5p_dreg_prep/main.nf @@ -0,0 +1,65 @@ +process DREG_PREP { + publishDir "results/s5p_dreg_prep", mode: 'rellink' + + cpus 1 + memory '50 GB' + + input: + tuple val(meta), path(cram_file), path(cram_idx) + path(chrom_sizes) + + output: + tuple val(meta), path("*.pos.bw"), emit: plus_bigwig + tuple val(meta), path("*.neg.bw"), emit: minus_bigwig + + script: + def genome = params.fasta + def name = "${meta.id}.${meta.aligner}" + """ + echo "Creating BigWigs suitable as inputs to dREG" + + export CRAM_REFERENCE=${genome} + + bamToBed -i ${cram_file} | awk 'BEGIN{OFS="\t"} (\$5 > 0){print \$0}' | \ + awk 'BEGIN{OFS="\t"} (\$6 == "+") {print \$1,\$2,\$2+1,\$4,\$5,\$6}; (\$6 == "-") {print \$1, \$3-1,\$3,\$4,\$5,\$6}' \ + > ${name}.dreg.bed + sortBed -i ${name}.dreg.bed > ${name}.dreg.sort.bed + + echo positive strand processed to bedGraph + + bedtools genomecov \ + -bg \ + -i ${name}.dreg.sort.bed \ + -g ${chrom_sizes} \ + -strand + \ + > ${name}.pos.bedGraph + sortBed \ + -i ${name}.pos.bedGraph \ + > ${name}.pos.sort.bedGraph + + bedtools genomecov \ + -bg \ + -i ${name}.dreg.sort.bed \ + -g ${chrom_sizes} \ + -strand - \ + | awk 'BEGIN{FS=OFS="\t"} {\$4=-\$4}1' > ${name}.neg.bedGraph + sortBed \ + -i ${name}.neg.bedGraph \ + > ${name}.neg.sort.bedGraph + + echo negative strand processed to bedGraph + + for strand in pos neg; do + if [ -s "${name}.\${strand}.sort.bedGraph" ]; then + echo "Creating \${strand} strand bigwig" + bedGraphToBigWig "${name}.\${strand}.sort.bedGraph" "${chrom_sizes}" "${name}.\${strand}.bw" + else + echo "\${strand} strand bedGraph is empty. Creating stub bigwig" + touch "${name}.\${strand}.bw" + truncate -s 0 "${name}.\${strand}.bw" + fi + done + + echo bedGraph to bigwig done + """ +} \ No newline at end of file