Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2024-06-26 07:05:37

0001 /**
0002  \file
0003  Implementation of class Smear::Distributor.
0004  
0005  \author    Michael Savastio
0006  \date      2011-08-19
0007  \copyright 2011 Brookhaven National Lab
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   }  // if
0033   if (upper > 0.) {
0034     mPlus = upper;
0035   }  // if
0036 }
0037 
0038 Distributor::~Distributor() {
0039   if (mDistribution) {
0040     delete mDistribution;
0041     mDistribution = NULL;
0042   }  // if
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     }  // if
0056   }  // if
0057   return random;
0058 }
0059 
0060 }  // namespace Smear