Skip to content

Conversation

@trianglegrrl
Copy link

Summary

Add new module yallhap/classify for Y-chromosome haplogroup classification from VCF files.

yallhap is a modern Y-chromosome haplogroup inference tool that supports:

  • Modern and ancient DNA samples (with configurable depth/quality thresholds)
  • Probabilistic confidence scoring with QC metrics
  • YFull phylogenetic tree and YBrowse SNP database
  • GRCh37, GRCh38, and T2T reference genomes
  • JSON and TSV output formats

Module inputs

  • VCF file with Y-chromosome variants (+ optional index)
  • YFull tree JSON file
  • YBrowse SNP database CSV file

Module outputs

  • JSON or TSV file with haplogroup classification, confidence scores, and SNP statistics

PR checklist

  • This comment contains a description of changes (with reason).
  • nf-core modules lint yallhap/classify passes (47 tests, 2 warnings about container links pending bioconda build propagation)
  • Local stub test runs successfully
  • Tested locally with real ancient DNA data (Kennewick Man sample → correctly classified as Q-L53)

Notes

The container link warnings are expected - yallhap 0.4.0 is available on bioconda but containers may still be building/propagating.

For ancient DNA samples with low coverage, users should pass --min-depth 1 --min-quality 0 via ext.args.

…assification

Add yallhap/classify module for inferring Y-chromosome haplogroups from VCF files.

Features:
- Supports modern and ancient DNA samples
- Uses YFull phylogenetic tree and YBrowse SNP database
- Outputs JSON or TSV format with confidence scores
- Compatible with GRCh37, GRCh38, and T2T references
Copy link
Contributor

@prototaxites prototaxites left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @trianglegrrl, looks good - a couple of thoughts to start with.

script:
def args = task.ext.args ?: ''
def prefix = task.ext.prefix ?: "${meta.id}"
def format = task.ext.format ?: 'json'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rather than adding a new task.ext directive, could you make this an input to the module (val format) instead?

tag "yallhap"
tag "yallhap/classify"

test("homo_sapiens - chrY vcf - stub") {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible to write a minimal test that is not a stub?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants