1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
//
// Copyright (C) 2013-2024 Greg Landrum and other RDKit contributors
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
/*! \file MonomerInfo.h
\brief Defines Monomer information classes
*/
#include <RDGeneral/export.h>
#ifndef RD_MONOMERINFO_H
#define RD_MONOMERINFO_H
#include <string>
#include <utility>
#include <boost/shared_ptr.hpp>
namespace RDKit {
//! The abstract base class for atom-level monomer info
class RDKIT_GRAPHMOL_EXPORT AtomMonomerInfo {
public:
typedef enum { UNKNOWN = 0, PDBRESIDUE, OTHER } AtomMonomerType;
virtual ~AtomMonomerInfo() {}
AtomMonomerInfo() = default;
AtomMonomerInfo(AtomMonomerType typ, std::string nm = "")
: d_monomerType(typ), d_name(std::move(nm)) {}
AtomMonomerInfo(const AtomMonomerInfo &other) = default;
const std::string &getName() const { return d_name; }
void setName(const std::string &nm) { d_name = nm; }
AtomMonomerType getMonomerType() const { return d_monomerType; }
void setMonomerType(AtomMonomerType typ) { d_monomerType = typ; }
virtual AtomMonomerInfo *copy() const { return new AtomMonomerInfo(*this); }
private:
AtomMonomerType d_monomerType{UNKNOWN};
std::string d_name{""};
};
//! Captures atom-level information about peptide residues
class RDKIT_GRAPHMOL_EXPORT AtomPDBResidueInfo : public AtomMonomerInfo {
public:
AtomPDBResidueInfo() : AtomMonomerInfo(PDBRESIDUE) {}
AtomPDBResidueInfo(const AtomPDBResidueInfo &other) = default;
AtomPDBResidueInfo(const std::string &atomName, int serialNumber = 0,
std::string altLoc = "", std::string residueName = "",
int residueNumber = 0, std::string chainId = "",
std::string insertionCode = "", double occupancy = 1.0,
double tempFactor = 0.0, bool isHeteroAtom = false,
unsigned int secondaryStructure = 0,
unsigned int segmentNumber = 0)
: AtomMonomerInfo(PDBRESIDUE, atomName),
d_serialNumber(serialNumber),
d_altLoc(std::move(altLoc)),
d_residueName(std::move(residueName)),
d_residueNumber(residueNumber),
d_chainId(std::move(chainId)),
d_insertionCode(std::move(insertionCode)),
d_occupancy(occupancy),
d_tempFactor(tempFactor),
df_heteroAtom(isHeteroAtom),
d_secondaryStructure(secondaryStructure),
d_segmentNumber(segmentNumber) {}
int getSerialNumber() const { return d_serialNumber; }
void setSerialNumber(int val) { d_serialNumber = val; }
const std::string &getAltLoc() const { return d_altLoc; }
void setAltLoc(const std::string &val) { d_altLoc = val; }
const std::string &getResidueName() const { return d_residueName; }
void setResidueName(const std::string &val) { d_residueName = val; }
int getResidueNumber() const { return d_residueNumber; }
void setResidueNumber(int val) { d_residueNumber = val; }
const std::string &getChainId() const { return d_chainId; }
void setChainId(const std::string &val) { d_chainId = val; }
const std::string &getInsertionCode() const { return d_insertionCode; }
void setInsertionCode(const std::string &val) { d_insertionCode = val; }
double getOccupancy() const { return d_occupancy; }
void setOccupancy(double val) { d_occupancy = val; }
double getTempFactor() const { return d_tempFactor; }
void setTempFactor(double val) { d_tempFactor = val; }
bool getIsHeteroAtom() const { return df_heteroAtom; }
void setIsHeteroAtom(bool val) { df_heteroAtom = val; }
unsigned int getSecondaryStructure() const { return d_secondaryStructure; }
void setSecondaryStructure(unsigned int val) { d_secondaryStructure = val; }
unsigned int getSegmentNumber() const { return d_segmentNumber; }
void setSegmentNumber(unsigned int val) { d_segmentNumber = val; }
AtomMonomerInfo *copy() const override {
return static_cast<AtomMonomerInfo *>(new AtomPDBResidueInfo(*this));
}
private:
// the fields here are from the PDB definition
// (http://www.wwpdb.org/documentation/format33/sect9.html#ATOM) [9 Aug, 2013]
// element and charge are not present since the atom itself stores that
// information
unsigned int d_serialNumber = 0;
std::string d_altLoc = "";
std::string d_residueName = "";
int d_residueNumber = 0;
std::string d_chainId = "";
std::string d_insertionCode = "";
double d_occupancy = 1.0;
double d_tempFactor = 0.0;
// additional, non-PDB fields:
bool df_heteroAtom = false; // is this from a HETATM record?
unsigned int d_secondaryStructure = 0;
unsigned int d_segmentNumber = 0;
};
}; // namespace RDKit
//! allows AtomPDBResidueInfo objects to be dumped to streams
RDKIT_GRAPHMOL_EXPORT std::ostream &operator<<(
std::ostream &target, const RDKit::AtomPDBResidueInfo &apri);
#endif
|