Changeset 237f93 for src/Actions


Ignore:
Timestamp:
Apr 29, 2014, 12:42:43 PM (11 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:
f47e00b
Parents:
ec7511
git-author:
Frederik Heber <heber@…> (02/04/14 20:32:08)
git-committer:
Frederik Heber <heber@…> (04/29/14 12:42:43)
Message:

FIX: MolecularDynamicsAction now prepares normally not inside performCall().

  • added protected ActionSequence::removeAction() and pass-thru in MakroAction.
  • added MakroAction::fillOwnDialog(): We did not cleanly implement the MakroAction's dialogs before. We need to populate queries from the sequeence of Actions and from the MakroAction itself (e.g. for loop count). For the latter, we need another new function for this.
  • MolecularDynamicsAction removes output action from sequence if not desired.
  • removed (another) fillAllDialog from MakroAction::performCall(). This has been the source of doubly occuring dialogs (and dialog becoming ever larger on multiple calls).
  • MolecularDynamicsAction::prepare() also just uses ActionRegistry whose ref is passed as parameter and does not (directly) access ActionQueue.
Location:
src/Actions
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/ActionSequence.cpp

    rec7511 r237f93  
    5555void ActionSequence::addAction(Action* _action){
    5656  actions.push_back(_action);
     57}
     58
     59bool ActionSequence::removeAction(const std::string &name){
     60  actionSet::iterator it=actions.begin();
     61  for(; it!=actions.end(); it++){
     62    if ((*it)->getName() == name) {
     63      actions.erase(it);
     64      break;
     65    }
     66  }
     67  return it!=actions.end();
    5768}
    5869
  • src/Actions/ActionSequence.hpp

    rec7511 r237f93  
    4848
    4949protected:
     50  /** removes the first occurence of an action name \a name from sequence.
     51   *
     52   * \param name name of action
     53   * \return true - action removed, false - action not found
     54   */
     55  bool removeAction(const std::string &name);
     56
    5057  stateSet callAll(bool); // Dummy parameter to allow overloading
    5158  Dialog* fillAllDialogs(Dialog *dialog);
  • src/Actions/FragmentationAction/MolecularDynamicsAction.cpp

    rec7511 r237f93  
    5959void FragmentationMolecularDynamicsAction::prepare(ActionRegistry &AR)
    6060{
    61   isPrepared = false;
     61  // perform a verlet-integration first, if there are already forces or velocities
     62  // present. If not, we still copy the position cleanly into a new step where then
     63  // forces are set according to summed fragmentary contributions. This is much cleaner.
     64  actions.addAction(AR.getActionByName(std::string("verlet-integration")));
     65  actions.addAction(AR.getActionByName(std::string("output")));
     66  actions.addAction(AR.getActionByName(std::string("fragment-molecule")));
     67  actions.addAction(AR.getActionByName(std::string("fragment-automation")));
     68  actions.addAction(AR.getActionByName(std::string("analyse-fragment-results")));
     69  isPrepared = true;
    6270}
    6371
     
    7078
    7179ActionState::ptr FragmentationMolecularDynamicsAction::performCall(){
    72   // now we can truely prepare
    73   ActionQueue &AQ = ActionQueue::getInstance();
    74   // perform a verlet-integration first, if there are already forces or velocities
    75   // present. If not, we still copy the position cleanly into a new step where then
    76   // forces are set according to summed fragmentary contributions. This is much cleaner.
    77   actions.addAction(AQ.getActionByName(std::string("verlet-integration")));
    78   if (params.DoOutput.get())
    79     actions.addAction(AQ.getActionByName(std::string("output")));
    80   actions.addAction(AQ.getActionByName(std::string("fragment-molecule")));
    81   actions.addAction(AQ.getActionByName(std::string("fragment-automation")));
    82   actions.addAction(AQ.getActionByName(std::string("analyse-fragment-results")));
     80
     81  // set number of steps
    8382  setLoop(params.steps.get());
    84   isPrepared = true;
    85 
     83  // remove output from sequence if not desired.
     84  if (!params.DoOutput.get()) {
     85#ifndef NDEBUG
     86    bool status =
     87#endif
     88        removeAction(std::string("output"));
     89    ASSERT( status,
     90        "FragmentationMolecularDynamicsAction::performCall() - output not found in ActionSequence.");
     91  }
     92  // and call
    8693  ActionState::ptr state(MakroAction::performCall());
    8794
  • src/Actions/MakroAction.cpp

    rec7511 r237f93  
    8787}
    8888
     89bool MakroAction::removeAction(const std::string &name)
     90{
     91  actions.removeAction(name);
     92}
     93
     94Dialog* MakroAction::fillOwnDialog(Dialog *dialog) {
     95  return dialog;
     96}
     97
    8998Dialog* MakroAction::fillDialog(Dialog *dialog) {
     99  dialog = fillOwnDialog(dialog);
    90100  return actions.fillAllDialogs(dialog);
    91101}
    92102
    93103ActionState::ptr MakroAction::performCall(){
    94   {
    95     // create and run our dialog and also of all members of the sequence
    96     Dialog* dialog = actions.fillAllDialogs(createDialog());
    97     if (dialog->hasQueries()) {
    98       if (!dialog->display())
    99         // dialog error or aborted -> throw exception
    100         throw ActionFailureException() << ActionNameString(getName());
    101     }
    102     delete(dialog);
    103   }
     104//  {
     105//    // create and run our dialog and also of all members of the sequence
     106//    Dialog* dialog = actions.fillAllDialogs(createDialog());
     107//    if (dialog->hasQueries()) {
     108//      if (!dialog->display())
     109//        // dialog error or aborted -> throw exception
     110//        throw ActionFailureException() << ActionNameString(getName());
     111//    }
     112//    delete(dialog);
     113//  }
    104114  ActionSequence::stateSet states = actions.callAll(true);
    105115  return ActionState::ptr(new MakroActionState(states));
  • src/Actions/MakroAction.hpp

    rec7511 r237f93  
    4646
    4747protected:
    48   virtual Dialog *fillDialog(Dialog *dialog);
     48  /**
     49   * MakroAction requires an own dialog for global options such as number of loop
     50   * iterations, ... besides the dialog from each action in the sequence.
     51   *
     52   * However, fillDialog() calls ActionSequence::fillAllDialog(). Hence, the dialog
     53   * for specific global options must be requested in an distinct function.
     54   */
     55  virtual Dialog * fillOwnDialog(Dialog*);
     56
     57  /** Pass-thru for removeAction to allow all derived MakroActions to manipulate action sequence.
     58   *
     59   * \param name name of action to remove
     60   * \return true - action removed, false - action not found
     61   * \sa ActionSequence::removeAction()
     62   */
     63  bool removeAction(const std::string &name);
    4964
    5065  virtual ActionState::ptr performCall();
     
    5570
    5671private:
     72  /** fillDialog is used to spawn sequence queries, hence must not be modified by
     73   * derived MakroActions.
     74   */
     75  Dialog *fillDialog(Dialog *dialog);
     76
    5777  ActionSequence &actions;
    5878};
  • src/Actions/MakroAction_impl_header.hpp

    rec7511 r237f93  
    234234
    235235protected:
    236   virtual Dialog * fillDialog(Dialog*);
     236  virtual Dialog * fillOwnDialog(Dialog*);
    237237
    238238  void startTimer() const;
  • src/Actions/MakroAction_impl_pre.hpp

    rec7511 r237f93  
    292292
    293293// =========== fill a dialog ===========
    294 Dialog* ACTION::fillDialog(Dialog *dialog) {
     294Dialog* ACTION::fillOwnDialog(Dialog *dialog) {
    295295        ASSERT(dialog,"No Dialog given when filling actionname's dialog");
    296296#if BOOST_PP_EQUAL(MAXPARAMTYPES,0)
Note: See TracChangeset for help on using the changeset viewer.