From 3e1e1816320bd7ad8e41ee81d2e7e923fa508761 Mon Sep 17 00:00:00 2001
From: "Gervaise H. Henry" <gervaise.henry@utsouthwestern.edu>
Date: Wed, 8 Jul 2020 17:08:01 -0500
Subject: [PATCH] Add cellranger 4.0.0

---
 CHANGELOG.md                      |  12 +++++
 astrocyte_pkg.yml                 |   6 ++-
 workflow/conf/aws.config          |  44 ++++++++++++++++++
 workflow/conf/bicf_logo.png       | Bin 0 -> 24863 bytes
 workflow/conf/biohpc.config       |  73 ++++++++++++++++++++++++++++++
 workflow/conf/cluster.config      |  30 ++++++++++++
 workflow/conf/local.config        |   3 ++
 workflow/conf/multiqc_config.yaml |  62 +++++++++++++++++++++++++
 workflow/main.nf                  |  61 +++++++++++++++++++++++--
 workflow/nextflow.config          |   2 +-
 10 files changed, 286 insertions(+), 7 deletions(-)
 create mode 100644 workflow/conf/aws.config
 create mode 100644 workflow/conf/bicf_logo.png
 create mode 100644 workflow/conf/biohpc.config
 create mode 100644 workflow/conf/cluster.config
 create mode 100755 workflow/conf/local.config
 create mode 100755 workflow/conf/multiqc_config.yaml

diff --git a/CHANGELOG.md b/CHANGELOG.md
index e85dc43..8c1414a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,15 @@
+# v2.2.0-indev
+**User Facing**
+* Add cellranger version 4.0.0
+* Add references version 2020-A (GRCh38, mm10, mix)
+
+**Background**
+
+*Known Bugs*
+* Vizapp does not yet work for Astrocyte
+* Running in CLI: to set --fastq path of file/s needs to be in quotes
+
+
 # v2.1.1
 **User Facing**
 * Check Design File for spaces in name and file contents
diff --git a/astrocyte_pkg.yml b/astrocyte_pkg.yml
index e128e1f..29f82cd 100755
--- a/astrocyte_pkg.yml
+++ b/astrocyte_pkg.yml
@@ -100,12 +100,15 @@ workflow_parameters:
   - id: genome
     type: select
     choices:
+      - ['GRCh38-2020-A', 'Human GRCh38 release 98']
       - ['GRCh38-3.0.0', 'Human GRCh38 release 93']
       - ['GRCh38-1.2.0', 'Human GRCh38 release 84']
       - ['hg19-3.0.0', 'Human GRCh37 (hg19) release 87']
       - ['hg19-1.2.0', 'Human GRCh37 (hg19) release 84']
+      - ['mm10-2020-A', 'Mouse GRCm38 (mm10) release 98']
       - ['mm10-3.0.0', 'Mouse GRCm38 (mm10) release 93']
       - ['mm10-1.2.0', 'Mouse GRCm38 (mm10) release 84']
+      - ['GRCh38_and_mm10-2020-A', 'Human GRCh38 + Mouse GRCm38 (mm10) release 98']
       - ['GRCh38_and_mm10-3.1.0', 'Human GRCh38 + Mouse GRCm38 (mm10) release 93']
       - ['hg19_and_mm10-3.0.0', 'Human GRCh37 (hg19) + Mouse GRCm38 (mm10) release 93']
       - ['hg19_and_mm10-1.2.0', 'Human GRCh37 (hg19) + Mouse GRCm38 (mm10) release 84']
@@ -146,8 +149,9 @@ workflow_parameters:
 
   - id: version
     type: select
-    default: '3.1.0'
+    default: '4.0.0'
     choices:
+      - ['4.0.0', '4.0.0']
       - ['3.1.0', '3.1.0']
       - ['3.0.2', '3.0.2']
       - ['2.1.1', '2.1.1']
diff --git a/workflow/conf/aws.config b/workflow/conf/aws.config
new file mode 100644
index 0000000..6caee14
--- /dev/null
+++ b/workflow/conf/aws.config
@@ -0,0 +1,44 @@
+workDir = 's3://'
+aws.client.storageEncryption = 'AES256'
+aws {
+  region = ''
+  batch {
+    cliPath = '/home/ec2-user/miniconda/bin/aws'
+  }
+}
+
+process {
+  executor = 'awsbatch'
+  queue = 'default-'
+  cpus = 1
+  memory = '1 GB'
+
+  withLabel: checkDesignFile {
+    cpus = 2
+    memory = '1 GB'
+  }
+  withLabel: count211 {
+    cpus = 2
+    memory = '30 GB'
+  }
+  withLabel: count220 {
+    cpus = 2
+    memory = '30 GB'
+  }
+  withLabel: count302 {
+    cpus = 2
+    memory = '30 GB'
+  }
+  withLabel: count310 {
+    cpus = 2
+    memory = '30 GB'
+  }
+  withLabel: versions {
+    cpus = 3
+    memory = '1 GB'
+  }
+  withLabel: multiqc {
+    cpus = 1
+    memory = '1 GB'
+  }
+}
diff --git a/workflow/conf/bicf_logo.png b/workflow/conf/bicf_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d8015590c5a94f92c39ec2470bd02baa3d09077
GIT binary patch
literal 24863
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
ZPL2w7h5Opc`wjr0sj7RwT-iG8e*l&whlBtC

literal 0
HcmV?d00001

diff --git a/workflow/conf/biohpc.config b/workflow/conf/biohpc.config
new file mode 100644
index 0000000..983b458
--- /dev/null
+++ b/workflow/conf/biohpc.config
@@ -0,0 +1,73 @@
+params {
+  // Reference file paths on BioHPC
+  genomes {
+    'GRCh38-2020-A' {
+      loc = '/project/apps_database/cellranger/refdata-gex-'
+    }
+    'GRCh38-3.0.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'GRCh38-1.2.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'hg19-3.0.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'hg19-1.2.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'mm10-2020-A' {
+      loc = '/project/apps_database/cellranger/refdata-gex-'
+    }
+    'mm10-3.0.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'mm10-1.2.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'GRCh38_and_mm10-2020-A' {
+      loc = '/project/apps_database/cellranger/refdata-gex-'
+    }
+    'GRCh38_and_mm10-3.1.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'hg19_and_mm10-3.0.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'hg19_and_mm10-1.2.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+    'ercc92-1.2.0' {
+      loc = '/project/apps_database/cellranger/refdata-cellranger-'
+    }
+  }
+  // Chemistry mapping parameter
+  chemistry {
+    'auto' {
+      param = 'auto'
+    }
+    '3GEXv1' {
+      param = 'SC3Pv1'
+    }
+   '3GEXv2' {
+      param = 'SC3Pv2'
+    }
+   '3GEXv3' {
+      param = 'SC3Pv3'
+    }
+   '5GEX' {
+      param = 'fiveprime'
+    }
+  }
+}
+
+singularity {
+  enabled = true
+  cacheDir = '/project/BICF/BICF_Core/shared/gudmap/singularity_cache/'
+}
+
+env {
+  http_proxy = 'http://proxy.swmed.edu:3128'
+  https_proxy = 'http://proxy.swmed.edu:3128'
+  all_proxy = 'http://proxy.swmed.edu:3128'
+}
diff --git a/workflow/conf/cluster.config b/workflow/conf/cluster.config
new file mode 100644
index 0000000..7322376
--- /dev/null
+++ b/workflow/conf/cluster.config
@@ -0,0 +1,30 @@
+process {
+  executor = 'slurm'
+  queue = '32GB'
+  clusterOptions = '--hold'
+
+  withLabel: trackStart {
+    executor = 'local'
+  }
+  withLabel: checkDesignFile {
+    executor = 'local'
+  }
+  withLabel: count211 {
+    queue = '128GB,256GB,256GBv1,384GB'
+  }
+  withLabel: count220 {
+    queue = '128GB,256GB,256GBv1,384GB'
+  }
+  withLabel: count302 {
+    queue = '128GB,256GB,256GBv1,384GB'
+  }
+  withLabel: count310 {
+    queue = '128GB,256GB,256GBv1,384GB'
+  }
+  withLabel: versions {
+    executor = 'local'
+  }
+  withLabel: multiqc {
+    executor = 'local'
+  }
+}
diff --git a/workflow/conf/local.config b/workflow/conf/local.config
new file mode 100755
index 0000000..9ca703b
--- /dev/null
+++ b/workflow/conf/local.config
@@ -0,0 +1,3 @@
+process {
+  executor = 'local'
+}
\ No newline at end of file
diff --git a/workflow/conf/multiqc_config.yaml b/workflow/conf/multiqc_config.yaml
new file mode 100755
index 0000000..2ff18a7
--- /dev/null
+++ b/workflow/conf/multiqc_config.yaml
@@ -0,0 +1,62 @@
+# Custom Logo
+custom_logo: 'bicf_logo.png'
+custom_logo_url: 'https://www.utsouthwestern.edu/labs/bioinformatics/'
+custom_logo_title: 'Bioinformatics Core Facility'
+
+report_header_info:
+    - Contact E-mail: 'bicf@utsouthwestern.edu'
+    - Application Type: 'cellranger_count'
+    - Department: 'Bioinformatic Core Facility, Department of Bioinformatics'
+
+
+# Title to use for the report.
+title: BICF CellRanger Count Analysis Report
+
+report_comment: >
+  This report has been generated by the <a href="https://git.biohpc.swmed.edu/BICF/Astrocyte/cellranger_count"
+  target="_blank">BICF/cellranger_count</a> pipeline.
+
+custom_data:
+  metrics_summary:
+    file_format: 'tsv'
+    id: 'metrics_summary'
+    contents: 'Estimated Number of Cells        Mean Reads per Cell     Median Genes per Cell   Number of Reads Valid Barcodes  Sequencing Saturation   Q30 Bases in Barcode    Q30 Bases in RNA Read   Q30 Bases in UMI        Reads Mapped to Genome  Reads Mapped Confidently to Genome      Reads Mapped Confidently to Intergenic Regions  Reads Mapped Confidently to Intronic Regions    Reads Mapped Confidently to Exonic Regions      Reads Mapped Confidently to Transcriptome       Reads Mapped Antisense to Gene  Fraction Reads in Cells Total Genes Detected    Median UMI Counts per Cell'
+    section_name: 'Metrics Summary'
+    plot_type: 'generalstats'
+
+sp:
+  metrics_summary:
+    fn: 'metrics_summary_mqc.tsv'
+
+table_columns_placement:
+  metrics_summary:
+    Estimated Number of Cells: 1
+    Mean Reads per Cell: 2
+    Median Genes per Cell: 3
+    Number of Reads: 4
+    Sequencing Saturation: 5
+    Reads Mapped Confidently to Genome: 6
+    Reads Mapped Confidently to Transcriptome: 7
+    Fraction Reads in Cells: 8
+    Total Genes Detected: 9
+    Median UMI Counts per Cell: 10
+    Valid Barcodes: 1100
+    Reads Mapped Antisense to Gene: 1200
+
+table_columns_visible:
+  metrics_summary:
+    Q30 Bases in Barcode: False
+    Q30 Bases in RNA Read: False
+    Q30 Bases in UMI: False
+    Reads Mapped to Genome: False
+    Reads Mapped Confidently to Intergenic Regions: False
+    Reads Mapped Confidently to Intronic Regions: False
+    Reads Mapped Confidently to Exonic Regions: False
+
+thousandsSep_format: ''
+
+report_section_order:
+    software_versions:
+      order: -1100
+    software_references:
+      order: -1200
diff --git a/workflow/main.nf b/workflow/main.nf
index f110f31..d727bb8 100755
--- a/workflow/main.nf
+++ b/workflow/main.nf
@@ -21,12 +21,12 @@ main.nf
 params.name = "run"
 params.fastq = "test_data/mu.v3s1r500/*.fastq.gz"
 params.designFile = "test_data/mu.v3s1r500/design.csv"
-params.genome = 'mm10-3.0.0'
-params.genomeLocation = '/project/apps_database/cellranger/refdata-cellranger-'
+params.genome = 'mm10-2020-A'
+params.genomeLocation = '/project/apps_database/cellranger/refdata-gex-'
 params.expectCells = 10000
 params.forceCells = 0
 params.kitVersion = '3GEXv3'
-params.version = '3.1.0'
+params.version = '4.0.0'
 params.astrocyte = false
 params.outDir = "${baseDir}/output"
 
@@ -60,7 +60,7 @@ if (params.astrocyte) {
 params.genomeLocationFull = params.genomeLocation+params.genome
 
 // Define variables from input
-pipelineVersion = "2.1.1"
+pipelineVersion = "2.2.0-indev"
 name = params.name
 designLocation = Channel
   .fromPath(params.designFile)
@@ -158,21 +158,26 @@ samples.into {
   samples211
   samples302
   samples310
+  samples400
 }
 refLocation.into {
   refLocation211
   refLocation302
   refLocation310
+  refLocation400
 }
 expectCells211 = expectCells
 expectCells302 = expectCells
 expectCells310 = expectCells
+expectCells3400 = expectCells
 forceCells211 = forceCells
 forceCells302 = forceCells
 forceCells310 = forceCells
+forceCells400 = forceCells
 chemistryParam211 = chemistryParam
 chemistryParam302 = chemistryParam
 chemistryParam310 = chemistryParam
+chemistryParam400 = chemistryParam
 
 
 /*
@@ -314,6 +319,52 @@ process count310 {
     }
 }
 
+/*
+ * count400: run cellranger count version 4.0.0
+ */
+process count400 {
+  tag "${sample}"
+  publishDir "${outDir}/${task.process}", mode: 'copy'
+  queue '128GB,256GB,256GBv1,384GB'
+  module 'cellranger/4.0.0'
+
+  input:
+    set sample, file("${sample}_S?_L001_R1_001.fastq.gz"), file("${sample}_S?_L001_R2_001.fastq.gz"), file(script) from samples400
+    file ref from refLocation310.first()
+    expectCells400
+    forceCells400
+    chemistryParam400
+
+  output:
+    file("**/outs/**") into outPaths400
+    file("*_metrics_summary.tsv") into metricsSummary400
+
+  when:
+    version == '4.0.0'
+
+  script:
+    if (forceCells400 == 0) {
+      """
+      hostname
+      ulimit -u 16384
+      ulimit -a
+      bash filename_check.sh -r ${ref}
+      cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --expect-cells=${expectCells310} --chemistry=${chemistryParam310}
+      sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
+      """
+    }
+    else {
+      """
+      hostname
+      ulimit -u 16384
+      ulimit -a
+      bash filename_check.sh -r ${ref}
+      cellranger count --id=${sample} --transcriptome=./${ref} --fastqs=. --sample=${sample} --force-cells=${forceCells310} --chemistry=${chemistryParam310}
+      sed -E 's/("([^"]*)")?(,|\$)/\\2\t/g' ${sample}/outs/metrics_summary.csv | tr -d "," | sed "s/^/${sample}\t/" > ${sample}_metrics_summary.tsv
+      """
+    }
+}
+
 /*
  * versions: collect all versions into a single yml
  */
@@ -343,7 +394,7 @@ process versions {
 }
 
 // Collect all metrics summaries reguardless of cellranger version
-metricsSummary = metricsSummary211.mix(metricsSummary302, metricsSummary310)
+metricsSummary = metricsSummary211.mix(metricsSummary302, metricsSummary310, metricsSummary400)
 
 /*
  * multiqc: create multiqc report
diff --git a/workflow/nextflow.config b/workflow/nextflow.config
index 5a622ec..c402bf3 100644
--- a/workflow/nextflow.config
+++ b/workflow/nextflow.config
@@ -47,6 +47,6 @@ manifest {
   homePage = 'https://git.biohpc.swmed.edu/BICF/Astrocyte/cellranger_count'
   description = 'This pipeline is a wrapper for the cellranger count tool from 10x Genomics. It takes fastq files from 10x Genomics Single Cell Gene Expression libraries, performs alignment, filtering, barcode counting, and UMI counting. It uses the Chromium cellular barcodes to generate gene-barcode matrices, determine clusters, and perform gene expression analysis.'
   mainScript = 'main.nf'
-  version = '2.1.1'
+  version = '2.2.0-indev'
   nextflowVersion = '>=0.31.0'
 }
-- 
GitLab