00001 #include "FastShowerUtils/Normalisers/EmHcalLeakageEc.h"
00002
00003 #include "FastShowerUtils/ParticleParameters.h"
00004
00005 #include "CLHEP/Random/RandFlat.h"
00006
00007 #include <algorithm>
00008 #include <cmath>
00009
00010 namespace FastShower{
00011
00012 std::pair<double, double>
00013 EmHcalLeakageEc::value(const ParticleParameters& pp) const{
00014
00015 double energy = pp.energy();
00016
00017 double p1 = 0.1582*std::exp(0.009531*energy) - 0.1939;
00018 double p2 = (energy>55.0) ? 0.0425 : 0.043987 - 0.0001719*energy;
00019 double p3 = 0.4690 - 0.002518*energy;
00020
00021 if (energy>15.0) p1= max(p1,0.0);
00022
00023 double base = p1 - p2*std::log(1.0/RandFlat::shoot() - 1.0);
00024 double leakage = (base>0.) ? std::pow(base,(1.0/p3)) : 0.;
00025
00026 std::pair<double, double> ehFracs;
00027 ehFracs.first = 1.0 - leakage;
00028 ehFracs.second = leakage;
00029
00030 return ehFracs;
00031 }
00032
00033 IFnOfParticleParameters2* EmHcalLeakageEc::clone() const {
00034 return new EmHcalLeakageEc(*this);
00035 }
00036 }