source: src/Fragmentation/Automation/SpecificFragmentController.hpp@ 2cc1cb

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
Last change on this file since 2cc1cb was d9f2b3, checked in by Frederik Heber <heber@…>, 11 years ago

SpecificFragmentController has a ref to an updatehandler to call in case of new results.

  • SpecificFragmentController::ResultsContainer::waitForResults() will regularly call the update handler which informs via Process::setCurrSteps().
  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 * SpecificFragmentController.hpp
3 *
4 * Created on: Aug 27, 2012
5 * Author: heber
6 */
7
8#ifndef SPECIFICFRAGMENTCONTROLLER_HPP_
9#define SPECIFICFRAGMENTCONTROLLER_HPP_
10
11
12// include config.h
13#ifdef HAVE_CONFIG_H
14#include <config.h>
15#endif
16
17#include "JobMarket/Controller/FragmentController.hpp"
18#include "JobMarket/types.hpp"
19#include "JobMarket/Results/FragmentResult.hpp"
20
21#include <boost/function.hpp>
22#include <map>
23#include <string>
24#include <vector>
25
26/** This class extends FragmentController by some commodity functions used
27 * within FragmentationAutomationAction.
28 *
29 */
30class SpecificFragmentController : public FragmentController
31{
32public:
33 SpecificFragmentController(boost::asio::io_service &_io_service);
34 virtual ~SpecificFragmentController()
35 {}
36
37 typedef boost::function<void (const size_t,const size_t)> update_handler_t;
38
39 void setUpdateHandler(update_handler_t _handler)
40 {
41 handler = _handler;
42 }
43
44 void requestIds(const size_t numberjobs);
45 virtual void waitforResults(const size_t NoExpectedResults)=0;
46 void RunService(const std::string message);
47
48 /// getter and setter
49
50 void setHost(const std::string &_host) { host = _host; }
51 void setPort(const std::string &_port) { port = _port; }
52
53protected:
54
55 /** Container for the results received from the server.
56 *
57 * These are received bit by bit until all jobs are calculated.
58 * This struct takes of the waiting.
59 *
60 */
61 template <typename T>
62 struct ResultContainer {
63 /** cycle to wait for results
64 *
65 * \param NoExpectedResults number of expected results
66 * \param io_service service used for waiting
67 * \param callback ref to call controller functions
68 */
69 void waitforResults(
70 const size_t NoExpectedResults,
71 boost::asio::io_service &io_service,
72 SpecificFragmentController &callback);
73
74 /** Internal function to receive results if some are present.
75 *
76 * \param callback ref to call controller functions
77 * \return number of received results
78 */
79 size_t receiveResults(SpecificFragmentController &callback);
80
81 /** Extracts specific Data type from received vector of FragmentResults.
82 *
83 * @param results results to extract specific Data type from
84 * @param fragmentData on return array filled with extracted specific Data type
85 */
86 void ConvertFragmentResultTo(
87 const std::vector<FragmentResult::ptr> &results,
88 std::vector<T> &fragmentData);
89
90 /** Clears all internally stored results.
91 *
92 */
93 void clear()
94 { IdData.clear(); }
95
96 //!> internal container for the received data
97 std::map<JobId_t, T> IdData;
98 };
99
100protected:
101 //!> hostname of the server to control
102 std::string host;
103 //!> port of the server to control
104 std::string port;
105 //!> reference to io_service for internal purposes
106 boost::asio::io_service &io_service;
107 //!> update handler that is called in waitforResults()
108 update_handler_t handler;
109};
110
111#include "SpecificFragmentController_ResultContainer_impl.hpp"
112
113#endif /* SPECIFICFRAGMENTCONTROLLER_HPP_ */
Note: See TracBrowser for help on using the repository browser.