// ---------------------------------------------------------------------------- void CFeatTableEdit::GenerateLocusTags() // ---------------------------------------------------------------------------- { CRef<CGb_qual> pLocusTag; SAnnotSelector selGenes; selGenes.IncludeFeatSubtype(CSeqFeatData::eSubtype_gene); CFeat_CI itGenes(mHandle, selGenes); for ( ; itGenes; ++itGenes) { string locusTagVal = itGenes->GetNamedQual("locus_tag"); if (!locusTagVal.empty()) { continue; } CSeq_feat_EditHandle feh(mpScope->GetObjectHandle( (itGenes)->GetOriginalFeature())); feh.AddQualifier("locus_tag", xNextLocusTag()); } SAnnotSelector selOther; selOther.ExcludeFeatSubtype(CSeqFeatData::eSubtype_gene); CFeat_CI itOther(mHandle, selOther); for ( ; itOther; ++itOther) { const CSeq_feat& feat = itOther->GetOriginalFeature(); CSeq_feat_EditHandle feh(mpScope->GetObjectHandle( (itOther)->GetOriginalFeature())); feh.RemoveQualifier("locus_tag"); CConstRef<CSeq_feat> pGeneParent = xGetGeneParent(feat); if (!pGeneParent) { continue; } string locusTag = pGeneParent->GetNamedQual("locus_tag"); feh.AddQualifier("locus_tag", locusTag); } }
// ---------------------------------------------------------------------------- string CFeatTableEdit::xCurrentTranscriptId( const CSeq_feat& cds) // ---------------------------------------------------------------------------- { // format: mLocusTagPrefix|mrna.<locus tag of gene>[_numeric disambiguation] CConstRef<CSeq_feat> pGene = xGetGeneParent(cds); if (!pGene) { return ""; } string locusTag = pGene->GetNamedQual("locus_tag"); string disAmbig = ""; map<string, int>::iterator it = mMapProtIdCounts.find(locusTag); if (it != mMapProtIdCounts.end() && mMapProtIdCounts[locusTag] != 0) { disAmbig = string("_") + NStr::IntToString(mMapProtIdCounts[locusTag]); } return (mLocusTagPrefix + "|mrna." + locusTag + disAmbig); }
// ---------------------------------------------------------------------------- string CFeatTableEdit::xNextProteinId( const CSeq_feat& cds) // ---------------------------------------------------------------------------- { // format: mLocusTagPrefix|<locus tag of gene>[_numeric disambiguation] CConstRef<CSeq_feat> pGene = xGetGeneParent(cds); if (!pGene) { return ""; } string locusTag = pGene->GetNamedQual("locus_tag"); string disAmbig = ""; map<string, int>::iterator it = mMapProtIdCounts.find(locusTag); if (it == mMapProtIdCounts.end()) { mMapProtIdCounts[locusTag] = 0; } else { ++mMapProtIdCounts[locusTag]; disAmbig = string("_") + NStr::IntToString(mMapProtIdCounts[locusTag]); } return (mLocusTagPrefix + "|" + locusTag + disAmbig); }