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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: atom_set.hpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/04/12 17:30:46  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.17
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: atom_set.hpp,v 1000.1 2004/04/12 17:30:46 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 sets of atom data
  38. *
  39. * ===========================================================================
  40. */
  41. #ifndef CN3D_ATOMSET__HPP
  42. #define CN3D_ATOMSET__HPP
  43. #include <corelib/ncbistl.hpp>
  44. #include <string>
  45. #include <map>
  46. #include <objects/mmdb2/Atomic_coordinates.hpp>
  47. #include "structure_base.hpp"
  48. #include "vector_math.hpp"
  49. BEGIN_SCOPE(Cn3D)
  50. class Vector;
  51. // An AtomSet is a list of Atom records, accessible through the equivalent of
  52. // an ASN1 Atom-pntr (molecule, residue, and atom IDs) plus an optional alternate
  53. // conformer ID. An Atom contains the spatial coordinates and any temperature,
  54. // occupancy, and alternate conformer data present for an atom.
  55. class AtomCoord : public StructureBase
  56. {
  57. public:
  58.     AtomCoord(StructureBase *parent);
  59.     // public data
  60.     Vector site;
  61.     double averageTemperature; // average of 6 factors if anisotropic
  62.     double occupancy;
  63.     char altConfID;
  64.     static const double NO_TEMPERATURE;
  65.     static const double NO_OCCUPANCY;
  66.     static const char NO_ALTCONFID;
  67.     // public methods
  68.     bool HasTemp(void) const { return (averageTemperature!=NO_TEMPERATURE); }
  69.     bool HasOccup(void) const { return (occupancy!=NO_OCCUPANCY); }
  70.     bool HasAlt(void) const { return (altConfID!=NO_ALTCONFID); }
  71. private:
  72. };
  73. class StructureSet;
  74. class AtomSet : public StructureBase
  75. {
  76.     friend class StructureSet;
  77. public:
  78.     AtomSet(StructureBase *parent, const ncbi::objects::CAtomic_coordinates& coords);
  79.     ~AtomSet(void);
  80.     // public data
  81.     typedef std::list < const std::string * > EnsembleList;
  82.     EnsembleList ensembles;
  83.     // public methods
  84.     // which ensemble to use?
  85.     bool SetActiveEnsemble(const std::string *ensemble);
  86.     // get Atom based on Atom-pntr. If 'getAny' is true, then will return arbitrary
  87.     // altConf; if false, will only return one from active ensemble
  88.     const AtomCoord* GetAtom(const AtomPntr& atom,
  89.         bool getAny = false, bool suppressWarning = false) const;
  90. private:
  91.     // this provides a convenient way to look up atoms from Atom-pntr info
  92.     typedef std::pair < int, std::pair < int, int > > AtomPntrKey;
  93.     AtomPntrKey MakeKey(const AtomPntr& ap) const
  94.     {
  95.         return std::make_pair(ap.mID, std::make_pair(ap.rID, ap.aID));
  96.     }
  97.     typedef std::list < const AtomCoord * > AtomAltList;
  98.     typedef std::map < AtomPntrKey, AtomAltList > AtomMap;
  99.     AtomMap atomMap;
  100.     const std::string *activeEnsemble;
  101. public:
  102.     const std::string* GetActiveEnsemble(void) const { return activeEnsemble; }
  103.     bool HasTemp(void) const { return (atomMap.size()>0 && (*(atomMap.begin()->second.begin()))->HasTemp()); }
  104.     bool HasOccup(void) const { return (atomMap.size()>0 && (*(atomMap.begin()->second.begin()))->HasOccup()); }
  105.     bool HasAlt(void) const { return (atomMap.size()>0 && (*(atomMap.begin()->second.begin()))->HasAlt()); }
  106. };
  107. END_SCOPE(Cn3D)
  108. #endif // CN3D_ATOMSET__HPP
  109. /*
  110. * ---------------------------------------------------------------------------
  111. * $Log: atom_set.hpp,v $
  112. * Revision 1000.1  2004/04/12 17:30:46  gouriano
  113. * PRODUCTION: UPGRADED [CATCHUP_003] Dev-tree R1.17
  114. *
  115. * Revision 1.17  2004/02/19 17:04:42  thiessen
  116. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  117. *
  118. * Revision 1.16  2003/02/03 19:20:00  thiessen
  119. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  120. *
  121. * Revision 1.15  2001/06/14 18:59:27  thiessen
  122. * left out 'class' in 'friend ...' statments
  123. *
  124. * Revision 1.14  2001/06/02 17:22:58  thiessen
  125. * fixes for GCC
  126. *
  127. * Revision 1.13  2001/05/31 18:46:25  thiessen
  128. * add preliminary style dialog; remove LIST_TYPE; add thread single and delete all; misc tweaks
  129. *
  130. * Revision 1.12  2000/10/04 17:40:44  thiessen
  131. * rearrange STL #includes
  132. *
  133. * Revision 1.11  2000/08/25 14:21:32  thiessen
  134. * minor tweaks
  135. *
  136. * Revision 1.10  2000/08/03 15:12:29  thiessen
  137. * add skeleton of style and show/hide managers
  138. *
  139. * Revision 1.9  2000/07/27 13:30:10  thiessen
  140. * remove 'using namespace ...' from all headers
  141. *
  142. * Revision 1.8  2000/07/17 22:36:45  thiessen
  143. * fix vector_math typo; correctly set initial view
  144. *
  145. * Revision 1.7  2000/07/16 23:18:33  thiessen
  146. * redo of drawing system
  147. *
  148. * Revision 1.6  2000/07/12 23:28:27  thiessen
  149. * now draws basic CPK model
  150. *
  151. * Revision 1.5  2000/07/12 02:00:39  thiessen
  152. * add basic wxWindows GUI
  153. *
  154. * Revision 1.4  2000/07/11 13:49:25  thiessen
  155. * add modules to parse chemical graph; many improvements
  156. *
  157. * Revision 1.3  2000/07/01 15:44:23  thiessen
  158. * major improvements to StructureBase functionality
  159. *
  160. * Revision 1.2  2000/06/29 19:18:19  thiessen
  161. * improved atom map
  162. *
  163. * Revision 1.1  2000/06/29 14:35:20  thiessen
  164. * new atom_set files
  165. *
  166. */