Skip to content

Commit

Permalink
Two new workflows:
Browse files Browse the repository at this point in the history
    handle (ref-indepedent, alignment) a single piece of on-instrument demultiplexed CCS bam
  • Loading branch information
SHuang-Broad committed Dec 1, 2023
1 parent 9b78448 commit c905a5a
Show file tree
Hide file tree
Showing 3 changed files with 162 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .dockstore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ workflows:
- name: PBMASIsoSeqDemultiplex
subclass: wdl
primaryDescriptorPath: /wdl/pipelines/PacBio/Utility/PBMASIsoSeqDemultiplex.wdl
- name: ProcessOnInstrumentDemuxedChunkRefFree
subclass: wdl
primaryDescriptorPath: /wdl/pipelines/PacBio/Utility/ProcessOnInstrumentDemuxedChunkRefFree.wdl
- name: ProcessOnInstrumentDemuxedChunk
subclass: wdl
primaryDescriptorPath: /wdl/pipelines/PacBio/Utility/ProcessOnInstrumentDemuxedChunk.wdl

###################################################
# TechAgnostic
Expand Down
98 changes: 98 additions & 0 deletions wdl/pipelines/PacBio/Utility/ProcessOnInstrumentDemuxedChunk.wdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
version 1.0

import "../../../tasks/Utility/PBUtils.wdl"
import "../../../tasks/Utility/BAMutils.wdl" as BU
import "../../../tasks/Utility/GeneralUtils.wdl" as GU

import "../../../tasks/Utility/Finalize.wdl" as FF

import "../../../tasks/Alignment/AlignAndCheckFingerprintCCS.wdl" as major
import "../../../tasks/QC/AlignedMetrics.wdl"

workflow ProcessOnInstrumentDemuxedChunk {

meta {
desciption: "!!! WARN: THIS IS PROJECT-CENTER SPECIFIC !!! Given an on-instrument demultiplexed hifi_reads.bam, perform alignment and QC check."
}

input {
File uBAM

String readgroup_id

String bam_SM_field

String fingerprint_store
String sample_id_at_store
Boolean turn_off_fingperprint_check = false

File ref_map_file

String gcs_out_root_dir
}

###################################################################################
# prep work
# where to store final results
String workflow_name = "ProcessOnInstrumentDemuxedChunk"
String outdir = sub(gcs_out_root_dir, "/$", "") + "/" + workflow_name

###################################################################################
# generate PBI
call PBUtils.PBIndex as Index {input: bam = uBAM}
call BU.GetReadGroupInfo as RG {input: bam = uBAM, keys = ['SM', 'LB', 'PU']}

# major work
call major.AlignAndCheckFingerprintCCS {
input:
uBAM = uBAM,
uPBI = Index.pbi,
bam_sample_name = bam_SM_field,
library = RG.read_group_info['LB'],

turn_off_fingperprint_check = turn_off_fingperprint_check,
fp_store = fingerprint_store,
sample_id_at_store = sample_id_at_store,
ref_map_file = ref_map_file
}

call AlignedMetrics.MosDepthWGS { input: bam = AlignAndCheckFingerprintCCS.aligned_bam, bai = AlignAndCheckFingerprintCCS.aligned_bai}
###################################################################################
# finalize
String movie_name = RG.read_group_info['PU']
String bc_specific_aln_out = outdir + '/alignments/' + readgroup_id
String bc_specific_metric_out = outdir + "/metrics/" + readgroup_id

call FF.FinalizeToFile as FinalizeAlignedBam { input: outdir = bc_specific_aln_out, file = AlignAndCheckFingerprintCCS.aligned_bam, name = readgroup_id + '.bam' }
call FF.FinalizeToFile as FinalizeAlignedBai { input: outdir = bc_specific_aln_out, file = AlignAndCheckFingerprintCCS.aligned_bai, name = readgroup_id + '.bai' }
call FF.FinalizeToFile as FinalizeAlignedPbi { input: outdir = bc_specific_aln_out, file = AlignAndCheckFingerprintCCS.aligned_pbi, name = readgroup_id + '.pbi' }

call FF.FinalizeToFile as FinalizeAlnMetrics { input: outdir = bc_specific_metric_out, file = AlignAndCheckFingerprintCCS.alignment_metrics_tar_gz }

if (! turn_off_fingperprint_check) {
call FF.FinalizeToFile as FinalizeFPDetails { input: outdir = bc_specific_metric_out, file = select_first([AlignAndCheckFingerprintCCS.fingerprint_detail_tar_gz]) }
}

###################################################################################
call GU.GetTodayDate as today {}

output {
File aligned_bam = FinalizeAlignedBam.gcs_path
File aligned_bai = FinalizeAlignedBai.gcs_path
File aligned_pbi = FinalizeAlignedPbi.gcs_path
Float wgs_cov = MosDepthWGS.wgs_cov

Map[String, Float] alignment_metrics = AlignAndCheckFingerprintCCS.alignment_metrics
File alignment_metrics_tar_gz = FinalizeAlnMetrics.gcs_path

String movie = movie_name

String? fingerprint_check_result = AlignAndCheckFingerprintCCS.fp_status
Float? fingerprint_check_LOD = AlignAndCheckFingerprintCCS.fp_lod_expected_sample
File? fingerprint_check_tar_gz = FinalizeFPDetails.gcs_path

String last_processing_date = today.yyyy_mm_dd
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
version 1.0

import "../../../tasks/Visualization/NanoPlot.wdl"

import "../../../tasks/Utility/Utils.wdl"
import "../../../tasks/Utility/BAMutils.wdl" as BU
import "../../../tasks/Utility/GeneralUtils.wdl" as GU

import "../../../tasks/Utility/Finalize.wdl" as FF

workflow ProcessOnInstrumentDemuxedChunkRefFree {

meta {
desciption: "!!! WARN: THIS IS PROJECT-CENTER SPECIFIC !!! Given an on-instrument demultiplexed hifi_reads.bam, perform ref-independent prep work."
}

input {
File uBAM

String readgroup_id

String gcs_out_root_dir
}

###################################################################################
# prep work
# where to store final results
String workflow_name = "ProcessOnInstrumentDemuxedChunkRefFree"
String outdir = sub(gcs_out_root_dir, "/$", "") + "/" + workflow_name
String outdir_ref_free = outdir + '/RefFree'

###################################################################################
# stats
call NanoPlot.NanoPlotFromUBam {input: uBAM = uBAM}

call BU.BamToFastq {input: bam = uBAM, prefix = "does_not_matter"}
###################################################################################
# finalize
call BU.GetReadGroupInfo as RG {input: bam = uBAM, keys = ['PU']}
String movie_name = RG.read_group_info['PU']

String bc_specific_fastq_out = outdir_ref_free + '/' + readgroup_id
call FF.FinalizeToFile as FinalizeFQ { input: outdir = bc_specific_fastq_out, file = BamToFastq.reads_fq, name = readgroup_id + '.hifi.fq.gz' }

###################################################################################
call GU.GetTodayDate as today {}

output {
String movie = movie_name

File hifi_fq = FinalizeFQ.gcs_path
Map[String, Float] hifi_stats = NanoPlotFromUBam.stats_map

String last_processing_date = today.yyyy_mm_dd
}
}

0 comments on commit c905a5a

Please sign in to comment.