Changeset ea7a50 for src


Ignore:
Timestamp:
Feb 22, 2012, 11:26:49 AM (13 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
3dfd9c
Parents:
52ed5b
git-author:
Frederik Heber <heber@…> (01/06/12 17:53:45)
git-committer:
Frederik Heber <heber@…> (02/22/12 11:26:49)
Message:

Rewrote some of the descriptors such that they access World's AtomSet and MoleculeSet directly.

Location:
src
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • src/Descriptors/AtomOfMoleculeSelectionDescriptor.cpp

    r52ed5b rea7a50  
    3737
    3838atom* AtomOfMoleculeSelectionDescriptor_impl::find(){
    39   World &instance = World::getInstance();
    40   for (World::MoleculeSelectionIterator iter = instance.beginMoleculeSelection();
    41       iter != instance.endMoleculeSelection();
     39  World::MoleculeSet &set = getSelectedMolecules();
     40  for (World::MoleculeSet::internal_iterator iter = set.begin_internal();
     41      iter != set.end_internal();
    4242      ++iter) {
    4343    if (iter->second->begin() != iter->second->end())
     
    4949std::vector<atom*> AtomOfMoleculeSelectionDescriptor_impl::findAll(){
    5050  std::vector<atom*> res;
    51   World &instance = World::getInstance();
    52   for (World::MoleculeSelectionIterator iter = instance.beginMoleculeSelection();
    53       iter != instance.endMoleculeSelection();
     51  World::MoleculeSet &set = getSelectedMolecules();
     52  for (World::MoleculeSet::internal_iterator iter = set.begin_internal();
     53      iter != set.end_internal();
    5454      ++iter) {
    5555    std::copy(iter->second->begin(), iter->second->end(), res.begin());
     
    5858}
    5959
     60World::MoleculeSet& AtomOfMoleculeSelectionDescriptor_impl::getSelectedMolecules(){
     61  return World::getInstance().selectedMolecules;
     62}
     63
    6064AtomDescriptor AtomsByMoleculeSelection(){
    6165  return AtomDescriptor(AtomDescriptor::impl_ptr(new AtomOfMoleculeSelectionDescriptor_impl()));
  • src/Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp

    r52ed5b rea7a50  
    2626  virtual atom* find();
    2727  virtual std::vector<atom*> findAll();
     28
     29  World::MoleculeSet& getSelectedMolecules();
    2830};
    2931
  • src/Descriptors/MoleculeNameDescriptor.cpp

    r52ed5b rea7a50  
    4242  return MoleculeDescriptor(MoleculeDescriptor::impl_ptr(new MoleculeNameDescriptor_impl(name)));
    4343}
    44 
    45 molecule *MoleculeNameDescriptor_impl::find(){
    46   World::MoleculeSet &molecules = getMolecules();
    47   World::MoleculeSet::iterator res = molecules.begin();
    48   for (; res != molecules.end(); res++)
    49     if (res->second->name == name)
    50       break;
    51   return (res!=molecules.end())?((*res).second):0;
    52 }
    53 
    54 vector<molecule*> MoleculeNameDescriptor_impl::findAll(){
    55   vector<molecule *> foundMolecules;
    56   World::MoleculeSet &molecules = getMolecules();
    57   World::MoleculeSet::iterator res = molecules.begin();
    58   for (; res != molecules.end(); res++)
    59     if (res->second->name == name)
    60       foundMolecules.push_back(res->second);
    61   return foundMolecules;
    62 }
  • src/Descriptors/MoleculeNameDescriptor_impl.hpp

    r52ed5b rea7a50  
    1818  bool predicate(std::pair<moleculeId_t,molecule*> molecule);
    1919
    20 protected:
    21   virtual molecule *find();
    22   virtual std::vector<molecule*> findAll();
    2320private:
    2421  std::string name;
  • src/Descriptors/MoleculeOfAtomSelectionDescriptor.cpp

    r52ed5b rea7a50  
    4343
    4444molecule* MoleculeOfAtomSelectionDescriptor_impl::find(){
    45   World &instance = World::getInstance();
    46   for (World::AtomSelectionIterator iter = instance.beginAtomSelection();
    47       iter != instance.endAtomSelection();
     45  World::AtomSet &set = getSelectedAtoms();
     46  for (World::AtomSet::internal_iterator iter = set.begin_internal();
     47      iter != set.end_internal();
    4848      ++iter) {
    49     if (iter->second->getMolecule() != NULL)
     49    if (iter->second->getMolecule())
    5050      return iter->second->getMolecule();
    5151  }
     
    5757  std::set<molecule*> temp;
    5858  std::pair< std::set<molecule*>::iterator, bool> inserter;
    59   World &instance = World::getInstance();
    60   for (World::AtomSelectionIterator iter = instance.beginAtomSelection();
    61       iter != instance.endAtomSelection();
     59  World::AtomSet &set = getSelectedAtoms();
     60  for (World::AtomSet::internal_iterator iter = set.begin_internal();
     61      iter != set.end_internal();
    6262      ++iter) {
    63     if (iter->second->getMolecule() != NULL) {
     63    if (iter->second->getMolecule()) {
    6464      inserter = temp.insert( iter->second->getMolecule() );
    6565      if (inserter.second)
     
    7070}
    7171
     72World::AtomSet& MoleculeOfAtomSelectionDescriptor_impl::getSelectedAtoms(){
     73  return World::getInstance().selectedAtoms;
     74}
     75
    7276MoleculeDescriptor MoleculesByAtomSelection(){
    7377  return MoleculeDescriptor(MoleculeDescriptor::impl_ptr(new MoleculeOfAtomSelectionDescriptor_impl()));
  • src/Descriptors/MoleculeOfAtomSelectionDescriptor_impl.hpp

    r52ed5b rea7a50  
    2626  virtual molecule* find();
    2727  virtual std::vector<molecule*> findAll();
     28
     29  World::AtomSet& getSelectedAtoms();
    2830};
    2931
  • src/Descriptors/MoleculeOrderDescriptor.cpp

    r52ed5b rea7a50  
    4545}
    4646
    47 molecule *MoleculeOrderDescriptor_impl::find(){
     47World::MoleculeSet& MoleculeOrderDescriptor_impl::getMolecules()
     48{
     49  return World::getInstance().molecules;
     50}
     51
     52molecule* MoleculeOrderDescriptor_impl::find() {
    4853  World::MoleculeSet &molecules = getMolecules();
    4954
     
    5358    return NULL;
    5459  } else if (id > 0) {
    55     World::MoleculeSet::const_iterator res = molecules.begin();
    56     for (; res != molecules.end(); ++res) { // when iterator is normal, ++ goes forward!
     60    World::MoleculeSet::internal_iterator res = molecules.begin_internal();
     61    for (; res != molecules.end_internal(); ++res) { // when iterator is normal, ++ goes forward!
    5762      ++i;
    5863      if (id == i)
     
    6166    mol = res->second;
    6267  } else {
    63     World::MoleculeSet::const_reverse_iterator res = molecules.rbegin();
    64     for (; res != molecules.rend(); --res) {  // when iterator is reverse, ++ goes backward!
     68    World::MoleculeSet::reverse_internal_iterator res = molecules.rbegin_internal();
     69    for (; res != molecules.rend_internal(); --res) {  // when iterator is reverse, ++ goes backward!
    6570      --i;
    6671      if (id == i)
  • src/Descriptors/MoleculeOrderDescriptor_impl.hpp

    r52ed5b rea7a50  
    2121  virtual molecule *find();
    2222  virtual std::vector<molecule*> findAll();
     23
     24  World::MoleculeSet& getMolecules();
     25
    2326private:
    2427  int id;
  • src/Descriptors/MoleculePtrDescriptor.cpp

    r52ed5b rea7a50  
    4444  return MoleculeDescriptor(MoleculeDescriptor::impl_ptr(new MoleculePtrDescriptor_impl(ptr)));
    4545}
    46 
    47 molecule *MoleculePtrDescriptor_impl::find(){
    48   World::MoleculeSet &molecules = getMolecules();
    49   World::MoleculeSet::iterator res = molecules.find(ptr->getId());
    50   return (res!=molecules.end())?((*res).second):0;
    51 }
    52 
    53 vector<molecule*> MoleculePtrDescriptor_impl::findAll(){
    54   molecule *res = find();
    55   return (res)?(vector<molecule*>(1,res)):(vector<molecule*>());
    56 }
  • src/Descriptors/MoleculePtrDescriptor_impl.hpp

    r52ed5b rea7a50  
    2020  bool predicate(std::pair<moleculeId_t,molecule*> molecule);
    2121
    22 protected:
    23   virtual molecule *find();
    24   virtual std::vector<molecule*> findAll();
    2522private:
    2623  molecule * ptr;
  • src/World.hpp

    r52ed5b rea7a50  
    8787// coupling with descriptors over selection
    8888friend class AtomSelectionDescriptor_impl;
     89friend class AtomOfMoleculeSelectionDescriptor_impl;
     90friend class MoleculeOfAtomSelectionDescriptor_impl;
     91friend class MoleculeOrderDescriptor_impl;
    8992friend class MoleculeSelectionDescriptor_impl;
    9093
  • src/documentation/constructs/descriptors.dox

    r52ed5b rea7a50  
    7373 *  - currently selected molecules: MoleculesBySelection()
    7474 *
     75 * \subsection descriptors-world Descriptors and the World
    7576 *
    76  * \date 2011-10-31
     77 *  In the World we make heavy use of descriptors. However, the World is also
     78 *  responsibly of informing connected Observers about removal or insertion of
     79 *  atoms or molecules.
     80 *  That's why its containers are protectedly constructed as ObservedContainers.
     81 *  Whenever you walk through them with a normal iterator, afterwards an update()
     82 *  is initiated. Only if you use a const_interator, this is prevented. But this
     83 *  at the natural disadvantage that the reference may only be used in constant
     84 *  environment.
     85 *  Descriptors however may return non-const reference. And we rely heavily on
     86 *  these to cheaply give us the correct reference for a given id, element type,
     87 *  and so on. So how do we do this?
     88 *
     89 *  Some of the descriptors are friends of the World and may use its internal
     90 *  containers directly, see AtomSelectionDescriptor_impl. Thus it can quickly
     91 *  walk through the atoms and find the correct one without causing huge delays
     92 *  by unnecessarily calling forth an update().
     93 *
     94 *
     95 * \date 2012-01-06
    7796 *
    7897 */
Note: See TracChangeset for help on using the changeset viewer.