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();
698 ce->SetId(genetic_code);
699 gc.
Set().push_back(ce);
703 raw_cdr_product, &gc);
706 return raw_cdr_product;
718 size_t length_per_line,
719 TSeqPos feat_aln_start_totalexon,
722 list<TSeqPos>& start)
724 size_t actual_line_len = 0;
725 size_t aln_len = line.size();
726 TSeqPos previous_num_letter = 0;
729 for (
size_t i = 0;
i <= feat_aln_start_totalexon;
i ++){
734 int pos = concat_exon.size() -1 -
i;
735 if(pos >= 0 &&
isalpha((
unsigned char) concat_exon[pos])){
736 previous_num_letter ++;
740 if(
isalpha((
unsigned char) concat_exon[
i])){
741 previous_num_letter ++;
750 for(
size_t i = 0;
i < aln_len;
i += actual_line_len){
752 if(aln_len -
i< length_per_line) {
753 actual_line_len = aln_len -
i;
755 actual_line_len = length_per_line;
759 bool has_intron =
false;
762 for(
size_t j =
i; j < actual_line_len +
i; j ++){
764 if(
isalpha((
unsigned char) line[j])){
774 start.push_back(previous_num_letter - prev_num);
776 start.push_back(previous_num_letter + prev_num);
780 start.push_back(previous_num_letter + prev_num);
782 start.push_back(previous_num_letter - prev_num);
785 }
else if (has_intron) {
800 list<ENa_strand>& feat_seq_strand,
830 feat_seq_strand.front())));
833 ftable.push_back(seq_feat);
834 feat_seq_strand.pop_front();
836 anot_list.push_back(anot);
855 bool color_feat_mismatch,
861 if((
int)feat_line.size() > start){
862 string actual_feat = feat_line.substr(start,
len);
865 actual_reference_feat = reference_feat_line.substr(start,
len);
867 if(color_feat_mismatch
870 string styledSequenceStr;
871 for(
int i = 0;
i < (
int)actual_feat.size() &&
872 i < (
int)actual_reference_feat.size();
i ++){
873 bool styledOutput = actual_feat[
i] != actual_reference_feat[
i] &&
875 bool stopStyledOutput = (actual_feat[
i] == actual_reference_feat[
i]) && actual_feat[
i] !=
' ';
877 if(!isStyled)
out << actual_feat[
i];
889 string& master_feat_str,
897 int id_length = alnRoInfo->
maxIdLen;
910 substr(aln_start, line_length)) &&
917 out<<(*iter)->feature->feature_id;
918 if((*iter)->feature_start.empty()){
922 -(*iter)->feature->feature_id.size());
924 int feat_start = (*iter)->feature_start.front();
928 -(*iter)->feature->feature_id.size());
938 -(*iter)->feature->feature_id.size());
941 (*iter)->feature_start.pop_front();
943 bool color_cds_mismatch =
false;
947 color_cds_mismatch =
true;
953 color_cds_mismatch =
true;
956 (*iter)->feature_string,
957 color_cds_mismatch, aln_start,
960 master_feat_str = (*iter)->feature_string;
975 seqUrlInfo->
defline = sequence::CDeflineGenerator().GenerateDefline(bsp_handle);
986 string idString =
m_AV->GetSeqId(1).GetSeqIdString();
1038 if(bdl_list.size() > 0) {
1054 const CSeq_id&
id = sequence_masks->front()->GetSeqId();
1061 int first_encoding_base,
int align_length,
1062 const string& translation,
const string& sequence,
1065 string feat(align_length,
' ');
1069 for (
int i = first_encoding_base;
i < (
int) feat.size() &&
1070 j < (
int)translation.size();
i ++) {
1071 if (sequence[
i] != gap_char) {
1075 if (num_base%3 == 2) {
1076 feat[
i] = translation[j];
1085 vector<string>& sequence)
const {
1086 if (
m_AV->IsPositiveStrand(0) &&
m_AV->IsPositiveStrand(1)) {
1089 int non_gap_aln_pos = 0;
1091 int num_consecutive = 0;
1092 for (
int i =0;
i < (
int) sequence[0].
size();
i ++) {
1093 if (sequence[0][
i] != gap_char &&
1094 sequence[1][
i] != gap_char) {
1097 if (num_consecutive >=3) {
1098 non_gap_aln_pos =
i - 2;
1102 num_consecutive = 0;
1108 int master_frame_extra =
m_AV->GetSeqPosFromAlnPos(0, non_gap_aln_pos)%3;
1109 int master_frame_start;
1111 master_frame_start =
m_AV->GetSeqPosFromAlnPos(0, non_gap_aln_pos) +
1116 m_AV->GetSeqStop(0)));
1119 string master_translation;
1122 master_translation);
1123 int master_first_encoding_base =
m_AV->GetAlnPosFromSeqPos(0, master_frame_start);
1125 master_first_encoding_base,
1126 m_AV->GetAlnStop() + 1,
1128 sequence[0], gap_char);
1133 m_AV->GetAlnStop(),
' ',
1136 retval[0].push_back(master_featInfo);
1139 int subject_frame_start =
m_AV->GetSeqPosFromSeqPos(1, 0, master_frame_start);
1146 string subject_translation;
1149 subject_translation);
1150 int subject_first_encoding_base =
m_AV->GetAlnPosFromSeqPos(1, subject_frame_start);
1152 subject_first_encoding_base,
1153 m_AV->GetAlnStop() + 1,
1154 subject_translation,
1155 sequence[1], gap_char);
1160 m_AV->GetAlnStop(),
' ',
1163 retval[1].push_back(subject_featInfo);
1171 const string& sequence ,
char gap_char,
1172 int&
match,
int& align_length){
1176 int end = (
int)sequence.size() - 1;
1177 for(
int i = 0;
i < (
int)sequence.size();
i++){
1178 if (sequence[
i] != gap_char){
1184 for(
int i = (
int)sequence.size() - 1;
i > 0;
i--){
1185 if (sequence[
i] != gap_char){
1192 for(
int i = start;
i <= end &&
i < (
int)sequence.size() &&
i < (
int)sequence_standard.size();
i++){
1193 if(sequence[
i] == gap_char && sequence_standard[
i] == gap_char) {
1196 if (sequence_standard[
i]==sequence[
i]){
1206 size_t maxIdLen=0, maxStartLen=0;
1209 const int rowNum=
m_AV->GetNumRows();
1213 m_AV->SetGapChar(
'-');
1216 m_AV->SetEndChar(
'-');
1219 m_AV->SetEndChar(
' ');
1221 vector<string> sequence(rowNum);
1222 vector<CAlnMap::TSeqPosList> seqStarts(rowNum);
1223 vector<CAlnMap::TSeqPosList> seqStops(rowNum);
1224 vector<CAlnMap::TSeqPosList> insertStart(rowNum);
1225 vector<CAlnMap::TSeqPosList> insertAlnStart(rowNum);
1226 vector<CAlnMap::TSeqPosList> insertLength(rowNum);
1227 vector<string> seqidArray(rowNum);
1229 vector<CAlnMap::TSignedRange> rowRng(rowNum);
1230 vector<int> frame(rowNum);
1231 vector<TTaxId> taxid(rowNum);
1232 int max_feature_num = 0;
1233 vector<int>
match(rowNum-1);
1234 vector<double> percent_ident(rowNum-1);
1235 vector<int> align_length(rowNum-1);
1236 vector<string> align_stats(rowNum-1);
1237 vector<string> seq_property_label(rowNum-1);
1238 int max_align_stats = 0;
1239 int max_seq_property_label = 0;
1242 vector<TSAlnFeatureInfoList> bioseqFeature;
1247 _ASSERT((
int)bioseqFeature.size() == rowNum);
1249 vector<TSAlnSeqlocInfoList> masked_regions(rowNum);
1252 for (
int row = 1; row < rowNum; row++) {
1258 list<list<CRange<TSeqPos> > > feat_seq_range;
1259 list<ENa_strand> feat_seq_strand;
1261 for (
int row=0; row<rowNum; row++) {
1266 type_temp ==
"gsfasta" || type_temp ==
"gsfasta_prev"){
1276 rowRng[row] =
m_AV->GetSeqAlnRange(row);
1277 frame[row] = (
m_AV->GetWidth(row) == 3 ?
1279 m_AV->GetSeqStart(row) :
1280 m_AV->GetSeqStop(row),
1281 m_AV->IsPositiveStrand(row) ?
1285 m_AV->GetWholeAlnSeqString(row, sequence[row], &insertAlnStart[row],
1286 &insertStart[row], &insertLength[row],
1287 (
int)
m_LineLen, &seqStarts[row], &seqStops[row]);
1292 match[row-1], align_length[row-1]);
1294 if (align_length[row-1] > 0 ){
1295 percent_ident[row-1] = ((double)
match[row-1])/align_length[row-1]*100;
1300 percent_ident[row - 1] = 0;
1301 align_stats[row-1] =
"0";
1304 max_align_stats =
max(max_align_stats,
1305 (
int)align_stats[row-1].
size());
1314 seq_property_label[row-1] = (*m_SeqPropertyLabel)[row];
1319 max_seq_property_label =
max(max_seq_property_label,
1320 (
int)seq_property_label[row-1].
size());
1324 &&
m_AV->GetWidth(row) != 3
1334 GetBioseqCore()->
GetId());
1337 feat_seq_range, feat_seq_strand,
1338 row == 1 && !(master_gi >
ZERO_GI) ?
true :
false);
1340 if(!(feat_seq_range.empty()) && row == 1) {
1345 m_AV->GetBioseqHandle(0));
1347 list<list<CRange<TSeqPos> > > temp_holder;
1350 temp_holder, feat_seq_strand,
false);
1356 feat_seq_range, feat_seq_strand,
false);
1361 maxIdLen=max<size_t>(seqidArray[row].
size(), maxIdLen);
1362 size_t maxCood=max<size_t>(
m_AV->GetSeqStart(row),
m_AV->GetSeqStop(row));
1365 for(
int i = 0;
i < rowNum;
i ++){
1366 int num_feature = 0;
1368 maxIdLen=max<size_t>((*iter)->feature->feature_id.size(), maxIdLen);
1370 if(num_feature > max_feature_num){
1371 max_feature_num = num_feature;
1384 alnRoInfo->
rowRng = rowRng;
1385 alnRoInfo->
frame = frame;
1386 alnRoInfo->
taxid = taxid;
1394 alnRoInfo->
rowNum = rowNum;
1407 size_t aln_stop=
m_AV->GetAlnStop();
1408 int rowNum = alnRoInfo->
rowNum;
1409 vector<int> prev_stop(rowNum);
1415 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1420 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1423 string formattedString;
1426 formattedString += rowdata;
1428 return formattedString;
1433 size_t aln_stop=
m_AV->GetAlnStop();
1434 int rowNum = alnRoInfo->
rowNum;
1435 vector<int> prev_stop(rowNum);
1440 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1445 m_AV->GetWidth(0) != 3 &&
m_AV->GetWidth(1) != 3) ?
true :
false;
1446 int rowSetsCount = 1;
1474 size_t actualLineLen=0;
1476 size_t aln_stop=
m_AV->GetAlnStop();
1478 int rowNum = alnRoInfo->
rowNum;
1484 actualLineLen=aln_stop-aln_start+1;
1493 for (
int row=0; row<rowNum; row++) {
1494 bool hasSequence =
true;
1500 int end = alnRoInfo->
seqStops[row].front() + 1;
1501 bool has_mismatch =
false;
1504 for (
int index = aln_start; index < aln_start + (
int)actualLineLen &&
1505 index < (
int)alnRoInfo->
sequence[row].size(); index ++){
1509 }
else if (!has_mismatch) {
1510 has_mismatch =
true;
1538 prev_stop[row] = end;
1543 if(!alnRoInfo->
seqStops[row].empty()){
1544 alnRoInfo->
seqStops[row].pop_front();
1549 return formattedString;
1554 size_t actualLineLen=0;
1556 size_t aln_stop=
m_AV->GetAlnStop();
1558 int rowNum = alnRoInfo->
rowNum;
1563 actualLineLen=aln_stop-aln_start+1;
1572 for (
int row=0; row<rowNum; row++) {
1573 bool hasSequence =
true;
1579 int end = alnRoInfo->
seqStops[row].front() + 1;
1580 prev_stop[row] = end;
1585 if(!alnRoInfo->
seqStops[row].empty()){
1586 alnRoInfo->
seqStops[row].pop_front();
1594 int start = alnRoInfo->
seqStarts[row].front() + 1;
1595 int end = alnRoInfo->
seqStops[row].front() + 1;
1602 if ((j > 0 && end == prev_stop)
1603 || (j == 0 && start == 1 && end == 1)) {
1612 (
int)actualLineLen, alnRoInfo->
frame[row], row,
1618 if (!(j > 0 && end == prev_stop)
1619 && !(j == 0 && start == 1 && end == 1)) {
1627 list<string> inserts;
1628 string insertPosString;
1635 x_FillInserts(row, curRange, j, inserts, insertPosString, insertList);
1636 bool insertAlready =
false;
1637 for(list<string>::iterator iter = inserts.begin();
1638 iter != inserts.end(); iter ++){
1655 out << insertPosString<<
"\n";
1671 insertAlready =
true;
1697 gi =
m_AV->GetSeqId(row).GetGi();
1701 GetBioseqCore()->
GetId());
1703 string anchorTmpl,checkBoxTmpl,id_lbl;
1726 id_lbl =
"lcl|" + id_lbl;
1730 if(showCheckbox || showAnchor) {
1764 if(!urlLink.empty()) {
1784 size_t aln_stop=
m_AV->GetAlnStop();
1786 aln_vec_info->
match = 0;
1788 aln_vec_info->
gap = 0;
1792 aln_vec_info->
match,
1824 finalAln = densegAln;
1840 finalAln = densegAln;
1844 "Seq-align should be Denseg, Stdseg or Dendiag!");
1848 if((ds->IsSetStrands()
1850 && !(ds->IsSetWidths() && ds->GetWidths()[0] == 3)){
1852 finalDenseg->
Assign(*ds);
1886 string feat_file =
m_Reg->
Get(
"FEATURE_INFO",
"FEATURE_FILE");
1887 string feat_file_index =
m_Reg->
Get(
"FEATURE_INFO",
1888 "FEATURE_FILE_INDEX");
1911 if (actual_aln_list.
Get().empty()){
1937 for (CSeq_align_set::Tdata::const_iterator
1938 iter = actual_aln_list.
Get().begin();
1939 iter != actual_aln_list.
Get().end()
1945 if(!(avRef.
Empty())){
1962 alnvecInfo->use_this_seqid,
1963 alnvecInfo->comp_adj_method);
1964 alnvecInfo->alnvec = avRef;
1967 bool showDefLine = previousId.
Empty() || !subid->
Match(*previousId);
1973 out <<
"Sequence with id "
1975 <<
" no longer exists in database...alignment skipped\n";
1988 vector<CRef<CSeq_align_set> > alnVector(
k_NumFrame);
1992 for (CSeq_align_set::Tdata::const_iterator
1993 alnIter = actual_aln_list.
Get().begin();
1994 alnIter != actual_aln_list.
Get().end()
1998 m_Scope.GetBioseqHandle((*alnIter)->GetSeq_id(1));
2012 alnVector[0]->Set().push_back(convertedDs);
2015 alnVector[1]->Set().push_back(convertedDs);
2018 alnVector[2]->Set().push_back(convertedDs);
2021 alnVector[3]->Set().push_back(convertedDs);
2024 alnVector[4]->Set().push_back(convertedDs);
2027 alnVector[5]->Set().push_back(convertedDs);
2034 alnVector[0]->Set().push_back(convertedDs);
2038 alnVector[0]->Set().push_back(*alnIter);
2044 "Input Seq-align should be Denseg, Stdseg or Dendiag!");
2048 for(
int i = 0;
i < (
int)alnVector.size();
i ++){
2049 bool hasAln =
false;
2051 alnRef =
ConstBegin(*alnVector[
i]); alnRef; ++alnRef){
2058 if (ds->IsSetWidths() &&
2059 ds->GetWidths()[0] == 3 &&
2060 ds->IsSetStrands() &&
2082 int numDistinctFrames = 0;
2083 for(
int i = 0;
i < (
int)alnVector.size();
i ++){
2084 if(!alnVector[
i]->
Get().empty()){
2085 numDistinctFrames ++;
2098 if(numDistinctFrames > 1){
2100 <<
" of query sequence:\n\n";
2115 const string& sequence ,
2117 string& middle_line)
2121 int min_length=min<int>((
int)sequence_standard.size(), (
int)sequence.size());
2123 middle_line = sequence;
2125 for(
int i=0;
i<min_length;
i++){
2126 if(sequence_standard[
i]==sequence[
i]){
2129 middle_line[
i] =
'|';
2131 middle_line[
i] = sequence[
i];
2137 &&
m_Matrix[(
int)sequence_standard[
i]][(
int)sequence[
i]] > 0){
2141 middle_line[
i] =
'+';
2146 middle_line[
i] =
' ';
2165 cerr <<
"[BLAST FORMATTER EXCEPTION] Problem with linkoutdb: " << e.
GetMsg() << endl;
2177 list<string> &use_this_seqid,
2181 SAlnDispParams *alnDispParams =
NULL;
2182 const int kMaxDeflineNum = 10;
2187 const list<CRef<CSeq_id> > ids = bdl->GetSeqid();
2192 bool isGiList =
false;
2194 if(
match && isGiList) gi_in_use_this_gi = gi;
2196 if(use_this_seqid.empty() ||
match) {
2197 firstGi = (firstGi ==
ZERO_GI) ? gi_in_use_this_gi : firstGi;
2198 alnDispParams =
new SAlnDispParams();
2199 alnDispParams->gi = gi;
2209 if(bdl->IsSetTaxid() && bdl->CanGetTaxid()){
2210 taxid = bdl->GetTaxid();
2213 alnDispParams->seqUrlInfo =
x_InitSeqUrl(gi_in_use_this_gi,alnDispParams->label,taxid,ids);
2219 if (alnDispParams->hasTextSeqID) {
2223 alnDispParams->gi) : 0;
2235 ITERATE(list<string>, iter_linkout, linkout_url){
2236 alnDispParams->linkoutStr += *iter_linkout;
2244 if(bdl->IsSetTitle()){
2245 alnDispParams->title = bdl->GetTitle();
2247 if(alnDispParams->title.empty()) {
2251 return alnDispParams;
2258 SAlnDispParams *alnDispParams =
new SAlnDispParams();
2264 alnDispParams->seqUrlInfo =
x_InitSeqUrl(alnDispParams->gi,alnDispParams->label,
ZERO_TAX_ID,alnDispParams->ids);
2269 return alnDispParams;
2279 static string kLengthString(
"Length=");
2280 #ifdef CTOOLKIT_COMPATIBLE
2281 static bool value_set =
false;
2283 if (getenv(
"CTOOLKIT_COMPATIBLE")) {
2284 kLengthString.assign(
" Length = ");
2298 bool isFirst =
true;
2320 aln_vec_info->id_label = (alnDispParams->gi !=
ZERO_GI) ?
2323 out<<alnDispParams->id_url;
2327 !alnDispParams->seqID->IsGi()){
2328 out<<
"gi|"<<alnDispParams->gi<<
"|";
2330 if(!((alnDispParams->seqID->AsFastaString().find(
"gnl|BL_ORD_ID") != string::npos) ||
2331 alnDispParams->seqID->AsFastaString().find(
"lcl|Subject_") != string::npos)){
2332 if (
strncmp(alnDispParams->seqID->AsFastaString().c_str(),
"lcl|", 4) == 0)
2333 out << alnDispParams->label;
2336 alnDispParams->gi >
ZERO_GI)) {
2337 alnDispParams->seqID->WriteAsFasta(
out);
2349 if(alnDispParams->gi !=
ZERO_GI){
2350 out<<
"<a name="<<alnDispParams->gi<<
"></a>";
2352 out<<
"<a name="<<alnDispParams->seqID->GetSeqIdString()<<
"></a>";
2358 alnDispParams->title);
2364 bool bMultipleDeflines =
false;
2366 int maxNumBdl = (aln_vec_info->use_this_seqid.empty()) ? bdl.size() : aln_vec_info->use_this_seqid.size();
2368 iter = bdl.begin(); iter != bdl.end(); iter++){
2372 aln_vec_info->use_this_seqid,
2385 string mdlTag = aln_vec_info->id_label;
2387 out <<
"<a href=\"#\" title=\"Other sequence titles\" onmouseover=\"showInfo(this)\" class=\"resArrowLinkW mdl hiding\" id=\"" <<
2388 mdlTag <<
"\">" << maxNumBdl -
k_MinDeflinesToShow <<
" more sequence titles" <<
"</a>\n";
2390 out <<
" <div id=\"" <<
"info_" << mdlTag <<
"\" class=\"helpbox mdlbox hidden\">";
2391 bMultipleDeflines =
true;
2396 firstGi = alnDispParams->gi;
2408 out<< alnDispParams->id_url;
2412 !alnDispParams->seqID->IsGi()){
2413 out<<
"gi|"<<alnDispParams->gi<<
"|";
2415 if(!(alnDispParams->seqID->AsFastaString().find(
"gnl|BL_ORD_ID") != string::npos) ||
2416 alnDispParams->seqID->AsFastaString().find(
"lcl|Subject_") != string::npos){
2417 if (
strncmp(alnDispParams->seqID->AsFastaString().c_str(),
"lcl|", 4) == 0) {
2418 out << alnDispParams->label;
2423 alnDispParams->gi >
ZERO_GI)) {
2425 alnDispParams->seqID->WriteAsFasta(
out);
2429 *alnDispParams->seqID);
2437 if(alnDispParams->gi !=
ZERO_GI){
2438 out<<
"<a name="<<alnDispParams->gi<<
"></a>";
2441 out<<
"<a name="<<alnDispParams->seqID->GetSeqIdString(
true)<<
"></a>";
2442 aln_vec_info->id_label = alnDispParams->label;
2447 out << alnDispParams->linkoutStr;
2448 if(!alnDispParams->dumpGnlUrl.empty()) {
2450 out<<alnDispParams->dumpGnlUrl;
2455 if (
out.tellp() > 1L) {
2458 if(!alnDispParams->title.empty()) {
2461 HTMLEncode(alnDispParams->title) :
2462 alnDispParams->title);
2475 return formattedString;
2480 int start,
int len,
int frame,
int row,
2481 bool color_mismatch,
2485 _ASSERT((
int)sequence.size() > start);
2486 list<CRange<int> > actualSeqloc;
2487 string actualSeq = sequence.substr(start,
len);
2493 int from=(*iter)->aln_range.GetFrom();
2494 int to=(*iter)->aln_range.GetTo();
2495 int locFrame = (*iter)->seqloc->GetFrame();
2496 if(
id.Match((*iter)->seqloc->GetInterval().GetId())
2497 && locFrame == frame){
2498 bool isFirstChar =
true;
2501 for (
int i=max<int>(from, start);
2502 i<=min<int>(to, start+
len -1);
i++){
2505 isFirstChar =
false;
2509 if(
isalpha((
unsigned char) actualSeq[
i-start])){
2510 actualSeq[
i-start]=
'X';
2513 actualSeq[
i-start]=
'n';
2515 actualSeq[
i-start]=
tolower((
unsigned char) actualSeq[
i-start]);
2519 &&
i == min<int>(to, start+
len)){
2524 actualSeqloc.push_back(eachSeqloc);
2530 if(actualSeqloc.empty()){
2540 bool endTag =
false;
2541 bool frontTag =
false;
2544 for (
int i = 0;
i < (
int)actualSeq.size();
i ++){
2545 bool startStyledOutput =
false,stopStyledOutput =
false;
2546 for (list<
CRange<int> >::iterator iter=actualSeqloc.begin();
2547 iter!=actualSeqloc.end(); iter++){
2548 int from = (*iter).GetFrom() - start;
2549 int to = (*iter).GetTo() - start;
2554 if(to ==
i && to > 0){
2558 startStyledOutput = frontTag;
2559 stopStyledOutput = endTag && frontTag;
2561 if(!isStyled)
out<<actualSeq[
i];
2562 if(endTag && frontTag){
2574 for (
int row=0; row<
m_AV->GetNumRows(); row++) {
2576 =
m_AV->GetAlnChunks(row,
m_AV->GetSeqAlnRange(0));
2577 for (
int i=0;
i<chunk_vec->size();
i++) {
2579 if (chunk->IsGap()) {
2580 gap += (chunk->GetAlnRange().GetTo()
2581 - chunk->GetAlnRange().GetFrom() + 1);
2592 int row,
string& sequence,
2594 list<ENa_strand>& feat_seq_strand,
2595 bool fill_feat_range )
const
2600 TGi gi_temp =
FindGi(
m_AV->GetBioseqHandle(row).GetBioseqCore()->GetId());
2601 if(gi_temp >
ZERO_GI || row == 0){
2604 TSeqPos seq_start =
m_AV->GetSeqPosFromAlnPos(row, 0);
2605 TSeqPos seq_stop =
m_AV->GetSeqPosFromAlnPos(row,
m_AV->GetAlnStop());
2608 GetRangeSeq_loc(
min(seq_start, seq_stop),
2609 max(seq_start, seq_stop));
2613 for (
CFeat_CI feat(scope, *loc_ref, sel); feat; ++feat) {
2614 const CSeq_loc& loc = feat->GetLocation();
2615 bool has_id =
false;
2616 list<CSeq_loc_CI::TRange> isolated_range;
2618 bool first_loc =
true, mixed_strand =
false, mix_loc =
false;
2620 TSeqPos other_seqloc_length = 0;
2625 const CSeq_id& id_it = loc_it.GetSeq_id();
2627 isolated_range.push_back(loc_it.GetRange());
2629 feat_seq_range = loc_it.GetRange();
2631 feat_seq_range += loc_it.GetRange();
2634 if(loc_it.IsSetStrand()){
2635 feat_strand = loc_it.GetStrand();
2644 if(!first_loc && prev_strand != feat_strand){
2645 mixed_strand =
true;
2648 prev_strand = feat_strand;
2653 other_seqloc_length += loc_it.GetRange().GetLength();
2659 if(!has_id || mixed_strand){
2665 char feat_char =
' ';
2669 TSeqPos actual_feat_seq_start = 0, actual_feat_seq_stop = 0;
2677 if(
m_AV->IsPositiveStrand(row)){
2678 actual_feat_seq_start =
2680 actual_feat_seq_stop =
2681 min(feat_seq_range.
GetTo(), seq_stop);
2684 actual_feat_seq_start =
2685 min(feat_seq_range.
GetTo(), seq_start);
2686 actual_feat_seq_stop =
2691 m_AV->GetAlnPosFromSeqPos(row, actual_feat_seq_start);
2693 m_AV->GetAlnPosFromSeqPos(row, actual_feat_seq_stop);
2700 string raw_cdr_product =
2702 isolated_range, handle, feat_strand,
2703 featId, other_seqloc_length%3 == 0 ?
2704 0 : 3 - other_seqloc_length%3,
2716 string line(aln_stop+1,
' ');
2718 for (
TSeqPos i = feat_aln_from;
i <= feat_aln_to;
i ++){
2724 ITERATE(list<CSeq_loc_CI::TRange>, iter, isolated_range){
2725 total_coding_len += iter->GetLength();
2732 char gap_char =
m_AV->GetGapChar(row);
2733 string concat_exon =
2738 other_seqloc_length%3 == 0 ?
2739 0 : 3 - other_seqloc_length%3);
2744 if (fill_feat_range) {
2745 list<CRange<TSeqPos> > master_feat_range;
2748 feat, isolated_range,
2749 feat_strand,
m_AV, row,
2750 other_seqloc_length%3 == 0 ?
2752 3 - other_seqloc_length%3);
2753 if(!(master_feat_range.empty())) {
2754 feat_range_list.push_back(master_feat_range);
2755 feat_seq_strand.push_back(master_strand);
2760 TSeqPos feat_aln_start_totalexon = 0;
2761 TSeqPos prev_feat_aln_start_totalexon = 0;
2762 TSeqPos prev_feat_seq_stop = 0;
2764 bool is_first =
true;
2765 bool is_first_exon_start =
true;
2775 isolated_range.reverse();
2778 ITERATE(list<CSeq_loc_CI::TRange>, iter, isolated_range){
2783 intron_size += iter->GetFrom()
2784 - prev_feat_seq_stop - 1;
2788 IntersectionWith(*iter);
2789 if(!actual_feat_seq_range.
Empty()){
2794 if(
m_AV->IsPositiveStrand(row)){
2798 (row, actual_feat_seq_range.
GetFrom());
2800 =
m_AV->GetAlnPosFromSeqPos
2801 (row, actual_feat_seq_range.
GetTo());
2806 (row, actual_feat_seq_range.
GetTo());
2808 =
m_AV->GetAlnPosFromSeqPos
2809 (row, actual_feat_seq_range.
GetFrom());
2814 i <= feat_aln_stop;
i ++){
2815 if(sequence[
i] != gap_char){
2822 =
m_AV->GetSeqPosFromAlnPos(row,
i) -
2823 intron_size - feat_seq_range.
GetFrom();
2824 if(product_adj_seq_pos <
2825 concat_exon.size()){
2829 concat_exon[product_adj_seq_pos];
2833 if(
m_AV->IsPositiveStrand(row)){
2835 if(is_first_exon_start &&
2838 feat_aln_start_totalexon =
2840 - product_adj_seq_pos + 1;
2841 is_first_exon_start =
false;
2844 feat_aln_start_totalexon =
2845 product_adj_seq_pos;
2846 is_first_exon_start =
false;
2852 if(is_first_exon_start &&
2854 feat_aln_start_totalexon =
2856 - product_adj_seq_pos + 1;
2857 is_first_exon_start =
false;
2858 prev_feat_aln_start_totalexon =
2859 feat_aln_start_totalexon;
2861 if(!is_first_exon_start){
2866 feat_aln_start_totalexon =
2868 - product_adj_seq_pos + 1),
2869 prev_feat_aln_start_totalexon);
2870 prev_feat_aln_start_totalexon =
2871 feat_aln_start_totalexon;
2874 feat_aln_start_totalexon =
2875 max(prev_feat_aln_start_totalexon,
2876 product_adj_seq_pos);
2878 prev_feat_aln_start_totalexon =
2879 feat_aln_start_totalexon;
2890 prev_feat_seq_stop = iter->GetTo();
2893 alternativeFeatStr = line;
2895 feat_aln_start_totalexon,
2896 m_AV->IsPositiveStrand(row) ?
2898 feat_strand, featInfo->feature_start);
2904 feat_aln_from, feat_aln_to, aln_stop,
2905 feat_char, featId, alternativeFeatStr);
2906 feature.push_back(featInfo);
2916 int aln_to,
int aln_stop,
2917 char pattern_char,
string pattern_id,
2918 string& alternative_feat_str)
const
2921 feat->seqloc = &seqloc;
2922 feat->feature_char = pattern_char;
2923 feat->feature_id = pattern_id;
2926 feat_info->feature_string = alternative_feat_str;
2929 string line(aln_stop+1,
' ');
2930 for (
int j = aln_from; j <= aln_to; j++){
2931 line[j] = feat->feature_char;
2933 feat_info->feature_string = line;
2936 feat_info->aln_range.Set(aln_from, aln_to);
2937 feat_info->feature = feat;
2947 static int x_AddBar(
string& seq,
int insert_alnpos,
int aln_start){
2948 int end = (
int)seq.size() -1 ;
2949 int barPos = insert_alnpos - aln_start + 1;
2951 if(barPos - end > 1){
2952 string spacer(barPos - end - 1,
' ');
2953 addOn += spacer +
"|";
2954 }
else if (barPos - end == 1){
2958 return max<int>((barPos - end), 0);
2970 static int s_AdjustInsert(
string& cur_insert,
string& new_insert,
2971 int insert_alnpos,
int aln_start)
2974 int curInsertSize = (
int)cur_insert.size();
2975 int insertLeftSpace = insert_alnpos - aln_start - curInsertSize + 2;
2977 if(curInsertSize > 0){
2978 _ASSERT(insertLeftSpace >= 2);
2980 int newInsertSize = (
int)new_insert.size();
2981 if(insertLeftSpace - newInsertSize >= 1){
2983 string spacer(insertLeftSpace - newInsertSize,
' ');
2984 cur_insert += spacer + new_insert;
2987 if(curInsertSize > 0){
2988 cur_insert +=
" " + new_insert;
2990 cur_insert += new_insert;
2993 insertEnd = aln_start + (
int)cur_insert.size() -1 ;
3001 list<string>& inserts)
const {
3002 if(!insert_list.empty()){
3007 bool isFirstInsert =
true;
3008 int curInsertAlnStart = 0;
3009 int prvsInsertAlnEnd = 0;
3014 curInsertAlnStart = (*iter)->aln_start;
3016 if(isFirstInsert || curInsertAlnStart - prvsInsertAlnEnd >= 1){
3017 bar[curInsertAlnStart-aln_start+1] =
'|';
3018 int seqStart = (*iter)->seq_start;
3019 int seqEnd = seqStart + (*iter)->insert_len - 1;
3021 newInsert =
m_AV->GetSeqString(newInsert, row, seqStart,
3024 curInsertAlnStart, aln_start);
3025 isFirstInsert =
false;
3027 bar[curInsertAlnStart-aln_start+1] =
'|';
3029 prvsInsertAlnEnd +=
x_AddBar(seq, curInsertAlnStart, aln_start);
3032 leftOverInsertList.push_back(*iter);
3037 inserts.push_back(bar);
3038 inserts.push_back(seq);
3040 x_DoFills(row, aln_range, aln_start, leftOverInsertList, inserts);
3047 int aln_start, list<string>& inserts,
3048 string& insert_pos_string,
3052 string line(aln_range.
GetLength(),
' ');
3055 int from = (*iter)->aln_start;
3056 line[from - aln_start + 1] =
'\\';
3058 insert_pos_string = line;
3062 x_DoFills(row, aln_range, aln_start, insert_list, inserts);
3073 while(!insert_aln_start.empty()
3074 && (
int)insert_aln_start.front() < line_aln_stop){
3076 insert->aln_start = insert_aln_start.front() - 1;
3078 insert->seq_start = insert_seq_start.front();
3079 insert->insert_len = insert_length.front();
3080 insert_list.push_back(insert);
3081 insert_aln_start.pop_front();
3082 insert_seq_start.pop_front();
3083 insert_length.pop_front();
3096 string idString =
m_AV->GetSeqId(1).GetSeqIdString();
3099 segs = iter->second.segs;
3134 if(seg.
GetStd().size() > 1){
3139 if((*iterStdseg)->IsSetScores()){
3140 aln->
SetScore() = (*iterStdseg)->GetScores();
3142 aln->
SetSegs().SetStd().push_back(*iterStdseg);
3143 alnSetRef->
Set().push_back(aln);
3147 alnSetRef->
Set().push_back(*iter);
3156 if((*iterDendiag)->IsSetScores()){
3157 aln->
SetScore() = (*iterDendiag)->GetScores();
3159 aln->
SetSegs().SetDendiag().push_back(*iterDendiag);
3160 if((*iter)->IsSetType() && (*iter)->CanGetType()){
3161 aln->
SetType((*iter)->GetType());
3164 alnSetRef->
Set().push_back(aln);
3168 alnSetRef->
Set().push_back(*iter);
3172 alnSetRef->
Set().push_back(*iter);
3190 if((*iterStdseg)->IsSetScores()){
3191 aln->
SetScore() = (*iterStdseg)->GetScores();
3193 aln->
SetSegs().SetStd().push_back(*iterStdseg);
3194 alnSetRef->
Set().push_back(aln);
3200 if((*iterDendiag)->IsSetScores()){
3201 aln->
SetScore() = (*iterDendiag)->GetScores();
3203 aln->
SetSegs().SetDendiag().push_back(*iterDendiag);
3204 alnSetRef->
Set().push_back(aln);
3208 alnSetRef->
Set().push_back(*iter);
3222 bool first_align =
true;
3227 if((*iterStdseg)->IsSetScores()){
3228 aln->
SetScore() = (*iterStdseg)->GetScores();
3231 first_align =
false;
3232 std::vector< CRef< CScore > >& scores_in = (*iter)->SetScore();
3234 if ((*it_in)->IsSetId()) {
3237 std::vector< CRef< CScore > >& scores_out = aln->
SetScore();
3239 if ((*it_out)->IsSetId()) {
3240 if (score_id.
Match ((*it_out)->GetId())) {
3246 scores_out.push_back (*it_in);
3252 aln->
SetSegs().SetStd().push_back(*iterStdseg);
3253 alnSetRef->
Set().push_back(aln);
3258 if((*iterDendiag)->IsSetScores()){
3259 aln->
SetScore() = (*iterDendiag)->GetScores();
3261 first_align =
false;
3262 std::vector< CRef< CScore > >& scores_in = (*iter)->SetScore();
3264 if ((*it_in)->IsSetId()) {
3267 std::vector< CRef< CScore > >& scores_out = aln->
SetScore();
3269 if ((*it_out)->IsSetId()) {
3270 if (score_id.
Match ((*it_out)->GetId())) {
3276 scores_out.push_back (*it_in);
3282 aln->
SetSegs().SetDendiag().push_back(*iterDendiag);
3283 alnSetRef->
Set().push_back(aln);
3287 alnSetRef->
Set().push_back(*iter);
3298 aln_vec_info->alnvec->GetBioseqHandle(1);
3316 int linkout =
x_GetLinkout(*(*iter)->GetSeqid().front());
3317 if (linkout &
eGene)
3331 (
new char[strGeneLinkUrl.size() + 1024]);
3332 sprintf(
buf.get(), strGeneLinkUrl.c_str(),
3337 strGeneLinkUrl.assign(
buf.get());
3338 return strGeneLinkUrl;
3360 CGeneInfoFileReader::TGeneInfoList::const_iterator
3361 itInfo = infoList.begin();
3362 if (itInfo != infoList.end())
3364 for (; itInfo != infoList.end(); itInfo++)
3369 info->ToString(strInfo,
true, strUrl);
3370 out << strInfo <<
"\n";
3376 out <<
"(Gene info extraction error: "
3377 << e.
GetMsg() <<
")" <<
"\n";
3378 cerr <<
"[BLAST FORMATTER EXCEPTION] Gene info extraction error: " << e.
GetMsg() << endl;
3382 out <<
"(Gene info extraction error)" <<
"\n";
3383 cerr <<
"[BLAST FORMATTER EXCEPTION] Gene info extraction error " << endl;
3386 return formattedString;
3397 out <<
"Sort alignments for this subject sequence by:\n";
3404 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3407 <<
"#" << id_label <<
"\">";
3418 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3421 <<
"#" << id_label <<
"\">";
3432 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3435 <<
"#" << id_label <<
"\">";
3437 out <<
"Percent identity";
3444 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3447 <<
"#" << id_label <<
"\">";
3449 out <<
"Query start position";
3456 out <<
"<a href=\"Blast.cgi?CMD=Get&" << query_buf
3459 <<
"#" << id_label <<
"\">";
3461 out <<
"Subject start position";
3477 for(
int i = 0;
i < 5;
i++) {
3500 out << url_link <<
"\n";
3510 (type_temp.find(
"genome") != string::npos ||
3511 type_temp ==
"mapview" ||
3512 type_temp ==
"mapview_prev" ||
3513 type_temp ==
"gsfasta" || type_temp ==
"gsfasta_prev")){
3516 int master_start =
m_AV->GetSeqStart(0) + 1;
3517 int master_stop =
m_AV->GetSeqStop(0) + 1;
3518 int subject_start =
m_AV->GetSeqStart(1) + 1;
3519 int subject_stop =
m_AV->GetSeqStop(1) + 1;
3523 sprintf(
buffer,
"<a name = %s_%d_%d_%d_%d_%d></a>",
3524 subj_id_str.c_str(), aln_vec_info->score,
3525 min(master_start, master_stop),
3526 max(master_start, master_stop),
3527 min(subject_start, subject_stop),
3528 max(subject_start, subject_stop));
3536 string evalue_buf, bit_score_buf, total_bit_buf, raw_score_buf;
3538 aln_vec_info->bits, 0, 0, evalue_buf,
3539 bit_score_buf, total_bit_buf, raw_score_buf);
3546 string hidePrevNaviagtion,hideNextNaviagtion, hideFirstNavigation;
3548 hidePrevNaviagtion =
"disabled=\"disabled\"";
3549 hideFirstNavigation =
"hidden";
3552 hideNextNaviagtion =
"disabled=\"disabled\"";
3580 if (aln_vec_info->sum_n > 0) {
3590 if (aln_vec_info->comp_adj_method == 1){
3594 else if (aln_vec_info->comp_adj_method == 2){
3612 string evalue_buf, bit_score_buf, total_bit_buf, raw_score_buf;
3614 aln_vec_info->
bits, 0, 0, evalue_buf,
3615 bit_score_buf, total_bit_buf, raw_score_buf);
3621 out<<
" NW Score = "<< aln_vec_info->
score;
3629 out<<
" Score = "<<aln_vec_info->
score<<
"\n";
3632 out<<
" Score = "<<bit_score_buf<<
" ";
3633 out<<
"bits ("<<aln_vec_info->
score<<
"),"<<
" ";
3635 if (aln_vec_info->
sum_n > 0) {
3636 out <<
"(" << aln_vec_info->
sum_n <<
")";
3638 out <<
" = " << evalue_buf;
3640 out <<
", Method: Composition-based stats.";
3642 out <<
", Method: Compositional matrix adjust.";
3656 bool showSortControls =
false;
3676 showSortControls =
true;
3704 if(!(alnDispParams->seqID->AsFastaString().find(
"gnl|BL_ORD_ID") != string::npos) ||
3705 alnDispParams->seqID->AsFastaString().find(
"lcl|Subject_") != string::npos){
3707 seqid = alnDispParams->seqID->AsFastaString();
3728 string hspNum,isFirstDflAttr;
3735 isFirstDflAttr =
"hidden";
3740 string alnIdLbl = (alnDispParams->gi !=
ZERO_GI) ?
3743 string linkoutStr, dnldLinkStr;
3745 linkoutStr = (!alnDispParams->linkoutStr.empty()) ? alnDispParams->linkoutStr :
"";
3746 dnldLinkStr = alnDispParams->dumpGnlUrl;
3758 string firstDefline;
3760 list<string>& use_this_seqid = aln_vec_info->use_this_seqid;
3764 bool isFirst =
true;
3775 string alnDefLine =
x_MapDefLine(alnDispParams,isFirst,
false,
false,seqLength);
3784 *alnDispParams->
seqID);
3789 delete alnDispParams;
3790 firstDefline = alnDefLine;
3796 iter = bdl.begin(); iter != bdl.end(); iter++){
3800 bool hideDefline = (numBdl > 1)?
true :
false;
3819 alnDispParams->
seqID->AsFastaString();
3824 *alnDispParams->
seqID);
3829 vector <string> parts;
3831 if(parts.size() > 0) {
3838 if( (isFirst && firstGi ==
ZERO_GI) || (alnDispParams->
gi == firstGi && firstGi !=
ZERO_GI) ) {
3845 firstDefline = alnDefLine;
3848 deflines += alnDefLine;
3858 delete alnDispParams;
3864 deflines = firstDefline;
3874 deflines = firstDefline + alnTitleslnk + alnTitles;
3886 string deflines, linkOutStr,customLinkStr;
3887 list<string> linkoutStr;
3895 customLinkStr += *iter_custList;
3900 linkOutStr += *iter_List;
3930 string hideDndl = (
m_BlastType ==
"sra")?
"hidden":
"";
3968 if(sortOneAln.empty()) {
4022 bool showSortControls)
4047 (
int)
m_AV->GetAlnStop(),
4050 aln_vec_info->
match,
4052 m_AV->StrandSign(0),
4053 m_AV->StrandSign(1),
4070 int addToRange = (
int)((to - from) * 0.05);
4071 int fromAdjust =
max(0,(
int)from - addToRange);
4072 int toAdjust = to + addToRange;
4073 string customLinkStr;
4079 hspLinks += singleLink;
4084 string multiHSP = (hspLinks.empty()) ?
"hidden" :
"" ;
4124 alignInfo += alignRows;
4132 aln_vec_info->feat5 =
NULL;
4133 aln_vec_info->feat3 =
NULL;
4134 aln_vec_info->feat_list.clear();
4137 && (
int)
m_AV->GetBioseqHandle(1).GetBioseqLength()
4141 aln_vec_info->actual_range =
range;
4143 aln_vec_info->actual_range.Set(
range.GetTo(),
range.GetFrom());
4150 aln_vec_info->feat_list =
m_DynamicFeature->GetFeatInfo(id_str, aln_vec_info->actual_range, aln_vec_info->feat5, aln_vec_info->feat3, 2);
4184 string(
m_IsDbNa ?
"nucleotide" :
"protein"),
4194 return alignFeature;
4201 string alignParams = alignInfo;
4207 string allAlnFeatures =
"";
4208 if(aln_vec_info->feat_list.size() > 0) {
4209 ITERATE(vector<SFeatInfo*>, iter, aln_vec_info->feat_list){
4212 aln_vec_info->subject_gi,
4213 (*iter)->range.GetFrom(),
4214 (*iter)->range.GetTo(),
4219 allAlnFeatures += alignFeature;
4222 if(aln_vec_info->feat5 || aln_vec_info->feat3){
4226 if(aln_vec_info->feat5){
4228 aln_vec_info->subject_gi,
4229 aln_vec_info->feat5->range.GetFrom(),
4230 aln_vec_info->feat5->range.GetTo(),
4231 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);
4232 allAlnFeatures += alignFeature;
4234 if(aln_vec_info->feat3){
4237 aln_vec_info->subject_gi,
4238 aln_vec_info->feat3->range.GetFrom(),
4239 aln_vec_info->feat3->range.GetTo(),
4240 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);
4241 allAlnFeatures += alignFeature;
4244 if(!allAlnFeatures.empty()) {
4259 if(aln_vec_info->feat_list.size() > 0) {
4260 out <<
" Features in this part of subject sequence:" <<
"\n";
4261 ITERATE(vector<SFeatInfo*>, iter, aln_vec_info->feat_list){
4266 m_IsDbNa ?
"nucleotide" :
"protein",
4267 (*iter)->range.GetFrom() +1 ,
4268 (*iter)->range.GetTo() + 1,
4272 out << (*iter)->feat_str;
4279 if(aln_vec_info->feat5 || aln_vec_info->feat3){
4280 out <<
" Features flanking this part of subject sequence:" <<
"\n";
4282 if(aln_vec_info->feat5){
4287 m_IsDbNa ?
"nucleotide" :
"protein",
4288 aln_vec_info->feat5->range.GetFrom() + 1 ,
4289 aln_vec_info->feat5->range.GetTo() + 1,
4294 out << aln_vec_info->actual_range.GetFrom() - aln_vec_info->feat5->range.GetTo()
4295 <<
" bp at 5' side: " << aln_vec_info->feat5->feat_str;
4301 if(aln_vec_info->feat3){
4306 m_IsDbNa ?
"nucleotide" :
"protein",
4307 aln_vec_info->feat3->range.GetFrom() + 1 ,
4308 aln_vec_info->feat3->range.GetTo() + 1,
4313 out << aln_vec_info->feat3->range.GetFrom() - aln_vec_info->actual_range.GetTo()
4314 <<
" bp at 3' side: " << aln_vec_info->feat3->feat_str;
4321 if(aln_vec_info->feat_list.size() > 0 || aln_vec_info->feat5 || aln_vec_info->feat3 ){
4336 bool has_valid_loc =
false;
4337 for (
int i=0;
i<
m_AV->GetNumRows();
i++){
4341 m_AV->GetSeqRange(
i).IntersectingWith(loc_range)){
4342 int actualAlnStart = 0, actualAlnStop = 0;
4343 if(
m_AV->IsPositiveStrand(
i)){
4345 m_AV->GetAlnPosFromSeqPos(
i,
4349 m_AV->GetAlnPosFromSeqPos(
i,
4354 m_AV->GetAlnPosFromSeqPos(
i,
4358 m_AV->GetAlnPosFromSeqPos(
i,
4362 alnloc->aln_range.Set(actualAlnStart, actualAlnStop);
4363 has_valid_loc =
true;
4367 if (has_valid_loc) {
4368 alnloc->seqloc = *iter;
4369 loc_list.push_back(alnloc);
4377 vector<TSAlnFeatureInfoList>& retval)
4381 retval.resize(row_num);
4386 for(
int i = 0;
i < row_num;
i++){
4387 if((*iter)->seqloc->GetInt().GetId().Match(
m_AV->GetSeqId(
i))){
4388 int actualSeqStart = 0, actualSeqStop = 0;
4389 if(
m_AV->IsPositiveStrand(
i)){
4390 if((*iter)->seqloc->GetInt().GetFrom()
4391 <
m_AV->GetSeqStart(
i)){
4392 actualSeqStart =
m_AV->GetSeqStart(
i);
4394 actualSeqStart = (*iter)->seqloc->GetInt().GetFrom();
4397 if((*iter)->seqloc->GetInt().GetTo() >
4398 m_AV->GetSeqStop(
i)){
4399 actualSeqStop =
m_AV->GetSeqStop(
i);
4401 actualSeqStop = (*iter)->seqloc->GetInt().GetTo();
4404 if((*iter)->seqloc->GetInt().GetFrom()
4405 <
m_AV->GetSeqStart(
i)){
4406 actualSeqStart = (*iter)->seqloc->GetInt().GetFrom();
4408 actualSeqStart =
m_AV->GetSeqStart(
i);
4411 if((*iter)->seqloc->GetInt().GetTo() >
4412 m_AV->GetSeqStop(
i)){
4413 actualSeqStop = (*iter)->seqloc->GetInt().GetTo();
4415 actualSeqStop =
m_AV->GetSeqStop(
i);
4418 int alnFrom =
m_AV->GetAlnPosFromSeqPos(
i, actualSeqStart);
4419 int alnTo =
m_AV->GetAlnPosFromSeqPos(
i, actualSeqStop);
4423 if (alnTo - alnFrom >= 0){
4425 alnTo, aln_stop, (*iter)->feature_char,
4426 (*iter)->feature_id, tempFeat);
4427 retval[
i].push_back(featInfo);
4436 string& final_domain) {
4438 string domain_string(aln_to - aln_from + 1,
' ');
4440 if (domain_string.size() > 2){
4442 for (
int i = 0;
i < (
int)domain_string.size();
i++){
4443 domain_string[
i] =
'-';
4445 domain_string[0] =
'<';
4446 domain_string[domain_string.size()-1] =
'>';
4448 int midpoint = ((
int)domain_string.size())/2;
4449 int first_possible_pos = 1;
4450 int actual_first_pos =
max(first_possible_pos, midpoint - ((
int)domain_name.size())/2);
4452 for (
SIZE_TYPE i = actual_first_pos, j = 0;
i < domain_string.size() - 1 && j < domain_name.size();
i ++, j ++){
4453 domain_string[
i] = domain_name[j];
4458 final_domain[
i + aln_from] = domain_string[
i];
4463 vector<TSAlnFeatureInfoList>& retval)
const
4467 string final_domain (
m_AV->GetAlnStop() + 1,
' ');
4468 int last_aln_to =
m_AV->GetAlnStop();
4471 if((*iter)->seqloc->GetInt().GetId().Match(
m_AV->GetSeqId(0))){
4472 int actualSeqStart = 0, actualSeqStop = 0;
4473 if(
m_AV->IsPositiveStrand(0)){
4474 actualSeqStart =
max((
int)
m_AV->GetSeqStart(0),
4475 (
int)(*iter)->seqloc->GetInt().GetFrom());
4477 actualSeqStop =
min((
int)
m_AV->GetSeqStop(0),
4478 (
int)(*iter)->seqloc->GetInt().GetTo());
4480 int alnFrom =
m_AV->GetAlnPosFromSeqPos(0, actualSeqStart);
4482 if (actualSeqStart > 0 && (*iter)->is_subject_start_valid) {
4484 m_AV->GetAlnPosFromSeqPos(0, actualSeqStart - 1) > 1) {
4486 int subj_aln_from =
m_AV->GetAlnPosFromSeqPos(1,
4487 (
int)(*iter)->subject_seqloc->GetInt().GetFrom());
4488 if (subj_aln_from >= 0) {
4489 alnFrom = subj_aln_from;
4494 int alnTo =
m_AV->GetAlnPosFromSeqPos(0, actualSeqStop);
4496 if (actualSeqStop < (
int)
m_AV->GetSeqStop(0) &&
4497 (*iter)->is_subject_stop_valid) {
4498 if (
m_AV->GetAlnPosFromSeqPos(0, actualSeqStop + 1) - alnTo > 1) {
4500 int subj_aln_to =
m_AV->GetAlnPosFromSeqPos(1,
4501 (
int)(*iter)->subject_seqloc->GetInt().GetTo());
4502 if (subj_aln_to >= 0) {
4503 alnTo = subj_aln_to;
4507 int actual_aln_from =
min(alnFrom,last_aln_to +1);
4508 if (actual_aln_from > alnTo) {
4514 last_aln_to = alnTo;
4524 aln_stop, aln_stop,
' ',
4526 retval[0].push_back(featInfo);
4532 static string kQuery(
"Query");
4535 #ifdef CTOOLKIT_COMPATIBLE
4537 static bool value_set =
false;
4539 if (getenv(
"CTOOLKIT_COMPATIBLE")) {
4558 gi =
m_AV->GetSeqId(row).GetGi();
4583 gi =
m_AV->GetSeqId(row).GetGi();
4616 (toolUrl.find(
"dumpgnl.cgi") != string::npos
4622 for (CSeq_align_set::Tdata::const_iterator
4623 iter = actual_aln_list.
Get().begin();
4624 iter != actual_aln_list.
Get().end()
4628 subid = &((*iter)->GetSeq_id(1));
4649 alnLinksParam->segs +=
",";
4664 TSeqPos currFrom = alnLinksParam->subjRange->GetFrom();
4665 TSeqPos currTo = alnLinksParam->subjRange->GetTo();
4666 alnLinksParam->subjRange->SetFrom(
min(from,currFrom));
4667 alnLinksParam->subjRange->SetTo(
max(to,currTo));
4672 alnLinksParam->hspNumber = (!
first) ? alnLinksParam->hspNumber + 1 : 1;
4694 string idString, prevIdString;
4695 for (CSeq_align_set::Tdata::const_iterator
4696 iter = currSeqAlignIter;
4697 iter != actual_aln_list.
Get().end();iter++) {
4699 subid = &((*iter)->GetSeq_id(1));
4701 if(prevIdString.empty() || prevIdString == idString) {
4707 prevIdString = idString;
4715 unordered_set <string> :: const_iterator idsIter;
4721 if (actual_aln_list.
Get().empty()){
4732 bool showBlastDefline =
false;
4733 for (CSeq_align_set::Tdata::const_iterator
4734 iter = actual_aln_list.
Get().begin();
4735 iter != actual_aln_list.
Get().end();iter++) {
4737 subid = &((*iter)->GetSeq_id(1));
4748 idsIter = selectedIDs.find(currID);
4751 if(idsIter == selectedIDs.end() && idCount < (
int)selectedIDs.size())
continue;
4752 if(idsIter == selectedIDs.end() && idCount >= (
int)selectedIDs.size())
break;
4755 if(previousId.
Empty() ||
4756 !subid->
Match(*previousId)){
4763 showBlastDefline =
true;
4767 showBlastDefline =
false;
4770 if(!previousId.
Empty() &&
4771 !subid->
Match(*previousId)){
4778 if(!(avRef.
Empty())){
4795 alnvecInfo->use_this_seqid,
4796 alnvecInfo->comp_adj_method);
4798 alnvecInfo->alnvec = avRef;
4803 out <<
"Sequence with id "
4805 <<
" no longer exists in database...alignment skipped\n";
4813 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.