QwAnalysis
MQwMockable.h
Go to the documentation of this file.
1 /**********************************************************\
2 * File: MQwMockable.h *
3 * *
4 * Author: P. King *
5 * Date: Tue Mar 29 13:08:12 EDT 2011 *
6 \**********************************************************/
7 
8 #ifndef __MQWMOCKABLE__
9 #define __MQWMOCKABLE__
10 
11 // Boost math library for random number generation
12 #include "boost/random.hpp"
13 
14 //jpan: Mersenne Twistor: A 623-diminsionally equidistributed
15 //uniform pseudorandom number generator
16 #include "TRandom3.h"
17 
18 
19 class MQwMockable {
20 /****************************************************************//**
21  * Class: MQwMockable
22  * Mix-in class to enable mock-data generation for a
23  * data element.
24  * Only the data element classes which actually contain
25  * raw data (such as QwVQWK_Channel, QwScaler_Channel, etc.)
26  * should inherit from this class.
27  ******************************************************************/
28 public:
32  {
33  // Mock drifts
34  fMockDriftAmplitude.clear();
35  fMockDriftFrequency.clear();
36  fMockDriftPhase.clear();
37  }
38  virtual ~MQwMockable() {
39  fMockDriftAmplitude.clear();
40  fMockDriftFrequency.clear();
41  fMockDriftPhase.clear();
42  }
43 
44 
45  /// \name Parity mock data generation
46  // @{
47  /// Set a single set of harmonic drift parameters
48  void SetRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency);
49  /// Add drift parameters to the internal set
50  void AddRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency);
51  /// Set the normal random event parameters
52  void SetRandomEventParameters(Double_t mean, Double_t sigma);
53  /// Set the helicity asymmetry
54  void SetRandomEventAsymmetry(Double_t asymmetry);
55 
56  /// Return a random value generated either from the internal or
57  /// external Random Variable.
58  Double_t GetRandomValue();
59 
60  /// Internally generate random event data
61  virtual void RandomizeEventData(int helicity = 0, double time = 0.0) = 0;
62 
63  /// Encode the event data into a CODA buffer
64  virtual void EncodeEventData(std::vector<UInt_t> &buffer) = 0;
65 
66  /// Set the flag to use an externally provided random variable
68  /// Set the externally provided random variable
69  void SetExternalRandomVariable(Double_t random_variable) {
71  fExternalRandomVariable = random_variable;
72  };
73  // @}
74 
75  protected:
76  /// \name Parity mock data generation
77  // @{
78  /// Internal randomness generator
79  static boost::mt19937 fRandomnessGenerator;
80  /// Internal normal probability distribution
81  static boost::normal_distribution<double> fNormalDistribution;
82  /// Internal normal random variable
83  static boost::variate_generator
84  < boost::mt19937, boost::normal_distribution<double> > fNormalRandomVariable;
85  /// Flag to use an externally provided normal random variable
87  /// Externally provided normal random variable
89 
90  // Parameters of the mock data
91  Double_t fMockAsymmetry; ///< Helicity asymmetry
92  Double_t fMockGaussianMean; ///< Mean of normal distribution
93  Double_t fMockGaussianSigma; ///< Sigma of normal distribution
94  std::vector<Double_t> fMockDriftAmplitude; ///< Harmonic drift amplitude
95  std::vector<Double_t> fMockDriftFrequency; ///< Harmonic drift frequency
96  std::vector<Double_t> fMockDriftPhase; ///< Harmonic drift phase
97  // @}
98 };
99 
100 #endif
void SetRandomEventParameters(Double_t mean, Double_t sigma)
Set the normal random event parameters.
Definition: MQwMockable.cc:41
std::vector< Double_t > fMockDriftPhase
Harmonic drift phase.
Definition: MQwMockable.h:96
void AddRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
Add drift parameters to the internal set.
Definition: MQwMockable.cc:32
std::vector< Double_t > fMockDriftFrequency
Harmonic drift frequency.
Definition: MQwMockable.h:95
Double_t fMockGaussianSigma
Sigma of normal distribution.
Definition: MQwMockable.h:93
static boost::mt19937 fRandomnessGenerator
Internal randomness generator.
Definition: MQwMockable.h:79
static boost::normal_distribution< double > fNormalDistribution
Internal normal probability distribution.
Definition: MQwMockable.h:81
void SetRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
Set a single set of harmonic drift parameters.
Definition: MQwMockable.cc:19
bool fUseExternalRandomVariable
Flag to use an externally provided normal random variable.
Definition: MQwMockable.h:86
double fExternalRandomVariable
Externally provided normal random variable.
Definition: MQwMockable.h:88
Double_t GetRandomValue()
Definition: MQwMockable.cc:54
Double_t fMockGaussianMean
Mean of normal distribution.
Definition: MQwMockable.h:92
std::vector< Double_t > fMockDriftAmplitude
Harmonic drift amplitude.
Definition: MQwMockable.h:94
Double_t fMockAsymmetry
Helicity asymmetry.
Definition: MQwMockable.h:91
static boost::variate_generator< boost::mt19937, boost::normal_distribution< double > > fNormalRandomVariable
Internal normal random variable.
Definition: MQwMockable.h:84
virtual void RandomizeEventData(int helicity=0, double time=0.0)=0
Internally generate random event data.
void SetExternalRandomVariable(Double_t random_variable)
Set the externally provided random variable.
Definition: MQwMockable.h:69
void UseExternalRandomVariable()
Set the flag to use an externally provided random variable.
Definition: MQwMockable.h:67
void SetRandomEventAsymmetry(Double_t asymmetry)
Set the helicity asymmetry.
Definition: MQwMockable.cc:48
virtual void EncodeEventData(std::vector< UInt_t > &buffer)=0
Encode the event data into a CODA buffer.
virtual ~MQwMockable()
Definition: MQwMockable.h:38