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 + -
显示快捷键?