Action_Thermostats
        Add_AtomRandomPerturbation
        Add_RotateAroundBondAction
        Add_SelectAtomByNameAction
        Adding_Graph_to_ChangeBondActions
        Adding_MD_integration_tests
        Adding_StructOpt_integration_tests
        AutomationFragmentation_failures
        Candidate_v1.6.0
        Candidate_v1.6.1
        Candidate_v1.7.0
        ChangeBugEmailaddress
        ChangingTestPorts
        ChemicalSpaceEvaluator
        Combining_Subpackages
        Debian_Package_split
        Debian_package_split_molecuildergui_only
        Disabling_MemDebug
        Docu_Python_wait
        EmpiricalPotential_contain_HomologyGraph_documentation
        Enable_parallel_make_install
        Enhance_userguide
        Enhanced_StructuralOptimization
        Enhanced_StructuralOptimization_continued
        Example_ManyWaysToTranslateAtom
        Exclude_Hydrogens_annealWithBondGraph
        FitPartialCharges_GlobalError
        Fix_ChronosMutex
        Fix_StatusMsg
        Fix_StepWorldTime_single_argument
        Fix_Verbose_Codepatterns
        ForceAnnealing_goodresults
        ForceAnnealing_oldresults
        ForceAnnealing_tocheck
        ForceAnnealing_with_BondGraph
        ForceAnnealing_with_BondGraph_continued
        ForceAnnealing_with_BondGraph_continued_betteresults
        ForceAnnealing_with_BondGraph_contraction-expansion
        GeometryObjects
        Gui_displays_atomic_force_velocity
        IndependentFragmentGrids_IntegrationTest
        JobMarket_RobustOnKillsSegFaults
        JobMarket_StableWorkerPool
        JobMarket_unresolvable_hostname_fix
        PartialCharges_OrthogonalSummation
        PythonUI_with_named_parameters
        QtGui_reactivate_TimeChanged_changes
        Recreated_GuiChecks
        RotateToPrincipalAxisSystem_UndoRedo
        StoppableMakroAction
        TremoloParser_IncreasedPrecision
        TremoloParser_MultipleTimesteps
        Ubuntu_1604_changes
        stable
      
      
        
          | Last change
 on this file since fbf005 was             af5384, checked in by Frederik Heber <heber@…>, 12 years ago | 
        
          | 
Actions can now clone() and split off prepare() from call().
 ActionQueue now separates call phase into clone(), prepare(), and call().
ActionQueue's dstor releases Actions in deque.
CurrentAction is an index as push_back always invalidates iterator.
ActionQueue_t is now a simple vector of ptrs.
call() is now non-interactive, (maybe) interactive part is placed in
prepare() where dialogs are used to fill parameters.
only fully prepared Actions are placed in ActionQueue.
ActionQueue obtains action instances from Registry, copies, prepares them,
and places them in the queue.
Action::clone() gets QueryOptions as param. This lets us either clone without
params or really copy the instance.
If action is called as COMMAND, params have been filled already.
Reactions require a ActionQueue::getLastAction() to actually obtain result
of (cloned) Action.
FIX: Calculation now has const has...() and getResult().
 | 
        
          | 
              
Property                 mode
 set to                 100644 | 
        
          | File size:
            1.5 KB | 
      
      
| Line |  | 
|---|
| 1 | /* | 
|---|
| 2 | * AtomsCalculation_impl.hpp | 
|---|
| 3 | * | 
|---|
| 4 | *  Created on: Feb 19, 2010 | 
|---|
| 5 | *      Author: crueger | 
|---|
| 6 | */ | 
|---|
| 7 |  | 
|---|
| 8 | #ifndef ATOMSCALCULATION_IMPL_HPP_ | 
|---|
| 9 | #define ATOMSCALCULATION_IMPL_HPP_ | 
|---|
| 10 |  | 
|---|
| 11 | // include config.h | 
|---|
| 12 | #ifdef HAVE_CONFIG_H | 
|---|
| 13 | #include <config.h> | 
|---|
| 14 | #endif | 
|---|
| 15 |  | 
|---|
| 16 |  | 
|---|
| 17 | #include "Actions/AtomsCalculation.hpp" | 
|---|
| 18 | #include "Actions/Calculation_impl.hpp" | 
|---|
| 19 |  | 
|---|
| 20 | using namespace MoleCuilder; | 
|---|
| 21 |  | 
|---|
| 22 | template<typename T> | 
|---|
| 23 | AtomsCalculation<T>::AtomsCalculation(boost::function<T(atom*)> _op,const ActionTrait &_trait,AtomDescriptor _descr) : | 
|---|
| 24 | Calculation<std::vector<T> >(0,_trait), | 
|---|
| 25 | descr(_descr), | 
|---|
| 26 | op(_op) | 
|---|
| 27 | {} | 
|---|
| 28 |  | 
|---|
| 29 | template<typename T> | 
|---|
| 30 | AtomsCalculation<T>::~AtomsCalculation(){ | 
|---|
| 31 | } | 
|---|
| 32 |  | 
|---|
| 33 | template<typename T> | 
|---|
| 34 | std::vector<T>* AtomsCalculation<T>::doCalc(){ | 
|---|
| 35 | World* world = World::getPointer(); | 
|---|
| 36 | int steps = world->numAtoms(); | 
|---|
| 37 | std::vector<T> *res = new std::vector<T>(); | 
|---|
| 38 | res->reserve(steps); | 
|---|
| 39 | Process::setMaxSteps(steps); | 
|---|
| 40 | Process::start(); | 
|---|
| 41 | for(World::internal_AtomIterator | 
|---|
| 42 | iter=world->getAtomIter_internal(descr); | 
|---|
| 43 | iter!=world->atomEnd_internal(); | 
|---|
| 44 | ++iter){ | 
|---|
| 45 |  | 
|---|
| 46 | Process::setCurrStep(iter.getCount()); | 
|---|
| 47 | res->push_back(op(*iter)); | 
|---|
| 48 | } | 
|---|
| 49 | Process::stop(); | 
|---|
| 50 | return res; | 
|---|
| 51 | } | 
|---|
| 52 |  | 
|---|
| 53 | template<typename T> | 
|---|
| 54 | Action* AtomsCalculation<T>::clone(enum Action::QueryOptions flag) const | 
|---|
| 55 | { | 
|---|
| 56 | if (flag == Action::Interactive) | 
|---|
| 57 | return new AtomsCalculation<T>(op, Action::Traits, descr); | 
|---|
| 58 | else | 
|---|
| 59 | return new AtomsCalculation<T>(*this); | 
|---|
| 60 | } | 
|---|
| 61 |  | 
|---|
| 62 | template<typename T> | 
|---|
| 63 | Dialog *AtomsCalculation<T>::fillDialog(Dialog *dialog){ | 
|---|
| 64 | ASSERT(dialog,"No Dialog given when filling action dialog"); | 
|---|
| 65 | return dialog; | 
|---|
| 66 | } | 
|---|
| 67 |  | 
|---|
| 68 | #endif /* ATOMSCALCULATION_IMPL_HPP_ */ | 
|---|
       
      
  Note:
 See   
TracBrowser
 for help on using the repository browser.