12 #include <IMP/atom/atom_config.h>
16 #include "internal/pdb.h"
23 #include <IMP/internal/utility.h>
24 #include <boost/format.hpp>
25 #include <boost/algorithm/string.hpp>
27 IMPATOM_BEGIN_NAMESPACE
44 virtual bool get_is_selected(
const std::string &pdb_line)
const = 0;
57 return (internal::atom_alt_loc_indicator(pdb_line) ==
' ' ||
58 internal::atom_alt_loc_indicator(pdb_line) ==
'A');
70 return (NonAlternativePDBSelector::get_is_selected(pdb_line) &&
71 internal::is_ATOM_rec(pdb_line));
83 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
84 const std::string type = internal::atom_type(pdb_line);
85 return (type[1] ==
'C' && type[2] ==
'A' && type[3] ==
' ');
97 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
98 const std::string type = internal::atom_type(pdb_line);
99 return (type[1] ==
'C' && type[2] ==
'B' && type[3] ==
' ');
113 std::string name =
"AtomTypePDBSelector%1%")
115 std::sort(atom_types_.begin(), atom_types_.end());
119 std::string type = internal::atom_type(pdb_line);
121 return std::binary_search(atom_types_.begin(), atom_types_.end(), type);
135 std::string name =
"ResidueTypePDBSelector%1%")
136 :
PDBSelector(name), residue_types_(residue_types) {
137 std::sort(residue_types_.begin(), residue_types_.end());
141 std::string type = internal::atom_residue_name(pdb_line);
143 return std::binary_search(residue_types_.begin(), residue_types_.end(),
156 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
157 const std::string type = internal::atom_type(pdb_line);
158 return (type[1] ==
'C' && type[2] ==
' ' && type[3] ==
' ');
170 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
171 const std::string type = internal::atom_type(pdb_line);
172 return (type[1] ==
'N' && type[2] ==
' ' && type[3] ==
' ');
183 return (
true || pdb_line.empty());
192 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
195 for (
int i = 0; i < (int)chains_.length(); i++) {
196 if (internal::atom_chain_id(pdb_line) == chains_[i])
return true;
203 std::string name =
"ChainPDBSelector%1%")
217 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
220 const std::string res_name = internal::atom_residue_name(pdb_line);
221 return ((res_name[0] ==
'H' && res_name[1] ==
'O' && res_name[2] ==
'H') ||
222 (res_name[0] ==
'D' && res_name[1] ==
'O' && res_name[2] ==
'D'));
229 bool is_hydrogen(std::string pdb_line)
const;
236 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
237 return is_hydrogen(pdb_line);
248 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
251 return (!ws_->get_is_selected(pdb_line) && !hs_->get_is_selected(pdb_line));
270 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
273 return (!ws_->get_is_selected(pdb_line));
290 if (!NonWaterNonHydrogenPDBSelector::get_is_selected(pdb_line))
292 const std::string type = internal::atom_type(pdb_line);
293 return ((type[1] ==
'N' && type[2] ==
' ' && type[3] ==
' ') ||
294 (type[1] ==
'C' && type[2] ==
'A' && type[3] ==
' ') ||
295 (type[1] ==
'C' && type[2] ==
' ' && type[3] ==
' ') ||
296 (type[1] ==
'O' && type[2] ==
' ' && type[3] ==
' '));
308 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
309 const std::string type = internal::atom_type(pdb_line);
310 return (type[1] ==
'P' && type[2] ==
' ' && type[3] ==
' ');
331 return a_->get_is_selected(pdb_line) && b_->get_is_selected(pdb_line);
335 :
PDBSelector(
"AndPDBSelector%1%"), a_(a), b_(b) {}
354 return a_->get_is_selected(pdb_line) || b_->get_is_selected(pdb_line);
378 return a_->get_is_selected(pdb_line) != b_->get_is_selected(pdb_line);
382 :
PDBSelector(
"XorPDBSelector%1%"), a_(a), b_(b) {}
401 return !a_->get_is_selected(pdb_line);
429 inline PDBSelector *get_default_pdb_selector() {
430 return new NonWaterPDBSelector();
436 IMPATOMEXPORT Hierarchy
437 read_pdb(TextInput input, Model *model,
438 PDBSelector *selector = get_default_pdb_selector(),
439 bool select_first_model =
true
442 bool no_radii =
false
461 IMPATOMEXPORT
void read_pdb(TextInput input,
int model, Hierarchy h);
465 IMPATOMEXPORT Hierarchies
467 PDBSelector *selector = get_default_pdb_selector()
493 IMPATOMEXPORT
void write_pdb(
const Selection &mhd, TextOutput out,
494 unsigned int model = 1);
505 unsigned int model = 1);
518 IMPATOMEXPORT std::string get_pdb_string(
520 ResidueType rt = atom::ALA,
char chain =
' ',
int res_index = 1,
521 char res_icode =
' ',
double occpancy = 1.00,
double tempFactor = 0.00,
531 IMPATOMEXPORT std::string get_pdb_conect_record_string(
int,
int);
541 std::string filename_;
547 std::string filename);
556 IMPATOM_END_NAMESPACE
Select non water and non hydrogen atoms.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
ChainPDBSelector(const std::string &chains, std::string name="ChainPDBSelector%1%")
The chain id can be any character in chains.
Define the elements used in IMP.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all backbone (N,CA,C,O) ATOM records.
Select all non-water ATOM and HETATM records.
Select all P (= phosphate) ATOM records.
Select atoms which are selected by both selectors.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
Storage of a model, its restraints, constraints and particles.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all N ATOM records.
void write_pdb(const Selection &mhd, TextOutput out, unsigned int model=1)
virtual ModelObjectsTemp do_get_inputs() const
Handling of file input/output.
virtual void do_update(unsigned int)
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all atoms in residues of the given types.
void read_pdb(TextInput input, int model, Hierarchy h)
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all C (not CA or CB) ATOM records.
Class for storing model, its restraints, constraints, and particles.
void write_pdb_of_c_alphas(const Selection &mhd, TextOutput out, unsigned int model=1)
Write a hierarchy to a PDB as C_alpha atoms.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Decorator for helping deal with a hierarchy of molecules.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all CB ATOM records.
Select all ATOM and HETATM records which are not alternatives.
Select all non-alternative ATOM records.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Common base class for heavy weight IMP objects.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
A smart pointer to a ref-counted Object that is a class member.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all atoms of the given types.
Classes to handle individual model particles. (Note that implementation of inline functions is in int...
#define IMP_OBJECTS(Name, PluralName)
Define the types for storing lists of object pointers.
Defines a selector that will pick every ATOM and HETATM record.
Various important macros for implementing decorators.
Select atoms which are not selected by a given selector.
Hierarchies read_multimodel_pdb(TextInput input, Model *model, PDBSelector *selector=get_default_pdb_selector())
Object(std::string name)
Construct an object with the given name.
Shared optimizer state that is invoked upon commitment of new coordinates.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all non-water non-alternative ATOM and HETATM records.
Select atoms which are selected by either or both selectors.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
void write_multimodel_pdb(const Hierarchies &mhd, TextOutput out)
bool get_is_selected(const std::string &pdb_line) const
Return true if the line should be processed.
Select all hydrogen ATOM and HETATM records.
Select all CA ATOM records.
Element
The various elements currently supported/known.
Select which atoms to read from a PDB file.
Select a subset of a hierarchy.
Select atoms which are selected by either selector but not both.
Select all ATOM and HETATM records with the given chain ids.
#define IMP_OVERRIDE
Cause a compile error if this method does not override a parent method.