00001
00002
00003
00004
00005 #include "FastShowerUtils/Samplers/S0HadEarlyHcalEc1.h"
00006
00007 #include "FastShowerUtils/PolyArgs.h"
00008 #include "FastShowerUtils/IFn.h"
00009 #include "FastShowerUtils/CoreSamples.h"
00010 #include "FastShowerUtils/IProcessedDist.h"
00011 #include "FastShowerUtils/IConfigurer.h"
00012 #include "FastShowerUtils/LinearProcessor.h"
00013 #include "FastShowerUtils/ProcessedNormal.h"
00014 #include "FastShowerUtils/IInTail.h"
00015 #include "FastShowerUtils/SplitDecision.h"
00016 #include "CLHEP/Random/RandFlat.h"
00017 #include <cmath>
00018 #include <iostream>
00019
00020 namespace FastShower{
00021
00022 using std::pair;
00023
00024 S0HadEarlyHcalEc1::S0HadEarlyHcalEc1(IProcessedDist* peak,
00025 IProcessedDist* tail,
00026 IInTail* it):
00027 ISampler(), ISlice0(), DebugBase("S0HadEarlyHcalEc1"),
00028 m_peak(peak), m_tail(tail), m_inTail(it){}
00030 S0HadEarlyHcalEc1::S0HadEarlyHcalEc1(const IConfigurer* configurer,
00031 const std::string& s):
00032 DebugBase(s), m_peak(0), m_tail(0), m_inTail(0){
00033 m_peak = configurer->makeProcessedFlat( text() ) ;
00034 m_tail = configurer->makeProcessedFlat( text() );
00035 m_inTail = configurer->makeIInTail( text() );
00036 cout<<text()<<" finishing construction"<<endl;
00037 }
00039 ISampler* S0HadEarlyHcalEc1::clone() const {return new S0HadEarlyHcalEc1(*this);}
00041 void S0HadEarlyHcalEc1::sample(const PolyArgs& pa, CoreSamples& cs)const{
00042
00043 if( m_inTail->operator()(pa) ){
00044 cs.fill(this, evalTail(pa));
00045 }else{
00046 cs.fill(this, evalPeak(pa));
00047 }
00048 }
00050 double S0HadEarlyHcalEc1::evalTail(const PolyArgs& pa) const {
00051
00052 double lLimit, uLimit;
00053
00054 double aDEta = fabs(pa.pp()->delEta());
00055 double fraction = 0.28752 + 7.9588*aDEta;
00056
00057 SplitDecision whichTail(fraction);
00058 if (whichTail.lower()) {
00059 lLimit = 0.0;
00060 uLimit = 0.1;
00061 }else {
00062 lLimit = 0.9;
00063 uLimit = 1.0;
00064 }
00065 LinearProcessor lp((uLimit-lLimit), lLimit);
00066 return m_tail->sample(&lp);
00067 }
00069 double S0HadEarlyHcalEc1::evalPeak(const PolyArgs&)const{
00070 LinearProcessor lp(0.8, 0.1);
00071 return m_peak->sample(&lp);
00072 }
00074 double S0HadEarlyHcalEc1::lastValue(const CoreSamples& cs) const {
00075 return cs.give(this);
00076 }
00078 void S0HadEarlyHcalEc1::components(IDebug::Cpts& v) const{
00079 v.push_back(m_peak);
00080 v.push_back(m_tail);
00081 v.push_back(m_inTail);
00082 }
00083
00084 }
00085
00086
00087
00088
00089
00090
00091