Test data
inst/extdata/<tool>/, tracked with DVC on a public R2 bucket. dvc pull in a clone, or from R:
View input files
indir <- system.file("extdata", package = "tidydragen")
dir_tree(indir, invert = TRUE, glob = "*.dvc")
#> /home/runner/miniconda3/envs/pkgdown_env/lib/R/library/tidydragen/extdata
#> ├── dragenbcl
#> │ ├── Adapter_Cycle_Metrics.csv
#> │ ├── Adapter_Metrics.csv
#> │ ├── Demultiplex_Stats.csv
#> │ ├── Demultiplex_Tile_Stats.csv
#> │ ├── Index_Hopping_Counts.csv
#> │ ├── Quality_Metrics.csv
#> │ ├── Quality_Tile_Metrics.csv
#> │ ├── RunInfo.xml
#> │ ├── Top_Unknown_Barcodes.csv
#> │ └── fastq_list.csv
#> ├── dragencov
#> │ ├── sampleA.exon_coverage_metrics.csv
#> │ ├── sampleA.qc-coverage-region-umccr_cov_report.bed
#> │ ├── sampleA.qc-coverage-region-umccr_read_cov_report.bed
#> │ ├── sampleA.target_bed_coverage_metrics.csv
#> │ ├── sampleA.wgs_contig_mean_cov.csv
#> │ ├── sampleA.wgs_contig_mean_cov_normal.csv
#> │ ├── sampleA.wgs_contig_mean_cov_tumor.csv
#> │ ├── sampleA.wgs_coverage_metrics.csv
#> │ └── sampleA.wgs_fine_hist.csv
#> ├── dragenfqc
#> │ └── sampleA.fastqc_metrics.csv
#> ├── dragenmap
#> │ ├── cttso-dragencaller
#> │ │ ├── sampleB-replay.json
#> │ │ └── sampleB.time_metrics.csv
#> │ ├── cttso-tmb
#> │ │ ├── sampleB-replay.json
#> │ │ └── sampleB.time_metrics.csv
#> │ ├── sampleA-replay.json
#> │ ├── sampleA.fragment_length_hist.csv
#> │ ├── sampleA.gc_metrics.csv
#> │ ├── sampleA.mapping_metrics.csv
#> │ ├── sampleA.time_metrics.csv
#> │ ├── sampleA.trimmer_metrics.csv
#> │ └── sampleA.umi_metrics.csv
#> ├── dragenrna
#> │ ├── sampleA.fusion_metrics.csv
#> │ └── sampleA.quant_metrics.csv
#> ├── dragentso
#> │ ├── sampleA.exon_cov_report.tsv
#> │ ├── sampleA.gene_cov_report.tsv
#> │ ├── sampleA.tmb.msaf.csv
#> │ ├── sampleA.tmb.trace.tsv
#> │ ├── sampleA_CombinedVariantOutput.tsv
#> │ ├── sampleA_Fusions.csv
#> │ └── sampleA_SampleAnalysisResults.json
#> ├── dragenvar
#> │ ├── sampleA.allele_transition_noise_metrics.csv
#> │ ├── sampleA.cnv_metrics.csv
#> │ ├── sampleA.contamination.json
#> │ ├── sampleA.gvcf_metrics.csv
#> │ ├── sampleA.hrdscore.csv
#> │ ├── sampleA.microsat_output.json
#> │ ├── sampleA.ploidy.vcf.gz
#> │ ├── sampleA.ploidy_estimation_metrics.csv
#> │ ├── sampleA.sv_metrics.csv
#> │ ├── sampleA.tmb.metrics.csv
#> │ ├── sampleA.vc_hethom_ratio_metrics.csv
#> │ ├── sampleA.vc_metrics.csv
#> │ ├── sampleB.cnv_metrics.csv
#> │ ├── sampleB.ploidy_estimation_metrics.csv
#> │ └── sampleB.vc_metrics.csv
#> └── interop
#> ├── imaging_tables
#> │ ├── compressed
#> │ │ └── imaging_table.csv.gz
#> │ └── uncompressed
#> │ └── imaging_table.csv
#> └── summaries
#> ├── runA-index_summary.csv
#> └── runA_summary.csv
Each tool has its own R6 class. run() parses, tidies and writes in one step:
outdir <- file.path(tempdir(), "qs_map")
DragenMap$new(file.path(indir, "dragenmap"))$run(
output_dir = outdir,
format = "parquet",
input_id = "sampleA_id"
)
list.files(outdir, pattern = "\\.parquet$")
#> [1] "metadata_dragenmap.parquet" "sampleA_dragenmap_fraglenhist.parquet"
#> [3] "sampleA_dragenmap_gcbias.parquet" "sampleA_dragenmap_gcmain.parquet"
#> [5] "sampleA_dragenmap_metrics.parquet" "sampleA_dragenmap_replayconfig.parquet"
#> [7] "sampleA_dragenmap_replaymain.parquet" "sampleA_dragenmap_time.parquet"
#> [9] "sampleA_dragenmap_trimmer.parquet" "sampleA_dragenmap_umihist.parquet"
#> [11] "sampleA_dragenmap_umimain.parquet" "sampleB_2_dragenmap_replayconfig.parquet"
#> [13] "sampleB_2_dragenmap_replaymain.parquet" "sampleB_2_dragenmap_time.parquet"
#> [15] "sampleB_dragenmap_replayconfig.parquet" "sampleB_dragenmap_replaymain.parquet"
#> [17] "sampleB_dragenmap_time.parquet"
File naming
{prefix}_{tool}_{table}.parquet, prefix from input filename (sampleA). One file can fan out to several tables, declared under outputs: in the tool’s schema.yaml (e.g. umi_metrics.csv => umimain + umihist). See Output Naming and Structure.
Reading a table back
m <- read_parquet(file.path(outdir, "sampleA_dragenmap_metrics.parquet"))
m |> str(list.len = 10)
#> tibble [4 × 131] (S3: tbl_df/tbl/data.frame)
#> $ input_id : chr [1:4] "sampleA_id" "sampleA_id" "sampleA_id" "sampleA_id"
#> $ section : chr [1:4] "TUMOR" "NORMAL" "TUMOR" "NORMAL"
#> $ rg : chr [1:4] "Total" "Total" "CAAGCTAG+CGCTATGT.4.260813_A01052_0316_AHTYNTDSXF" "CAGTAGGC+ATTCGTCA.3.260813_A01052_0316_AHTYNTDSXF"
#> $ reads_tot_input : num [1:4] 2.64e+09 9.39e+08 NA NA
#> $ reads_tot_input_pct : num [1:4] 100 100 NA NA
#> $ reads_num_dupmarked : num [1:4] 5.24e+08 1.31e+08 5.24e+08 1.31e+08
#> $ reads_num_dupmarked_pct : num [1:4] 19.9 13.9 19.9 13.9
#> $ reads_num_dupmarked_mate_reads_removed : num [1:4] NA NA NA NA
#> $ reads_num_uniq : num [1:4] 2.11e+09 8.08e+08 2.11e+09 8.08e+08
#> $ reads_num_uniq_pct : num [1:4] 80.1 86.1 80.1 86.1
#> [list output truncated]
Output - Full DRAGEN run
Dragen runs all tools on a parent directory; absent tools are skipped, so it works for germline, somatic, RNA, ctTSO500 and BCLConvert/InterOp run folders:
outdir_d <- file.path(tempdir(), "qs_dragen")
d <- Dragen$new(indir)
d$run(
output_dir = outdir_d,
format = "parquet"
)
list.files(outdir_d, pattern = "\\.parquet$") |> sort() |> str()
#> chr [1:89] "dragenbcl_adaptercyclemetrics.parquet" ...
ID columns
Optional, off by default:
input_id = "x" |
input_id |
sample or run identifier you supply |
output_id = "x" |
output_id |
processing run identifier you supply |
prefix_include = TRUE |
input_prefix |
filename prefix extracted from input files |
outdir_id <- file.path(tempdir(), "qs_map_id")
DragenMap$new(file.path(indir, "dragenmap"))$run(
output_dir = outdir_id,
format = "parquet",
input_id = "sampleA",
output_id = "out1",
prefix_include = TRUE
)
read_parquet(file.path(outdir_id, "sampleA_dragenmap_metrics.parquet")) |>
str(list.len = 10)
#> tibble [4 × 133] (S3: tbl_df/tbl/data.frame)
#> $ input_id : chr [1:4] "sampleA" "sampleA" "sampleA" "sampleA"
#> $ input_prefix : chr [1:4] "sampleA" "sampleA" "sampleA" "sampleA"
#> $ output_id : chr [1:4] "out1" "out1" "out1" "out1"
#> $ section : chr [1:4] "TUMOR" "NORMAL" "TUMOR" "NORMAL"
#> $ rg : chr [1:4] "Total" "Total" "CAAGCTAG+CGCTATGT.4.260813_A01052_0316_AHTYNTDSXF" "CAGTAGGC+ATTCGTCA.3.260813_A01052_0316_AHTYNTDSXF"
#> $ reads_tot_input : num [1:4] 2.64e+09 9.39e+08 NA NA
#> $ reads_tot_input_pct : num [1:4] 100 100 NA NA
#> $ reads_num_dupmarked : num [1:4] 5.24e+08 1.31e+08 5.24e+08 1.31e+08
#> $ reads_num_dupmarked_pct : num [1:4] 19.9 13.9 19.9 13.9
#> $ reads_num_dupmarked_mate_reads_removed : num [1:4] NA NA NA NA
#> [list output truncated]
Every run() also writes metadata (input/output dirs, IDs, R package versions): metadata.parquet for Dragen, metadata_<tool>.parquet for a single tool.
read_parquet(file.path(outdir_d, "metadata.parquet")) |> str()
#> tibble [1 × 6] (S3: tbl_df/tbl/data.frame)
#> $ input_id : chr NA
#> $ output_id : chr NA
#> $ input_dirs : list<character> [1:1]
#> ..$ : chr "/home/runner/miniconda3/envs/pkgdown_env/lib/R/library/tidydragen/extdata"
#> ..@ ptype: chr(0)
#> $ output_dir : chr "/tmp/RtmpDpSQNe/qs_dragen"
#> $ pkg_versions: list<
#> tbl_df<
#> name : character
#> version: character
#> >
#> > [1:1]
#> ..$ : tibble [2 × 2] (S3: tbl_df/tbl/data.frame)
#> .. ..$ name : chr [1:2] "nemo" "tidydragen"
#> .. ..$ version: chr [1:2] "0.2.0.9000" "0.1.0"
#> ..@ ptype: tibble [0 × 2] (S3: tbl_df/tbl/data.frame)
#> .. ..$ name : chr(0)
#> .. ..$ version: chr(0)
#> $ files : list<
#> tbl_df<
#> tbl : character
#> prefix: character
#> fout : character
#> fin : character
#> >
#> > [1:1]
#> ..$ : tibble [88 × 4] (S3: tbl_df/tbl/data.frame)
#> .. ..$ tbl : chr [1:88] "dragenmap_replaymain" "dragenmap_replayconfig" "dragenmap_time" "dragenmap_replaymain" ...
#> .. ..$ prefix: chr [1:88] "sampleB" "sampleB" "sampleB" "sampleB_2" ...
#> .. ..$ fout : chr [1:88] "sampleB_dragenmap_replaymain.parquet" "sampleB_dragenmap_replayconfig.parquet" "sampleB_dragenmap_time.parquet" "sampleB_2_dragenmap_replaymain.parquet" ...
#> .. ..$ fin : chr [1:88] "/home/runner/miniconda3/envs/pkgdown_env/lib/R/library/tidydragen/extdata/dragenmap/cttso-dragencaller/sampleB-replay.json" "/home/runner/miniconda3/envs/pkgdown_env/lib/R/library/tidydragen/extdata/dragenmap/cttso-dragencaller/sampleB-replay.json" "/home/runner/miniconda3/envs/pkgdown_env/lib/R/library/tidydragen/extdata/dragenmap/cttso-dragencaller/sampleB."| __truncated__ "/home/runner/miniconda3/envs/pkgdown_env/lib/R/library/tidydragen/extdata/dragenmap/cttso-tmb/sampleB-replay.json" ...
#> ..@ ptype: tibble [0 × 4] (S3: tbl_df/tbl/data.frame)
#> .. ..$ tbl : chr(0)
#> .. ..$ prefix: chr(0)
#> .. ..$ fout : chr(0)
#> .. ..$ fin : chr(0)