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;
205 std::string name =
"ChainPDBSelector%1%")
219 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
222 const std::string res_name = internal::atom_residue_name(pdb_line);
223 return ((res_name[0] ==
'H' && res_name[1] ==
'O' && res_name[2] ==
'H') ||
224 (res_name[0] ==
'D' && res_name[1] ==
'O' && res_name[2] ==
'D'));
231 bool is_hydrogen(std::string pdb_line)
const;
238 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
239 return is_hydrogen(pdb_line);
250 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
253 return (!ws_->get_is_selected(pdb_line) && !hs_->get_is_selected(pdb_line));
272 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
275 return (!hs_->get_is_selected(pdb_line));
292 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
295 return (!ws_->get_is_selected(pdb_line));
312 if (!NonWaterNonHydrogenPDBSelector::get_is_selected(pdb_line))
314 const std::string type = internal::atom_type(pdb_line);
315 return ((type[1] ==
'N' && type[2] ==
' ' && type[3] ==
' ') ||
316 (type[1] ==
'C' && type[2] ==
'A' && type[3] ==
' ') ||
317 (type[1] ==
'C' && type[2] ==
' ' && type[3] ==
' ') ||
318 (type[1] ==
'O' && type[2] ==
' ' && type[3] ==
' '));
330 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
331 const std::string type = internal::atom_type(pdb_line);
332 return (type[1] ==
'P' && type[2] ==
' ' && type[3] ==
' ');
353 return a_->get_is_selected(pdb_line) && b_->get_is_selected(pdb_line);
357 :
PDBSelector(
"AndPDBSelector%1%"), a_(a), b_(b) {}
376 return a_->get_is_selected(pdb_line) || b_->get_is_selected(pdb_line);
400 return a_->get_is_selected(pdb_line) != b_->get_is_selected(pdb_line);
404 :
PDBSelector(
"XorPDBSelector%1%"), a_(a), b_(b) {}
423 return !a_->get_is_selected(pdb_line);
473 inline PDBSelector *get_default_pdb_selector() {
474 return new NonWaterPDBSelector();
489 IMPATOMEXPORT Hierarchy
490 read_pdb(TextInput input, Model *model,
491 PDBSelector *selector = get_default_pdb_selector(),
492 bool select_first_model =
true
495 bool no_radii =
false
514 IMPATOMEXPORT
void read_pdb(TextInput input,
int model, Hierarchy h);
518 IMPATOMEXPORT Hierarchies
520 PDBSelector *selector = get_default_pdb_selector()
546 IMPATOMEXPORT
void write_pdb(
const Selection &mhd, TextOutput out,
547 unsigned int model = 1);
558 unsigned int model = 1);
571 IMPATOMEXPORT std::string get_pdb_string(
573 ResidueType rt = atom::ALA,
char chain =
' ',
int res_index = 1,
574 char res_icode =
' ',
double occupancy = 1.00,
double tempFactor = 0.00,
584 IMPATOMEXPORT std::string get_pdb_conect_record_string(
int,
int);
594 std::string filename_;
600 std::string filename);
609 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 non hydrogen atoms.
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)
A more IMP-like version of the std::vector.
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.
Take Decorator, Particle or ParticleIndex.
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.
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.