Commit e6b51cf0 authored by Marc Duez's avatar Marc Duez
Browse files
parents c29cb867 9a578a93
# 'Undefined name' for web2py globals 'db', 'auth', 'request'
pyflakes:
disable:
- F821
using namespace std;
#include <map>
#include <string>
#include <fstream>
......
......@@ -79,10 +79,6 @@ bool Segmenter::isDSegmented() const {
return dSegmented;
}
bool KmerSegmenter::isDetected() const {
return detected;
}
// Chevauchement
string Segmenter::removeChevauchement()
......@@ -149,9 +145,8 @@ bool Segmenter::finishSegmentationD()
string Segmenter::getInfoLine() const
{
string s = ">" ;
string s = "" ;
s += label + " " ;
s += (segmented ? "" : "! ") + info ;
s += " " + info_extra ;
s += " " + segmented_germline->code ;
......@@ -168,8 +163,25 @@ string Segmenter::getInfoLine() const
return s ;
}
string KmerSegmenter::getInfoLineWithAffects() const
{
stringstream ss;
ss << "# "
<< right << setw(3) << score << " "
<< left << setw(30)
<< getInfoLine() ;
if (getSegmentationStatus() != UNSEG_TOO_SHORT)
ss << getKmerAffectAnalyser()->toString();
return ss.str();
}
ostream &operator<<(ostream &out, const Segmenter &s)
{
out << ">" << s.label << " " ;
out << s.getInfoLine() << endl;
if (s.segmented)
......@@ -191,15 +203,15 @@ ostream &operator<<(ostream &out, const Segmenter &s)
KmerSegmenter::KmerSegmenter() { kaa = 0 ; }
KmerSegmenter::KmerSegmenter(Sequence seq, Germline *germline, int multiplier)
KmerSegmenter::KmerSegmenter(Sequence seq, Germline *germline, double threshold, int multiplier)
{
label = seq.label ;
sequence = seq.sequence ;
info = "" ;
info_extra = "seed";
detected = false ;
segmented = false;
segmented_germline = germline ;
system = germline->code; // useful ?
reversed = false;
Dend=0;
because = NOT_PROCESSED ; // Cause of unsegmentation
......@@ -233,6 +245,8 @@ KmerSegmenter::KmerSegmenter(Sequence seq, Germline *germline, int multiplier)
}
}
score = nb_strand[0] + nb_strand[1] ; // Used only for non-segmented germlines
KmerAffect before, after;
if (!strcmp(germline->code.c_str(), PSEUDO_GERMLINE_MAX12))
......@@ -252,13 +266,10 @@ KmerSegmenter::KmerSegmenter(Sequence seq, Germline *germline, int multiplier)
}
strand = nb_strand[0] > nb_strand[1] ? -1 : 1 ;
computeSegmentation(strand, max12.first, max12.second, multiplier);
if (!detected)
because = UNSEG_TOO_FEW_ZERO ;
computeSegmentation(strand, max12.first, max12.second, germline->delta_min, germline->delta_max, threshold, multiplier);
// The pseudo-germline should never take precedence over the regular germlines
score = 1 ;
evalue = 1.0 ;
}
else
......@@ -283,41 +294,9 @@ KmerSegmenter::KmerSegmenter(Sequence seq, Germline *germline, int multiplier)
return ;
}
computeSegmentation(strand, before, after, multiplier);
computeSegmentation(strand, before, after, germline->delta_min, germline->delta_max, threshold, multiplier);
} // endif Pseudo-germline
if (! because)
{
// Now we check the delta between Vend and right
if (Jstart - Vend < germline->delta_min)
{
because = UNSEG_BAD_DELTA_MIN ;
}
if (Jstart - Vend > germline->delta_max)
{
because = UNSEG_BAD_DELTA_MAX ;
}
}
if (because == NOT_PROCESSED)
{
// Yes, it is segmented
segmented = true;
reversed = (strand == -1);
because = reversed ? SEG_MINUS : SEG_PLUS ;
info = string_of_int(Vend + FIRST_POS) + " " + string_of_int(Jstart + FIRST_POS) ;
// removeChevauchement is called once info was already computed: it is only to output info_extra
info_extra += removeChevauchement();
finishSegmentation();
system = germline->code;
return ;
}
}
......@@ -329,7 +308,8 @@ KmerSegmenter::~KmerSegmenter() {
KmerMultiSegmenter::KmerMultiSegmenter(Sequence seq, MultiGermline *multigermline, ostream *out_unsegmented,
double threshold, int nb_reads_for_evalue)
{
int best_score_seg = 0 ; // Best score, segmented sequences
bool found_seg = false ; // Found a segmentation
double best_evalue_seg = NO_LIMIT_VALUE ; // Best evalue, segmented sequences
int best_score_unseg = 0 ; // Best score, unsegmented sequences
the_kseg = NULL;
multi_germline = multigermline;
......@@ -343,22 +323,13 @@ KmerMultiSegmenter::KmerMultiSegmenter(Sequence seq, MultiGermline *multigermlin
{
Germline *germline = *it ;
KmerSegmenter *kseg = new KmerSegmenter(seq, germline, multiplier);
KmerSegmenter *kseg = new KmerSegmenter(seq, germline, threshold, multiplier);
bool keep_seg = false;
if (out_unsegmented)
{
// Debug, display k-mer affectation and segmentation result for this germline
*out_unsegmented << "#"
<< left << setw(4) << kseg->segmented_germline->code << " "
<< left << setw(20) << segmented_mesg[kseg->getSegmentationStatus()] << " ";
*out_unsegmented << right << setw(3) << kseg->score << " ";
if (kseg->getSegmentationStatus() != UNSEG_TOO_SHORT)
*out_unsegmented << kseg->getKmerAffectAnalyser()->toString();
*out_unsegmented << endl ;
*out_unsegmented << kseg->getInfoLineWithAffects() << endl ;
}
// Always remember the first kseg
......@@ -369,10 +340,12 @@ KmerMultiSegmenter::KmerMultiSegmenter(Sequence seq, MultiGermline *multigermlin
{
// Yes, it is segmented
// Should we keep the kseg ?
if (kseg->score > best_score_seg)
if (!found_seg || (kseg->evalue < best_evalue_seg))
{
keep_seg = true;
best_score_seg = kseg->score ;
best_evalue_seg = kseg->evalue ;
found_seg = true;
}
}
else
......@@ -382,7 +355,7 @@ KmerMultiSegmenter::KmerMultiSegmenter(Sequence seq, MultiGermline *multigermlin
if (kseg->score > best_score_unseg)
{
best_score_unseg = kseg->score ;
if (!best_score_seg)
if (!found_seg)
keep_seg = true;
}
}
......@@ -395,20 +368,6 @@ KmerMultiSegmenter::KmerMultiSegmenter(Sequence seq, MultiGermline *multigermlin
delete kseg;
}
} // end for (Germlines)
// E-value threshold
if (threshold_nb_expected > NO_LIMIT_VALUE)
if (the_kseg->isSegmented()) {
if (the_kseg->evalue > threshold_nb_expected
&& the_kseg->evalue_left <= threshold_nb_expected
&& the_kseg->evalue_right <= threshold_nb_expected) {
the_kseg->setSegmentationStatus(UNSEG_TOO_FEW_ZERO);
} else if (the_kseg->evalue_left > threshold_nb_expected) {
the_kseg->setSegmentationStatus(UNSEG_TOO_FEW_V);
} else if (the_kseg->evalue_right > threshold_nb_expected) {
the_kseg->setSegmentationStatus(UNSEG_TOO_FEW_J);
}
}
}
KmerMultiSegmenter::~KmerMultiSegmenter() {
......@@ -416,7 +375,9 @@ KmerMultiSegmenter::~KmerMultiSegmenter() {
delete the_kseg;
}
void KmerSegmenter::computeSegmentation(int strand, KmerAffect before, KmerAffect after, int multiplier) {
void KmerSegmenter::computeSegmentation(int strand, KmerAffect before, KmerAffect after,
int delta_min, int delta_max,
double threshold, int multiplier) {
// Try to segment, computing 'Vend' and 'Jstart'
// If not segmented, put the cause of unsegmentation in 'because'
......@@ -426,9 +387,28 @@ void KmerSegmenter::computeSegmentation(int strand, KmerAffect before, KmerAffec
pair <double, double> pvalues = kaa->getLeftRightProbabilityAtLeastOrAbove();
evalue_left = pvalues.first * multiplier ;
evalue_right = pvalues.second * multiplier ;
evalue = evalue_left + evalue_right ;
// E-value threshold
if (threshold > NO_LIMIT_VALUE && evalue > threshold) {
// Detail the unsegmentation cause
if (evalue_left > threshold && evalue_right > threshold)
because = UNSEG_TOO_FEW_ZERO ;
else if (evalue_left > threshold)
because = UNSEG_TOO_FEW_V ;
else if (evalue_right > threshold)
because = UNSEG_TOO_FEW_J ;
else // left and right are <= threshold, but their sum is > threshold
because = UNSEG_TOO_FEW_ZERO ;
return ;
}
//
// We labeled it detected if there were both enough affect_5 and enough affect_3
detected = (max.nb_before_left + max.nb_before_right >= DETECT_THRESHOLD)
bool detected = (max.nb_before_left + max.nb_before_right >= DETECT_THRESHOLD)
&& (max.nb_after_left + max.nb_after_right >= DETECT_THRESHOLD);
if (! max.max_found) {
......@@ -441,17 +421,49 @@ void KmerSegmenter::computeSegmentation(int strand, KmerAffect before, KmerAffec
because = detected ? UNSEG_AMBIGUOUS : UNSEG_TOO_FEW_J ;
} else
because = UNSEG_AMBIGUOUS;
} else {
Vend = max.first_pos_max;
Jstart = max.last_pos_max + 1;
if (strand == -1) {
int tmp = sequence.size() - Vend - 1;
Vend = sequence.size() - Jstart - 1;
Jstart = tmp;
}
return ;
}
score = max.nb_before_left + max.nb_before_right + max.nb_after_left + max.nb_after_right;
// There was a good segmentation point
Vend = max.first_pos_max;
Jstart = max.last_pos_max + 1;
if (strand == -1) {
int tmp = sequence.size() - Vend - 1;
Vend = sequence.size() - Jstart - 1;
Jstart = tmp;
}
// Now we check the delta between Vend and right
if (Jstart - Vend < delta_min)
{
because = UNSEG_BAD_DELTA_MIN ;
return ;
}
if (Jstart - Vend > delta_max)
{
because = UNSEG_BAD_DELTA_MAX ;
return ;
}
assert(because == NOT_PROCESSED);
// Yes, it is segmented
segmented = true;
reversed = (strand == -1);
because = reversed ? SEG_MINUS : SEG_PLUS ;
info = string_of_int(Vend + FIRST_POS) + " " + string_of_int(Jstart + FIRST_POS) ;
// removeChevauchement is called once info was already computed: it is only to output info_extra
info_extra += removeChevauchement();
finishSegmentation();
return ;
}
KmerAffectAnalyser *KmerSegmenter::getKmerAffectAnalyser() const {
......
......@@ -21,10 +21,8 @@
segment to a given strand */
#define DETECT_THRESHOLD 5 /* If the number of both V and J affectations
is above this threshold, then the sequence
will be labeled as 'detected', and, if it
not segmented, the remaining germlines will
not be tested */
is above this threshold, then the sequence,
if it not segmented, will be marked as AMBIGUOUS */
#define JSON_REMEMBER_BEST 4 /* The number of V/D/J predictions to keep */
......@@ -57,7 +55,6 @@ const char* const segmented_mesg[] = { "?",
class Segmenter {
protected:
string label;
string sequence;
int Vend, Jstart;
int Dstart, Dend;
......@@ -71,6 +68,7 @@ protected:
public:
Germline *segmented_germline;
string label;
string code;
string code_short;
string code_light;
......@@ -168,13 +166,11 @@ ostream &operator<<(ostream &out, const Segmenter &s);
class KmerSegmenter : public Segmenter
{
private:
int detected;
KmerAffectAnalyser *kaa;
protected:
string affects;
public:
bool isDetected() const;
int score;
int pvalue_left;
int pvalue_right;
......@@ -185,7 +181,7 @@ class KmerSegmenter : public Segmenter
* @param seq: An object read from a FASTA/FASTQ file
* @param germline: the germline
*/
KmerSegmenter(Sequence seq, Germline *germline, int multiplier=1);
KmerSegmenter(Sequence seq, Germline *germline, double threshold = THRESHOLD_NB_EXPECTED, int multiplier=1);
KmerSegmenter(const KmerSegmenter &seg);
......@@ -196,10 +192,13 @@ class KmerSegmenter : public Segmenter
*/
KmerAffectAnalyser *getKmerAffectAnalyser() const;
string getInfoLineWithAffects() const;
void toJsonList(JsonList *seg);
private:
void computeSegmentation(int strand, KmerAffect left, KmerAffect right, int multiplier);
void computeSegmentation(int strand, KmerAffect left, KmerAffect right,
int delta_min, int delta_max,
double threshold, int multiplier);
};
......
......@@ -83,7 +83,7 @@ WindowsStorage *WindowExtractor::extract(OnlineFasta *reads, MultiGermline *mult
// Last line of detailed affects output
if (out_affects) {
*out_affects << "#" << seg->getInfoLine() << endl;
*out_affects << "#>" << seg->label << " " << seg->getInfoLine() << endl << endl;
}
// Progress bar
......
!LAUNCH: ../../vidjil -r 5 -K -g ../../germline ../../data/multi-short.fa ; head -n 15 out/multi-short.affects
!LAUNCH: ../../vidjil -r 5 -K -g ../../germline ../../data/multi-short.fa ; head -n 17 out/multi-short.affects
# Testing .affects output (-K)
$ First sequence (TRA), display sequence
1:TCTTCATTCCTTAGTCGCTCTGATAGTTATGGTTACCTCCTTCTACAGGAGCTCCAGATGAAAGACTCTGCCTCTTACTTCTGCGCTGTGAGAGAGTATGAAAGTATTACCTCCCAGTTGCAATTTGGCAAAGGAACCAGAGTTTCCACTTCTCC
$ First sequence (TRA), count of k-mers
1:.TRA .* 129
1:129 .* TRA
$ First sequence (TRA), segmentation
1:>TRA--V1-1.01--J1.01 .* seed TRA SEG_+
......
!LAUNCH: $LAUNCHER ../../vidjil -k 9 -G ../../germline/IGH -K -c clones ../../data/revcomp.fa ; grep '#IGH' out/revcomp.affects | sed 's/[^X]//g' | awk '{ print length }'
!LAUNCH: $LAUNCHER ../../vidjil -k 9 -G ../../germline/IGH -K -c clones ../../data/revcomp.fa ; grep 'X.X.X' out/revcomp.affects | sed 's/[^X]//g' | awk '{ print length }'
$ Segments both reads, normal and reverse
1:junction detected in 2 reads
......
>__TRG_UNSEG
>___UNSEG
GGTAGTAGCAAATATTCAAACGAGAACTTTGAAGGCCGAAGTGGAGAAGGCTTCCATGTGAACAGCAGTTGAACATGGGTCAGTCGGTCCTGAGAGA
>seq-317-1__TRG_UNSEG
>seq-317-1__UNSEG
ATGAAGTTTTTTTGATGGCTTGAGATGGCTCACAAATTTTGATTTTTTTTTCTTCCTTGTGCTCCCTTTTTTTCTCCTTGCTTTTCCAGTTAACATCTATATTCACATGTAATCTTGTTTTCTCTTCACATTCACTGAGTTGTTCAGGCT
>seq-317-2__TRD_UNSEG
>seq-317-2__UNSEG
GAAGGAAGAGATTTGAAATAAAGCTTTGGTTTCTGAGGAATGTTGCCGTTTGAGAGATTCAAAAAGAAAGAAGATCCAAATTTCGGGACTGGTGTTTAAATTGTAGTGACAGATTTTGGGGGCCATTAAAGGTATGGGAGTGAAA
>seq-317-3__TRD+_UNSEG
>seq-317-3__UNSEG
ACTAACAGTAACTGCCATTTTTTGTCTGTGATAACAGAGTGATTTGTAAAACAGTGGTTGTTTTTTCATTGTGTTTTCTTCGTGGATTGTTTTTTCTGCGGGTCATATTCATACCTTCTGATGAAGTTGTACAACACCAGCAACATT
>seq-317-4__IGK+_UNSEG
>seq-317-4__UNSEG
AGGTATGGTTGCGCTCAGTATAACAAGTGCTGAACAGAAAGCCAGGAAGGGAGGCGAACACAGCCACTGACCATGTAGCCAAACTGGTGATGACCCCATAAGTCAAGGTCCTTGCCCTCAAGGAAAACACCGCGTGCACAAT
>seq-317-5__IGL_UNSEG
>seq-317-5__UNSEG
GTGCAAGGATCAGAAGATAACGAAACGTCCACTTCCTGAAGGGTGGGAAAAAAAGAAAAAGAAAAAGGAGCCACCCACGCTGGAGATGTCCGTTTTAGATCTTCTTATTTTCTTCCCTTTCGCTTCGGTTTTTCTTCTCGAGGCTCA
>seq-317-6__TRD_UNSEG
>seq-317-6__UNSEG
GGTGTGACCGGGGCTTTGGTGGACCCTATTGTGTTCCTGTTGTTCCTCTGCCCTCGATTCTTAAAGACGATTTCAATGGGAATTTACATCCTGACCTTTGGCCTGAAGTGTATGGTGCAGAGA
>seq-317-7__TRD+_UNSEG
>seq-317-7__UNSEG
GTGGTGGTTCTGGTCCTGTTCAAATACAAGCGGCTCAGGTCCATGACTGATGTGTACCTGCTCAACCTTGCCATCTCGGATCTGCTCTTCGTGTTTTCCCTCCCTTTTTGGGGCTACTATGCAGCAGACCAGTGGGTTTTTGGGCTAGGTC
>seq-317-8__TRD+_UNSEG
>seq-317-8__UNSEG
GTTGCTTAAGATCAGTTGCTTTTATACTCAGAATGGAAATACCTGATCTTGGCTAGCTTTGTTTGTTA
>seq-317-9__IGK+_UNSEG
>seq-317-9__UNSEG
GGGCAGCAGCCCAGTCTTCCTACTGTCTGATTTAATTACAGCGGTTCCTGTGGGAGTGGGGGCTGTTATTCTCTTAAACATTTGCAGCTTGAAACAGTTGAGGAAGCAGCTTTAAAAAAAAAAAATCTCCCTACCCCCAACAA
>seq-317-10__IGH_UNSEG
>seq-317-10__UNSEG
GGGCAGAGAGTGCTGGGCTGAGTCGTATTGCTTTGCTAGACTTCCATAGGAATGGGCTTCTTGCGGCGAGAAAAGGGTGCCCCACCCTCTACTTGGACTACACTACTCTGAAACCTTGTGGCAGAGGCAGAGAAAAATCTGCTTTA
>seq-317-11__TRD+_UNSEG
>seq-317-11__UNSEG
AGCATACTCATCAGGCCAGTATTTGACACATTTACTCTTTCCTCTCTCCGCTTCTTTCATTGTCATGACAATCAGTCTGGAGTTTTGGAAAACCATCCGCCAAAAGTCGTTCACTGTGTTTTGTAGGCAGCCTTGTGTGGCAATGTAAC
>seq-317-12__TRD_UNSEG
>seq-317-12__UNSEG
AGGGAAACCTCAAGTGCTCGCAGAAGCATCGGCAAGTCAGGCGTCCTGTTTCTCGGATGGATACCCATTACCATCTTGGACCTGGAAGAAGTGTTCAGACAAGTCT
>seq-317-13__TRG_UNSEG
>seq-317-13__UNSEG
TGGATTCTGGTTTACAGCAGCTTTACAGTGATAGTTAAATTAACTGGGGCTAGGGGAAGAGCAAGCAAAAAGGGAAGAAGGACTCCTAGGCCCTTTCTAGTAAATCCTTCAGCAACAAGGCTGGCTTGGTGCCCTCCAAGCATCTAATG
>seq-317-14__TRG_UNSEG
>seq-317-14__UNSEG
ACCCTTTACCCTGATGATCTGTATTATATTTTAATGTATATGTGAATATATTGAAAATAATTTGTTTTTTCCTGGTTTTTGTTTGGTTTTCGTTTTGCTTTTAGCCTCTACATGCTAGGATCACAGGAAGACTTTGTAAGGACA
>seq-317-15__IGK_UNSEG
>seq-317-15__UNSEG
CATTTAATCTGATGTGGCATTTTCGTCATCTGAAGCATGAGTGACAAGTTGGGAATGATGTGGTGATTTAGAATGCAGTATTGGCCAAGTCCAAGTTGTCAACTTAAGCGTCTGTTTACCAAAGACCGGGAACAGGGGCCCAAACA
>seq-317-16__TRD+_UNSEG
>seq-317-16__UNSEG
TTTAGTTGTAGATTTCAATGGGATACGATAGGACAGAAAAGATTTTTTAAAAAGCAGAAAGAGTGTTTCATGGTGAAAGTACTGGGGGAGGGTGGACAAAGCATGCACACATGCCAATTTGAAAATCAAGTGTGACTTACCTCACGT
>seq-317-17__IGK+_UNSEG
>seq-317-17__UNSEG
CGGGATAGAGGGCAGTGGCACTATGAAAGTCAGCCATCTGGTGAGGCAGCAGCTGTCCGATGGCGTGGAACACAAGGCCCCCCACACGGAACATGTGCAGCCGTTCTCCCCGCTGAATGATGCTAGCGATTTGCTTCACCTCGTCC
>seq-317-18__IGK+_UNSEG
>seq-317-18__UNSEG
TGTCACCATTCACCTTGGACAGTGGGGCAGATTGGTTCCAATTGGGTTTCTCATCCTTGTCCACCGAAGATCCCTTTGTCACTGCAGCTTCTCTAGTGTCAGCCTCACTGCTGTCCTCCGTGAGGTGACCTTCAAAG
>seq-317-19__IGK+_UNSEG
>seq-317-19__UNSEG
CACCACTTTTAGTACCAACACTCTTGGGTGATTTCATGGACCCTAAAGCAGACCTGACACTGATCCAGATTTGCAGTCCATTTTTAAGGACACCTGTCTTTATTTCCTCAAAGTCAAGCAGCTTTCTCTGGAAAATGAATGCTAATTAGT
>seq-317-20__IGK+_UNSEG
>seq-317-20__UNSEG
AGACAGGATCAGGGACAGTCACATTAAAACACCATAGCACCATTTTATTTAGACTATTTCAATTCATAAAAATGCTTCCTAGTCCATAAAACACACTTCAGTAACAAAAGGAAAGAGATACTGGTTGAGGCACGTCAGGGATATCA
>seq-317-21__IGK+_UNSEG
>seq-317-21__UNSEG
GACCAGGGAGCTTGGTGAGCAGCCGGGGACTCTGGGAAGGGCTGAGAGCCAGCACAGCTGAGTGCTGTTGCTGTTGTTGCTGCTGCTGCTGCTGTTGTTGCTGCTGCTTGTTCCGATATTCTGCCATGAGATTAGTGTGCTCCTTC
>seq-317-22__IGK+_UNSEG
>seq-317-22__UNSEG
GTTTTATATCGTTGTAAAATAATTTTTCTAATTTTTTATAGGCTATGGATGAAATGAATGGCAAAGAAATAGAAGGGGAAGAAATTGAAATAGTCTTAGCCAAGCCACCAGACAAGAAAAGGAAAGAGCGCCAAGCTGCTAGACAGGCCTC
>seq-317-23__TRD_UNSEG
>seq-317-23__UNSEG
TTTTCAATGATCTAGATCAATACTTTGTTTCTCACCCATTTCATAATCAGTTTCTGCTACTCTCCTCATTTTGGGGGGTGTTGTGATCCCTGATTCCATTTCTTGCCTTTTAGGAGCCTTTGTGTCTGATATCAAGTGATCAAAA
>seq-317-24__TRG_UNSEG
>seq-317-24__UNSEG
ACTCCAGTCTGGGTGAAAGAGTGAGACCTTGTCTCAAAAAAGGAAGTGAAAGGTAATTAAAAAAGAACTTACGAAGGAAGGTCTTTGGCAGCTCTCAAGCCCCAGCCTTTCTTTTCTGTGAGTATGACTTCCACATCTGCATGCTGTTT
>seq-317-25__IGK_UNSEG
>seq-317-25__UNSEG
CTCTTTATTTGTCCCCTTGCCTCCCTTTCCAATGGACTATTTTAGAAGAAATGGAGCTGTCACCCACATCAAGATTCAGAACACTGGTGATTACTATGACCTGTATGGAGGGGAGAAATTTGCCACTTTGGCTGAGTTGGTCCAG
>seq-317-26__IGK+_UNSEG
>seq-317-26__UNSEG
GATGTGAAAGAAAGGGCGAAGGGTTTTTTGAGTTTTTGTTTTTGAGGAAGGGGAGTTGGGTACTTCTGCCTCTCCTAGCATGATAGGCATTCTCATAGCCAGGGACAGATTTTCTCCTGCAGCCCAGGGTGCTAAGCAGACATCTCTGGGA
>seq-317-27__IGK_UNSEG
>seq-317-27__UNSEG
CTCCATGGCACGAAAGGTCCTGGCTGTGATGGAGTCTCCTTCCTGAAATCCAATTTGTACCGGTCTCAACAGCAGGTCACTTCACCTGGACCCAGCTGAATCACCAGCTCCTTTTATGATATTTGTGTTTGTTTCACAATTTCTCAAGG
>seq-317-28__TRD+_UNSEG
>seq-317-28__UNSEG
AAGAGAACACACTTACTCTCCACGTCGCGGACACAGACGCCATAGAGGTACACGATGTGTTTGTGGGAGACCTGTCTCATCATGCTGGCTGCCTCGAAGAAGGCCTGTGGGCGAGCAGGACATAGGAATGTC
>seq-317-29__IGK+_UNSEG
>seq-317-29__UNSEG
GTCGGCGGCGTCGGCAGCAGTGTCGACGGCAGCGGCGGCGGCGGGTGGGAAATGGCGGAGTATCTGGCCTCCATCTTCGGCACCGAGAAAGACAAGTGAGTGGGAGCCCCCCGCCGGGGGTTGGGCGCGATCGGGGCGCAGGGTGGTTG
>seq-317-30__TRG_UNSEG
>seq-317-30__UNSEG
TGGTTGCTTGATAGGTAGGTACTCACCTATTCTCACAGATCTCCTTTTGTCGGCCTTGGTTGGGACAACATAAGAAACTCCAGGTTTCATGTCCATGTACTCATTAGTACTATCGCTGCTGGGAGAGATGAAACAAGTCATGAC
>seq-317-31__TRD+_UNSEG
>seq-317-31__UNSEG
TTGTCATAAATGCTTTTTGCTGTCACTCTAGTGGTTACTATCCTCTGCCTTCCTCTCCTCCCCTACTCCCCCAGAGAACCAAGGCGTCTGGGGGATTGACTGGGGGGCAGAGGGGGTTTCCCCAGCAAAATCAAACACCTGTCTCCAGAG
>seq-317-32__IGK+_UNSEG
>seq-317-32__UNSEG
ACAGCTACTATATTAGGAGGGATTCCATTTTCACAATTGCAAAACAGATATTTCAGGAACATGGGCCACAAAATGTACTCCTTTCACAGTGTTCTCCTCTTCTGAACTGTGCAGTTATCTATTAAATTTTC
>seq-317-33__TRD_UNSEG
>seq-317-33__UNSEG
GCACTCTGGGCCCGGACCGCCAACCAGCAGACCTGAACGTCCACATCAGACAGGATGGTTTTTCAATGGGAAGAAAACAAAGATGGCGACAGGAAGGAAACTGAGCAGGGAGGTATTTGTACTTTGGAGGTACAAGGGATCTACCCCA
>seq-317-34__IGK+_UNSEG
>seq-317-34__UNSEG
CTCGCGTTATGTGCGACGAGAACTCGTACCGGTCCTGGCTGTGGTAGCCGCACATGTTGCACTCAAAAGGATCACGGAAGCCGTGGCAGCCCATGTGGATGGTGTACATGACGTGATCCAGGAAGAGCACCCGGCAGTGTTCGCAC
>seq-317-35__TRB_UNSEG
>seq-317-35__UNSEG
CCCTGGGTCCTCCCCACATCCATGGTACTAGGAAGGAGAGTATCAAACCTGTTTGTAGGCTCTGAACCTTATGCTCAGCTTCCTCCAGCTTTGAGGTGGTGGACATCTGTGTCTCCTGCAGCTTTCTGCAAAGGAAGAG
>seq-317-36__IGK+_UNSEG
>seq-317-36__UNSEG
TGACCTTAAGAACTTTGTCTGGTGGCTTTGCTGGAACATTGTCACTGTTTTCACTGTCATGCAGGGAGCCCAGCACTGTGGCCAGGATGGCAGAGACTTCCTTGTCATCATGGAGAAGTGCCAGCAGGGGACTGGGAAAAGCACTCTAC
>seq-317-37__TRG_UNSEG
>seq-317-37__UNSEG
GCTGCTTCTCAGCAATGGCCTGAGAATTCACTTCTGTGCTACTAGTAGATGGAGGATTTGATACCTGTCCTTCAATGCTTACAGCTGGCTGGGAAAGCTGGGCAGAAAAAAAAGGGAAGTAGGTGAGACACACGCAGAGTCTGCCAAC
>seq-317-38__IGK+_UNSEG
>seq-317-38__UNSEG
GTGATAATCTTCATATGCAGTGCTTCTGGAGGCCTGTCTAGCAGCTTGGCGCTCTTTCCTTTTCTTGTCTGGTGCCTTGGCTAAGACTATTTCAAGTTCTTCCCCTTCTGTTTCTTTGCCATTCATTTCATCCATAGCCATAACAG
>seq-317-39__IGK+_UNSEG
>seq-317-39__UNSEG
TGCAGCTTTTGTTTTCTGTATGTTGTTGGGGGATCAACTTTCACACATAGCAAGCACATGGCCTCCCTGATGTCAGGATGCCTTTGTTAGGATCTGTATTTGCCCTTAATTTTGTTGAAATCTTTTTTCCTTCTTCCTCTTGAAAA
>seq-317-40__TRD_UNSEG
>seq-317-40__UNSEG
GAGGGCTGAGCTTCCCCTCAAACCTATCGAACATCTCATTGTGATTGGGGACATTTGACACACAGGTTCCTTGTGCAGCTTCAGAAAAAGAAATAGAGAGGAGAGATGCTTTGTTGGAATCATTCAAAACGAGGTCTATTCAACAC
>seq-317-41__IGK+_UNSEG
>seq-317-41__UNSEG
CACTATAAGACCGACTTCGACAAGAATAAGATCTGGTATGAGCACCGGCTCATTGATGACATGGTGGCTCAGGTCCTCAAGTCTTCGGGTGGCTTTGTGTGGGCCTGCAAGAACTATGACGGAGATGTGCAGTCAGACATC
>seq-317-42__IGL_UNSEG
>seq-317-42__UNSEG
GGACAGACCAGCCTCCATCCACAGCTCCCTTTAGGGCACCAAAAACTTTATTGCCAGCGGCAGTTCTGGCAAGCTCTGCATCCAAAGAGTAGACAAAGGCACCCAGCTGACCATCTATGCTCTCCACACTGTATTCATCGCCAGTC
>seq-317-43__TRD_UNSEG
>seq-317-43__UNSEG
ATCCAGGACTGCTCTGTTGGGCCTGGCTGGCCATGACTTGACCTGGGCCACCAACTCCCATATTGAGGTTAGGGGAACTACCAGATCGCAGCAATTCTGACAGCTGTTTATGTTTAGAAGCTGCATCTTGTACC
>seq-317-44__TRA_UNSEG
>seq-317-44__UNSEG
GTACTAGACAGTTTCATCAAAACCAGTGCAACAGGTGGCTTGGGATCAATAAAAGCTGAGGTGATGGCAGATACTGCTGTAGCTTTGGCTTCTGGAAATGTGAAATTGGTTTCAAGCAAGGTAATCACTTTTCTTTTGCCTTCTGTACTAT
>seq-317-45__TRD_UNSEG
>seq-317-45__UNSEG
AGCGAGAGTCCCTGCAGTCCCTTTCGACTTGCATTTTTGCAGGAGCAGTATCATGAAGCCTAAACGCGATGGATATATGTTTTTGAAGGCAGAAAGCAAAATTATGTTTGCCACTTTGCAAAGGAGCTCACTGTGGTGTCTGTGTTCC
>seq-317-46__IGK+_UNSEG
>seq-317-46__UNSEG
ACTTGAAGGCATCACTTTTAAGAAAGCTTACAGTTGGGCCCTGTACCATCCCAAGTCCTTTGTAGCTCCTCTTGAACATGTTTGCCATACTTTTAAAAGGGTAGTTGAATAAATAGCATCACCATTCTTTGCTGTGGCACAGG
>seq-317-47__IGH_UNSEG
>seq-317-47__UNSEG
ATCCAAGAGTAGCGCTCATGTTTTTTGACTCAAGAAAATAGGAAGTTTACTAACTGGCTTCCAGGAAAGGCCAAGGAGAGAAAGCCAATGGGAAGGAGGGTGGGGCAGAGGGACCCACACCAGGAAACCGCTGGCAGGTGGGGGATGGGCC
>seq-317-48__TRG_UNSEG
>seq-317-48__UNSEG
GCATTACCTTGCCTATTTTTAATATTATTAAAGCCTTTCTCCTTCAGTAGTCTATTTTCTTAGAATAACAACTCTTTTATCTATTCTGAACTCTATTTTTTTTCTTTTTTAAGAGACAAGGTTTTGCTCTGTTGCCCAGCTTGGACTCGAA
>seq-317-49__TRD_UNSEG
>seq-317-49__UNSEG
AAAAAAGCACAAAAATGGTCGGTGGGGAACCATATAACAAAACTACATCTCAGGCAGCTCTTTCTCAAGGAAGATTCTAAGATTTTATTATGTGGCTAATTCTAAATTGGAAATGGAACATGCTGGTATGTGAAGCAATTGGTGCTAGGA
>seq-317-50__IGL_UNSEG