Changeset 0275ad for src/RandomNumbers


Ignore:
Timestamp:
Feb 3, 2011, 9:59:57 AM (14 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:
9964ff, c14c78
Parents:
1ee3b8d
git-author:
Frederik Heber <heber@…> (01/07/11 00:15:49)
git-committer:
Frederik Heber <heber@…> (02/03/11 09:59:57)
Message:

Final step in Random numbers is done ...

Location:
src/RandomNumbers
Files:
4 added
19 edited

Legend:

Unmodified
Added
Removed
  • src/RandomNumbers/Makefile.am

    r1ee3b8d r0275ad  
    1010RANDOMSOURCE = \
    1111        RandomNumberDistribution_Encapsulation.cpp \
     12        RandomNumberDistribution_Parameters.cpp \
    1213        RandomNumberDistributionFactory.cpp \
    1314        RandomNumberEngine_Encapsulation.cpp \
     15        RandomNumberEngine_Parameters.cpp \
    1416        RandomNumberEngineFactory.cpp \
    1517        RandomNumberGenerator.cpp \
     
    2022RANDOMHEADER = \
    2123        RandomNumberDistribution.hpp \
     24        RandomNumberDistribution_Parameters.hpp \
    2225        RandomNumberDistribution_Encapsulation.hpp \
    2326        RandomNumberDistributionFactory.hpp \
    2427        RandomNumberEngine.hpp \
    2528        RandomNumberEngine_Encapsulation.hpp \
     29        RandomNumberEngine_Parameters.hpp \
    2630        RandomNumberEngineFactory.hpp \
    2731        RandomNumberGenerator.hpp \
  • src/RandomNumbers/RandomNumberDistribution.hpp

    r1ee3b8d r0275ad  
    1616class RandomNumberDistributionFactoryTest;
    1717class RandomNumberGenerator;
     18class RandomNumberDistribution_Parameters;
    1819
    1920/** Abstract base class for a random number distribution.
     
    3738
    3839public:
    39   /** Getter for smallest value the engine produces.
     40  /** Getter for the whole set of possible parameters.
     41   *
     42   * @return filled instance of RandomNumberDistribution_Parameters
     43   */
     44  virtual RandomNumberDistribution_Parameters* getParameterSet() const=0;
     45
     46  /** Getter for smallest value the uniform_... engines produces.
    4047   *
    4148   * @return smallest value
     
    4350  virtual double min() const=0;
    4451
    45   /** Getter for largest value the engine produces.
     52  /** Getter for largest value the uniform_... engines produces.
    4653   *
    4754   * @return largest value
     
    5663  virtual double p() const=0;
    5764
     65  /** Getter for binomial_distribution's parameter t.
     66   *
     67   * @return t
     68   */
     69  virtual double t() const=0;
     70
     71  /** Getter for cauchy_distribution parameter median.
     72   *
     73   * @return median
     74   */
     75  virtual double median() const=0;
     76
     77  /** Getter for cauchy_distribution parameter sigma.
     78   *
     79   * @return sigma
     80   */
     81  virtual double sigma() const=0;
     82
     83  /** Getter for gamma_distribution parameter alpha.
     84   *
     85   * @return alpha
     86   */
     87  virtual double alpha() const=0;
     88
     89  /** Getter for poisson_distribution's parameter mean.
     90   *
     91   * @return mean
     92   */
     93  virtual double mean() const=0;
     94
     95  /** Getter for triangle_distribution parameter a.
     96   *
     97   * @return a
     98   */
     99  virtual double a() const=0;
     100
     101  /** Getter for triangle_distribution parameter b.
     102   *
     103   * @return b
     104   */
     105  virtual double b() const=0;
     106
     107  /** Getter for triangle_distribution parameter c.
     108   *
     109   * @return c
     110   */
     111  virtual double c() const=0;
     112
     113  /** Getter for exponential_distribution parameter lambda.
     114   *
     115   * @return lambda
     116   */
     117  virtual double lambda() const=0;
     118
    58119  /** Getter for the type name of the internal distribution.
    59120   *
     121   * @return name of distribution
    60122   */
    61123  virtual std::string name()=0;
  • src/RandomNumbers/RandomNumberDistributionFactory.cpp

    r1ee3b8d r0275ad  
    4242
    4343#include "RandomNumberDistribution_Encapsulation.hpp"
     44#include "RandomNumberDistribution_Parameters.hpp"
    4445
    4546#include "RandomNumberDistributionFactory.hpp"
     
    4748// has to be included BEFORE PrototypeFactory_impl.hpp!
    4849#include "RandomNumberDistributionFactory.def"
    49 #include "CodePatterns/PrototypeFactory_impl.hpp"
     50#include "CodePatterns/ManipulablePrototypeFactory_impl.hpp"
    5051
    5152RandomNumberDistributionFactory::RandomNumberDistributionFactory()
     
    6061
    6162CONSTRUCT_SINGLETON(RandomNumberDistributionFactory)
    62 CONSTRUCT_PROTOTYPEFACTORY(RandomNumberDistribution)
     63CONSTRUCT_MANIPULABLEPROTOTYPEFACTORY(RandomNumberDistribution, RandomNumberDistribution_Parameters)
    6364
    6465#include "RandomNumberDistributionFactory.undef"
  • src/RandomNumbers/RandomNumberDistributionFactory.def

    r1ee3b8d r0275ad  
    2525#define FactoryNAME RandomNumberDistributionFactory
    2626#define Abstract_Interface_Class RandomNumberDistribution
     27#define Abstract_Parameter_Class RandomNumberDistribution_Parameters
    2728#define Abstract_Encapsulation_Class RandomNumberDistribution_Encapsulation
    2829#define type_name_space boost::
  • src/RandomNumbers/RandomNumberDistributionFactory.hpp

    r1ee3b8d r0275ad  
    2121#include "RandomNumberDistributionFactory.undef"
    2222
    23 #include "CodePatterns/PrototypeFactory.hpp"
     23#include "CodePatterns/ManipulablePrototypeFactory.hpp"
    2424
    2525#include <map>
    2626
    2727class RandomNumberDistribution;
     28class RandomNumberDistribution_Parameters;
    2829class RandomNumberDistributionFactoryUnitTest;
     30class CommandSetRandomNumbersDistributionAction;
    2931
    3032/** This is the abstract factory class for random number distributions.
     
    3941class RandomNumberDistributionFactory :
    4042  public Singleton<RandomNumberDistributionFactory>,
    41   public PrototypeFactory<RandomNumberDistribution>
     43  public ManipulablePrototypeFactory<RandomNumberDistribution, RandomNumberDistribution_Parameters>
    4244{
    4345  friend class Singleton<RandomNumberDistributionFactory>;
    4446  friend class RandomNumberDistributionFactoryTest;
     47  friend class CommandSetRandomNumbersDistributionAction;
    4548
    4649protected:
  • src/RandomNumbers/RandomNumberDistributionFactory.undef

    r1ee3b8d r0275ad  
    55#undef FactoryNAME
    66#undef Abstract_Interface_Class
     7#undef Abstract_Parameter_Class
    78#undef Abstract_Encapsulation_Class
    89#undef type_name_space
  • src/RandomNumbers/RandomNumberDistribution_Encapsulation.cpp

    r1ee3b8d r0275ad  
    2424#include "RandomNumberDistribution_Encapsulation.hpp"
    2525
     26/* =========  manipulatedclone() ================ */
     27
     28template <>
     29RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::
     30RandomNumberDistribution_Encapsulation (const RandomNumberDistribution_Parameters&_params) :
     31  distribution_type(_params.min, _params.max)
     32{}
     33
     34template <>
     35RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::
     36RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     37  distribution_type(_params.min, _params.max)
     38{}
     39
     40template <>
     41RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::
     42RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     43  distribution_type(_params.min, _params.max)
     44{}
     45
     46template <>
     47RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >::
     48RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     49  distribution_type(_params.p)
     50{}
     51
     52template <>
     53RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::
     54RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     55  distribution_type((int)_params.t, _params.p)
     56{}
     57
     58template <>
     59RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::
     60RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     61  distribution_type(_params.median, _params.sigma)
     62{}
     63
     64template <>
     65RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >::
     66RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     67  distribution_type(_params.alpha)
     68{}
     69
     70template <>
     71RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >::
     72RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     73  distribution_type(_params.mean)
     74{}
     75
     76template <>
     77RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >::
     78RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     79  distribution_type(_params.p)
     80{}
     81
     82template <>
     83RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::
     84RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     85  distribution_type(_params.a, _params.b, _params.c)
     86{}
     87
     88template <>
     89RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >::
     90RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     91  distribution_type(_params.lambda)
     92{}
     93
     94template <>
     95RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::
     96RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     97  distribution_type(_params.mean, _params.sigma)
     98{}
     99
     100template <>
     101RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::
     102RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params) :
     103  distribution_type(_params.mean, _params.sigma)
     104{}
    26105
    27106/* ===============  min() ======================= */
  • src/RandomNumbers/RandomNumberDistribution_Encapsulation.hpp

    r1ee3b8d r0275ad  
    3737#include <boost/random/uniform_smallint.hpp>
    3838
    39 #include "CodePatterns/Clone.hpp"
     39#include "CodePatterns/ManipulableClone.hpp"
    4040#include "RandomNumberDistribution.hpp"
     41
     42#include "RandomNumberDistribution_Parameters.hpp"
    4143
    4244class RandomNumberDistributionFactory;
     
    5254class RandomNumberDistribution_Encapsulation :
    5355  public RandomNumberDistribution,
    54   public Clone<RandomNumberDistribution>
     56  public ManipulableClone<RandomNumberDistribution, RandomNumberDistribution_Parameters>
    5557{
    5658    /**
     
    6163
    6264public:
    63 
    64   /** Getter for smallest value the engine produces.
     65  /** Getter for the whole set of possible parameters.
     66   *
     67   * @return filled instance of RandomNumberDistribution_Parameters
     68   */
     69  RandomNumberDistribution_Parameters* getParameterSet() const
     70  {
     71    RandomNumberDistribution_Parameters *params = new RandomNumberDistribution_Parameters();
     72    params->getParameters(this);
     73    return params;
     74  }
     75
     76  /** Getter for smallest value the uniform_... engines produces.
    6577   *
    6678   * @return smallest value
    6779   */
    6880  double min() const {
    69     ASSERT(0, "min() not implemented for "+name());
    70     return -1.;
    71   }
    72 
    73   /** Getter for largest value the engine produces.
     81    return RandomNumberDistribution_Parameters::noset_value;
     82  }
     83
     84  /** Getter for largest value the uniform_... engines produces.
    7485   *
    7586   * @return largest value
    7687   */
    7788  double max() const {
    78     ASSERT(0, "max() not implemented for "+name());
    79     return -1.;
     89    return RandomNumberDistribution_Parameters::noset_value;
    8090  }
    8191
     
    8595   */
    8696  double p() const {
    87     ASSERT(0, "p() not implemented for "+name());
    88     return -1.;
     97    return RandomNumberDistribution_Parameters::noset_value;
    8998  }
    9099
     
    94103   */
    95104  double t() const {
    96     ASSERT(0, "t() not implemented for "+name());
    97     return -1.;
     105    return RandomNumberDistribution_Parameters::noset_value;
    98106  }
    99107
     
    103111   */
    104112  double median() const {
    105     ASSERT(0, "median() not implemented for "+name());
    106     return -1.;
     113    return RandomNumberDistribution_Parameters::noset_value;
    107114  }
    108115
     
    112119   */
    113120  double sigma() const {
    114     ASSERT(0, "sigma() not implemented for "+name());
    115     return -1.;
     121    return RandomNumberDistribution_Parameters::noset_value;
    116122  }
    117123
     
    121127   */
    122128  double alpha() const {
    123     ASSERT(0, "alpha() not implemented for "+name());
    124     return -1.;
     129    return RandomNumberDistribution_Parameters::noset_value;
    125130  }
    126131
     
    130135   */
    131136  double mean() const {
    132     ASSERT(0, "mean() not implemented for "+name());
    133     return -1.;
     137    return RandomNumberDistribution_Parameters::noset_value;
    134138  }
    135139
     
    139143   */
    140144  double a() const {
    141     ASSERT(0, "a() not implemented for "+name());
    142     return -1.;
     145    return RandomNumberDistribution_Parameters::noset_value;
    143146  }
    144147
     
    148151   */
    149152  double b() const {
    150     ASSERT(0, "b() not implemented for "+name());
    151     return -1.;
     153    return RandomNumberDistribution_Parameters::noset_value;
    152154  }
    153155
     
    157159   */
    158160  double c() const {
    159     ASSERT(0, "c() not implemented for "+name());
    160     return -1.;
     161    return RandomNumberDistribution_Parameters::noset_value;
    161162  }
    162163
     
    166167   */
    167168  double lambda() const {
    168     ASSERT(0, "lambda() not implemented for "+name());
    169     return -1.;
     169    return RandomNumberDistribution_Parameters::noset_value;
    170170  }
    171171
     
    193193  RandomNumberDistribution* clone() const {
    194194    RandomNumberDistribution* MyClone = NULL;
    195     MyClone = new RandomNumberDistribution_Encapsulation<distribution>();
     195    RandomNumberDistribution_Parameters *params = getParameterSet();
     196    MyClone = new RandomNumberDistribution_Encapsulation<distribution>(*params);
     197    delete params;
    196198    return MyClone;
     199  }
     200
     201  /** Clones and manipulates the current instance.
     202   *
     203   * Implementation of ManipulableClone pattern.
     204   *
     205   * @param _params set of parameters to instantiate manipulated clone with
     206   * @return interface reference to cloned&manipulated instance
     207   */
     208  ManipulableClone<RandomNumberDistribution, RandomNumberDistribution_Parameters>*
     209  manipulatedclone(const RandomNumberDistribution_Parameters&_params) const
     210  {
     211    RandomNumberDistribution_Encapsulation<distribution>* newproto =
     212    new RandomNumberDistribution_Encapsulation<distribution>(_params);
     213    return newproto;
    197214  }
    198215
     
    205222  {}
    206223
     224  /** Constructor that instantiates a specific random number generator and
     225   * distribution.
     226   *
     227   * @param _params set of parameters to instantiate manipulated clone with
     228   * @param _distribution_type instance of the desired distribution
     229   */
     230  RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params)
     231  {}
     232
    207233  /** Destructor of the class.
    208234   *
     
    216242// template member functions for the desired cases.
    217243
     244/* =========  manipulatedclone() ================ */
     245
     246template <>
     247RandomNumberDistribution_Encapsulation< boost::uniform_smallint<> >::
     248RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     249
     250template <>
     251RandomNumberDistribution_Encapsulation< boost::uniform_int<> >::
     252RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     253
     254template <>
     255RandomNumberDistribution_Encapsulation< boost::uniform_real<> >::
     256RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     257
     258template <>
     259RandomNumberDistribution_Encapsulation< boost::bernoulli_distribution<> >::
     260RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     261
     262template <>
     263RandomNumberDistribution_Encapsulation< boost::binomial_distribution<> >::
     264RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     265
     266template <>
     267RandomNumberDistribution_Encapsulation< boost::cauchy_distribution<> >::
     268RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     269
     270template <>
     271RandomNumberDistribution_Encapsulation< boost::gamma_distribution<> >::
     272RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     273
     274template <>
     275RandomNumberDistribution_Encapsulation< boost::poisson_distribution<> >::
     276RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     277
     278template <>
     279RandomNumberDistribution_Encapsulation< boost::geometric_distribution<> >::
     280RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     281
     282template <>
     283RandomNumberDistribution_Encapsulation< boost::triangle_distribution<> >::
     284RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     285
     286template <>
     287RandomNumberDistribution_Encapsulation< boost::exponential_distribution<> >::
     288RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     289
     290template <>
     291RandomNumberDistribution_Encapsulation< boost::normal_distribution<> >::
     292RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     293
     294template <>
     295RandomNumberDistribution_Encapsulation< boost::lognormal_distribution<> >::
     296RandomNumberDistribution_Encapsulation(const RandomNumberDistribution_Parameters&_params);
     297
    218298/* ===============  min() ======================= */
    219299
  • src/RandomNumbers/RandomNumberEngine.hpp

    r1ee3b8d r0275ad  
    1616class RandomNumberEngineFactoryTest;
    1717class RandomNumberGenerator;
     18class RandomNumberEngine_Parameters;
    1819
    1920/** Abstract base class for a random number engine.
     
    3738
    3839public:
     40  /** Getter for the whole set of possible parameters.
     41   *
     42   * @return filled instance of RandomNumberEngine_Parameters
     43   */
     44  virtual RandomNumberEngine_Parameters* getParameterSet() const=0;
     45
    3946  /** Set the generator's seed.
    4047   *
  • src/RandomNumbers/RandomNumberEngineFactory.cpp

    r1ee3b8d r0275ad  
    4040
    4141#include "RandomNumberEngine_Encapsulation.hpp"
     42#include "RandomNumberEngine_Parameters.hpp"
    4243
    4344#include "RandomNumberEngineFactory.hpp"
     
    4546// has to be included BEFORE PrototypeFactory_impl.hpp!
    4647#include "RandomNumberEngineFactory.def"
    47 #include "CodePatterns/PrototypeFactory_impl.hpp"
     48#include "CodePatterns/ManipulablePrototypeFactory_impl.hpp"
    4849
    4950RandomNumberEngineFactory::RandomNumberEngineFactory()
     
    5859
    5960CONSTRUCT_SINGLETON(RandomNumberEngineFactory)
    60 CONSTRUCT_PROTOTYPEFACTORY(RandomNumberEngine)
     61CONSTRUCT_MANIPULABLEPROTOTYPEFACTORY(RandomNumberEngine, RandomNumberEngine_Parameters)
    6162
    6263#include "RandomNumberEngineFactory.undef"
  • src/RandomNumbers/RandomNumberEngineFactory.def

    r1ee3b8d r0275ad  
    3939#define FactoryNAME RandomNumberEngineFactory
    4040#define Abstract_Interface_Class RandomNumberEngine
     41#define Abstract_Parameter_Class RandomNumberEngine_Parameters
    4142#define Abstract_Encapsulation_Class RandomNumberEngine_Encapsulation
    4243#define type_name_space boost::
  • src/RandomNumbers/RandomNumberEngineFactory.hpp

    r1ee3b8d r0275ad  
    2121#include "RandomNumberEngineFactory.undef"
    2222
    23 #include "CodePatterns/PrototypeFactory.hpp"
     23#include "CodePatterns/ManipulablePrototypeFactory.hpp"
    2424
    2525#include <map>
    2626
    2727class RandomNumberEngine;
     28class RandomNumberEngine_Parameters;
    2829class RandomNumberEngineFactoryUnitTest;
    2930class CommandSetRandomNumbersEngineAction;
     
    4041class RandomNumberEngineFactory :
    4142  public Singleton<RandomNumberEngineFactory>,
    42   public PrototypeFactory<RandomNumberEngine>
     43  public ManipulablePrototypeFactory<RandomNumberEngine,RandomNumberEngine_Parameters>
    4344{
    4445  friend class Singleton<RandomNumberEngineFactory>;
  • src/RandomNumbers/RandomNumberEngineFactory.undef

    r1ee3b8d r0275ad  
    77#undef FactoryNAME
    88#undef Abstract_Interface_Class
     9#undef Abstract_Parameter_Class
    910#undef Abstract_Encapsulation_Class
    1011#undef type_name_space
  • src/RandomNumbers/RandomNumberEngine_Encapsulation.hpp

    r1ee3b8d r0275ad  
    3131#include <boost/random/xor_combine.hpp>
    3232
    33 #include "CodePatterns/Clone.hpp"
     33#include "CodePatterns/ManipulableClone.hpp"
    3434#include "RandomNumberEngine.hpp"
    3535
    3636class RandomNumberEngineFactory;
     37
     38#include "RandomNumberEngine_Parameters.hpp"
    3739
    3840/** Template class that encapsulates the random number engines from
     
    4648class RandomNumberEngine_Encapsulation :
    4749  public RandomNumberEngine,
    48   public Clone<RandomNumberEngine>
     50  public ManipulableClone<RandomNumberEngine, RandomNumberEngine_Parameters>
    4951{
    5052    /**
     
    5557
    5658public:
     59  /** Getter for the whole set of possible parameters.
     60   *
     61   * @return filled instance of RandomNumberEngine_Parameters
     62   */
     63    RandomNumberEngine_Parameters* getParameterSet() const
     64  {
     65    RandomNumberEngine_Parameters *params = new RandomNumberEngine_Parameters();
     66    params->getParameters(this);
     67    return params;
     68  }
     69
    5770  /** Set the engine's seed.
    5871   *
     
    110123   */
    111124  RandomNumberEngine* clone() const {
    112     RandomNumberEngine* MyClone = NULL;
     125    RandomNumberEngine_Parameters *params = getParameterSet();
     126    RandomNumberEngine* MyClone = new RandomNumberEngine_Encapsulation<engine>(*params);
     127    //MyClone->seed(getseed());
     128    return MyClone;
     129  }
     130
     131  /** Clones and manipulates the current instance.
     132   *
     133   * Implementation of ManipulableClone pattern.
     134   *
     135   * @param _params set of parameters to instantiate manipulated clone with
     136   * @return interface reference to cloned&manipulated instance
     137   */
     138  ManipulableClone<RandomNumberEngine, RandomNumberEngine_Parameters>*
     139  manipulatedclone(const RandomNumberEngine_Parameters &_params) const {
     140    RandomNumberEngine_Encapsulation<engine>* MyClone = NULL;
    113141    MyClone = new RandomNumberEngine_Encapsulation<engine>();
    114     MyClone->seed(getseed());
     142    MyClone->value_seed = _params.seed;
     143    MyClone->seed(_params.seed);
    115144    return MyClone;
    116145  }
     
    125154  {}
    126155
     156  /** Constructor that instantiates a specific random number generator and
     157   * distribution.
     158   * @param _engine_type instance of the desired engine
     159   */
     160  RandomNumberEngine_Encapsulation(const RandomNumberEngine_Parameters &_params) :
     161    value_seed(_params.seed)
     162  {}
     163
    127164  /** Destructor of the class.
    128165   *
  • src/RandomNumbers/RandomNumberGeneratorFactory.def

    r1ee3b8d r0275ad  
    2727 */
    2828#define engine_seq \
    29 (minstd_rand0)\
     29(minstd_rand0)
     30/*
    3031(minstd_rand)\
    3132(rand48)\
     
    3637(mt11213b)\
    3738(mt19937)
     39*/
    3840
    3941#define engine_seq_a \
    40 (lagged_fibonacci607)\
     42(lagged_fibonacci607)
     43/*
    4144(lagged_fibonacci1279)\
    4245(lagged_fibonacci2281)\
     
    5558(ranlux64_3_01)\
    5659(ranlux64_4_01)
    57 
     60*/
    5861#endif /* RANDOMNUMBERGENERATORFACTORY_DEF_ */
  • src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.cpp

    r1ee3b8d r0275ad  
    7373  rndA_1 = NULL;
    7474  rndA_2 = NULL;
     75  rndA_3 = NULL;
    7576  RandomNumberDistributionFactory::getInstance();
    7677}
     
    8182  delete rndA_1;
    8283  delete rndA_2;
     84  delete rndA_3;
    8385  RandomNumberDistributionFactory::purgeInstance();
    8486}
     
    103105  // check one of the distributions in the table
    104106  rndA = RandomNumberDistributionFactory::getInstance().
    105       PrototypeTable[RandomNumberDistributionFactory::uniform_smallint]->clone();
     107      ManipulablePrototypeTable[RandomNumberDistributionFactory::uniform_smallint]->clone();
    106108  CPPUNIT_ASSERT_EQUAL(
    107109      std::string(typeid(boost::uniform_smallint<> ).name()),
     
    114116}
    115117
     118void RandomNumberDistributionFactoryTest::PrototypeManipulationTest()
     119{
     120  // make unmodified clone
     121  rndA_1 = RandomNumberDistributionFactory::getInstance().
     122      getProduct(RandomNumberDistributionFactory::uniform_smallint);
     123
     124  // do something with the prototype
     125  RandomNumberDistribution_Parameters *params =
     126      rndA_1->getParameterSet();
     127  CPPUNIT_ASSERT( 20. != rndA_1->max() );
     128  params->max = 20.;
     129  RandomNumberDistributionFactory::getInstance().
     130      manipulatePrototype(RandomNumberDistributionFactory::uniform_smallint, *params);
     131  // ... and check max
     132  rndA_2 = RandomNumberDistributionFactory::getInstance().
     133      getProduct(RandomNumberDistributionFactory::uniform_smallint);
     134  CPPUNIT_ASSERT_EQUAL( 20., rndA_2->max());
     135  CPPUNIT_ASSERT( rndA_1->max() != rndA_2->max());
     136  // ... and check min (remains the same)
     137  CPPUNIT_ASSERT( rndA_1->min() == rndA_2->min());
     138
     139  // do something with the prototype again
     140  params->max = 25.;
     141  RandomNumberDistributionFactory::getInstance().
     142      manipulatePrototype(std::string("uniform_smallint"), *params);
     143  // ... and check
     144  rndA_3 = RandomNumberDistributionFactory::getInstance().
     145      getProduct(RandomNumberDistributionFactory::uniform_smallint);
     146  CPPUNIT_ASSERT_EQUAL( 25., rndA_3->max());
     147  CPPUNIT_ASSERT( rndA_1->max() != rndA_3->max());
     148  CPPUNIT_ASSERT( rndA_2->max() != rndA_3->max());
     149
     150  delete params;
     151}
  • src/RandomNumbers/unittests/RandomNumberDistributionFactoryUnitTest.hpp

    r1ee3b8d r0275ad  
    2323  CPPUNIT_TEST_SUITE( RandomNumberDistributionFactoryTest );
    2424  CPPUNIT_TEST ( DistributionTest );
     25  CPPUNIT_TEST ( PrototypeManipulationTest );
    2526  CPPUNIT_TEST_SUITE_END();
    2627
     
    3031
    3132  void DistributionTest();
     33  void PrototypeManipulationTest();
    3234
    3335private:
     
    3537  RandomNumberDistribution * rndA_1;
    3638  RandomNumberDistribution * rndA_2;
     39  RandomNumberDistribution * rndA_3;
    3740};
    3841
  • src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.cpp

    r1ee3b8d r0275ad  
    7777  rndA_1 = NULL;
    7878  rndA_2 = NULL;
     79  rndA_3 = NULL;
    7980  RandomNumberEngineFactory::getInstance();
    8081}
     
    8586  delete rndA_1;
    8687  delete rndA_2;
     88  delete rndA_3;
    8789  RandomNumberEngineFactory::purgeInstance();
    8890}
     
    107109  // check one of the engines in the table
    108110  rndA = RandomNumberEngineFactory::getInstance().
    109       PrototypeTable[RandomNumberEngineFactory::minstd_rand0]->clone();
     111      ManipulablePrototypeTable[RandomNumberEngineFactory::minstd_rand0]->clone();
    110112  CPPUNIT_ASSERT_EQUAL(
    111113      std::string(typeid(boost::minstd_rand0).name()),
     
    117119}
    118120
     121void RandomNumberEngineFactoryTest::PrototypeManipulationTest()
     122{
     123  // make unmodified clone
     124  rndA_1 = RandomNumberEngineFactory::getInstance().
     125      getProduct(RandomNumberEngineFactory::minstd_rand0);
     126
     127  // obtain manipulator
     128  RandomNumberEngine &prototype = RandomNumberEngineFactory::getInstance().
     129      getPrototype(RandomNumberEngineFactory::minstd_rand0);
     130
     131  // change the prototype directly
     132  CPPUNIT_ASSERT ( 0 != prototype.getseed() );
     133  prototype.seed(0);
     134
     135  // check that prototype has indeed been manipulated
     136  rndA_2 = RandomNumberEngineFactory::getInstance().
     137      getProduct(RandomNumberEngineFactory::minstd_rand0);
     138  CPPUNIT_ASSERT_EQUAL( (unsigned int)0, rndA_2->getseed() );
     139  CPPUNIT_ASSERT( rndA_2->getseed() != rndA_1->getseed());
     140
     141  // manipulate prototype
     142  RandomNumberEngine_Parameters *params = rndA_1->getParameterSet();
     143  CPPUNIT_ASSERT ( rndA_1->getseed() != (unsigned int)3 );
     144  params->seed = 3;
     145  RandomNumberEngineFactory::getInstance().
     146        manipulatePrototype(RandomNumberEngineFactory::minstd_rand0, *params);
     147
     148  //
     149  rndA_3 = RandomNumberEngineFactory::getInstance().
     150      getProduct(RandomNumberEngineFactory::minstd_rand0);
     151  CPPUNIT_ASSERT_EQUAL( (unsigned int)3, rndA_3->getseed() );
     152  CPPUNIT_ASSERT( rndA_3->getseed() != rndA_1->getseed());
     153
     154  delete params;
     155}
     156
  • src/RandomNumbers/unittests/RandomNumberEngineFactoryUnitTest.hpp

    r1ee3b8d r0275ad  
    2323  CPPUNIT_TEST_SUITE( RandomNumberEngineFactoryTest );
    2424  CPPUNIT_TEST ( EngineTest );
     25  CPPUNIT_TEST ( PrototypeManipulationTest );
    2526  CPPUNIT_TEST_SUITE_END();
    2627
     
    3031
    3132  void EngineTest();
     33  void PrototypeManipulationTest();
    3234
    3335private:
     
    3537  RandomNumberEngine *rndA_1;
    3638  RandomNumberEngine *rndA_2;
     39  RandomNumberEngine *rndA_3;
    3740};
    3841
Note: See TracChangeset for help on using the changeset viewer.