Exporting the reference#
arda export-ref writes arda’s reference — every germline scaffold or segment together with
its FR1–4 / CDR1–3 markup — to stdout or to a file. The reference is arda’s most valuable
offline artifact: an in-frame V×J germline set carrying IgBLAST-quality region coordinates. Until
this command existed it was reachable only by hand-joining the build’s TSVs against its FASTAs.
arda export-ref --kind scaffolds --format tsv --locus TRB -o trb_scaffolds.tsv
Note
Coordinates are 1-based CLOSED — the AIRR convention, and also GFF3’s, so GFF3 output
passes coordinates through unchanged. fwr1_start = 1 is the first base and fwr1_end
is the last base of FWR1, not one past it. An empty region pair means the record does not
carry that region at all, which is not the same as a zero-length one.
The three kinds#
|
records |
what it is |
|---|---|---|
|
15,414 |
The V×J (and J+C) reference the mapper aligns reads against. One record per germline combination, with a padded, in-frame V→J junction region. |
|
924 |
The collapsed per-allele V / J / C reference the two-pass search nominates from. 775 V, 124 J, 25 C targets. |
|
1,240 |
The per-allele CDR3 anchor table: |
Counts are for human, --seqtype nt. Mouse gives 19,010 scaffolds; --seqtype aa gives
15,069 for human.
The four formats#
|
output |
|---|---|
|
Sequence plus every region as its own start / end / seq column triple. A leading |
|
One record per scaffold or segment, with locus and gene calls in the description line. |
|
Regions as features on each sequence. GFF3 is 1-based closed like arda, so coordinates are unchanged. |
|
The same rows shaped as an AIRR Rearrangement, so a scaffold can be fed straight into anything that already reads arda’s own output. |
Warning
--kind anchors supports --format tsv only. It is a per-allele table with no
sequence of its own, so the other three shapes have nothing to describe; asking for one
raises rather than writing an empty file.
Other options: --organism (default human), --seqtype (nt or aa), --locus
(comma-separated, e.g. TRB,IGH; default all loci), and -o/--output (default stdout).
The [arda] exported N ... record(s) progress line goes to stderr, so piping stdout stays
clean.
Worked examples#
Scaffolds as TSV#
arda export-ref --kind scaffolds --format tsv --locus TRB
# arda reference export (nt); coordinates are 1-based CLOSED (AIRR/GFF3 convention), an empty region means the record does not carry it
sequence_id locus v_call j_call c_call productive junction junction_aa sequence_length ...
TRB_0 TRB TRBV5-1*01 TRBJ2-5*01 T CASSLXXXXQETQYF 343 ...
Then fwr1_start/fwr1_end/fwr1_seq … fwr4_start/fwr4_end/fwr4_seq. For
TRB_0 the region coordinates are FWR1 1–78, CDR1 79–93, FWR2 94–144, CDR2 145–162, FWR3
163–273, CDR3 274–312, FWR4 313–342.
The X runs in junction_aa are the padded V→J span: a scaffold is a germline
combination, not an observed rearrangement, so the untemplated N/P region has no sequence to
carry.
Scaffolds as FASTA#
arda export-ref --kind scaffolds --format fasta --locus TRB
>TRB_0 locus=TRB TRBV5-1*01|TRBJ2-5*01
AAGGCTGGAGTCACTCAAACTCCAAGATATCTGATCAAAACGAGAGGACAGCAAGTGACA
CTGAGCTGCTCCCCTATCTCTGGGCATAGGAGTGTATCCTGGTACCAACAGACCCCAGGA
CAGGGCCTTCAGTTCCTCTTTGAATACTTCAGTGAGACACAGAGAAACAAAGGAAACTTC
The description line carries the locus and the V|J pair, so the FASTA is self-describing
without the markup table beside it.
Scaffolds as GFF3#
arda export-ref --kind scaffolds --format gff3 --locus TRB
##gff-version 3
##sequence-region TRB_0 1 343
TRB_0 arda region 1 78 . + . ID=TRB_0:fwr1;Name=FWR1;locus=TRB
TRB_0 arda region 79 93 . + . ID=TRB_0:cdr1;Name=CDR1;locus=TRB
TRB_0 arda region 94 144 . + . ID=TRB_0:fwr2;Name=FWR2;locus=TRB
TRB_0 arda region 145 162 . + . ID=TRB_0:cdr2;Name=CDR2;locus=TRB
TRB_0 arda region 163 273 . + . ID=TRB_0:fwr3;Name=FWR3;locus=TRB
TRB_0 arda region 274 312 . + . ID=TRB_0:cdr3;Name=CDR3;locus=TRB
TRB_0 arda region 313 342 . + . ID=TRB_0:fwr4;Name=FWR4;locus=TRB
Pair it with the FASTA export of the same --kind/--locus and any genome browser or
bedtools-style toolchain can work against the germline directly.
Scaffolds as AIRR#
arda export-ref --kind scaffolds --format airr --locus TRB -o trb_ref.airr.tsv
The rows carry the AIRR Rearrangement fields arda emits for real reads — sequence_id,
sequence, locus, v_call/d_call/d2_call/j_call/c_call, c_class,
rev_comp, productive, stop_codon, vj_in_frame, v_identity,
sequence_alignment, germline_alignment, the per-segment CIGARs, and the mmseqs2_*
alignment columns. A germline scaffold can therefore be fed into any consumer of arda’s own
output — useful as a positive control, since a scaffold aligned against itself should annotate
perfectly.
Segments#
arda export-ref --kind segments --format tsv --locus IGH
sequence_id locus v_call j_call c_call ... sequence_length
V|IGHV1-18*01 IGH IGHV1-18*01 ... 296
V|IGHV1-18*03 IGH IGHV1-18*03 ... 296
Segment ids are prefixed by kind: V|, J|, C|. A V segment carries FWR1–FWR3 in full
plus the CDR3 prefix it templates — for V|IGHV1-18*01 that is FWR1 1–75, CDR1 76–99, FWR2
100–150, CDR2 151–174, FWR3 175–288, CDR3 289–296. The eight CDR3 bases are the germline
contribution up to Cys104; everything 3′ of that is recombination and belongs to no segment.
Anchors#
arda export-ref --kind anchors --format tsv --locus TRA
locus segment allele functionality anchor_nt partial_nt templated_aa germline_nt status source
TRA V TRAV1-1*01 F 261 2 CAVR TGCGCTGTGAGAGA ok ndm
TRA V TRAV1-2*02 F -1 0 no_anchor no_anchor
TRA J TRAJ10*01 F 30 0 ILTGGGNKLTF ATACTCACGGGAGGAGGAAACAAACTCACCTTT ok aux
anchor_nt is the 0-based offset of the anchor codon within the germline segment, and
partial_nt how many bases of a split codon precede it. status = no_anchor (with
anchor_nt = -1) marks an allele whose anchor could not be placed — it is reported rather
than silently dropped, because an unanchorable allele is a real gap in the reference vocabulary
and a consumer may need to know which genes it affects.
Note
Read anchor_nt from this table rather than re-deriving the anchor with a [FW]GXG
motif search. A motif check is not an anchor: TRAJ35*01 is a functional gene whose anchor
codon decodes Cys (TGC), not [FW], and a motif-based scan silently deletes it.
Reproducibility#
The export is deterministic. Where IMGT ships two accessions under one allele name, the anchor
table can carry two rows for the same key with different templated_aa and germline_nt.
These are resolved by an explicit rule — prefer status = ok, then the row that templates
more junction, then the sequence itself as a final tie-break — and the choice is logged to
stderr rather than made silently:
cdr3_anchors.tsv has conflicting rows for V IGKV10-96*01 in mouse; keeping status=ok
germline_nt=TGCCAACAGGGTAGTACGCTTCCTCC (IMGT ships two accessions under one allele name)
Three mouse alleles are affected (IGKV10-96*01, IGLV2*01, IGLV3*01). The loader used
to be last-wins, so the winner depended on row order and two builds of the same reference could
disagree about which germline the Cys104 gate scored against.