00001
00002
00003
00004
00005 #include "FastShowerUtils/Samplers/C0HadEarlyHcalBar1.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
00017 #include <cmath>
00018 #include <iostream>
00019
00020 namespace FastShower{
00021
00022 using std::pair;
00023
00024 C0HadEarlyHcalBar1::C0HadEarlyHcalBar1(IProcessedDist* peak,
00025 IProcessedDist* tail,
00026 IInTail* it):
00027 ISampler(), ICell0(), DebugBase("C0HadEarlyHcalBar1"),
00028 m_peak(peak), m_tail(tail), m_inTail(it){}
00030 C0HadEarlyHcalBar1::C0HadEarlyHcalBar1(const IConfigurer* c,
00031 const std::string& s):
00032 DebugBase(s), m_peak(0), m_tail(0), m_inTail(0){
00033 m_peak = c->makeProcessedFlat( text() ) ;
00034 m_tail = c->makeProcessedFlat( text() );
00035 m_inTail = c->makeIInTail( text() );
00036 cout<<text()<<" finishing construction"<<endl;
00037 }
00039 ISampler* C0HadEarlyHcalBar1::clone() const {
00040 return new C0HadEarlyHcalBar1(*this);
00041 }
00043 void C0HadEarlyHcalBar1::sample(const PolyArgs& pa,
00044 CoreSamples& cs)const{
00045
00046 if( m_inTail->operator()(pa) ){
00047 cs.fill(this, evalTail(pa));
00048 }else{
00049 cs.fill(this, evalPeak(pa));
00050 }
00051 }
00053 double C0HadEarlyHcalBar1::evalTail(const PolyArgs&) const {
00054
00055 double lLimit, uLimit;
00056
00057 SplitDecision whichTail(0.63);
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 C0HadEarlyHcalBar1::evalPeak(const PolyArgs&)const{
00070 LinearProcessor lp(0.8, 0.1);
00071 return m_peak->sample(&lp);
00072 }
00074 double C0HadEarlyHcalBar1::lastValue(const CoreSamples& cs) const {
00075 return cs.give(this);
00076 }
00078 void C0HadEarlyHcalBar1::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