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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: chemical_graph.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:31:17  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.19
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: chemical_graph.hpp,v 1000.1 2004/04/12 17:31:17 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 the graph of chemical bonds
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_CHEMICALGRAPH__HPP
  42. #define CN3D_CHEMICALGRAPH__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <map>
  45. #include <string>
  46. #include <objects/mmdb1/Biostruc_graph.hpp>
  47. #include <objects/mmdb3/Biostruc_feature_set.hpp>
  48. #include <objects/mmdb1/Atom_pntr.hpp>
  49. #include "structure_base.hpp"
  50. #include "molecule.hpp"
  51. #include "residue.hpp"
  52. BEGIN_SCOPE(Cn3D)
  53. // to create and delete dictionary - should be called on program init/exit
  54. void LoadStandardDictionary(const char *filename);
  55. void DeleteStandardDictionary(void);
  56. // The ChemicalGraph is the set of bonds that link the atoms (from CoordSets).
  57. // The graph is divided into essentially physically separate molecules (e.g.,
  58. // protein chains, hets, solvents), occasionally joined by inter-molecule
  59. // bonds ("connections" in Cn3D jargon).
  60. class Bond;
  61. class AtomSet;
  62. class StructureObject;
  63. class Molecule;
  64. typedef std::list< ncbi::CRef< ncbi::objects::CBiostruc_feature_set > > FeatureList;
  65. class ChemicalGraph : public StructureBase
  66. {
  67. public:
  68.     ChemicalGraph(StructureBase *parent, const ncbi::objects::CBiostruc_graph& graph,
  69.         const FeatureList& features);
  70.     // public data
  71.     typedef std::map < int, const Molecule * > MoleculeMap;
  72.     MoleculeMap molecules;
  73.     typedef std::list < const Bond * > BondList;
  74.     BondList interMoleculeBonds;    // includes inter-molecular disulfides
  75.     // public methods
  76.     void RedrawMolecule(int moleculeID) const;
  77.     bool DrawAll(const AtomSet *atomSet = NULL) const;
  78.     const Residue::AtomInfo * GetAtomInfo(const AtomPntr& atom) const
  79.     {
  80.         MoleculeMap::const_iterator info=molecules.find(atom.mID);
  81.         if (info != molecules.end()) return (*info).second->GetAtomInfo(atom.rID, atom.aID);
  82.         ERR_POST(ncbi::Warning << "Graph: can't find molecule #" << atom.mID);
  83.         return NULL;
  84.     }
  85.     // check if a bond between the given atoms is a disulfide bond; if so, flag Bond as disulfide, and
  86.     // add new virtual disulfide Bond for these residues to the given bond list. Returns true if
  87.     // a virtual disulfide was added to the bondList, false otherwise. (*Not* true or false depending
  88.     // on whether the bond is actually a disulfide!)
  89.     bool CheckForDisulfide(const Molecule *molecule,
  90.         const ncbi::objects::CAtom_pntr& atomPtr1,
  91.         const ncbi::objects::CAtom_pntr& atomPtr2,
  92.         std::list < const Bond * > *bondList, Bond *bond, StructureBase *parent);
  93. private:
  94.     typedef std::list < std::pair < AtomSet *, const std::string * > > AtomSetList;
  95.     AtomSetList atomSetList;
  96.     unsigned int displayListOtherStart;
  97.     void UnpackDomainFeatures(const ncbi::objects::CBiostruc_feature_set& featureSet);
  98.     void UnpackSecondaryStructureFeatures(const ncbi::objects::CBiostruc_feature_set& featureSet);
  99. };
  100. END_SCOPE(Cn3D)
  101. #endif // CN3D_CHEMICALGRAPH__HPP
  102. /*
  103. * ---------------------------------------------------------------------------
  104. * $Log: chemical_graph.hpp,v $
  105. * Revision 1000.1  2004/04/12 17:31:17  gouriano
  106. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.19
  107. *
  108. * Revision 1.19  2004/02/19 17:04:46  thiessen
  109. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  110. *
  111. * Revision 1.18  2003/02/03 19:20:02  thiessen
  112. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  113. *
  114. * Revision 1.17  2001/05/31 18:46:25  thiessen
  115. * add preliminary style dialog; remove LIST_TYPE; add thread single and delete all; misc tweaks
  116. *
  117. * Revision 1.16  2001/05/15 23:49:19  thiessen
  118. * minor adjustments to compile under Solaris/wxGTK
  119. *
  120. * Revision 1.15  2001/03/23 23:31:30  thiessen
  121. * keep atom info around even if coords not all present; mainly for disulfide parsing in virtual models
  122. *
  123. * Revision 1.14  2001/03/23 04:18:20  thiessen
  124. * parse and display disulfides
  125. *
  126. * Revision 1.13  2000/12/20 23:47:52  thiessen
  127. * load CDD's
  128. *
  129. * Revision 1.12  2000/11/30 15:49:07  thiessen
  130. * add show/hide rows; unpack sec. struc. and domain features
  131. *
  132. * Revision 1.11  2000/10/04 17:40:45  thiessen
  133. * rearrange STL #includes
  134. *
  135. * Revision 1.10  2000/09/14 14:55:26  thiessen
  136. * add row reordering; misc fixes
  137. *
  138. * Revision 1.9  2000/08/27 18:50:55  thiessen
  139. * extract sequence information
  140. *
  141. * Revision 1.8  2000/08/21 17:22:45  thiessen
  142. * add primitive highlighting for testing
  143. *
  144. * Revision 1.7  2000/08/07 00:20:18  thiessen
  145. * add display list mechanism
  146. *
  147. * Revision 1.6  2000/08/03 15:12:29  thiessen
  148. * add skeleton of style and show/hide managers
  149. *
  150. * Revision 1.5  2000/07/27 13:30:10  thiessen
  151. * remove 'using namespace ...' from all headers
  152. *
  153. * Revision 1.4  2000/07/16 23:18:33  thiessen
  154. * redo of drawing system
  155. *
  156. * Revision 1.3  2000/07/12 23:28:27  thiessen
  157. * now draws basic CPK model
  158. *
  159. * Revision 1.2  2000/07/12 02:00:39  thiessen
  160. * add basic wxWindows GUI
  161. *
  162. * Revision 1.1  2000/07/11 13:49:27  thiessen
  163. * add modules to parse chemical graph; many improvements
  164. *
  165. */