JAPAn
Just Another Parity Analyzer
Loading...
Searching...
No Matches
MQwMockable.cc
Go to the documentation of this file.
1/*!
2 * \file MQwMockable.cc
3 * \brief Mix-in class implementation for mock data generation
4 */
5
6#include "MQwMockable.h"
7#include "QwParameterFile.h"
8
9// Randomness generator: Mersenne twister with period 2^19937 - 1
10//
11// This is defined as static to avoid getting stuck with 100% correlated
12// ADC channels when each channel goes through the same list of pseudo-
13// random numbers...
15boost::normal_distribution<double> MQwMockable::fNormalDistribution;
16// The boost::variate_generator has operator() overloaded to get a new random
17// value according to the distribution in the second template argument, based
18// on the uniform random value generated by the first template argument.
19// For example: fNormalRandomVariable() will return a random normal variable.
20boost::variate_generator < boost::mt19937, boost::normal_distribution<double> >
22
23
25 Bool_t ldebug=kFALSE;
26 Double_t asym=0.0, mean=0.0, sigma=0.0;
27 Double_t amplitude=0.0, phase=0.0, frequency=0.0;
28
29 //Check to see if this line contains "drift"
30 if (paramfile.GetLine().find("drift")!=std::string::npos){
31 // "drift" appears somewhere in the line. Assume it is the next token and move on...
32 paramfile.GetNextToken(); //Throw away this token. Now the next three should be the drift parameters.
33 //read 3 parameters
34 amplitude = paramfile.GetTypedNextToken<Double_t>();
35 phase = paramfile.GetTypedNextToken<Double_t>();
36 frequency = paramfile.GetTypedNextToken<Double_t>(); // The frequency we read in should be in Hz.
37 this->AddRandomEventDriftParameters(amplitude, phase, frequency*Qw::Hz);
38 // std::cout << "In MQwMockable::LoadMockDataParameters: amp = " << amplitude << "\t phase = " << phase << "\t freq = " << frequency << std::endl;
39 }
40 else {
41 asym = paramfile.GetTypedNextToken<Double_t>();
42 mean = paramfile.GetTypedNextToken<Double_t>();
43 sigma = paramfile.GetTypedNextToken<Double_t>();
44 if (ldebug==1) {
45 std::cout << "#################### \n";
46 std::cout << "asym, mean, sigma \n" << std::endl;
47 std::cout << asym << " / "
48 << mean << " / "
49 << sigma << " / "
50 << std::endl;
51 }
52 this->SetRandomEventParameters(mean, sigma);
53 this->SetRandomEventAsymmetry(asym);
54 }
55}
56
57
58void MQwMockable::SetRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
59{
60 // Clear existing values
61 fMockDriftAmplitude.clear();
62 fMockDriftFrequency.clear();
63 fMockDriftPhase.clear();
64 // Add new values
65 fMockDriftAmplitude.push_back(amplitude);
66 fMockDriftFrequency.push_back(frequency);
67 fMockDriftPhase.push_back(phase);
68 return;
69}
70
71void MQwMockable::AddRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
72{
73 // Add new values
74 fMockDriftAmplitude.push_back(amplitude);
75 fMockDriftFrequency.push_back(frequency);
76 fMockDriftPhase.push_back(phase);
77 return;
78}
79
80void MQwMockable::SetRandomEventParameters(Double_t mean, Double_t sigma)
81{
82 fMockGaussianMean = mean;
83 fMockGaussianSigma = sigma;
84 return;
85}
86
88{
89 fMockAsymmetry = asymmetry;
90 return;
91}
92
94 Double_t random_variable;
96 // external normal random variable
97 random_variable = fExternalRandomVariable;
98 else
99 // internal normal random variable
100 random_variable = fNormalRandomVariable();
101 return random_variable;
102}
103
Parameter file parsing and management.
boost::mt19937 QwCombinedBCM< T >::fRandomnessGenerator
static const double Hz
Frequency units: base unit is kHz.
Definition QwUnits.h:88
std::vector< Double_t > fMockDriftAmplitude
Harmonic drift amplitude.
double fExternalRandomVariable
Externally provided normal random variable.
std::vector< Double_t > fMockDriftFrequency
Harmonic drift frequency.
Double_t fMockAsymmetry
Helicity asymmetry.
bool fUseExternalRandomVariable
Flag to use an externally provided normal random variable.
void AddRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
Add drift parameters to the internal set.
Double_t fMockGaussianSigma
Sigma of normal distribution.
void SetRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
Set a single set of harmonic drift parameters.
static boost::variate_generator< boost::mt19937, boost::normal_distribution< double > > fNormalRandomVariable
Internal normal random variable.
Double_t fMockGaussianMean
Mean of normal distribution.
std::vector< Double_t > fMockDriftPhase
Harmonic drift phase.
static boost::normal_distribution< double > fNormalDistribution
Internal normal probability distribution.
void SetRandomEventAsymmetry(Double_t asymmetry)
Set the helicity asymmetry.
void SetRandomEventParameters(Double_t mean, Double_t sigma)
Set the normal random event parameters.
virtual void LoadMockDataParameters(QwParameterFile &paramfile)
Load the mock data parameters from the current line in the param file.
Double_t GetRandomValue()
static boost::mt19937 fRandomnessGenerator
Internal randomness generator.
Configuration file parser with flexible tokenization and search capabilities.
T GetTypedNextToken()
Get next token into specific type.
std::string GetLine()
std::string GetNextToken(const std::string &separatorchars)
Get next token as a string.