本文整理汇总了C++中CSeq_feat::GetLocation方法的典型用法代码示例。如果您正苦于以下问题:C++ CSeq_feat::GetLocation方法的具体用法?C++ CSeq_feat::GetLocation怎么用?C++ CSeq_feat::GetLocation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CSeq_feat
的用法示例。
在下文中一共展示了CSeq_feat::GetLocation方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CompareFeats
CAnnotCompare::TCompareFlags
CAnnotCompare::CompareFeats(const CSeq_feat& feat1,
CScope& scope1,
const CSeq_feat& feat2,
CScope& scope2,
vector<ECompareFlags>* complex_flags,
list<string>* comments)
{
return CompareFeats(feat1, feat1.GetLocation(), scope1,
feat2, feat2.GetLocation(), scope2,
complex_flags, comments);
}
示例2: bestLength
// ----------------------------------------------------------------------------
CConstRef<CSeq_feat> CFeatTableEdit::xGetMrnaParent(
const CSeq_feat& feat)
// ----------------------------------------------------------------------------
{
CConstRef<CSeq_feat> pMrna;
CSeq_feat_Handle sfh = mpScope->GetSeq_featHandle(feat);
CSeq_annot_Handle sah = sfh.GetAnnot();
if (!sah) {
return pMrna;
}
size_t bestLength(0);
CFeat_CI findGene(sah, CSeqFeatData::eSubtype_mRNA);
for ( ; findGene; ++findGene) {
Int8 compare = sequence::TestForOverlap64(
findGene->GetLocation(), feat.GetLocation(),
sequence::eOverlap_Contained);
if (compare == -1) {
continue;
}
size_t currentLength = sequence::GetLength(findGene->GetLocation(), mpScope);
if (!bestLength || currentLength > bestLength) {
pMrna.Reset(&(findGene->GetOriginalFeature()));
bestLength = currentLength;
}
}
return pMrna;
}
示例3: AssignStop
// ----------------------------------------------------------------------------
bool CGffRecord::AssignStop(
const CSeq_feat& feature )
// ----------------------------------------------------------------------------
{
if ( feature.CanGetLocation() ) {
const CSeq_loc& location = feature.GetLocation();
unsigned int uEnd = location.GetStop( eExtreme_Positional ) + 1;
m_strEnd = NStr::UIntToString( uEnd );
}
return true;
}
示例4: x_GetStartOffset
TSeqPos CFeatTrim::x_GetStartOffset(const CSeq_feat& feat,
TSeqPos from, TSeqPos to)
{
TSeqPos offset = 0;
const auto strand = feat.GetLocation().GetStrand();
CRange<TSeqPos> feat_range = feat.GetLocation().GetTotalRange();
if (strand != eNa_strand_minus) {
TSeqPos feat_from = feat_range.GetFrom();
if (feat_from < from) {
offset = from - feat_from;
}
}
else { // eNa_strand_minus
TSeqPos feat_to = feat_range.GetTo();
if (feat_to > to) {
offset = feat_to - to;
}
}
return offset;
}
示例5: xGetGeneParent
// ----------------------------------------------------------------------------
CRef<CSeq_feat> CFeatTableEdit::xMakeGeneForMrna(
const CSeq_feat& rna)
// ----------------------------------------------------------------------------
{
CRef<CSeq_feat> pGene;
CSeq_feat_Handle sfh = mpScope->GetSeq_featHandle(rna);
CSeq_annot_Handle sah = sfh.GetAnnot();
if (!sah) {
return pGene;
}
CConstRef<CSeq_feat> pExistingGene = xGetGeneParent(rna);
if (pExistingGene) {
return pGene;
}
pGene.Reset(new CSeq_feat);
pGene->SetLocation().SetInt();
pGene->SetLocation().SetId(*rna.GetLocation().GetId());
pGene->SetLocation().SetInt().SetFrom(rna.GetLocation().GetStart(
eExtreme_Positional));
pGene->SetLocation().SetInt().SetTo(rna.GetLocation().GetStop(
eExtreme_Positional));
pGene->SetData().SetGene();
return pGene;
}
示例6: xWriteSingleFeature
// ----------------------------------------------------------------------------
bool CBedGraphWriter::xWriteSingleFeature(
const CBedTrackRecord& trackdata,
const CSeq_feat& feature)
// ----------------------------------------------------------------------------
{
CBedGraphRecord bedRecord;
const CSeq_loc& location = feature.GetLocation();
if (!location.IsInt()) {
NCBI_THROW(
CObjWriterException,
eInterrupted,
"BedGraph writer does not support feature locations that are not intervals.");
}
const CSeq_interval& interval = location.GetInt();
const string& scoreStr = feature.GetNamedQual("score");
if (scoreStr.empty()) {
NCBI_THROW(
CObjWriterException,
eInterrupted,
"BedGraph writer only supports features with a \"score\" qualifier.");
}
double score = 0;
try {
score = NStr::StringToDouble(scoreStr);
}
catch(CException&) {
NCBI_THROW(
CObjWriterException,
eInterrupted,
"BedGraph writer encountered feature with bad \"score\" qualifier.");
}
const CSeq_id& id = interval.GetId();
string recordId;
id.GetLabel(&recordId);
bedRecord.SetChromId(recordId);
bedRecord.SetChromStart(interval.GetFrom());
bedRecord.SetChromEnd(interval.GetTo()-1);
bedRecord.SetChromValue(score);
bedRecord.Write(m_Os);
return true;
}
示例7: AssignSeqId
// ----------------------------------------------------------------------------
bool CGffRecord::AssignSeqId(
const CSeq_feat& feature )
// ----------------------------------------------------------------------------
{
m_strSeqId = "<unknown>";
if ( feature.CanGetLocation() ) {
const CSeq_loc& location = feature.GetLocation();
const CSeq_id* pId = location.GetId();
switch ( pId->Which() ) {
case CSeq_id::e_Local:
if ( pId->GetLocal().IsId() ) {
m_strSeqId = NStr::UIntToString( pId->GetLocal().GetId() );
}
else {
m_strSeqId = pId->GetLocal().GetStr();
}
break;
case CSeq_id::e_Gi:
m_strSeqId = NStr::IntToString( pId->GetGi() );
break;
case CSeq_id::e_Other:
if ( pId->GetOther().CanGetAccession() ) {
m_strSeqId = pId->GetOther().GetAccession();
if ( pId->GetOther().CanGetVersion() ) {
m_strSeqId += ".";
m_strSeqId += NStr::UIntToString(
pId->GetOther().GetVersion() );
}
}
break;
default:
break;
}
}
return true;
}
示例8: if
bool CLocation_constraint :: Match(const CSeq_feat& feat, CConstRef <CSeq_feat> feat_to, CConstRef <CBioseq> feat_bioseq) const
{
if (x_IsLocationConstraintEmpty()) {
return true;
}
const CSeq_loc& feat_loc = feat.GetLocation();
if (GetStrand() != eStrand_constraint_any) {
if (feat_bioseq.Empty()) {
return false;
}
else if (feat_bioseq->IsAa()) {
if (feat_to.Empty()) { // when feat is product, feat_to points to cds
return false;
}
else if (!x_DoesStrandMatchConstraint (feat_to->GetLocation())) {
return false;
}
}
else if (!x_DoesStrandMatchConstraint (feat_loc)) {
return false;
}
}
if (!x_DoesBioseqMatchSequenceType(feat_bioseq, GetSeq_type())) {
return false;
}
if (!x_DoesLocationMatchPartialnessConstraint (feat_loc)) {
return false;
}
if (!x_DoesLocationMatchTypeConstraint (feat_loc)) {
return false;
}
if (!x_DoesLocationMatchDistanceConstraint(feat_bioseq, feat_loc)) {
return false;
}
return true;
};
示例9: AssignStrand
// ----------------------------------------------------------------------------
bool CGffRecord::AssignStrand(
const CSeq_feat& feature )
// ----------------------------------------------------------------------------
{
m_strStrand = ".";
if ( feature.CanGetLocation() ) {
const CSeq_loc& location = feature.GetLocation();
ENa_strand strand = location.GetStrand();
switch( strand ) {
default:
break;
case eNa_strand_plus:
m_strStrand = "+";
break;
case eNa_strand_minus:
m_strStrand = "-";
break;
}
}
return true;
}
示例10: Ref
CRef<CSeq_feat> CFeatTrim::Apply(const CSeq_feat& feat,
const CRange<TSeqPos>& range)
{
CRef<CSeq_loc> loc = Ref(new CSeq_loc());
loc->Assign(feat.GetLocation());
const TSeqPos from = range.GetFrom();
const TSeqPos to = range.GetTo();
const bool set_partial = true;
x_TrimLocation(from, to, set_partial, loc);
if (loc->IsNull()) {
return Ref(new CSeq_feat());
}
// Create a new seq-feat with the trimmed location
CRef<CSeq_feat> new_sf(new CSeq_feat());
new_sf->Assign(feat);
new_sf->SetLocation(*loc);
if (!loc->IsNull() &&
(loc->IsPartialStart(eExtreme_Biological) ||
loc->IsPartialStop(eExtreme_Biological))) {
new_sf->SetPartial(true);
}
// If Cdregion need to consider changes in frameshift
if (new_sf->GetData().IsCdregion()) {
const TSeqPos offset = x_GetStartOffset(feat, from, to);
x_UpdateFrame(offset, new_sf->SetData().SetCdregion());
if (new_sf->SetData().SetCdregion().IsSetCode_break()) {
// iterate over code breaks and remove if they fall outside the range
list<CRef<CCode_break>>& code_breaks = new_sf->SetData().SetCdregion().SetCode_break();
code_breaks.remove_if(SOutsideRange(from,to));
if (code_breaks.empty()) {
new_sf->SetData().SetCdregion().ResetCode_break();
}
else {
const auto strand = loc->GetStrand();
// Trim the 3' end
if (strand != eNa_strand_minus) {
for (auto code_break : code_breaks) {
const TSeqPos cb_to = code_break->GetLoc().GetTotalRange().GetTo();
if (cb_to > to) {
x_TrimCodeBreak(from, to, *code_break);
}
}
}
else { // strand == eNa_strand_minus
for (auto code_break : code_breaks) {
const TSeqPos cb_from = code_break->GetLoc().GetTotalRange().GetFrom();
if (cb_from < from) {
x_TrimCodeBreak(from, to, *code_break);
}
}
}
}
}
}
else
if (new_sf->GetData().GetSubtype() == CSeqFeatData::eSubtype_tRNA) {
auto& rna = new_sf->SetData().SetRna();
if (rna.IsSetExt() && rna.GetExt().IsTRNA()) {
x_TrimTrnaExt(from, to, rna.SetExt().SetTRNA());
}
}
return new_sf;
}