data_manager.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:9k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: data_manager.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:28:35  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: data_manager.hpp,v 1000.2 2004/06/01 18:28:35 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Authors:  Paul Thiessen
  35. *
  36. * File Description:
  37. *      class to manage different root ASN data types
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_DATA_MANAGER__HPP
  42. #define CN3D_DATA_MANAGER__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <corelib/ncbiobj.hpp>
  45. #include <serial/serialdef.hpp>
  46. #include <objects/ncbimime/Ncbi_mime_asn1.hpp>
  47. #include <objects/cdd/Cdd.hpp>
  48. #include <objects/seqset/Seq_entry.hpp>
  49. #include <objects/mmdb1/Biostruc.hpp>
  50. #include <objects/mmdb1/Biostruc_annot_set.hpp>
  51. #include <objects/seq/Seq_annot.hpp>
  52. #include <objects/cdd/Update_align.hpp>
  53. #include <objects/cn3d/Cn3d_style_dictionary.hpp>
  54. #include <objects/cn3d/Cn3d_user_annotations.hpp>
  55. #include <objects/seqloc/Seq_id.hpp>
  56. #include <objects/mmdb2/Model_type.hpp>
  57. #include <list>
  58. #include <vector>
  59. #include "structure_set.hpp"
  60. BEGIN_SCOPE(Cn3D)
  61. class Sequence;
  62. class AlignmentSet;
  63. class ASNDataManager
  64. {
  65. public:
  66.     typedef std::list < ncbi::CRef < ncbi::objects::CSeq_entry > > SeqEntryList;
  67.     typedef std::list < ncbi::CRef < ncbi::objects::CBiostruc > > BiostrucList;
  68.     typedef std::list < ncbi::CRef < ncbi::objects::CSeq_annot > > SeqAnnotList;
  69.     typedef std::list < ncbi::CRef < ncbi::objects::CUpdate_align > > UpdateAlignList;
  70. private:
  71.     // top-level data, supplied to constructor
  72.     ncbi::CRef < ncbi::objects::CNcbi_mime_asn1 > mimeData;
  73.     ncbi::CRef < ncbi::objects::CCdd > cddData;
  74.     mutable unsigned int dataChanged;
  75.     ncbi::objects::CCdd * GetInternalCDDData(void);
  76.     const ncbi::objects::CCdd * GetInternalCDDData(void) const;
  77.     bool ConvertMimeToGeneral(void);
  78.     // pointers to lower-level data, filled in by Load
  79.     void Load(void);
  80.     SeqEntryList *seqEntryList;
  81.     ncbi::objects::CBiostruc *masterBiostruc;
  82.     BiostrucList *biostrucList;
  83.     bool isSingleStructure;     // IFF single MMDB is viewed, then we can show alt confs
  84.     ncbi::objects::EModel_type biostrucModelType;
  85.     ncbi::objects::CBiostruc_annot_set *structureAlignments;
  86.     SeqAnnotList *sequenceAlignments;
  87.     SeqAnnotList *bundleImports;
  88.     UpdateAlignList bundleImportsFaked; // bundle imports re-cast as Update-aligns
  89.     UpdateAlignList *cddUpdates;
  90. public:
  91.     ASNDataManager(ncbi::objects::CNcbi_mime_asn1 *mime);
  92.     ASNDataManager(ncbi::objects::CCdd *cdd);
  93.     ~ASNDataManager(void);
  94.     // dump data to file
  95.     bool WriteDataToFile(const char *filename, bool isBinary,
  96.         std::string *err, ncbi::EFixNonPrint fixNonPrint = ncbi::eFNP_Default) const;
  97.     // retrieve sequences
  98.     SeqEntryList * GetSequences(void) const { return seqEntryList; }
  99.     // retrieve structures
  100.     bool IsSingleStructure(void) const { return isSingleStructure; }
  101.     bool IsGeneralMime(void) const { return (mimeData.NotEmpty() && mimeData->IsGeneral()); }
  102.     const ncbi::objects::CBiostruc * GetMasterStructure(void) const { return masterBiostruc; }
  103.     const BiostrucList * GetStructureList(void) const { return biostrucList; }
  104.     ncbi::objects::EModel_type GetBiostrucModelType(void) const { return biostrucModelType; }
  105.     // store new structure, if appropriate
  106.     bool AddBiostrucToASN(ncbi::objects::CBiostruc *biostruc);
  107.     // retrieve structure alignments
  108.     ncbi::objects::CBiostruc_annot_set * GetStructureAlignments(void) const { return structureAlignments; }
  109.     void SetStructureAlignments(ncbi::objects::CBiostruc_annot_set *structureAlignments);
  110.     // retrieve sequence alignments
  111.     SeqAnnotList * GetSequenceAlignments(void) const { return sequenceAlignments; }
  112.     // return it, or create the list if not present (and if the data type can hold it)
  113.     SeqAnnotList * GetOrCreateSequenceAlignments(void);
  114.     // retrieve updates
  115.     const UpdateAlignList * GetUpdates(void) const
  116.         { return (cddUpdates ? cddUpdates : (bundleImports ? &bundleImportsFaked : NULL)); }
  117.     void ReplaceUpdates(UpdateAlignList& newUpdates);
  118.     // style dictionary and user annotations
  119.     const ncbi::objects::CCn3d_style_dictionary * GetStyleDictionary(void) const;
  120.     void SetStyleDictionary(ncbi::objects::CCn3d_style_dictionary& styles);
  121.     void RemoveStyleDictionary(void);
  122.     const ncbi::objects::CCn3d_user_annotations * GetUserAnnotations(void) const;
  123.     void SetUserAnnotations(ncbi::objects::CCn3d_user_annotations& annots);
  124.     void RemoveUserAnnotations(void);
  125.     // add sequence to CDD rejects list
  126.     void AddReject(ncbi::objects::CReject_id *reject);
  127.     const StructureSet::RejectList * GetRejects(void) const;
  128.     // updates sequences in the asn, to remove any sequences
  129.     // that are not used by the current alignmentSet or updates
  130.     typedef std::list < const Sequence * > SequenceList;
  131.     void RemoveUnusedSequences(const AlignmentSet *alignmentSet, const SequenceList& updateSequences);
  132.     // convert underlying data from mime to cdd
  133.     bool ConvertMimeDataToCDD(const std::string& cddName);
  134.     // CDD-specific data accessors
  135.     bool IsCDD(void) const;
  136.     bool IsCDDInMime(void) const;
  137.     const std::string& GetCDDName(void) const;
  138.     bool SetCDDName(const std::string& name);
  139.     const std::string& GetCDDDescription(void) const;
  140.     bool SetCDDDescription(const std::string& descr);
  141.     typedef std::vector < std::string > TextLines;
  142.     bool GetCDDNotes(TextLines *lines) const;
  143.     bool SetCDDNotes(const TextLines& lines);
  144.     ncbi::objects::CCdd_descr_set * GetCDDDescrSet(void);
  145.     ncbi::objects::CAlign_annot_set * GetCDDAnnotSet(void);
  146.     const ncbi::objects::CSeq_id * GetCDDMaster3d(void) const;
  147.     // to flag data changes
  148.     bool HasDataChanged(void) const { return (dataChanged > 0); }
  149.     void SetDataChanged(unsigned int what) const { dataChanged |= what; }
  150.     void SetDataUnchanged(void) const { dataChanged = 0; }
  151.     unsigned int GetDataChanged(void) const { return dataChanged; }
  152. };
  153. END_SCOPE(Cn3D)
  154. #endif // CN3D_DATA_MANAGER__HPP
  155. /*
  156. * ---------------------------------------------------------------------------
  157. * $Log: data_manager.hpp,v $
  158. * Revision 1000.2  2004/06/01 18:28:35  gouriano
  159. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.14
  160. *
  161. * Revision 1.14  2004/05/21 17:29:51  thiessen
  162. * allow conversion of mime to cdd data
  163. *
  164. * Revision 1.13  2004/02/19 17:04:55  thiessen
  165. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  166. *
  167. * Revision 1.12  2003/07/17 16:52:34  thiessen
  168. * add FileSaved message with edit typing
  169. *
  170. * Revision 1.11  2003/02/03 19:20:04  thiessen
  171. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  172. *
  173. * Revision 1.10  2003/01/27 15:52:22  thiessen
  174. * merge after highlighted row; show rejects; trim rejects from new reject list
  175. *
  176. * Revision 1.9  2002/11/06 00:18:10  thiessen
  177. * fixes for new CRef/const rules in objects
  178. *
  179. * Revision 1.8  2002/06/05 17:50:08  thiessen
  180. * title tweaks
  181. *
  182. * Revision 1.7  2002/02/27 16:29:41  thiessen
  183. * add model type flag to general mime type
  184. *
  185. * Revision 1.6  2002/02/19 14:59:39  thiessen
  186. * add CDD reject and purge sequence
  187. *
  188. * Revision 1.5  2002/02/12 17:19:21  thiessen
  189. * first working structure import
  190. *
  191. * Revision 1.4  2001/12/15 03:15:59  thiessen
  192. * adjustments for slightly changed object loader Set...() API
  193. *
  194. * Revision 1.3  2001/12/06 23:13:45  thiessen
  195. * finish import/align new sequences into single-structure data; many small tweaks
  196. *
  197. * Revision 1.2  2001/11/30 14:02:05  thiessen
  198. * progress on sequence imports to single structures
  199. *
  200. * Revision 1.1  2001/11/27 16:26:08  thiessen
  201. * major update to data management system
  202. *
  203. */