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 (!hs_->get_is_selected(pdb_line));
290 if (!NonAlternativePDBSelector::get_is_selected(pdb_line)) {
293 return (!ws_->get_is_selected(pdb_line));
310 if (!NonWaterNonHydrogenPDBSelector::get_is_selected(pdb_line))
312 const std::string type = internal::atom_type(pdb_line);
313 return ((type[1] ==
'N' && type[2] ==
' ' && type[3] ==
' ') ||
314 (type[1] ==
'C' && type[2] ==
'A' && type[3] ==
' ') ||
315 (type[1] ==
'C' && type[2] ==
' ' && type[3] ==
' ') ||
316 (type[1] ==
'O' && type[2] ==
' ' && type[3] ==
' '));
328 if (!NonAlternativePDBSelector::get_is_selected(pdb_line))
return false;
329 const std::string type = internal::atom_type(pdb_line);
330 return (type[1] ==
'P' && type[2] ==
' ' && type[3] ==
' ');
351 return a_->get_is_selected(pdb_line) && b_->get_is_selected(pdb_line);
355 :
PDBSelector(
"AndPDBSelector%1%"), a_(a), b_(b) {}
374 return a_->get_is_selected(pdb_line) || b_->get_is_selected(pdb_line);
398 return a_->get_is_selected(pdb_line) != b_->get_is_selected(pdb_line);
402 :
PDBSelector(
"XorPDBSelector%1%"), a_(a), b_(b) {}
421 return !a_->get_is_selected(pdb_line);
471 inline PDBSelector *get_default_pdb_selector() {
472 return new NonWaterPDBSelector();
478 IMPATOMEXPORT Hierarchy
479 read_pdb(TextInput input, Model *model,
480 PDBSelector *selector = get_default_pdb_selector(),
481 bool select_first_model =
true
484 bool no_radii =
false
503 IMPATOMEXPORT
void read_pdb(TextInput input,
int model, Hierarchy h);
507 IMPATOMEXPORT Hierarchies
509 PDBSelector *selector = get_default_pdb_selector()
535 IMPATOMEXPORT
void write_pdb(
const Selection &mhd, TextOutput out,
536 unsigned int model = 1);
547 unsigned int model = 1);
560 IMPATOMEXPORT std::string get_pdb_string(
562 ResidueType rt = atom::ALA,
char chain =
' ',
int res_index = 1,
563 char res_icode =
' ',
double occupancy = 1.00,
double tempFactor = 0.00,
573 IMPATOMEXPORT std::string get_pdb_conect_record_string(
int,
int);
583 std::string filename_;
589 std::string filename);
598 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.
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.