((*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 stringtraceback =
lookup.GetTraceback(align, 0);
155 if(traceback.empty()) {
157 "Comparing mismatches for dense-seg alignments requires " 158 "traceback information");
169 ITERATE(
string, it, traceback) {
174product_pos +=
match* product_dir;
175genomic_pos +=
match* genomic_dir;
177 boolgenomic_ins = *it ==
'-';
178 boolproduct_ins = *++it ==
'-';
179 if(!genomic_ins && !product_ins) {
183product_pos, product_pos);
188genomic_pos, genomic_pos);
192product_pos += product_dir;
195genomic_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 intproduct_dir = is_product_minus ||
226 intgenomic_dir = is_genomic_minus ||
233 switch((*part_it)->Which()) {
236 TSeqPosproduct_mismatch_end = product_pos +
237product_dir * ((*part_it)->GetMismatch()-1);
239 min(product_pos,product_mismatch_end),
240 max(product_pos,product_mismatch_end));
244 TSeqPosgenomic_mismatch_end = genomic_pos +
245genomic_dir * ((*part_it)->GetMismatch()-1);
247 min(genomic_pos,genomic_mismatch_end),
248 max(genomic_pos,genomic_mismatch_end));
250product_pos += product_dir * (*part_it)->GetMismatch();
251genomic_pos += genomic_dir * (*part_it)->GetMismatch();
255product_pos += product_dir * (*part_it)->GetMatch();
256genomic_pos += genomic_dir * (*part_it)->GetMatch();
260product_pos += product_dir * (*part_it)->GetProduct_ins();
264genomic_pos += genomic_dir * (*part_it)->GetGenomic_ins();
269 "Unsupported exon part");
290 s_UpdateSpans((*it)->GetSeqRange(0), (*it)->GetSeqRange(1), align_info,
row);
299seg.
GetLoc()[1]->GetTotalRange(), align_info,
row);
317 "unhandled alignment type");
334 "intron mode only meaningful for Spliced-seg alignments");
347 TSeqRangegenomic(first_exon->GetGenomic_end(),
348second_exon->GetGenomic_start());
350product.
SetFrom(last_exon->GetProduct_end().AsSeqPos());
351product.
SetTo(exon->GetProduct_start().AsSeqPos());
368 template<
typenameT>
370 constvector<string> &score_list,
372 boolrequired =
true)
375 ITERATE(vector<string>, it, score_list) {
385scores.push_back(
value);
391 boolscore_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()) {
404integer_scores[(*score_it)->GetId().GetStr()] =
405(*score_it)->GetValue().GetInt();
407real_scores[(*score_it)->GetId().GetStr()] =
408(*score_it)->GetValue().GetReal();
416 if(
lookup.IsIntegerScore(align, *score_it)) {
417integer_scores[*score_it] =
static_cast<int>(
value);
419real_scores[*score_it] =
value;
427 doublereal_score_tolerance)
430it2 = scores2.
begin();
431it1 != scores1.
end() || it2 != scores2.
end(); ++it1, ++it2)
433 if(it1 == scores1.
end() || it2 == scores2.
end()
434|| it1->first != it2->first)
439 doubleallowed_diff =
max(
abs(it1->second),
abs(it2->second))
440* real_score_tolerance;
441 if(
abs(it1->second - it2->second) > allowed_diff) {
450 boolext_set_as_blacklist,
454 if(!ext_set_as_blacklist && !ext_set.
empty()) {
460 if(!(*ext_it)->GetType().IsStr()) {
463 stringext_type = (*ext_it)->GetType().GetStr();
464 boolis_in_set = ext_set.count(ext_type);
465 if((ext_set_as_blacklist && !is_in_set)||
466(!ext_set_as_blacklist && is_in_set))
468exts[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 inttop = (ptr[
i] & 0xf0) >> 4;
482 intbot = (ptr[
i] & 0x0f);
494 CWStreamexts1_wstr(&exts1_md5), exts2_wstr(&exts2_md5);
496it2 = exts2.
begin();
497it1 != exts1.
end() || it2 != exts2.
end(); ++it1, ++it2)
499 if(it1 == exts1.
end() || it2 == exts2.
end()
500|| it1->first != it2->first)
510 unsigned charexts1_md5_array[16], exts2_md5_array[16];
511memset(exts1_md5_array, 0, 16);
512memset(exts2_md5_array, 0, 16);
513exts1_md5.GetChecksum().GetMD5Digest(exts1_md5_array);
530 doublereal_score_tolerance);
543, spans_unique_first(0)
544, spans_unique_second(0)
545, is_equivalent(
false)
552 doublereal_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 TSeqPosintersecting_len = first_it->first.GetLength();
574dot += float(intersecting_len) * float(intersecting_len);
575sum_a += first_it->first.GetLength() * first_it->first.GetLength();
576sum_b += second_it->first.GetLength() * second_it->first.GetLength();
583first_it->first.IntersectingWith(second_it->first) &&
584first_it->second.IntersectingWith(second_it->second);
588 r.IntersectWith(second_it->first);
590intersecting_len =
r.GetLength();
591dot += float(intersecting_len) * float(intersecting_len);
597 if(*first_it < *second_it) {
598sum_a += first_it->first.GetLength() * first_it->first.GetLength();
602sum_b += second_it->first.GetLength() * second_it->first.GetLength();
614real_score_tolerance) &&
616 for( ; first_it !=
first.spans.end(); ++first_it) {
617sum_a += first_it->first.GetLength() * first_it->first.GetLength();
620 for( ; second_it != second.
spans.
end(); ++second_it) {
621sum_b += second_it->first.GetLength() * second_it->first.GetLength();
625 overlap= dot == 0 ? 0 : dot / ::sqrt(sum_a * sum_b);
638 if(k2.
query< k1.
query) {
return false; }
660 typedefpair<CAlignCompare::SAlignment *, CAlignCompare::SAlignment *>
TPtrPair;
661 typedefpair<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 returnc1.first.second->query_range < c2.first.second->query_range;
719, compare_object(compare)
738 switch(compare.
m_Mode) {
769 length+= it->first.GetLength();
782 if(scores.first < o.
scores.first) {
return-1; }
783 if(o.
scores.first < scores.first) {
return1; }
789 for(
unsignedscore_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]) {
return1; }
817 if(compare_group < 0) {
819}
else if(compare_group > 0) {
841list< AutoPtr<SAlignment> > ¤t_group =
843list< AutoPtr<SAlignment> > &next_group =
845current_group.clear();
846current_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)
851current_group.push_back(align);
853next_group.push_back(align);
862compare_object.m_BoundariesMap[
query].insert(it->second.GetFrom());
863compare_object.m_BoundariesMap[
query].insert(it->second.GetToOpen());
866compare_object.m_BoundariesMap[
subject].insert(it->first.GetFrom());
867compare_object.m_BoundariesMap[
subject].insert(it->first.GetToOpen());
875list< AutoPtr<SAlignment> > align_parts;
878 TSeqRangerange =
row== 0 ? query_range : subject_range;
881it != boundaries.
end() && *it <= range.
GetToOpen(); ++it)
887align_parts.push_back(part);
892 if(!align_parts.empty() && last_boundary < range.
GetToOpen()) {
895align_parts.push_back(part);
904 if(align->GetSegs().IsDisc()) {
905vector< AutoPtr<SAlignment> > seg_slices;
910slice_range & (*seg_it)->GetSeqRange(
row);
911 if(seg_slice_range.
Empty()) {
915 SAlignment(source_set, *seg_it, compare_object) . Slice(
918seg_slices.push_back(slice);
922 if(seg_slices.size() == 1) {
923complete_slice = seg_slices.front();
924}
else if(seg_slices.size() > 1) {
927compare_object,
true));
929complete_align->
SetSegs().SetDisc().Set().push_back(
931complete_slice->query_mismatches += (*seg_it)->query_mismatches;
932complete_slice->subject_mismatches += (*seg_it)->query_mismatches;
935 returncomplete_slice;
938 if(!align->GetSegs().IsDenseg()) {
940 "Alignment splitting supported only for Dense-seq and " 941 "Disc-seg alignments");
945slice_align->
SetType(align->GetType());
946 if(align->IsSetDim()) {
947slice_align->
SetDim(align->GetDim());
951 boolall_gaps =
true;
952 for(
intseg = 0; seg < slice_seg->
GetNumseg() && all_gaps; ++seg) {
953 if(slice_seg->
GetStarts()[seg*2] >= 0 &&
963slice_align->
SetSegs().SetDenseg(*slice_seg);
965 if((*score_it)->GetId().IsStr() &&
966compare_object.m_DistributiveScores.count(
967(*score_it)->GetId().GetStr()))
969slice_align->
SetScore().push_back(*score_it);
972slice.
reset(
new SAlignment(source_set, slice_align, compare_object,
true));
975 if(compare_object.m_Mode ==
e_Full) {
976slice->query_mismatches = query_mismatches;
977slice->query_mismatches &= slice_align->
GetSeqRange(0);
978slice->subject_mismatches = subject_mismatches;
979slice->subject_mismatches &= slice_align->
GetSeqRange(1);
986list< AutoPtr<SAlignment> > orig_set;
987list< AutoPtr<SAlignment> > &transformed_set =
990: transformed_set.front()->subject;
994orig_set.swap(transformed_set);
996list< AutoPtr<CAlignCompare::SAlignment> > parts =
997(*it)->BreakOnBoundaries(
row);
999transformed_set.push_back(*it);
1001transformed_set.splice(transformed_set.end(), parts);
1021 if(next_group_set & 1) {
1024 if(next_group_set & 2) {
1028vector<const SAlignment *> group;
1029 switch(next_group_set) {
1036group.push_back(&**it);
1047group.push_back(&**it);
1065set1_aligns.
insert(&**it);
1071set2_aligns.
insert(&**it);
1076vector<TComp> comparisons;
1085 if(
m_Strict&& red_color.count(rhs) > 0 ) {
1101 TComp const& record = comparisons.back();
1115 typedefpair<TAlignPtrSet, EMatchLevel> TAlignGroup;
1117list<TAlignGroup> groups;
1120 ITERATE(vector<TComp>, it, comparisons) {
1121 boolis_equivalent = it->second.is_equivalent;
1124 if(is_equivalent ||
1125(it->second.overlap > 0 &&
1126it->first.first->match_level !=
e_Equiv&&
1127it->first.second->match_level !=
e_Equiv))
1129list<TAlignGroup>::iterator align1_group = groups.end(),
1130align2_group = groups.end();
1131 if(set1_aligns.
erase(it->first.first)) {
1132it->first.first->match_level =
1134group.push_back(it->first.first);
1135 if(is_equivalent) {
1141+ it->second.spans_overlap;
1145align1_group = group_map[it->first.first];
1147 if(set2_aligns.
erase(it->first.second)) {
1148it->first.second->match_level =
1150group.push_back(it->first.second);
1151 if(is_equivalent) {
1157+ it->second.spans_overlap;
1161align2_group = group_map[it->first.second];
1163 if(align1_group == groups.end() &&
1164align2_group == groups.end())
1168list<TAlignGroup>::iterator new_group =
1169groups.
insert(groups.end(), TAlignGroup());
1170new_group->first.insert(it->first.first);
1171new_group->first.insert(it->first.second);
1172new_group->second = it->first.first->match_level;
1173group_map[it->first.first] = new_group;
1174group_map[it->first.second] = new_group;
1177}
else if(align1_group == groups.end()) {
1179align2_group->first.
insert(it->first.first);
1180group_map[it->first.first] = align2_group;
1181}
else if(align2_group == groups.end()) {
1183align1_group->first.
insert(it->first.second);
1184group_map[it->first.second] = align1_group;
1185}
else if(align1_group != align2_group) {
1188align1_group->first.insert(*group2_it);
1189group_map[*group2_it] = align1_group;
1191 if(align2_group->second ==
e_Overlap) {
1193 if(align1_group->second ==
e_Equiv) {
1202groups.erase(align2_group);
1207 ITERATE(list<TAlignGroup>, group_it, groups) {
1214vector<SAlignment *> best(3,
static_cast<SAlignment*
>(
NULL));
1216 SAlignment*&side_best = best[(*align_it)->source_set];
1220side_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)) {
1259group.push_back(comp_it->first.first);
1262 if(set2_aligns.
erase(comp_it->first.second)) {
1263group.push_back(comp_it->first.second);
1269group.push_back(*set1_it);
1273group.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.
CChecksumStreamWriter â.
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
position_type GetToOpen(void) 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.
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(PCRE2_SPTR start_eptr, PCRE2_SPTR start_ecode, uint16_t top_bracket, PCRE2_SIZE frame_size, pcre2_match_data *match_data, match_block *mb)
Reader-writer based streams.
static const sljit_gpr r1
static const sljit_gpr r0
#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)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4