00001 #include "FastShowerUtils/TripleShowererSelector.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/ITripleShowererSelectorConfig.h"
00009
00010 #include <assert.h>
00011 #include <iostream>
00012 namespace FastShower{
00013
00014 TripleShowererSelector::TripleShowererSelector
00015 (const ITripleShowererSelectorConfig& conf):
00016 DebugBase("TripleShowererSelector"){
00017 m_acceptor = conf.acceptor();
00018 m_ehSharer = conf.ehSharer();
00019 m_softShowerer = conf.softShowerer();
00020 m_earlyShowerer = conf.earlyShowerer();
00021 m_lateShowerer = conf.lateShowerer();
00022 }
00023
00024 bool TripleShowererSelector::accept(ParticleParameters& pp,
00025 Gridlet* g) const{
00026 if (m_acceptor->accept(pp)){
00027 std::pair<double, double> ehFracs = m_ehSharer->value(pp);
00028 double energy = pp.rawEnergy();
00029 Normalisations eNs(ehFracs.first * energy);
00030 Normalisations hNs(ehFracs.second * energy);
00031
00032 if (energy < 1.5) {
00033 m_softShowerer->shower(pp,g,eNs,hNs);
00034 } else {
00035
00036
00037 if (ehFracs.first*energy < 0.700) {
00038 m_lateShowerer->shower(pp,g,eNs,hNs);
00039 } else {
00040 m_earlyShowerer->shower(pp,g,eNs,hNs);
00041 }
00042 return true;
00043 }
00044 return true;
00045 }
00046 return false;
00047 }
00048
00049 void TripleShowererSelector::components(IDebug::Cpts& c) const{
00050 c.push_back(m_acceptor);
00051 c.push_back(m_ehSharer);
00052 c.push_back(m_softShowerer);
00053 c.push_back(m_lateShowerer);
00054 c.push_back(m_earlyShowerer);
00055 }
00056
00057 }
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067