lds_object.cpp

来自「ncbi源码」· C++ 代码 · 共 666 行 · 第 1/2 页

CPP
666
字号
                // Recursively save the parent                top_level_id = SaveObject(file_id, sniffer, top_obj_info);            } else {                top_level_id = top_obj_info->ext_id;            }        }}    }    const string& type_name = obj_info->info.GetTypeInfo()->GetName();    map<string, int>::const_iterator it = m_ObjTypeMap.find(type_name);    if (it == m_ObjTypeMap.end()) {        LOG_POST(Info << "Unrecognized type: " << type_name);        return 0;                    }    int type_id = it->second;    string id_str;    string molecule_title;    ++m_MaxObjRecId;    bool is_object = IsObject(*obj_info, &id_str, &molecule_title);    if (is_object) {        string all_seq_id; // Space separated list of seq_ids        const CBioseq* bioseq = CType<CBioseq>().Get(obj_info->info);        if (bioseq) {            const CBioseq::TId&  id_list = bioseq->GetId();            ITERATE(CBioseq::TId, it, id_list) {                const CSeq_id* seq_id = *it;                if (seq_id) {                    all_seq_id.append(seq_id->AsFastaString());                    all_seq_id.append(" ");                }            }        }        m_db.object_db.primary_seqid = NStr::ToUpper(id_str);        obj_info->ext_id = m_MaxObjRecId; // Keep external id for the next scan        EBDB_ErrCode err;/*        m_db.object_attr_db.object_attr_id = m_MaxObjRecId;        m_db.object_attr_db.object_title = molecule_title;        m_db.object_attr_db.seq_ids = NStr::ToUpper(all_seq_id);        EBDB_ErrCode err = m_db.object_attr_db.Insert();        BDB_CHECK(err, "LDS::ObjectAttr");*/        m_db.object_db.object_id = m_MaxObjRecId;        m_db.object_db.file_id = file_id;        m_db.object_db.seqlist_id = 0;  // TODO:        m_db.object_db.object_type = type_id;        m_db.object_db.file_offset = obj_info->offset;//        m_db.object_db.object_attr_id = m_MaxObjRecId;         m_db.object_db.TSE_object_id = top_level_id;        m_db.object_db.parent_object_id = parent_id;        m_db.object_db.object_title = molecule_title;        m_db.object_db.seq_ids = NStr::ToUpper(all_seq_id);//        LOG_POST(Info << "Saving object: " << type_name << " " << id_str);        err = m_db.object_db.Insert();        BDB_CHECK(err, "LDS::Object");    } else {                        // Set of seq ids referenced in the annotation        //        set<string> ref_seq_ids;        // Check for alignment in annotation        //        const CSeq_annot* annot =             CType<CSeq_annot>().Get(obj_info->info);        if (annot && annot->CanGetData()) {            const CSeq_annot_Base::C_Data& adata = annot->GetData();            if (adata.Which() == CSeq_annot_Base::C_Data::e_Align) {                const CSeq_annot_Base::C_Data::TAlign& al_list =                                            adata.GetAlign();                ITERATE (CSeq_annot_Base::C_Data::TAlign, it, al_list){                    if (!(*it)->CanGetSegs())                        continue;                    const CSeq_align::TSegs& segs = (*it)->GetSegs();                    switch (segs.Which())                    {                    case CSeq_align::C_Segs::e_Std:                        {                        const CSeq_align_Base::C_Segs::TStd& std_list =                                                    segs.GetStd();                        ITERATE (CSeq_align_Base::C_Segs::TStd, it2, std_list) {                            const CRef<CStd_seg>& seg = *it2;                            const CStd_seg::TIds& ids = seg->GetIds();                            ITERATE(CStd_seg::TIds, it3, ids) {                                ref_seq_ids.insert((*it3)->AsFastaString());                            } // ITERATE                        } // ITERATE                        }                        break;                    case CSeq_align::C_Segs::e_Denseg:                        {                        const CSeq_align_Base::C_Segs::TDenseg& denseg =                                                        segs.GetDenseg();                        const CDense_seg::TIds& ids = denseg.GetIds();                        ITERATE (CDense_seg::TIds, it3, ids) {                            ref_seq_ids.insert((*it3)->AsFastaString());                        } // ITERATE                                                }                        break;                    case CSeq_align::C_Segs::e_Packed:                    case CSeq_align::C_Segs::e_Disc:                        break;                    }                } // ITERATE            }        }        // Save all seq ids referred by the alignment        //        ITERATE (set<string>, it, ref_seq_ids) {            m_db.seq_id_list.object_id = m_MaxObjRecId;            m_db.seq_id_list.seq_id = it->c_str();            EBDB_ErrCode err = m_db.seq_id_list.Insert();            BDB_CHECK(err, "LDS::seq_id_list");        }                obj_info->ext_id = m_MaxObjRecId; // Keep external id for the next scan                        m_db.annot_db.annot_id = m_MaxObjRecId;        m_db.annot_db.file_id = file_id;        m_db.annot_db.annot_type = type_id;        m_db.annot_db.file_offset = obj_info->offset;        LOG_POST(Info << "Saving annotation: "                       << type_name                       << " "                       << id_str                      << " "                       << (const char*)(!top_level_id ? "Top Level. " : " ")                      << "offs="                       << obj_info->offset                      );        EBDB_ErrCode err = m_db.annot_db.Insert();        BDB_CHECK(err, "LDS::Annotation");        m_db.annot2obj_db.object_id = parent_id;        m_db.annot2obj_db.annot_id = m_MaxObjRecId;        err = m_db.annot2obj_db.Insert();        BDB_CHECK(err, "LDS::Annot2Obj");    }    return obj_info->ext_id;}bool CLDS_Object::IsObject(const CLDS_CoreObjectsReader::SObjectDetails& parse_info,                           string* object_str_id,                           string* object_title){    *object_title = "";    *object_str_id = "";    if (parse_info.is_top_level) {        CSeq_entry* seq_entry = CType<CSeq_entry>().Get(parse_info.info);        if (seq_entry) {            m_TSE_Manager = new CObjectManager;            m_Scope = new CScope(*m_TSE_Manager);            m_Scope->AddTopLevelSeqEntry(*seq_entry);            return true;        } else {            CBioseq* bioseq = CType<CBioseq>().Get(parse_info.info);            if (bioseq) {                m_TSE_Manager = new CObjectManager;                m_Scope = new CScope(*m_TSE_Manager);                m_Scope->AddBioseq(*bioseq);            }        }    }    const CBioseq* bioseq = CType<CBioseq>().Get(parse_info.info);    if (bioseq) {        const CSeq_id* seq_id = bioseq->GetFirstId();        if (seq_id) {            *object_str_id = seq_id->AsFastaString();        } else {            *object_str_id = "";        }        if (m_Scope) { // we are under OM here            CBioseq_Handle bio_handle = m_Scope->GetBioseqHandle(*bioseq);            if (bio_handle) {                *object_title = sequence::GetTitle(bio_handle);                //LOG_POST(Info << "object title: " << *object_title);            } else {                // the last resort                bioseq->GetLabel(object_title, CBioseq::eBoth);            }                    } else {  // non-OM controlled object            bioseq->GetLabel(object_title, CBioseq::eBoth);        }    } else {        const CSeq_annot* annot =             CType<CSeq_annot>().Get(parse_info.info);        if (annot) {            *object_str_id = "";            return false;        } else {            const CSeq_align* align =                  CType<CSeq_align>().Get(parse_info.info);            if (align) {                *object_str_id = "";                return false;            }        }    }    return true;}int CLDS_Object::FindMaxObjRecId(){    if (m_MaxObjRecId) {        return m_MaxObjRecId;    }    LDS_GETMAXID(m_MaxObjRecId, m_db.object_db, object_id);    int ann_rec_id = 0;    LDS_GETMAXID(ann_rec_id, m_db.annot_db, annot_id);    if (ann_rec_id > m_MaxObjRecId) {        m_MaxObjRecId = ann_rec_id;    }    return m_MaxObjRecId;}END_SCOPE(objects)END_NCBI_SCOPE/* * =========================================================================== * $Log: lds_object.cpp,v $ * Revision 1000.2  2004/06/01 19:46:06  gouriano * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.20 * * Revision 1.20  2004/05/21 21:42:55  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.19  2004/03/11 18:45:04  kuznets * Get correct title for standalone Bioseqs using object manager * * Revision 1.18  2004/03/09 17:16:59  kuznets * Merge object attributes with objects * * Revision 1.17  2003/10/09 16:48:01  kuznets * More LDS logging when parsing files + minor bug fix. * * Revision 1.16  2003/10/07 20:46:57  kuznets * Added diagnostics when some file has been recognized as a file without * objects. * * Revision 1.15  2003/08/21 12:10:04  dicuccio * Minor code reformatting * * Revision 1.14  2003/07/29 19:51:49  kuznets * Reflecting changes in the header file * * Revision 1.13  2003/07/14 19:45:24  kuznets * More detailed LOG_POST message * * Revision 1.12  2003/07/09 19:30:51  kuznets * Implemented collection of sequence ids from alignments. * * Revision 1.11  2003/07/03 19:23:37  kuznets * Added recognition of denseg alignments. * * Revision 1.10  2003/07/02 12:07:42  dicuccio * Fix for implicit conversion/assignment in gcc * * Revision 1.9  2003/07/01 19:27:06  kuznets * Added code fragment reading sequence ids from an alignment. * * Revision 1.8  2003/06/26 16:22:15  kuznets * Uppercased all sequence ids before writing into the database. * * Revision 1.7  2003/06/16 16:24:43  kuznets * Fixed #include paths (lds <-> lds_admin separation) * * Revision 1.6  2003/06/16 15:40:21  kuznets * Fixed a bug with collecting all seq_ids from a bioseq * * Revision 1.5  2003/06/13 16:00:30  kuznets * Improved work with sequence ids. Now it keeps all sequence ids bioseq has * * Revision 1.4  2003/06/10 19:00:32  kuznets * Code clean-up * * Revision 1.3  2003/06/06 20:03:54  kuznets * Reflecting new location of fasta reader * * Revision 1.2  2003/06/04 16:38:45  kuznets * Implemented OM-based bioseq title extraction (should work better than * CBioseq::GetTitle()) * * Revision 1.1  2003/06/03 14:13:25  kuznets * Initial revision * * * =========================================================================== */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?