102 if ((*seg_it)->GetLoc().size() != 2) {
104 "Pairwise Std-seg alignments in comparison "
105 "should always have two locs");
118 "Pairwise Std-set alignments in comparison "
119 "should always be intervals");
154 string traceback =
lookup.GetTraceback(align, 0);
155 if (traceback.empty()) {
157 "Comparing mismatches for dense-seg alignments requires "
158 "traceback information");
169 ITERATE (
string, it, traceback) {
174 product_pos +=
match * product_dir;
175 genomic_pos +=
match * genomic_dir;
177 bool genomic_ins = *it ==
'-';
178 bool product_ins = *++it ==
'-';
179 if (!genomic_ins && !product_ins) {
183 product_pos, product_pos);
188 genomic_pos, genomic_pos);
192 product_pos += product_dir;
195 genomic_pos += genomic_dir;
198 if (product_pos != (product_dir == 1 ? align.
GetSeqStop(0)+1
200 || genomic_pos != (genomic_dir == 1 ? align.
GetSeqStop(1)+1
204 "Inconsistent length of traceback string " + traceback);
219 int product_dir = is_product_minus ||
226 int genomic_dir = is_genomic_minus ||
233 switch ((*part_it)->Which()) {
236 TSeqPos product_mismatch_end = product_pos +
237 product_dir * ((*part_it)->GetMismatch()-1);
239 min(product_pos,product_mismatch_end),
240 max(product_pos,product_mismatch_end));
244 TSeqPos genomic_mismatch_end = genomic_pos +
245 genomic_dir * ((*part_it)->GetMismatch()-1);
247 min(genomic_pos,genomic_mismatch_end),
248 max(genomic_pos,genomic_mismatch_end));
250 product_pos += product_dir * (*part_it)->GetMismatch();
251 genomic_pos += genomic_dir * (*part_it)->GetMismatch();
255 product_pos += product_dir * (*part_it)->GetMatch();
256 genomic_pos += genomic_dir * (*part_it)->GetMatch();
260 product_pos += product_dir * (*part_it)->GetProduct_ins();
264 genomic_pos += genomic_dir * (*part_it)->GetGenomic_ins();
269 "Unsupported exon part");
290 s_UpdateSpans((*it)->GetSeqRange(0), (*it)->GetSeqRange(1), align_info,
row);
299 seg.
GetLoc()[1]->GetTotalRange(), align_info,
row);
317 "unhandled alignment type");
334 "intron mode only meaningful for Spliced-seg alignments");
347 TSeqRange genomic(first_exon->GetGenomic_end(),
348 second_exon->GetGenomic_start());
350 product.
SetFrom(last_exon->GetProduct_end().AsSeqPos());
351 product.
SetTo(exon->GetProduct_start().AsSeqPos());
370 const vector<string> &score_list,
372 bool required =
true)
375 ITERATE (vector<string>, it, score_list) {
385 scores.push_back(
value);
391 bool score_set_as_blacklist,
395 if (score_set_as_blacklist) {
400 if ((*score_it)->GetId().IsStr() &&
401 !score_set.count((*score_it)->GetId().GetStr()))
403 if ((*score_it)->GetValue().IsInt()) {
404 integer_scores[(*score_it)->GetId().GetStr()] =
405 (*score_it)->GetValue().GetInt();
407 real_scores[(*score_it)->GetId().GetStr()] =
408 (*score_it)->GetValue().GetReal();
416 if (
lookup.IsIntegerScore(align, *score_it)) {
417 integer_scores[*score_it] =
static_cast<int>(
value);
419 real_scores[*score_it] =
value;
427 double real_score_tolerance)
430 it2 = scores2.
begin();
431 it1 != scores1.
end() || it2 != scores2.
end(); ++it1, ++it2)
433 if (it1 == scores1.
end() || it2 == scores2.
end()
434 || it1->first != it2->first)
439 double allowed_diff =
max(
abs(it1->second),
abs(it2->second))
440 * real_score_tolerance;
441 if (
abs(it1->second - it2->second) > allowed_diff) {
450 bool ext_set_as_blacklist,
454 if (!ext_set_as_blacklist && !ext_set.
empty()) {
460 if (!(*ext_it)->GetType().IsStr()) {
463 string ext_type = (*ext_it)->GetType().GetStr();
464 bool is_in_set = ext_set.count(ext_type);
465 if ((ext_set_as_blacklist && !is_in_set)||
466 (!ext_set_as_blacklist && is_in_set))
468 exts[ext_type] = *ext_it;
471 if (!ext_set_as_blacklist && exts.
size() < ext_set.
size()) {
480 for(
unsigned int i = 0;
i < length;
i++) {
481 int top = (ptr[
i] & 0xf0) >> 4;
482 int bot = (ptr[
i] & 0x0f);
494 CWStream exts1_wstr(&exts1_md5), exts2_wstr(&exts2_md5);
497 it1 != exts1.
end() || it2 != exts2.
end(); ++it1, ++it2)
499 if (it1 == exts1.
end() || it2 == exts2.
end()
500 || it1->first != it2->first)
510 unsigned char exts1_md5_array[16], exts2_md5_array[16];
511 memset(exts1_md5_array, 0, 16);
512 memset(exts2_md5_array, 0, 16);
513 exts1_md5.GetChecksum().GetMD5Digest(exts1_md5_array);
530 double real_score_tolerance);
543 , spans_unique_first(0)
544 , spans_unique_second(0)
545 , is_equivalent(
false)
552 double real_score_tolerance)
555 , spans_unique_first(0)
556 , spans_unique_second(0)
557 , is_equivalent(
false)
560 if (
first.CompareGroup(second,
false) != 0) {
571 for ( ; first_it !=
first.spans.end() && second_it != second.
spans.
end(); ) {
572 if (*first_it == *second_it) {
573 TSeqPos intersecting_len = first_it->first.GetLength();
574 dot += float(intersecting_len) * float(intersecting_len);
575 sum_a += first_it->first.GetLength() * first_it->first.GetLength();
576 sum_b += second_it->first.GetLength() * second_it->first.GetLength();
583 first_it->first.IntersectingWith(second_it->first) &&
584 first_it->second.IntersectingWith(second_it->second);
588 r.IntersectWith(second_it->first);
590 intersecting_len =
r.GetLength();
591 dot += float(intersecting_len) * float(intersecting_len);
597 if (*first_it < *second_it) {
598 sum_a += first_it->first.GetLength() * first_it->first.GetLength();
602 sum_b += second_it->first.GetLength() * second_it->first.GetLength();
614 real_score_tolerance) &&
616 for ( ; first_it !=
first.spans.end(); ++first_it) {
617 sum_a += first_it->first.GetLength() * first_it->first.GetLength();
620 for ( ; second_it != second.
spans.
end(); ++second_it) {
621 sum_b += second_it->first.GetLength() * second_it->first.GetLength();
625 overlap = dot == 0 ? 0 : dot / ::sqrt(sum_a * sum_b);
660 typedef pair<CAlignCompare::SAlignment *, CAlignCompare::SAlignment *>
TPtrPair;
661 typedef pair<TPtrPair, SComparison>
TComp;
682 if (c1.second.is_equivalent && !c2.second.is_equivalent) {
685 if (c2.second.is_equivalent && !c1.second.is_equivalent) {
690 if (c1.second.is_equivalent && !c2.second.is_equivalent) {
693 if (c2.second.is_equivalent && !c1.second.is_equivalent) {
698 if (c1.first.first->subject_range < c2.first.first->subject_range)
702 if (c2.first.first->subject_range < c1.first.first->subject_range)
706 return c1.first.second->query_range < c2.first.second->query_range;
719 , compare_object(compare)
769 length += it->first.GetLength();
782 if (scores.first < o.
scores.first) {
return -1; }
783 if (o.
scores.first < scores.first) {
return 1; }
789 for (
unsigned score_index = 0; score_index < scores.second.size(); ++score_index) {
790 if (scores.second[score_index] && o.
scores.second[score_index]) {
791 if (scores.second[score_index] < o.
scores.second[score_index]) {
return -1; }
792 if (o.
scores.second[score_index] < scores.second[score_index]) {
return 1; }
817 if (compare_group < 0) {
819 }
else if (compare_group > 0) {
841 list< AutoPtr<SAlignment> > ¤t_group =
843 list< AutoPtr<SAlignment> > &next_group =
845 current_group.clear();
846 current_group.splice(current_group.end(), next_group);
847 while (!
source.EndOfData() && next_group.empty()) {
849 if (current_group.empty() || align->CompareGroup(*current_group.front(),
true) == 0)
851 current_group.push_back(align);
853 next_group.push_back(align);
862 compare_object.m_BoundariesMap[
query].insert(it->second.GetFrom());
863 compare_object.m_BoundariesMap[
query].insert(it->second.GetToOpen());
866 compare_object.m_BoundariesMap[
subject].insert(it->first.GetFrom());
867 compare_object.m_BoundariesMap[
subject].insert(it->first.GetToOpen());
875 list< AutoPtr<SAlignment> > align_parts;
881 it != boundaries.
end() && *it <=
range.GetToOpen(); ++it)
884 if (last_boundary >
range.GetFrom() || *it <
range.GetToOpen()) {
887 align_parts.push_back(part);
892 if (!align_parts.empty() && last_boundary <
range.GetToOpen()) {
895 align_parts.push_back(part);
904 if (align->GetSegs().IsDisc()) {
905 vector< AutoPtr<SAlignment> > seg_slices;
910 slice_range & (*seg_it)->GetSeqRange(
row);
911 if (seg_slice_range.
Empty()) {
915 SAlignment(source_set, *seg_it, compare_object) . Slice(
918 seg_slices.push_back(slice);
922 if (seg_slices.size() == 1) {
923 complete_slice = seg_slices.front();
924 }
else if (seg_slices.size() > 1) {
927 compare_object,
true));
929 complete_align->
SetSegs().SetDisc().Set().push_back(
931 complete_slice->query_mismatches += (*seg_it)->query_mismatches;
932 complete_slice->subject_mismatches += (*seg_it)->query_mismatches;
935 return complete_slice;
938 if (!align->GetSegs().IsDenseg()) {
940 "Alignment splitting supported only for Dense-seq and "
941 "Disc-seg alignments");
945 slice_align->
SetType(align->GetType());
946 if (align->IsSetDim()) {
947 slice_align->
SetDim(align->GetDim());
951 bool all_gaps =
true;
952 for (
int seg = 0; seg < slice_seg->
GetNumseg() && all_gaps; ++seg) {
953 if (slice_seg->
GetStarts()[seg*2] >= 0 &&
963 slice_align->
SetSegs().SetDenseg(*slice_seg);
965 if ((*score_it)->GetId().IsStr() &&
966 compare_object.m_DistributiveScores.count(
967 (*score_it)->GetId().GetStr()))
969 slice_align->
SetScore().push_back(*score_it);
972 slice.
reset(
new SAlignment(source_set, slice_align, compare_object,
true));
975 if (compare_object.m_Mode ==
e_Full) {
976 slice->query_mismatches = query_mismatches;
977 slice->query_mismatches &= slice_align->
GetSeqRange(0);
978 slice->subject_mismatches = subject_mismatches;
979 slice->subject_mismatches &= slice_align->
GetSeqRange(1);
986 list< AutoPtr<SAlignment> > orig_set;
987 list< AutoPtr<SAlignment> > &transformed_set =
990 : transformed_set.front()->subject;
994 orig_set.swap(transformed_set);
996 list< AutoPtr<CAlignCompare::SAlignment> > parts =
997 (*it)->BreakOnBoundaries(
row);
999 transformed_set.push_back(*it);
1001 transformed_set.splice(transformed_set.end(), parts);
1021 if (next_group_set & 1) {
1024 if (next_group_set & 2) {
1028 vector<const SAlignment *> group;
1029 switch (next_group_set) {
1036 group.push_back(&**it);
1047 group.push_back(&**it);
1065 set1_aligns.
insert(&**it);
1071 set2_aligns.
insert(&**it);
1076 vector<TComp> comparisons;
1085 if (
m_Strict && red_color.count(rhs) > 0 ) {
1101 TComp const& record = comparisons.back();
1115 typedef pair<TAlignPtrSet, EMatchLevel> TAlignGroup;
1117 list<TAlignGroup> groups;
1120 ITERATE (vector<TComp>, it, comparisons) {
1121 bool is_equivalent = it->second.is_equivalent;
1124 if (is_equivalent ||
1125 (it->second.overlap > 0 &&
1126 it->first.first->match_level !=
e_Equiv &&
1127 it->first.second->match_level !=
e_Equiv))
1129 list<TAlignGroup>::iterator align1_group = groups.end(),
1130 align2_group = groups.end();
1131 if (set1_aligns.
erase(it->first.first)) {
1132 it->first.first->match_level =
1134 group.push_back(it->first.first);
1135 if (is_equivalent) {
1141 + it->second.spans_overlap;
1145 align1_group = group_map[it->first.first];
1147 if (set2_aligns.
erase(it->first.second)) {
1148 it->first.second->match_level =
1150 group.push_back(it->first.second);
1151 if (is_equivalent) {
1157 + it->second.spans_overlap;
1161 align2_group = group_map[it->first.second];
1163 if (align1_group == groups.end() &&
1164 align2_group == groups.end())
1168 list<TAlignGroup>::iterator new_group =
1169 groups.
insert(groups.end(), TAlignGroup());
1170 new_group->first.insert(it->first.first);
1171 new_group->first.insert(it->first.second);
1172 new_group->second = it->first.first->match_level;
1173 group_map[it->first.first] = new_group;
1174 group_map[it->first.second] = new_group;
1177 }
else if(align1_group == groups.end()) {
1179 align2_group->first.
insert(it->first.first);
1180 group_map[it->first.first] = align2_group;
1181 }
else if(align2_group == groups.end()) {
1183 align1_group->first.
insert(it->first.second);
1184 group_map[it->first.second] = align1_group;
1185 }
else if (align1_group != align2_group) {
1188 align1_group->first.insert(*group2_it);
1189 group_map[*group2_it] = align1_group;
1191 if (align2_group->second ==
e_Overlap) {
1193 if (align1_group->second ==
e_Equiv) {
1202 groups.erase(align2_group);
1207 ITERATE (list<TAlignGroup>, group_it, groups) {
1216 SAlignment *&side_best = best[(*align_it)->source_set];
1220 side_best = *align_it;
1223 if (best[1]->quality_scores != best[2]->quality_scores) {
1228 (*align_it)->match_level =
1229 (*align_it)->source_set == better_side
1235 if ((*align1_it)->source_set != 1) {
1239 if ((*align2_it)->source_set != 2) {
1242 (*align1_it)->matched_alignments.push_back(*align2_it);
1243 (*align2_it)->matched_alignments.push_back(*align1_it);
1252 ITERATE (vector<TComp>, comp_it, comparisons) {
1253 if (set1_aligns.
empty() && set2_aligns.
empty()) {
1257 if (comp_it->second.overlap == 0) {
1258 if (set1_aligns.
erase(comp_it->first.first)) {
1259 group.push_back(comp_it->first.first);
1262 if (set2_aligns.
erase(comp_it->first.second)) {
1263 group.push_back(comp_it->first.second);
1269 group.push_back(*set1_it);
1273 group.push_back(*set2_it);
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
bool s_IsOverlapping(CAlignCompare::SAlignment const *lhs, CAlignCompare::SAlignment const *rhs, CAlignCompare::ERowComparison row)
static bool s_EquivalentScores(const CAlignCompare::TRealScoreSet &scores1, const CAlignCompare::TRealScoreSet &scores2, double real_score_tolerance)
static void s_GetAlignmentMismatches(const CSeq_align &align, CAlignCompare::SAlignment &align_info, CAlignCompare::ERowComparison row)
static void s_GetAlignmentSpans_Exon(const CSeq_align &align, CAlignCompare::SAlignment &align_info, CAlignCompare::ERowComparison row)
static void s_PopulateScoreSet(const CSeq_align &align, const set< string > &score_set, bool score_set_as_blacklist, CAlignCompare::TIntegerScoreSet &integer_scores, CAlignCompare::TRealScoreSet &real_scores)
pair< TPtrPair, SComparison > TComp
static void s_PopulateExtSet(const CSeq_align &align, const set< string > &ext_set, bool ext_set_as_blacklist, CAlignCompare::TExtSet &exts)
pair< CAlignCompare::SAlignment *, CAlignCompare::SAlignment * > TPtrPair
static bool s_EquivalentExts(const CAlignCompare::TExtSet &exts1, const CAlignCompare::TExtSet &exts2)
void s_PopulateScores(const CSeq_align &align, const vector< string > &score_list, vector< T > &scores, bool required=true)
static void s_UpdateSpans(const TSeqRange &query_range, const TSeqRange &subject_range, CAlignCompare::SAlignment &align_info, CAlignCompare::ERowComparison row)
static void s_GetAlignmentSpans_Interval(const CSeq_align &align, CAlignCompare::SAlignment &align_info, CAlignCompare::ERowComparison row)
string s_ConvertToHexString(unsigned char *ptr, unsigned int length)
set< CAlignCompare::SAlignment *, SAlignment_PtrLess > TAlignPtrSet
static void s_GetAlignmentSpans_Intron(const CSeq_align &align, CAlignCompare::SAlignment &align_info, CAlignCompare::ERowComparison row)
static void s_GetAlignmentSpans_Span(const CSeq_align &align, CAlignCompare::SAlignment &align_info, CAlignCompare::ERowComparison row)
void ConvertSeqAlignToPairwiseAln(CPairwiseAln &pairwise_aln, const objects::CSeq_align &sa, objects::CSeq_align::TDim row_1, objects::CSeq_align::TDim row_2, CAlnUserOptions::EDirection direction=CAlnUserOptions::eBothDirections, const TAlnSeqIdVec *ids=0)
Build pairwise alignment from the selected rows of a seq-align.
Checksum and hash calculation classes.
vector< const SAlignment * > NextGroup()
size_t m_CountOverlapGroups
int x_DetermineNextGroupSet()
Determine whether the next group of alignments should be taken from set 1 or 2.
list< AutoPtr< SAlignment > > m_NextSet2Group
list< AutoPtr< SAlignment > > m_NextSet1Group
size_t m_CountBasesOverlapSet2
list< AutoPtr< SAlignment > > m_CurrentSet2Group
size_t m_CountBasesOnlySet2
size_t m_CountBasesEquivSet1
map< CSeq_id_Handle, set< TSeqPos > > m_BoundariesMap
size_t m_CountBasesEquivSet2
void x_SplitOnOverlaps(int group, int row)
size_t m_CountOverlapSet1
void PopulateBoundariesMap()
double m_RealScoreTolerance
bool m_ScoreSetAsBlacklist
AutoPtr< SAlignment > x_NextAlignment(int set, bool update_counts=true)
Get next alignment from the correct set.
TDisambiguatingScoreList m_DisambiguitingScores
size_t m_CountBasesOverlapSet1
void x_GetCurrentGroup(int set)
list< AutoPtr< SAlignment > > m_CurrentSet1Group
size_t m_CountBasesOnlySet1
vector< string > m_QualityScores
size_t m_CountEquivGroups
size_t m_CountOverlapSet2
CAlignRange Represents an element of pairwise alignment of two sequences.
Default IAlnSeqId implementation based on CSeq_id_Handle.
CRef< CDense_seg > ExtractSlice(TDim row, TSeqPos from, TSeqPos to) const
Extract a slice of the alignment that includes the specified range.
A pairwise aln is a collection of ranges for a pair of rows.
CRange< TSeqPos > GetSeqRange(TDim row) const
GetSeqRange NB: On a Spliced-seg, in case the product-type is protein, these only return the amin par...
TSeqPos GetSeqStop(TDim row) const
const CSeq_id & GetSeq_id(TDim row) const
Get seq-id (the first one if segments have different ids).
TSeqPos GetSeqStart(TDim row) const
ENa_strand GetSeqStrand(TDim row) const
Get strand (the first one if segments have different strands).
Writer-based output stream.
virtual bool EndOfData() const =0
container_type::const_iterator const_iterator
const_iterator begin() const
const_iterator end() const
iterator_bool insert(const value_type &val)
iterator_bool insert(const value_type &val)
const_iterator upper_bound(const key_type &key) const
const_iterator end() const
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static int lookup(const char *name, const struct lookup_int *table)
void reset(element_type *p=0, EOwnership ownership=eTakeOwnership)
Reset will delete the old pointer (if owned), set content to the new value, and assume the ownership ...
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
element_type * get(void) const
Get pointer.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
void GetMD5Digest(unsigned char digest[16]) const
Return calculated MD5 digest.
const CChecksum & GetChecksum(void) const
Return checksum.
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
void Error(CExceptionArgs_Base &args)
TErrCode GetErrCode(void) const
Get error code.
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
#define MSerial_AsnBinary
#define MSerial_AsnText
I/O stream manipulators –.
static CSeq_id_Handle GetHandle(const CSeq_id &id)
Normal way of getting a handle, works for any seq-id.
string AsString(void) const
TRange GetTotalRange(void) const
int64_t Int8
8-byte (64-bit) signed integer
bool IntersectingWith(const TThisType &r) const
CRange< TSeqPos > TSeqRange
typedefs for sequence ranges
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
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.
void SetFrom(TFrom value)
Assign a value to From data member.
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
void SetTo(TTo value)
Assign a value to To data member.
bool IsSetProduct_strand(void) const
should be 'plus' or 'minus' Check if a value has been assigned to Product_strand data member.
TScore & SetScore(void)
Assign a value to Score data member.
E_Choice Which(void) const
Which variant is currently selected.
bool IsSetParts(void) const
basic seqments always are in biologic order Check if a value has been assigned to Parts data member.
vector< CRef< CScore > > TScore
const TLoc & GetLoc(void) const
Get the Loc member data.
list< CRef< CStd_seg > > TStd
bool IsSetExt(void) const
extra info Check if a value has been assigned to Ext data member.
bool IsSetProduct_strand(void) const
should be 'plus' or 'minus' Check if a value has been assigned to Product_strand data member.
const TStarts & GetStarts(void) const
Get the Starts member data.
TGenomic_start GetGenomic_start(void) const
Get the Genomic_start member data.
void SetSegs(TSegs &value)
Assign a value to Segs data member.
void SetDim(TDim value)
Assign a value to Dim data member.
TGenomic_strand GetGenomic_strand(void) const
Get the Genomic_strand member data.
list< CRef< CUser_object > > TExt
bool IsSetGenomic_strand(void) const
genomic-strand represents the strand of translation Check if a value has been assigned to Genomic_str...
bool CanGetProduct_strand(void) const
Check if it is safe to call GetProduct_strand method.
void SetType(TType value)
Assign a value to Type data member.
const TParts & GetParts(void) const
Get the Parts member data.
const TProduct_start & GetProduct_start(void) const
Get the Product_start member data.
const TProduct_end & GetProduct_end(void) const
Get the Product_end member data.
const TSpliced & GetSpliced(void) const
Get the variant data.
bool IsSetGenomic_strand(void) const
Check if a value has been assigned to Genomic_strand data member.
const TStd & GetStd(void) const
Get the variant data.
list< CRef< CSpliced_exon > > TExons
const TExons & GetExons(void) const
Get the Exons member data.
TGenomic_strand GetGenomic_strand(void) const
Get the Genomic_strand member data.
TProduct_strand GetProduct_strand(void) const
Get the Product_strand member data.
const TExt & GetExt(void) const
Get the Ext member data.
list< CRef< CSpliced_exon_chunk > > TParts
bool IsSetScore(void) const
for whole alignment Check if a value has been assigned to Score data member.
TGenomic_end GetGenomic_end(void) const
Get the Genomic_end member data.
bool IsSpliced(void) const
Check if variant Spliced is selected.
TNumseg GetNumseg(void) const
Get the Numseg member data.
TProduct_strand GetProduct_strand(void) const
Get the Product_strand member data.
list< CRef< CSeq_align > > Tdata
const TScore & GetScore(void) const
Get the Score member data.
const TDisc & GetDisc(void) const
Get the variant data.
const Tdata & Get(void) const
Get the member data.
const TSegs & GetSegs(void) const
Get the Segs member data.
bool CanGetGenomic_strand(void) const
Check if it is safe to call GetGenomic_strand method.
@ e_Product_ins
insertion in product sequence (i.e. gap in the genomic sequence)
@ e_Genomic_ins
insertion in genomic sequence (i.e. gap in the product sequence)
@ e_Match
both sequences represented, product and genomic sequences match
@ e_Mismatch
both sequences represented, product and genomic sequences do not match
bool IsEmpty(void) const
Check if variant Empty is selected.
bool IsInt(void) const
Check if variant Int is selected.
bool IsNull(void) const
Check if variant Null is selected.
range(_Ty, _Ty) -> range< _Ty >
constexpr auto sort(_Init &&init)
const GenericPointer< typename T::ValueType > T2 value
const CharType(& source)[N]
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
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)
Reader-writer based streams.
#define row(bind, expected)
TDisambiguatingScoreValues scores
TRealScoreSet real_scores
vector< double > quality_scores
int CompareGroup(const SAlignment &o, bool strict_only) const
void PopulateBoundariesMap() const
list< AutoPtr< SAlignment > > BreakOnBoundaries(int row) const
SAlignment(int s, const CRef< CSeq_align > &al, CAlignCompare &compare, bool is_slice=false)
ENa_strand subject_strand
TIntegerScoreSet integer_scores
CRangeCollection< TSeqPos > query_mismatches
AutoPtr< SAlignment > Slice(int row, TSeqPos from, TSeqPos to) const
CRangeCollection< TSeqPos > subject_mismatches
bool operator()(const CAlignCompare::SAlignment *ptr1, const CAlignCompare::SAlignment *ptr2) const
bool operator()(const TComp &c1, const TComp &c2) const
SComp_Less(bool strict=false)