61 {
"red.gif",
"purple.gif",
"green.gif",
"yellow.gif",
"white.gif"};
63 {
"Strong",
"Moderate",
"Weak",
"Suspect"};
65 {
"Strong match",
"Moderate match",
"Weak match",
"Suspect origin"};
90 CSeq_align_set::Tdata::iterator next_iter;
91 CSeq_align_set::Tdata::iterator cur_iter = seqalign.
Set().begin();
93 while(cur_iter != seqalign.
Set().end()){
97 const CSeq_id& cur_id = (*cur_iter)->GetSeq_id(1);
98 while(next_iter != seqalign.
Set().end()){
105 if(next_iter != seqalign.
Set().end()){
106 const CSeq_id& next_id = (*next_iter)->GetSeq_id(1);
107 if (cur_id.
Match(next_id)){
108 CSeq_align_set::Tdata::iterator temp_iter = next_iter;
112 seqalign.
Set().insert(cur_iter, *temp_iter);
115 seqalign.
Set().erase(temp_iter);
133 int score1, score2, sum_n, num_ident;
135 list<TGi> use_this_gi;
139 sum_n, num_ident, use_this_gi);
141 sum_n, num_ident, use_this_gi);
145 return score2 > score1;
147 return from1 < from2;
159 int score1, score2, sum_n, num_ident;
161 list<TGi> use_this_gi;
164 sum_n, num_ident, use_this_gi);
166 sum_n, num_ident, use_this_gi);
168 return (score1 > score2);
177 int score, sum_n, num_ident;
180 list<TGi> use_this_gi;
182 aln_start =
min(seqalign.GetSeqRange(0).GetTo(),
183 seqalign.GetSeqRange(0).GetFrom());
184 aln_stop =
max(seqalign.GetSeqRange(0).GetTo(),
185 seqalign.GetSeqRange(0).GetFrom());
187 sum_n, num_ident,use_this_gi);
189 if (aln_stop > start_edge) {
199 if (aln_start < end_edge) {
201 end_edge = aln_start;
203 end_edge = aln_start;
205 end_edge = aln_start;
217 int score, sum_n, num_ident;
220 list<TGi> use_this_gi;
227 sum_n, num_ident,use_this_gi);
239 }
else if ((
int)aln_start - (
int)start_edge <= 1 ||
240 (
int)aln_stop + 1 >= (
int) end_edge){
267 list<CRange<TSeqPos> > range_list;
271 cur_range.
Set((*iter)->GetSeqRange(0).GetFrom(),
272 (*iter)->GetSeqRange(0).GetTo());
275 prev_range = range_list.back();
279 range_to_id[range_list.back()] = range_to_id[prev_range];
281 range_to_id[cur_range]=
x_GetId(**iter);
282 range_list.push_back(cur_range);
285 range_to_id[cur_range]=
x_GetId(**iter);
286 range_list.push_back(cur_range);
297 CSeq_align_set::Tdata::iterator iter_lower =
298 seqalign_lower.
Set().begin();
299 while(iter_lower != seqalign_lower.
Set().end()){
300 if((*iter_lower)->GetSeqRange(0).GetFrom() >=
301 iter_higher->GetFrom() &&
302 (*iter_lower)->GetSeqRange(0).GetTo() <=
303 iter_higher->GetTo()){
308 CSeq_align_set::Tdata::iterator temp_iter = iter_lower;
310 seqalign_lower.
Set().erase(temp_iter);
311 }
else if ((*iter_lower)->GetSeqRange(0).
312 IntersectingWith(*iter_higher)){
313 int id= range_to_id[*iter_higher];
318 range_to_id[*iter_higher]=id;
332 m_HelpDocsUrl =
"//www.ncbi.nlm.nih.gov/tools/vecscreen/about/";
349 CSeq_align_set::Tdata::iterator next_iter;
350 CSeq_align_set::Tdata::iterator cur_iter = seqalign.
Set().begin();
352 while(cur_iter != seqalign.
Set().end()){
353 next_iter = cur_iter;
357 while(next_iter != seqalign.
Set().end()){
364 CSeq_align_set::Tdata::iterator temp_iter = next_iter;
366 seqalign.
Set().erase(temp_iter);
385 for(
unsigned int i = 0;
i < catagorized_seqalign.size();
i ++){
403 new_align->
Assign(**iter);
410 catagorized_seqalign[
type]->Set().push_back(new_align);
414 for(
unsigned int i = 0;
i < catagorized_seqalign.size();
i ++){
426 *(catagorized_seqalign[j]));
430 for(
unsigned int i = 0;
i < catagorized_seqalign.size();
i ++){
452 (*aln_info_iter)->add_drops(aligns_to_add);
469 b->AppendPlainText(
"Distribution of Vector Matches on the Query Sequence");
474 tbl->SetCellSpacing(0)->SetCellPadding(0)->SetAttribute(
"border",
"0");
482 tc = tbl->InsertAt(0,
column, font);
493 tbl->SetCellSpacing(0)->SetCellPadding(0)->SetAttribute(
"border",
"0");
495 int width_adjust = 1;
497 double width = (*iter)->range.GetLength()*pixel_factor;
499 width = width + (width < 0.0 ? -0.5 : 0.5);
500 if(((
int)width) > 1){
507 image->SetAttribute(
"border", 1);
508 tc = tbl->InsertAt(0,
column, image);
519 b->AppendPlainText(
"Match to Vector: ");
523 image->SetAttribute(
"border",
"1");
532 b->AppendPlainText(
"Segment of suspect origin: ");
535 image->SetAttribute(
"border",
"1");
541 b->AppendPlainText(
"Segments matching vector: ");
546 bool is_first =
true;
548 if((*iter)->type ==
i){
553 a->SetAttribute(
"TARGET",
"VecScreenInfo");
560 if((*iter)->range.GetFrom() == (*iter)->range.GetTo()){
561 out <<
" " << (*iter)->range.GetFrom() + 1;
563 out <<
" " << (*iter)->range.GetFrom() + 1 <<
"-"
564 << (*iter)->range.GetTo() + 1;
601 vector< list<AlnInfo*> > aln_info_vec(seqalign_vec.size());
605 for(
unsigned int i = 0;
i < seqalign_vec.size();
i ++){
609 cur_aln_info->
range.
Set((*iter)->GetSeqRange(0).GetFrom(),
610 (*iter)->GetSeqRange(0).GetTo());
615 prev_range = &(aln_info_vec[
i].back()->range);
618 aln_info_vec[
i].back()->range =
623 aln_info_vec[
i].push_back(cur_aln_info);
626 aln_info_vec[
i].push_back(cur_aln_info);
633 for(
unsigned int i = 0;
i < aln_info_vec.size();
i ++){
634 ITERATE(list<AlnInfo*>, iter_higher, aln_info_vec[
i]){
635 for(
unsigned int j =
i + 1; j < aln_info_vec.size(); j ++){
636 list<AlnInfo*>::iterator iter_temp;
637 list<AlnInfo*>::iterator iter_lower = aln_info_vec[j].begin();
638 while(iter_lower != aln_info_vec[j].end()){
640 higher_range = (*iter_higher)->range;
641 lower_range = (*iter_lower)->range;
642 if((*iter_higher)->range.IntersectingWith((*iter_lower)->range)){
644 if((*iter_higher)->range.GetFrom() <=
645 (*iter_lower)->range.GetFrom()){
647 if((*iter_higher)->range.GetTo() >=
648 (*iter_lower)->range.GetTo()){
650 (*iter_higher)->add_aligns((*iter_lower)->get_aligns());
651 iter_temp = iter_lower;
653 aln_info_vec[j].erase(iter_temp);
657 (*iter_lower)->range.
658 Set((*iter_higher)->range.GetTo() + 1,
659 (*iter_lower)->range.GetTo());
664 if((*iter_higher)->range.GetTo() <=
665 (*iter_lower)->range.GetTo()){
674 (*iter_higher)->range.
677 (*iter_lower)->get_aligns() ));
679 if ((*iter_higher)->range.GetTo() <
680 (*iter_lower)->range.GetTo()) {
686 (*iter_lower)->range.GetTo() ,
688 (*iter_lower)->get_aligns() ));
691 iter_temp = iter_lower;
693 aln_info_vec[j].erase(iter_temp);
699 (*iter_lower)->range.
700 Set((*iter_lower)->range.GetFrom(),
701 (*iter_higher)->range.GetFrom() - 1);
707 if ((*iter_lower)->range.GetFrom() > (*iter_higher)->range.GetFrom()) {
719 for(
unsigned int i = 0;
i < aln_info_vec.size();
i++){
720 ITERATE(list<AlnInfo*>, iter, aln_info_vec[
i]){
731 list<AlnInfo*>::iterator temp_iter;
737 prev_range = (*prev_iter)->range;
738 cur_range = (*cur_iter)->range;
755 if((*cur_iter)->range.GetFrom() > 0){
766 prev_iter = cur_iter;
775 ((*prev_iter)->range.GetTo() + 1) +1 >
User-defined methods of the data storage class.
User-defined methods of the data storage class.
void Reverse(void)
Reverse the segments' orientation NOTE: currently *only* works for dense-seg.
CRange< TSeqPos > GetSeqRange(TDim row) const
GetSeqRange NB: On a Spliced-seg, in case the product-type is protein, these only return the amin par...
void SetNamedScore(const string &id, int score)
ENa_strand GetSeqStrand(TDim row) const
Get strand (the first one if segments have different strands).
void x_MergeSeqalign(objects::CSeq_align_set &seqalign)
merge overlapping seqalign
MatchType
vector match defines
TIdToDropIdMap x_IdToDropIdMap
AlnInfo * x_GetAlnInfo(TSeqPos from, TSeqPos to, MatchType type, const AlnInfo::TAlignList aligns=AlnInfo::TAlignList())
get align info
CVecscreen(const objects::CSeq_align_set &seqalign, TSeqPos master_length, TSeqPos terminal_flexibility=25)
Constructors.
void x_MergeInclusiveSeqalign(objects::CSeq_align_set &seqalign)
merge a seqalign if its range is in another seqalign
TSeqPos m_TerminalFlexibility
void x_BuildHtmlBar(CNcbiOstream &out)
Output the graphic.
void x_GetEdgeRanges(const objects::CSeq_align &seqalign, TSeqPos master_len, TSeqPos &start_edge, TSeqPos &end_edge)
list< AlnInfo * > m_AlnInfoList
internal match list
CConstRef< objects::CSeq_align_set > m_SeqalignSetRef
the current seqalign
int x_GetId(const objects::CSeq_align &a)
void x_MergeLowerRankSeqalign(objects::CSeq_align_set &seqalign_higher, objects::CSeq_align_set &seqalign_lower)
merge a seqalign if its range is in another higher ranked seqalign
string m_ImagePath
gif image file path
string m_HelpDocsUrl
help url
static bool FromRangeAscendingSort(AlnInfo *const &info1, AlnInfo *const &info2)
Sort on range from.
MatchType x_GetMatchType(const objects::CSeq_align &seqalign, TSeqPos master_len, TSeqPos start_edge, TSeqPos end_edge)
Get match type.
void VecscreenPrint(CNcbiOstream &out)
show alignment graphic view
TSeqPos m_MasterLen
master seq length
static const string & GetStrengthString(MatchType match_type)
Returns a string concerning the strength of the match for a given enum value.
vector< CRef< objects::CSeq_align > > x_OrigAlignsById
bool m_ShowWeakMatch
Show weak match?
TDropToKeepMap x_DropToKeepMap
void x_BuildNonOverlappingRange(vector< CRef< objects::CSeq_align_set > > seqalign_vec)
Build non overlapping internal match list.
void x_GetAllDropIdsForKeepId(int keep_id, set< int > &drop_ids)
CRef< objects::CSeq_align_set > ProcessSeqAlign(void)
Process alignment to show.
CRef< objects::CSeq_align_set > m_FinalSeqalign
the processed seqalign
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.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
void SetAttribute(const string &name, const string &value)
bool Match(const CSeq_id &sid2) const
Match() - TRUE if SeqIds are equivalent.
TThisType CombinationWith(const TThisType &r) const
bool AbuttingWith(const TThisType &r) const
bool IntersectingWith(const TThisType &r) const
TThisType & Set(position_type from, position_type to)
#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.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
Tdata & Set(void)
Assign a value to data member.
list< CRef< CSeq_align > > Tdata
const Tdata & Get(void) const
Get the member data.
const TYPE & Get(const CNamedParameterList *param)
static const char * column
void add_align(CRef< objects::CSeq_align > a)
void add_aligns(const TAlignList &al)
list< CRef< objects::CSeq_align > > TAlignList