4 #include <utl/AugerUnits.h>
6 #include <utl/ErrorLogger.h>
7 #include <fwk/RandomEngineRegistry.h>
8 #include <CLHEP/Random/Randomize.h>
9 #include <boost/math/special_functions/gamma.hpp>
14 using namespace RPCSimulatorLX;
15 using CLHEP::RandGeneral;
17 RPCChargeGenerator::RPCChargeGenerator(
double k0,
double theta0,
double referenceAngle) :
20 fReferenceAngle(referenceAngle),
23 fNumberOfChargeBins(100),
24 fNumberOfChargePDF(100),
28 fIsInitialized(false),
47 double secTheta = 1.0/
abs(cos(angle));
54 unsigned int iChargePDF =
61 minCharge + (maxCharge - minCharge)*(
fListChargePDF[iChargePDF])->fire();
66 ERROR(
"Error in RPCChargeGenerator::GetCharge: Parameters not initialized !!!");
75 ERROR(
"RPCChargeGenerator already initialized !");
86 double k =
fK0 * secTheta/secTheta0;
90 &RandomEngineRegistry::GetInstance().Get(RandomEngineRegistry::eDetector);
94 double minCharge = 0.0;
100 vector<double> chargeProbability;
104 minCharge + jCharge*(maxCharge-minCharge)/
double(fNumberOfChargeBins);
112 const unsigned int chargeProbN = chargeProbability.size();
114 RandGeneral * chargeDist =
unsigned int fNumberOfChargeBins
double GammaDistribution(double x, double k, double theta)
RandomEngineType & GetEngine()
unsigned int fNumberOfChargePDF
double GetCharge(double angle)
std::vector< double > fListMinCharge
double abs(const SVector< n, T > &v)
virtual ~RPCChargeGenerator()
std::vector< double > fListMaxCharge
utl::RandomEngine * fRandomEngine
double InverseCumulativeGammaDistribution(double y, double k, double theta)
std::vector< CLHEP::RandGeneral * > fListChargePDF
#define ERROR(message)
Macro for logging error messages.