Ignore:
Timestamp:
Sep 19, 2013, 8:22:55 PM (12 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, Candidate_v1.7.0, Candidate_v1.7.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:
628577
Parents:
1e5f84
git-author:
Frederik Heber <heber@…> (09/17/13 13:11:19)
git-committer:
Frederik Heber <heber@…> (09/19/13 20:22:55)
Message:

SpecificFragmentController now contains template ResultContainer.

  • Results are received as soon as possible (so far we waited until all are done).
  • Results are converted directly and stored in map with JobId's with specific result type internally.
  • NOTE: each specific controller needs to implement a getter, the member variable of the ResultContainer type and the virtual waitForResults() which just redirects to ResultContainer::waitForResults().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Automation/SpecificFragmentController.hpp

    r1e5f84 r732507  
    3939
    4040  void requestIds(const size_t numberjobs);
    41   void waitforResults(const size_t NoExpectedResults);
     41  virtual void waitforResults(const size_t NoExpectedResults)=0;
    4242  void RunService(const std::string message);
    4343
     
    4848
    4949protected:
    50   template <typename T>
    51   void getResults(std::map<JobId_t, T> &IdData);
    5250
    53 private:
    54   /** Extracts specific Data type from received vector of FragmentResults.
     51  /** Container for the results received from the server.
    5552   *
    56    * @param results results to extract specific Data type from
    57    * @param fragmentData on return array filled with extracted specific Data type
     53   * These are received bit by bit until all jobs are calculated.
     54   * This struct takes of the waiting.
     55   *
    5856   */
    5957  template <typename T>
    60   void ConvertFragmentResultTo(
    61       const std::vector<FragmentResult::ptr> &results,
    62       std::vector<T> &fragmentData);
     58  struct ResultContainer {
     59    /** cycle to wait for results
     60     *
     61     * \param NoExpectedResults number of expected results
     62     * \param io_service service used for waiting
     63     * \param callback ref to call controller functions
     64     */
     65    void waitforResults(
     66        const size_t NoExpectedResults,
     67        boost::asio::io_service &io_service,
     68        SpecificFragmentController &callback);
     69
     70    /** Internal function to receive results if some are present.
     71     *
     72     * \param callback ref to call controller functions
     73     * \return number of received results
     74     */
     75    size_t receiveResults(SpecificFragmentController &callback);
     76
     77    /** Extracts specific Data type from received vector of FragmentResults.
     78     *
     79     * @param results results to extract specific Data type from
     80     * @param fragmentData on return array filled with extracted specific Data type
     81     */
     82    void ConvertFragmentResultTo(
     83        const std::vector<FragmentResult::ptr> &results,
     84        std::vector<T> &fragmentData);
     85
     86    /** Clears all internally stored results.
     87     *
     88     */
     89    void clear()
     90    { IdData.clear(); }
     91
     92    //!> internal container for the received data
     93    std::map<JobId_t, T> IdData;
     94  };
    6395
    6496protected:
     
    6799  //!> port of the server to control
    68100  std::string port;
    69 private:
    70101  //!> reference to io_service for internal purposes
    71102  boost::asio::io_service &io_service;
    72103};
    73104
    74 #include "SpecificFragmentController_impl.hpp"
     105#include "SpecificFragmentController_ResultContainer_impl.hpp"
    75106
    76107#endif /* SPECIFICFRAGMENTCONTROLLER_HPP_ */
Note: See TracChangeset for help on using the changeset viewer.