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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: molecule.hpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:28:44  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.30
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: molecule.hpp,v 1000.2 2004/06/01 18:28:44 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. *      Classes to hold molecules
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_MOLECULE__HPP
  42. #define CN3D_MOLECULE__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <map>
  45. #include <string>
  46. #include <vector>
  47. #include <objects/mmdb1/Molecule_graph.hpp>
  48. #include <objects/mmdb1/Residue_graph.hpp>
  49. #include <objects/mmdb1/Biomol_descr.hpp>
  50. #include "structure_base.hpp"
  51. #include "residue.hpp"
  52. #include "vector_math.hpp"
  53. BEGIN_SCOPE(Cn3D)
  54. // A Molecule is generally a fully connected set of atoms - e.g. a protein chain,
  55. // heterogen, etc. For proteins and nucleotides, it is divided into an ordered
  56. // sequence of Residues, along with inter-residue bonds.
  57. typedef std::list< ncbi::CRef< ncbi::objects::CResidue_graph > > ResidueGraphList;
  58. class ChemicalGraph;
  59. class Bond;
  60. class Sequence;
  61. class MoleculeIdentifier;
  62. class Molecule : public StructureBase
  63. {
  64. public:
  65.     Molecule(ChemicalGraph *parentGraph,
  66.         const ncbi::objects::CMolecule_graph& graph,
  67.         const ResidueGraphList& standardDictionary,
  68.         const ResidueGraphList& localDictionary);
  69.     // public data
  70.     enum eType {
  71.         eDNA = ncbi::objects::CBiomol_descr::eMolecule_type_dna,
  72.         eRNA = ncbi::objects::CBiomol_descr::eMolecule_type_rna,
  73.         eProtein = ncbi::objects::CBiomol_descr::eMolecule_type_protein,
  74.         eBiopolymer = ncbi::objects::CBiomol_descr::eMolecule_type_other_biopolymer,
  75.         eSolvent = ncbi::objects::CBiomol_descr::eMolecule_type_solvent,
  76.         eNonpolymer = ncbi::objects::CBiomol_descr::eMolecule_type_other_nonpolymer,
  77.         eOther = ncbi::objects::CBiomol_descr::eMolecule_type_other
  78.     };
  79.     eType type;
  80.     int id;
  81.     std::string name;
  82.     const MoleculeIdentifier *identifier;
  83.     typedef std::map < int, const Residue * > ResidueMap;
  84.     ResidueMap residues;
  85.     typedef std::list < const Bond * > BondList;
  86.     BondList interResidueBonds; // includes virtual and disulfide bonds
  87.     // ints are residue IDs; tracks intramolecular disulfides (mainly for fast lookup by threader)
  88.     typedef std::map < int, int > DisulfideMap;
  89.     DisulfideMap disulfideMap;
  90.     // maps of sequence location ( = residueID - 1) to secondary structure and domains
  91.     static const int NO_DOMAIN_SET;
  92.     enum eSecStruc {
  93.         eHelix,
  94.         eStrand,
  95.         eCoil
  96.     };
  97.     std::vector < eSecStruc > residueSecondaryStructures;
  98.     std::vector < int > residueDomains;
  99.     int nDomains;
  100.     // corresponding sequence (if present)
  101.     const Sequence *sequence;
  102.     typedef std::list < unsigned int > DisplayListList;
  103.     DisplayListList displayLists;
  104.     // public methods
  105.     bool IsProtein(void) const { return (type == eProtein); }
  106.     bool IsNucleotide(void) const { return (type == eDNA || type == eRNA); }
  107.     bool IsSolvent(void) const { return (type == eSolvent); }
  108.     bool IsHeterogen(void) const { return (!IsProtein() && !IsNucleotide() && !IsSolvent()); }
  109.     int NResidues(void) const { return residues.size(); }
  110.     const Residue::AtomInfo * GetAtomInfo(int rID, int aID) const
  111.     {
  112.         ResidueMap::const_iterator info=residues.find(rID);
  113.         if (info != residues.end()) return (*info).second->GetAtomInfo(aID);
  114.         ERR_POST(ncbi::Warning << "Molecule #" << id << ": can't find residue #" << rID);
  115.         return NULL;
  116.     }
  117.     // residue color method - called by sequence/alignment viewer - note
  118.     // that sequenceIndex is numbered from zero.
  119.     Vector GetResidueColor(int sequenceIndex) const;
  120.     // get coordinates for alpha atoms of residues with given sequence indexes;
  121.     // returns actual # coordinates retrieved if successful, -1 on failure
  122.     int GetAlphaCoords(int nResidues, const int *seqIndexes, const Vector * *coords) const;
  123.     // secondary structure query methods
  124.     bool IsResidueInHelix(int residueID) const
  125.         { return (IsProtein() && residueSecondaryStructures[residueID - 1] == eHelix); }
  126.     bool IsResidueInStrand(int residueID) const
  127.         { return (IsProtein() && residueSecondaryStructures[residueID - 1] == eStrand); }
  128.     bool IsResidueInCoil(int residueID) const
  129.         { return (!IsProtein() || residueSecondaryStructures[residueID - 1] == eCoil); }
  130.     // domain query
  131.     int ResidueDomainID(int residueID) const
  132.         { return residueDomains[residueID - 1]; }
  133.     // drawing - include chain termini labels
  134.     bool DrawAllWithTerminiLabels(const AtomSet *atomSet = NULL) const;
  135. };
  136. END_SCOPE(Cn3D)
  137. #endif // CN3D_MOLECULE__HPP
  138. /*
  139. * ---------------------------------------------------------------------------
  140. * $Log: molecule.hpp,v $
  141. * Revision 1000.2  2004/06/01 18:28:44  gouriano
  142. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.30
  143. *
  144. * Revision 1.30  2004/05/20 18:49:21  thiessen
  145. * don't do structure realignment if < 3 coords present
  146. *
  147. * Revision 1.29  2004/02/19 17:04:58  thiessen
  148. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  149. *
  150. * Revision 1.28  2003/07/14 18:37:07  thiessen
  151. * change GetUngappedAlignedBlocks() param types; other syntax changes
  152. *
  153. * Revision 1.27  2003/02/03 19:20:04  thiessen
  154. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  155. *
  156. * Revision 1.26  2001/08/21 01:10:13  thiessen
  157. * add labeling
  158. *
  159. * Revision 1.25  2001/08/15 20:52:58  juran
  160. * Heed warnings.
  161. *
  162. * Revision 1.24  2001/06/21 02:01:07  thiessen
  163. * major update to molecule identification and highlighting ; add toggle highlight (via alt)
  164. *
  165. * Revision 1.23  2001/05/31 18:46:26  thiessen
  166. * add preliminary style dialog; remove LIST_TYPE; add thread single and delete all; misc tweaks
  167. *
  168. * Revision 1.22  2001/05/15 23:49:20  thiessen
  169. * minor adjustments to compile under Solaris/wxGTK
  170. *
  171. * Revision 1.21  2001/03/23 23:31:30  thiessen
  172. * keep atom info around even if coords not all present; mainly for disulfide parsing in virtual models
  173. *
  174. * Revision 1.20  2001/03/23 04:18:20  thiessen
  175. * parse and display disulfides
  176. *
  177. * Revision 1.19  2001/02/08 23:01:13  thiessen
  178. * hook up C-toolkit stuff for threading; working PSSM calculation
  179. *
  180. * Revision 1.18  2000/12/15 15:52:08  thiessen
  181. * show/hide system installed
  182. *
  183. * Revision 1.17  2000/12/01 19:34:43  thiessen
  184. * better domain assignment
  185. *
  186. * Revision 1.16  2000/11/30 15:49:08  thiessen
  187. * add show/hide rows; unpack sec. struc. and domain features
  188. *
  189. * Revision 1.15  2000/11/13 18:05:58  thiessen
  190. * working structure re-superpositioning
  191. *
  192. * Revision 1.14  2000/10/04 17:40:46  thiessen
  193. * rearrange STL #includes
  194. *
  195. * Revision 1.13  2000/09/08 20:16:10  thiessen
  196. * working dynamic alignment views
  197. *
  198. * Revision 1.12  2000/09/03 18:45:56  thiessen
  199. * working generalized sequence viewer
  200. *
  201. * Revision 1.11  2000/08/30 19:49:03  thiessen
  202. * working sequence window
  203. *
  204. * Revision 1.10  2000/08/28 23:46:46  thiessen
  205. * functional denseg and dendiag alignment parsing
  206. *
  207. * Revision 1.9  2000/08/28 18:52:18  thiessen
  208. * start unpacking alignments
  209. *
  210. * Revision 1.8  2000/08/27 18:50:55  thiessen
  211. * extract sequence information
  212. *
  213. * Revision 1.7  2000/08/24 18:43:15  thiessen
  214. * tweaks for transparent sphere display
  215. *
  216. * Revision 1.6  2000/08/07 00:20:18  thiessen
  217. * add display list mechanism
  218. *
  219. * Revision 1.5  2000/08/03 15:12:29  thiessen
  220. * add skeleton of style and show/hide managers
  221. *
  222. * Revision 1.4  2000/07/27 13:30:10  thiessen
  223. * remove 'using namespace ...' from all headers
  224. *
  225. * Revision 1.3  2000/07/17 04:21:09  thiessen
  226. * now does correct structure alignment transformation
  227. *
  228. * Revision 1.2  2000/07/16 23:18:34  thiessen
  229. * redo of drawing system
  230. *
  231. * Revision 1.1  2000/07/11 13:49:29  thiessen
  232. * add modules to parse chemical graph; many improvements
  233. *
  234. */