Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

Showerer.cxx

Go to the documentation of this file.
00001 #include "FastShowerUtils/Showerer.h"
00002 #include "FastShowerUtils/ParticleParameters.h"
00003 #include "FastShowerUtils/Deposits.h"
00004 #include "FastShowerUtils/IFnOfParticleParameters.h"
00005 #include "FastShowerUtils/Gridlet.h"
00006 #include "FastShowerUtils/IDepositor.h"
00007 #include "FastShowerUtils/CloneVector.h"
00008 #include "FastShowerUtils/IConfigurer.h"
00009 #include "FastShowerUtils/INormaliser.h"
00010 #include "FastShowerUtils/Normalisations.h"
00011 #include "FastShowerUtils/EnergyLimiter.h"
00012 
00013 #include <vector>
00014 
00015 namespace FastShower{
00016 
00017   using std::vector;
00018 
00020   Showerer::Showerer(const IConfigurer* configurer, const std::string& s):
00021     IShowerer(), DebugBase(s), m_eDepositors(), m_hDepositors(), 
00022     m_eNormaliser(0), m_hNormaliser(0), m_eLimiter(0){
00023     
00024     configurer->eDepositors(m_eDepositors);
00025     configurer->hDepositors(m_hDepositors);
00026     m_eNormaliser = configurer->findNormaliser("EcalNormaliser");
00027     m_hNormaliser = configurer->findNormaliser("HcalNormaliser");
00028     m_eLimiter    = configurer->energyLimiter();
00029 
00030   }
00032 
00033   Showerer::Showerer(vector<IDepositor*> e, vector<IDepositor*> h,
00034                      INormaliser* eN, INormaliser* hN):
00035     IShowerer(), DebugBase("Showerer"), 
00036     m_eDepositors(e), m_hDepositors(h), 
00037     m_eNormaliser(eN), m_hNormaliser(hN),
00038     m_eLimiter(new EnergyLimiter(10., 100.)){}
00040 
00041   Showerer::Showerer(const Showerer& s): IShowerer(), DebugBase(s){
00042 
00043     std::vector<IDepositor*>::const_iterator iter;
00044     std::vector<IDepositor*>::const_iterator end;
00045     
00046     iter =s.m_eDepositors.begin();
00047     end =s.m_eDepositors.end();
00048     for(;iter!=end;++iter){m_eDepositors.push_back((*iter)->clone());}
00049     
00050     iter =s.m_hDepositors.begin();
00051     end =s.m_hDepositors.end();
00052     for(;iter!=end;++iter){m_hDepositors.push_back((*iter)->clone());}
00053 
00054     m_eNormaliser = s.m_eNormaliser;
00055     m_hNormaliser = s.m_hNormaliser;
00056 
00057     m_eLimiter    = s.m_eLimiter;
00058   }
00059   //
00060   Showerer& Showerer::operator=(const Showerer& s){
00061 
00062     // update if not copyin to self
00063     if (&s != this){
00064       
00065       DebugBase::operator=(s);
00066       //erase the old depositors
00067       m_eDepositors.clear();
00068       m_hDepositors.clear();
00069 
00070       std::vector<IDepositor*>::const_iterator iter, end;
00071 
00072       //copy the new depositors
00073       iter =s.m_eDepositors.begin();
00074       end =s.m_eDepositors.end();
00075       for(;iter!=end;++iter){m_eDepositors.push_back((*iter)->clone());}
00076 
00077       iter =s.m_hDepositors.begin();
00078       end =s.m_hDepositors.end();
00079       for(;iter!=end;++iter){m_hDepositors.push_back((*iter)->clone());}
00080 
00081       m_eNormaliser = s.m_eNormaliser->clone();
00082       m_hNormaliser = s.m_hNormaliser->clone();
00083     }
00084 
00085     return *this;
00086   }
00087   //
00088   Showerer::~Showerer(){
00089 
00090     vector<IDepositor*>::iterator it;
00091     vector<IDepositor*>::iterator end;
00092 
00093     it  = m_eDepositors.begin();
00094     end = m_eDepositors.end();
00095     for(; it!= end; ++it){delete (*it);}
00096 
00097     it  = m_hDepositors.begin();
00098     end = m_hDepositors.end();
00099     for(; it!= end; ++it){delete (*it);}
00100 
00101     delete m_eNormaliser;
00102     delete m_hNormaliser;
00103   }
00104   //
00105   void Showerer::shower(ParticleParameters& pp, 
00106                         Gridlet* g,
00107                         Normalisations& eNorms, 
00108                         Normalisations& hNorms) const {
00111     pp.setEnergyLimiter(m_eLimiter);
00112 
00114     this->normalise(pp, eNorms, hNorms);
00115     //
00116     vector<IDepositor*>::const_iterator it;
00117     //Loop through Deposits. Give a reference to the em Dposits in
00118     //Gridlet, fill these deposits, and normalise them;
00119     it  = m_eDepositors.begin();
00120     for(; it!= m_eDepositors.end(); ++it){
00121       (*it)->deposit(pp, eNorms, g->emDeposits());
00122     }
00123     //
00124     // repeat for hadron cal deposits.
00125     it  = m_hDepositors.begin();
00126     for(; it!= m_hDepositors.end(); ++it){
00127       (*it)->deposit(pp, hNorms, g->hadDeposits());
00128     }
00129   }
00130   //
00131   void Showerer::normalise(const ParticleParameters& pp, 
00132                            Normalisations& eNorms, 
00133                            Normalisations& hNorms) const{
00134     //
00135     //normalise Gridlet deposits
00136     m_eNormaliser->scale(eNorms,pp);
00137     m_hNormaliser->scale(hNorms,pp);
00138   }
00139   //
00140   void Showerer::components(IDebug::Cpts& c) const{
00141     c.push_back(m_eNormaliser);
00142     c.push_back(m_hNormaliser);
00143     std::copy(m_eDepositors.begin(), m_eDepositors.end(), back_inserter(c));
00144     std::copy(m_hDepositors.begin(), m_hDepositors.end(), back_inserter(c));
00145   }
00146 }//namespace
00147 
00148 
00149 

Generated on Tue Mar 18 11:50:05 2003 for FastShowerUtils by doxygen1.3-rc1