73 #define NCBI_USE_ERRCODE_X ObjMgr_AnnotObject
90 : m_Seq_annot_Info(&annot),
100 TFtable::iterator iter)
101 : m_Seq_annot_Info(&annot),
102 m_ObjectIndex(index),
105 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
106 m_Iter.m_Feat.Construct();
116 TAlign::iterator iter)
117 : m_Seq_annot_Info(&annot),
118 m_ObjectIndex(index),
121 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
122 m_Iter.m_Align.Construct();
132 TGraph::iterator iter)
133 : m_Seq_annot_Info(&annot),
134 m_ObjectIndex(index),
137 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
138 m_Iter.m_Graph.Construct();
148 TLocs::iterator iter)
149 : m_Seq_annot_Info(&annot),
150 m_ObjectIndex(index),
153 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
154 m_Iter.m_Locs.Construct();
166 : m_Seq_annot_Info(&annot),
167 m_ObjectIndex(index),
170 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
171 m_Iter.m_Feat.Construct();
173 *
m_Iter.m_Feat = cont.insert(cont.end(),
184 : m_Seq_annot_Info(&annot),
185 m_ObjectIndex(index),
188 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
189 m_Iter.m_Align.Construct();
191 *
m_Iter.m_Align = cont.insert(cont.end(),
202 : m_Seq_annot_Info(&annot),
203 m_ObjectIndex(index),
206 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
207 m_Iter.m_Graph.Construct();
209 *
m_Iter.m_Graph = cont.insert(cont.end(),
220 : m_Seq_annot_Info(&annot),
221 m_ObjectIndex(index),
224 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
225 m_Iter.m_Locs.Construct();
227 *
m_Iter.m_Locs = cont.insert(cont.end(),
236 : m_Seq_annot_Info(0),
237 m_ObjectIndex(eChunkStub),
240 m_Iter.m_Chunk = &chunk_info;
251 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
254 : m_Seq_annot_Info(
info.m_Seq_annot_Info),
255 m_ObjectIndex(
info.m_ObjectIndex),
258 if (
info.IsRegular() ) {
259 if (
info.IsFeat() ) {
260 m_Iter.m_Feat.Construct();
264 else if (
info.IsAlign() ) {
265 m_Iter.m_Align.Construct();
269 else if (
info.IsGraph() ) {
270 m_Iter.m_Graph.Construct();
274 else if (
info.IsLocs() ) {
275 m_Iter.m_Locs.Construct();
290 if (
this != &
info ) {
295 if (
info.IsRegular() ) {
296 if (
info.IsFeat() ) {
297 m_Iter.m_Feat.Construct();
301 else if (
info.IsAlign() ) {
302 m_Iter.m_Align.Construct();
306 else if (
info.IsGraph() ) {
307 m_Iter.m_Graph.Construct();
311 else if (
info.IsLocs() ) {
312 m_Iter.m_Locs.Construct();
331 #ifdef NCBI_NON_POD_TYPE_STL_ITERATORS
337 m_Iter.m_Align.Destruct();
340 m_Iter.m_Graph.Destruct();
406 if ( (*desc_it)->IsRegion() ) {
407 region.
Reset(&(*desc_it)->GetRegion());
414 hrmaps[0].SetMasterSeq(master);
415 hrmaps[0].AddLocation(*region);
431 hrmaps[0].SetMasterSeq(master);
444 hrmaps[1].SetMasterSeq(master);
455 hrmaps[0].SetMasterSeq(master);
456 hrmaps[0].AddLocation(graph.
GetLoc());
490 if ( !(*desc_it)->IsUser() ) {
502 if (
type ==
"align") {
506 else if (
type ==
"graph") {
510 else if (
type ==
"ftable") {
511 if ( obj.
GetData().size() == 0 ) {
580 if (dim != (
int)diag.
GetIds().size()) {
582 dim =
min(dim, (
int)diag.
GetIds().size());
584 if (dim != (
int)diag.
GetStarts().size()) {
593 if ((
int)hrmaps.size() < dim) {
602 if ( (*it)->IsSetStrands() ) {
603 strand = (*it)->GetStrands()[
row];
605 hrmaps[
row].SetMasterSeq(master);
606 hrmaps[
row].AddRange(
id, from, to, strand);
615 size_t dim = size_t(denseg.GetDim());
616 size_t numseg = size_t(denseg.GetNumseg());
618 if (numseg != denseg.GetLens().size()) {
620 numseg =
min(numseg, denseg.GetLens().size());
622 if (dim != denseg.GetIds().size()) {
624 dim =
min(dim, denseg.GetIds().size());
626 if (dim*numseg != denseg.GetStarts().size()) {
628 dim =
min(dim*numseg, denseg.GetStarts().size()) / numseg;
630 if (denseg.IsSetStrands()
631 && dim*numseg != denseg.GetStrands().size()) {
633 dim =
min(dim*numseg, denseg.GetStrands().size()) / numseg;
635 if (hrmaps.size() < dim) {
638 for (
size_t seg = 0; seg < numseg; seg++) {
640 if (denseg.GetStarts()[seg*dim +
row] < 0 ) {
644 TSeqPos from = denseg.GetStarts()[seg*dim +
row];
645 TSeqPos to = from + denseg.GetLens()[seg] - 1;
647 if ( denseg.IsSetStrands() ) {
648 strand = denseg.GetStrands()[seg*dim +
row];
650 hrmaps[
row].SetMasterSeq(master);
651 hrmaps[
row].AddRange(
id, from, to, strand);
661 size_t dim = size_t((*it)->GetDim());
662 if (hrmaps.size() < dim) {
663 hrmaps.resize((*it)->GetDim());
667 for (
size_t row = 0; row_it; ++row_it, ++
row) {
668 if (
row >= hrmaps.size()) {
669 hrmaps.resize(
row + 1);
675 hrmaps[
row].SetMasterSeq(master);
676 hrmaps[
row].AddRange(
id, from, to, strand);
686 size_t dim = size_t(packed.GetDim());
687 size_t numseg = size_t(packed.GetNumseg());
689 if (dim * numseg > packed.GetStarts().size()) {
690 dim = packed.GetStarts().size() / numseg;
692 if (dim * numseg > packed.GetPresent().size()) {
693 dim = packed.GetPresent().size() / numseg;
695 if (dim > packed.GetLens().size()) {
696 dim = packed.GetLens().size();
698 if (hrmaps.size() < dim) {
701 for (
size_t seg = 0; seg < numseg; seg++) {
703 if ( packed.GetPresent()[seg*dim +
row] ) {
704 hrmaps[
row].SetMasterSeq(master);
706 TSeqPos from = packed.GetStarts()[seg*dim +
row];
707 TSeqPos to = from + packed.GetLens()[seg] - 1;
709 if ( packed.IsSetStrands() ) {
710 strand = packed.GetStrands()[seg*dim +
row];
712 hrmaps[
row].AddRange(
id, from, to, strand);
731 const CSeq_id* gen_id = spliced.IsSetGenomic_id() ?
732 &spliced.GetGenomic_id() : 0;
733 const CSeq_id* prod_id = spliced.IsSetProduct_id() ?
734 &spliced.GetProduct_id() : 0;
741 const CSeq_id&
id = *ex_gen_id;
748 else if ( spliced.IsSetGenomic_strand() ) {
749 strand = spliced.GetGenomic_strand();
751 hrmaps[1].SetMasterSeq(master);
752 hrmaps[1].AddRange(
id, from, to, strand);
757 const CSeq_id&
id = *ex_prod_id;
770 else if ( spliced.IsSetProduct_strand() ) {
771 strand = spliced.GetProduct_strand();
773 hrmaps[0].SetMasterSeq(master);
774 hrmaps[0].AddRange(
id, from, to, strand);
784 size_t dim = sparse.
GetRows().size() + 1;
785 if (hrmaps.size() < dim) {
789 hrmaps[0].SetMasterSeq(master);
795 "Invalid size of 'first-starts' in sparse-align");
800 "Invalid size of 'second-starts' in sparse-align");
803 if (numseg != aln_row.
GetLens().size()) {
805 "Invalid size of 'lens' in sparse-align");
806 numseg =
min(numseg, aln_row.
GetLens().size());
811 "Invalid size of 'second-strands' in sparse-align");
815 hrmaps[
row+1].SetMasterSeq(master);
816 for (
size_t seg = 0; seg < numseg; ++seg) {
823 hrmaps[0].AddRange(
id, from, to);
833 hrmaps[
row+1].AddRange(
id, from, to, strand);
874 TFtable::iterator old_iter = *
m_Iter.m_Feat;
875 *
m_Iter.m_Feat = cont.insert(cont.end(), *old_iter);
876 cont.erase(old_iter);
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.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
const CTempString kAnnotTypePrefix
NCBI_DEFINE_ERR_SUBCODE_X(12)
const TFtable::iterator & x_GetFeatIter(void) const
TAnnotType Which(void) const
const CSeq_loc & GetLocs(void) const
const CSeq_entry_Info & GetSeq_entry_Info(void) const
void GetLocsTypes(TTypeIndexSet &idx_set) const
CConstRef< CObject > GetObject(void) const
const CSeq_annot_Info & GetSeq_annot_Info(void) const
const CObject * GetObjectPointer(void) const
static void x_ProcessFeat(vector< CHandleRangeMap > &hrmaps, const CSeq_feat &feat, const CMasterSeqSegments *master)
void x_Locs_AddFeatSubtype(int ftype, int subtype, TTypeIndexSet &idx_set) const
void x_MoveToBack(TFtable &cont)
void x_SetObject(const CSeq_feat &new_obj)
const TGraph::iterator & x_GetGraphIter(void) const
bool IsRegular(void) const
union CAnnotObject_Info::@740 m_Iter
vector< TIndexRange > TTypeIndexSet
static void x_ProcessAlign(vector< CHandleRangeMap > &hrmaps, const CSeq_align &align, const CMasterSeqSegments *master)
void GetMaps(vector< CHandleRangeMap > &hrmaps, const CMasterSeqSegments *master=0) const
const CSeq_feat * GetFeatFast(void) const
CSeq_annot_Info * m_Seq_annot_Info
CDataSource & GetDataSource(void) const
static void x_ProcessGraph(vector< CHandleRangeMap > &hrmaps, const CSeq_graph &graph, const CMasterSeqSegments *master)
SAnnotTypeSelector m_Type
const TAlign::iterator & x_GetAlignIter(void) const
bool IsChunkStub(void) const
pair< size_t, size_t > TIndexRange
const CSeq_align & GetAlign(void) const
const CTSE_Info & GetTSE_Info(void) const
bool IsRemoved(void) const
const CSeq_graph * GetGraphFast(void) const
static TIndexRange GetFeatTypeRange(CSeqFeatData::E_Choice type)
static size_t GetSubtypeIndex(CSeqFeatData::ESubtype subtype)
static TIndexRange GetAnnotTypeRange(CSeq_annot::C_Data::E_Choice type)
ESubtype GetSubtype(void) const
CConstRef< TObject > GetCompleteSeq_annot(void) const
const CSeq_entry_Info & GetParentSeq_entry_Info(void) const
namespace ncbi::objects::
Seq-loc iterator class – iterates all intervals from a seq-loc in the correct order.
CDataSource & GetDataSource(void) const
const CTSE_Info & GetTSE_Info(void) const
CTempString implements a light-weight string on top of a storage buffer whose lifetime management is ...
int GetSubtype(CFieldNamePanel *field_name_panel, string &ncRNA_class)
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define ERR_POST_X(err_subcode, message)
Error posting with default error code and given error subcode.
void Warning(CExceptionArgs_Base &args)
TRange GetRange(void) const
Get the range.
ENa_strand GetStrand(void) const
const CSeq_id & GetSeq_id(void) const
Get seq_id of the current location.
CConstRef< C > ConstRef(const C *object)
Template function for conversion of const object pointer to CConstRef.
CRef< C > Ref(C *object)
Helper functions to get CRef<> and CConstRef<> objects.
void Reset(void)
Reset reference object.
#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.
size_type size(void) const
Return the length of the represented array.
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
bool IsStr(void) const
Check if variant Str is selected.
bool IsId(void) const
Check if variant Id is selected.
const TData & GetData(void) const
Get the Data member data.
const TStr & GetStr(void) const
Get the variant data.
TInt GetInt(void) const
Get the variant data.
const TData & GetData(void) const
Get the Data member data.
const TLabel & GetLabel(void) const
Get the Label member data.
const TType & GetType(void) const
Get the Type member data.
vector< CRef< CUser_field > > TData
TId GetId(void) const
Get the variant data.
E_Choice Which(void) const
Which variant is currently selected.
const TInts & GetInts(void) const
Get the variant data.
bool IsSetProduct_strand(void) const
should be 'plus' or 'minus' Check if a value has been assigned to Product_strand data member.
const TProtpos & GetProtpos(void) const
Get the variant data.
const TDenseg & GetDenseg(void) const
Get the variant data.
vector< CRef< CSeq_loc > > TLoc
vector< CRef< CSparse_align > > TRows
E_Choice Which(void) const
Which variant is currently selected.
list< CRef< CStd_seg > > TStd
TGenomic_start GetGenomic_start(void) const
Get the Genomic_start member data.
const TProduct_id & GetProduct_id(void) const
Get the Product_id member data.
const TFirst_id & GetFirst_id(void) const
Get the First_id member data.
bool IsSetGenomic_strand(void) const
genomic-strand represents the strand of translation Check if a value has been assigned to Genomic_str...
TAmin GetAmin(void) const
Get the Amin member data.
bool IsSetProduct_id(void) const
product is either protein or transcript (cDNA) Check if a value has been assigned to Product_id data ...
const TProduct_start & GetProduct_start(void) const
Get the Product_start member data.
TDim GetDim(void) const
Get the Dim member data.
const TIds & GetIds(void) const
Get the Ids member data.
const TProduct_end & GetProduct_end(void) const
Get the Product_end member data.
const TSpliced & GetSpliced(void) const
Get the variant data.
const TSecond_starts & GetSecond_starts(void) const
Get the Second_starts member data.
const TPacked & GetPacked(void) const
Get the variant data.
const TStd & GetStd(void) const
Get the variant data.
const TLens & GetLens(void) const
Get the Lens member data.
list< CRef< CSpliced_exon > > TExons
bool IsSetSecond_strands(void) const
Check if a value has been assigned to Second_strands data member.
const TFirst_starts & GetFirst_starts(void) const
Get the First_starts member data.
const TDendiag & GetDendiag(void) const
Get the variant data.
TGenomic_strand GetGenomic_strand(void) const
Get the Genomic_strand member data.
bool IsSetStrands(void) const
Check if a value has been assigned to Strands data member.
TNumseg GetNumseg(void) const
Get the Numseg member data.
TProduct_strand GetProduct_strand(void) const
Get the Product_strand member data.
const TStrands & GetStrands(void) const
Get the Strands member data.
const TSecond_strands & GetSecond_strands(void) const
Get the Second_strands member data.
const TSecond_id & GetSecond_id(void) const
Get the Second_id member data.
TGenomic_end GetGenomic_end(void) const
Get the Genomic_end member data.
const TStarts & GetStarts(void) const
Get the Starts member data.
list< CRef< CSeq_align > > Tdata
const TSparse & GetSparse(void) const
Get the variant data.
bool IsSetGenomic_id(void) const
Check if a value has been assigned to Genomic_id data member.
bool IsNucpos(void) const
Check if variant Nucpos is selected.
const TRows & GetRows(void) const
Get the Rows member data.
const TDisc & GetDisc(void) const
Get the variant data.
list< CRef< CDense_diag > > TDendiag
TNucpos GetNucpos(void) const
Get the variant data.
const TSegs & GetSegs(void) const
Get the Segs member data.
const TGenomic_id & GetGenomic_id(void) const
Get the Genomic_id member data.
@ e_not_set
No variant selected.
const TLocation & GetLocation(void) const
Get the Location member data.
const TData & GetData(void) const
Get the Data member data.
const TExcept_text & GetExcept_text(void) const
Get the Except_text member data.
bool IsSetExcept_text(void) const
explain if except=TRUE Check if a value has been assigned to Except_text data member.
const TProduct & GetProduct(void) const
Get the Product member data.
bool IsSetProduct(void) const
product of process Check if a value has been assigned to Product data member.
ENa_strand
strand of nucleic acid
const TLoc & GetLoc(void) const
Get the Loc member data.
const Tdata & Get(void) const
Get the member data.
const TDesc & GetDesc(void) const
Get the Desc member data.
bool IsSetDesc(void) const
used only for stand alone Seq-annots Check if a value has been assigned to Desc data member.
list< CRef< CAnnotdesc > > Tdata
@ e_not_set
No variant selected.
@ e_Locs
used for communication between tools
Definition of all error codes used in objmgr libraries (xobjmgr.lib, xobjutil.lib and others).
#define row(bind, expected)
void SetAnnotType(TAnnotType type)
void SetFeatSubtype(TFeatSubtype subtype)