Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Pose.hh
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file core/pose/Pose.hh
11 /// @brief Pose class
12 /// @author Phil Bradley
13 /// @author Modified by Sergey Lyskov
14 
15 /// Be very careful with #includes in this file. As almost every file in mini
16 /// #includes Pose.hh, any header file #included here will produce a huge
17 /// recompile when modified. I pledge a personally delivered, hand crafted
18 /// ass whooping for any fool that #includes an unneccessary .hh file in Pose.hh.
19 /// Allowed .hh files are few: Residue, ResidueType, Conformation, Energies
20 /// AtomID and NamedAtomID. Everything else should be forward included, or
21 /// not included at all. The above pledge applies to any header file
22 /// unnecessarily #included in the .hh files #included here.
23 /// If Pose were to hold a ConformationOP and an EnergiesOP, and not inline
24 /// their access, then Residue.hh, ResidueType.hh, Conformation.hh and
25 /// Energies.hh could be replaced with .fwd.hh's instead.
26 
27 
28 #ifndef INCLUDED_core_pose_Pose_hh
29 #define INCLUDED_core_pose_Pose_hh
30 
31 
32 // type headers
33 #include <core/types.hh>
34 
35 // Unit headers
36 #include <core/pose/Pose.fwd.hh>
37 
38 // Package headers
41 
42 // Project headers
44 #include <core/chemical/AA.hh>
45 
48 
49 // AUTO-REMOVED #include <core/id/AtomID.hh>
50 // AUTO-REMOVED #include <core/id/DOF_ID.hh>
51 // AUTO-REMOVED #include <core/id/NamedAtomID.hh>
52 // AUTO-REMOVED #include <core/id/NamedStubID.hh>
53 #include <core/id/TorsionID.fwd.hh>
54 
58 
59 #ifdef USEBOOSTSERIALIZE
62 #include <core/pose/PDBInfo.hh>
63 #include <basic/datacache/BasicDataCache.hh>
64 #include <basic/datacache/CacheableStringMap.hh>
66 #include <basic/datacache/CacheableStringFloatMap.hh>
67 #include <core/scoring/Energies.hh>
70 #include <devel/matdes/STMStoredTask.hh>
73 #else
76 #include <core/pose/PDBInfo.fwd.hh>
77 #include <basic/datacache/BasicDataCache.fwd.hh>
80 #endif
81 
83 // AUTO-REMOVED #include <core/scoring/ScoreFunctionInfo.fwd.hh>
85 // AUTO-REMOVED #include <core/scoring/constraints/Constraints.fwd.hh>
86 
87 #include <basic/MetricValue.fwd.hh>
88 
89 // //#include "cst_set.h"
90 // #include "jump_classes.h"
91 // #include "pose_param.h"
92 // #include "score_data.h"
93 
94 // // ObjexxFCL Headers
95 // #include <ObjexxFCL/FArray3A.hh>
96 // #include <ObjexxFCL/FArray4D.hh>
97 
98 // Utility headers
99 #include <utility/pointer/owning_ptr.hh>
100 #include <utility/signals/BufferedSignalHub.hh>
101 #include <utility/vector1.fwd.hh>
102 
103 // Numeric headers
104 #include <numeric/xyzMatrix.fwd.hh>
105 #include <numeric/xyzVector.fwd.hh>
106 
107 #include <core/id/AtomID.fwd.hh>
108 #include <core/id/DOF_ID.fwd.hh>
115 #include <utility/vector1.hh>
116 
117 
118 #ifdef WIN32
125  #include <core/id/AtomID.hh>
126 #endif
127 
128 
129 
130 // C++ Headers
131 // #include <cassert>
132 // #include <cmath>
133 // #include <cstdlib>
134 #include <iostream>
135 #include <sstream>
136 // #include <map>
137 // #include <string>
138 
139 
140 namespace core {
141 namespace pose {
142 
143 
144  /// A molecular system including residues, kinematics, and energies
145 
146 /**
147 
148  The Pose class represents a molecular system (protein-dna-ligand...)
149 as a container of Rosetta Residue objects together with
150 a Conformation object that defines how internal coordinate changes
151 propagate through the system and an Energies object that stores
152 information from the last energy evaluation.
153 
154 
155 The main responsibilities of the pose are:
156 
157 @li Kinematic:
158  (a) to update the xyz coordinates in response to changes to internal
159  degrees of freedom, and
160  (b) to update internal coordinates when the user modifes the xyz
161  (Cartesian) coords,
162 
163 @li Scoring:
164  (a) to keep track of what parts of the structure have changed since
165  the last score evaluation, and
166  (b) to cache residue and residue-pair energies for efficient re-use
167 
168 @li As a container:
169  The pose provides a single object for passing
170  a molecular system and for copying of entire molecules
171  or stretches of molecules from one Pose object into another.
172 
173 
174 Output Methods:
175 Common Methods:
176  Pose.assign
177  Pose.atom_tree
178  Pose.conformation
179  Pose.dump_pdb
180  Pose.energies
181  Pose.fold_tree
182  Pose.pdb_info
183  Pose.residue
184  Pose.sequence
185  Pose.total_residue
186 **/
187 
189 
190 public:
206  typedef basic::datacache::BasicDataCache BasicDataCache;
207  typedef basic::datacache::BasicDataCacheOP BasicDataCacheOP;
208 
209 public:
210 
211  /// @brief default constructor, builds an empty pose
212  ///
213  /// AtomTree default /bonding information
214  /// Conformation default /change propagation
215  /// Energies default /contains pose energy information
216  /// FoldTree default /directs building of Pose
217  /// Residue default /container of individual Residue objects
218  Pose();
219 
220  /// @brief destructor -- > kill data on the heap
221  virtual ~Pose();
222 
223  /// @brief copy constructor
224  Pose( Pose const & src );
225 
226  /// @brief partial copy constructor
227  Pose( Pose const & src, Size residue_begin, Size residue_end);
228 
229  /// @brief Construct pose from pdb file
230  //Pose( std::string const & pdb_file );
231 
232  /// @brief Copies <src> into the pose
233  ///
234  /// example(s):
235  /// test_pose.assign(pose)
236  /// See also:
237  /// Pose
238  Pose &
239  operator=( Pose const & src );
240 
241  ////////////////////////////////////////
242  // tree builders / modifiers
243 
244  /// @brief Returns the pose Conformation (const-access)
245  ///
246  /// example(s):
247  /// pose.Conformation()
248  /// See also:
249  /// Pose
250  /// Conformation
251  Conformation const &
252  conformation() const
253  {
254  return *conformation_;
255  }
256 
257  /// @brief Returns the pose Conformation (non-const access)
258  Conformation &
260  {
261  return *conformation_;
262  }
263 
264  /// @brief Returns the pose FoldTree
265  ///
266  /// example(s):
267  /// pose.fold_tree()
268  /// See also:
269  /// Pose
270  /// FoldTree
271  kinematics::FoldTree const &
272  fold_tree() const;
273 
274  /// @brief Sets the pose FoldTree to <fold_tree_in>
275  ///
276  /// example(s):
277  /// pose.fold_tree( foldtree )
278  /// See also:
279  /// Pose
280  /// pose.fold_tree
281  /// FoldTree
282  void
283  fold_tree( kinematics::FoldTree const & fold_tree_in );
284 
285  /// @brief Now that the conformation_ member data is an owning pointer,
286  /// and we have derived classes of Conformation.
287  void
288  set_new_conformation( ConformationOP new_conformation );
289 
290  /// @brief Now that the energies_ member data is an owning pointer,
291  /// and we have derived classes of Energies.
292  void
294 
295  /// @brief Returns the pose AtomTree
296  kinematics::AtomTree const &
297  atom_tree() const;
298 
299  /// @brief Returns the chain number of residue <seqpos>
300  ///
301  /// example(s):
302  /// pose.chain(3)
303  /// See also:
304  /// Pose
305  /// Pose.annotated_sequence
306  /// Pose.chain_sequence
307  /// Pose.fold_tree
308  /// Pose.sequence
309  /// FoldTree
310  int
311  chain( Size const seqpos ) const;
312 
313  /// @brief Returns a vector of poses with one element per chain of the original pose
315  split_by_chain() const;
316 
317  /// @brief
318  Pose
319  split_by_chain(Size chain_id) const;
320 
321  // TODO: Move to util.hh.
322  /// @brief Updates the pose chain IDs to match the pdb chain IDs.
323  void
325 
326  /// APL Removing illegal non-const accessors to residues which
327  /// otherwise violate the data-integrity guarantees provided by
328  /// class Conformation.
329  /// accessors for iteration over residues
330  /// THIS MUST BE REMOVED ASAP!
331  //conformation::ResidueOPs::iterator res_begin();
332  //conformation::ResidueOPs::iterator res_end ();
333 
334  ///////////////////////////////////////////
335  /// @brief Returns the pose Energies (const-access)
336  ///
337  /// example(s):
338  /// pose.energies()
339  /// See also:
340  /// Pose
341  /// Energies
342  /// PDBInfo
343  /// ScoreFunction
344  /// create_score_function
345  scoring::Energies const &
346  energies() const {
347  return *energies_;
348  }
349 
350  /// @brief Returns the pose Energies (non-const access)
353  return *energies_;
354  }
355 
357  constraint_set() const;
358 
359  /// @brief adding a constraint is done by cloning the input constraint. A const copy is then returned
362 
365 
366  /// @brief re object_comparison see comment for ConstraintSet::remove_constraint function
367  bool
370  bool object_comparison = false
371  );
372 
373  /// @brief re object_comparison see comment for ConstraintSet::remove_constraint function
374  bool
377  bool object_comparison = false
378  );
379 
380  bool
382 
383  void
385 
386  void transfer_constraint_set( const pose::Pose &pose );
387 
388  /// @brief Returns the pose PDBInfo (const)
389  ///
390  /// example(s):
391  /// pose.pdb_info()
392  /// See also:
393  /// Pose
394  /// Energies
395  /// PDBInfo
396  /// ScoreFunction
397  /// pose_from_pdb
398  /// @return NULL if no PDBInfo instance exists, the pdb info instance otherwise
399  PDBInfoCOP
400  pdb_info() const;
401 
402  /// @brief Returns the pose PDBInfo
403  /// @return NULL if no PDBInfo instance exists, the PDBInfo instance otherwise
404  PDBInfoOP
405  pdb_info();
406 
407  /// @brief Sets pose PDBInfo to <new_info>
408  /// @param[in] <new_info> the new PDBInfo to copy, pass NULL
409  /// if you want to zero the existence of PDBInfo inside this Pose
410  /// @return the prior PDBInfo instance
411  PDBInfoOP
412  pdb_info( PDBInfoOP new_info );
413 
414  void
415  metric( std::string const & calculator_name, std::string const & key, basic::MetricValueBase & val ) const;
416 
418  print_metric( std::string const & calculator_name, std::string const & key ) const;
419 
420  ////////////////////////////////////////
421  // miscellaneous structure modification:
422 
423  ///////////////////////////////////////////////////////////////////////////////////
424  ///////////////////////////////////////////////////////////////////////////////////
425  // insert/append/delete residues
426  ///////////////////////////////////////////////////////////////////////////////////
427  ///////////////////////////////////////////////////////////////////////////////////
428 
429  /// @brief Appends <new_rsd> (a residue) to pose by a new jump
430  void
432  conformation::Residue const & new_rsd,
433  Size const jump_anchor_residue,
434  std::string const& jump_anchor_atom = "",
435  std::string const& jump_root_atom = "",
436  bool const start_new_chain = false
437  );
438 
439  /// @brief Appends <new_rsd> (a residue) to pose by a new bond
440  ///
441  /// @details The default behavior is to append by a polymeric connection to the preceding residue
442  /// If we want to connect via a non-polymer connection, we give the connection number, anchor residue
443  /// and the connection number for the anchor residue. These connection numbers are wrt the connections_
444  /// arrays in Residue and ResidueType
445  ///
446  /// If build_ideal_bond is TRUE it will transform the coordinates of the new residue so that the bond
447  /// geometry of the new bond is ideal according to the icoor_internal data in the residues.
448  ///
449  /// Otherwise the incoming coordinates of new_rsd are preserved.
450  void
452  conformation::Residue const & new_rsd,
453  bool const build_ideal_geometry = false,
454  int const connection = 0,
455  Size const anchor_residue = 0,
456  int const anchor_connection = 0,
457  bool const start_new_chain = false,
458  bool const lookup_bond_length = false
459  );
460 
461  ///
462  /// This code sorely belongs in Pose.cc
463  /// @brief Adds <new_rsd_in> to pose at <seqpos>
464  void
466  Residue const & new_rsd_in,
467  Size const seqpos, // desired seqpos of new_rsd
468  Size anchor_pos, // in the current sequence numbering, ie before insertion of seqpos
469  std::string const& anchor_atomno = "",
470  std::string const& root_atomno = ""
471  );
472 
473  /// @brief Replaces the residue at <seqpos> with <new_rsd_in>
474  void
476  Size const seqpos,
477  Residue const & new_rsd_in,
478  bool const orient_backbone
479  );
480 
481  /// @brief Replaces the residue at <seqpos> with <new_rsd>
482  /// based on superposition on the specified input atom pairs
483  /// NOTE: at the moment, only superposition on 3 atoms works
484  /// This code sorely belongs in Pose.cc
485  void
487  int const seqpos,
488  Residue const & new_rsd_in,
489  utility::vector1< std::pair< std::string, std::string > > const & atom_pairs
490  );
491 
492  /// @brief glues to seqpos and perhaps also seqpos+1
493  void
495  Residue const & new_rsd,
496  Size const seqpos,
497  bool const build_ideal_geometry
498  );
499 
500  /// @brief glues to seqpos and perhaps also seqpos-1
501  void
503  Residue const & new_rsd,
504  Size const seqpos,
505  bool const build_ideal_geometry
506  );
507 
508  void
509  delete_polymer_residue( Size const seqpos );
510 
511  /// @brief Copy a stretch of coordinates/torsions from <src>
512  /// to pose
513  void
514  copy_segment(
515  Size const size,
516  Pose const & src,
517  Size const begin,
518  Size const src_begin
519  );
520 
521  ///////////////////////
522  // miscellaneous access
523 
524  /// @brief BasicDataCache indexed by enum in core/pose/datacache/CacheableDataType.hh
525  BasicDataCache const &
526  data() const
527  {
528  return *data_cache_;
529  }
530 
531  /// @brief BasicDataCache indexed by enum in core/pose/datacache/CacheableDataType.hh
534  {
535  return *data_cache_;
536  }
537 
538 
539  /// @brief ObserverCache indexed by enum in core/pose/datacache/CacheableObserverType.hh
540  ObserverCache const &
542  {
543  return *observer_cache_;
544  }
545 
546 
547  /// @brief ObserverCache indexed by enum in core/pose/datacache/CacheableObserverType.hh
548  ObserverCache &
550  {
551  return *observer_cache_;
552  }
553 
554  /// @brief Returns the number of residues in the pose conformation
555  ///
556  /// example(s):
557  /// pose.total_residue()
558  /// See also:
559  /// Pose
560  /// Pose.n_residue
561  /// Pose.sequence
562  Size
563  total_residue() const;
564 
565  /// @brief Returns the number of residues in the pose conformation
566  /// example(s):
567  /// pose.n_residue()
568  /// See also:
569  /// Pose
570  /// Pose.sequence
571  /// Pose.total_residue
572  Size
573  n_residue() const;
574 
575  /// @brief Returns true if there are no residues in the conformation
576  ///
577  /// example(s):
578  /// pose.empty()
579  /// See also:
580  /// Pose
581  /// Pose.clear
582  /// Pose.sequence
583  /// Pose.total_residue
584  bool
585  empty() const;
586 
587  /// @brief Returns the number of jumps in the pose FoldTree
588  ///
589  /// example(s):
590  /// pose.num_jump()
591  /// See also:
592  /// Pose
593  /// Pose.jump
594  /// Pose.set_jump
595  /// Pose.set_jump_now
596  /// FoldTree
597  /// Jump
598  Size
599  num_jump() const;
600 
601  /// @brief Returns the chemical::AA of the residue at <seqpos>
602  ///
603  /// example(s):
604  /// pose.aa(17)
605  /// See also:
606  /// Pose
607  /// Pose.Residue
608  /// Pose.sequence
609  /// Residue
611  aa( Size const seqpos) const;
612 
613  /// @brief Returns the secondary structure of residue <seqpos>
614  /// this usually comes from fragments. The conformation object
615  /// will not invoke DSSP to determine the secondary structure
616  /// if e.g. it has not been made from fragments.
617  /// 'H' = helical
618  /// 'S' = strand or sheet
619  /// 'E' = loop
620  ///
621  /// example(s):
622  /// pose.secstruct(3)
623  /// See also:
624  /// Pose
625  /// Pose.residue
626  /// Pose.set_secstruct
627  /// Residue
628  char
629  secstruct( Size const seqpos ) const;
630 
631  /// @brief Returns a string representing pose secondary structure
632  ///
633  /// example(s):
634  /// pose.secstruct()
635  /// See also:
636  /// Pose
637  /// Pose.residue
638  /// Pose.set_secstruct
639  /// Residue
641  secstruct() const;
642 
643  /// @brief Assign the secondary structure of residue <seqpos> to <setting>
644  ///
645  /// example(s):
646  /// pose.set_secstruct(3,'H')
647  /// See also:
648  /// Pose
649  /// Pose.residue
650  /// Pose.secstruct
651  /// Residue
652  void
653  set_secstruct( Size const seqpos, char const setting );
654 
655  /// @brief Returns a string representing the 1-letter-coded sequence of the pose conformation.
656  ///
657  /// example(s):
658  /// pose.sequence()
659  /// See also:
660  /// Pose
661  /// Pose.annotated_sequence
662  /// Pose.chain
663  /// Pose.chain_sequence
664  /// Pose.residue
665  /// Pose.total_residue
667  sequence() const;
668 
669  /// @brief Returns the variant-tagged string representing the
670  /// residue types that make up a conformation; e.g.
671  /// M[MET:N-Terminus-Variant]CDH[HIS_D]LLR[ARG:C-Terminus-Variant]
672  ///
673  /// example(s):
674  /// pose.annotated_sequence()
675  /// See also:
676  /// Pose
677  /// Pose.sequence
678  /// Pose.total_residue
679  /// Residue
681  annotated_sequence( bool show_all_variants = false ) const;
682 
683  /// @brief Returns the sequence for the chain <chain_in>
684  ///
685  /// Example(s):
686  /// pose.chain_sequence(1)
687  /// See also:
688  /// Pose
689  /// Pose.chain
690  /// Pose.residue
691  /// Pose.sequence
693  chain_sequence( core::Size const chain_in ) const;
694 
695  /// @brief Returns the Residue at position <seqpos> (read access)
696  /// Note: this method will trigger a refold if either the
697  /// torsions or the coordinates are out-of-date
698  ///
699  /// example(s):
700  /// pose.residue(4)
701  /// See also:
702  /// Pose
703  /// Pose.sequence
704  /// Pose.total_residue
705  /// Residue
706  /// ResidueType
707  Residue const &
708  residue(
709  Size const seqpos
710  ) const;
711 
712  /// @brief Returns the ResidueType at position <seqpos> (read access)
713  /// Note: this method NOT will trigger a refold if either
714  /// the torsions or the coordinates are out-of-date
715  ///
716  /// example(s):
717  /// pose.residue_type(5)
718  /// See also:
719  /// Pose
720  /// Pose.residue
721  /// Pose.sequence
722  /// Pose.total_residue
723  /// Residue
724  /// ResidueType
725  chemical::ResidueType const &
726  residue_type(
727  Size const seqpos
728  ) const;
729 
730  /// @brief Returns true if pose is ResidueType fullatom
731  ///
732  /// @note convenience test for residue_type_set ( based on two
733  /// middle residue -- to avoid hitting on ligands or pseudos )
734  ///
735  /// example(s):
736  /// pose.is_fullatom()
737  /// See also:
738  /// Pose
739  /// Pose.is_centroid
740  /// Residue
741  /// ResidueType
742  ///@brief this is nt a good test --Doug
743  bool is_fullatom() const;
744 
745  /// @brief Returns true if pose is ResidueType centroid
746  ///
747  /// @note convenience test for residue_type_set ( based on two
748  /// middle residue -- to avoid hitting on ligands or pseudos )
749  ///
750  /// example(s):
751  /// pose.is_centroid()
752  /// See also:
753  /// Pose
754  /// Pose.is_fullatom
755  /// Residue
756  /// ResidueType
757  ///@brief this is nt a good test --Doug
758  bool is_centroid() const;
759 
760 
761  ///////////////////////////////////////////////////////////////////////////
762  // convenience access for torsion angles
763 
764  // backbone torsions
765  // peptides and saccharides
766 
767  /// @brief Returns the phi torsion angle of residue <seqpos>
768  /// @note assumes the residue is an amino acid or monosaccharide
769  ///
770  /// example(s):
771  /// pose.phi(1)
772  /// See also:
773  /// Pose
774  /// Pose.residue
775  /// Pose.set_phi
776  /// Residue
777  Real
778  phi( Size const seqpos ) const;
779 
780  /// @brief Sets the phi torsion angle of residue <seqpos> to <setting>
781  /// @note <setting> must be in degrees, assumes residue is an amino acid or monosaccharide
782  ///
783  /// example(s):
784  /// pose.set_phi(1)
785  /// See also:
786  /// Pose
787  /// Pose.phi
788  /// Pose.residue
789  /// Residue
790  void
791  set_phi( Size const seqpos, Real const setting );
792 
793  /// @brief Returns the psi torsion angle of residue <seqpos>
794  /// Note: assumes the residue is an amino acid or monosaccharide
795  ///
796  /// example(s):
797  /// pose.psi(2)
798  /// See also:
799  /// Pose
800  /// Pose.residue
801  /// Pose.set_psi
802  /// Residue
803  Real
804  psi( Size const seqpos ) const;
805 
806  /// @brief Sets the psi torsion angle of residue <seqpos> to <setting>
807  /// @note <setting> must be in degrees, assumes residue is an amino acid or monosaccharide
808  ///
809  /// example(s):
810  /// pose.set_psi(2)
811  /// See also:
812  /// Pose
813  /// Pose.psi
814  /// Pose.residue
815  /// Residue
816  void
817  set_psi( Size const seqpos, Real const setting );
818 
819  /// @brief Returns the omega torsion angle of residue <seqpos>
820  /// @note assumes the residue is an amino acid or monosaccharide
821  ///
822  /// example(s):
823  /// pose.omega(3)
824  /// See also:
825  /// Pose
826  /// Pose.residue
827  /// Pose.set_omega
828  /// Residue
829  Real omega( Size const seqpos ) const;
830 
831  /// @brief Sets the omega torsion angle of residue <seqpos> to <setting>
832  /// @note <setting> must be in degrees, assumes residue is an amino acid or monosaccharide
833  ///
834  /// example(s):
835  /// pose.set_omega(3)
836  /// See also:
837  /// Pose
838  /// Pose.omega
839  /// Pose.residue
840  /// Residue
841  void
842  set_omega( Size const seqpos, Real const setting );
843 
844 
845  // nucleic acids
846 
847  /// @brief Returns the alpha torsion angle of residue <seqpos>
848  /// @note assumes the residue is an nucleic acid
849  ///
850  /// example(s):
851  /// pose.alpha(1)
852  /// See also:
853  /// Pose
854  /// Pose.residue
855  /// Pose.set_alpha
856  /// Residue
857  Real
858  alpha( Size const pos ) const;
859 
860  /// @brief Sets the alpha torsion angle of residue <seqpos> to <setting>
861  /// @note <setting> must be in degrees, assumes residue is an nucleic acid
862  ///
863  /// example(s):
864  /// pose.set_alpha(1)
865  /// See also:
866  /// Pose
867  /// Pose.alpha
868  /// Pose.residue
869  /// Residue
870  void
871  set_alpha( Size const seqpos, Real const setting );
872 
873  /// @brief Returns the beta torsion angle of residue <seqpos>
874  /// @note assumes the residue is an nucleic acid
875  ///
876  /// example(s):
877  /// pose.beta(2)
878  /// See also:
879  /// Pose
880  /// Pose.residue
881  /// Pose.set_beta
882  /// Residue
883  Real
884  beta( Size const seqpos ) const;
885 
886  /// @brief Sets the beta torsion angle of residue <seqpos> to <setting>
887  /// @note <setting> must be in degrees, assumes residue is an nucleic acid
888  ///
889  /// example(s):
890  /// pose.set_beta(2)
891  /// See also:
892  /// Pose
893  /// Pose.beta
894  /// Pose.residue
895  /// Residue
896  void
897  set_beta( Size const seqpos, Real const setting );
898 
899  /// @brief Returns the gamma torsion angle of residue <seqpos>
900  /// @note assumes the residue is an nucleic acid
901  ///
902  /// example(s):
903  /// pose.gamma(3)
904  /// See also:
905  /// Pose
906  /// Pose.residue
907  /// Pose.set_gamma
908  /// Residue
909  Real gamma( Size const seqpos ) const;
910 
911  /// @brief Sets the gamma torsion angle of residue <seqpos> to <setting>
912  /// @note <setting> must be in degrees, assumes residue is an nucleic acid
913  ///
914  /// example(s):
915  /// pose.set_gamma(3)
916  /// See also:
917  /// Pose
918  /// Pose.gamma
919  /// Pose.residue
920  /// Residue
921  void
922  set_gamma( Size const seqpos, Real const setting );
923 
924  /// @brief Returns the delta torsion angle of residue <seqpos>
925  /// @note assumes the residue is an nucleic acid
926  ///
927  /// example(s):
928  /// pose.delta(4)
929  /// See also:
930  /// Pose
931  /// Pose.residue
932  /// Pose.set_delta
933  /// Residue
934  Real
935  delta( Size const pos ) const;
936 
937  /// @brief Sets the delta torsion angle of residue <seqpos> to <setting>
938  /// @note <setting> must be in degrees, assumes residue is an nucleic acid
939  ///
940  /// example(s):
941  /// pose.set_delta(4)
942  /// See also:
943  /// Pose
944  /// Pose.delta
945  /// Pose.residue
946  /// Residue
947  void
948  set_delta( Size const seqpos, Real const setting );
949 
950  /// @brief Returns the epsilon torsion angle of residue <seqpos>
951  /// @note assumes the residue is an nucleic acid
952  ///
953  /// example(s):
954  /// pose.epsilon(5)
955  /// See also:
956  /// Pose
957  /// Pose.residue
958  /// Pose.set_epsilon
959  /// Residue
960  Real
961  epsilon( Size const seqpos ) const;
962 
963  /// @brief Sets the epsilon torsion angle of residue <seqpos> to <setting>
964  /// @note <setting> must be in degrees, assumes residue is an nucleic acid
965  ///
966  /// example(s):
967  /// pose.set_epsilon(5)
968  /// See also:
969  /// Pose
970  /// Pose.epsilon
971  /// Pose.residue
972  /// Residue
973  void
974  set_epsilon( Size const seqpos, Real const setting );
975 
976  /// @brief Returns the zeta torsion angle of residue <seqpos>
977  /// @note assumes the residue is an nucleic acid
978  ///
979  /// example(s):
980  /// pose.zeta(6)
981  /// See also:
982  /// Pose
983  /// Pose.residue
984  /// Pose.set_zeta
985  /// Residue
986  Real zeta( Size const seqpos ) const;
987 
988  /// @brief Sets the zeta torsion angle of residue <seqpos> to <setting>
989  /// @note <setting> must be in degrees, assumes residue is an nucleic acid
990  ///
991  /// example(s):
992  /// pose.set_zeta(6)
993  /// See also:
994  /// Pose
995  /// Pose.zeta
996  /// Pose.residue
997  /// Residue
998  void
999  set_zeta( Size const seqpos, Real const setting );
1000 
1001 
1002  // sidechain torsions
1003  // peptides and saccharides
1004 
1005  /// @brief Returns the <chino> chi torsion angle of residue <seqpos>
1006  /// @note assumes the residue is an amino acid or monosaccharide
1007  ///
1008  /// example(s):
1009  /// pose.chi(1,7)
1010  /// See also:
1011  /// Pose
1012  /// Pose.set_chi
1013  /// Pose.residue
1014  /// Residue
1015  Real
1016  chi(
1017  int const chino,
1018  Size const seqpos
1019  ) const;
1020 
1021  /// @brief Sets the <chino> chi torsion angle of residue <seqpos> to <setting>
1022  /// @note <setting> must be in degrees, assumes residue is an amino acid or monosaccharide
1023  ///
1024  /// example(s):
1025  /// pose.set_chi(1,7,120)
1026  /// See also:
1027  /// Pose
1028  /// Pose.chi
1029  /// Pose.residue
1030  /// Residue
1031  void
1032  set_chi(
1033  int const chino,
1034  Size const seqpos,
1035  Real const setting
1036  );
1037 
1038  // nucleic acids
1039 
1040  /// @brief Returns the chi torsion angle of residue <seqpos>
1041  /// @note assumes the residue is an nucleic acid
1042  ///
1043  /// example(s):
1044  /// pose.chi(7)
1045  /// See also:
1046  /// Pose
1047  /// Pose.residue
1048  /// Pose.set_chi
1049  /// Residue
1050  Real chi( Size const seqpos ) const;
1051 
1052  /// @brief Sets the chi torsion angle of residue <seqpos> to <setting>
1053  /// @note <setting> must be in degrees, assumes residue is an nucleic acid
1054  ///
1055  /// example(s):
1056  /// pose.set_chi(7)
1057  /// See also:
1058  /// Pose
1059  /// Pose.chi
1060  /// Pose.residue
1061  /// Residue
1062  void
1063  set_chi( Size const seqpos, Real const setting );
1064 
1065 
1066  /////////////////////////////////////////////////////////////////////////////
1067  // jumps
1068 
1069  /// @brief Sets the pose FoldTree Jump <jump_number> to <new_jump>
1070  ///
1071  /// example(s):
1072  /// pose.set_jump(1,jump1)
1073  /// See also:
1074  /// Pose
1075  /// Pose.fold_tree
1076  /// Pose.jump
1077  /// Pose.set_jump_now
1078  /// FoldTree
1079  /// FoldTree.jump_edge
1080  /// Jump
1081  void
1082  set_jump(
1083  int const jump_number,
1084  const kinematics::Jump & new_jump
1085  );
1086 
1087  /// @brief Sets the pose FoldTree Jump <jump_number> to <new_jump>
1088  ///
1089  /// example(s):
1090  /// pose.set_jump_now(2,jump2)
1091  /// See also:
1092  /// Pose
1093  /// Pose.fold_tree
1094  /// Pose.jump
1095  /// Pose.set_jump
1096  /// FoldTree
1097  /// FoldTree.jump_edge
1098  /// Jump
1099  void
1100  set_jump_now(
1101  int const jump_number,
1102  const kinematics::Jump & new_jump
1103  );
1104 
1105  /// @brief Returns the pose FoldTree Jump <jump_number>
1106  ///
1107  /// example(s):
1108  /// pose.jump(1)
1109  /// See also:
1110  /// Pose
1111  /// Pose.fold_tree
1112  /// Pose.set_jump
1113  /// FoldTree
1114  /// FoldTree.jump_edge
1115  /// Jump
1116  kinematics::Jump const &
1117  jump( int const jump_number ) const;
1118 
1119  /// @brief Sets the pose FoldTree Jump <id> to <new_jump>
1120  ///
1121  /// example(s):
1122  /// pose.set_jump(1,jump1)
1123  /// See also:
1124  /// Pose
1125  /// Pose.fold_tree
1126  /// Pose.jump
1127  /// FoldTree
1128  /// FoldTree.jump_edge
1129  /// AtomID
1130  void
1131  set_jump(
1132  AtomID const & id,
1133  const kinematics::Jump & new_jump
1134  );
1135 
1136  /// @brief Returns the pose FoldTree Jump <id>
1137  ///
1138  /// example(s):
1139  /// pose.set_jump(R5N)
1140  /// See also:
1141  /// Pose
1142  /// Pose.fold_tree
1143  /// Pose.set_jump
1144  /// FoldTree
1145  /// FoldTree.jump_edge
1146  /// AtomID
1147  kinematics::Jump const &
1148  jump( AtomID const & id ) const;
1149 
1150 
1151  /////////////////////////////////////////////////////////////////////////////
1152  // generic torsion-angle access
1153 
1154  /// @brief Returns the Conformation torsion angle identified by <id>
1155  ///
1156  /// See also:
1157  /// Pose
1158  /// TorsionID
1159  Real
1160  torsion( TorsionID const & id ) const;
1161 
1162  /// @brief Sets the Conformation torsion angle identified
1163  /// by <id> to <setting>
1164  ///
1165  /// See also:
1166  /// Pose
1167  /// TorsionID
1168  void
1169  set_torsion( TorsionID const & id, Real const setting );
1170 
1171 
1172  ///////////////////////////////////////////////////////////////////////////
1173  // access atomtree dof's
1174 
1175  /// @brief Returns the value of the AtomTree DOF <id>
1176  ///
1177  /// See also:
1178  /// Pose
1179  /// DOF_ID
1180  Real
1181  dof( DOF_ID const & id ) const;
1182 
1183  /// @brief Sets the value of the AtomTree DOF <id>
1184  ///
1185  /// See also:
1186  /// Pose
1187  /// DOF_ID
1188  void
1189  set_dof( DOF_ID const & id, Real const setting );
1190 
1191  /// @brief Returns true if pose has DOF <id>
1192  ///
1193  /// See also:
1194  /// Pose
1195  /// DOF_ID
1196  bool
1197  has_dof( DOF_ID const & id ) const;
1198 
1199  /// @brief Returns the location (xyz) of pose AtomID <id>
1200  ///
1201  /// example(s):
1202  /// atom = AtomID(1,1)
1203  /// pose.xyz(atom)
1204  /// See also:
1205  /// Pose
1206  /// Pose.residue
1207  /// AtomID
1208  /// Residue
1209  /// Residue.xyz
1210  PointPosition const &
1211  xyz( AtomID const & id ) const;
1212 
1213  /// @brief Returns the location (xyz) of pose NamedAtomID <id>
1214  ///
1215  /// Tutorial soon...
1216  /// See also:
1217  /// Pose
1218  /// Pose.residue
1219  /// NamedAtomID
1220  /// Residue
1221  /// Residue.xyz
1222  PointPosition const &
1223  xyz( NamedAtomID const & id ) const;
1224 
1225  /// @brief Sets the location (xyz) of pose AtomID <id> to
1226  /// the PointPosition <point>
1227  ///
1228  /// See also:
1229  /// Pose
1230  /// Pose.residue
1231  /// Pose.xyz
1232  /// Residue
1233  void
1234  set_xyz( AtomID const & id, PointPosition const & point );
1235 
1236  /// @brief Sets the location (xyz) of pose NamedAtomID <id>
1237  /// to the PointPosition <point>
1238  ///
1239  /// See also:
1240  /// Pose
1241  /// Pose.residue
1242  /// Pose.xyz
1243  /// Residue
1244  void
1245  set_xyz( NamedAtomID const & id, PointPosition const & point );
1246 
1247  /// @brief Sets the locations (xyz) of pose AtomIDs in <ids>
1248  /// to mathcing PointPositions in <points>
1249  void
1251 
1252  /// @brief Gets the locations (xyz) of pose AtomIDs in <ids>
1253  void
1255 
1257  stub_from_id( id::NamedStubID const& id );
1258 
1259  /// @brief Sets pose coordinates such that the pose center is at the Euclidean origin
1260  void
1261  center();
1262 
1263  /// @brief Updates neighbor links in the pose Energies object
1264  void
1266 
1267 
1268  /// @brief Called by ScoreFunction at the beginning of scoring
1269  void
1270  scoring_begin(
1271  scoring::ScoreFunction const & info
1272  );
1273 
1274  /// @brief Called by ScoreFunction at the end of scoring
1275  void
1276  scoring_end( scoring::ScoreFunction const & scorefxn );
1277 
1278  /// @brief Called by PairEPotential to update the action coordinates for all residues
1279  void
1280  update_actcoords();
1281 
1282  /// @brief Updates the action coordinates for pose residue <resid>
1283  void
1284  update_actcoord( Size resid );
1285 
1286  void
1287  update_orbital_coords(Size resid);
1288 
1289  /// @brief Apply a transform of the Rx + v form, where R is a
1290  /// rotation matrix and v is a translation vector.
1291  void
1293  numeric::xyzMatrix< Real > const & R,
1294  Vector const & v
1295  );
1296 
1297  /// @brief Empty the pose contents
1298  ///
1299  /// example(s):
1300  /// pose.clear()
1301  /// See also:
1302  /// Pose
1303  /// Pose.assign
1304  /// Pose.empty
1305  void
1306  clear();
1307 
1308  /// @brief Export pose data to the PDB file <file_name>
1309  ///
1310  /// example(s):
1311  /// pose.dump_pdb('new_01.pdb')
1312  /// See also:
1313  /// Pose
1314  /// pose_from_pdb
1315  bool
1316  dump_pdb(std::string const & file_name, std::string const & tag="1") const;
1317 
1318  void dump_pdb(std::ostream & out, std::string const & tag="1") const;
1319 
1320  /// @brief for writing a specified subset of residues in pdb format
1321  void
1322  dump_pdb(
1323  std::ostream & out,
1324  utility::vector1< core::Size > const & residue_indices,
1325  std::string const & tag="1"
1326  ) const;
1327 
1328 
1329  /// @brief Export pose data to the PDB file <file_name>,
1330  /// add some score output
1331  void
1332  dump_scored_pdb( std::string const & file_name, scoring::ScoreFunction const & scorefxn, std::string const & tag="1" );
1333 
1334 
1335 public: // observer attach/detach
1336 
1337 
1338  /// @brief attach DestructionEvent observer function
1339  /// @param fn pointer to observer's unary member function with signature void( DestructionEvent const & )
1340  /// @param ptr pointer to observer object
1341  /// @return Link that can be used to manage the connection.
1342  /// @remarks DestructionEvent observers will only be notified upon destruction
1343  /// of the Pose
1344  template< typename MemFn, typename Ptr >
1345  inline
1346  utility::signals::Link
1347  attach_destruction_obs( MemFn fn, Ptr ptr ) {
1348  return destruction_obs_hub_.connect( fn, ptr );
1349  }
1350 
1351 
1352  /// @brief detach DestructionEvent observer function
1353  /// @param fn pointer to observer's unary member function with signature void( DestructionEvent const & )
1354  /// @param ptr pointer to observer object
1355  /// @return true if disconnect successful, false if connection does not exist
1356  /// @remarks DestructionEvent observers will only be notified upon destruction
1357  /// of the Pose
1358  template< typename MemFn, typename Ptr >
1359  inline
1360  bool
1361  detach_destruction_obs( MemFn fn, Ptr ptr ) const {
1362  return destruction_obs_hub_.disconnect( fn, ptr );
1363  }
1364 
1365 
1366  /// @brief attach GeneralEvent observer function
1367  /// @param fn pointer to observer's unary member function with signature void( GeneralEvent const & )
1368  /// @param ptr pointer to observer object
1369  /// @return Link that can be used to manage the connection.
1370  /// @remarks GeneralEvent observers will be notified whenever any signal
1371  /// derived from GeneralEvent occurs.
1372  template< typename MemFn, typename Ptr >
1373  inline
1374  utility::signals::Link
1375  attach_general_obs( MemFn fn, Ptr ptr ) {
1376  return general_obs_hub_.connect( fn, ptr );
1377  }
1378 
1379 
1380  /// @brief detach GeneralEvent observer function
1381  /// @param fn pointer to observer's unary member function with signature void( GeneralEvent const & )
1382  /// @param ptr pointer to observer object
1383  /// @return true if disconnect successful, false if connection does not exist
1384  /// @remarks GeneralEvent observers will be notified whenever any signal
1385  /// derived from GeneralEvent occurs.
1386  template< typename MemFn, typename Ptr >
1387  inline
1388  bool
1389  detach_general_obs( MemFn fn, Ptr ptr ) const {
1390  return general_obs_hub_.disconnect( fn, ptr );
1391  }
1392 
1393 
1394  /// @brief attach EnergyEvent observer function
1395  /// @param fn pointer to observer's unary member function with signature void( EnergyEvent const & )
1396  /// @param ptr pointer to observer object
1397  /// @return Link that can be used to manage the connection.
1398  template< typename MemFn, typename Ptr >
1399  inline
1400  utility::signals::Link
1401  attach_energy_obs( MemFn fn, Ptr ptr ) {
1402  return energy_obs_hub_.connect( fn, ptr );
1403  }
1404 
1405 
1406  /// @brief detach EnergyEvent observer function
1407  /// @param fn pointer to observer's unary member function with signature void( EnergyEvent const & )
1408  /// @param ptr pointer to observer object
1409  /// @return true if disconnect successful, false if connection does not exist
1410  template< typename MemFn, typename Ptr >
1411  inline
1412  bool
1413  detach_energy_obs( MemFn fn, Ptr ptr ) const {
1414  return energy_obs_hub_.disconnect( fn, ptr );
1415  }
1416 
1417 
1418  /// @brief attach ConformationEvent observer function
1419  /// @param fn pointer to observer's unary member function with signature void( ConformationEvent const & )
1420  /// @param ptr pointer to observer object
1421  /// @return Link that can be used to manage the connection.
1422  template< typename MemFn, typename Ptr >
1423  inline
1424  utility::signals::Link
1425  attach_conformation_obs( MemFn fn, Ptr ptr ) {
1426  return conformation_obs_hub_.connect( fn, ptr );
1427  }
1428 
1429 
1430  /// @brief detach ConformationEvent observer function
1431  /// @param fn pointer to observer's unary member function with signature void( ConformationEvent const & )
1432  /// @param ptr pointer to observer object
1433  /// @return true if disconnect successful, false if connection does not exist
1434  template< typename MemFn, typename Ptr >
1435  inline
1436  bool
1437  detach_conformation_obs( MemFn fn, Ptr ptr ) const {
1438  return conformation_obs_hub_.disconnect( fn, ptr );
1439  }
1440 
1441 
1442  ///////////////////////////////////////////////////////////////////////////
1443  ///////////////////////////////////////////////////////////////////////////
1444  ///////////////////// internal methods ////////////////////////////////////
1445  ///////////////////////////////////////////////////////////////////////////
1446  ///////////////////////////////////////////////////////////////////////////
1447 private: //
1448  /// @brief initialize internal for a freshly build pose object. Use this function when you need
1449  /// to create new constructor.
1450  void init(void);
1451 
1452 
1453 private: // observer notifications
1454 
1455 
1456  /// @brief notify DestructionEvent observers
1457  /// @remarks called only upon destruction of the Pose
1458  void
1460 
1461 
1462  /// @brief notify GeneralEvent observers
1463  /// @remarks should only be called when there are no other suitable event types
1464  /// since specific event notifications will automatically fire a GeneralEvent signal
1465  void
1466  notify_general_obs( GeneralEvent const & e );
1467 
1468 
1469  /// @brief notify EnergyEvent observers
1470  /// @param e the event
1471  /// @param fire_general fire a GeneralEvent afterwards? default true
1472  void
1473  notify_energy_obs( EnergyEvent const & e, bool const fire_general = true );
1474 
1475 
1476  /// @brief notify ConformationEvent observers
1477  /// @param e the event
1478  /// @param fire_general fire a GeneralEvent afterwards? default true
1479  void
1480  notify_conformation_obs( ConformationEvent const & e, bool const fire_general = true );
1481 
1482 
1483 private: // Pose as-an-observer methods
1484 
1485 
1486  /// @brief upon receiving a conformation::signals::XYZEvent
1487  void
1489 
1490 private:
1491 #ifdef USEBOOSTSERIALIZE
1492  friend class boost::serialization::access;
1493 
1494  // convert vector of poses to vector of silent structures
1495  template<class Archive>
1496  void save(Archive & ar, const unsigned int version) const {
1497  using namespace basic::datacache;
1498  using namespace core::pose::datacache;
1499  using namespace core::scoring::constraints;
1501  bool is_symmetric = m;
1502  ar & is_symmetric;
1503  if( is_symmetric ) {
1504  ar & * m;
1506  ar & *mm;
1507  } else {
1508  ar & conformation_;
1509  ar & energies_;
1510  }
1511  ar & pdb_info_;
1512 
1513  // constraintset, using write io because it's easier
1514  std::stringstream tmpss;
1515  tmpss.str("");
1516  if( constraint_set_ )
1518  std::string tmpstring = tmpss.str();
1519  ar & tmpstring;
1520 
1521  // datacache
1522  // only stringmap,floatmap for now
1523  bool has_string_map = data_cache_->has( CacheableDataType::STRING_MAP );
1524  ar & has_string_map;
1525  if( has_string_map ) {
1526  CacheableStringMap *string_map = dynamic_cast< CacheableStringMap* >
1527  ( data_cache_->get_raw_ptr(CacheableDataType::STRING_MAP) );
1528  ar & *string_map;
1529  }
1530  bool has_float_map = data_cache_->has( CacheableDataType::ARBITRARY_FLOAT_DATA );
1531  ar & has_float_map;
1532  if( has_float_map ) {
1533  CacheableStringFloatMap *float_map = dynamic_cast< CacheableStringFloatMap* >
1534  ( data_cache_->get_raw_ptr(CacheableDataType::ARBITRARY_FLOAT_DATA) );
1535  ar & *float_map;
1536  }
1537  bool has_tasks_map = data_cache_->has( CacheableDataType::STM_STORED_TASKS );
1538  ar & has_tasks_map;
1539  if( has_tasks_map ) {
1540  devel::matdes::STMStoredTask *tasks_map = dynamic_cast< devel::matdes::STMStoredTask * >
1541  ( data_cache_->get_raw_ptr(CacheableDataType::STM_STORED_TASKS) );
1542  ar & *tasks_map;
1543  }
1544 
1545  }
1546 
1547  template<class Archive>
1548  void load(Archive & ar, const unsigned int version) {
1549  using namespace basic::datacache;
1550  using namespace core::pose::datacache;
1551  using namespace core::scoring::constraints;
1552  bool is_symmetric;
1553  ar & is_symmetric;
1554  if( is_symmetric ) {
1556  ar & *symm_conf;
1557  conformation_ = ConformationOP( symm_conf );
1558  scoring::symmetry::SymmetricEnergies * symm_energy = new scoring::symmetry::SymmetricEnergies();
1559  ar & * symm_energy;
1560  energies_ = scoring::EnergiesOP( symm_energy);
1561  } else {
1562  ar & conformation_;
1563  ar & energies_;
1564  }
1565  energies_->set_owner( this );
1566  ar & pdb_info_;
1567 
1568  std::string tmpstring;
1569  ar & tmpstring;
1570  if( tmpstring != "" ) {
1571  std::stringstream tmpss(tmpstring);
1572  ConstraintSetOP tmpcstset = ConstraintSetOP( new ConstraintSet() );
1573  ConstraintSetOP tmp2 = ConstraintIO::get_instance()->read_constraints( tmpss, tmpcstset, *this );
1574  constraint_set( tmp2 );
1575  }
1576 
1577  bool has_string_map;
1578  ar & has_string_map;
1579  if( has_string_map) {
1580  data_cache_->set( CacheableDataType::STRING_MAP, new CacheableStringMap() );
1581  CacheableStringMap *string_map = dynamic_cast< CacheableStringMap* >
1582  ( data_cache_->get_raw_ptr(CacheableDataType::STRING_MAP) );
1583  ar & *string_map;
1584  }
1585 
1586  bool has_float_map;
1587  ar & has_float_map;
1588  if( has_float_map) {
1589  data_cache_->set( CacheableDataType::ARBITRARY_FLOAT_DATA, new CacheableStringFloatMap() );
1590  CacheableStringFloatMap *float_map = dynamic_cast< CacheableStringFloatMap* >
1591  ( data_cache_->get_raw_ptr(CacheableDataType::ARBITRARY_FLOAT_DATA) );
1592  ar & *float_map;
1593  }
1594  bool has_tasks_map;
1595  ar & has_tasks_map;
1596  if( has_tasks_map ) {
1597  devel::matdes::STMStoredTaskOP blank_tasks = new devel::matdes::STMStoredTask();
1598  data_cache_->set( CacheableDataType::STM_STORED_TASKS, blank_tasks);
1599  devel::matdes::STMStoredTask *tasks_map = dynamic_cast< devel::matdes::STMStoredTask * >
1600  ( data_cache_->get_raw_ptr(CacheableDataType::STM_STORED_TASKS) );
1601  ar & *tasks_map;
1602  }
1603  }
1604  BOOST_SERIALIZATION_SPLIT_MEMBER()
1605 #endif
1606 private:
1607 
1608 
1609 
1610  ///////////////////////////////////////////////////////////////////////////
1611  ///////////////////////////////////////////////////////////////////////////
1612  /////////////////////////data ////////////////////////////////////////////
1613  ///////////////////////////////////////////////////////////////////////////
1614  ///////////////////////////////////////////////////////////////////////////
1615 
1616  /// the kinematics object, wraps a fold_tree and an atom_tree
1617  /**
1618  responsible for updating Residue coords in response to changes
1619  in the internal coordinates
1620  also keeps track of what has changed since last update neighbors call
1621  **/
1623 
1624 
1625  /// the cached energies object, stores total,rsd,and rsd-pair energies and neighbor info
1626 
1627  /// stores information from the last energy evaluation
1628  /// handles cacheing rsd and rsd-pair energies
1630 
1631  // data which the pose can compute (akin to "decoystats" of Rosetta++)
1633 
1634  /// @brief BasicDataCache indexed by enum in core/pose/datacache/CacheableDataType.hh
1635  /// @remarks contains data we can tuck inside the pose for convenience access
1636  /// @warning DataCache must always be initialized with the number of cacheable
1637  /// data types -- see the last enum entry.
1639 
1640  /// @brief ObserverCache indexed by enum in core/pose/datacache/CacheableObserverType.hh
1641  /// @warning ObserverCache must always be initialized with the number of cacheable
1642  /// observer types -- see the last enum entry.
1644 
1645  /// @brief pdb info
1647 
1648  // constraint set
1650 
1651  /// @brief DestructionEvent observers
1652  /// @remarks notification only occurs when Pose object is destroyed
1653  mutable utility::signals::BufferedSignalHub< void, DestructionEvent > destruction_obs_hub_;
1654 
1655  /// @brief GeneralEvent observers
1656  /// @remarks GeneralEvent observers will be notified whenever any signal
1657  /// derived from GeneralEvent occurs.
1658  mutable utility::signals::BufferedSignalHub< void, GeneralEvent > general_obs_hub_;
1659 
1660  /// @brief EnergyEvent observers
1661  mutable utility::signals::BufferedSignalHub< void, EnergyEvent > energy_obs_hub_;
1662 
1663  /// @brief ConformationEvent observers
1664  /// @remarks fires when Conformation experiences a coordinate change (conformation::signals::XYZEvent)
1665  mutable utility::signals::BufferedSignalHub< void, ConformationEvent > conformation_obs_hub_;
1666 
1667 
1668 }; // class Pose
1669 
1670 /// @brief Test IO operator for debug and Python bindings
1671 std::ostream & operator << ( std::ostream & os, Pose const & pose);
1672 
1673 } // namespace pose
1674 } // namespace core
1675 
1676 
1677 #endif // INCLUDED_core_pose_Pose_HH