snipe alignment-free QC benchmark — data files
Reference: Canis familiaris CanFam3.1 (GCF_000002285.3)

These are the source tables and the computed scores behind every number on the
benchmark web page. Run the two scripts on the two source inputs to reproduce the
computed tables exactly.

SOURCE INPUTS (raw)
  comparison_subset.tsv          snipe alignment-free estimates vs the alignment
                                 ground truth (Qualimap + bamqc), one row per
                                 sample x k-config, for all 5 assays. The main input.
  consolidated_df_clean.tsv.gz   Full consolidated master table (gzipped, ~64 MB
                                 uncompressed). Used only for the read-level mapping
                                 ground truth (mapped_reads / total). gunzip to read.

BUILD SCRIPTS
  build_composite_score.py       comparison_subset.tsv (+ read-level mapping GT) ->
                                 the composite score tables below.
  _readlevel_mapping.py          helper: read-level mapping GT from consolidated_df_clean.
  build_score_app_data.py        composite tables -> score_app_data.json (the web data).

COMPUTED TABLES
  accuracy_atomic.tsv            per (assay x config x metric): the 'mape' column is the
                                 MEDIAN absolute percentage error (MdAPE, not the mean),
                                 Pearson r, informative flag, n, accuracy in [0,1].
  composite_scores.tsv           per (workload-combo x config): the 6 score flavors.
  composite_full_all_k.tsv       the full per-config grid used by the drill-down.
  best_config_per_combo.tsv      recommended config per workload (argmax score_equal).
  headline_scores.tsv            best score per workload, per flavor.
  robustness.tsv                 single global-best config vs each workload's own best.
  score_app_data.json            the exact data object the web page renders.

k-MER GRID
  The sweep is k1 {21,25,31,35,41,45,51,55,61,65,71} x k2-extension {2,4,6,8,10,14,18}
  x FracMinHash scale {1000,10000,100000}, complete for every assay.

GROUPING (as presented on the page and in score_app_data.json)
  Scores are grouped as: whole-genome workloads (WGS, indels, metagenomic, and their
  7 combinations), whole-exome capture (WXS), and RNA. WXS and RNA are each scored on
  their own and are not bundled with the whole-genome assays, because both are targeted
  or small-reference assays and prefer small k1 where the whole-genome assays prefer
  large k1. The 31-combo composite_scores.tsv is the full combinatorial reference;
  composite_full_all_k.tsv holds the grouped view actually shown.
