NuriKit v0.1.0b2
Loading...
Searching...
No Matches
pdb.h
Go to the documentation of this file.
1//
2// Project NuriKit - Copyright 2023 SNU Compbio Lab.
3// SPDX-License-Identifier: Apache-2.0
4//
5
6#ifndef NURI_FMT_PDB_H_
7#define NURI_FMT_PDB_H_
8
10#include <ostream>
11#include <string>
12#include <string_view>
13#include <vector>
14
15#include <absl/base/attributes.h>
17
18#include "nuri/eigen_config.h"
20#include "nuri/core/element.h"
21#include "nuri/core/molecule.h"
22#include "nuri/fmt/base.h"
23#include "nuri/utils.h"
24
25namespace nuri {
32extern Molecule read_pdb(const std::vector<std::string> &pdb);
33
34class PDBReader final: public DefaultReaderImpl<read_pdb> {
35public:
37
38 bool getnext(std::vector<std::string> &block) override;
39
40 bool bond_valid() const override { return false; }
41
42private:
43 std::vector<std::string> header_;
44 std::vector<std::string> rfooter_;
45 bool has_model_ = false;
46};
47
49private:
50 static const bool kRegistered ABSL_ATTRIBUTE_UNUSED;
51};
52
53extern int write_pdb(std::string &out, const Molecule &mol, int model = -1,
54 int conf = -1);
55
60};
61
62extern std::ostream &operator<<(std::ostream &os, const PDBResidueId &id);
63
64template <class Hash>
65// NOLINTNEXTLINE(*-identifier-naming)
66Hash AbslHashValue(Hash h, PDBResidueId id) {
67 return Hash::combine(std::move(h), id.res_seq, id.chain_id, id.ins_code);
68}
69
70inline bool operator==(PDBResidueId lhs, PDBResidueId rhs) {
71 return static_cast<bool>(static_cast<int>(lhs.res_seq == rhs.res_seq)
72 & static_cast<int>(lhs.chain_id == rhs.chain_id)
73 & static_cast<int>(lhs.ins_code == rhs.ins_code));
74}
75
80public:
81 PDBAtomSite(char altloc, const Vector3d &pos, double occupancy = 1.0,
82 double tempfactor = 0.0) noexcept;
83
84 char altloc() const { return altloc_; }
85
86 const Vector3d &pos() const { return pos_; }
87
88 double occupancy() const { return occupancy_; }
89
90 double tempfactor() const { return tempfactor_; }
91
92private:
93 char altloc_;
94 Vector3d pos_;
95 double occupancy_;
96 double tempfactor_;
97};
98
102class PDBAtom {
103public:
104 PDBAtom(PDBResidueId rid, std::string_view name, const Element &elem,
105 std::vector<PDBAtomSite> &&sites, int fcharge, bool hetero) noexcept;
106
107 PDBResidueId rid() const { return rid_; }
108
109 std::string_view name() const { return name_; }
110
111 const std::vector<PDBAtomSite> &sites() const { return sites_; }
112
113 const Element &element() const { return *elem_; }
114
115 int fcharge() const { return fcharge_; }
116
117 bool hetero() const { return hetero_; }
118
119private:
120 PDBResidueId rid_;
121 std::string name_;
122 std::vector<PDBAtomSite> sites_;
123 internal::Nonnull<const Element *> elem_;
124 int fcharge_;
125 bool hetero_;
126};
127
132public:
133 PDBResidue(PDBResidueId id, std::string_view name,
134 std::vector<int> &&atom_idxs) noexcept;
135
136 PDBResidueId id() const { return id_; }
137
138 std::string_view name() const { return name_; }
139
140 const std::vector<int> &atom_idxs() const { return atom_idxs_; }
141
142private:
143 PDBResidueId id_;
144 std::string name_;
145
146 std::vector<int> atom_idxs_;
147};
148
152class PDBChain {
153public:
154 PDBChain(char id, std::vector<int> &&res_idxs) noexcept;
155
156 char id() const { return id_; }
157
158 const std::vector<int> &res_idxs() const { return res_idxs_; }
159
160private:
161 char id_;
162
163 std::vector<int> res_idxs_;
164};
165
169class PDBModel {
170public:
171 PDBModel(std::vector<PDBAtom> &&atoms, std::vector<PDBResidue> &&residues,
172 std::vector<PDBChain> &&chains,
173 internal::PropertyMap &&props) noexcept;
174
175 const std::vector<PDBChain> &chains() const { return chains_; }
176
177 const std::vector<PDBResidue> &residues() const { return residues_; }
178
179 const std::vector<PDBAtom> &atoms() const { return atoms_; }
180
181 const Matrix3Xd &major_conf() const { return major_conf_; }
182
183 internal::PropertyMap &props() { return props_; }
184
185 const internal::PropertyMap &props() const { return props_; }
186
187private:
188 std::vector<PDBAtom> atoms_;
189 std::vector<PDBResidue> residues_;
190 std::vector<PDBChain> chains_;
191
192 Matrix3Xd major_conf_;
193
194 internal::PropertyMap props_;
195};
196
197extern PDBModel read_pdb_model(const std::vector<std::string> &pdb);
198} // namespace nuri
199
200#endif /* NURI_FMT_PDB_H_ */
Definition base.h:238
The class for element data.
Definition element.h:157
Read-only molecule class.
Definition molecule.h:943
double occupancy() const
Definition pdb.h:88
const Vector3d & pos() const
Definition pdb.h:86
double tempfactor() const
Definition pdb.h:90
PDBAtomSite(char altloc, const Vector3d &pos, double occupancy=1.0, double tempfactor=0.0) noexcept
char altloc() const
Definition pdb.h:84
std::string_view name() const
Definition pdb.h:109
PDBResidueId rid() const
Definition pdb.h:107
const Element & element() const
Definition pdb.h:113
PDBAtom(PDBResidueId rid, std::string_view name, const Element &elem, std::vector< PDBAtomSite > &&sites, int fcharge, bool hetero) noexcept
int fcharge() const
Definition pdb.h:115
bool hetero() const
Definition pdb.h:117
const std::vector< PDBAtomSite > & sites() const
Definition pdb.h:111
PDBChain(char id, std::vector< int > &&res_idxs) noexcept
char id() const
Definition pdb.h:156
const std::vector< int > & res_idxs() const
Definition pdb.h:158
Represents a PDB model containing chains.
Definition pdb.h:169
internal::PropertyMap & props()
Definition pdb.h:183
const internal::PropertyMap & props() const
Definition pdb.h:185
const std::vector< PDBResidue > & residues() const
Definition pdb.h:177
const std::vector< PDBChain > & chains() const
Definition pdb.h:175
const std::vector< PDBAtom > & atoms() const
Definition pdb.h:179
PDBModel(std::vector< PDBAtom > &&atoms, std::vector< PDBResidue > &&residues, std::vector< PDBChain > &&chains, internal::PropertyMap &&props) noexcept
const Matrix3Xd & major_conf() const
Definition pdb.h:181
Definition pdb.h:48
Definition pdb.h:34
bool bond_valid() const override
Test whether the reader implementation can provide valid bond information.
Definition pdb.h:40
bool getnext(std::vector< std::string > &block) override
Advance the reader to the next molecule.
std::string_view name() const
Definition pdb.h:138
PDBResidue(PDBResidueId id, std::string_view name, std::vector< int > &&atom_idxs) noexcept
const std::vector< int > & atom_idxs() const
Definition pdb.h:140
PDBResidueId id() const
Definition pdb.h:136
Definition crdgen.h:16
Molecule read_pdb(const std::vector< std::string > &pdb)
Read a single PDB string and return a molecule.
Hash AbslHashValue(Hash h, PDBResidueId id)
Definition pdb.h:66
PDBModel read_pdb_model(const std::vector< std::string > &pdb)
int write_pdb(std::string &out, const Molecule &mol, int model=-1, int conf=-1)
constexpr bool operator==(const Isotope &lhs, const Isotope &rhs) noexcept
Definition element.h:34
std::ostream & operator<<(std::ostream &os, const PDBResidueId &id)
Definition pdb.h:56
int res_seq
Definition pdb.h:57
char ins_code
Definition pdb.h:59
char chain_id
Definition pdb.h:58