Skip to content

Commit

Permalink
Merge pull request #1258 from nextstrain/feat/aa-ancestral
Browse files Browse the repository at this point in the history
feat: allow reconstruction of amino acid sequences
  • Loading branch information
huddlej committed Aug 11, 2023
2 parents c4d07c7 + 7cfbd9b commit 8bc8b0d
Show file tree
Hide file tree
Showing 29 changed files with 3,779 additions and 667 deletions.
6 changes: 6 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@

## __NEXT__

### Features

* ancestral: add functionality to reconstruct ancestral amino acid sequences and add inferred mutations to the `node_data_json` with output equivalent to `augur translate`. `ancestral` now takes an annotation (`--annotation`), a list of genes (`--genes`), and a file name pattern for amino acid alignments (`--translations`). Mutations for each of these genes will be inferred and added to the output JSON to each node as a list at `['aa_muts'][gene]`. The annotations will be added to the `annotation` field in the output JSON. Inferred amino acids sequences can be saved with the new `--output-translations` argument. [#1258][] (@rneher, @huddlej)
* ancestral: add the ability to report mutations relative to a sequence other than the inferred root of the tree. This sequence can be specified via `--root-sequence` and difference between this sequence and the inferred root of the tree will be added as mutations to the root node for nucleotides and amino acids. All differences between the specified `root-sequence` and the inferred sequence of the root node of the tree will be added as mutations to the root node. This was previously already possible for `vcf` input via `--vcf-reference`. [#1258][] (@rneher)

[#1258]: https://github.com/nextstrain/augur/pull/1258

## 22.2.0 (31 July 2023)

Expand Down
237 changes: 177 additions & 60 deletions augur/ancestral.py

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion tests/builds/zika/results/nt_muts.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
"nuc": {
"end": 10769,
"start": 1,
"strand": "+"
"strand": "+",
"type": "source"
}
},
"generated_by": {
Expand Down
62 changes: 0 additions & 62 deletions tests/functional/ancestral.t

This file was deleted.

543 changes: 0 additions & 543 deletions tests/functional/ancestral/aligned.fasta

This file was deleted.

1 change: 1 addition & 0 deletions tests/functional/ancestral/cram/_setup.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export AUGUR="${AUGUR:-$TESTDIR/../../../../bin/augur}"
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
Setup

$ source "$TESTDIR"/_setup.sh

Infer ancestral sequences for the given tree and alignment.
The default is to infer ambiguous bases, so there should not be N bases in the inferred output sequences.

$ ${AUGUR} ancestral \
> --tree $TESTDIR/../data/tree.nwk \
> --alignment $TESTDIR/../data/aligned.fasta \
> --output-node-data "$CRAMTMP/$TESTFILE/ancestral_mutations.json" \
> --output-sequences "$CRAMTMP/$TESTFILE/ancestral_sequences.fasta" > /dev/null

$ grep "^N" "$CRAMTMP/$TESTFILE/ancestral_sequences.fasta"
[1]

Check that the reference length was correctly exported as the nuc annotation

$ grep -A 6 'annotations' "$CRAMTMP/$TESTFILE/ancestral_mutations.json"
"annotations": {
"nuc": {
"end": 10769,
"start": 1,
"strand": "+",
"type": "source"
}
16 changes: 16 additions & 0 deletions tests/functional/ancestral/cram/infer-ambiguous-nucleotides.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Setup

$ source "$TESTDIR"/_setup.sh

Infer ancestral sequences for the given tree and alignment, explicitly requesting that ambiguous bases are inferred.
There should not be N bases in the inferred output sequences.

$ ${AUGUR} ancestral \
> --tree $TESTDIR/../data/tree.nwk \
> --alignment $TESTDIR/../data/aligned.fasta \
> --infer-ambiguous \
> --output-node-data "$CRAMTMP/$TESTFILE/ancestral_mutations.json" \
> --output-sequences "$CRAMTMP/$TESTFILE/ancestral_sequences.fasta" > /dev/null

$ grep "^N" "$CRAMTMP/$TESTFILE/ancestral_sequences.fasta"
[1]
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Setup

$ source "$TESTDIR"/_setup.sh

Try to infer ancestral amino acid sequences without all required arguments.
This should fail.

$ ${AUGUR} ancestral \
> --tree $TESTDIR/../data/tree.nwk \
> --alignment $TESTDIR/../data/aligned.fasta \
> --annotation $TESTDIR/../data/zika_outgroup.gb \
> --genes ENV PRO \
> --output-node-data "$CRAMTMP/$TESTFILE/ancestral_mutations.json" > /dev/null
ERROR: For amino acid sequence reconstruction, you must provide an annotation file, a list of genes, and a template path to amino acid sequences.
[2]
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
Setup

$ source "$TESTDIR"/_setup.sh

Infer ancestral nucleotide and amino acid sequences using a root sequence that
was used for alignment. This additional argument allows the ancestral command to
assign mutations on the branch leading to the inferred root (differences between
the "root" used as an alignment reference and the inferred most recent common
ancestor).

$ ${AUGUR} ancestral \
> --tree $TESTDIR/../data/tree.nwk \
> --alignment $TESTDIR/../data/aligned.fasta \
> --annotation $TESTDIR/../data/zika_outgroup.gb \
> --root-sequence $TESTDIR/../data/zika_outgroup.gb \
> --genes ENV PRO \
> --translations $TESTDIR/../data/aa_sequences_%GENE.fasta \
> --output-node-data "$CRAMTMP/$TESTFILE/ancestral_mutations.json" > /dev/null

Check that the reference length was correctly exported as the nuc annotation

$ python3 "$TESTDIR/../../../../scripts/diff_jsons.py" \
> --exclude-regex-paths "['seqid']" -- \
> "$TESTDIR/../data/ancestral_mutations_with_root_sequence.json" \
> "$CRAMTMP/$TESTFILE/ancestral_mutations.json"
{}
27 changes: 27 additions & 0 deletions tests/functional/ancestral/cram/infer-amino-acid-sequences.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
Setup

$ source "$TESTDIR"/_setup.sh

Infer ancestral nucleotide and amino acid sequences.

$ ${AUGUR} ancestral \
> --tree $TESTDIR/../data/tree.nwk \
> --alignment $TESTDIR/../data/aligned.fasta \
> --annotation $TESTDIR/../data/zika_outgroup.gb \
> --genes ENV PRO \
> --translations $TESTDIR/../data/aa_sequences_%GENE.fasta \
> --output-node-data "$CRAMTMP/$TESTFILE/ancestral_mutations.json" \
> --output-sequences "$CRAMTMP/$TESTFILE/ancestral_sequences.fasta" \
> --output-translations "$CRAMTMP/$TESTFILE/ancestral_aa_sequences_%GENE.fasta" > /dev/null

Check that the reference length was correctly exported as the nuc annotation

$ grep -E "\"(ENV|PRO|nuc)\": {" "$CRAMTMP/$TESTFILE/ancestral_mutations.json"
"ENV": {
"PRO": {
"nuc": {

Check that internal nodes have ancestral amino acid sequences.

$ grep "NODE" "$CRAMTMP/$TESTFILE/ancestral_aa_sequences_ENV.fasta" | wc -l
\s*8 (re)
16 changes: 16 additions & 0 deletions tests/functional/ancestral/cram/keep-ambiguous-nucleotides.t
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Setup

$ source "$TESTDIR"/_setup.sh

Infer ancestral sequences for the given tree and alignment, explicitly requesting that ambiguous bases are NOT inferred.
There should be N bases in the inferred output sequences.

$ ${AUGUR} ancestral \
> --tree $TESTDIR/../data/tree.nwk \
> --alignment $TESTDIR/../data/aligned.fasta \
> --keep-ambiguous \
> --output-node-data "$CRAMTMP/$TESTFILE/ancestral_mutations.json" \
> --output-sequences "$CRAMTMP/$TESTFILE/ancestral_sequences.fasta" > /dev/null

$ grep "^N" "$CRAMTMP/$TESTFILE/ancestral_sequences.fasta" | head -n 1
NNNNNNNNNNNNGACAGTTCGAGTTTGAAGCGAAAGCTAGCAACAGTATCAACAGGTTTT
20 changes: 20 additions & 0 deletions tests/functional/ancestral/data/aa_sequences_2K.fasta
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
>BRA/2016/FC_6706
SPQDNQMAIIIMVAVGLLGLITA
>COL/FLR_00008/2015
SPQDNQMAIIIMVAVGLLGLITA
>Colombia/2016/ZC204Se
SPQDNQMAIIIMVAVGLLGLITA
>DOM/2016/BB_0183
SPQDNQMAIIIMVAVGLLGLITA
>EcEs062_16
SPQDNQMAIIIMVAVGLLGLITA
>HND/2016/HU_ME59
SPQDNQMAIIIMVAVGLLGLITA
>PAN/CDC_259359_V1_V3/2015
SPQDNQMAIIIMVAVGLLGLITA
>PRVABC59
SPQDNQMAIIIMVAVGLLGLITA
>VEN/UF_1/2016
SPQDNQMAIIIMVAVGLLGLITA
>ZKC2/2016
SPQDNQMAIIIMVAVGLLGLITA
40 changes: 40 additions & 0 deletions tests/functional/ancestral/data/aa_sequences_CA.fasta
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
>BRA/2016/FC_6706
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGADTSVGIVGLLLTTA
MA
>COL/FLR_00008/2015
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGAETSVGIVGLLLTTA
MA
>Colombia/2016/ZC204Se
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGAETSVGIVGLLLTTA
MA
>DOM/2016/BB_0183
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGADTSVGIVGLLLTTA
MA
>EcEs062_16
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGADTSVGIVGLLLTTA
MA
>HND/2016/HU_ME59
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGADTSVGIVGLLLTTA
MA
>PAN/CDC_259359_V1_V3/2015
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGAETSVGIVGLLLTTA
MA
>PRVABC59
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMETIKKFKKDLAAMLRIINARKEKKRRGADTSVGIVGLLLTTA
MA
>VEN/UF_1/2016
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKDAMEIIKKFKKDLAAMLRIINARKEKKRRGAETSVGIVGLLLTTA
MA
>ZKC2/2016
MKNPKKKSGGFRIVNMLKRGVARVSPFGGLKRLPAGLLLGHGPIRMVLAILAFLRFTAIK
PSLGLINRWGSVGKKEAMEIIKKFKKDLAAMLRIINARKEKKRRGADTNVGIVGLLLTTA
MA
100 changes: 100 additions & 0 deletions tests/functional/ancestral/data/aa_sequences_ENV.fasta
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
>BRA/2016/FC_6706
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>COL/FLR_00008/2015
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>Colombia/2016/ZC204Se
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>DOM/2016/BB_0183
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>EcEs062_16
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>HND/2016/HU_ME59
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>PAN/CDC_259359_V1_V3/2015
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>PRVABC59
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>VEN/UF_1/2016
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGAKR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA
>ZKC2/2016
IRCIGVSNRDFVEGMSGGTWVDVVLEHGGCVTVMAQDKPTVDIELVTTTVSNMAEVRSYC
YEASISDMASDSRCPTQGEAYLDKQSDTQYVCKRTLVDRGWGNGCGLFGKGSLVTCAKFA
CSKKMTGKSIQPENLEYRIMLSVHGSQHSGMIVNDTGHETDENRAKVEITPNSPRAEATL
GGFGSLGLDCEPRTGLDFSDLYYLTMNNKHWLVHKEWFHDIPLPWHAGADTGTPHWNNKE
ALVEFKDAHAKRQTVVVLGSQEGAVHTALAGALEAEMDGAKGRLSSGHLKCRLKMDKLRL
KGVSYSLCTAAFTFTKIPAETLHGTVTVEVQYAGTDGPCKVPAQMAVDMQTLTPVGRLIT
ANPVITESTENSKMMLELDPPFGDSYIVIGVGEKKITHHWHRSGSTIGKAFEATVRGARR
MAVLGDTAWDFGSVGGALNSLGKGIHQIFGAAFKSLFGGMSWFSQILIGTLLMWLGLNTK
NGSISLMCLALGGVLIFLSTAVSA

0 comments on commit 8bc8b0d

Please sign in to comment.