tlabel = feat.GetData().GetKey();
116 if(feat.GetData().IsImp()) {
117 if( tlabel ==
"variation") {
118tlabel =
"Variation";
120 else if( tlabel !=
"CDS") {
121tlabel =
"["+ tlabel +
"]";
124&& feat.GetData().GetRegion() ==
"Domain" 125&& feat.IsSetComment() ) {
128}
else if(feat.GetData().IsImp()) {
129tlabel =
"["+ feat.GetData().GetImp().GetKey() +
"]";
131tlabel =
"Unknown=0";
190feat_it; ++feat_it) {
191feat_it->GetData().GetProt().GetLabel(tlabel);
196 ERR_POST(
Error<<
"cannot find sequence: "+
id.AsFastaString());
209 string str(
"open reading frame: ");
212 str+=
"frame not set; ";
227 str+=
"positive strand";
230 str+=
"negative strand";
233 str+=
"both strands";
236 str+=
"both strands (reverse)";
239 str+=
"strand unknown";
255 const string* type_label)
260&& feat.
GetComment().find(*type_label) == string::npos) {
265}
else if(type_label) {
266*
label+= *type_label;
277 const string* type_label)
288 if(!
rna.IsSetExt()) {
296 switch(
rna.GetExt().Which()) {
301tmp_label =
rna.GetExt().GetName();
303(tmp_label ==
"ncRNA"|| tmp_label ==
"tmRNA" 304|| tmp_label ==
"misc_RNA")) {
307 if((*q)->GetQual() ==
"product") {
308tmp_label = (*q)->GetVal();
313 if((
flags&
fFGL_Type) == 0 && type_label != 0 && !tmp_label.empty() && tmp_label.find(*type_label) == string::npos) {
314*
label+= *type_label +
"-"+ tmp_label;
315}
else if(!tmp_label.empty()) {
316*
label+= tmp_label;
317}
else if(type_label) {
318*
label+= *type_label;
323 if( !
rna.GetExt().GetTRNA().IsSetAa() ) {
329 rna.GetExt().GetTRNA().GetAa().Which();
333 switch(aa_code_type) {
336aa_code =
rna.GetExt().GetTRNA().GetAa().GetIupacaa();
351aa_code =
rna.GetExt().GetTRNA().GetAa().GetNcbieaa();
366aa_code =
rna.GetExt().GetTRNA().GetAa().GetNcbi8aa();
371aa_code =
rna.GetExt().GetTRNA().GetAa().GetNcbistdaa();
380*
label+= *type_label +
"-"+ tmp_label;
381}
else if(!tmp_label.empty()) {
382*
label+= tmp_label;
383}
else if(type_label) {
384*
label+= *type_label;
394 if(
rna.GetExt().GetGen().CanGetProduct()) {
395*
label=
rna.GetExt().GetGen().GetProduct();
396}
else if(
rna.GetExt().GetGen().CanGetClass()) {
397*
label=
rna.GetExt().GetGen().GetClass();
410 if( dbtag.
GetDb() ==
"dbSNP") {
411 if( !tlabel->empty() ) {
420*tlabel +=
tag.GetStr();
433 const string* type_label)
472*tlabel += (*it)->GetVal();
481*tlabel += type_label ? *type_label :
string(
"");
490*tlabel = (*it)->GetVal();
501 if(pos == string::npos) {
504*tlabel += feat.
GetComment().substr(0, pos);
507*tlabel += type_label ? *type_label :
string(
"");
516 stringstd_name, func, num, other;
519 if(other.empty()) other = (*it)->GetVal();
520 if(std_name.empty() &&
NStr::EqualNocase((*it)->GetQual(),
"standard_name")) {
521std_name = (*it)->GetVal();
525func = (*it)->GetVal();
529num = (*it)->GetVal();
533 if(!std_name.empty()) {
545 if(!other.empty()) {
551*tlabel += type_label ? *type_label :
string(
"");
578 if( !tlabel->empty() ) {
590 const string* type_label,
639tlabel += CSeqFeatData::GetTypeInfo_enum_EBond()
644tlabel += CSeqFeatData::GetTypeInfo_enum_ESite()
672tlabel += CSeqFeatData::GetTypeInfo_enum_EPsec_str()
687 if( !
str.empty() ) {
690(*iter)->GetLabel(&
str);
711 if(!tlabel.empty()) {
718 stringprefix(
"/");
721tlabel += prefix + (**it).GetQual();
723 if(!(**it).GetVal().empty()) {
724tlabel +=
"="+ (**it).GetVal();
731 if(tlabel.empty()) {
760*
label+= type_label;
769 size_tlabel_len =
label->size();
774*
label+= type_label;
785 switch(label_type) {
819 boolmapped =
false;
820 if(
id.IsLocal() ) {
822 if(
local.IsId() ) {
823 intold_id =
local.GetId();
824 intnew_id =
RemapId(old_id, tse);
825 if( new_id != old_id ) {
827 local.SetId(new_id);
837 boolmapped =
false;
838 if(
id.IsLocal() ) {
840 if(
local.IsId() ) {
841 intold_id =
local.GetId();
843 if( new_id != old_id ) {
845 local.SetId(new_id);
855 boolmapped =
false;
937 if( oid1.
IsId() ) {
938 intoid1int = oid1.
GetId();
939 intoid2int = oid2.
GetId();
940 if( oid1int != oid2int ) {
941 returnoid1int < oid2int;
944 else if( oid1.
IsStr() ) {
945 const string& oid1str = oid1.
GetStr();
946 const string& oid2str = oid2.
GetStr();
985 for(
CFeat_CIit(master_seq, range, sel); it; ++it ) {
986 if( it->GetSeq_feat_Handle() == feat ) {
992 "MapSeq_feat: feature not found");
1002 if( !master_seq ) {
1004 "MapSeq_feat: master sequence not found");
1023 if( !master_seq ) {
1025 "MapSeq_feat: master sequence not found");
1070: m_StartType(start ==
CSeqFeatData::eSubtype_bad? subtype: start),
1071m_CurrentType(subtype),
1073m_ByProduct(
false)
1075 switch( subtype ) {
1153 returnsm_SpecialVDJTypes;
1200 boolsx_IsIrregularLocation(
const CSeq_loc& loc,
1205 if( !loc.
IsMix() ) {
1209 if( !loc.
GetId() ) {
1220 boolplus_strand = !
IsReverse(strand);
1227 if( sx_IsIrregularLocation(loc1, circular_length) ) {
1235 if( range.
Empty() ) {
1241 if( plus_strand ) {
1242 if( range.
GetFrom() < pos ) {
1245pos = range.
GetTo()+1;
1249 if( range.
GetTo() > pos ) {
1272 const CSeq_id* single_id = 0;
1322 static const charkQual_transcript_id[] =
"transcript_id";
1323 static const charkQual_orig_transcript_id[] =
"orig_transcript_id";
1324 static const charkQual_orig_protein_id[] =
"orig_protein_id";
1326kQualPriority_transcript_id,
1327kQualPriority_orig_transcript_id,
1328kQualPriority_orig_protein_id,
1332 structSMatchingQuals {
1347 if( (*it)->IsSetVal() ) {
1348 const string& qual = (*it)->GetQual();
1349 if( qual == kQual_orig_protein_id ||
1350qual == kQual_orig_transcript_id ||
1351qual == kQual_transcript_id ) {
1360 explicitSMatchingQuals(
const CMappedFeat& feat)
1371 if( (*it)->IsSetVal() ) {
1372 const string& qual = (*it)->GetQual();
1373 if( qual == kQual_orig_protein_id ) {
1374qq[kQualPriority_orig_protein_id] = *it;
1376 else if( qual == kQual_orig_transcript_id ) {
1377qq[kQualPriority_orig_transcript_id] = *it;
1379 else if( qual == kQual_transcript_id ) {
1380qq[kQualPriority_transcript_id] = *it;
1387 Uint1GetMatch(
constSMatchingQuals& quals2)
const 1389 for(
int i= 0;
i< kQualPriority_count; ++
i) {
1390 if( qq[
i] && quals2.qq[
i] &&
1391qq[
i]->GetVal() == quals2.qq[
i]->GetVal() ) {
1403 returnSMatchingQuals::HasMatch(feat);
1412 if( xrefs.size() == 1 ) {
1416 if(
data.IsGene() ) {
1434SMatchingQuals quals1(feat1);
1435SMatchingQuals quals2(feat2);
1436 returnquals1.GetMatch(quals2);
1450(
true|| sx_IsIrregularLocation(loc, circular_length)) ) {
1455 returnoverlap_type;
1475 if( feat_type != parent_type ) {
1476 for(
STypeLinklink(feat_type); link; ++link ) {
1487 static const intkBetterTypeParentQuality= 1000;
1488 static const intkByLocusParentQuality = 750;
1489 static const intkSameTypeParentQuality = 500;
1490 static const intkWorseTypeParentQuality = kSameTypeParentQuality;
1496 intd_child = sx_GetRootDistance(child);
1497 intd_parent = sx_GetRootDistance(parent);
1498 if( d_parent < d_child ) {
1501 returnkBetterTypeParentQuality - (d_child - d_parent);
1506 returnkWorseTypeParentQuality - (d_parent - d_child);
1525 if(
id.IsLocal() ) {
1543 if(
data.IsGene() ) {
1566sx_GetOverlapType(link, c_loc, circular_length);
1572sel.IncludeFeatSubtype(*type_ptr);
1582 if( overlap >= 0 && overlap < best_overlap ) {
1584best_overlap = overlap;
1621best_parent = sx_GetParentByRef(feat, link);
1622 if( best_parent ) {
1627best_parent = sx_GetParentByOverlap(feat, link, circular_length);
1628 if( best_parent ) {
1654 voidCheckBest(
Int1quality,
Int8overlap, CFeatInfo*
info)
1657 if( (quality > m_Quality ||
1658(quality == m_Quality && overlap < m_Overlap)) ) {
1659m_Quality = quality;
1660m_Overlap = overlap;
1664 voidCheckBest(
constSBestInfo&
b)
1666CheckBest(
b.m_Quality,
b.m_Overlap,
b.m_Info);
1673 structSFeatRangeInfo {
1687 voidx_CanonizeId(TCanonicalIdsMap& ids_map)
1690 autoiter = ids_map.find(m_Id);
1691 if( iter != ids_map.end() ) {
1692m_Id = iter->second;
1696m_Info->m_Feat.GetScope(),
1701ids_map[m_Id] = new_id;
1706SFeatRangeInfo(TCanonicalIdsMap& ids_map,
1707CFeatInfo&
info, SBestInfo* best,
1708 boolby_product =
false)
1710m_SplitRange(
false),
1714m_Id =
info.m_Feat.GetProductId();
1716m_Range =
info.m_Feat.GetProductTotalRange();
1720m_Id =
info.m_Feat.GetLocationId();
1722m_Range =
info.m_Feat.GetLocationTotalRange();
1726x_CanonizeId(ids_map);
1728SFeatRangeInfo(TCanonicalIdsMap& ids_map,
1729CFeatInfo&
info, SBestInfo* best,
1731: m_Id(it->
first),
1732m_Range(it->second.GetOverlappingRange()),
1734m_SplitRange(
false),
1738x_CanonizeId(ids_map);
1741 structPLessByStart {
1743 booloperator()(
constSFeatRangeInfo&
a,
constSFeatRangeInfo&
b)
const 1745 return a.m_Id <
b.m_Id ||
1746(
a.m_Id ==
b.m_Id &&
a.m_Range <
b.m_Range);
1751 booloperator()(
constSFeatRangeInfo&
a,
constSFeatRangeInfo&
b)
const 1753 return a.m_Id <
b.m_Id ||
1754(
a.m_Id ==
b.m_Id &&
1755(
a.m_Range.GetToOpen() <
b.m_Range.GetToOpen() ||
1756(
a.m_Range.GetToOpen() ==
b.m_Range.GetToOpen() &&
1757 a.m_Range.GetFrom() <
b.m_Range.GetFrom())));
1762 bools_AddCircularRanges(vector<SFeatRangeInfo>& rr,
1763SFeatRangeInfo& range_info,
1764 boolby_product =
false)
1766 const boolkAllowOriginInGap =
true;
1770 if( !kAllowOriginInGap && range_info.m_Range.GetFrom() != 0 ) {
1775range_info.m_Info->m_Feat.GetProduct():
1776range_info.m_Info->m_Feat.GetLocation();
1787 if( start <= stop ) {
1791 TSeqPoscircular_length = sx_GetCircularLength(range_info.m_Info->m_Feat.GetScope(), range_info.m_Id);
1795 if( !kAllowOriginInGap && range_info.m_Range.GetToOpen() < circular_length ) {
1800 TSeqPostotal_end_open = range_info.m_Range.GetToOpen();
1801range_info.m_SplitRange =
true;
1802range_info.m_Range.SetTo(stop);
1803rr.push_back(range_info);
1804range_info.m_Range.SetFrom(start);
1805range_info.m_Range.SetToOpen(total_end_open);
1806rr.push_back(range_info);
1810 voids_AddRanges(TCanonicalIdsMap& ids_map,
1811vector<SFeatRangeInfo>& rr,
1816 info.m_MultiId =
true;
1820SFeatRangeInfo range_info(ids_map,
info, best, it);
1821rr.push_back(range_info);
1825 typedefvector<SBestInfo> TBestArray;
1826 typedefvector<SFeatRangeInfo> TRangeArray;
1827 typedefvector<CFeatTree::CFeatInfo*> TInfoArray;
1834 returnsx_GetQualMatch(feat.
m_Feat, parent.
m_Feat);
1839 classCFeatTreeParentTypeIndex :
public CObject 1845m_ByProduct(by_product),
1850TRangeArray& GetIndex(TCanonicalIdsMap& ids_map,
1851 constTInfoArray& feats) {
1852 if( m_IndexedParents == feats.size() ) {
1855 for(
size_tind = m_IndexedParents; ind < feats.size(); ++ind ) {
1857 if( feat_info.
m_AddIndex< m_IndexedParents ||
1862SFeatRangeInfo range_info(ids_map, feat_info, 0, m_ByProduct);
1863 if( range_info.m_Id ) {
1864 if( !s_AddCircularRanges(m_Index, range_info, m_ByProduct) ) {
1865m_Index.push_back(range_info);
1869s_AddRanges(ids_map,
1870m_Index, feat_info, 0,
1876 sort(m_Index.begin(), m_Index.end(), PLessByEnd());
1877m_IndexedParents = feats.size();
1884 size_tm_IndexedParents;
1885TRangeArray m_Index;
1898 constTInfoArray& feats) {
1902index =
newCFeatTreeParentTypeIndex(
type, by_product);
1979 if(
this!= &ft ) {
2038 for( ; it; ++it ) {
2048 "CFeatTree: feature is null");
2053 if( !
info.m_Feat ) {
2056 info.m_AddIndex = index;
2057 info.m_Feat = feat;
2058 info.m_CanMatchByQual = sx_CanMatchByQual(feat);
2059 info.m_IsSetGene = sx_GeneSuppressed(feat);
2078 "CFeatTree: feature not found");
2089 "CFeatTree: feature not found");
2091 returnit->second.m_Feat;
2105pair<int, CFeatTree::CFeatInfo*>
2109pair<int, CFeatInfo*> ret(0,
nullptr);
2110 if( !
info.m_Feat.IsSetXref() ) {
2121 if( !
id.IsLocal() ) {
2124vector<CSeq_feat_Handle> ff =
2126 ITERATE( vector<CSeq_feat_Handle>, fit, ff ) {
2132sx_GetParentTypeQuality(parent->
GetSubtype(),
2133 info.GetSubtype());
2134 if( quality > ret.first ) {
2135ret.first = quality;
2136ret.second = parent;
2140 if( ret.first > kByLocusParentQuality ) {
2146 info.GetSubtype()) ) {
2152 if(
data.IsGene() ) {
2153vector<CSeq_feat_Handle> ff =
2155 ITERATE( vector<CSeq_feat_Handle>, fit, ff ) {
2158ret.first = kByLocusParentQuality;
2163ret.first = kByLocusParentQuality;
2177pair<int, CFeatInfo*> parent =
2179 if( !parent.second ) {
2186 if( parent.first <= kWorseTypeParentQuality ||
2187parent.first == kSameTypeParentQuality ) {
2195 if( parent.second->IsSetParent() &&
2196parent.second->m_Parent == &
info) {
2200pair<int, CFeatInfo*> grand_parent =
2202 if( grand_parent.second == &
info) {
2204 if( parent.first < grand_parent.first ) {
2210 if( parent.second->IsGene() ) {
2218 if( !
info.IsSetGene() ) {
2240 tree->GetSNPStrandMode() ==
tree->eSNPStrand_both ) {
2244 if(
info.m_Feat.IsSetExcept_text() &&
2245 info.m_Feat.GetExcept_text().find(
"trans-splicing") !=
NPOS) {
2255 bool operator()(
constSBestInfo& info1,
constSBestInfo& info2)
const{
2256 if(info1.m_Info && info2.m_Info) {
2257 if(info1.m_Quality != info2.m_Quality) {
2258 returninfo1.m_Quality > info2.m_Quality;
2260 if(info1.m_Overlap != info2.m_Overlap) {
2261 returninfo1.m_Overlap < info2.m_Overlap;
2264 returninfo1.m_Info < info2.m_Info;
2275 size_t cnt= features.size();
2276 for(
size_t i= 0;
i<
cnt; ++
i) {
2303 if( c->GetSubtype() == subtype ) {
2314 info.CheckBest(quality, overlap, parent);
2353 if(cr1.first == cr2.first)
return false;
2355 if(cr1.second.parents.size() != cr2.second.parents.size()) {
2356 returncr1.second.parents.size() < cr2.second.parents.size();
2359 if(!cr1.second.parents.empty()) {
2360 constSBestInfo& p1 = *cr1.second.parents.begin();
2361 constSBestInfo& p2 = *cr2.second.parents.begin();
2362 if(p1.m_Quality != p2.m_Quality)
returnp1.m_Quality > p2.m_Quality;
2363 if(p1.m_Overlap != p2.m_Overlap)
returnp1.m_Overlap < p2.m_Overlap;
2370 if(
cmp!= 0)
return cmp< 0;
2375 if(
cmp!= 0)
return cmp< 0;
2381 if( !f2.
IsSetId() )
return true;
2388 if(
cmp!= 0)
return cmp< 0;
2403 if( !giim2.
IsSetDb() )
return true;
2405 if(
cmp!= 0)
return cmp< 0;
2407 else if( giim2.
IsSetDb() )
return false;
2411 if(
cmp!= 0)
return cmp< 0;
2420 if( oid1.
IsId() ) {
2421 if( !oid2.
IsId() )
return true;
2426 else if( oid1.
IsStr() ) {
2427 if( !oid2.
IsStr() )
return false;
2429 if(
cmp!= 0)
return cmp< 0;
2437 else if( f2.
IsSetId() )
return false;
2455TOrderedChildren ordered_children;
2457 if(ci->second.parents.empty())
continue;
2458ordered_children.insert(ci);
2460 ITERATE(TOrderedChildren, ci, ordered_children) {
2462 if(child.second.parents.empty())
continue;
2464bests[(*ci)->second.index] = *child.second.parents.begin();
2465 CFeatInfo* parent = child.second.parents.begin()->m_Info;
2472 if(bi->m_Info == parent) {
2477 if(*pci == (*ci)->first)
continue;
2479 if(
info.m_Info == parent) {
2480 info.m_Info =
nullptr;
2490 return r1.GetFrom() <
r2.GetFrom() ||
r1.GetToOpen() >
r2.GetToOpen();
2499TCanonicalIdsMap& ids_map)
2504 boolcheck_genes =
false;
2505 if(
tree->GetGeneCheckMode() ==
tree->eGeneCheck_match &&
2510 tree->GetBestGene(features[0]->m_Feat,
tree->eBestGene_OverlappedOnly);
2511check_genes =
true;
2516 size_t cnt= features.size();
2517bests.resize(
cnt);
2518 for(
size_t i= 0;
i<
cnt; ++
i) {
2520SBestInfo* best = &bests[
i];
2521SFeatRangeInfo range_info(ids_map, feat_info, best);
2522 if( range_info.m_Id ) {
2523 if( !s_AddCircularRanges(cc, range_info) ) {
2524cc.push_back(range_info);
2531 sort(cc.begin(), cc.end(), PLessByStart());
2533 typedefpair<CFeatTree::CFeatInfo*, CFeatTree::CFeatInfo*> TFeatPair;
2539TRangeArray::iterator
pi= pp.begin();
2540TRangeArray::iterator ci = cc.begin();
2541 for( ; ci != cc.end(); ) {
2543 while(
pi!= pp.end() &&
pi->m_Id < ci->m_Id ) {
2546 if(
pi== pp.end() ) {
2550 if( ci->m_Id < cur_id || !ci->m_Id ) {
2554}
while( ci != cc.end() && (ci->m_Id < cur_id || !ci->m_Id) );
2559TRangeArray::iterator pe =
pi;
2560 while( pe != pp.end() && pe->m_Id == cur_id ) {
2565sx_GetCircularLength(
pi->m_Info->m_Feat.GetScope(), cur_id);
2569TRangeArray::iterator
i= pe;
2571 i->m_MinFrom = min_from;
2573min_from =
min(min_from, (--
i)->m_Range.
GetFrom());
2574 i->m_MinFrom = min_from;
2579 for( ; ci != cc.end() &&
pi!= pe && ci->m_Id == cur_id; ++ci ) {
2586sx_GetOverlapType(link, c_loc, circular_length);
2597 pi->m_Range.GetToOpen() < ci->m_Range.GetFrom() ) {
2602 for( TRangeArray::iterator pc =
pi;
2603pc != pe && pc->m_MinFrom < ci->m_Range.GetToOpen();
2605 if( !pc->m_Range.IntersectingWith(ci->m_Range) ) {
2608 if( check_genes &&
info.IsSetGene() ) {
2610 if(
info.m_Gene != pc->m_Info->GetChildrenGene() ) {
2614 if(
info.m_MultiId && pc->m_Info->m_MultiId &&
2615!multi_id_tested.
insert(TFeatPair(&
info, pc->m_Info)).second ) {
2625 Int1quality = s_GetParentQuality(
info, *pc->m_Info);
2629ci->m_Id && pc->m_Id &&
2646 if( overlap >= 0 ) {
2648 if( !disambibuator.
Add(ci->m_Info, pc->m_Info, quality, overlap) ) {
2652ci->m_Best->CheckBest(quality, overlap, pc->m_Info);
2659 if(
info.m_MultiId || pc->m_Info->m_MultiId ) {
2676 if( !c_loc2 || c_loc2_strand != pstrand ) {
2683c_loc2_strand = pstrand;
2695 if( overlap >= 0 ) {
2697disambibuator.
Add(ci->m_Info, pc->m_Info, quality, overlap);
2699ci->m_Best->CheckBest((
Int1)(quality-1), overlap, pc->m_Info);
2704 for( ; ci != cc.end() && ci->m_Id == cur_id; ++ci ) {
2734 if( features.empty() ) {
2739 boolunassigned =
false;
2743 if( !
info.IsSetParent() ) {
2744 if(
info.IsSetGene() ) {
2745 if(
info.m_Gene ) {
2757 if( !unassigned ) {
2770 if( parents.empty() ) {
2775 if( bests.empty() ) {
2776 swap(bests, bests1);
2779 for(
size_t i= 0;
i< bests1.size(); ++
i) {
2780bests[
i].CheckBest(bests1[
i]);
2784 if( bests.empty() ) {
2790 if( parents.empty() ) {
2795 size_t cnt= features.size();
2799TFeatArray::iterator dst = features.begin();
2800 for(
size_t i= 0;
i<
cnt; ++
i) {
2802 if( !
info.IsSetParent() ) {
2814features.erase(dst, features.end());
2820 if( features.empty() ) {
2826TRangeArray& genes =
2828 if( genes.empty() ) {
2833 size_t cnt= features.size();
2837 for(
size_t i= 0;
i<
cnt; ++
i) {
2839 if( !
info.IsSetGene() ) {
2870 if(
info.IsSetGene() ) {
2882 boolhas_genes =
false;
2893 else if( !
info.IsSetGene() &&
STypeLink(feat_type).CanHaveGeneParent() ) {
2910 if( !old_feats.empty() ) {
2911old_feats.insert(old_feats.end(),
2912new_feats.begin(), new_feats.end());
2913 swap(old_feats, new_feats);
2916 if( has_genes && !new_feats.empty() ) {
2938vector<TFeatArray> feats_by_type;
2940 size_tnew_count = 0;
2943 if(
info.IsSetParent() ) {
2956 size_tindex = feat_type;
2957 if( index >= feats_by_type.size() ) {
2958feats_by_type.resize(index+1);
2960feats_by_type[feat_type].push_back(&
info);
2964 if( new_count == 0 ) {
2968 for(
size_t type= 0;
type< feats_by_type.size(); ++
type) {
2970 if( feats.empty() ) {
2976 if( feats.empty() ) {
3003 if(
info.m_IsLinkedToRoot ==
info.eIsLinkedToRoot_linking ) {
3005<<
info.m_Feat.GetOriginalFeature()
3006<<
info.m_Parent->m_Feat.GetOriginalFeature()
3009 "CFeatTree: cycle in xrefs to parent feature");
3011 if(
info.m_Parent ) {
3012 info.m_IsLinkedToRoot =
info.eIsLinkedToRoot_linking;
3014 info.m_IsLinkedToRoot =
info.eIsLinkedToRoot_linked;
3027 info.m_Parent = &parent;
3028 info.m_IsSetParent =
true;
3038 info.m_IsSetParent =
true;
3039 info.m_IsLinkedToRoot =
info.eIsLinkedToRoot_linked;
3046 info.m_Gene = gene;
3047 info.m_IsSetGene =
true;
3053 if( !
info.IsSetParent() ) {
3056 return info.m_Parent;
3063 return info.m_Children;
3072ret =
info->m_Feat;
3102vector<CMappedFeat> children;
3109vector<CMappedFeat>& children)
3120children.reserve(infos->size());
3122children.push_back((*it)->m_Feat);
3148m_CanMatchByQual(
false),
3149m_IsSetParent(
false),
3150m_IsSetGene(
false),
3151m_IsSetChildren(
false),
3153m_IsLinkedToRoot(eIsLinkedToRoot_unknown),
3167 returnm_Feat.GetAnnot().GetTSE_Handle();
3184 if( skip_bottom ) {
3190 if( top_type != bottom_type ) {
3191 for(
STypeLinklink(bottom_type); link; ++link ) {
3217bottom_type, top_type, base_sel);
3309 "GetBestGeneForMrna: mrna_feat is not a mRNA");
3313 tree.AddGenesForMrna(mrna_feat, base_sel);
3314 return tree.GetBestGene(mrna_feat, lookup_type);
3316 returnfeat_tree->
GetBestGene(mrna_feat, lookup_type);
3329 "GetBestGeneForCds: cds_feat is not a cdregion");
3333 tree.AddGenesForCds(cds_feat, base_sel);
3334 return tree.GetBestGene(cds_feat, lookup_type);
3336 returnfeat_tree->
GetBestGene(cds_feat, lookup_type);
3348 "GetBestMrnaForCds: cds_feat is not a cdregion");
3352 tree.AddMrnasForCds(cds_feat, base_sel);
3367 "GetBestCdsForMrna: mrna_feat is not a mRNA");
3371 tree.AddCdsForMrna(mrna_feat, base_sel);
3374 constvector<CMappedFeat>& children = feat_tree->
GetChildren(mrna_feat);
3375 ITERATE( vector<CMappedFeat>, it, children ) {
3385list< CMappedFeat >& mrna_feats,
3392 "GetMrnasForGene: gene_feat is not a gene");
3396 tree.AddMrnasForGene(gene_feat, base_sel);
3400 constvector<CMappedFeat>& children = feat_tree->
GetChildren(gene_feat);
3401 ITERATE( vector<CMappedFeat>, it, children ) {
3403mrna_feats.push_back(*it);
3410list< CMappedFeat >& cds_feats,
3417 "GetCdssForGene: gene_feat is not a gene");
3421 tree.AddCdsForGene(gene_feat, base_sel);
3425 constvector<CMappedFeat>& children = feat_tree->
GetChildren(gene_feat);
3426 ITERATE( vector<CMappedFeat>, it, children ) {
3428 constvector<CMappedFeat>& children2 = feat_tree->
GetChildren(*it);
3429 ITERATE( vector<CMappedFeat>, it2, children2 ) {
3431cds_feats.push_back(*it2);
3436cds_feats.push_back(*it);
3450 "GetBestGeneForFeat: feat is null");
3454 tree.AddGenesForFeat(feat, base_sel);
3455 return tree.GetBestGene(feat, lookup_type);
3457 returnfeat_tree->
GetBestGene(feat, lookup_type);
3469 "GetBestParentForFeat: feat is null");
3473 tree.AddFeaturesFor(feat, parent_type, base_sel);
3474 return tree.GetParent(feat, parent_type);
3476 returnfeat_tree->
GetParent(feat, parent_type);
3491 boolrevert_locations =
false;
3493 switch(overlap_type) {
3505revert_locations =
true;
3522 else if( loc.
IsInt() ) {
3545 const CSeq_id* single_id = 0;
3561 _TRACE(
"test for circularity failed: "<< e.GetMsg());
3575 CFeat_CIfeat_it(h, range, strand, sel);
3576 for( ; feat_it; ++feat_it) {
3578 Int8cur_diff = ( !revert_locations ) ?
3594feats.push_back(sc);
3599 for( ; feat_it; ++feat_it) {
3601 Int8cur_diff = ( !revert_locations ) ?
3617feats.push_back(sc);
3622 _TRACE(
"GetOverlappingFeatures(): error: feature iterator failed");
3638overlap_type, scores, base_sel);
3640 if( !scores.empty() ) {
3642 returnmax_element(scores.begin(), scores.end())->second;
3645 returnmin_element(scores.begin(), scores.end())->second;
3660 switch( need_subtype ) {
3693need_subtype, overlap_type, 0, base_sel);
3708 boolsevere_feat_exception =
3712 if(severe_feat_exception ||
3729 for(
CFeat_CIfeat_it(annot); feat_it; ++feat_it ) {
3739 for(
CFeat_CIfeat_it(entry); feat_it; ++feat_it ) {
3780vector<CMappedFeat> children = ft.
GetChildren(parent);
3781 ITERATE(vector<CMappedFeat>, it, children ) {
3812stop->
SetPnt().SetId().Assign(citer.GetSeq_id());
3821 boolpos1_not_in =
false;
3822 if(pos1 == ((
TSeqPos)-1)) {
3823pos1_not_in =
true;
3827 boolpos2_not_in =
false;
3828 if(pos2 == ((
TSeqPos)-1)) {
3829pos2_not_in =
true;
3831 if(pos1_not_in && pos2_not_in) {
3841 unsigned intframe = 0;
3858 TSeqPosmod1 = (pos1 + 3 - frame) %3;
3864}
else if(pos1 < frame) {
3875 TSeqPosmod2 = (pos2 + 3 - frame) %3;
3878&& pos2 == cds_len) {
3880}
else if(pos2 <= frame) {
3884 if(pos2 > cds_len) {
3902 if( (mod1 != 0) && (mod2 != 2) ) {
3904}
else if(mod1 != 0) {
3906}
else if(mod2 != 2) {
3917 if(!orig_feat.IsSetData() || !orig_feat.GetData().IsCdregion()) {
3921 if(orig_feat.IsSetPseudo() && orig_feat.GetPseudo()) {
3943 if(parent_entry.
IsSet()
3953 for(; annot_ci; ++annot_ci) {
3954 if((*annot_ci).IsFtable()) {
3962new_annot->
SetData().SetFtable();
3969orig_feat = new_annot.
TakeFeat(feh);
3971 if(feat_list.empty())
3985 boolany_change =
false;
3988 boolshould_be_partial = partial5 || partial3;
3989 boolis_partial =
false;
3993 if(should_be_partial && !is_partial) {
3997 else if(!should_be_partial && is_partial) {
4008 boolany_change =
false;
4013 if((partial5 && !prot_5) || (!partial5 && prot_5)
4014|| (partial3 && !prot_3) || (!partial3 && prot_3)) {
4035 if(partial5 && partial3) {
4038 else if(partial5) {
4041 else if(partial3) {
4064 boolany_change =
false;
4084new_feat->
Assign(*(
f->GetSeq_feat()));
4092 boolfound =
false;
4096 if((*it)->IsMolinfo()) {
4104beh.
SetDescr().Set().push_back(new_molinfo_desc);
4132 if(!prot_bsh || !prot_bsh.
IsProtein())
4139 if(new_protein && new_protein->
IsSetInst()) {
4152new_feat->
Assign(*(
f->GetSeq_feat()));
4171 booladded =
false;
4174 if((*it)->IsFtable()) {
4187annot->
SetData().SetFtable().push_back(sf);
4202new_prot->
SetData().SetProt().SetName().push_back(protein_name);
4213vector<CMappedFeat>& children,
4214feature::CFeatTree& featTree)
4219vector<CMappedFeat> c = featTree.GetChildren(mf);
4220 for(vector<CMappedFeat>::iterator it = c.begin(); it != c.end(); it++) {
4222 if(
f.GetFeatSubtype() == subtype) {
4223children.push_back(
f);
4237vector<CMappedFeat>& children)
4241feature::CFeatTree myTree;
4244vector<CMappedFeat> c = myTree.GetChildren(mf);
4245 for(vector<CMappedFeat>::iterator it = c.begin(); it != c.end(); it++) {
4247 if(
f.GetFeatSubtype() == subtype) {
4248children.push_back(
f);
4259feature::CFeatTree& ft,
4265 #define SUBTYPE(x) CSeqFeatData::eSubtype_ ## x 4267 typedefvector<CMappedFeat> MFS;
4268 typedefMFS::const_iterator MFSit;
4270 const stringstrRearrange(
"rearrangement required for product");
4287vector<CMappedFeat> vecCds;
4301 for(MFSit it = vecCds.begin(); it != vecCds.end(); it++) {
4302 if(it->IsSetPseudo() && it->GetPseudo()) {
4305 if(it->IsSetExcept_text() && (it->GetExcept_text() == strRearrange)) {
4308biotype =
"protein_coding";
4313vector<CMappedFeat> vecOthers;
4346 for(MFSit it = vecOthers.begin(); it != vecOthers.end(); it++) {
4348 if(!geneIsPseudo && (!it->IsSetPseudo() || !it->GetPseudo())) {
4351 if(singleSubtype ==
SUBTYPE(bad)) {
4352singleSubtype = currentSubtype;
4354 else if(currentSubtype != singleSubtype) {
4355singleSubtype =
SUBTYPE(bad);
4366vector<string> acceptedClasses = {
4368 "autocatalytically_spliced_intron",
4370 "hammerhead_ribozyme",
4390 if(singleSubtype ==
SUBTYPE(ncRNA) && nonPseudo) {
4392 if(!
rna.IsSetExt()) {
4397 if(!ext.
IsGen()) {
4403 if(rnaClass ==
"other") {
4407 if(std::find(acceptedClasses.begin(), acceptedClasses.end(), rnaClass) ==
4408acceptedClasses.end()) {
4425 if(singleSubtype !=
SUBTYPE(bad) && nonPseudo) {
4433 if(singleSubtype ==
SUBTYPE(otherRNA)) {
4434biotype =
"transcribed_pseudogene";
4441 if(singleSubtype !=
SUBTYPE(bad)) {
4457 for(MFSit it = vecCds.begin(); it != vecCds.end(); it++) {
4458 if(!it->IsSetExcept_text()) {
4461 if(it->GetExcept_text() != strRearrange) {
4464 if(it->IsSetPseudo() && it->GetPseudo()) {
4465biotype =
"segment_pseudogene";
4468biotype =
"segment";
4477biotype =
"pseudogene";
4486feature::CFeatTree& ft,
4496feature::CFeatTree& ft,
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.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
bool IsReverse(ENa_strand s)
@ eExtreme_Biological
5' and 3'
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.
@ eBoth
Both preliminary and traceback stages.
CSeq_annot_Handle GetAnnot(void) const
TSeqPos GetLength(void) const
int Compare(const CDbtag &dbt2) const
set< SBestInfo, SBestInfoLess > TBestSet
void Disambiguate(TBestArray &bests)
CFeatTree::CFeatInfo CFeatInfo
map< CFeatInfo *, SCandidates > TChildren
bool Add(CFeatInfo *child, CFeatInfo *parent, Int1 quality, Int8 overlap)
list< CFeatInfo * > TChildList
map< CFeatInfo *, SParentInfo > TParents
CDisambiguator(CFeatTree::TFeatArray &features)
map< TParentKey, CRef< CFeatTreeParentTypeIndex > > TIndex
TRangeArray & GetIndex(CSeqFeatData::ESubtype type, bool by_product, const TInfoArray &feats)
pair< CSeqFeatData::ESubtype, bool > TParentKey
TRangeArray & GetIndex(const STypeLink &link, const TInfoArray &feats)
TCanonicalIdsMap m_CanonicalIds
void GetLabel(string *label) const
void AddLocation(const CSeq_loc &loc, ETransSplicing trans_splcing=eNoTransSplicing)
TLocMap::const_iterator const_iterator
Base class for all object manager exceptions.
Exceptions for objmgr/util library.
void GetLabel(string *label) const
void GetLabel(string *label) const
bool GetLabel(string *label, TLabelFlags flags=0, ELabelVersion version=eLabel_DefaultVersion) const override
Append a label to "label" based on content.
bool GetLabel(string *label, TLabelFlags flags=0, ELabelVersion version=eLabel_DefaultVersion) const override
Get a label that is the concatenation of the pub labels for the pubs in the set.
@RNA_ref.hpp User-defined methods of the data storage class.
ESubtype GetSubtype(void) const
static E_Choice GetTypeFromSubtype(ESubtype subtype)
@ eSubtype_transit_peptide
@ eSubtype_misc_structure
@ eSubtype_bad
These no longer need to match the FEATDEF values in the C toolkit's objfdef.h.
@ eSubtype_mobile_element
static CTempString SubtypeValueToName(ESubtype eSubtype)
Turns a ESubtype into its string value which is NOT necessarily related to the identifier of the enum...
CSeq_feat_EditHandle â.
namespace ncbi::objects::
Seq-loc iterator class â iterates all intervals from a seq-loc in the correct order.
static TSeqPos Convert(const CSeq_data &in_seq, CSeq_data *out_seq, CSeq_data::E_Choice to_code, TSeqPos uBeginIdx=0, TSeqPos uLength=0, bool bAmbig=false, Uint4 seed=17734276)
static const string & GetCode(CSeq_data::E_Choice code_type, TIndex idx)
static const string & GetIupacaa3(TIndex ncbistdaa)
TSeq_feat_Handles GetFeaturesWithId(CSeqFeatData::E_Choice type, TFeatureIdInt id) const
CSeq_feat_Handle GetGeneByRef(const CGene_ref &ref) const
CSeq_feat_Handle GetFeatureWithId(CSeqFeatData::E_Choice type, TFeatureIdInt id) const
TSeq_feat_Handles GetGenesByRef(const CGene_ref &ref) const
container_type::const_iterator const_iterator
container_type::iterator iterator
const_iterator end() const
container_type::value_type value_type
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
static unsigned char depth[2 *(256+1+29)+1]
static vector< string > arr
static void s_GetRnaRefLabelFromComment(const CSeq_feat &feat, string *label, TFeatLabelFlags flags, const string *type_label)
static CMappedFeat GetBestOverlappingFeat(CScope &scope, const CSeq_loc &loc, CSeqFeatData::ESubtype feat_subtype, sequence::EOverlapType overlap_type, TBestFeatOpts opts, const SAnnotSelector *base_sel)
bool sFeatureGetChildrenOfSubtypeFaster(CMappedFeat, CSeqFeatData::ESubtype, vector< CMappedFeat > &, feature::CFeatTree &)
bool sGetFeatureGeneBiotypeWrapper(feature::CFeatTree &, CMappedFeat, string &, bool)
pair< Int8, CMappedFeat > TMappedFeatScore
static const bool kOptimizeTestOverlap
void s_GetContentLabel(const CSeq_feat &feat, string *label, const string *type_label, TFeatLabelFlags flags, CScope *scope)
static void s_GetVariationLabel(const CSeq_feat &feat, string *tlabel, TFeatLabelFlags flags, const string *)
static EStrandMatchRule s_GetStrandMatchRule(const STypeLink &link, const CFeatTree::CFeatInfo &info, const CFeatTree *tree)
static const bool kSplitCircular
static void GetOverlappingFeatures(CScope &scope, const CSeq_loc &loc, CSeqFeatData::E_Choice, CSeqFeatData::ESubtype feat_subtype, sequence::EOverlapType overlap_type, TMappedFeatScores &feats, const SAnnotSelector *base_sel)
static void s_SetChildrenFeatureIds(CFeatTree &ft, const CMappedFeat &feat, int &feat_id)
void s_GetTypeLabel(const CSeq_feat &feat, string *label, TFeatLabelFlags flags)
static void s_GetVariationDbtagLabel(string *tlabel, TFeatLabelFlags, const CDbtag &dbtag)
static bool s_IsNotSubrange(const CRange< TSeqPos > &r1, const CRange< TSeqPos > &r2)
static void s_GetRnaRefLabel(const CSeq_feat &feat, string *label, TFeatLabelFlags flags, const string *type_label)
static bool s_AllowedParentByOverlap(CSeqFeatData::ESubtype child, CSeqFeatData::ESubtype parent)
static bool s_GetImpLabel(const CSeq_feat &feat, string *tlabel, TFeatLabelFlags flags, const string *type_label)
static void s_GetCdregionLabel(const CSeq_feat &feat, string *tlabel, CScope *scope)
vector< TMappedFeatScore > TMappedFeatScores
static void s_CollectBestOverlaps(CFeatTree::TFeatArray &features, TBestArray &bests, const STypeLink &link, TRangeArray &pp, CFeatTree *tree, TCanonicalIdsMap &ids_map)
static void s_SetFeatureId(CFeatTree &ft, const CMappedFeat &feat, int &last_id, const CMappedFeat &parent)
static CRef< CSeq_loc > s_MakePointForLocationStop(const CSeq_loc &loc)
@ eStrandMatch_at_least_one
bool sFeatureGetChildrenOfSubtype(CMappedFeat, CSeqFeatData::ESubtype, vector< CMappedFeat > &)
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static const char * str(char *buf, int n)
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define ERASE_ITERATE(Type, Var, Cont)
Non-constant version with ability to erase current element, if container permits.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
const TSeqPos kInvalidSeqPos
Define special value for invalid sequence position.
void swap(NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair1, NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair2)
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
void Error(CExceptionArgs_Base &args)
#define NCBI_THROW(exception_class, err_code, message)
Generic macro to throw an exception, given the exception class, error code and message string.
virtual void Assign(const CSerialObject &source, ESerialRecursionMode how=eRecursive)
Set object to copy of another one.
const TPrim & Get(void) const
C * SerialClone(const C &src)
Create on heap a clone of the source object.
#define MSerial_AsnText
I/O stream manipulators â.
bool IsPartialStart(ESeqLocExtremes ext) const
check start or stop of location for e_Lim fuzz
ENa_strand GetStrand(void) const
Get the location's strand.
TRange GetTotalRange(void) const
TSeqPos GetStart(ESeqLocExtremes ext) const
Return start and stop positions of the seq-loc.
int Compare(const CSeq_loc &loc) const
bool CheckId(const CSeq_id *&id, bool may_throw=true) const
check that the 'id' field in all parts of the location is the same as the specifies id.
bool IsTruncatedStart(ESeqLocExtremes ext) const
check if parts of the seq-loc are missing
const CSeq_id * GetId(void) const
Get the id of the location return NULL if has multiple ids or no id at all.
void SetStrand(ENa_strand strand)
Set the strand for all of the location's ranges.
bool IsPartialStop(ESeqLocExtremes ext) const
TSeqPos GetStop(ESeqLocExtremes ext) const
void GetMrnasForGene(const CMappedFeat &gene_feat, list< CMappedFeat > &mrna_feats, CFeatTree *feat_tree, const SAnnotSelector *base_sel)
EGeneCheckMode m_GeneCheckMode
bool PromoteCDSToNucProtSet(objects::CSeq_feat_Handle &orig_feat)
Promotes coding region from Seq-annot on nucleotide sequence to Seq-annot on nuc-prot-set if necessar...
CFeatInfo & x_GetInfo(const CSeq_feat_Handle &feat)
CMappedFeat GetBestParentForFeat(const CMappedFeat &feat, CSeqFeatData::ESubtype parent_type, CFeatTree *feat_tree, const SAnnotSelector *base_sel)
bool m_IgnoreMissingGeneXref
CRef< CFeatTreeIndex > m_Index
void GetCdssForGene(const CMappedFeat &gene_feat, list< CMappedFeat > &cds_feats, CFeatTree *feat_tree, const SAnnotSelector *base_sel)
vector< CMappedFeat > GetChildren(const CMappedFeat &feat)
Return all nearest children of a feature.
bool x_AssignParentByRef(CFeatInfo &info)
CMappedFeat GetBestGeneForMrna(const CMappedFeat &mrna_feat, CFeatTree *feat_tree, const SAnnotSelector *base_sel, CFeatTree::EBestGeneType lookup_type)
void SetFeatIdMode(EFeatIdMode mode)
const CTSE_Handle & GetTSE(void) const
bool GetFeatureGeneBiotype(feature::CFeatTree &ft, CMappedFeat mf, string &biotype)
void GetLabel(const CSeq_feat &feat, string *label, TFeatLabelFlags flags, CScope *scope)
void SetSNPStrandMode(ESNPStrandMode mode)
void AddGenesForCds(const CMappedFeat &cds_feat, const SAnnotSelector *base_sel=0)
Add all necessary features to get genes for a cdregion feature.
void AddCdsForMrna(const CMappedFeat &mrna_feat, const SAnnotSelector *base_sel=0)
Add all necessary features to get cdregions for a mRNA feature.
bool RetranslateCDS(const CSeq_feat &cds, CScope &scope)
RetranslateCDS A function to replace the protein Bioseq pointed to by cds.product with the current tr...
void SetIgnoreMissingGeneXref(bool ignore=true)
CFeatInfo * GetChildrenGene(void)
void x_AssignParents(void)
bool AdjustForCDSPartials(const CSeq_feat &cds, CScope &scope)
AdjustForCDSPartials A function to make all of the necessary related changes to a Seq-entry after the...
CMappedFeat GetBestMrnaForCds(const CMappedFeat &cds_feat, CFeatTree *feat_tree, const SAnnotSelector *base_sel)
void x_SetGene(CFeatInfo &info, CFeatInfo *gene)
pair< int, CTSE_Handle > TFullId
vector< CFeatInfo * > TChildren
bool CopyFeaturePartials(CSeq_feat &dst, const CSeq_feat &src)
CopyFeaturePartials A function to copy the start and end partialness from one feature to another.
ESNPStrandMode
Mode of processing SNP strands.
void AddCdsForGene(const CMappedFeat &gene_feat, const SAnnotSelector *base_sel=0)
Add all necessary features to get cdregions for a gene feature.
const TChildren & x_GetChildren(CFeatInfo &info)
const CMappedFeat & GetMappedFeat(const CSeq_feat_Handle &feat) const
Find a corresponding CMappedFeat for a feature already added to a tree.
CMappedFeat GetBestGene(const CMappedFeat &feat, EBestGeneType lookup_type=eBestGene_TreeOnly)
Return parent gene if exists or best overlapping gene.
CMappedFeat GetBestGeneForCds(const CMappedFeat &cds_feat, CFeatTree *feat_tree, const SAnnotSelector *base_sel, CFeatTree::EBestGeneType lookup_type)
void AddMrnasForGene(const CMappedFeat &gene_feat, const SAnnotSelector *base_sel=0)
Add all necessary features to get mRNAs for a gene feature.
void AddProteinFeature(const CBioseq &seq, const string &protein_name, const CSeq_feat &cds, CScope &scope)
AddProteinFeature A function to create a protein feature with the specified protein name.
void ClearFeatureIds(const CSeq_annot_EditHandle &annot)
void AddFeatureToBioseq(const CBioseq &seq, const CSeq_feat &f, CScope &scope)
AddFeatureToBioseq A function to add a feature to a Bioseq - will create a new feature table Seq-anno...
ELabelType
For compatibility with legacy code.
EBestGeneFeatIdMode m_BestGeneFeatIdMode
void x_AssignParentsByOverlap(TFeatArray &features, const STypeLink &link)
ESNPStrandMode m_SNPStrandMode
ELocationInFrame IsLocationInFrame(const CSeq_feat_Handle &cds, const CSeq_loc &loc)
Determines whether location loc is in frame with coding region cds.
CMappedFeat GetBestGeneForFeat(const CMappedFeat &feat, CFeatTree *feat_tree, const SAnnotSelector *base_sel, CFeatTree::EBestGeneType lookup_type)
CMappedFeat GetParent(const CMappedFeat &feat)
Return nearest parent of a feature.
vector< CFeatInfo * > TFeatArray
EIsLinkedToRoot m_IsLinkedToRoot
void AddFeaturesFor(CScope &scope, const CSeq_loc &loc, CSeqFeatData::ESubtype bottom_type, CSeqFeatData::ESubtype top_type, const SAnnotSelector *base_sel=0, bool skip_bottom=false)
Add all features from bottom_type to top_type for a feature.
CRef< CSeq_loc_Mapper > CreateSeqLocMapperFromFeat(const CSeq_feat &feat, CSeq_loc_Mapper::EFeatMapDirection dir, CScope *scope)
Create CSeq_loc_Mapper from a feature, check for special cases like exceptions in CDS features.
void AddFeature(const CMappedFeat &feat)
Add a single feature to the tree.
bool GetIgnoreMissingGeneXref(void) const
Mode for taking into account gene xref to a missing genes.
bool AdjustFeaturePartialFlagForLocation(CSeq_feat &new_feat)
AdjustFeaturePartialFlagForLocation A function to ensure that Seq-feat.partial is set if either end o...
bool GetFeatureGeneBiotypeFaster(feature::CFeatTree &ft, CMappedFeat mf, string &biotype)
CMappedFeat MapSeq_feat(const CSeq_feat_Handle &feat, const CBioseq_Handle &master_seq, const CRange< TSeqPos > &range)
void SetGeneCheckMode(EGeneCheckMode mode)
void x_AssignGenesByOverlap(TFeatArray &features)
void GetChildrenTo(const CMappedFeat &feat, vector< CMappedFeat > &children)
Store all nearest children of a feature into a vector.
vector< CFeatInfo * > TChildren
void x_SetGeneRecursive(CFeatInfo &info, CFeatInfo *gene)
CMappedFeat GetParentFeature(const CMappedFeat &feat)
void x_SetNoParent(CFeatInfo &info)
pair< int, CFeatInfo * > x_LookupParentByRef(CFeatInfo &info, CSeqFeatData::ESubtype parent_type)
EGeneCheckMode
Mode for taking into account best gene eGeneCheck_match will try to match a parent feature only if th...
bool IsSetGene(void) const
size_t GetFeatIdsCount(void) const
~CFeatTree(void)
Destructor.
CSeqFeatData::ESubtype GetSubtype(void) const
virtual bool Less(const CSeq_feat &f1, const CSeq_feat &f2, CScope *scope)
void AddGenesForFeat(const CMappedFeat &feat, const SAnnotSelector *base_sel=0)
Add all necessary features to get genes for an arbitrary feature.
void x_VerifyLinkedToRoot(CFeatInfo &info)
vector< CFeatInfo * > TInfoArray
CFeatInfo * x_GetParent(CFeatInfo &info)
CFeatTree & operator=(const CFeatTree &)
int RemapId(int old_id, const CTSE_Handle &tse)
void AddMrnasForCds(const CMappedFeat &cds_feat, const SAnnotSelector *base_sel=0)
Add all necessary features to get mRNAs for a cdregion feature.
EGeneCheckMode GetGeneCheckMode(void) const
void AddFeatures(CFeat_CI it)
Add all features collected by a CFeat_CI to the tree.
void AddGenesForMrna(const CMappedFeat &mrna_feat, const SAnnotSelector *base_sel=0)
Add all necessary features to get genes for a mRNA feature.
void x_SetParent(CFeatInfo &info, CFeatInfo &parent)
bool AdjustProteinMolInfoToMatchCDS(CMolInfo &molinfo, const CSeq_feat &cds)
AdjustProteinMolInfoToMatchCDS A function to change an existing MolInfo to match a coding region.
CFeatInfo * x_FindInfo(const CSeq_feat_Handle &feat)
bool RemapIds(CSeq_feat &feat, const CTSE_Handle &tse)
void ReassignFeatureIds(const CSeq_entry_EditHandle &entry)
EFeatIdMode
Mode of processing feature ids.
int TFeatLabelFlags
binary OR of FFeatLabelFlags
CMappedFeat GetBestCdsForMrna(const CMappedFeat &mrna_feat, CFeatTree *feat_tree, const SAnnotSelector *base_sel)
bool GivesGeneToChildren(void) const
CFeatTree(void)
Construct empty tree.
@ eBestGene_AllowOverlapped
@ eLocationInFrame_InFrame
@ eLocationInFrame_BadStart
@ eLocationInFrame_BadStop
@ eLocationInFrame_BadStartAndStop
@ fFGL_NoComments
Leave out comments, even as fallbacks.
@ fFGL_NoQualifiers
Leave out qualifiers.
@ fFGL_Content
Include its content if there is any.
@ fFGL_Type
Always include the feature's type.
const CSeq_id & GetId(const CSeq_loc &loc, CScope *scope)
If all CSeq_ids embedded in CSeq_loc refer to the same CBioseq, returns the first CSeq_id found,...
TSeqPos GetLength(const CSeq_id &id, CScope *scope)
Get sequence length if scope not null, else return max possible TSeqPos.
ENa_strand GetStrand(const CSeq_loc &loc, CScope *scope=0)
Returns eNa_strand_unknown if multiple Bioseqs in loc Returns eNa_strand_other if multiple strands in...
TSeqPos LocationOffset(const CSeq_loc &outer, const CSeq_loc &inner, EOffsetType how=eOffset_FromStart, CScope *scope=0)
returns (TSeqPos)-1 if the locations don't overlap
sequence::ECompare Compare(const CSeq_loc &loc1, const CSeq_loc &loc2, CScope *scope)
Returns the sequence::ECompare containment relationship between CSeq_locs.
Int8 TestForOverlap64(const CSeq_loc &loc1, const CSeq_loc &loc2, EOverlapType type, TSeqPos circular_len=kInvalidSeqPos, CScope *scope=0)
64-bit version of TestForOverlap() Check if the two locations have ovarlap of a given type.
@ fCompareOverlapping
Check if seq-locs are overlapping.
@ eOverlap_SubsetRev
1st is a subset of 2nd ranges
@ eOverlap_CheckIntervals
2nd is a subset of 1st with matching boundaries
@ eOverlap_Contains
2nd contains 1st extremes
@ eOverlap_CheckIntRev
1st is a subset of 2nd with matching boundaries
@ eOverlap_Simple
any overlap of extremes
@ eOverlap_Interval
at least one pair of intervals must overlap
@ eOverlap_Contained
2nd contained within 1st extremes
@ eOverlap_Subset
2nd is a subset of 1st ranges
@ eContains
First CSeq_loc contains second.
@ eSame
CSeq_locs contain each other.
@ eOffset_FromStart
For positive-orientation strands, start = left and end = right; for reverse-orientation strands,...
static CRef< CBioseq > TranslateToProtein(const CSeq_feat &cds, CScope &scope)
@ eGetId_Seq_id_BestRank
use CSeq_id::BestRank() as the scoring function
@ fBestFeat_FavorLonger
favor longer features over shorter features
EFeatMapDirection
Mapping direction used when initializing the mapper with a feature.
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
CSeq_annot_Handle GetSeq_annotHandle(const CSeq_annot &annot, EMissing action=eMissing_Default)
const CFeat_id & GetId(void) const
const CSeq_feat::TXref & GetXref(void) const
bool GetPseudo(void) const
TClass GetClass(void) const
const CSeq_annot_Handle & GetAnnot(void) const
Get handle to seq-annot for this feature.
void SetDescr(TDescr &v) const
void Remove(void) const
Remove current annot.
const CTSE_Handle & GetTSE_Handle(void) const
const CSeqFeatData & GetData(void) const
TSeqPos GetBioseqLength(void) const
bool IsSetXref(void) const
CSeq_entry_Handle GetSeq_entry_Handle(void) const
Get parent Seq-entry handle.
CSeq_annot_EditHandle AttachAnnot(CSeq_annot &annot) const
Attach an annotation.
void ClearFeatIds(void)
Clear feature ids.
CSeq_feat_EditHandle AddFeat(const CSeq_feat &new_obj) const
bool IsSetProduct(void) const
virtual const CSeq_loc & GetLocation(void) const
void SetInst(TInst &v) const
CBioseq_set_Handle GetParentBioseq_set(void) const
Get parent bioseq-set handle.
CSeq_annot_EditHandle AttachAnnot(CSeq_annot &annot) const
Attach an annotation.
CSeq_entry_Handle GetParentEntry(void) const
Get parent Seq-entry handle.
void SetFeatId(int id)
Set single feature id.
bool IsProtein(void) const
TInst_Topology GetInst_Topology(void) const
CSeq_entry_EditHandle GetEditHandle(void) const
Get 'edit' version of handle.
CBioseq_EditHandle GetEditHandle(void) const
Get 'edit' version of handle.
CSeq_entry_Handle GetParentEntry(void) const
Return a handle for the parent seq-entry of the bioseq.
bool IsSetClass(void) const
CSeq_annot_EditHandle GetEditHandle(void) const
Get 'edit' version of handle.
CScope & GetScope(void) const
Get scope this handle belongs to.
CScope & GetScope(void) const
Get scope this handle belongs to.
void ClearFeatXrefs(void)
CScope & GetScope(void) const
Get scope this handle belongs to.
CSeq_feat_EditHandle TakeFeat(const CSeq_feat_EditHandle &handle) const
CSeq_annot_EditHandle GetAnnot(void) const
CConstRef< CSeq_feat > GetOriginalSeq_feat(void) const
bool IsSetQual(void) const
CSeqFeatData::ESubtype GetFeatSubtype(void) const
CSeqFeatData::E_Choice GetFeatType(void) const
bool IsSetPseudo(void) const
bool IsSetInst_Topology(void) const
void Replace(const CSeq_feat &new_feat) const
Replace the feature with new Seq-feat object.
CConstRef< CSeq_annot > GetSeq_annotCore(void) const
bool IsSetData(void) const
CSeq_entry_EditHandle GetParentEntry(void) const
Navigate object tree.
SAnnotSelector & IncludeFeatSubtype(TFeatSubtype subtype)
Include feature subtype in the search.
SAnnotSelector & SetExactDepth(bool value=true)
SetExactDepth() specifies that annotations will be searched on the segment level specified by SetReso...
SAnnotSelector & SetResolveAll(void)
SetResolveAll() is equivalent to SetResolveMethod(eResolve_All).
SAnnotSelector & SetOverlapTotalRange(void)
Check overlapping only of total ranges.
SAnnotSelector & SetSourceLoc(const CSeq_loc &loc)
Set filter for source location of annotations.
const CSeq_loc & GetLocation(void) const
SAnnotSelector & SetOverlapType(EOverlapType overlap_type)
Set overlap type.
SAnnotSelector & SetAdaptiveDepth(bool value=true)
SetAdaptiveDepth() requests to restrict subsegment resolution depending on annotations found on lower...
SAnnotSelector & SetLimitSeqAnnot(const CSeq_annot_Handle &limit)
Limit annotations to those from the seq-annot only.
SAnnotSelector & SetResolveDepth(int depth)
SetResolveDepth sets the limit of subsegment resolution in searching annotations.
const CSeq_feat_Handle & GetSeq_feat_Handle(void) const
Get original feature handle.
EOverlapType
Flag to indicate location overlapping method.
const CSeq_feat & GetMappedFeature(void) const
Feature mapped to the master sequence.
const CSeq_loc & GetProduct(void) const
SAnnotSelector & SetAnnotType(TAnnotType type)
Set annotation type (feat, align, graph)
SAnnotSelector & SetFeatSubtype(TFeatSubtype subtype)
Set feature subtype (also set annotation and feat type)
CConstRef< CSeq_feat > GetSeq_feat(void) const
Get current seq-feat.
@ eOverlap_Intervals
default - overlapping of individual intervals
@ eOverlap_TotalRange
overlapping of total ranges only
void Reset(void)
Reset reference object.
uint8_t Uint1
1-byte (8-bit) unsigned integer
int64_t Int8
8-byte (64-bit) signed integer
int8_t Int1
1-byte (8-bit) signed integer
static TThisType GetEmpty(void)
static TThisType GetWhole(void)
#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.
static int CompareNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive compare of a substring with another string.
static int Compare(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2, ECase use_case=eCase)
Compare of a substring with another string.
static bool EqualNocase(const CTempString s1, SIZE_TYPE pos, SIZE_TYPE n, const char *s2)
Case-insensitive equality of a substring with another string.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
#define NCBI_XOBJUTIL_EXPORT
static const char label[]
const TSubtype & GetSubtype(void) const
Get the Subtype member data.
list< CRef< CSubSource > > TSubtype
bool IsSetSubtype(void) const
Check if a value has been assigned to Subtype data member.
const TOrg & GetOrg(void) const
Get the Org member data.
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 IsSetLocus_tag(void) const
systematic gene name (e.g., MI0001, ORF0069) Check if a value has been assigned to Locus_tag data mem...
bool IsSetLocus(void) const
Official gene symbol Check if a value has been assigned to Locus data member.
const TLocus_tag & GetLocus_tag(void) const
Get the Locus_tag member data.
bool IsStr(void) const
Check if variant Str is selected.
const TTag & GetTag(void) const
Get the Tag member data.
bool IsId(void) const
Check if variant Id is selected.
const TDb & GetDb(void) const
Get the Db member data.
E_Choice Which(void) const
Which variant is currently selected.
bool IsSetClass(void) const
endeavor which designed this object Check if a value has been assigned to Class data member.
const TClass & GetClass(void) const
Get the Class member data.
const TStr & GetStr(void) const
Get the variant data.
const TType & GetType(void) const
Get the Type member data.
TId GetId(void) const
Get the variant data.
bool IsGen(void) const
Check if variant Gen is selected.
E_Choice
Choice variants.
const TGen & GetGen(void) const
Get the variant data.
bool IsSetClass(void) const
for ncRNAs, the class of non-coding RNA: examples: antisense_RNA, guide_RNA, snRNA Check if a value h...
const TClass & GetClass(void) const
Get the Class member data.
@ e_not_set
No variant selected.
@ e_Name
for naming "other" type
E_Choice Which(void) const
Which variant is currently selected.
const TDb & GetDb(void) const
Get the variant data.
const TStr & GetStr(void) const
Get the variant data.
@ e_Db
pointer to a restriction site database
@ e_Str
may be unparsable
TXref & SetXref(void)
Assign a value to Xref data member.
bool IsSetOrf(void) const
just an ORF ? Check if a value has been assigned to Orf data member.
bool IsSetComment(void) const
Check if a value has been assigned to Comment data member.
vector< CRef< CDbtag > > TDbxref
void ResetPartial(void)
Reset Partial data member.
const TData & GetData(void) const
Get the Data member data.
const TPub & GetPub(void) const
Get the variant data.
bool IsSetData(void) const
the specific data Check if a value has been assigned to Data data member.
bool IsSetQual(void) const
qualifiers Check if a value has been assigned to Qual data member.
E_Choice Which(void) const
Which variant is currently selected.
TPsec_str GetPsec_str(void) const
Get the variant data.
bool CanGetQual(void) const
Check if it is safe to call GetQual method.
void SetLocation(TLocation &value)
Assign a value to Location data member.
bool IsCdregion(void) const
Check if variant Cdregion is selected.
TOrf GetOrf(void) const
Get the Orf member data.
bool IsImp(void) const
Check if variant Imp is selected.
const TRegion & GetRegion(void) const
Get the variant data.
const TCit & GetCit(void) const
Get the Cit member data.
E_Choice Which(void) const
Which variant is currently selected.
void SetPartial(TPartial value)
Assign a value to Partial data member.
const TQual & GetQual(void) const
Get the Qual member data.
bool IsSetPartial(void) const
incomplete in some way? Check if a value has been assigned to Partial data member.
const TId & GetId(void) const
Get the Id member data.
const TLocal & GetLocal(void) const
Get the variant data.
bool IsSetXref(void) const
cite other relevant features Check if a value has been assigned to Xref data member.
const TLocation & GetLocation(void) const
Get the Location member data.
E_Choice
Choice variants.
bool IsLocal(void) const
Check if variant Local is selected.
TBond GetBond(void) const
Get the variant data.
const TId & GetId(void) const
Get the Id member data.
bool IsGene(void) const
Check if variant Gene is selected.
TFrame GetFrame(void) const
Get the Frame member data.
const TData & GetData(void) const
Get the Data member data.
void SetId(TId &value)
Assign a value to Id data member.
bool IsSetData(void) const
the specific data Check if a value has been assigned to Data data member.
bool IsSetExcept(void) const
something funny about this? Check if a value has been assigned to Except data member.
const TExcept_text & GetExcept_text(void) const
Get the Except_text member data.
const TGeneral & GetGeneral(void) const
Get the variant data.
void SetId(TId &value)
Assign a value to Id data member.
const TUser & GetUser(void) const
Get the variant data.
bool IsSetExcept_text(void) const
explain if except=TRUE Check if a value has been assigned to Except_text data member.
const TDbxref & GetDbxref(void) const
Get the Dbxref member data.
void SetData(TData &value)
Assign a value to Data data member.
const TGiim & GetGiim(void) const
Get the variant data.
bool CanGetLocation(void) const
Check if it is safe to call GetLocation method.
const TCdregion & GetCdregion(void) const
Get the variant data.
const TBiosrc & GetBiosrc(void) const
Get the variant data.
bool IsSetId(void) const
Check if a value has been assigned to Id data member.
const TProduct & GetProduct(void) const
Get the Product member data.
const TOrg & GetOrg(void) const
Get the variant data.
const TRsite & GetRsite(void) const
Get the variant data.
const TComment & GetComment(void) const
Get the Comment member data.
bool IsSetCit(void) const
citations for this feature Check if a value has been assigned to Cit data member.
bool IsVariation(void) const
Check if variant Variation is selected.
const TGene & GetGene(void) const
Get the variant data.
TSite GetSite(void) const
Get the variant data.
TPartial GetPartial(void) const
Get the Partial member data.
bool IsSetId(void) const
the feature copied Check if a value has been assigned to Id data member.
const TNon_std_residue & GetNon_std_residue(void) const
Get the variant data.
const TProt & GetProt(void) const
Get the variant data.
TExcept GetExcept(void) const
Get the Except member data.
const TXref & GetXref(void) const
Get the Xref member data.
vector< CRef< CSeqFeatXref > > TXref
vector< CRef< CGb_qual > > TQual
const TRna & GetRna(void) const
Get the variant data.
TGibb GetGibb(void) const
Get the variant data.
bool IsSetDbxref(void) const
support for xref to other databases Check if a value has been assigned to Dbxref data member.
bool IsSetProduct(void) const
product of process Check if a value has been assigned to Product data member.
const TVariation & GetVariation(void) const
Get the variant data.
bool IsRna(void) const
Check if variant Rna is selected.
const THet & GetHet(void) const
Get the variant data.
@ e_Het
cofactor, prosthetic grp, etc, bound to seq
@ e_Region
named region (globin locus)
@ e_Seq
to annotate origin from another seq
@ e_Txinit
transcription initiation
@ e_Num
a numbering system
@ e_Pub
publication applies to this seq
@ e_User
user defined structure
@ e_Rsite
restriction site (for maps really)
@ e_Comment
just a comment
@ e_Non_std_residue
non-standard residue here in seq
@ e_General
for use by various databases
@ e_Gibb
geninfo backbone
@ e_Local
for local software use
@ eFrame_not_set
not set, code uses one
@ eFrame_three
reading frame
const TRelease & GetRelease(void) const
Get the Release member data.
TId GetId(void) const
Get the Id member data.
bool IsMix(void) const
Check if variant Mix is selected.
bool IsSetRelease(void) const
the release Check if a value has been assigned to Release data member.
ENa_strand
strand of nucleic acid
const TId & GetId(void) const
Get the Id member data.
const TWhole & GetWhole(void) const
Get the variant data.
TFrom GetFrom(void) const
Get the From member data.
bool CanGetTo(void) const
Check if it is safe to call GetTo method.
list< CRef< CSeq_loc > > Tdata
const Tdata & Get(void) const
Get the member data.
bool IsSetStrand(void) const
Check if a value has been assigned to Strand data member.
TStrand GetStrand(void) const
Get the Strand member data.
TTo GetTo(void) const
Get the To member data.
bool IsWhole(void) const
Check if variant Whole is selected.
bool IsInt(void) const
Check if variant Int is selected.
const TInt & GetInt(void) const
Get the variant data.
const TMix & GetMix(void) const
Get the variant data.
bool IsSetDb(void) const
dbase used in Check if a value has been assigned to Db data member.
const TDb & GetDb(void) const
Get the Db member data.
@ eNa_strand_both_rev
in reverse orientation
@ eNa_strand_both
in forward orientation
@ eClass_nuc_prot
nuc acid and coded proteins
void SetCompleteness(TCompleteness value)
Assign a value to Completeness data member.
void SetData(TData &value)
Assign a value to Data data member.
bool IsSetCompleteness(void) const
Check if a value has been assigned to Completeness data member.
list< CRef< CSeqdesc > > Tdata
const TInst & GetInst(void) const
Get the Inst member data.
bool IsSetAnnot(void) const
Check if a value has been assigned to Annot data member.
TNcbieaa & SetNcbieaa(void)
Select the variant.
bool IsSetBiomol(void) const
Check if a value has been assigned to Biomol data member.
const TAnnot & GetAnnot(void) const
Get the Annot member data.
bool IsSetInst(void) const
the sequence data Check if a value has been assigned to Inst data member.
const TNcbistdaa & GetNcbistdaa(void) const
Get the variant data.
TBiomol GetBiomol(void) const
Get the Biomol member data.
void SetBiomol(TBiomol value)
Assign a value to Biomol data member.
const TFtable & GetFtable(void) const
Get the variant data.
TCompleteness GetCompleteness(void) const
Get the Completeness member data.
const TData & GetData(void) const
Get the Data member data.
list< CRef< CSeq_annot > > TAnnot
const TPub & GetPub(void) const
Get the Pub member data.
void SetDefaultCompleteness(void)
Assign default value to Completeness data member.
TIupacaa & SetIupacaa(void)
Select the variant.
@ eCompleteness_complete
complete biological entity
@ eCompleteness_no_left
missing 5' or NH3 end
@ eCompleteness_no_right
missing 3' or COOH end
@ eCompleteness_no_ends
missing both ends
@ e_Ncbieaa
extended ASCII 1 letter aa codes
@ e_Ncbistdaa
consecutive codes for std aas
@ e_Iupacaa
IUPAC 1 letter amino acid code.
@ e_not_set
No variant selected.
const TId & GetId(void) const
Get the Id member data.
const TName & GetName(void) const
Get the Name member data.
bool IsSetId(void) const
ids (i.e., SNP rsid / ssid, dbVar nsv/nssv) expected values include 'dbSNP|rs12334',...
bool IsSetName(void) const
names and synonyms some variants have well-known canonical names and possible accepted synonyms Check...
unsigned int
A callback function used to compare two keys in a database.
constexpr auto sort(_Init &&init)
constexpr bool empty(list< Ts... >) noexcept
double value_type
The numeric datatype used by the parser.
const struct ncbi::grid::netcache::search::fields::KEY key
static const sljit_gpr r1
static const sljit_gpr r2
bool m_DoesNotNeedChildren
TChildList m_ChildrenCandidates
bool operator()(const CFeatTree::CFeatInfo *f1, const CFeatTree::CFeatInfo *f2) const
bool operator()(const SBestInfo &info1, const SBestInfo &info2) const
CDisambiguator::TChildren::const_iterator TChild
bool operator()(const TChild &c1, const TChild &c2) const
CSeqFeatData::ESubtype m_StartType
CSeqFeatData::ESubtype m_CurrentType
bool OverlapByIntervals() const
const CSeqFeatData::ESubtype * GetMultiParentTypes() const
STypeLink & operator++(void)
bool CanHaveCommonGene(void) const
CSeqFeatData::ESubtype m_ParentType
bool CanHaveGeneParent(void) const
bool operator!(void) const
STypeLink(CSeqFeatData::ESubtype subtype=CSeqFeatData::eSubtype_imp, CSeqFeatData::ESubtype start=CSeqFeatData::eSubtype_bad)
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