95 const string color[]={
"#000000",
"#808080",
"#FF0000"};
109 static const string k_DefaultCheckboxTempl =
"<input type=\"checkbox\" name=\"getSeqGi\" value=\"<@id_lbl@>\" onClick=\"synchronizeCheck(this.value, 'getSeqAlignment<@queryNumber@>', 'getSeqGi', this.checked)\">";
110 static const string k_DefaultCheckboxExTempl =
"<input type=\"checkbox\" name=\"getSeqGi\" value=\"<@id_lbl@>\" checked=\"checked\" onClick=\"synchAl(this);\">";
119 static string k_GetSeqSubmitForm[] = {
"<FORM method=\"post\" \
120 action=\"//www.ncbi.nlm.nih.gov:80/entrez/query.fcgi?SUBMIT=y\" \
121 name=\"%s%d\"><input type=button value=\"Get selected sequences\" \
122 onClick=\"finalSubmit(%d, 'getSeqAlignment%d', 'getSeqGi', '%s%d', %d)\"><input \
123 type=\"hidden\" name=\"db\" value=\"\"><input type=\"hidden\" name=\"term\" \
124 value=\"\"><input type=\"hidden\" name=\"doptcmdl\" value=\"docsum\"><input \
125 type=\"hidden\" name=\"cmd\" value=\"search\"></form>",
127 "<FORM method=\"POST\" \
128 action=\"//www.ncbi.nlm.nih.gov/Traces/trace.cgi\" \
129 name=\"%s%d\"><input type=button value=\"Get selected sequences\" \
130 onClick=\"finalSubmit(%d, 'getSeqAlignment%d', 'getSeqGi', '%s%d', %d)\"><input \
131 type=\"hidden\" name=\"val\" value=\"\"><input \
132 type=\"hidden\" name=\"cmd\" value=\"retrieve\"></form>"
136 type=\"button\" value=\"Select all\" onClick=\"handleCheckAll('select', \
137 'getSeqAlignment%d', 'getSeqGi')\"></form></td><td><FORM><input \
138 type=\"button\" value=\"Deselect all\" onClick=\"handleCheckAll('deselect', \
139 'getSeqAlignment%d', 'getSeqGi')\"></form>";
143 action=\"//www.ncbi.nlm.nih.gov/blast/treeview/blast_tree_view.cgi?request=page&rid=%s&queryID=%s&distmode=on\" \
144 name=\"tree%s%d\" target=\"trv%s\"> \
145 <input type=button value=\"Distance tree of results\" onClick=\"extractCheckedSeq('getSeqAlignment%d', 'getSeqGi', 'tree%s%d')\"> \
146 <input type=\"hidden\" name=\"sequenceSet\" value=\"\"><input type=\"hidden\" name=\"screenWidth\" value=\"\"></form>";
157 list <FeatureInfo*>* external_feature,
158 const char* matrix_name )
159 : m_SeqalignSetRef(&seqalign),
160 m_Seqloc(mask_seqloc),
161 m_QueryFeature(external_feature),
164 m_UseLongSeqIds(
false)
168 m_SeqLocColor = eBlack;
171 m_CanRetrieveSeq =
false;
173 m_NumAlignToShow = 1000000;
180 m_MidLineStyle = eBar;
183 m_DynamicFeature =
NULL;
184 m_MasterGeneticCode = 1;
185 m_SlaveGeneticCode = 1;
186 m_AlignTemplates =
NULL;
190 m_SeqPropertyLabel.reset(
new vector<string>);
191 m_TranslatedFrameForLocalSeq = eFirst;
192 m_ResultPositionIndex = -1;
193 m_currAlignSeqListIndex = 1;
194 m_QueryAnchoredSetIndex = -1;
203 if (
mtx.GetData().empty()) {
210 if ( !
mtx.GetData().empty() )
212 m_Matrix =
new int*[
mtx.GetRows()];
213 for(
size_t i = 0;
i<
mtx.GetRows(); ++
i) {
214 m_Matrix[
i] =
new int[
mtx.GetCols()];
217 for(
size_t i = 0;
i<
mtx.GetRows(); ++
i) {
218 for (
size_t j = 0; j <
mtx.GetCols(); j++) {
219 m_Matrix[
i][j] =
mtx(
i, j);
251 int aln_stop = (
int)
m_AV->GetAlnStop();
252 int master_strand =
m_AV->StrandSign(0);
253 int slave_strand =
m_AV->StrandSign(1);
259 string alignParams = alignInfo;
270 alignParams =
CAlignFormatUtil::MapTemplate(alignParams,
"aln_strand",(master_strand==1 ?
"Plus" :
"Minus")+ (
string)
"/"+ (slave_strand==1?
"Plus" :
"Minus"));
277 if(master_frame != 0 && slave_frame != 0) {
281 }
else if (master_frame != 0){
284 }
else if (slave_frame != 0){
311 int gap,
int master_strand,
312 int slave_strand,
int master_frame,
313 int slave_frame,
bool aln_is_prot)
315 out<<
" Identities = "<<
match<<
"/"<<(aln_stop+1)<<
" ("<<identity<<
"%"<<
")";
320 out<<
", Gaps = "<<gap<<
"/"<<(aln_stop+1)
323 out<<
" Strand="<<(master_strand==1 ?
"Plus" :
"Minus")
324 <<
"/"<<(slave_strand==1?
"Plus" :
"Minus")<<
"\n";
326 if(master_frame != 0 && slave_frame != 0) {
327 out <<
" Frame = " << ((master_frame > 0) ?
"+" :
"")
328 << master_frame <<
"/"<<((slave_frame > 0) ?
"+" :
"")
329 << slave_frame<<
"\n";
330 }
else if (master_frame != 0){
331 out <<
" Frame = " << ((master_frame > 0) ?
"+" :
"")
332 << master_frame <<
"\n";
333 }
else if (slave_frame != 0){
334 out <<
" Frame = " << ((slave_frame > 0) ?
"+" :
"")
335 << slave_frame <<
"\n";
347 const int line_len = 60;
348 bool do_wrap =
false;
349 int length = (
int)
str.size();
350 if (length > line_len) {
351 for (
int i = 0;
i < length;
i ++){
352 if(
i > 0 &&
i % line_len == 0){
381 bool isStyled =
false;
382 if(startStyledOutput || (!styledSeqStr.empty() && !stopStyledOutput)){
383 styledSeqStr += seq[currIndex];
386 if(!styledSeqStr.empty() && (stopStyledOutput || currIndex == (
int)seq.size() - 1) ) {
402 for(
int i = 0;
i < (
int)seq.size();
i ++){
404 if(!isStyled)
out << seq[
i];
421 frame = (start % 3) + 1;
443 *(ss.
GetIds().front()), scope);
461 string& raw_cdr_product,
TSeqPos frame_adj)
464 string concat_exon(total_coding_len,
' ');
474 coding_start_base = total_coding_len - 1 - (frame -1) - frame_adj;
475 num_base = total_coding_len - 1;
479 coding_start_base = 0;
480 coding_start_base += frame - 1 + frame_adj;
489 for(
TSeqPos i = 0;
i < iter->GetLength();
i ++){
490 if((
TSeqPos)num_base >= coding_start_base){
492 if(num_coding_base % 3 == 2){
494 if(num_coding_base / 3 < raw_cdr_product.size()){
498 concat_exon[num_base]
499 = raw_cdr_product[num_coding_base / 3];
507 for(
TSeqPos i = 0;
i < iter->GetLength() &&
508 num_base >= 0;
i ++){
509 if((
TSeqPos)num_base <= coding_start_base){
511 if(num_coding_base % 3 == 2){
513 if(num_coding_base / 3 <
514 raw_cdr_product.size() &&
515 coding_start_base >= num_coding_base){
519 concat_exon[num_base]
520 = raw_cdr_product[num_coding_base / 3];
542 list<CSeq_loc_CI::TRange>& slave_feat_range,
552 trans_frame += frame_adj;
555 bool is_first_in_range =
true;
564 list<CSeq_loc_CI::TRange> acutal_slave_feat_range = slave_feat_range;
566 ITERATE(list<CSeq_loc_CI::TRange>, iter_temp,
567 acutal_slave_feat_range){
569 IntersectionWith(*iter_temp);
570 if(!actual_feat_seq_range.
Empty()){
571 TSeqPos slave_aln_from = 0, slave_aln_to = 0;
573 int curr_exon_leading_len = 0;
575 if (is_first_in_range) {
577 curr_exon_leading_len
578 = actual_feat_seq_range.
GetFrom() - iter_temp->GetFrom();
581 curr_exon_leading_len
582 = iter_temp->GetTo() - actual_feat_seq_range.
GetTo();
584 is_first_in_range =
false;
585 frame_offset = (3 - (prev_exon_len + curr_exon_leading_len)%3
586 + (trans_frame - 1)) % 3;
607 actual_feat_seq_range.
GetFrom() +
637 master_feat_range.push_back(master_range);
640 prev_exon_len += iter_temp->GetLength();
662 TSeqPos frame_adj,
bool mix_loc)
677 GetBioseqLength(), raw_cdr_product);
681 TSeqPos from = iter->GetFrom();
695 if (genetic_code > 0) {
699 ce->SetId(genetic_code);
700 gc.
Set().push_back(ce);
704 raw_cdr_product, &gc);
707 return raw_cdr_product;
719 size_t length_per_line,
720 TSeqPos feat_aln_start_totalexon,
723 list<TSeqPos>& start)
725 size_t actual_line_len = 0;
726 size_t aln_len = line.size();
727 TSeqPos previous_num_letter = 0;
730 for (
size_t i = 0;
i <= feat_aln_start_totalexon;
i ++){
735 int pos = concat_exon.size() -1 -
i;
736 if(pos >= 0 &&
isalpha((
unsigned char) concat_exon[pos])){
737 previous_num_letter ++;
741 if(
isalpha((
unsigned char) concat_exon[
i])){
742 previous_num_letter ++;
751 for(
size_t i = 0;
i < aln_len;
i += actual_line_len){
753 if(aln_len -
i< length_per_line) {
754 actual_line_len = aln_len -
i;
756 actual_line_len = length_per_line;
760 bool has_intron =
false;
763 for(
size_t j =
i; j < actual_line_len +
i; j ++){
765 if(
isalpha((
unsigned char) line[j])){
775 start.push_back(previous_num_letter - prev_num);
777 start.push_back(previous_num_letter + prev_num);
781 start.push_back(previous_num_letter + prev_num);
783 start.push_back(previous_num_letter - prev_num);
786 }
else if (has_intron) {
801 list<ENa_strand>& feat_seq_strand,
831 feat_seq_strand.front())));
834 ftable.push_back(seq_feat);
835 feat_seq_strand.pop_front();
837 anot_list.push_back(anot);
856 bool color_feat_mismatch,
862 if((
int)feat_line.size() > start){
863 string actual_feat = feat_line.substr(start,
len);
866 actual_reference_feat = reference_feat_line.substr(start,
len);
868 if(color_feat_mismatch
871 string styledSequenceStr;
872 for(
int i = 0;
i < (
int)actual_feat.size() &&
873 i < (
int)actual_reference_feat.size();
i ++){
874 bool styledOutput = actual_feat[
i] != actual_reference_feat[
i] &&
876 bool stopStyledOutput = (actual_feat[
i] == actual_reference_feat[
i]) && actual_feat[
i] !=
' ';
878 if(!isStyled)
out << actual_feat[
i];
890 string& master_feat_str,
898 int id_length = alnRoInfo->
maxIdLen;
911 substr(aln_start, line_length)) &&
918 out<<(*iter)->feature->feature_id;
919 if((*iter)->feature_start.empty()){
923 -(*iter)->feature->feature_id.size());
925 int feat_start = (*iter)->feature_start.front();
929 -(*iter)->feature->feature_id.size());
939 -(*iter)->feature->feature_id.size());
942 (*iter)->feature_start.pop_front();
944 bool color_cds_mismatch =
false;
948 color_cds_mismatch =
true;
954 color_cds_mismatch =
true;
957 (*iter)->feature_string,
958 color_cds_mismatch, aln_start,
961 master_feat_str = (*iter)->feature_string;
976 seqUrlInfo->
defline = sequence::CDeflineGenerator().GenerateDefline(bsp_handle);
987 string idString =
m_AV->GetSeqId(1).GetSeqIdString();
1039 if(bdl_list.size() > 0) {
1055 const CSeq_id&
id = sequence_masks->front()->GetSeqId();
1062 int first_encoding_base,
int align_length,
1063 const string& translation,
const string& sequence,
1066 string feat(align_length,
' ');
1070 for (
int i = first_encoding_base;
i < (
int) feat.size() &&
1071 j < (
int)translation.size();
i ++) {
1072 if (sequence[
i] != gap_char) {
1076 if (num_base%3 == 2) {
1077 feat[
i] = translation[j];
1086 vector<string>& sequence)
const {
1087 if (
m_AV->IsPositiveStrand(0) &&
m_AV->IsPositiveStrand(1)) {
1090 int non_gap_aln_pos = 0;
1092 int num_consecutive = 0;
1093 for (
int i =0;
i < (
int) sequence[0].
size();
i ++) {
1094 if (sequence[0][
i] != gap_char &&
1095 sequence[1][
i] != gap_char) {
1098 if (num_consecutive >=3) {
1099 non_gap_aln_pos =
i - 2;
1103 num_consecutive = 0;
1109 int master_frame_extra =
m_AV->GetSeqPosFromAlnPos(0, non_gap_aln_pos)%3;
1110 int master_frame_start;
1112 master_frame_start =
m_AV->GetSeqPosFromAlnPos(0, non_gap_aln_pos) +
1117 m_AV->GetSeqStop(0)));
1120 string master_translation;
1123 master_translation);
1124 int master_first_encoding_base =
m_AV->GetAlnPosFromSeqPos(0, master_frame_start);
1126 master_first_encoding_base,
1127 m_AV->GetAlnStop() + 1,
1129 sequence[0], gap_char);
1134 m_AV->GetAlnStop(),
' ',
1135 " ", master_feat, -1);
1137 retval[0].push_back(master_featInfo);
1140 int subject_frame_start =
m_AV->GetSeqPosFromSeqPos(1, 0, master_frame_start);
1147 string subject_translation;
1150 subject_translation);
1151 int subject_first_encoding_base =
m_AV->GetAlnPosFromSeqPos(1, subject_frame_start);
1153 subject_first_encoding_base,
1154 m_AV->GetAlnStop() + 1,
1155 subject_translation,
1156 sequence[1], gap_char);
1161 m_AV->GetAlnStop(),
' ',
1162 " ", subject_feat, -1);
1164 retval[1].push_back(subject_featInfo);
1172 const string& sequence ,
char gap_char,
1173 int&
match,
int& align_length){
1177 int end = (
int)sequence.size() - 1;
1178 for(
int i = 0;
i < (
int)sequence.size();
i++){
1179 if (sequence[
i] != gap_char){
1185 for(
int i = (
int)sequence.size() - 1;
i > 0;
i--){
1186 if (sequence[
i] != gap_char){
1193 for(
int i = start;
i <= end &&
i < (
int)sequence.size() &&
i < (
int)sequence_standard.size();
i++){
1194 if(sequence[
i] == gap_char && sequence_standard[
i] == gap_char) {
1197 if (sequence_standard[
i]==sequence[
i]){
1207 size_t maxIdLen=0, maxStartLen=0;
1210 const int rowNum=
m_AV->GetNumRows();
1214 m_AV->SetGapChar(
'-');
1217 m_AV->SetEndChar(
'-');
1220 m_AV->SetEndChar(
' ');
1222 vector<string> sequence(rowNum);
1223 vector<CAlnMap::TSeqPosList> seqStarts(rowNum);
1224 vector<CAlnMap::TSeqPosList> seqStops(rowNum);
1225 vector<CAlnMap::TSeqPosList> insertStart(rowNum);
1226 vector<CAlnMap::TSeqPosList> insertAlnStart(rowNum);
1227 vector<CAlnMap::TSeqPosList> insertLength(rowNum);
1228 vector<string> seqidArray(rowNum);
1230 vector<CAlnMap::TSignedRange> rowRng(rowNum);
1231 vector<int> frame(rowNum);
1232 vector<TTaxId> taxid(rowNum);
1233 int max_feature_num = 0;
1234 vector<int>
match(rowNum-1);
1235 vector<double> percent_ident(rowNum-1);
1236 vector<int> align_length(rowNum-1);
1237 vector<string> align_stats(rowNum-1);
1238 vector<string> seq_property_label(rowNum-1);
1239 int max_align_stats = 0;
1240 int max_seq_property_label = 0;
1243 vector<TSAlnFeatureInfoList> bioseqFeature;
1248 _ASSERT((
int)bioseqFeature.size() == rowNum);
1250 vector<TSAlnSeqlocInfoList> masked_regions(rowNum);
1253 for (
int row = 1; row < rowNum; row++) {
1259 list<list<CRange<TSeqPos> > > feat_seq_range;
1260 list<ENa_strand> feat_seq_strand;
1262 for (
int row=0; row<rowNum; row++) {
1267 type_temp ==
"gsfasta" || type_temp ==
"gsfasta_prev"){
1277 rowRng[row] =
m_AV->GetSeqAlnRange(row);
1278 frame[row] = (
m_AV->GetWidth(row) == 3 ?
1280 m_AV->GetSeqStart(row) :
1281 m_AV->GetSeqStop(row),
1282 m_AV->IsPositiveStrand(row) ?
1286 m_AV->GetWholeAlnSeqString(row, sequence[row], &insertAlnStart[row],
1287 &insertStart[row], &insertLength[row],
1288 (
int)
m_LineLen, &seqStarts[row], &seqStops[row]);
1293 match[row-1], align_length[row-1]);
1295 if (align_length[row-1] > 0 ){
1296 percent_ident[row-1] = ((double)
match[row-1])/align_length[row-1]*100;
1301 percent_ident[row - 1] = 0;
1302 align_stats[row-1] =
"0";
1305 max_align_stats =
max(max_align_stats,
1306 (
int)align_stats[row-1].
size());
1315 seq_property_label[row-1] = (*m_SeqPropertyLabel)[row];
1320 max_seq_property_label =
max(max_seq_property_label,
1321 (
int)seq_property_label[row-1].
size());
1325 &&
m_AV->GetWidth(row) != 3
1335 GetBioseqCore()->
GetId());
1338 feat_seq_range, feat_seq_strand,
1339 row == 1 && !(master_gi >
ZERO_GI) ?
true :
false);
1341 if(!(feat_seq_range.empty()) && row == 1) {
1346 m_AV->GetBioseqHandle(0));
1347 int custom_genetic_code = -1;
1349 if ((*iter_feat)->genetic_code > 0) {
1350 custom_genetic_code = (*iter_feat)->genetic_code;
1356 list<list<CRange<TSeqPos> > > temp_holder;
1357 x_GetFeatureInfo(bioseqFeature[0], custom_genetic_code, *master_scope_with_feat,
1359 temp_holder, feat_seq_strand,
false);
1365 feat_seq_range, feat_seq_strand,
false);
1370 maxIdLen=max<size_t>(seqidArray[row].
size(), maxIdLen);
1371 size_t maxCood=max<size_t>(
m_AV->GetSeqStart(row),
m_AV->GetSeqStop(row));
1374 for(
int i = 0;
i < rowNum;
i ++){
1375 int num_feature = 0;
1377 maxIdLen=max<size_t>((*iter)->feature->feature_id.size(), maxIdLen);
1379 if(num_feature > max_feature_num){
1380 max_feature_num = num_feature;
1393 alnRoInfo->
rowRng = rowRng;
1394 alnRoInfo->
frame = frame;
1395 alnRoInfo->
taxid = taxid;
1403 alnRoInfo->
rowNum = rowNum;
1416 size_t aln_stop=
m_AV->GetAlnStop();
1417 int rowNum = alnRoInfo->
rowNum;
1418 vector<int> prev_stop(rowNum);
1424 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1429 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1432 string formattedString;
1435 formattedString += rowdata;
1437 return formattedString;
1442 size_t aln_stop=
m_AV->GetAlnStop();
1443 int rowNum = alnRoInfo->
rowNum;
1444 vector<int> prev_stop(rowNum);
1449 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1454 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1455 int rowSetsCount = 1;
1483 size_t actualLineLen=0;
1485 size_t aln_stop=
m_AV->GetAlnStop();
1487 int rowNum = alnRoInfo->
rowNum;
1493 actualLineLen=aln_stop-aln_start+1;
1502 for (
int row=0; row<rowNum; row++) {
1503 bool hasSequence =
true;
1509 int end = alnRoInfo->
seqStops[row].front() + 1;
1510 bool has_mismatch =
false;
1513 for (
int index = aln_start; index < aln_start + (
int)actualLineLen &&
1514 index < (
int)alnRoInfo->
sequence[row].size(); index ++){
1518 }
else if (!has_mismatch) {
1519 has_mismatch =
true;
1547 prev_stop[row] = end;
1552 if(!alnRoInfo->
seqStops[row].empty()){
1553 alnRoInfo->
seqStops[row].pop_front();
1558 return formattedString;
1563 size_t actualLineLen=0;
1565 size_t aln_stop=
m_AV->GetAlnStop();
1567 int rowNum = alnRoInfo->
rowNum;
1572 actualLineLen=aln_stop-aln_start+1;
1581 for (
int row=0; row<rowNum; row++) {
1582 bool hasSequence =
true;
1588 int end = alnRoInfo->
seqStops[row].front() + 1;
1589 prev_stop[row] = end;
1594 if(!alnRoInfo->
seqStops[row].empty()){
1595 alnRoInfo->
seqStops[row].pop_front();
1603 int start = alnRoInfo->
seqStarts[row].front() + 1;
1604 int end = alnRoInfo->
seqStops[row].front() + 1;
1611 if ((j > 0 && end == prev_stop)
1612 || (j == 0 && start == 1 && end == 1)) {
1621 (
int)actualLineLen, alnRoInfo->
frame[row], row,
1627 if (!(j > 0 && end == prev_stop)
1628 && !(j == 0 && start == 1 && end == 1)) {
1636 list<string> inserts;
1637 string insertPosString;
1644 x_FillInserts(row, curRange, j, inserts, insertPosString, insertList);
1645 bool insertAlready =
false;
1646 for(list<string>::iterator iter = inserts.begin();
1647 iter != inserts.end(); iter ++){
1664 out << insertPosString<<
"\n";
1680 insertAlready =
true;
1706 gi =
m_AV->GetSeqId(row).GetGi();
1710 GetBioseqCore()->
GetId());
1712 string anchorTmpl,checkBoxTmpl,id_lbl;
1735 id_lbl =
"lcl|" + id_lbl;
1739 if(showCheckbox || showAnchor) {
1773 if(!urlLink.empty()) {
1793 size_t aln_stop=
m_AV->GetAlnStop();
1795 aln_vec_info->
match = 0;
1797 aln_vec_info->
gap = 0;
1801 aln_vec_info->
match,
1833 finalAln = densegAln;
1849 finalAln = densegAln;
1853 "Seq-align should be Denseg, Stdseg or Dendiag!");
1857 if((ds->IsSetStrands()
1859 && !(ds->IsSetWidths() && ds->GetWidths()[0] == 3)){
1861 finalDenseg->
Assign(*ds);
1895 string feat_file =
m_Reg->
Get(
"FEATURE_INFO",
"FEATURE_FILE");
1896 string feat_file_index =
m_Reg->
Get(
"FEATURE_INFO",
1897 "FEATURE_FILE_INDEX");
1920 if (actual_aln_list.
Get().empty()){
1946 for (CSeq_align_set::Tdata::const_iterator
1947 iter = actual_aln_list.
Get().begin();
1948 iter != actual_aln_list.
Get().end()
1954 if(!(avRef.
Empty())){
1971 alnvecInfo->use_this_seqid,
1972 alnvecInfo->comp_adj_method);
1973 alnvecInfo->alnvec = avRef;
1976 bool showDefLine = previousId.
Empty() || !subid->
Match(*previousId);
1982 out <<
"Sequence with id "
1984 <<
" no longer exists in database...alignment skipped\n";
1997 vector<CRef<CSeq_align_set> > alnVector(
k_NumFrame);
2001 for (CSeq_align_set::Tdata::const_iterator
2002 alnIter = actual_aln_list.
Get().begin();
2003 alnIter != actual_aln_list.
Get().end()
2007 m_Scope.GetBioseqHandle((*alnIter)->GetSeq_id(1));
2021 alnVector[0]->Set().push_back(convertedDs);
2024 alnVector[1]->Set().push_back(convertedDs);
2027 alnVector[2]->Set().push_back(convertedDs);
2030 alnVector[3]->Set().push_back(convertedDs);
2033 alnVector[4]->Set().push_back(convertedDs);
2036 alnVector[5]->Set().push_back(convertedDs);
2043 alnVector[0]->Set().push_back(convertedDs);
2047 alnVector[0]->Set().push_back(*alnIter);
2053 "Input Seq-align should be Denseg, Stdseg or Dendiag!");
2057 for(
int i = 0;
i < (
int)alnVector.size();
i ++){
2058 bool hasAln =
false;
2060 alnRef =
ConstBegin(*alnVector[
i]); alnRef; ++alnRef){
2067 if (ds->IsSetWidths() &&
2068 ds->GetWidths()[0] == 3 &&
2069 ds->IsSetStrands() &&
2091 int numDistinctFrames = 0;
2092 for(
int i = 0;
i < (
int)alnVector.size();
i ++){
2093 if(!alnVector[
i]->
Get().empty()){
2094 numDistinctFrames ++;
2107 if(numDistinctFrames > 1){
2109 <<
" of query sequence:\n\n";
2124 const string& sequence ,
2126 string& middle_line)
2130 int min_length=min<int>((
int)sequence_standard.size(), (
int)sequence.size());
2132 middle_line = sequence;
2134 for(
int i=0;
i<min_length;
i++){
2135 if(sequence_standard[
i]==sequence[
i]){
2138 middle_line[
i] =
'|';
2140 middle_line[
i] = sequence[
i];
2146 &&
m_Matrix[(
int)sequence_standard[
i]][(
int)sequence[
i]] > 0){
2150 middle_line[
i] =
'+';
2155 middle_line[
i] =
' ';
2174 cerr <<
"[BLAST FORMATTER EXCEPTION] Problem with linkoutdb: " << e.
GetMsg() << endl;
2186 list<string> &use_this_seqid,
2190 SAlnDispParams *alnDispParams =
NULL;
2191 const int kMaxDeflineNum = 10;
2196 const list<CRef<CSeq_id> > ids = bdl->GetSeqid();
2201 bool isGiList =
false;
2203 if(
match && isGiList) gi_in_use_this_gi = gi;
2205 if(use_this_seqid.empty() ||
match) {
2206 firstGi = (firstGi ==
ZERO_GI) ? gi_in_use_this_gi : firstGi;
2207 alnDispParams =
new SAlnDispParams();
2208 alnDispParams->gi = gi;
2218 if(bdl->IsSetTaxid() && bdl->CanGetTaxid()){
2219 taxid = bdl->GetTaxid();
2222 alnDispParams->seqUrlInfo =
x_InitSeqUrl(gi_in_use_this_gi,alnDispParams->label,taxid,ids);
2228 if (alnDispParams->hasTextSeqID) {
2232 alnDispParams->gi) : 0;
2244 ITERATE(list<string>, iter_linkout, linkout_url){
2245 alnDispParams->linkoutStr += *iter_linkout;
2253 if(bdl->IsSetTitle()){
2254 alnDispParams->title = bdl->GetTitle();
2256 if(alnDispParams->title.empty()) {
2260 return alnDispParams;
2267 SAlnDispParams *alnDispParams =
new SAlnDispParams();
2273 alnDispParams->seqUrlInfo =
x_InitSeqUrl(alnDispParams->gi,alnDispParams->label,
ZERO_TAX_ID,alnDispParams->ids);
2278 return alnDispParams;
2288 static string kLengthString(
"Length=");
2289 #ifdef CTOOLKIT_COMPATIBLE
2290 static bool value_set =
false;
2292 if (getenv(
"CTOOLKIT_COMPATIBLE")) {
2293 kLengthString.assign(
" Length = ");
2307 bool isFirst =
true;
2329 aln_vec_info->id_label = (alnDispParams->gi !=
ZERO_GI) ?
2332 out<<alnDispParams->id_url;
2336 !alnDispParams->seqID->IsGi()){
2337 out<<
"gi|"<<alnDispParams->gi<<
"|";
2339 if(!((alnDispParams->seqID->AsFastaString().find(
"gnl|BL_ORD_ID") != string::npos) ||
2340 alnDispParams->seqID->AsFastaString().find(
"lcl|Subject_") != string::npos)){
2341 if (
strncmp(alnDispParams->seqID->AsFastaString().c_str(),
"lcl|", 4) == 0)
2342 out << alnDispParams->label;
2345 alnDispParams->gi >
ZERO_GI)) {
2346 alnDispParams->seqID->WriteAsFasta(
out);
2358 if(alnDispParams->gi !=
ZERO_GI){
2359 out<<
"<a name="<<alnDispParams->gi<<
"></a>";
2361 out<<
"<a name="<<alnDispParams->seqID->GetSeqIdString()<<
"></a>";
2367 alnDispParams->title);
2373 bool bMultipleDeflines =
false;
2375 int maxNumBdl = (aln_vec_info->use_this_seqid.empty()) ? bdl.size() : aln_vec_info->use_this_seqid.size();
2377 iter = bdl.begin(); iter != bdl.end(); iter++){
2381 aln_vec_info->use_this_seqid,
2394 string mdlTag = aln_vec_info->id_label;
2396 out <<
"<a href=\"#\" title=\"Other sequence titles\" onmouseover=\"showInfo(this)\" class=\"resArrowLinkW mdl hiding\" id=\"" <<
2397 mdlTag <<
"\">" << maxNumBdl -
k_MinDeflinesToShow <<
" more sequence titles" <<
"</a>\n";
2399 out <<
" <div id=\"" <<
"info_" << mdlTag <<
"\" class=\"helpbox mdlbox hidden\">";
2400 bMultipleDeflines =
true;
2405 firstGi = alnDispParams->gi;
2417 out<< alnDispParams->id_url;
2421 !alnDispParams->seqID->IsGi()){
2422 out<<
"gi|"<<alnDispParams->gi<<
"|";
2424 if(!(alnDispParams->seqID->AsFastaString().find(
"gnl|BL_ORD_ID") != string::npos) ||
2425 alnDispParams->seqID->AsFastaString().find(
"lcl|Subject_") != string::npos){
2426 if (
strncmp(alnDispParams->seqID->AsFastaString().c_str(),
"lcl|", 4) == 0) {
2427 out << alnDispParams->label;
2432 alnDispParams->gi >
ZERO_GI)) {
2434 alnDispParams->seqID->WriteAsFasta(
out);
2438 *alnDispParams->seqID);
2446 if(alnDispParams->gi !=
ZERO_GI){
2447 out<<
"<a name="<<alnDispParams->gi<<
"></a>";
2450 out<<
"<a name="<<alnDispParams->seqID->GetSeqIdString(
true)<<
"></a>";
2451 aln_vec_info->id_label = alnDispParams->label;
2456 out << alnDispParams->linkoutStr;
2457 if(!alnDispParams->dumpGnlUrl.empty()) {
2459 out<<alnDispParams->dumpGnlUrl;
2464 if (
out.tellp() > 1L) {
2467 if(!alnDispParams->title.empty()) {
2470 HTMLEncode(alnDispParams->title) :
2471 alnDispParams->title);
2484 return formattedString;
2489 int start,
int len,
int frame,
int row,
2490 bool color_mismatch,
2494 _ASSERT((
int)sequence.size() > start);
2495 list<CRange<int> > actualSeqloc;
2496 string actualSeq = sequence.substr(start,
len);
2502 int from=(*iter)->aln_range.GetFrom();
2503 int to=(*iter)->aln_range.GetTo();
2504 int locFrame = (*iter)->seqloc->GetFrame();
2505 if(
id.Match((*iter)->seqloc->GetInterval().GetId())
2506 && locFrame == frame){
2507 bool isFirstChar =
true;
2510 for (
int i=max<int>(from, start);
2511 i<=min<int>(to, start+
len -1);
i++){
2514 isFirstChar =
false;
2518 if(
isalpha((
unsigned char) actualSeq[
i-start])){
2519 actualSeq[
i-start]=
'X';
2522 actualSeq[
i-start]=
'n';
2524 actualSeq[
i-start]=
tolower((
unsigned char) actualSeq[
i-start]);
2528 &&
i == min<int>(to, start+
len)){
2533 actualSeqloc.push_back(eachSeqloc);
2539 if(actualSeqloc.empty()){
2549 bool endTag =
false;
2550 bool frontTag =
false;
2553 for (
int i = 0;
i < (
int)actualSeq.size();
i ++){
2554 bool startStyledOutput =
false,stopStyledOutput =
false;
2555 for (list<
CRange<int> >::iterator iter=actualSeqloc.begin();
2556 iter!=actualSeqloc.end(); iter++){
2557 int from = (*iter).GetFrom() - start;
2558 int to = (*iter).GetTo() - start;
2563 if(to ==
i && to > 0){
2567 startStyledOutput = frontTag;
2568 stopStyledOutput = endTag && frontTag;
2570 if(!isStyled)
out<<actualSeq[
i];
2571 if(endTag && frontTag){
2585 for (
int row=0; row<
m_AV->GetNumRows(); row++) {
2592 =
m_AV->GetAlnChunks(row,
m_AV->GetSeqAlnRange(antirow));
2593 for (
int i=0;
i<chunk_vec->size();
i++) {
2595 if (chunk->IsGap()) {
2596 gap += (chunk->GetAlnRange().GetTo()
2597 - chunk->GetAlnRange().GetFrom() + 1);
2604 for (
int row=0; row<
m_AV->GetNumRows(); row++) {
2606 =
m_AV->GetAlnChunks(row,
m_AV->GetSeqAlnRange(0));
2607 for (
int i=0;
i<chunk_vec->size();
i++) {
2609 if (chunk->IsGap()) {
2610 gap += (chunk->GetAlnRange().GetTo()
2611 - chunk->GetAlnRange().GetFrom() + 1);
2620 int custom_genetic_code,
2623 int row,
string& sequence,
2625 list<ENa_strand>& feat_seq_strand,
2626 bool fill_feat_range )
const
2631 TGi gi_temp =
FindGi(
m_AV->GetBioseqHandle(row).GetBioseqCore()->GetId());
2632 if(gi_temp >
ZERO_GI || row == 0){
2635 TSeqPos seq_start =
m_AV->GetSeqPosFromAlnPos(row, 0);
2636 TSeqPos seq_stop =
m_AV->GetSeqPosFromAlnPos(row,
m_AV->GetAlnStop());
2639 GetRangeSeq_loc(
min(seq_start, seq_stop),
2640 max(seq_start, seq_stop));
2644 for (
CFeat_CI feat(scope, *loc_ref, sel); feat; ++feat) {
2645 const CSeq_loc& loc = feat->GetLocation();
2646 bool has_id =
false;
2647 list<CSeq_loc_CI::TRange> isolated_range;
2649 bool first_loc =
true, mixed_strand =
false, mix_loc =
false;
2651 TSeqPos other_seqloc_length = 0;
2656 const CSeq_id& id_it = loc_it.GetSeq_id();
2658 isolated_range.push_back(loc_it.GetRange());
2660 feat_seq_range = loc_it.GetRange();
2662 feat_seq_range += loc_it.GetRange();
2665 if(loc_it.IsSetStrand()){
2666 feat_strand = loc_it.GetStrand();
2675 if(!first_loc && prev_strand != feat_strand){
2676 mixed_strand =
true;
2679 prev_strand = feat_strand;
2684 other_seqloc_length += loc_it.GetRange().GetLength();
2690 if(!has_id || mixed_strand){
2696 char feat_char =
' ';
2700 TSeqPos actual_feat_seq_start = 0, actual_feat_seq_stop = 0;
2708 if(
m_AV->IsPositiveStrand(row)){
2709 actual_feat_seq_start =
2711 actual_feat_seq_stop =
2712 min(feat_seq_range.
GetTo(), seq_stop);
2715 actual_feat_seq_start =
2716 min(feat_seq_range.
GetTo(), seq_start);
2717 actual_feat_seq_stop =
2720 int genetic_code = -1;
2723 m_AV->GetAlnPosFromSeqPos(row, actual_feat_seq_start);
2725 m_AV->GetAlnPosFromSeqPos(row, actual_feat_seq_stop);
2732 string raw_cdr_product =
2734 isolated_range, handle, feat_strand,
2735 featId, other_seqloc_length%3 == 0 ?
2736 0 : 3 - other_seqloc_length%3,
2738 if (feat->IsSetData() && feat->GetData().IsCdregion() && feat->GetData().GetCdregion().IsSetCode()) {
2739 genetic_code = feat->GetData().GetCdregion().GetCode().GetId();
2751 string line(aln_stop+1,
' ');
2753 for (
TSeqPos i = feat_aln_from;
i <= feat_aln_to;
i ++){
2759 ITERATE(list<CSeq_loc_CI::TRange>, iter, isolated_range){
2760 total_coding_len += iter->GetLength();
2767 char gap_char =
m_AV->GetGapChar(row);
2768 string concat_exon =
2773 other_seqloc_length%3 == 0 ?
2774 0 : 3 - other_seqloc_length%3);
2779 if (fill_feat_range) {
2780 list<CRange<TSeqPos> > master_feat_range;
2783 feat, isolated_range,
2784 feat_strand,
m_AV, row,
2785 other_seqloc_length%3 == 0 ?
2787 3 - other_seqloc_length%3);
2788 if(!(master_feat_range.empty())) {
2789 feat_range_list.push_back(master_feat_range);
2790 feat_seq_strand.push_back(master_strand);
2795 TSeqPos feat_aln_start_totalexon = 0;
2796 TSeqPos prev_feat_aln_start_totalexon = 0;
2797 TSeqPos prev_feat_seq_stop = 0;
2799 bool is_first =
true;
2800 bool is_first_exon_start =
true;
2810 isolated_range.reverse();
2813 ITERATE(list<CSeq_loc_CI::TRange>, iter, isolated_range){
2818 intron_size += iter->GetFrom()
2819 - prev_feat_seq_stop - 1;
2823 IntersectionWith(*iter);
2824 if(!actual_feat_seq_range.
Empty()){
2829 if(
m_AV->IsPositiveStrand(row)){
2833 (row, actual_feat_seq_range.
GetFrom());
2835 =
m_AV->GetAlnPosFromSeqPos
2836 (row, actual_feat_seq_range.
GetTo());
2841 (row, actual_feat_seq_range.
GetTo());
2843 =
m_AV->GetAlnPosFromSeqPos
2844 (row, actual_feat_seq_range.
GetFrom());
2849 i <= feat_aln_stop;
i ++){
2850 if(sequence[
i] != gap_char){
2857 =
m_AV->GetSeqPosFromAlnPos(row,
i) -
2858 intron_size - feat_seq_range.
GetFrom();
2859 if(product_adj_seq_pos <
2860 concat_exon.size()){
2864 concat_exon[product_adj_seq_pos];
2868 if(
m_AV->IsPositiveStrand(row)){
2870 if(is_first_exon_start &&
2873 feat_aln_start_totalexon =
2875 - product_adj_seq_pos + 1;
2876 is_first_exon_start =
false;
2879 feat_aln_start_totalexon =
2880 product_adj_seq_pos;
2881 is_first_exon_start =
false;
2887 if(is_first_exon_start &&
2889 feat_aln_start_totalexon =
2891 - product_adj_seq_pos + 1;
2892 is_first_exon_start =
false;
2893 prev_feat_aln_start_totalexon =
2894 feat_aln_start_totalexon;
2896 if(!is_first_exon_start){
2901 feat_aln_start_totalexon =
2903 - product_adj_seq_pos + 1),
2904 prev_feat_aln_start_totalexon);
2905 prev_feat_aln_start_totalexon =
2906 feat_aln_start_totalexon;
2909 feat_aln_start_totalexon =
2910 max(prev_feat_aln_start_totalexon,
2911 product_adj_seq_pos);
2913 prev_feat_aln_start_totalexon =
2914 feat_aln_start_totalexon;
2925 prev_feat_seq_stop = iter->GetTo();
2928 alternativeFeatStr = line;
2930 feat_aln_start_totalexon,
2931 m_AV->IsPositiveStrand(row) ?
2933 feat_strand, featInfo->feature_start);
2939 feat_aln_from, feat_aln_to, aln_stop,
2940 feat_char, featId, alternativeFeatStr, genetic_code);
2941 feature.push_back(featInfo);
2951 int aln_to,
int aln_stop,
2952 char pattern_char,
string pattern_id,
2953 string& alternative_feat_str,
2954 int genetic_code)
const
2957 feat->seqloc = &seqloc;
2958 feat->feature_char = pattern_char;
2959 feat->feature_id = pattern_id;
2962 feat_info->feature_string = alternative_feat_str;
2965 string line(aln_stop+1,
' ');
2966 for (
int j = aln_from; j <= aln_to; j++){
2967 line[j] = feat->feature_char;
2969 feat_info->feature_string = line;
2971 feat_info->genetic_code = genetic_code;
2972 feat_info->aln_range.Set(aln_from, aln_to);
2973 feat_info->feature = feat;
2983 static int x_AddBar(
string& seq,
int insert_alnpos,
int aln_start){
2984 int end = (
int)seq.size() -1 ;
2985 int barPos = insert_alnpos - aln_start + 1;
2987 if(barPos - end > 1){
2988 string spacer(barPos - end - 1,
' ');
2989 addOn += spacer +
"|";
2990 }
else if (barPos - end == 1){
2994 return max<int>((barPos - end), 0);
3006 static int s_AdjustInsert(
string& cur_insert,
string& new_insert,
3007 int insert_alnpos,
int aln_start)
3010 int curInsertSize = (
int)cur_insert.size();
3011 int insertLeftSpace = insert_alnpos - aln_start - curInsertSize + 2;
3013 if(curInsertSize > 0){
3014 _ASSERT(insertLeftSpace >= 2);
3016 int newInsertSize = (
int)new_insert.size();
3017 if(insertLeftSpace - newInsertSize >= 1){
3019 string spacer(insertLeftSpace - newInsertSize,
' ');
3020 cur_insert += spacer + new_insert;
3023 if(curInsertSize > 0){
3024 cur_insert +=
" " + new_insert;
3026 cur_insert += new_insert;
3029 insertEnd = aln_start + (
int)cur_insert.size() -1 ;
3037 list<string>& inserts)
const {
3038 if(!insert_list.empty()){
3043 bool isFirstInsert =
true;
3044 int curInsertAlnStart = 0;
3045 int prvsInsertAlnEnd = 0;
3050 curInsertAlnStart = (*iter)->aln_start;
3052 if(isFirstInsert || curInsertAlnStart - prvsInsertAlnEnd >= 1){
3053 bar[curInsertAlnStart-aln_start+1] =
'|';
3054 int seqStart = (*iter)->seq_start;
3055 int seqEnd = seqStart + (*iter)->insert_len - 1;
3057 newInsert =
m_AV->GetSeqString(newInsert, row, seqStart,
3060 curInsertAlnStart, aln_start);
3061 isFirstInsert =
false;
3063 bar[curInsertAlnStart-aln_start+1] =
'|';
3065 prvsInsertAlnEnd +=
x_AddBar(seq, curInsertAlnStart, aln_start);
3068 leftOverInsertList.push_back(*iter);
3073 inserts.push_back(bar);
3074 inserts.push_back(seq);
3076 x_DoFills(row, aln_range, aln_start, leftOverInsertList, inserts);
3083 int aln_start, list<string>& inserts,
3084 string& insert_pos_string,
3088 string line(aln_range.
GetLength(),
' ');
3091 int from = (*iter)->aln_start;
3092 line[from - aln_start + 1] =
'\\';
3094 insert_pos_string = line;
3098 x_DoFills(row, aln_range, aln_start, insert_list, inserts);
3109 while(!insert_aln_start.empty()
3110 && (
int)insert_aln_start.front() < line_aln_stop){
3112 insert->aln_start = insert_aln_start.front() - 1;
3114 insert->seq_start = insert_seq_start.front();
3115 insert->insert_len = insert_length.front();
3116 insert_list.push_back(insert);
3117 insert_aln_start.pop_front();
3118 insert_seq_start.pop_front();
3119 insert_length.pop_front();
3132 string idString =
m_AV->GetSeqId(1).GetSeqIdString();
3135 segs = iter->second.segs;
3170 if(seg.
GetStd().size() > 1){
3175 if((*iterStdseg)->IsSetScores()){
3176 aln->
SetScore() = (*iterStdseg)->GetScores();
3178 aln->
SetSegs().SetStd().push_back(*iterStdseg);
3179 alnSetRef->
Set().push_back(aln);
3183 alnSetRef->
Set().push_back(*iter);
3192 if((*iterDendiag)->IsSetScores()){
3193 aln->
SetScore() = (*iterDendiag)->GetScores();
3195 aln->
SetSegs().SetDendiag().push_back(*iterDendiag);
3196 if((*iter)->IsSetType() && (*iter)->CanGetType()){
3197 aln->
SetType((*iter)->GetType());
3200 alnSetRef->
Set().push_back(aln);
3204 alnSetRef->
Set().push_back(*iter);
3208 alnSetRef->
Set().push_back(*iter);
3226 if((*iterStdseg)->IsSetScores()){
3227 aln->
SetScore() = (*iterStdseg)->GetScores();
3229 aln->
SetSegs().SetStd().push_back(*iterStdseg);
3230 alnSetRef->
Set().push_back(aln);
3236 if((*iterDendiag)->IsSetScores()){
3237 aln->
SetScore() = (*iterDendiag)->GetScores();
3239 aln->
SetSegs().SetDendiag().push_back(*iterDendiag);
3240 alnSetRef->
Set().push_back(aln);
3244 alnSetRef->
Set().push_back(*iter);
3258 bool first_align =
true;
3263 if((*iterStdseg)->IsSetScores()){
3264 aln->
SetScore() = (*iterStdseg)->GetScores();
3267 first_align =
false;
3268 std::vector< CRef< CScore > >& scores_in = (*iter)->SetScore();
3270 if ((*it_in)->IsSetId()) {
3273 std::vector< CRef< CScore > >& scores_out = aln->
SetScore();
3275 if ((*it_out)->IsSetId()) {
3276 if (score_id.
Match ((*it_out)->GetId())) {
3282 scores_out.push_back (*it_in);
3288 aln->
SetSegs().SetStd().push_back(*iterStdseg);
3289 alnSetRef->
Set().push_back(aln);
3294 if((*iterDendiag)->IsSetScores()){
3295 aln->
SetScore() = (*iterDendiag)->GetScores();
3297 first_align =
false;
3298 std::vector< CRef< CScore > >& scores_in = (*iter)->SetScore();
3300 if ((*it_in)->IsSetId()) {
3303 std::vector< CRef< CScore > >& scores_out = aln->
SetScore();
3305 if ((*it_out)->IsSetId()) {
3306 if (score_id.
Match ((*it_out)->GetId())) {
3312 scores_out.push_back (*it_in);
3318 aln->
SetSegs().SetDendiag().push_back(*iterDendiag);
3319 alnSetRef->
Set().push_back(aln);
3323 alnSetRef->
Set().push_back(*iter);
3336 (
new char[strGeneLinkUrl.size() + 1024]);
3337 sprintf(
buf.get(), strGeneLinkUrl.c_str(),
3342 strGeneLinkUrl.assign(
buf.get());
3343 return strGeneLinkUrl;
3357 out <<
"Sort alignments for this subject sequence by:\n";
3364 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3367 <<
"#" << id_label <<
"\">";
3378 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3381 <<
"#" << id_label <<
"\">";
3392 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3395 <<
"#" << id_label <<
"\">";
3397 out <<
"Percent identity";
3404 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3407 <<
"#" << id_label <<
"\">";
3409 out <<
"Query start position";
3416 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3419 <<
"#" << id_label <<
"\">";
3421 out <<
"Subject start position";
3437 for(
int i = 0;
i < 5;
i++) {
3460 out << url_link <<
"\n";
3470 (type_temp.find(
"genome") != string::npos ||
3471 type_temp ==
"mapview" ||
3472 type_temp ==
"mapview_prev" ||
3473 type_temp ==
"gsfasta" || type_temp ==
"gsfasta_prev")){
3476 int master_start =
m_AV->GetSeqStart(0) + 1;
3477 int master_stop =
m_AV->GetSeqStop(0) + 1;
3478 int subject_start =
m_AV->GetSeqStart(1) + 1;
3479 int subject_stop =
m_AV->GetSeqStop(1) + 1;
3483 sprintf(
buffer,
"<a name = %s_%d_%d_%d_%d_%d></a>",
3484 subj_id_str.c_str(), aln_vec_info->score,
3485 min(master_start, master_stop),
3486 max(master_start, master_stop),
3487 min(subject_start, subject_stop),
3488 max(subject_start, subject_stop));
3496 string evalue_buf, bit_score_buf, total_bit_buf, raw_score_buf;
3498 aln_vec_info->bits, 0, 0, evalue_buf,
3499 bit_score_buf, total_bit_buf, raw_score_buf);
3506 string hidePrevNaviagtion,hideNextNaviagtion, hideFirstNavigation;
3508 hidePrevNaviagtion =
"disabled=\"disabled\"";
3509 hideFirstNavigation =
"hidden";
3512 hideNextNaviagtion =
"disabled=\"disabled\"";
3540 if (aln_vec_info->sum_n > 0) {
3550 if (aln_vec_info->comp_adj_method == 1){
3554 else if (aln_vec_info->comp_adj_method == 2){
3572 string evalue_buf, bit_score_buf, total_bit_buf, raw_score_buf;
3574 aln_vec_info->
bits, 0, 0, evalue_buf,
3575 bit_score_buf, total_bit_buf, raw_score_buf);
3581 out<<
" NW Score = "<< aln_vec_info->
score;
3589 out<<
" Score = "<<aln_vec_info->
score<<
"\n";
3592 out<<
" Score = "<<bit_score_buf<<
" ";
3593 out<<
"bits ("<<aln_vec_info->
score<<
"),"<<
" ";
3595 if (aln_vec_info->
sum_n > 0) {
3596 out <<
"(" << aln_vec_info->
sum_n <<
")";
3598 out <<
" = " << evalue_buf;
3600 out <<
", Method: Composition-based stats.";
3602 out <<
", Method: Compositional matrix adjust.";
3616 bool showSortControls =
false;
3633 showSortControls =
true;
3661 if(!(alnDispParams->seqID->AsFastaString().find(
"gnl|BL_ORD_ID") != string::npos) ||
3662 alnDispParams->seqID->AsFastaString().find(
"lcl|Subject_") != string::npos){
3664 seqid = alnDispParams->seqID->AsFastaString();
3685 string hspNum,isFirstDflAttr;
3692 isFirstDflAttr =
"hidden";
3697 string alnIdLbl = (alnDispParams->gi !=
ZERO_GI) ?
3700 string linkoutStr, dnldLinkStr;
3702 linkoutStr = (!alnDispParams->linkoutStr.empty()) ? alnDispParams->linkoutStr :
"";
3703 dnldLinkStr = alnDispParams->dumpGnlUrl;
3715 string firstDefline;
3717 list<string>& use_this_seqid = aln_vec_info->use_this_seqid;
3721 bool isFirst =
true;
3732 string alnDefLine =
x_MapDefLine(alnDispParams,isFirst,
false,
false,seqLength);
3741 *alnDispParams->
seqID);
3746 delete alnDispParams;
3747 firstDefline = alnDefLine;
3753 iter = bdl.begin(); iter != bdl.end(); iter++){
3757 bool hideDefline = (numBdl > 1)?
true :
false;
3776 alnDispParams->
seqID->AsFastaString();
3781 *alnDispParams->
seqID);
3786 vector <string> parts;
3788 if(parts.size() > 0) {
3795 if( (isFirst && firstGi ==
ZERO_GI) || (alnDispParams->
gi == firstGi && firstGi !=
ZERO_GI) ) {
3802 firstDefline = alnDefLine;
3805 deflines += alnDefLine;
3815 delete alnDispParams;
3821 deflines = firstDefline;
3831 deflines = firstDefline + alnTitleslnk + alnTitles;
3843 string deflines, linkOutStr,customLinkStr;
3844 list<string> linkoutStr;
3852 customLinkStr += *iter_custList;
3857 linkOutStr += *iter_List;
3887 string hideDndl = (
m_BlastType ==
"sra")?
"hidden":
"";
3922 if(sortOneAln.empty()) {
3976 bool showSortControls)
4001 (
int)
m_AV->GetAlnStop(),
4004 aln_vec_info->
match,
4006 m_AV->StrandSign(0),
4007 m_AV->StrandSign(1),
4024 int addToRange = (
int)((to - from) * 0.05);
4025 int fromAdjust =
max(0,(
int)from - addToRange);
4026 int toAdjust = to + addToRange;
4027 string customLinkStr;
4033 hspLinks += singleLink;
4038 string multiHSP = (hspLinks.empty()) ?
"hidden" :
"" ;
4078 alignInfo += alignRows;
4086 aln_vec_info->feat5 =
NULL;
4087 aln_vec_info->feat3 =
NULL;
4088 aln_vec_info->feat_list.clear();
4091 && (
int)
m_AV->GetBioseqHandle(1).GetBioseqLength()
4095 aln_vec_info->actual_range =
range;
4097 aln_vec_info->actual_range.Set(
range.GetTo(),
range.GetFrom());
4104 aln_vec_info->feat_list =
m_DynamicFeature->GetFeatInfo(id_str, aln_vec_info->actual_range, aln_vec_info->feat5, aln_vec_info->feat3, 2);
4138 string(
m_IsDbNa ?
"nucleotide" :
"protein"),
4148 return alignFeature;
4155 string alignParams = alignInfo;
4161 string allAlnFeatures =
"";
4162 if(aln_vec_info->feat_list.size() > 0) {
4163 ITERATE(vector<SFeatInfo*>, iter, aln_vec_info->feat_list){
4166 aln_vec_info->subject_gi,
4167 (*iter)->range.GetFrom(),
4168 (*iter)->range.GetTo(),
4173 allAlnFeatures += alignFeature;
4176 if(aln_vec_info->feat5 || aln_vec_info->feat3){
4180 if(aln_vec_info->feat5){
4182 aln_vec_info->subject_gi,
4183 aln_vec_info->feat5->range.GetFrom(),
4184 aln_vec_info->feat5->range.GetTo(),
4185 NStr::IntToString(aln_vec_info->actual_range.GetFrom() - aln_vec_info->feat5->range.GetTo()) + (
string)
" bp at 5' side: " + aln_vec_info->feat5->feat_str);
4186 allAlnFeatures += alignFeature;
4188 if(aln_vec_info->feat3){
4191 aln_vec_info->subject_gi,
4192 aln_vec_info->feat3->range.GetFrom(),
4193 aln_vec_info->feat3->range.GetTo(),
4194 NStr::IntToString(aln_vec_info->feat3->range.GetFrom() - aln_vec_info->actual_range.GetTo()) + (
string)
" bp at 3' side: " + aln_vec_info->feat3->feat_str);
4195 allAlnFeatures += alignFeature;
4198 if(!allAlnFeatures.empty()) {
4213 if(aln_vec_info->feat_list.size() > 0) {
4214 out <<
" Features in this part of subject sequence:" <<
"\n";
4215 ITERATE(vector<SFeatInfo*>, iter, aln_vec_info->feat_list){
4220 m_IsDbNa ?
"nucleotide" :
"protein",
4221 (*iter)->range.GetFrom() +1 ,
4222 (*iter)->range.GetTo() + 1,
4226 out << (*iter)->feat_str;
4233 if(aln_vec_info->feat5 || aln_vec_info->feat3){
4234 out <<
" Features flanking this part of subject sequence:" <<
"\n";
4236 if(aln_vec_info->feat5){
4241 m_IsDbNa ?
"nucleotide" :
"protein",
4242 aln_vec_info->feat5->range.GetFrom() + 1 ,
4243 aln_vec_info->feat5->range.GetTo() + 1,
4248 out << aln_vec_info->actual_range.GetFrom() - aln_vec_info->feat5->range.GetTo()
4249 <<
" bp at 5' side: " << aln_vec_info->feat5->feat_str;
4255 if(aln_vec_info->feat3){
4260 m_IsDbNa ?
"nucleotide" :
"protein",
4261 aln_vec_info->feat3->range.GetFrom() + 1 ,
4262 aln_vec_info->feat3->range.GetTo() + 1,
4267 out << aln_vec_info->feat3->range.GetFrom() - aln_vec_info->actual_range.GetTo()
4268 <<
" bp at 3' side: " << aln_vec_info->feat3->feat_str;
4275 if(aln_vec_info->feat_list.size() > 0 || aln_vec_info->feat5 || aln_vec_info->feat3 ){
4290 bool has_valid_loc =
false;
4291 for (
int i=0;
i<
m_AV->GetNumRows();
i++){
4295 m_AV->GetSeqRange(
i).IntersectingWith(loc_range)){
4296 int actualAlnStart = 0, actualAlnStop = 0;
4297 if(
m_AV->IsPositiveStrand(
i)){
4299 m_AV->GetAlnPosFromSeqPos(
i,
4303 m_AV->GetAlnPosFromSeqPos(
i,
4308 m_AV->GetAlnPosFromSeqPos(
i,
4312 m_AV->GetAlnPosFromSeqPos(
i,
4316 alnloc->aln_range.Set(actualAlnStart, actualAlnStop);
4317 has_valid_loc =
true;
4321 if (has_valid_loc) {
4322 alnloc->seqloc = *iter;
4323 loc_list.push_back(alnloc);
4331 vector<TSAlnFeatureInfoList>& retval)
4335 retval.resize(row_num);
4340 for(
int i = 0;
i < row_num;
i++){
4341 if((*iter)->seqloc->GetInt().GetId().Match(
m_AV->GetSeqId(
i))){
4342 int actualSeqStart = 0, actualSeqStop = 0;
4343 if(
m_AV->IsPositiveStrand(
i)){
4344 if((*iter)->seqloc->GetInt().GetFrom()
4345 <
m_AV->GetSeqStart(
i)){
4346 actualSeqStart =
m_AV->GetSeqStart(
i);
4348 actualSeqStart = (*iter)->seqloc->GetInt().GetFrom();
4351 if((*iter)->seqloc->GetInt().GetTo() >
4352 m_AV->GetSeqStop(
i)){
4353 actualSeqStop =
m_AV->GetSeqStop(
i);
4355 actualSeqStop = (*iter)->seqloc->GetInt().GetTo();
4358 if((*iter)->seqloc->GetInt().GetFrom()
4359 <
m_AV->GetSeqStart(
i)){
4360 actualSeqStart = (*iter)->seqloc->GetInt().GetFrom();
4362 actualSeqStart =
m_AV->GetSeqStart(
i);
4365 if((*iter)->seqloc->GetInt().GetTo() >
4366 m_AV->GetSeqStop(
i)){
4367 actualSeqStop = (*iter)->seqloc->GetInt().GetTo();
4369 actualSeqStop =
m_AV->GetSeqStop(
i);
4372 int alnFrom =
m_AV->GetAlnPosFromSeqPos(
i, actualSeqStart);
4373 int alnTo =
m_AV->GetAlnPosFromSeqPos(
i, actualSeqStop);
4377 if (alnTo - alnFrom >= 0){
4379 alnTo, aln_stop, (*iter)->feature_char,
4380 (*iter)->feature_id, tempFeat, -1);
4381 retval[
i].push_back(featInfo);
4390 string& final_domain) {
4392 string domain_string(aln_to - aln_from + 1,
' ');
4394 if (domain_string.size() > 2){
4396 for (
int i = 0;
i < (
int)domain_string.size();
i++){
4397 domain_string[
i] =
'-';
4399 domain_string[0] =
'<';
4400 domain_string[domain_string.size()-1] =
'>';
4402 int midpoint = ((
int)domain_string.size())/2;
4403 int first_possible_pos = 1;
4404 int actual_first_pos =
max(first_possible_pos, midpoint - ((
int)domain_name.size())/2);
4406 for (
SIZE_TYPE i = actual_first_pos, j = 0;
i < domain_string.size() - 1 && j < domain_name.size();
i ++, j ++){
4407 domain_string[
i] = domain_name[j];
4412 final_domain[
i + aln_from] = domain_string[
i];
4417 vector<TSAlnFeatureInfoList>& retval)
const
4421 string final_domain (
m_AV->GetAlnStop() + 1,
' ');
4422 int last_aln_to =
m_AV->GetAlnStop();
4425 if((*iter)->seqloc->GetInt().GetId().Match(
m_AV->GetSeqId(0))){
4426 int actualSeqStart = 0, actualSeqStop = 0;
4427 if(
m_AV->IsPositiveStrand(0)){
4428 actualSeqStart =
max((
int)
m_AV->GetSeqStart(0),
4429 (
int)(*iter)->seqloc->GetInt().GetFrom());
4431 actualSeqStop =
min((
int)
m_AV->GetSeqStop(0),
4432 (
int)(*iter)->seqloc->GetInt().GetTo());
4434 int alnFrom =
m_AV->GetAlnPosFromSeqPos(0, actualSeqStart);
4436 if (actualSeqStart > 0 && (*iter)->is_subject_start_valid) {
4438 m_AV->GetAlnPosFromSeqPos(0, actualSeqStart - 1) > 1) {
4440 int subj_aln_from =
m_AV->GetAlnPosFromSeqPos(1,
4441 (
int)(*iter)->subject_seqloc->GetInt().GetFrom());
4442 if (subj_aln_from >= 0) {
4443 alnFrom = subj_aln_from;
4448 int alnTo =
m_AV->GetAlnPosFromSeqPos(0, actualSeqStop);
4450 if (actualSeqStop < (
int)
m_AV->GetSeqStop(0) &&
4451 (*iter)->is_subject_stop_valid) {
4452 if (
m_AV->GetAlnPosFromSeqPos(0, actualSeqStop + 1) - alnTo > 1) {
4454 int subj_aln_to =
m_AV->GetAlnPosFromSeqPos(1,
4455 (
int)(*iter)->subject_seqloc->GetInt().GetTo());
4456 if (subj_aln_to >= 0) {
4457 alnTo = subj_aln_to;
4461 int actual_aln_from =
min(alnFrom,last_aln_to +1);
4462 if (actual_aln_from > alnTo) {
4468 last_aln_to = alnTo;
4478 aln_stop, aln_stop,
' ',
4479 " ", final_domain, -1);
4480 retval[0].push_back(featInfo);
4486 static string kQuery(
"Query");
4489 #ifdef CTOOLKIT_COMPATIBLE
4491 static bool value_set =
false;
4493 if (getenv(
"CTOOLKIT_COMPATIBLE")) {
4512 gi =
m_AV->GetSeqId(row).GetGi();
4537 gi =
m_AV->GetSeqId(row).GetGi();
4570 (toolUrl.find(
"dumpgnl.cgi") != string::npos
4576 for (CSeq_align_set::Tdata::const_iterator
4577 iter = actual_aln_list.
Get().begin();
4578 iter != actual_aln_list.
Get().end()
4582 subid = &((*iter)->GetSeq_id(1));
4603 alnLinksParam->segs +=
",";
4618 TSeqPos currFrom = alnLinksParam->subjRange->GetFrom();
4619 TSeqPos currTo = alnLinksParam->subjRange->GetTo();
4620 alnLinksParam->subjRange->SetFrom(
min(from,currFrom));
4621 alnLinksParam->subjRange->SetTo(
max(to,currTo));
4626 alnLinksParam->hspNumber = (!
first) ? alnLinksParam->hspNumber + 1 : 1;
4648 string idString, prevIdString;
4649 for (CSeq_align_set::Tdata::const_iterator
4650 iter = currSeqAlignIter;
4651 iter != actual_aln_list.
Get().end();iter++) {
4653 subid = &((*iter)->GetSeq_id(1));
4655 if(prevIdString.empty() || prevIdString == idString) {
4661 prevIdString = idString;
4669 unordered_set <string> :: const_iterator idsIter;
4675 if (actual_aln_list.
Get().empty()){
4686 bool showBlastDefline =
false;
4687 for (CSeq_align_set::Tdata::const_iterator
4688 iter = actual_aln_list.
Get().begin();
4689 iter != actual_aln_list.
Get().end();iter++) {
4691 subid = &((*iter)->GetSeq_id(1));
4702 idsIter = selectedIDs.find(currID);
4705 if(idsIter == selectedIDs.end() && idCount < (
int)selectedIDs.size())
continue;
4706 if(idsIter == selectedIDs.end() && idCount >= (
int)selectedIDs.size())
break;
4709 if(previousId.
Empty() ||
4710 !subid->
Match(*previousId)){
4717 showBlastDefline =
true;
4721 showBlastDefline =
false;
4724 if(!previousId.
Empty() &&
4725 !subid->
Match(*previousId)){
4732 if(!(avRef.
Empty())){
4749 alnvecInfo->use_this_seqid,
4750 alnvecInfo->comp_adj_method);
4752 alnvecInfo->alnvec = avRef;
4757 out <<
"Sequence with id "
4759 <<
" no longer exists in database...alignment skipped\n";
4767 static CRef< CScope > m_Scope
User-defined methods of the data storage class.
User-defined methods of the data storage class.
@ eExtreme_Biological
5' and 3'
User-defined methods of the data storage class.
bool GetSeqData(ParserPtr pp, const DataBlk &entry, CBioseq &bioseq, Int4 nodetype, unsigned char *seqconv, Uint1 seq_data_type)
#define BLAST_DEFAULT_MATRIX
Default matrix name: BLOSUM62.
list< TSeqPos > TSeqPosList
TSignedSeqPos GetAlnPosFromSeqPos(TNumrow row, TSeqPos seq_pos, ESearchDirection dir=eNone, bool try_reverse_dir=true) const
const CSeq_id & GetSeqId(TNumrow row) const
bool IsPositiveStrand(TNumrow row) const
TSignedSeqPos GetSeqPosFromAlnPos(TNumrow for_row, TSeqPos aln_pos, ESearchDirection dir=eNone, bool try_reverse_dir=true) const
bool IsNegativeStrand(TNumrow row) const
TRange GetSeqRange(TNumrow row) const
TSeqPos GetSeqStop(TNumrow row) const
int StrandSign(TNumrow row) const
TSeqPos GetSeqStart(TNumrow row) const
const CBioseq_Handle & GetBioseqHandle(TNumrow row) const
void SetAaCoding(TCoding coding)
CSeqVector::TResidue TResidue
void SetGenCode(int gen_code, TNumrow row=-1)
Class for computing sequences' titles ("definitions").
void Reverse(void)
Reverse the segments' orientation.
bool IsSetWidths(void) const
void Assign(const CSerialObject &obj, ESerialRecursionMode how=eRecursive)
overloaded Assign()
const TWidths & GetWidths(void) const
void x_FillSeqid(string &id, int row) const
make the appropriate seqid
@ eShowSequencePropertyLabel
@ eTranslateNucToNucAlignment
@ eShowInfoOnMouseOverSeqid
@ eShowTranslationForLocalSeq
@ eShowAlignStatsForMultiAlignView
void x_DisplayAlnvec(CNcbiOstream &out)
Display the current alnvec.
void x_DisplayAlignInfo(CNcbiOstream &out, SAlnInfo *aln_vec_info)
Display score,bits,expect,method.
list< string > m_HSPLinksList
void x_GetDomainInfo(int row_num, int aln_stop, vector< TSAlnFeatureInfoList > &retval) const
static CRef< objects::CSeq_align_set > PrepareBlastUngappedSeqalignEx(const objects::CSeq_align_set &alnset)
static functions same as PrepareBlastUngappedSeqalign, but process seg scores uniformly even if there...
string x_FormatOneDynamicFeature(string viewerURL, TGi subjectGi, int fromRange, int toRange, string featText)
list< CRef< DomainInfo > > * m_DomainInfo
void x_DisplaySequenceIDForPairwise(SAlnRowInfo *alnRoInfo, int row, bool has_mismatch, CNcbiOstrstream &out)
objects::CGetFeature * m_DynamicFeature
list< FeatureInfo * > * m_QueryFeature
external feature such as phiblast
CNcbiIfstream * m_ConfigFile
string m_CurrAlnID_Lbl
gi(if exists) that is used for html formatting otherwise id without db part
int m_currAlignHsp
Current HSP number for single alignmnet.
string x_GetDumpgnlLink(const list< CRef< objects::CSeq_id > > &ids) const
get dumpgnl url to sequence record
SeqLocColorOption m_SeqLocColor
ILinkoutDB * m_LinkoutDB
Reference to LinkoutDB implementation. Not owned by this class.
virtual string x_DisplayRowData(SAlnRowInfo *alnRoInfo)
Display pairwise alignment.
void x_FillIdentityInfo(const string &sequence_standard, const string &sequence, int &match, int &positive, string &middle_line)
compute number of identical and positive residues and set middle line accordingly
string x_PrintDefLine(const objects::CBioseq_Handle &bsp_handle, SAlnInfo *aln_vec_info)
print defline
void x_DisplaySequenceLine(SAlnRowInfo *alnRoInfo, int row, int prev_stop, CNcbiOstrstream &out)
TSubjectMaskMap m_SubjectMasks
Map of subject masks.
void x_DisplayAlignSortInfo(CNcbiOstream &out, string id_label)
Display Sorting controls.
void x_ShowAlnvecInfoTemplate(CNcbiOstream &out, SAlnInfo *aln_vec_info, bool show_defline)
list< string > m_CustomLinksList
void x_ProcessRowDataSet(SAlnRowInfo *alnRoInfo, int aln_start, vector< int > &prev_stop)
string x_MapDefLine(SAlnDispParams *alnDispParams, bool isFisrt, bool linkout, bool hideDefline, int seqLength)
void x_DoFills(int row, objects::CAlnMap::TSignedRange &aln_range, int aln_start, TSInsertInformationList &insert_list, list< string > &inserts) const
recusively fill the insert for anchored view
void x_PreProcessSeqAlign(objects::CSeq_align_set &actual_aln_list)
Sets m_Segs,m_HspNumber.
string x_FormatDefLinesHeader(const objects::CBioseq_Handle &bsp_handle, SAlnInfo *aln_vec_info)
int x_GetLinkout(const objects::CSeq_id &id)
string m_CurrAlnID_DbLbl
gi(if exists) that is used for html formatting otherwise id with db part like ti:xxxxxxx or GNOMON:XX...
void x_InitAlignLinks(SAlnDispParams *alnDispParams, const list< CRef< objects::CBlast_def_line > > &bdl_list, int lnkDispPrarms)
void x_DisplayInsertsForQueryAnchored(SAlnRowInfo *alnRoInfo, int row, CNcbiOstrstream &out)
int m_ResultPositionIndex
result position index for multiple query case
map< string, struct SAlnLinksParams > m_AlnLinksParams
void DisplaySeqalign(CNcbiOstream &out)
call this to display seqalign
void x_SetFeatureInfo(CRef< SAlnFeatureInfo > feat_info, const objects::CSeq_loc &seqloc, int aln_from, int aln_to, int aln_stop, char pattern_char, string pattern_id, string &alternative_feat_str, int genetic_code) const
set feature info
CRef< objects::CObjectManager > m_FeatObj
SeqLocCharOption m_SeqLocChar
string x_GetGeneLinkUrl(int gene_id)
get the URL of the Gene info link.
void x_ShowAlnvecInfo(CNcbiOstream &out, SAlnInfo *aln_vec_info, bool show_defline)
bool m_UseLongSeqIds
print long sequence ids (with gi and accession with database source)
void x_DisplaySingleAlignParams(CNcbiOstream &out, SAlnInfo *aln_vec_info, bool showSortControls)
Display Sorting controls,score,bits,expect,method,features identities,positives,frames etc.
string x_FormatDynamicFeaturesInfo(string alignInfo, SAlnInfo *aln_vec_info)
string x_FormatAlnHSPLinks(string &alignInfo)
objects::CScope & m_Scope
string x_GetSegs(int row) const
segments starts and stops used for map viewer, etc
AutoPtr< const vector< string > > m_SeqPropertyLabel
void x_GetInserts(TSInsertInformationList &insert_list, objects::CAlnMap::TSeqPosList &insert_aln_start, objects::CAlnMap::TSeqPosList &insert_seq_start, objects::CAlnMap::TSeqPosList &insert_length, int line_aln_stop)
get insert information
CRef< objects::CAlnVec > x_GetAlnVecForSeqalign(const objects::CSeq_align &align)
string x_FormatSingleAlign(SAlnInfo *aln_vec_info)
void x_PrepareDynamicFeatureInfo(SAlnInfo *aln_vec_info)
Calculate data for feature display.
list< CRef< SAlnSeqlocInfo > > TSAlnSeqlocInfoList
List of SAlnSeqlocInfo structures.
string m_MapViewerBuildName
mapviewer build name associated with the sequences in the BLAST database out of which the results are...
CAlignFormatUtil::SLinkoutInfo m_LinkoutInfo
int m_cur_align
Current alignment index (added to the linkout and entrez URL's)
void x_AddTranslationForLocalSeq(vector< TSAlnFeatureInfoList > &retval, vector< string > &sequence) const
void x_DisplayMpvAnchor(CNcbiOstream &out, SAlnInfo *aln_vec_info)
Display anchor for links from mapview.
CDisplaySeqalign(const objects::CSeq_align_set &seqalign, objects::CScope &scope, list< CRef< CSeqLocInfo > > *mask_seqloc=NULL, list< FeatureInfo * > *external_feature=NULL, const char *matrix_name="BLOSUM62")
Constructors.
int m_QueryAnchoredSetIndex
string x_FormatAlignSortInfo()
string x_HTMLSeqIDLink(SAlnRowInfo *alnRoInfo, int row, TGi giToUse)
int x_GetNumGaps()
Count number of total gaps.
void x_DisplayMiddLine(SAlnRowInfo *alnRoInfo, int row, CNcbiOstrstream &out)
string x_PrintDynamicFeatures(void)
void x_DisplayAlnvecInfo(CNcbiOstream &out, SAlnInfo *aln_vec_info, bool show_defline)
display alnvec info
void x_InitAlignParams(objects::CSeq_align_set &actual_aln_list)
Inits align parameters for displaySetup scope for feature fetching and m_DynamicFeature inits m_FeatO...
SAlignTemplates * m_AlignTemplates
string m_AlignedRegionsUrl
void x_GetFeatureInfo(TSAlnFeatureInfoList &feature, int custom_genetic_code, objects::CScope &scope, objects::CSeqFeatData::E_Choice choice, int row, string &sequence, list< list< CRange< TSeqPos > > > &feat_seq_range, list< objects::ENa_strand > &feat_seq_strand, bool fill_feat_range) const
get feature info
string x_FormatAlnBlastInfo(SAlnInfo *aln_vec_info)
string m_PreComputedResID
CDD precomputed results ID.
void x_PrepareIdentityInfo(SAlnInfo *aln_vec_info)
list< CRef< SAlnFeatureInfo > > TSAlnFeatureInfoList
string m_CurrAlnAccession
accession that is displayed
static CRef< objects::CSeq_align_set > PrepareBlastUngappedSeqalign(const objects::CSeq_align_set &alnset)
static functions Need to call this if the seqalign is stdseg or dendiag for ungapped blast alignment ...
CConstRef< objects::CSeq_align_set > m_SeqalignSetRef
reference to seqalign set
string x_FormatIdentityInfo(string alignInfo, SAlnInfo *aln_vec_info)
list< CRef< SInsertInformation > > TSInsertInformationList
void DisplayPairwiseSeqalign(CNcbiOstream &out, unordered_set< string > selectedIDs)
int m_currAlignSeqListIndex
Current subject seq index in descriptions table.
void x_PreProcessSingleAlign(objects::CSeq_align_set::Tdata::const_iterator currSeqAlignIter, objects::CSeq_align_set &actual_aln_list, bool multipleSeqs)
void x_FillLocList(TSAlnSeqlocInfoList &loc_list, const list< CRef< CSeqLocInfo > > *masks) const
convert the passed seqloc list info using alnment coordinates
void x_OutputSeq(string &sequence, const objects::CSeq_id &id, int start, int len, int frame, int row, bool color_mismatch, const TSAlnSeqlocInfoList &loc_list, CNcbiOstream &out) const
display sequence for one row
void x_CalcUrlLinksParams(const objects::CSeq_align &align, string idString, string toolUrl)
string x_DisplayRowDataSet(SAlnRowInfo *alnRoInfo, int aln_start, vector< int > &prev_stop)
void x_FillInserts(int row, objects::CAlnMap::TSignedRange &aln_range, int aln_start, list< string > &inserts, string &insert_pos_string, TSInsertInformationList &insert_list) const
get inserts info
list< string > m_LinkoutList
MiddleLineStyle m_MidLineStyle
TranslatedFrameForLocalSeq m_TranslatedFrameForLocalSeq
void x_DisplaySequenceIDForQueryAnchored(SAlnRowInfo *alnRoInfo, int row, CNcbiOstrstream &out)
void x_PrintFeatures(SAlnRowInfo *alnRoInfo, int row, string &master_feat_str, CNcbiOstream &out)
print out features and fill master_feat_str if applicable
list< CRef< CSeqLocInfo > > * m_Seqloc
display character option for list of seqloc
void x_DisplayBl2SeqLink(CNcbiOstream &out)
Dipslay Bl2seq TBLASTX link.
virtual ~CDisplaySeqalign()
Destructor.
void x_GetQueryFeatureList(int row_num, int aln_stop, vector< TSAlnFeatureInfoList > &features) const
get external query feature info such as phi blast pattern
CRef< objects::CScope > m_featScope
string x_InitDefLinesHeader(const objects::CBioseq_Handle &bsp_handle, SAlnInfo *aln_vec_info)
SAlnDispParams * x_FillAlnDispParams(const CRef< objects::CBlast_def_line > &iter, const objects::CBioseq_Handle &bsp_handle, list< string > &use_this_seqid, TGi firstGi, int numLinkoutReads)
int m_NumBlastDefLines
Number of subject sequence deflines.
CAlignFormatUtil::SSeqURLInfo * x_InitSeqUrl(TGi giToUse, string accession, TTaxId taxid, const list< CRef< objects::CSeq_id > > &ids)
get url to sequence record
void SetSubjectMasks(const TSeqLocInfoVector &masks)
Sets the masks and the masking algorithm used for the subject sequences.
SAlnRowInfo * x_PrepareRowData(void)
Calculate data for pairwise alignment display.
static CRef< objects::CSeq_align_set > PrepareBlastUngappedSeqalignEx2(objects::CSeq_align_set &alnset)
same as PrepareBlastUngappedSeqalign2, but sets aggregate scores.
static string GetLoaderNameFromArgs(CReader *reader=0)
static TRegisterLoaderInfo RegisterInObjectManager(CObjectManager &om, CReader *reader=0, CObjectManager::EIsDefault is_default=CObjectManager::eDefault, CObjectManager::TPriority priority=CObjectManager::kPriority_NotSet)
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
bool Match(const CObject_id &oid2) const
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 ...
namespace ncbi::objects::
Seq-loc iterator class – iterates all intervals from a seq-loc in the correct order.
Template class for iteration on objects of class C (non-medifiable version)
@ eRight
Towards higher aln coord (always to the right)
@ eLeft
Towards lower aln coord (always to the left)
@ eBackwards
Towards lower seq coord (to the left if plus strand, right if minus)
virtual int GetLinkout(TGi gi, const string &mv_build_name)=0
Retrieve the Linkout for a given GI.
Collection of masked regions for a single query sequence.
container_type::const_iterator const_iterator
iterator_bool insert(const value_type &val)
container_type::value_type value_type
string GetSeqIdString(const CSeq_id &id)
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
std::ofstream out("events_result.xml")
main entry point for tests
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
SStrictId_Tax::TId TTaxId
Taxon id type.
const CCgiEntry & GetRequestValue(const string &name, bool *is_found=0) const
const string & GetValue() const
Get the value as a string, (necessarily) prefetching it all if applicable; the result remains availab...
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
const string & GetMsg(void) const
Get message string.
virtual const char * what(void) const noexcept
Standard report (includes full backlog).
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
@ eSerial_AsnText
ASN.1 text.
static string HTMLEncode(const string &str, THTMLEncodeFlags flags=fEncodeAll)
HTML encodes a string. E.g. <.
TGi FindGi(const container &ids)
Return gi from id list if exists, return 0 otherwise.
string GetSeqIdString(bool with_version=false) const
Return seqid string with optional version for text seqid type.
void GetLabel(string *label, ELabelType type=eDefault, TLabelFlags flags=fLabel_Default) const
Append a label for this Seq-id to the supplied string.
bool Match(const CSeq_id &sid2) const
Match() - TRUE if SeqIds are equivalent.
static int WorstRank(const CRef< CSeq_id > &id)
string GetLabel(const CSeq_id &id)
@ eContent
Untagged human-readable accession or the like.
@ eBoth
Type and content, delimited by a vertical bar.
TRange GetTotalRange(void) const
void Add(const CSeq_loc &other)
Simple adding of seq-locs.
void SetPartialStart(bool val, ESeqLocExtremes ext)
set / remove e_Lim fuzz on start or stop (lt/gt - indicating partial interval)
void SetPartialStop(bool val, ESeqLocExtremes ext)
CConstBeginInfo ConstBegin(const C &obj)
Get starting point of non-modifiable object hierarchy.
static CObjectOStream * Open(ESerialDataFormat format, CNcbiOstream &outStream, bool deleteOutStream)
Create serial object writer and attach it to an output stream.
TSeqPos GetStop(const CSeq_loc &loc, CScope *scope, ESeqLocExtremes ext=eExtreme_Positional)
If only one CBioseq is represented by CSeq_loc, returns the position at the stop of the location.
const CSeq_id & GetId(const CSeq_loc &loc, CScope *scope)
If all CSeq_ids embedded in CSeq_loc refer to the same CBioseq, returns the first CSeq_id found,...
ENa_strand GetStrand(const CSeq_loc &loc, CScope *scope=0)
Returns eNa_strand_unknown if multiple Bioseqs in loc Returns eNa_strand_other if multiple strands in...
TSeqPos GetStart(const CSeq_loc &loc, CScope *scope, ESeqLocExtremes ext=eExtreme_Positional)
If only one CBioseq is represented by CSeq_loc, returns the position at the start of the location.
bool IsSameBioseq(const CSeq_id &id1, const CSeq_id &id2, CScope *scope, CScope::EGetBioseqFlag get_flag=CScope::eGetBioseq_All)
Determines if two CSeq_ids represent the same CBioseq.
string GenerateDefline(const CBioseq_Handle &bsh, TUserFlags flags=0)
Main method.
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.
@ eGetId_Best
return the "best" gi (uses FindBestScore(), with CSeq_id::CalculateScore() as the score function
static CRef< CObjectManager > GetInstance(void)
Return the existing object manager or create one.
CSeq_entry_Handle AddTopLevelSeqEntry(CSeq_entry &top_entry, TPriority pri=kPriority_Default, EExist action=eExist_Default)
Add seq_entry, default priority is higher than for defaults or loaders Add object to the score with p...
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
void AddDefaults(TPriority pri=kPriority_Default)
Add default data loaders from object manager.
CConstRef< CBioseq > GetCompleteBioseq(void) const
Get the complete bioseq.
TBioseqCore GetBioseqCore(void) const
Get bioseq core structure.
const CSeqFeatData & GetData(void) const
TSeqPos GetBioseqLength(void) const
bool IsSetProduct(void) const
CScope & GetScope(void) const
Get scope this handle belongs to.
CRef< CSeq_loc > GetRangeSeq_loc(TSeqPos start, TSeqPos stop, ENa_strand strand=eNa_strand_unknown) const
Return CSeq_loc referencing the given range and strand on the bioseq If start == 0,...
@ eCoding_Iupac
Set coding to printable coding (Iupacna or Iupacaa)
SAnnotSelector & SetResolveAll(void)
SetResolveAll() is equivalent to SetResolveMethod(eResolve_All).
SAnnotSelector & SetAdaptiveDepth(bool value=true)
SetAdaptiveDepth() requests to restrict subsegment resolution depending on annotations found on lower...
const CSeq_loc & GetProduct(void) const
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 Empty(void) const THROWS_NONE
Check if CRef is empty – not pointing to any object, which means having a null value.
position_type GetLength(void) const
bool IntersectingWith(const TThisType &r) const
TThisType & Set(position_type from, position_type to)
virtual const string & Get(const string §ion, const string &name, TFlags flags=0) const
Get the parameter value.
#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.
IO_PREFIX::ifstream CNcbiIfstream
Portable alias for ifstream.
NCBI_NS_STD::string::size_type SIZE_TYPE
static string SizetToString(size_t value, TNumToStringFlags flags=0, int base=10)
Convert size_t 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 bool IsBlank(const CTempString str, SIZE_TYPE pos=0)
Check if a string is blank (has no text).
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static SIZE_TYPE Find(const CTempString str, const CTempString pattern, ECase use_case=eCase, EDirection direction=eForwardSearch, SIZE_TYPE occurrence=0)
Find the pattern in the 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.
static string & ToLower(string &str)
Convert string to lower case – string& version.
C::value_type FindBestChoice(const C &container, F score_func)
Find the best choice (lowest score) for values in a container.
static const char label[]
const Tdata & Get(void) const
Get the member data.
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
TId & SetId(void)
Select the variant.
const TDenseg & GetDenseg(void) const
Get the variant data.
Tdata & Set(void)
Assign a value to data member.
TScore & SetScore(void)
Assign a value to Score data member.
E_Choice Which(void) const
Which variant is currently selected.
const TLoc & GetLoc(void) const
Get the Loc member data.
list< CRef< CStd_seg > > TStd
void SetSegs(TSegs &value)
Assign a value to Segs data member.
const TIds & GetIds(void) const
Get the Ids member data.
void SetType(TType value)
Assign a value to Type data member.
const TStd & GetStd(void) const
Get the variant data.
const TDendiag & GetDendiag(void) const
Get the variant data.
list< CRef< CSeq_align > > Tdata
list< CRef< CDense_diag > > TDendiag
const Tdata & Get(void) const
Get the member data.
const TSegs & GetSegs(void) const
Get the Segs member data.
void SetLocation(TLocation &value)
Assign a value to Location data member.
void SetComment(const TComment &value)
Assign a value to Comment data member.
Tdata & Set(void)
Assign a value to data member.
TFrame GetFrame(void) const
Get the Frame member data.
void SetData(TData &value)
Assign a value to Data data member.
const TCdregion & GetCdregion(void) const
Get the variant data.
bool IsSetFrame(void) const
Check if a value has been assigned to Frame data member.
void Select(E_Choice index, EResetVariant reset=eDoResetVariant)
Select the requested variant if needed.
ENa_strand
strand of nucleic acid
const TId & GetId(void) const
Get the Id member data.
const TWhole & GetWhole(void) const
Get the variant data.
TFrom GetFrom(void) const
Get the From member data.
E_Choice Which(void) const
Which variant is currently selected.
TGi GetGi(void) const
Get the variant data.
bool IsLocal(void) const
Check if variant Local is selected.
TTo GetTo(void) const
Get the To member data.
bool IsWhole(void) const
Check if variant Whole is selected.
@ e_Gi
GenInfo Integrated Database.
@ e_not_set
No variant selected.
TSeq & SetSeq(void)
Select the variant.
void SetData(TData &value)
Assign a value to Data data member.
TAnnot & SetAnnot(void)
Assign a value to Annot data member.
const TId & GetId(void) const
Get the Id member data.
list< CRef< CSeq_id > > TId
list< CRef< CSeq_feat > > TFtable
list< CRef< CSeq_annot > > TAnnot
@ e_Ncbieaa
extended ASCII 1 letter aa codes
unsigned int
A callback function used to compare two keys in a database.
HTML library helper classes and functions.
if(yy_accept[yy_current_state])
CMD5 - class for computing Message Digest version 5 checksums.
const TYPE & Get(const CNamedParameterList *param)
range(_Ty, _Ty) -> range< _Ty >
const struct ncbi::grid::netcache::search::fields::SIZE size
int strncmp(const char *str1, const char *str2, size_t count)
Defines NCBI C++ exception handling.
Process information in the NCBI Registry, including working with configuration files.
NCBI C++ stream class wrappers for triggering between "new" and "old" C++ stream libraries.
Useful/utility classes and methods.
static int match(register const pcre_uchar *eptr, register const pcre_uchar *ecode, const pcre_uchar *mstart, int offset_top, match_data *md, eptrblock *eptrb, unsigned int rdepth)
static pcre_uint8 * buffer
static const string kSubject("subject")
Defines BLAST database access classes.
vector< TMaskedQueryRegions > TSeqLocInfoVector
Collection of masked regions for all queries in a BLAST search.
static void s_OutputFeature(string &reference_feat_line, string &feat_line, bool color_feat_mismatch, int start, int len, CNcbiOstream &out, bool is_html)
void s_CalculateIdentity(const string &sequence_standard, const string &sequence, char gap_char, int &match, int &align_length)
static const string k_DefaultCheckboxTempl
static void s_DisplayIdentityInfo(CNcbiOstream &out, int aln_stop, int identity, int positive, int match, int gap, int master_strand, int slave_strand, int master_frame, int slave_frame, bool aln_is_prot)
show blast identity, positive etc.
static const int k_SeqStopMargin
const string k_DefaultAnchorTempl
static const int k_NumFrame
static const int k_GetSubseqThreshhold
static const string k_DefaultSpaceMaintainerTempl
static string s_MapFeatureURL(string viewerURL, string textSeqID, string db, int fromRange, int toRange, string rid)
static CRef< CScope > s_MakeNewMasterSeq(list< list< CRange< TSeqPos > > > &feat_range, list< ENa_strand > &feat_seq_strand, const CBioseq_Handle &handle)
make a new copy of master seq with feature info and return the scope that contains this sequence
static const char k_IntronChar
static int x_AddBar(string &seq, int insert_alnpos, int aln_start)
add a "|" to the current insert for insert on next rows and return the insert end position.
static const char k_IdentityChar
static void s_MakeDomainString(int aln_from, int aln_to, const string &domain_name, string &final_domain)
static string s_GetCdsSequence(int genetic_code, CFeat_CI &feat, CScope &scope, list< CRange< TSeqPos > > &range, const CBioseq_Handle &handle, ENa_strand feat_strand, string &feat_id, TSeqPos frame_adj, bool mix_loc)
return cds coded sequence and fill the id if found
static int s_AdjustInsert(string &cur_insert, string &new_insert, int insert_alnpos, int aln_start)
Add new insert seq to the current insert seq and return the end position of the latest insert.
static const int k_MinDeflinesToShow
static void s_WrapOutputLine(CNcbiOstream &out, const string &str)
wrap line
const string k_DefaultPairwiseWithIdntTempl
static const string k_DumpGnlUrl
static const int k_GetDynamicFeatureSeqLength
static int s_GetFrame(int start, ENa_strand strand, const CSeq_id &id, CScope &sp)
return the frame for a given strand Note that start is zero bases.
static const int k_StartSequenceMargin
static int s_GetStdsegMasterFrame(const CStd_seg &ss, CScope &scope)
reture the frame for master seq in stdseg
static const int k_AlignStatsMargin
static const string k_FrameConversion[k_NumFrame]
const string k_DefaultAnchorWithPosTempl
static const int k_MaxDeflinesToShow
const string k_DefaultFeaturesTempl
static void s_ColorDifferentBases(string &seq, char identity_char, CNcbiOstream &out)
To add color to bases other than identityChar.
static void s_MapSlaveFeatureToMaster(list< CRange< TSeqPos > > &master_feat_range, ENa_strand &master_feat_strand, CFeat_CI &feat, list< CSeq_loc_CI::TRange > &slave_feat_range, ENa_strand slave_feat_strand, CAlnVec *av, int row, TSeqPos frame_adj)
map slave feature info to master seq
static bool s_ProcessStyledContent(string &seq, int currIndex, bool startStyledOutput, bool stopStyledOutput, string tmpl, string &styledSeqStr, CNcbiOstream &out)
To add style to bases for some conditions.
const string k_DefaultMaskSeqLocTempl
static const int k_FeatureIdLen
static string s_GetConcatenatedExon(CFeat_CI &feat, ENa_strand feat_strand, list< CRange< TSeqPos > > &range, TSeqPos total_coding_len, string &raw_cdr_product, TSeqPos frame_adj)
return concatenated exon sequence
static const string k_DefaultCheckboxExTempl
static void s_FillCdsStartPosition(string &line, string &concat_exon, size_t length_per_line, TSeqPos feat_aln_start_totalexon, ENa_strand seq_strand, ENa_strand feat_strand, list< TSeqPos > &start)
fill the cds start positions (1 based)
static const int k_IdStartMargin
static const int k_SequencePropertyLabelMargin
static string s_GetFinalTranslatedString(const CSeq_loc &loc, CScope &scope, int first_encoding_base, int align_length, const string &translation, const string &sequence, char gap_char)
static const int k_ColorMismatchIdentity
threshhold to color mismatch. 98 means 98%
static const char * str(char *buf, int n)
structure for store feature display info
string alignRowTmpl
Template for displayin actual pairwise alignment - BLAST_ALIGN_ROWS.
string alnTitlesTmpl
Template for displaying multiple defline titles.
string alignFeatureLinkTmpl
Template for displaying align features link -ALN_FEATURES_LINK.
string alignInfoFrameTmpl
Template for displaying frame data ALIGN_PARAMS_FRAME, part of BLAST_ALIGN_PARAMS.
string alnSeqInfoTmpl
Template for displaying sequnce link in defline.
string alignQueryAnchTempl
Template for displaying one set of query anchored alignment - BLAST_QUERY_ANCH_NAV.
string alnTitlesLinkTmpl
Template for displaying link for more defline titles.
string alignInfoMethodTmpl
Template for displaying frame data ALIGN_PARAMS_METHOD, part of BLAST_ALIGN_PARAMS.
string alignFeatureTmpl
Template for displaying align features -ALN_FEATURES.
string sortInfoTmpl
Template for displaying Sort by header - SORT_ALIGNS_SEQ.
string alnDefLineTmpl
Template for displaying one defline ALN_DEFLINE_ROW.
string alignInfoTmpl
Template for displaying singe align params - BLAST_ALIGN_PARAMS_NUC,BLAST_ALIGN_PARAMS_PROT.
string alignHeaderTmpl
Template for displaying header,deflines and gene info - BLAST_ALIGN_HEADER.
string alignRowTmplLast
Template for displayin actual last pairwise alignment - BLAST_ALIGN_ROWS_LST.
CRef< objects::CSeq_id > seqID
seqID used in defline
CAlignFormatUtil::SSeqURLInfo * seqUrlInfo
list< CRef< objects::CSeq_id > > ids
string title
sequnce title
store feature information
store alnvec and score info
CRef< objects::CAlnVec > alnvec
vector< objects::SFeatInfo * > feat_list
objects::SFeatInfo * feat5
objects::SFeatInfo * feat3
vector< string > align_stats
vector< objects::CAlnMap::TSignedRange > rowRng
vector< objects::CAlnMap::TSeqPosList > insertLength
bool show_seq_property_label
vector< double > percent_ident
vector< objects::CAlnMap::TSeqPosList > seqStarts
vector< string > seq_property_label
vector< TSAlnSeqlocInfoList > masked_regions
objects::CAlnMap::TSignedRange currRange
vector< objects::CAlnMap::TSeqPosList > insertAlnStart
vector< TSAlnFeatureInfoList > bioseqFeature
vector< objects::CAlnMap::TSeqPosList > insertStart
vector< string > sequence
vector< string > seqidArray
vector< objects::CAlnMap::TSeqPosList > seqStops
int max_seq_property_label
vector< int > align_length