62 vector<string> format_tokens;
64 ITERATE (vector<string>, iter, format_tokens) {
65 _ASSERT(m_FieldMap.count(*iter) > 0);
66 x_AddFieldToShow(m_FieldMap[*iter]);
77 vector<string> format_tokens;
80 if (format_tokens.empty())
83 ITERATE (vector<string>, iter, format_tokens) {
86 else if ((*iter)[0] ==
'-') {
87 string field = (*iter).substr(1);
135 ERR_POST(
Warning <<
"Taxonomy name lookup from taxid requires installation of taxdb database with ftp://ftp.ncbi.nlm.nih.gov/blast/db/taxdb.tar.gz");
141 bool parse_local_ids)
387 list<CRef<CBlast_def_line> >::const_iterator iter = defline.begin();
388 for(; iter != defline.end(); ++iter)
390 if (iter != defline.begin())
393 if((*iter)->IsSetTitle())
395 if((*iter)->GetTitle().empty())
420 if(defline.front()->IsSetTitle())
422 if(defline.front()->GetTitle().empty())
425 m_Ostream << defline.front()->GetTitle();
478 vector<string> title_tokens;
481 if(title_tokens.empty()){
484 id_token = title_tokens[0];
490 id_token = obj_id.
GetStr();
520 vector<CConstRef<objects::CSeq_id> > subject_id_list;
523 subject_id_list.push_back(next_id);
539 vector< CConstRef<CSeq_id> > original_seqids;
542 original_seqids.clear();
544 original_seqids.push_back(*
id);
546 list<CRef<objects::CSeq_id> > next_seqid_list;
554 list<CRef<objects::CSeq_id> > subject_id_list;
557 subject_id_list.push_back(next_id);
570 if(name ==
"unclassified")
586 if((*itr)->IsSetTaxid()) {
650 for (;desc_s; ++desc_s) {
658 for (; desc; ++desc) {
736 tmp = 100.0 *
len/(double) query_len;
747 const int kQueryRow = 0;
748 const int kSubjectRow = 1;
762 int score = 0, sum_n = 0;
763 double bit_score = .0, evalue = .0;
764 list<TGi> use_this_gi;
766 num_ident, use_this_gi);
770 bool bioseqs_found =
true;
787 list<CRef<CSeq_id> > query_ids;
790 query_ids.push_back(
id);
792 bioseqs_found =
false;
827 if(setSubjectIds || setSubjectTaxInfo || setSubjectTaxInfoAll || setSubjectTitle ||
838 if(setSubjectIds || setSubjectTaxInfo || setSubjectTitle || setSubjectTaxInfoAll) {
844 if(setSubjectTaxInfoAll) {
847 if(setSubjectTaxInfo) {
850 if(setSubjectTitle) {
858 list<CRef<CSeq_id> > subject_ids;
861 subject_ids.push_back(
id);
863 bioseqs_found =
false;
916 if (query_is_na && subject_is_na) {
920 finalAln = densegAln;
954 int align_length = 0, num_gaps = 0, num_gap_opens = 0;
965 int num_positives = 0;
989 string btop_string =
"";
997 for (
unsigned int i = 0;
1005 if(num_matches > 0) {
1011 if (matrix && !matrix->
GetData().empty() &&
1018 if (num_matches > 0) {
1025 int q_start = 0, q_end = 0, s_start = 0, s_end = 0;
1049 s_start = alnVec->
GetSeqStop(kSubjectRow) + 1;
1065 int query_frame = 1, subject_frame = 1;
1082 if ((s_start - s_end) > 0 ) {
1087 SetCounts(num_ident, align_length, num_gaps, num_gap_opens, num_positives,
1088 query_frame, subject_frame);
1175 m_Ostream <<
"query/sbjct frames";
break;
1185 m_Ostream <<
"subject sci names";
break;
1187 m_Ostream <<
"subject com names";
break;
1189 m_Ostream <<
"subject blast names";
break;
1191 m_Ostream <<
"subject super kingdoms";
break;
1197 m_Ostream <<
"subject com names";
break;
1199 m_Ostream <<
"subject blast name";
break;
1201 m_Ostream <<
"subject super kingdom";
break;
1209 m_Ostream <<
"% query coverage per subject";
break;
1211 m_Ostream <<
"% query coverage per uniq subject";
break;
1213 m_Ostream <<
"% query coverage per hsp";
break;
1229 unsigned int iteration ,
1236 int num_hits = align_set->
Get().size();
1237 if (num_hits != 0) {
1240 m_Ostream <<
"# " << num_hits <<
" hits found" <<
"\n";
1249 unsigned int iteration,
1256 m_Ostream <<
"# Iteration: " << iteration <<
"\n";
1258 const size_t kLineLength(0);
1259 const bool kHtmlFormat(
false);
1260 const bool kTabularFormat(
true);
1266 kTabularFormat, rid);
1275 kHtmlFormat, kTabularFormat);
1282 m_Ostream <<
"# BLAST processed " << num_queries <<
" queries\n";
1288 string total_bit_string, raw_score_string;
1291 m_BitScore, total_bit_string, raw_score_string);
1293 if ((evalue >= 1.0e-180) && (evalue < 0.0009)){
1315 int positives,
int query_frame,
int subject_frame)
1341 list<string> field_names;
1345 field_names.push_back((*iter).first);
1361 list<ETabularField>::iterator iter;
1481 const string& program_version,
1484 const string& domain_sys,
1486 unsigned int iteration ,
1491 m_Ostream <<
"# Domain classification requested: " << domain_sys << endl;
1495 m_Ostream <<
"# Hit table (the first field indicates the chain type of the hit)" << endl;
1496 int num_hits = align_set->
Get().size();
1497 if (num_hits != 0) {
1500 m_Ostream <<
"# " << num_hits <<
" hits found" <<
"\n";
1507 string& junction_seq,
const string& query_seq) {
1510 if (right_start <= left_stop) {
1511 np_len = left_stop - right_start + 1;
1512 np_start = right_start;
1514 junction_seq =
"(" + query_seq.substr(np_start, np_len) +
")";
1518 np_len = right_start - left_stop - 1;
1519 junction_len = np_len;
1521 np_start = left_stop + 1;
1522 junction_seq = query_seq.substr(np_start, np_len);
1548 if ((
int)qrange.
GetToOpen() < query_len) {
1561 if ((
int)srange.
GetToOpen() < subject_len) {
1566 for (
size_t i=0;
i < starts.size();
i+=2) {
1568 if (starts[
i] >= 0 && starts[
i + 1] >= 0) {
1571 else if (starts[
i] < 0) {
1572 if (lens[
i/2] < 10) {
1584 if ((
int)qrange.
GetToOpen() < query_len) {
1597 if ((
int)srange.
GetToOpen() < subject_len) {
1611 static string s_InsertGap(
const string& nuc_without_gap,
const string& nuc,
const string& prot,
char gap_char) {
1613 string new_prot (new_prot_size,
' ');
1616 int total_inserted_gap = 0;
1618 for (
int i = 0;
i < (
int)
nuc.size();
i++) {
1619 if (
nuc[
i] == gap_char) {
1624 int index_new_prot = (
i+1)/3 - 1;
1625 int index_original_prot = index_new_prot - total_inserted_gap;
1627 if (num_gaps == 3) {
1628 if (index_new_prot < (
int)new_prot.size()) {
1629 total_inserted_gap ++;
1631 if (num_bases == 0) {
1632 new_prot[index_new_prot] = gap_char;
1639 }
else if (num_bases == 3) {
1641 index_new_prot -= gap_hold;
1642 if (index_new_prot < (
int)new_prot.size() && index_original_prot < (
int)
prot.size()) {
1643 new_prot[index_new_prot] =
prot[index_original_prot];
1646 for (
int j = 0; j < gap_hold; j++) {
1647 int position = index_new_prot + 1 + j;
1648 if (position < (
int) new_prot.size()) {
1649 new_prot[position] = gap_char;
1658 if ((
int)nuc_without_gap.size()%3 > 0) {
1659 if (
prot.size() > nuc_without_gap.size()/3) {
1661 new_prot[new_prot.size() - 1] =
prot[
prot.size() - 1];
1662 }
else if (new_prot[new_prot.size() - 1] ==
' ') {
1663 new_prot.pop_back();
1670 const string& aligned_query_string,
const string& aligned_germline_string,
1671 string& query_translation_string,
1672 string& germline_translation_string){
1674 if (annot->m_FrameInfo[0] >=0) {
1677 int query_trans_offset = ((alnvec.
GetSeqStart(0) + 3) - annot->m_FrameInfo[0])%3;
1678 int query_trans_start = query_trans_offset > 0?(3 - query_trans_offset):0;
1683 gap_str.push_back(gap_char);
1685 for (
int i = query_trans_start;
i < (
int)aligned_vdj_query.size();
i =
i + 3) {
1688 if (query_aln_pos < (
int)aligned_germline_string.size() &&
1689 query_aln_pos< (
int)aligned_query_string.size() &&
1690 aligned_germline_string[query_aln_pos] != gap_char &&
1691 aligned_query_string[query_aln_pos] != gap_char){
1693 string query_translation_template = aligned_query_string.substr(query_aln_pos);
1698 query_translation_string,
1701 query_translation_string =
s_InsertGap(final_query_translation_template, query_translation_template, query_translation_string, gap_char);
1703 string germline_translation_template = aligned_germline_string.substr(query_aln_pos);
1709 germline_translation_string,
1711 germline_translation_string =
s_InsertGap(final_germline_translation_template, germline_translation_template, germline_translation_string, gap_char);
1745 double identity = 0;
1763 identity = ((double)num_ident)/length;
1766 v_query_alignment =
query;
1767 v_germline_alignment =
subject;
1769 airr_data[
"v_sequence_alignment_aa"], airr_data[
"v_germline_alignment_aa"]);
1774 double identity = 0;
1792 identity = ((double)num_ident)/length;
1795 d_query_alignment =
query;
1796 d_germline_alignment =
subject;
1798 airr_data[
"d_sequence_alignment_aa"], airr_data[
"d_germline_alignment_aa"]);
1804 double identity = 0;
1822 identity = ((double)num_ident)/length;
1825 j_query_alignment =
query;
1826 j_germline_alignment =
subject;
1828 airr_data[
"j_sequence_alignment_aa"], airr_data[
"j_germline_alignment_aa"]);
1833 airr_data[
"v_identity"] = v_identity_str;
1834 airr_data[
"d_identity"] = d_identity_str;
1835 airr_data[
"j_identity"] = j_identity_str;
1838 airr_data[
"v_sequence_alignment"] = v_query_alignment;
1839 airr_data[
"d_sequence_alignment"] = d_query_alignment;
1840 airr_data[
"j_sequence_alignment"] = j_query_alignment;
1841 airr_data[
"v_germline_alignment"] = v_germline_alignment;
1842 airr_data[
"d_germline_alignment"] = d_germline_alignment;
1843 airr_data[
"j_germline_alignment"] = j_germline_alignment;
1858 airr_data[
"sequence_alignment"] = whole_query_alignment;
1870 airr_data[
"germline_alignment"] +=
"N";
1877 airr_data[
"germline_alignment"] += seq.substr(start_pos);
1886 airr_data[
"germline_alignment"] +=
"N";
1893 airr_data[
"germline_alignment"] += seq.substr(start_pos);
1904 airr_data[
"germline_alignment"] +=
"N";
1911 airr_data[
"germline_alignment"] += seq .substr(start_pos);
1921 double identity = 0;
1939 identity = ((double)num_ident)/length;
1942 c_query_alignment =
query;
1943 c_germline_alignment =
subject;
1945 airr_data[
"c_sequence_alignment_aa"], airr_data[
"c_germline_alignment_aa"]);
1947 airr_data[
"c_identity"] = c_identity_str;
1948 airr_data[
"c_sequence_alignment"] = c_query_alignment;
1949 airr_data[
"c_germline_alignment"] = c_germline_alignment;
1953 if (align_d && align_j) {
1957 }
else if (align_j) {
1965 if (align_d && align_j) {
1968 }
else if (align_j) {
1978 airr_data[
"sequence_alignment_aa"], airr_data[
"germline_alignment_aa"]);
1988 {
"VD",
"TRD"}, {
"VA",
"TRA"}, {
"VG",
"TRG"}};
1990 bool found_v =
false;
1991 bool found_d =
false;
1992 bool found_j =
false;
1993 bool found_c =
false;
1999 if (align_result && !align_result.
Empty() && align_result->
IsSet() && align_result->
CanGet()) {
2002 if (annot->m_ChainType[index] ==
"V" && !found_v) {
2006 if (annot->m_ChainType[index] ==
"D" && !found_d) {
2009 temp_align->
Assign(**iter);
2017 if (annot->m_ChainType[index] ==
"J" && !found_j) {
2021 if (annot->m_ChainType[index] ==
"C" && !found_c) {
2032 ITERATE (list<string>, iter, ig_opts->m_AirrField) {
2036 if (align_result && !align_result.
Empty() && align_result->
IsSet() && align_result->
CanGet() && !(align_result->
Get().empty())) {
2039 const list<CRef<CSeq_id> > query_seqid =
GetQueryId();
2044 if (annot->m_FrameInfo[0] >= 0) {
2045 string seq_data(
m_Query, annot->m_FrameInfo[0],
m_Query.length() - annot->m_FrameInfo[0]);
2054 if(locus_name.
find(annot->m_ChainTypeToShow) != locus_name.
end()) {
2055 m_AirrData[
"locus"] = locus_name[annot->m_ChainTypeToShow];
2120 double v_evalue = 0;
2121 double d_evalue = 0;
2122 double j_evalue = 0;
2123 double c_evalue = 0;
2207 if (annot->m_DframeStart > 0 && annot->m_FrameInfo[2] > 0) {
2213 if (annot->m_FrameInfo[2] >= query_d_start) {
2214 int d_frame_used = ((annot->m_FrameInfo[2] - query_d_start)%3 + query_d_frame_start)%3;
2275 if (
m_IgDomains[
i]->name.find(
"FR1") != string::npos) {
2280 if (
m_IgDomains[
i]->name.find(
"CDR1") != string::npos) {
2284 if (
m_IgDomains[
i]->name.find(
"FR2") != string::npos) {
2289 if (
m_IgDomains[
i]->name.find(
"CDR2") != string::npos) {
2293 if (
m_IgDomains[
i]->name.find(
"FR3") != string::npos && annot->m_DomainInfo[9] >=0) {
2318 const list<CRef<CSeq_id> > query_seqid =
GetQueryId();
2335 const string& program_version,
2338 const string& domain_sys,
2340 unsigned int iteration,
2344 bool print_airr_format_header,
2349 if (print_airr_format_header) {
2351 ITERATE(list<string>, iter, ig_opts->m_AirrField) {
2362 ITERATE(list<string>, iter, ig_opts->m_AirrField) {
2376 const string& chain_type,
2377 const string& master_chain_type_to_show,
2390 retval =
SetFields(align, scope, chain_type, master_chain_type_to_show, matrix);
2399 const string& chain_type,
2400 const string& master_chain_type_to_show,
2428 int coding_frame_offset = (
m_Fwr4Start - annot->m_FrameInfo[0])%3;
2430 string fwr4_seq_for_translatioin =
m_Fwr4Seq.substr(coding_frame_offset>0?(3-coding_frame_offset):0);
2442 int coding_frame_offset = (
m_Cdr3Start - annot->m_FrameInfo[0])%3;
2444 string cdr3_seq_for_translatioin =
m_Cdr3Seq.substr(coding_frame_offset>0?(3-coding_frame_offset):0);
2453 (
int)(query_length - airrcdr3start)));
2455 string airr_cdr3_seq_for_translatioin =
m_AirrCdr3Seq.substr(coding_frame_offset>0?(3-coding_frame_offset):0);
2467 static void SetCdrFwrSeq (
const string& nuc_seq,
string& translated_seq,
bool is_first_domain,
int region_start,
int frame_start,
2468 string& next_trans_addition,
bool& next_trans_substract,
string extra_from_next_region) {
2471 if (is_first_domain) {
2473 int coding_frame_offset = ((region_start%3 + 3) - frame_start%3)%3;;
2474 int start_pos = coding_frame_offset>0?(3-coding_frame_offset):0;
2476 if (start_pos < (
int)nuc_seq.size()){
2477 seq_for_translatioin = nuc_seq.substr(start_pos);
2480 seq_for_translatioin = next_trans_addition + nuc_seq;
2483 if (next_trans_substract) {
2484 seq_for_translatioin.erase(0, 1);
2485 next_trans_substract =
false;
2487 int next_trans_offset = seq_for_translatioin.length()%3;
2488 if (next_trans_offset == 2) {
2489 seq_for_translatioin = seq_for_translatioin + extra_from_next_region;;
2490 next_trans_substract =
true;
2491 }
else if (next_trans_offset == 1) {
2492 next_trans_addition = seq_for_translatioin.substr(seq_for_translatioin.length() - next_trans_offset);
2493 seq_for_translatioin = seq_for_translatioin.substr(0, seq_for_translatioin.length() - next_trans_offset);
2511 if (align_result && !align_result.
Empty() && align_result->
IsSet() && align_result->
CanGet()) {
2529 if (annot->m_ChainType[index] ==
"V" || annot->m_ChainType[index] ==
"D" || annot->m_ChainType[index] ==
"J") {
2537 bool is_protein = ig_opts->m_IsProtein;
2542 SetVGene(annot->m_TopGeneIds[0], annot->m_GeneInfo[0], annot->m_GeneInfo[1]);
2543 SetDGene(annot->m_TopGeneIds[1], annot->m_GeneInfo[2], annot->m_GeneInfo[3]);
2544 SetJGene(annot->m_TopGeneIds[2], annot->m_GeneInfo[4], annot->m_GeneInfo[5]);
2545 SetCGene(annot->m_TopGeneIds[3], annot->m_GeneInfo[6], annot->m_GeneInfo[7]);
2550 if (annot->m_FrameInfo[1] >= 0 && annot->m_FrameInfo[2] >= 0) {
2551 int off = annot->m_FrameInfo[1];
2552 int len = annot->m_FrameInfo[2] - off;
2555 if (annot->m_FrameInfo[0] >= 0) {
2556 m_VFrameShift = (annot->m_FrameInfo[1] - annot->m_FrameInfo[0])%3 == 0 ?
"No" :
"Yes";
2559 if (
len % 3 == 0) {
2563 if (seq_trans.find(
'*') != string::npos) {
2579 if (annot->m_FrameInfo[0] >= 0) {
2580 int v_start = annot->m_FrameInfo[0];
2581 int v_j_length =
max(
max(annot->m_GeneInfo[5], annot->m_GeneInfo[3]), annot->m_GeneInfo[1]) - annot->m_FrameInfo[0];
2583 string seq_data(
m_Query, v_start, v_j_length);
2588 if (seq_trans.find(
'*') == string::npos) {
2614 AddIgDomain((ig_opts->m_DomainSystem ==
"kabat")?
"FR1":
"FR1-IMGT",
2615 annot->m_DomainInfo[0], annot->m_DomainInfo[1]+1,
2616 annot->m_DomainInfo_S[0], annot->m_DomainInfo_S[1]+1);
2617 AddIgDomain((ig_opts->m_DomainSystem ==
"kabat")?
"CDR1":
"CDR1-IMGT",
2618 annot->m_DomainInfo[2], annot->m_DomainInfo[3]+1,
2619 annot->m_DomainInfo_S[2], annot->m_DomainInfo_S[3]+1);
2620 AddIgDomain((ig_opts->m_DomainSystem ==
"kabat")?
"FR2":
"FR2-IMGT",
2621 annot->m_DomainInfo[4], annot->m_DomainInfo[5]+1,
2622 annot->m_DomainInfo_S[4], annot->m_DomainInfo_S[5]+1);
2623 AddIgDomain((ig_opts->m_DomainSystem ==
"kabat")?
"CDR2":
"CDR2-IMGT",
2624 annot->m_DomainInfo[6], annot->m_DomainInfo[7]+1,
2625 annot->m_DomainInfo_S[6], annot->m_DomainInfo_S[7]+1);
2626 AddIgDomain((ig_opts->m_DomainSystem ==
"kabat")?
"FR3":
"FR3-IMGT",
2627 annot->m_DomainInfo[8], annot->m_DomainInfo[9]+1,
2628 annot->m_DomainInfo_S[8], annot->m_DomainInfo_S[9]+1);
2629 AddIgDomain((ig_opts->m_DomainSystem ==
"kabat")?
"CDR3 (V gene only)":
"CDR3-IMGT (germline)",
2630 annot->m_DomainInfo[10], annot->m_DomainInfo[11]+1);
2644 bool is_first_domain =
true;
2645 bool next_trans_substract =
false;
2648 if (
m_IgDomains[
i]->name.find(
"FR1") != string::npos) {
2651 next_trans_addition, next_trans_substract,
2654 is_first_domain =
false;
2657 if (
m_IgDomains[
i]->name.find(
"CDR1") != string::npos) {
2660 next_trans_addition, next_trans_substract,
2662 is_first_domain =
false;
2665 if (
m_IgDomains[
i]->name.find(
"FR2") != string::npos) {
2668 next_trans_addition, next_trans_substract,
2670 is_first_domain =
false;
2672 if (
m_IgDomains[
i]->name.find(
"CDR2") != string::npos) {
2676 next_trans_addition, next_trans_substract,
2679 is_first_domain =
false;
2681 if (
m_IgDomains[
i]->name.find(
"FR3") != string::npos) {
2682 if (annot->m_DomainInfo[9] >=0) {
2706 m_Ostream << header <<
"Note that your query represents the minus strand "
2707 <<
"of a V gene and has been converted to the plus strand. "
2708 <<
"The sequence positions refer to the converted sequence. " << endl << endl;
2710 m_Ostream << header <<
"V-(D)-J rearrangement summary for query sequence ";
2715 if (ig_opts->m_Db[4]) {
2718 m_Ostream <<
"Chain type, stop codon, ";
2719 m_Ostream <<
"V-J frame, Productive, Strand, V Frame shift). ";
2720 m_Ostream <<
"Multiple equivalent top matches, if present, are separated by a comma." << endl;
2725 if (ig_opts->m_Db[4]) {
2746 if (!length)
return;
2748 m_Ostream << header <<
"Alignment summary between query and top germline V gene hit ";
2749 m_Ostream <<
"(from, to, length, matches, mismatches, gaps, percent identity)" << endl;
2752 int num_mismatch = 0;
2778 m_Ostream <<
"<br>Note that your query represents the minus strand "
2779 <<
"of a V gene and has been converted to the plus strand. "
2780 <<
"The sequence positions refer to the converted sequence.\n\n";
2782 m_Ostream <<
"<br>V-(D)-J rearrangement summary for query sequence (multiple equivalent top matches, if present, are separated by a comma):\n";
2784 m_Ostream <<
"<tr><td>Top V gene match</td>";
2787 m_Ostream <<
"<td>Top D gene match</td>";
2789 m_Ostream <<
"<td>Top J gene match</td>";
2790 if (ig_opts->m_Db[4]) {
2791 m_Ostream <<
"<td>Top C gene match</td>";
2794 <<
"<td>stop codon</td>"
2795 <<
"<td>V-J frame</td>"
2796 <<
"<td>Productive</td>"
2797 <<
"<td>Strand</td>"
2798 <<
"<td>V frame shift</td></tr>\n";
2806 if (ig_opts->m_Db[4]) {
2822 <<
"</td></tr></table>\n";
2832 if (!length)
return;
2834 m_Ostream <<
"<br>Alignment summary between query and top germline V gene hit:\n";
2836 m_Ostream <<
"<tr><td> </td><td> from </td><td> to </td><td> length </td>"
2837 <<
"<td> matches </td><td> mismatches </td><td> gaps </td>"
2838 <<
"<td> identity(%) </td></tr>\n";
2841 int num_mismatch = 0;
2851 m_Ostream <<
"<tr><td> Total </td><td> </td><td> </td><td> " << length
2852 <<
" </td><td> " << num_match
2853 <<
" </td><td> " << num_mismatch
2854 <<
" </td><td> " << num_gap
2855 <<
" </td><td> " << std::setprecision(3) << num_match*100.0/length
2900 const bool isOverlap = (start > end);
2902 if (start <0 || end <0 || start==end) {
2918 for (
int pos = start; pos < end; ++pos) {
2928 int b0, b1, b2, b3, b4, b5;
2967 m_Ostream <<
"<br>V-(D)-J junction details based on top germline gene matches:\n";
2969 m_Ostream <<
"<tr><td>V region end</td>";
2973 <<
"<td>D region</td>"
2974 <<
"<td>D-J junction*</td>";
2978 m_Ostream <<
"<td>J region start</td></tr>\n<tr>";
2980 m_Ostream << header <<
"V-(D)-J junction details based on top germline gene matches (V end, ";
2984 m_Ostream <<
"J start). Note that possible overlapping nucleotides at VDJ junction (i.e, nucleotides that could be assigned to either rearranging gene) are indicated in parentheses (i.e., (TACT)) but"
2985 <<
" are not included under the V, D, or J gene itself" << endl;
3001 m_Ostream <<
"*: Overlapping nucleotides may exist"
3002 <<
" at V-D-J junction (i.e, nucleotides that could be assigned \nto either rearranging gene). "
3003 <<
" Such nucleotides are indicated inside a parenthesis (i.e., (TACAT))\n"
3004 <<
" but are not included under the V, D or J gene itself.\n";
3011 m_Ostream <<
"Sub-region sequence details:\n";
3013 m_Ostream <<
"<tr><td> </td><td>Nucleotide sequence</td>";
3018 m_Ostream << header <<
"Sub-region sequence details (nucleotide sequence, translation, start, end)" << endl;
3050 int q_pos = 0, s_pos = 0;
3102 << std::setprecision(3)
3118 <<
"<td> " << domain.
start+1 <<
" </td>"
3119 <<
"<td> " << domain.
end <<
" </td>";
3122 <<
"<td> " << domain.
num_match <<
" </td>"
3124 <<
"<td> " << domain.
num_gap <<
" </td>"
3125 <<
"<td> " << std::setprecision(3)
3128 m_Ostream <<
"<td> </td><td> </td><td> </td><td> </td></tr>\n";
User-defined methods of the data storage class.
TSignedSeqPos GetAlnPosFromSeqPos(TNumrow row, TSeqPos seq_pos, ESearchDirection dir=eNone, bool try_reverse_dir=true) const
TSignedSeqPos GetSeqAlnStart(TNumrow row) const
TSeqPos GetSeqStop(TNumrow row) const
TSignedSeqPos GetSeqAlnStop(TNumrow row) const
TSeqPos GetSeqStart(TNumrow row) const
void Add(const CDense_seg &ds, TAddFlags flags=0)
void Merge(TMergeFlags flags=0)
const CDense_seg & GetDenseg(void) const
TResidue GetGapChar(TNumrow row) const
string & GetSeqString(string &buffer, TNumrow row, TSeqPos seq_from, TSeqPos seq_to) const
void SetGapChar(TResidue gap_char)
string & GetWholeAlnSeqString(TNumrow row, string &buffer, TSeqPosList *insert_aln_starts=0, TSeqPosList *insert_starts=0, TSeqPosList *insert_lens=0, unsigned int scrn_width=0, TSeqPosList *scrn_lefts=0, TSeqPosList *scrn_rights=0) const
void SetAaCoding(TCoding coding)
CSeqVector::TResidue TResidue
void SetGenCode(int gen_code, TNumrow row=-1)
Class containing information needed for tabular formatting of BLAST results.
ESeqIdType
In what form should the sequence identifiers be shown?
@ eAccession
Show only best accession.
@ eFullId
Show full seq-id, with multiple ids concatenated.
@ eAccVersion
Show only best accession.version.
list< CRef< objects::CSeq_id > > m_QueryId
List of query ids for this HSP.
string m_BitScore
Bit score of this HSP, in appropriate format.
void x_PrintSubjectTaxIds()
Print subject tax info.
void x_PrintSubjectAccessionVersion(void)
Print subject accession.version.
void x_PrintSubjectBlastName()
void SetParseSubjectDefline(bool val)
Should subject deflien be parsed for id or not?
void x_PrintSubjectSeq(void)
Print aligned part of subject sequence.
void x_PrintQueryLength()
Print the query sequence length.
void x_PrintSubjectCommonName()
void x_PrintSubjectAllAccessions(void)
Print all accessions associated with this subject, separated by ';'.
void x_PrintSubjectSciName()
void x_PrintNumIdentical(void)
Print number of identical matches.
map< string, ETabularField > m_FieldMap
Map of field enum values to field names.
void x_SetTaxInfo(const objects::CBioseq_Handle &handle, const CRef< objects::CBlast_def_line_set > &bdlRef)
void x_PrintSubjectEnd(void)
Print subject end.
pair< string, int > m_QueryCovUniqSubject
void x_PrintSeqalignCoverage()
void x_PrintSubjectTitle()
void x_PrintGapOpenings(void)
Print number of gap openings.
void SetBTOP(string btop_string)
Sets the Blast-traceback-operations string.
void PrintNumProcessed(int num_queries)
Prints number of queries processed.
set< string > m_SubjectSuperKingdoms
void x_PrintSubjectAllSeqIds(void)
Print all Seq-ids associated with this subject, separated by ';'.
int m_AlignLength
Alignment length of this HSP.
set< string > m_SubjectBlastNames
bool m_ParseSubjectDefline
Parse subejct defline?
void x_AddFieldToShow(ETabularField field)
Add a field to the list of fields to show, if it is not yet present in the list of fields.
void x_PrintSubjectTaxId()
void x_PrintSubjectSuperKingdom()
string m_SubjectBlastName
EFieldDelimiter
What delimiter to use between fields in each row of the tabular output.
int m_SubjectStart
Starting offset in subject.
void x_PrintPercentIdentical(void)
Print percent of identical matches.
CBlastTabularInfo(CNcbiOstream &ostr, const string &format=kDfltArgTabularOutputFmt, EFieldDelimiter delim=eTab, bool parse_local_ids=false)
Constructor.
void x_PrintScore(void)
Print raw score.
void x_PrintQueryStart(void)
Print query start.
void x_PrintBitScore(void)
Print bit score.
TSeqPos m_SubjectLength
Length of subject sequence.
void x_PrintGaps(void)
Print total number of gaps.
void x_PrintNumPositives(void)
Print number of positive matches.
int m_SubjectEnd
Ending offset in subject.
string m_SubjectSuperKingdom
string m_SubjectSeq
Aligned part of the subject sequence.
void x_SetTaxInfoAll(const objects::CBioseq_Handle &handle, const CRef< objects::CBlast_def_line_set > &bdlRef)
void SetEndpoints(int q_start, int q_end, int s_start, int s_end)
Set the HSP endpoints.
void SetSubjectId(list< CRef< objects::CSeq_id > > &id)
Set subject id from a objects::CSeq_id.
void x_PrintQuerySeqId(void) const
Print query Seq-id.
void x_SetQueryCovUniqSubject(const objects::CSeq_align &align)
CNcbiOstream & m_Ostream
Stream to write output to.
CRef< CBlast_def_line_set > m_SubjectDefline
void SetParseLocalIds(bool val)
Should local IDs be parsed or not?
void x_PrintSubjectStart(void)
Print subject start.
int m_QueryEnd
Ending offset in query.
int m_SubjectFrame
subject frame
int m_NumGapOpens
Number of gap openings in this HSP.
vector< string > m_SubjectCommonNames
pair< string, int > m_QueryCovSubject
void x_PrintSubjectLength()
Print the subject sequence length.
list< ETabularField > m_FieldsToShow
Which fields to show?
void x_PrintSubjectCommonNames()
virtual void Print(void)
Print one line of tabular output.
void x_PrintSubjectCoverage()
int SetFields(const objects::CSeq_align &sal, objects::CScope &scope, CNcbiMatrix< int > *matrix=0)
Set all member fields, given a Seq-align.
bool m_ParseLocalIds
Should the query deflines be parsed for local IDs?
void PrintHeader(const string &program, const objects::CBioseq &bioseq, const string &dbname, const string &rid=kEmptyStr, unsigned int iteration=numeric_limits< unsigned int >::max(), const objects::CSeq_align_set *align_set=0, CConstRef< objects::CBioseq > subj_bioseq=CConstRef< objects::CBioseq >())
Print the tabular output header.
void x_PrintUniqSubjectCoverage()
void x_PrintEvalue(void)
Print e-value.
void x_PrintMismatches(void)
Print number of mismatches.
void x_PrintSubjectStrand()
void SetNoFetch(bool nofetch)
Avoid fetching sequence (if possible) If the sequence is needed (e.g., will be formatted,...
void x_PrintSubjectAccession(void)
Print subject accession.
list< string > GetAllFieldNames(void)
Return all field names supported in the format string.
void x_PrintPercentPositives()
Print percent positives.
void x_PrintSubjectSeqId(void)
Print subject Seq-id.
vector< list< CRef< objects::CSeq_id > > > m_SubjectIds
All subject sequence ids for this HSP.
string m_FieldDelimiter
Delimiter character for fields to print.
bool GetNoFetch()
Avoid fetch of sequence if true returned.
const list< CRef< CSeq_id > > & GetQueryId() const
Get query seqid list.
set< TTaxId > m_SubjectTaxIds
Blast-traceback-operations.
void x_PrintSubjectSciNames()
bool x_IsFieldRequested(ETabularField field)
int m_NumPositives
Number of positives in this HSP.
void x_PrintField(ETabularField field)
Print the value of a given field.
void x_PrintSubjectSuperKingdoms()
void x_AddDefaultFieldsToShow(void)
Add a default set of fields to show.
void x_PrintSubjectAllGis(void)
Print all gis associated with this subject, separated by ';'.
int m_QueryStart
Starting offset in query.
~CBlastTabularInfo()
Destructor.
void SetQueryId(list< CRef< objects::CSeq_id > > &id)
Set query id from a objects::CSeq_id.
void x_PrintQuerySeq(void)
Print aligned part of query sequence.
void x_PrintSubjectFrame()
void x_PrintFrames()
Print frames.
void x_ResetFields(void)
Reset values of all fields.
void x_PrintQueryAndDbNames(const string &program, const objects::CBioseq &bioseq, const string &dbname, const string &rid, unsigned int iteration, CConstRef< objects::CBioseq > subj_bioseq)
Print query and database names.
void x_PrintAlignmentLength(void)
Print alignment length.
int m_Score
Raw score of this HSP.
void x_SetFieldsToShow(const string &format)
Set fields to show, given an output format string.
vector< string > m_SubjectSciNames
void x_PrintQueryGi(void)
Print query gi.
void x_DeleteFieldToShow(ETabularField field)
Delete a field from the list of fields to show.
void x_SetFieldDelimiter(EFieldDelimiter delim, string customDelim="")
Set the tabular fields delimiter.
void x_PrintQueryAccession(void)
Print query accession.
int m_QueryFrame
query frame
void x_PrintSubjectAllTitles()
void x_PrintSubjectBlastNames()
list< CRef< objects::CSeq_id > > m_SubjectId
string m_SubjectCommonName
void x_PrintQueryAccessionVersion(void)
Print query accession.version.
void x_SetQueryCovSeqalign(const CSeq_align &align, int query_len)
void SetScores(int score, double bit_score, double evalue)
Set the HSP scores.
void x_PrintQueryEnd(void)
Print query end.
void x_PrintSubjectGi(void)
Print subject gi.
int m_NumGaps
Total number of gaps in this HSP.
int m_NumIdent
Number of identities in this HSP.
void SetCounts(int num_ident, int length, int gaps, int gap_opens, int positives=0, int query_frame=1, int subject_frame=1)
Set various counts/lengths.
void x_SetSubjectIds(const objects::CBioseq_Handle &bh, const CRef< objects::CBlast_def_line_set > &bdlRef)
void x_SetQueryCovSubject(const objects::CSeq_align &align)
string m_QuerySeq
Aligned part of the query sequence.
string m_Evalue
E-value of this HSP, in appropriate format.
TSeqPos m_QueryLength
Length of query sequence.
void x_PrintFieldNames(void)
Print the names of all supported fields.
ENa_strand GetSeqStrand(TDim row) const
void Reverse(void)
Reverse the segments' orientation.
void Assign(const CSerialObject &obj, ESerialRecursionMode how=eRecursive)
overloaded Assign()
void x_ComputeIgDomain(SIgDomain &domain)
void PrintMasterAlign(const CConstRef< blast::CIgBlastOptions > &ig_opts, const string &header="# ") const
Print domain information.
void SetMinusStrand(bool minus=true)
Set strand information.
vector< SIgDomain * > m_IgDomains
string m_OtherInfo[num_otherinfo]
map< string, string > m_AirrData
CRef< CSeq_align > m_TopAlign_V
void x_PrintIgDomain(const SIgDomain &domain) const
void SetSeqType(bool isNucl)
Set sequence type.
void SetJGene(const string &id, int s, int e)
Set gene info.
int SetFields(const objects::CSeq_align &align, objects::CScope &scope, const string &chain_type, const string &master_chain_type_to_show, CNcbiMatrix< int > *matrix=0)
Set fields for all other alignments.
void SetDGene(const string &id, int s, int e)
Set gene info.
void x_PrintIgGenes(bool isHtml=false, const string &header="# ") const
void PrintHeader(const CConstRef< blast::CIgBlastOptions > &ig_opts, const string &program, const objects::CBioseq &bioseq, const string &dbname, const string &domain_sys, const string &rid=kEmptyStr, unsigned int iteration=numeric_limits< unsigned int >::max(), const objects::CSeq_align_set *align_set=0, CConstRef< objects::CBioseq > subj_bioseq=CConstRef< objects::CBioseq >())
virtual void Print(void)
Override the print method.
void AddIgDomain(const string &name, int start, int end, int s_start=-1, int s_end=-1)
Set domain info.
void SetFrame(const string &frame="N/A")
Set out-of-frame information.
void SetCGene(const string &id, int s, int e)
Set gene info.
CRef< CSeq_align > m_TopAlign_J
void SetIgAnnotation(const CRef< blast::CIgAnnotation > &annot, const CConstRef< blast::CIgBlastOptions > &ig_opts, CConstRef< CSeq_align_set > &align_result, CScope &scope)
One method to set all annotation information.
void SetIgCDR3FWR4Annotation(const CRef< blast::CIgAnnotation > &annot)
method to set cdr3 and fwr4 annotation information
CRef< CSeq_align > m_TopAlign_D
int SetMasterFields(const objects::CSeq_align &align, objects::CScope &scope, const string &chain_type, const string &master_chain_type_to_show, CNcbiMatrix< int > *matrix=0)
Set fields for master alignment.
CRef< CSeq_align > m_TopAlign_C
void SetVGene(const string &id, int s, int e)
Set gene info.
void PrintHtmlSummary(const CConstRef< blast::CIgBlastOptions > &ig_opts) const
Print Html style summary.
static const int num_otherinfo
void x_PrintIgDomainHtml(const SIgDomain &domain) const
void SetAirrFormatData(CScope &scope, const CRef< blast::CIgAnnotation > &annot, const CBioseq_Handle &query_handle, CConstRef< CSeq_align_set > align_result, const CConstRef< blast::CIgBlastOptions > &ig_opts)
void x_PrintPartialQuery(int start, int end, bool isHtml=false) const
string m_AirrCdr3SeqTrans
void PrintAirrRearrangement(CScope &scope, const CRef< blast::CIgAnnotation > &annot, const string &program_version, const CBioseq &query_bioseq, const string &dbname, const string &domain_sys, const string &rid, unsigned int iteration, const CSeq_align_set *align_set, CConstRef< CBioseq > subj_bioseq, CNcbiMatrix< int > *matrix, bool print_airr_format_header, const CConstRef< blast::CIgBlastOptions > &ig_opts)
string m_MasterChainTypeToShow
TData & GetData()
retrieve the data associated with this matrix
static void GetTaxInfo(TTaxId taxid, SSeqDBTaxInfo &info)
Get taxonomy information.
static CRef< CBlast_def_line_set > ExtractBlastDefline(const CBioseq &bioseq)
Extract a Blast-def-line-set object from a Bioseq retrieved by CSeqDB.
CRef< CSeq_align > CreateTranslatedDensegFromNADenseg(void) const
Create a Dense-seg with widths from Dense-seg of nucleotides Used by AlnMgr to handle translated nucl...
CRef< CSeq_align > CreateDensegFromStdseg(SSeqIdChooser *SeqIdChooser=0) const
---------------------------------------------------------------------------- PRE : the Seq-align has ...
void Reverse(void)
Reverse the segments' orientation NOTE: currently *only* works for dense-seg.
CRange< TSeqPos > GetSeqRange(TDim row) const
GetSeqRange NB: On a Spliced-seg, in case the product-type is protein, these only return the amin par...
TSeqPos GetSeqStop(TDim row) const
const CSeq_id & GetSeq_id(TDim row) const
Get seq-id (the first one if segments have different ids).
bool GetNamedScore(const string &id, int &score) const
Get score.
TSeqPos GetSeqStart(TDim row) const
ENa_strand GetSeqStrand(TDim row) const
Get strand (the first one if segments have different strands).
static void GetSeqIdList(const objects::CBioseq_Handle &bh, list< CRef< objects::CSeq_id > > &ids)
Converts a Bioseq handle's sequence id type into a list of objects::CSeq_id references,...
static string GetSeqIdListString(const list< CRef< objects::CSeq_id > > &id, bool show_gi)
Creates a '|' delimited string, corresponding to a list of Seq-ids.
@ eRight
Towards higher aln coord (always to the right)
const_iterator begin() const
const_iterator end() const
iterator_bool insert(const value_type &val)
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
const_iterator begin() const
const_iterator end() const
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
SStrictId_Tax::TId TTaxId
Taxon id type.
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
void Warning(CExceptionArgs_Base &args)
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
const string AsFastaString(void) const
TGi FindGi(const container &ids)
Return gi from id list if exists, return 0 otherwise.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Optimized implementation of CSerialObject::Assign, which is not so efficient.
void GetLabel(string *label, ELabelType type=eDefault, TLabelFlags flags=fLabel_Default) const
Append a label for this Seq-id to the supplied string.
static int WorstRank(const CRef< CSeq_id > &id)
static int Score(const CRef< CSeq_id > &id)
Wrappers for use with FindBestChoice from <corelib/ncbiutil.hpp>
@ fLabel_Version
Show the version.
@ eContent
Untagged human-readable accession or the like.
TSeqPos GetLength(const CSeq_id &id, CScope *scope)
Get sequence length if scope not null, else return max possible TSeqPos.
TTaxId GetTaxId(const CBioseq_Handle &handle)
return the tax-id associated with a given sequence.
static void Translate(const string &seq, string &prot, const CGenetic_code *code, bool include_stop=true, bool remove_trailing_X=false, bool *alt_start=NULL, bool is_5prime_complete=true, bool is_3prime_complete=true)
Translate a string using a specified genetic code.
@ fIs5PrimePartial
= 0x4 Translate first codon even if not start codon (because sequence is 5' partial)
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
CSeq_inst::TMol GetSequenceType(const CSeq_id &id, TGetFlags flags=0)
Get molecular type of sequence (protein/dna/rna) Return CSeq_inst::eMol_not_set if sequence is not fo...
vector< CSeq_id_Handle > TId
TSeqPos GetBioseqLength(void) const
CConstRef< CSeq_id > GetSeqId(void) const
Get id which can be used to access this bioseq handle Throws an exception if none is available.
const TId & GetId(void) const
CSeqVector GetSeqVector(EVectorCoding coding, ENa_strand strand=eNa_strand_plus) const
Get sequence: Iupacna or Iupacaa if use_iupac_coding is true.
@ eCoding_Iupac
Set coding to printable coding (Iupacna or Iupacaa)
void GetSeqData(TSeqPos start, TSeqPos stop, string &buffer) const
Fill the buffer string with the sequence data for the interval [start, stop).
bool Empty(void) const THROWS_NONE
Check if CConstRef is empty – not pointing to any object which means having a null value.
void Reset(void)
Reset reference object.
bool NotEmpty(void) const THROWS_NONE
Check if CRef is not empty – pointing to an object and has a non-null value.
bool NotEmpty(void) const THROWS_NONE
Check if CConstRef is not empty – pointing to an object and has a non-null value.
position_type GetLength(void) const
bool NotEmpty(void) const
position_type GetToOpen(void) const
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
IO_PREFIX::ostream CNcbiOstream
Portable alias for ostream.
NCBI_NS_STD::string::size_type SIZE_TYPE
static string Int8ToString(Int8 value, TNumToStringFlags flags=0, int base=10)
Convert Int8 to string.
static string DoubleToString(double value, int precision=-1, TNumToStringFlags flags=0)
Convert double to string.
static int StringToInt(const CTempString str, TStringToNumFlags flags=0, int base=10)
Convert string to int.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static string & Replace(const string &src, const string &search, const string &replace, string &dst, SIZE_TYPE start_pos=0, SIZE_TYPE max_replace=0, SIZE_TYPE *num_replace=0)
Replace occurrences of a substring within a string.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
static string TruncateSpaces(const string &str, ETrunc where=eTrunc_Both)
Truncate spaces in a string.
@ fDoubleScientific
DoubleToString*(): Use scientific format for double conversions.
C::value_type FindBestChoice(const C &container, F score_func)
Find the best choice (lowest score) for values in a container.
const TOrg & GetOrg(void) const
Get the Org member data.
bool IsSet(void) const
Check if a value has been assigned to data member.
list< CRef< CSeq_id > > TSeqid
bool CanGet(void) const
Check if it is safe to call Get method.
const Tdata & Get(void) const
Get the member data.
list< CRef< CBlast_def_line > > Tdata
TFrom GetFrom(void) const
Get the From member data.
bool IsStr(void) const
Check if variant Str is selected.
const TStr & GetStr(void) const
Get the variant data.
TStr & SetStr(void)
Select the variant.
TId GetId(void) const
Get the variant data.
const TDenseg & GetDenseg(void) const
Get the variant data.
bool CanGet(void) const
Check if it is safe to call Get method.
E_Choice Which(void) const
Which variant is currently selected.
bool IsSetStrands(void) const
Check if a value has been assigned to Strands data member.
const TStarts & GetStarts(void) const
Get the Starts member data.
const TLens & GetLens(void) const
Get the Lens member data.
vector< TSignedSeqPos > TStarts
bool IsDendiag(void) const
Check if variant Dendiag is selected.
bool IsStd(void) const
Check if variant Std is selected.
bool IsSet(void) const
Check if a value has been assigned to data member.
list< CRef< CSeq_align > > Tdata
const TStrands & GetStrands(void) const
Get the Strands member data.
const Tdata & Get(void) const
Get the member data.
const TSegs & GetSegs(void) const
Get the Segs member data.
TLocal & SetLocal(void)
Select the variant.
const TLocal & GetLocal(void) const
Get the variant data.
bool IsLocal(void) const
Check if variant Local is selected.
const TSource & GetSource(void) const
Get the variant data.
const TOrg & GetOrg(void) const
Get the variant data.
@ e_Ncbieaa
extended ASCII 1 letter aa codes
@ e_Org
if all from one organism
@ e_Source
source of materials, includes Org-ref
char * dbname(DBPROCESS *dbproc)
Get name of current database.
unsigned int
A callback function used to compare two keys in a database.
string SeqDB_ResolveDbPath(const string &filename)
Resolve a file path using SeqDB's path algorithms.
struct containing annotated domain information
string common_name
Common name, such as "noisy night monkey".
string blast_name
A simple category name, such as "birds".
string s_kingdom
A string of length 1 indicating the "Super Kingdom".
string scientific_name
Scientific name, such as "Aotus vociferans".
static void s_GetCigarString(const CSeq_align &align, string &cigar, int query_len, CScope &scope)
static void SetCdrFwrSeq(const string &nuc_seq, string &translated_seq, bool is_first_domain, int region_start, int frame_start, string &next_trans_addition, bool &next_trans_substract, string extra_from_next_region)
bool s_IsValidName(const string &name)
static string s_GetSeqIdListString(const list< CRef< CSeq_id > > &id, CBlastTabularInfo::ESeqIdType id_type)
CRef< CSeq_id > s_ReplaceLocalId(const CBioseq_Handle &bh, CConstRef< CSeq_id > sid_in, bool parse_local)
static void s_GetGermlineTranslation(const CRef< blast::CIgAnnotation > &annot, CAlnVec &alnvec, const string &aligned_query_string, const string &aligned_germline_string, string &query_translation_string, string &germline_translation_string)
static string s_InsertGap(const string &nuc_without_gap, const string &nuc, const string &prot, char gap_char)
static void s_FillJunctionalInfo(int left_stop, int right_start, int &junction_len, string &junction_seq, const string &query_seq)
static void s_SetAirrAlignmentInfo(const CRef< CSeq_align > &align_v, const CRef< CSeq_align > &align_d, const CRef< CSeq_align > &align_j, const CRef< CSeq_align > &align_c, const CRef< blast::CIgAnnotation > &annot, CScope &scope, map< string, string > &airr_data)