Skip to content

6. Reconcile

Everything so far has produced the inputs. helixforge reconcile now runs PREP → MIKADO → RECONCILE → OUTPUT: it prepares Mikado inputs, reconciles Mikado loci against the Helixer gene set (rescuing silent genes, stabilising IDs, calling isoforms), applies the structural codon gate, and writes the tiered annotation.

This is the exact script the maize run used, submitted once per chromosome with sbatch reconcile.sh <chr>:

#!/bin/bash
chr=$1
prefix=testing-4_"${chr}"
time apptainer exec helixforge.sif helixforge reconcile \
--genome genome/Zm-B73-REFERENCE-NAM-5.0.fa \
--helixer helixer_output/Zea-mays-subsp-mays-B73_helixer.gff3 \
--helixer-h5 helixer_output/Zea-mays-subsp-mays-B73_predictions.h5 \
--stringtie-list stringtie.fofn \
--bam-list bam.fofn \
--star-sj-list sj.fofn \
--miniprot Zm-B73-sw-plants-miniprot.gff3 \
--protein-db swissprot_plants/uniprot_sprot_plants.fasta \
--no-functional-annotation \
--scoring-profile permissive \
--region "${chr}" \
--trace-primary \
--threads $SLURM_CPUS_ON_NODE \
--output-prefix "${prefix}"

Submit it for each of the ten maize chromosomes:

Terminal window
for chr in chr1 chr2 chr3 chr4 chr5 chr6 chr7 chr8 chr9 chr10; do
sbatch reconcile.sh "${chr}"
done

Each links to its entry in the reconcile CLI reference.

FlagValueRole
--genomegenome/Zm-B73-REFERENCE-NAM-5.0.faReference FASTA (required).
--helixerhelixer_output/…_helixer.gff3Helixer GFF3, the backbone gene set (required).
--helixer-h5helixer_output/…_predictions.h5Per-base confidence; _input.h5 sibling auto-detected.
--stringtie-liststringtie.fofn21 StringTie GTFs, transcript evidence.
--bam-listbam.fofn21 STAR BAMs, read coverage.
--star-sj-listsj.fofn21 SJ.out.tab, splice junctions.
--miniprotZm-B73-sw-plants-miniprot.gff3Backstop CDS projection only (does not enable Mikado).
--protein-dbswissprot_plants/uniprot_sprot_plants.fastaDIAMOND homology, with StringTie, enables Mikado + isoform discovery.
FlagEffect
--no-functional-annotationSkip the opt-in InterProScan/eggNOG hook (off by default; stated explicitly here).
--scoring-profile permissiveUse the permissive Mikado scoring template instead of strict.
--region "${chr}"Restrict the pass to one seqid; this is what makes the job per-chromosome.
--trace-primaryElect the canonical/primary isoform per gene by TRaCE ranked-choice voting instead of top combined_score.
--threads$SLURM_CPUS_ON_NODE, worker threads from the allocation.
--output-prefixOutput stem, here testing-4_<chr>.

Rather than hand-managing per-chromosome jobs, reconcile can chunk the genome into gene-safe pieces, run them, and aggregate into one verified annotation with a run manifest. Chunking changes memory/speed, not the result. Discovered from reconcile --help: --scatter off|auto|<N> and --hpc local|slurm|hypershell.

Emit a Slurm array (submit it, then aggregate):

Terminal window
apptainer exec helixforge.sif helixforge reconcile \
--genome genome/Zm-B73-REFERENCE-NAM-5.0.fa \
--helixer helixer_output/Zea-mays-subsp-mays-B73_helixer.gff3 \
--helixer-h5 helixer_output/Zea-mays-subsp-mays-B73_predictions.h5 \
--stringtie-list stringtie.fofn \
--bam-list bam.fofn \
--star-sj-list sj.fofn \
--miniprot Zm-B73-sw-plants-miniprot.gff3 \
--protein-db swissprot_plants/uniprot_sprot_plants.fasta \
--no-functional-annotation \
--scoring-profile permissive \
--trace-primary \
--scatter 64 --hpc slurm \
--output-prefix Zm-B73-helixforge

Note there is no --region in the scatter runs: --scatter partitions the whole genome itself. For a fully scheduler-driven scatter-gather you can also drive the parallel plantasksaggregate primitives directly.

Next: read the outputs →