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...
15std::normal_distribution<double> MQwMockable::fNormalDistribution;
17
18
20 Bool_t ldebug=kFALSE;
21 Double_t asym=0.0, mean=0.0, sigma=0.0;
22 Double_t amplitude=0.0, phase=0.0, frequency=0.0;
23
24 //Check to see if this line contains "drift"
25 if (paramfile.GetLine().find("drift")!=std::string::npos){
26 // "drift" appears somewhere in the line. Assume it is the next token and move on...
27 paramfile.GetNextToken(); //Throw away this token. Now the next three should be the drift parameters.
28 //read 3 parameters
29 amplitude = paramfile.GetTypedNextToken<Double_t>();
30 phase = paramfile.GetTypedNextToken<Double_t>();
31 frequency = paramfile.GetTypedNextToken<Double_t>(); // The frequency we read in should be in Hz.
32 this->AddRandomEventDriftParameters(amplitude, phase, frequency*Qw::Hz);
33 // std::cout << "In MQwMockable::LoadMockDataParameters: amp = " << amplitude << "\t phase = " << phase << "\t freq = " << frequency << std::endl;
34 }
35 else {
36 asym = paramfile.GetTypedNextToken<Double_t>();
37 mean = paramfile.GetTypedNextToken<Double_t>();
38 sigma = paramfile.GetTypedNextToken<Double_t>();
39 if (ldebug==1) {
40 std::cout << "#################### \n";
41 std::cout << "asym, mean, sigma \n" << std::endl;
42 std::cout << asym << " / "
43 << mean << " / "
44 << sigma << " / "
45 << std::endl;
46 }
47 this->SetRandomEventParameters(mean, sigma);
48 this->SetRandomEventAsymmetry(asym);
49 }
50}
51
52
53void MQwMockable::SetRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
54{
55 // Clear existing values
56 fMockDriftAmplitude.clear();
57 fMockDriftFrequency.clear();
58 fMockDriftPhase.clear();
59 // Add new values
60 fMockDriftAmplitude.push_back(amplitude);
61 fMockDriftFrequency.push_back(frequency);
62 fMockDriftPhase.push_back(phase);
63 return;
64}
65
66void MQwMockable::AddRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
67{
68 // Add new values
69 fMockDriftAmplitude.push_back(amplitude);
70 fMockDriftFrequency.push_back(frequency);
71 fMockDriftPhase.push_back(phase);
72 return;
73}
74
75void MQwMockable::SetRandomEventParameters(Double_t mean, Double_t sigma)
76{
77 fMockGaussianMean = mean;
78 fMockGaussianSigma = sigma;
79 return;
80}
81
83{
84 fMockAsymmetry = asymmetry;
85 return;
86}
87
89 Double_t random_variable;
91 // external normal random variable
92 random_variable = fExternalRandomVariable;
93 else
94 // internal normal random variable
95 random_variable = fNormalRandomVariable();
96 return random_variable;
97}
Parameter file parsing and management.
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.
static std::function< double()> fNormalRandomVariable
Internal normal random variable.
Definition MQwMockable.h:16
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.
static std::normal_distribution< double > fNormalDistribution
Internal normal probability distribution.
static std::mt19937 fRandomnessGenerator
Internal randomness generator.
void SetRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
Set a single set of harmonic drift parameters.
Double_t fMockGaussianMean
Mean of normal distribution.
std::vector< Double_t > fMockDriftPhase
Harmonic drift phase.
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()
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.