NCBI C++ ToolKit
residue.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: residue.cpp 94660 2021-08-26 18:41:26Z lanczyck $
2 * ===========================================================================
3 *
4 * PUBLIC DOMAIN NOTICE
5 * National Center for Biotechnology Information
6 *
7 * This software/database is a "United States Government Work" under the
8 * terms of the United States Copyright Act. It was written as part of
9 * the author's official duties as a United States Government employee and
10 * thus cannot be copyrighted. This software/database is freely available
11 * to the public for use. The National Library of Medicine and the U.S.
12 * Government have not placed any restriction on its use or reproduction.
13 *
14 * Although all reasonable efforts have been taken to ensure the accuracy
15 * and reliability of the software and data, the NLM and the U.S.
16 * Government do not and cannot warrant the performance or results that
17 * may be obtained by using this software or data. The NLM and the U.S.
18 * Government disclaim all warranties, express or implied, including
19 * warranties of performance, merchantability or fitness for any particular
20 * purpose.
21 *
22 * Please cite the author in any work or product based on this material.
23 *
24 * ===========================================================================
25 *
26 * Authors: Paul Thiessen
27 *
28 * File Description:
29 * Classes to hold residues
30 *
31 * ===========================================================================
32 */
33 
34 #include <ncbi_pch.hpp>
35 #include <corelib/ncbistd.hpp>
36 
42 #include <objects/mmdb1/Atom.hpp>
48 
50 
51 #include "residue.hpp"
52 #include "bond.hpp"
53 #include "structure_set.hpp"
54 #include "coord_set.hpp"
55 #include "atom_set.hpp"
56 #include "molecule.hpp"
57 #include "periodic_table.hpp"
58 #include "opengl_renderer.hpp"
59 #include "style_manager.hpp"
60 #include "cn3d_colors.hpp"
61 #include "show_hide_manager.hpp"
62 #include "cn3d_tools.hpp"
63 #include "messenger.hpp"
64 
67 
68 
69 BEGIN_SCOPE(Cn3D)
70 
71 const char Residue::NO_CODE = '?';
72 const int Residue::NO_ALPHA_ID = -1;
73 
74 static Residue::eAtomClassification ClassifyAtom(const Residue *residue, const CAtom& atom)
75 {
76  if (!atom.IsSetIupac_code()) return Residue::eUnknownAtom;
77  string code = atom.GetIupac_code().front();
78  CAtom::EElement element = atom.GetElement();
79 
80  if (residue->IsAminoAcid()) {
81 
82  // amino acid C-alpha
83  if (element==CAtom::eElement_c && code==" CA ")
85 
86  // amino acid partial backbone
87  if (
88  (element==CAtom::eElement_c && code==" C ") ||
89  (element==CAtom::eElement_n && code==" N ")
90  )
92 
93  // amino acid complete backbone (all backbone that's not part of "partial")
94  // including both GLY alpha hydrogens and terminal COOH and NH3+
95  if (
96  (element==CAtom::eElement_o &&
97  (code==" O " || code==" OXT")) ||
98  (element==CAtom::eElement_h &&
99  (code==" H " || code==" HA " || code=="1HA " || code=="2HA " ||
100  code==" HXT" || code=="1H " || code=="2H " || code=="3H "))
101  )
103 
104  // anything else is side chain
106 
107  } else if (residue->IsNucleotide()) {
108 
109  // nucleic acid Phosphorus
110  if (element==CAtom::eElement_p && code==" P ")
112 
113  // nucleic acid partial backbone
114  if (
115  (element==CAtom::eElement_c && (code==" C5*" || code==" C4*" || code==" C3*")) ||
116  (element==CAtom::eElement_o && (code==" O5*" || code==" O3*")) ||
117  (element==CAtom::eElement_h && (code==" H3T" || code==" H5T"))
118  )
120 
121  // nucleic acid complete backbone (all backbone that's not part of "partial")
122  if (
123  (element==CAtom::eElement_o &&
124  (code==" O1P" || code==" O2P" || code==" O4*" || code==" O2*")) ||
125  (element==CAtom::eElement_c && (code==" C2*" || code==" C1*")) ||
126  (element==CAtom::eElement_h &&
127  (code=="1H5*" || code=="2H5*" || code==" H4*" || code==" H3*" ||
128  code==" H2*" || code==" H1*" || code==" H1P" || code==" H2P" ||
129  code==" HO2" || code=="1H2*" || code=="2H2*"))
130  )
132 
133  // anything else is side chain
135  }
136 
137  return Residue::eUnknownAtom;
138 }
139 
141  const CResidue& residue, int moleculeID,
143  const ResidueGraphList& localDictionary,
144  int nResidues, int moleculeType) :
145  StructureBase(parent), code(NO_CODE), alphaID(NO_ALPHA_ID), type(eOther)
146 {
147  // get ID
148  id = residue.GetId().Get();
149 
150  // get Residue name
151  if (residue.IsSetName()) namePDB = residue.GetName();
152 
153  // get CResidue_graph*
154  // standard (of correct type) or local dictionary?
155  const ResidueGraphList *dictionary = NULL;
156  int graphID = 0;
157  if (residue.GetResidue_graph().IsStandard() &&
159  residue.GetResidue_graph().GetStandard().GetBiostruc_residue_graph_set_id().GetOther_database().GetDb() == "Standard residue dictionary" &&
162  dictionary = &standardDictionary;
163  graphID = residue.GetResidue_graph().GetStandard().GetResidue_graph_id().Get();
164  } else if (residue.GetResidue_graph().IsLocal()) {
165  dictionary = &localDictionary;
166  graphID = residue.GetResidue_graph().GetLocal().Get();
167  } else
168  ERRORMSG("confused by Molecule #?, Residue #" << id << "; can't find appropriate dictionary");
169 
170  // look up appropriate Residue_graph
171  const CResidue_graph *residueGraph = NULL;
172  ResidueGraphList::const_iterator i, ie=dictionary->end();
173  for (i=dictionary->begin(); i!=ie; ++i) {
174  if (i->GetObject().GetId().Get() == graphID) {
175  residueGraph = i->GetPointer();
176  break;
177  }
178  }
179  if (!residueGraph)
180  ERRORMSG("confused by Molecule #?, Residue #" << id << "; can't find Residue-graph ID #" << graphID);
181 
182  // get iupac-code if present - assume it's the first character of the first VisibleString
183  if (residueGraph->IsSetIupac_code())
184  code = residueGraph->GetIupac_code().front()[0];
185 
186  // get residue-graph name if present
187  if (residueGraph->IsSetDescr()) {
188  CResidue_graph::TDescr::const_iterator j, je = residueGraph->GetDescr().end();
189  for (j=residueGraph->GetDescr().begin(); j!=je; ++j) {
190  if (j->GetObject().IsName()) {
191  nameGraph = j->GetObject().GetName();
192  break;
193  }
194  }
195  }
196 
197  // get type
198  if (residueGraph->IsSetResidue_type() &&
199  // handle special case of single-residue "heterogens" composed of a natural residue - leave as 'other'
200  !(nResidues == 1 &&
201  (moleculeType == Molecule::eSolvent || moleculeType == Molecule::eNonpolymer || moleculeType == Molecule::eOther)))
202  type = static_cast<eType>(residueGraph->GetResidue_type());
203 
204  // get StructureObject* parent
205  const StructureObject *object;
206  if (!GetParentOfType(&object) || object->coordSets.size() == 0) {
207  ERRORMSG("Residue()::Residue() : parent doesn't have any CoordSets");
208  return;
209  }
210 
211  // get atom info
213  CResidue_graph::TAtoms::const_iterator a, ae = residueGraph->GetAtoms().end();
214  for (a=residueGraph->GetAtoms().begin(); a!=ae; ++a) {
215 
216  const CAtom& atom = a->GetObject();
217  int atomID = atom.GetId().Get();
218  AtomInfo *info = new AtomInfo;
219  AtomPntr ap(moleculeID, id, atomID);
220 
221  // see if this atom is present in any CoordSet
222  StructureObject::CoordSetList::const_iterator c, ce=object->coordSets.end();
223  for (c=object->coordSets.begin(); c!=ce; ++c) {
224  if (((*c)->atomSet->GetAtom(ap, true, true))) {
226  break;
227  }
228  }
229 
230  info->residue = this;
231  // get name if present
232  if (atom.IsSetName()) info->name = atom.GetName();
233  // get code if present - just use first one of the SEQUENCE
234  if (atom.IsSetIupac_code())
235  info->code = atom.GetIupac_code().front();
236  // get atomic number, assuming it's the integer value of the enumerated type
237  CAtom_Base::EElement atomicNumber = atom.GetElement();
238  info->atomicNumber = static_cast<int>(atomicNumber);
239  // get ionizable status
240  if (atom.IsSetIonizable_proton() &&
242  info->isIonizableProton = true;
243  else
244  info->isIonizableProton = false;
245  // assign (unique) name
246  info->glName = parentSet->CreateName(this, atomID);
247 
248  // classify atom
249  info->classification = ClassifyAtom(this, atom);
250  // store alphaID in residue
251  if (info->classification == eAlphaBackboneAtom) alphaID = atomID;
252 
253  // add info to map
254  if (atomInfos.find(atom.GetId().Get()) != atomInfos.end())
255  ERRORMSG("Residue #" << id << ": confused by multiple atom IDs " << atom.GetId().Get());
256  atomInfos[atomID] = info;
257  }
258 
259  // get bonds
260  CResidue_graph::TBonds::const_iterator b, be = residueGraph->GetBonds().end();
261  for (b=residueGraph->GetBonds().begin(); b!=be; ++b) {
262  int order = b->GetObject().IsSetBond_order() ?
263  b->GetObject().GetBond_order() : Bond::eUnknown;
264  const Bond *bond = MakeBond(this,
265  moleculeID, id, b->GetObject().GetAtom_id_1().Get(),
266  moleculeID, id, b->GetObject().GetAtom_id_2().Get(),
267  order);
268  if (bond) bonds.push_back(bond);
269  }
270 }
271 
273 {
274  AtomInfoMap::iterator a, ae = atomInfos.end();
275  for (a=atomInfos.begin(); a!=ae; ++a) delete a->second;
276 }
277 
278 // draw atom spheres and residue labels here
279 bool Residue::Draw(const AtomSet *atomSet) const
280 {
281  if (!atomSet) {
282  ERRORMSG("Residue::Draw(data) - NULL AtomSet*");
283  return false;
284  }
285 
286  // verify presense of OpenGLRenderer
287  if (!parentSet->renderer) {
288  WARNINGMSG("Residue::Draw() - no renderer");
289  return false;
290  }
291 
292  // get Molecule parent
293  const Molecule *molecule;
294  if (!GetParentOfType(&molecule)) return false;
295 
296  // get object parent
297  const StructureObject *object;
298  if (!GetParentOfType(&object)) return false;
299 
300  // is this residue labeled?
301  const StyleSettings& settings = parentSet->styleManager->GetStyleForResidue(object, molecule->id, id);
302  bool proteinLabel = (IsAminoAcid() && settings.proteinLabels.spacing > 0 &&
303  (id-1)%settings.proteinLabels.spacing == 0);
304  bool nucleotideLabel = (IsNucleotide() && settings.nucleotideLabels.spacing > 0 &&
305  (id-1)%settings.nucleotideLabels.spacing == 0);
306 
307  bool overlayEnsembles = parentSet->showHideManager->OverlayConfEnsembles();
308  AtomStyle atomStyle;
309  const AtomCoord *atom, *l1 = NULL, *l2 = NULL, *l3 = NULL;
310  Vector labelColor;
311  bool alphaVisible = false, alphaOnly = false;
312 
313  // iterate atoms; key is atomID
314  AtomInfoMap::const_iterator a, ae = atomInfos.end();
315  for (a=atomInfos.begin(); a!=ae; ++a) {
316 
317  // get AtomCoord* for appropriate altConf
318  AtomPntr ap(molecule->id, id, a->first);
319  atom = atomSet->GetAtom(ap, overlayEnsembles, true);
320  if (!atom) continue;
321 
322  // get Style
323  if (!parentSet->styleManager->GetAtomStyle(this, ap, atom, &atomStyle))
324  return false;
325 
326  // highlight atom if necessary
327  if (atomStyle.isHighlighted)
328  atomStyle.color = GlobalColors()->Get(Colors::eHighlight);
329 
330  // draw the atom
331  if (atomStyle.style != StyleManager::eNotDisplayed && atomStyle.radius > 0.0)
332  parentSet->renderer->DrawAtom(atom->site, atomStyle);
333 
334  // store coords for positioning label, based on backbone coordinates
335  if ((proteinLabel || nucleotideLabel) && a->second->classification != eSideChainAtom) {
336  if (IsAminoAcid()) {
337  if (a->second->name == " CA ") {
338  l1 = atom;
339  labelColor = atomStyle.color;
340  alphaVisible = (atomStyle.style != StyleManager::eNotDisplayed);
341  }
342  else if (a->second->name == " C ") l2 = atom;
343  else if (a->second->name == " N ") l3 = atom;
344  } else if (IsNucleotide()) {
345  if (a->second->name == " P ") {
346  l1 = atom;
347  labelColor = atomStyle.color;
348  alphaVisible = (atomStyle.style != StyleManager::eNotDisplayed);
349  }
350  // labeling by alphas seems to work better for nucleotides
351 // else if (a->second->name == " C4*") l2 = atom;
352 // else if (a->second->name == " C5*") l3 = atom;
353  }
354  }
355  }
356 
357  // if not all backbone atoms present (e.g. alpha only), use alpha coords of neighboring residues
358  if (l1 && (!l2 || !l3)) {
359  Molecule::ResidueMap::const_iterator prevRes, nextRes;
360  const AtomCoord *prevAlpha = NULL, *nextAlpha = NULL;
361  if ((prevRes=molecule->residues.find(id - 1)) != molecule->residues.end() &&
362  prevRes->second->alphaID != NO_ALPHA_ID &&
363  (prevAlpha=atomSet->GetAtom(AtomPntr(molecule->id, id - 1, prevRes->second->alphaID))) != NULL &&
364  (nextRes=molecule->residues.find(id + 1)) != molecule->residues.end() &&
365  nextRes->second->alphaID != NO_ALPHA_ID &&
366  (nextAlpha=atomSet->GetAtom(AtomPntr(molecule->id, id + 1, nextRes->second->alphaID))) != NULL)
367  {
368  l2 = prevAlpha;
369  l3 = nextAlpha;
370  alphaOnly = true;
371  }
372  }
373 
374  // draw residue (but not terminus) labels, assuming we have the necessary coordinates and
375  // that alpha atoms are visible
376  if (alphaVisible && (proteinLabel|| nucleotideLabel)) {
377  Vector labelPosition;
378  CNcbiOstrstream oss;
379 
380  double contrast = Colors::IsLightColor(settings.backgroundColor) ? 0 : 1;
381 
382  // protein label
383  if (IsAminoAcid() && l1 && l2 && l3) {
384  // position
385  if (alphaOnly) {
386  Vector forward = - ((l2->site - l1->site) + (l3->site - l1->site));
387  forward.normalize();
388  labelPosition = l1->site + 1.5 * forward;
389  } else {
390  Vector up = vector_cross(l2->site - l1->site, l3->site - l1->site);
391  up.normalize();
392  Vector forward = (-((l2->site - l1->site) + (l3->site - l1->site)) / 2);
393  forward.normalize();
394  labelPosition = l1->site + 1.5 * forward + 1.5 * up;
395  }
396  // text
397  if (settings.proteinLabels.type == StyleSettings::eOneLetter) {
398  oss << code;
399  } else if (settings.proteinLabels.type == StyleSettings::eThreeLetter) {
400  for (unsigned int i=0; i<nameGraph.size() && i<3; ++i)
401  oss << ((i == 0) ? (char) toupper((unsigned char) nameGraph[0]) : (char) tolower((unsigned char) nameGraph[i]));
402  }
403  // add number if necessary
405  oss << ' ' << id;
407  oss << namePDB;
408  // contrasting color? (default to CA's color)
409  if (settings.proteinLabels.white) labelColor.Set(contrast, contrast, contrast);
410  }
411 
412  // nucleotide label
413  else if (IsNucleotide() && l2 && l3) {
414  if (alphaOnly) {
415  Vector forward = - ((l2->site - l1->site) + (l3->site - l1->site));
416  forward.normalize();
417  labelPosition = l1->site + 3 * forward;
418  } else {
419  labelPosition = l3->site + 3 * (l3->site - l2->site);
420  }
421  // text
423  oss << code;
424  } else if (settings.nucleotideLabels.type == StyleSettings::eThreeLetter) {
425  for (unsigned int i=0; i<3; ++i)
426  if (nameGraph.size() > i && nameGraph[i] != ' ')
427  oss << nameGraph[i];
428  }
429  // add number if necessary
431  oss << ' ' << id;
433  oss << namePDB;
434  // contrasting color? (default to C4*'s color)
435  if (settings.nucleotideLabels.white) labelColor.Set(contrast, contrast, contrast);
436  }
437 
438  // draw label
439  if (oss.str().size() > 0) {
440  string labelText = (string) CNcbiOstrstreamToString(oss);
441 
442  // apply highlight color if necessary
443  if (GlobalMessenger()->IsHighlighted(molecule, id))
444  labelColor = GlobalColors()->Get(Colors::eHighlight);
445 
446  parentSet->renderer->DrawLabel(labelText, labelPosition, labelColor);
447  }
448  }
449 
450  return true;
451 }
452 
453 END_SCOPE(Cn3D)
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
User-defined methods of the data storage class.
const Bond * MakeBond(StructureBase *parent, int mID1, int rID1, int aID1, int mID2, int rID2, int aID2, int bondOrder)
Definition: bond.cpp:65
static const CBiostruc_residue_graph_set * standardDictionary
Vector site
Definition: atom_set.hpp:62
const AtomCoord * GetAtom(const AtomPntr &atom, bool getAny=false, bool suppressWarning=false) const
Definition: atom_set.cpp:252
bool isHighlighted
StyleManager::eDisplayStyle style
Definition: bond.hpp:50
@ eUnknown
Definition: bond.hpp:59
CAtom –.
Definition: Atom.hpp:66
CNcbiOstrstreamToString class helps convert CNcbiOstrstream to a string Sample usage:
Definition: ncbistre.hpp:802
CResidue_graph –.
CResidue –.
Definition: Residue.hpp:66
static bool IsLightColor(const Vector &color)
@ eHighlight
Definition: cn3d_colors.hpp:60
const Vector & Get(eColor which) const
bool IsHighlighted(const Molecule *molecule, int residueID) const
Definition: messenger.cpp:216
@ eSolvent
Definition: molecule.hpp:79
@ eNonpolymer
Definition: molecule.hpp:80
int id
Definition: molecule.hpp:84
ResidueMap residues
Definition: molecule.hpp:89
void DrawAtom(const Vector &site, const AtomStyle &atomStyle)
void DrawLabel(const std::string &text, const Vector &center, const Vector &color)
bool IsNucleotide(void) const
Definition: residue.hpp:111
static const char NO_CODE
Definition: residue.hpp:70
std::string namePDB
Definition: residue.hpp:74
int id
Definition: residue.hpp:69
~Residue(void)
Definition: residue.cpp:272
bool Draw(const AtomSet *atomSet) const
Definition: residue.cpp:279
Residue(StructureBase *parent, const ncbi::objects::CResidue &residue, int moleculeID, const ResidueGraphList &standardDictionary, const ResidueGraphList &localDictionary, int nResidues, int moleculeType)
Definition: residue.cpp:140
static const int NO_ALPHA_ID
Definition: residue.hpp:75
eAtomClassification
Definition: residue.hpp:88
@ eSideChainAtom
Definition: residue.hpp:89
@ eUnknownAtom
Definition: residue.hpp:93
@ ePartialBackboneAtom
Definition: residue.hpp:91
@ eAlphaBackboneAtom
Definition: residue.hpp:90
@ eCompleteBackboneAtom
Definition: residue.hpp:92
int alphaID
Definition: residue.hpp:76
bool IsAminoAcid(void) const
Definition: residue.hpp:112
BondList bonds
Definition: residue.hpp:106
char code
Definition: residue.hpp:71
AtomInfoMap atomInfos
Definition: residue.hpp:118
int nAtomsWithAnyCoords
Definition: residue.hpp:119
std::string nameGraph
Definition: residue.hpp:73
bool OverlayConfEnsembles(void) const
StructureSet * parentSet
bool GetParentOfType(const T **ptr, bool warnIfNotFound=true) const
CoordSetList coordSets
unsigned int CreateName(const Residue *residue, int atomID)
ShowHideManager * showHideManager
OpenGLRenderer * renderer
StyleManager * styleManager
const StyleSettings & GetStyleForResidue(const StructureObject *object, int moleculeID, int residueID) const
bool GetAtomStyle(const Residue *residue, const AtomPntr &atom, const AtomCoord *coord, AtomStyle *atomStyle, const StyleSettings::BackboneStyle **saveBackboneStyle=NULL, const StyleSettings::GeneralStyle **saveGeneralStyle=NULL) const
LabelStyle nucleotideLabels
Vector backgroundColor
LabelStyle proteinLabels
void normalize(void)
void Set(double xs, double ys, double zs)
Definition: vector_math.hpp:62
const Colors * GlobalColors(void)
Definition: cn3d_colors.cpp:52
#define WARNINGMSG(stream)
Definition: cn3d_tools.hpp:85
#define ERRORMSG(stream)
Definition: cn3d_tools.hpp:86
Include a standard set of the NCBI C++ Toolkit most basic headers.
string
Definition: cgiapp.hpp:687
#define NULL
Definition: ncbistd.hpp:225
const TPrim & Get(void) const
Definition: serialbase.hpp:347
#define END_SCOPE(ns)
End the previously defined scope.
Definition: ncbistl.hpp:75
#define BEGIN_SCOPE(ns)
Define a new scope.
Definition: ncbistl.hpp:72
TResidue_type GetResidue_type(void) const
Get the Residue_type member data.
bool IsSetIupac_code(void) const
Check if a value has been assigned to Iupac_code data member.
Definition: Atom_.hpp:534
const TDescr & GetDescr(void) const
Get the Descr member data.
const TName & GetName(void) const
Get the Name member data.
Definition: Residue_.hpp:300
bool IsSetDescr(void) const
Check if a value has been assigned to Descr data member.
const TResidue_graph_id & GetResidue_graph_id(void) const
Get the Residue_graph_id member data.
const TIupac_code & GetIupac_code(void) const
Get the Iupac_code member data.
const TBiostruc_residue_graph_set_id & GetBiostruc_residue_graph_set_id(void) const
Get the Biostruc_residue_graph_set_id member data.
TIonizable_proton GetIonizable_proton(void) const
Get the Ionizable_proton member data.
Definition: Atom_.hpp:625
bool IsStandard(void) const
Check if variant Standard is selected.
bool IsSetResidue_type(void) const
Check if a value has been assigned to Residue_type data member.
const TResidue_graph & GetResidue_graph(void) const
Get the Residue_graph member data.
Definition: Residue_.hpp:347
bool IsSetName(void) const
Check if a value has been assigned to Name data member.
Definition: Residue_.hpp:288
bool IsLocal(void) const
Check if variant Local is selected.
const TLocal & GetLocal(void) const
Get the variant data.
const TName & GetName(void) const
Get the Name member data.
Definition: Atom_.hpp:499
const TBonds & GetBonds(void) const
Get the Bonds member data.
const TIupac_code & GetIupac_code(void) const
Get the Iupac_code member data.
Definition: Atom_.hpp:546
TElement GetElement(void) const
Get the Element member data.
Definition: Atom_.hpp:578
bool IsSetIupac_code(void) const
Check if a value has been assigned to Iupac_code data member.
const TId & GetId(void) const
Get the Id member data.
Definition: Atom_.hpp:464
const TId & GetId(void) const
Get the Id member data.
Definition: Residue_.hpp:265
bool IsSetName(void) const
Check if a value has been assigned to Name data member.
Definition: Atom_.hpp:487
bool IsSetIonizable_proton(void) const
Check if a value has been assigned to Ionizable_proton data member.
Definition: Atom_.hpp:606
const TStandard & GetStandard(void) const
Get the variant data.
const TAtoms & GetAtoms(void) const
Get the Atoms member data.
@ eIonizable_proton_true
Definition: Atom_.hpp:208
@ eElement_n
Definition: Atom_.hpp:103
@ eElement_p
Definition: Atom_.hpp:111
@ eElement_o
Definition: Atom_.hpp:104
@ eElement_h
Definition: Atom_.hpp:97
@ eElement_c
Definition: Atom_.hpp:102
bool IsOther_database(void) const
Check if variant Other_database is selected.
const TOther_database & GetOther_database(void) const
Get the variant data.
const TTag & GetTag(void) const
Get the Tag member data.
Definition: Dbtag_.hpp:267
bool IsId(void) const
Check if variant Id is selected.
Definition: Object_id_.hpp:264
const TDb & GetDb(void) const
Get the Db member data.
Definition: Dbtag_.hpp:220
TId GetId(void) const
Get the variant data.
Definition: Object_id_.hpp:270
@ eOther
Something else.
Definition: unicode.hpp:59
int i
static MDB_envinfo info
Definition: mdb_load.c:37
Messenger * GlobalMessenger(void)
Definition: messenger.cpp:73
std::list< ncbi::CRef< ncbi::objects::CResidue_graph > > ResidueGraphList
Definition: molecule.hpp:58
unsigned int a
Definition: ncbi_localip.c:102
int tolower(Uchar c)
Definition: ncbictype.hpp:72
int toupper(Uchar c)
Definition: ncbictype.hpp:73
USING_SCOPE(objects)
static Residue::eAtomClassification ClassifyAtom(const Residue *residue, const CAtom &atom)
Definition: residue.cpp:74
USING_NCBI_SCOPE
Definition: residue.cpp:65
Definition: inftrees.h:24
Definition: type.c:6
Modified on Sat Dec 02 09:19:46 2023 by modify_doxy.py rev. 669887