00001 #include "FastShowerUtils/DoubleShowererSelector.h" 00002 00003 #include "FastShowerUtils/Gridlet.h" 00004 #include "FastShowerUtils/IConfigurer.h" 00005 #include "FastShowerUtils/Normalisations.h" 00006 #include "FastShowerUtils/ParticleParameters.h" 00007 #include "FastShowerUtils/IFnOfParticleParameters.h" 00008 #include "FastShowerUtils/IDoubleShowererSelectorConfig.h" 00009 00010 #include <assert.h> 00011 #include <iostream> 00012 namespace FastShower{ 00013 // 00014 DoubleShowererSelector::DoubleShowererSelector 00015 (const IDoubleShowererSelectorConfig& conf): 00016 DebugBase("DoubleShowererSelector"){ 00017 m_acceptor = conf.acceptor(); 00018 m_ehSharer = conf.ehSharer(); 00019 m_earlyShowerer = conf.earlyShowerer(); 00020 m_lateShowerer = conf.lateShowerer(); 00021 } 00022 // 00023 bool DoubleShowererSelector::accept(ParticleParameters& pp, 00024 Gridlet* g) const{ 00025 if (m_acceptor->accept(pp)){ 00026 std::pair<double, double> ehFracs = m_ehSharer->value(pp); 00027 double energy = pp.rawEnergy(); 00028 Normalisations eNs(ehFracs.first * energy); 00029 Normalisations hNs(ehFracs.second * energy); 00030 // based on ECal fraction decide which Showerer to activate 00031 // if ECAL deposit less/greater than 700MeV --> late/early shower 00032 if (ehFracs.first*energy < 0.700) { 00033 m_lateShowerer->shower(pp,g,eNs,hNs); 00034 } else { 00035 m_earlyShowerer->shower(pp,g,eNs,hNs); 00036 } 00037 return true; 00038 } 00039 return false; 00040 } 00041 // 00042 void DoubleShowererSelector::components(IDebug::Cpts& c) const{ 00043 c.push_back(m_acceptor); 00044 c.push_back(m_ehSharer); 00045 c.push_back(m_lateShowerer); 00046 c.push_back(m_earlyShowerer); 00047 } 00048 00049 }//namespace 00050 00051 00052 00053 00054 00055 00056 00057 00058 00059