File indexing completed on 2024-06-26 07:05:37
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "eicsmear/smear/Distributor.h"
0011
0012 #include <TF1.h>
0013 #include <TRandom.h>
0014 #include <TUUID.h>
0015
0016 namespace Smear {
0017
0018 Distributor::Distributor()
0019 : mPlus(0.)
0020 , mMinus(0.)
0021 , mDistribution(NULL) {
0022 }
0023
0024 Distributor::Distributor(const TString& formula, double lower, double upper,
0025 double minimum, double maximum)
0026 : mPlus(0.)
0027 , mMinus(0.)
0028 , mDistribution(new TF1(TUUID().AsString(), formula, minimum, maximum)) {
0029 mDistribution->SetParameters(0., 1.);
0030 if (lower > 0.) {
0031 mMinus = lower;
0032 }
0033 if (upper > 0.) {
0034 mPlus = upper;
0035 }
0036 }
0037
0038 Distributor::~Distributor() {
0039 if (mDistribution) {
0040 delete mDistribution;
0041 mDistribution = NULL;
0042 }
0043 }
0044
0045 double Distributor::Generate(double mean, double sigma) {
0046 double random(0.);
0047 if (!mDistribution) {
0048 random = gRandom->Gaus(mean, sigma);
0049 } else {
0050 mDistribution->SetParameters(mean, sigma);
0051 if (mMinus > 0. || mPlus > 0.) {
0052 random = mDistribution->GetRandom(mean - mMinus, mean + mPlus);
0053 } else {
0054 random = mDistribution->GetRandom();
0055 }
0056 }
0057 return random;
0058 }
0059
0060 }