JAPAn
Just Another Parity Analyzer
Loading...
Searching...
No Matches
MQwMockable Class Referenceabstract

Mix-in class enabling mock data generation for hardware channels. More...

#include <MQwMockable.h>

+ Inheritance diagram for MQwMockable:
+ Collaboration diagram for MQwMockable:

Public Member Functions

 MQwMockable ()
 
virtual ~MQwMockable ()
 

Parity mock data generation

static boost::mt19937 fRandomnessGenerator
 Internal randomness generator.
 
static boost::normal_distribution< double > fNormalDistribution
 Internal normal probability distribution.
 
static boost::variate_generator< boost::mt19937, boost::normal_distribution< double > > fNormalRandomVariable
 Internal normal random variable.
 
bool fUseExternalRandomVariable
 Flag to use an externally provided normal random variable.
 
double fExternalRandomVariable
 Externally provided normal random variable.
 
bool fCalcMockDataAsDiff
 
Double_t fMockAsymmetry
 Helicity asymmetry.
 
Double_t fMockGaussianMean
 Mean of normal distribution.
 
Double_t fMockGaussianSigma
 Sigma of normal distribution.
 
std::vector< Double_t > fMockDriftAmplitude
 Harmonic drift amplitude.
 
std::vector< Double_t > fMockDriftFrequency
 Harmonic drift frequency.
 
std::vector< Double_t > fMockDriftPhase
 Harmonic drift phase.
 
virtual void LoadMockDataParameters (QwParameterFile &paramfile)
 Load the mock data parameters from the current line in the param file.
 
void SetRandomEventDriftParameters (Double_t amplitude, Double_t phase, Double_t frequency)
 Set a single set of harmonic drift parameters.
 
void AddRandomEventDriftParameters (Double_t amplitude, Double_t phase, Double_t frequency)
 Add drift parameters to the internal set.
 
void SetRandomEventParameters (Double_t mean, Double_t sigma)
 Set the normal random event parameters.
 
void SetRandomEventAsymmetry (Double_t asymmetry)
 Set the helicity asymmetry.
 
Double_t GetRandomValue ()
 
virtual void RandomizeEventData (int helicity=0, double time=0.0)=0
 Internally generate random event data.
 
virtual void SmearByResolution (double resolution)=0
 
virtual void SetRawEventData ()=0
 
virtual void EncodeEventData (std::vector< UInt_t > &buffer)=0
 Encode the event data into a CODA buffer.
 
void UseExternalRandomVariable ()
 Set the flag to use an externally provided random variable.
 
void SetExternalRandomVariable (Double_t random_variable)
 Set the externally provided random variable.
 
void SetMockDataAsDiff ()
 

Detailed Description

Mix-in class enabling mock data generation for hardware channels.

Provides infrastructure for generating simulated data with configurable asymmetries, noise characteristics, and harmonic drifts. Supports both internal random number generation and external random variables. Used by hardware channel classes to enable Monte Carlo studies and testing without real data acquisition hardware.

Definition at line 30 of file MQwMockable.h.

Constructor & Destructor Documentation

◆ MQwMockable()

MQwMockable::MQwMockable ( )
inline

Class: MQwMockable Mix-in class to enable mock-data generation for a data element. Only the data element classes which actually contain raw data (such as QwVQWK_Channel, QwScaler_Channel, etc.) should inherit from this class.

Definition at line 40 of file MQwMockable.h.

44 {
45 // Mock drifts
46 fMockDriftAmplitude.clear();
47 fMockDriftFrequency.clear();
48 fMockDriftPhase.clear();
49 }
std::vector< Double_t > fMockDriftAmplitude
Harmonic drift amplitude.
std::vector< Double_t > fMockDriftFrequency
Harmonic drift frequency.
Double_t fMockAsymmetry
Helicity asymmetry.
bool fUseExternalRandomVariable
Flag to use an externally provided normal random variable.
Double_t fMockGaussianSigma
Sigma of normal distribution.
Double_t fMockGaussianMean
Mean of normal distribution.
std::vector< Double_t > fMockDriftPhase
Harmonic drift phase.
bool fCalcMockDataAsDiff

References fCalcMockDataAsDiff, fMockAsymmetry, fMockDriftAmplitude, fMockDriftFrequency, fMockDriftPhase, fMockGaussianMean, fMockGaussianSigma, and fUseExternalRandomVariable.

Referenced by QwADC18_Channel::QwADC18_Channel(), QwADC18_Channel::QwADC18_Channel(), QwADC18_Channel::QwADC18_Channel(), QwADC18_Channel::QwADC18_Channel(), QwMollerADC_Channel::QwMollerADC_Channel(), QwMollerADC_Channel::QwMollerADC_Channel(), QwMollerADC_Channel::QwMollerADC_Channel(), QwMollerADC_Channel::QwMollerADC_Channel(), QwVQWK_Channel::QwVQWK_Channel(), QwVQWK_Channel::QwVQWK_Channel(), QwVQWK_Channel::QwVQWK_Channel(), QwVQWK_Channel::QwVQWK_Channel(), VQwScaler_Channel::VQwScaler_Channel(), VQwScaler_Channel::VQwScaler_Channel(), VQwScaler_Channel::VQwScaler_Channel(), and VQwScaler_Channel::VQwScaler_Channel().

+ Here is the caller graph for this function:

◆ ~MQwMockable()

virtual MQwMockable::~MQwMockable ( )
inlinevirtual

Definition at line 50 of file MQwMockable.h.

50 {
51 fMockDriftAmplitude.clear();
52 fMockDriftFrequency.clear();
53 fMockDriftPhase.clear();
54 }

References fMockDriftAmplitude, fMockDriftFrequency, and fMockDriftPhase.

Member Function Documentation

◆ AddRandomEventDriftParameters()

void MQwMockable::AddRandomEventDriftParameters ( Double_t amplitude,
Double_t phase,
Double_t frequency )

Add drift parameters to the internal set.

Definition at line 71 of file MQwMockable.cc.

72{
73 // Add new values
74 fMockDriftAmplitude.push_back(amplitude);
75 fMockDriftFrequency.push_back(frequency);
76 fMockDriftPhase.push_back(phase);
77 return;
78}

References fMockDriftAmplitude, fMockDriftFrequency, and fMockDriftPhase.

Referenced by LoadMockDataParameters().

+ Here is the caller graph for this function:

◆ EncodeEventData()

virtual void MQwMockable::EncodeEventData ( std::vector< UInt_t > & buffer)
pure virtual

◆ GetRandomValue()

Double_t MQwMockable::GetRandomValue ( )

Return a random value generated either from the internal or external Random Variable.

Definition at line 93 of file MQwMockable.cc.

93 {
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}
double fExternalRandomVariable
Externally provided normal random variable.
static boost::variate_generator< boost::mt19937, boost::normal_distribution< double > > fNormalRandomVariable
Internal normal random variable.

References fExternalRandomVariable, fNormalRandomVariable, and fUseExternalRandomVariable.

Referenced by QwADC18_Channel::RandomizeEventData(), QwMollerADC_Channel::RandomizeEventData(), QwVQWK_Channel::RandomizeEventData(), VQwScaler_Channel::RandomizeEventData(), QwADC18_Channel::SmearByResolution(), QwMollerADC_Channel::SmearByResolution(), QwVQWK_Channel::SmearByResolution(), and VQwScaler_Channel::SmearByResolution().

+ Here is the caller graph for this function:

◆ LoadMockDataParameters()

void MQwMockable::LoadMockDataParameters ( QwParameterFile & paramfile)
virtual

Load the mock data parameters from the current line in the param file.

Reimplemented in QwADC18_Channel, QwMollerADC_Channel, QwVQWK_Channel, and VQwScaler_Channel.

Definition at line 24 of file MQwMockable.cc.

24 {
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}
static const double Hz
Frequency units: base unit is kHz.
Definition QwUnits.h:88
void AddRandomEventDriftParameters(Double_t amplitude, Double_t phase, Double_t frequency)
Add drift parameters to the internal set.
void SetRandomEventAsymmetry(Double_t asymmetry)
Set the helicity asymmetry.
void SetRandomEventParameters(Double_t mean, Double_t sigma)
Set the normal random event parameters.
T GetTypedNextToken()
Get next token into specific type.
std::string GetLine()
std::string GetNextToken(const std::string &separatorchars)
Get next token as a string.

References AddRandomEventDriftParameters(), QwParameterFile::GetLine(), QwParameterFile::GetNextToken(), QwParameterFile::GetTypedNextToken(), Qw::Hz, SetRandomEventAsymmetry(), and SetRandomEventParameters().

Referenced by VQwScaler_Channel::PrintErrorCounterTail().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ RandomizeEventData()

virtual void MQwMockable::RandomizeEventData ( int helicity = 0,
double time = 0.0 )
pure virtual

Internally generate random event data.

Implemented in QwADC18_Channel, QwMollerADC_Channel, QwVQWK_Channel, and VQwScaler_Channel.

◆ SetExternalRandomVariable()

void MQwMockable::SetExternalRandomVariable ( Double_t random_variable)
inline

Set the externally provided random variable.

Definition at line 90 of file MQwMockable.h.

90 {
92 fExternalRandomVariable = random_variable;
93 };

References fExternalRandomVariable, and fUseExternalRandomVariable.

◆ SetMockDataAsDiff()

void MQwMockable::SetMockDataAsDiff ( )
inline

Definition at line 96 of file MQwMockable.h.

References fCalcMockDataAsDiff.

◆ SetRandomEventAsymmetry()

void MQwMockable::SetRandomEventAsymmetry ( Double_t asymmetry)

Set the helicity asymmetry.

Definition at line 87 of file MQwMockable.cc.

88{
89 fMockAsymmetry = asymmetry;
90 return;
91}

References fMockAsymmetry.

Referenced by LoadMockDataParameters().

+ Here is the caller graph for this function:

◆ SetRandomEventDriftParameters()

void MQwMockable::SetRandomEventDriftParameters ( Double_t amplitude,
Double_t phase,
Double_t frequency )

Set a single set of harmonic drift parameters.

Definition at line 58 of file MQwMockable.cc.

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}

◆ SetRandomEventParameters()

void MQwMockable::SetRandomEventParameters ( Double_t mean,
Double_t sigma )

Set the normal random event parameters.

Definition at line 80 of file MQwMockable.cc.

81{
82 fMockGaussianMean = mean;
83 fMockGaussianSigma = sigma;
84 return;
85}

References fMockGaussianMean, and fMockGaussianSigma.

Referenced by VQwScaler_Channel::InitializeChannel(), and LoadMockDataParameters().

+ Here is the caller graph for this function:

◆ SetRawEventData()

virtual void MQwMockable::SetRawEventData ( )
pure virtual

◆ SmearByResolution()

virtual void MQwMockable::SmearByResolution ( double resolution)
pure virtual

◆ UseExternalRandomVariable()

void MQwMockable::UseExternalRandomVariable ( )
inline

Set the flag to use an externally provided random variable.

Definition at line 88 of file MQwMockable.h.

References fUseExternalRandomVariable.

Field Documentation

◆ fCalcMockDataAsDiff

bool MQwMockable::fCalcMockDataAsDiff
protected

◆ fExternalRandomVariable

double MQwMockable::fExternalRandomVariable
protected

Externally provided normal random variable.

Definition at line 112 of file MQwMockable.h.

Referenced by GetRandomValue(), and SetExternalRandomVariable().

◆ fMockAsymmetry

◆ fMockDriftAmplitude

◆ fMockDriftFrequency

◆ fMockDriftPhase

◆ fMockGaussianMean

◆ fMockGaussianSigma

◆ fNormalDistribution

boost::normal_distribution< double > MQwMockable::fNormalDistribution
staticprotected

Internal normal probability distribution.

Definition at line 105 of file MQwMockable.h.

◆ fNormalRandomVariable

boost::variate_generator< boost::mt19937, boost::normal_distribution< double > > MQwMockable::fNormalRandomVariable
staticprotected

Internal normal random variable.

Definition at line 108 of file MQwMockable.h.

Referenced by GetRandomValue().

◆ fRandomnessGenerator

boost::mt19937 MQwMockable::fRandomnessGenerator
staticprotected

Internal randomness generator.

Definition at line 103 of file MQwMockable.h.

◆ fUseExternalRandomVariable

bool MQwMockable::fUseExternalRandomVariable
protected

The documentation for this class was generated from the following files: