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

GridletForger.cxx

Go to the documentation of this file.
00001 #include "FastShowerUtils/GridletForger.h"
00002 
00003 #include "FastShowerUtils/SingleShowererSelector.h"
00004 #include "FastShowerUtils/DoubleShowererSelector.h"
00005 #include "FastShowerUtils/TripleShowererSelector.h"
00006 
00007 #include "FastShowerUtils/ConfigurerBase.h"
00008 
00009 #include "FastShowerUtils/SoftPhotonBarSelConfig.h"
00010 #include "FastShowerUtils/SoftPhotonEcSelConfig.h"
00011 #include "FastShowerUtils/ElectronBarSelConfig.h"
00012 #include "FastShowerUtils/ElectronEcSelConfig.h"
00013 #include "FastShowerUtils/HardPhotonBarSelConfig.h"
00014 #include "FastShowerUtils/HardPhotonEcSelConfig.h"
00015 #include "FastShowerUtils/HadBarSelConfig.h"
00016 #include "FastShowerUtils/HadEcSelConfig.h"
00017 
00018 
00019 #include <cmath>
00020 #include <assert.h>
00021 #include <iostream>
00022 #include <algorithm>
00023 namespace FastShower{
00024 
00025   const double minPhi = -M_PI;
00026   const double maxPhi = +M_PI;
00027   const double minEta = -3.2;
00028   const double maxEta = +3.2;
00029   const double phiGran = M_PI/32;  // 0.09817
00030   const double etaGran = 3.2/32;   // 0.1
00031 
00032   const double GridletForger::phiStart(-2.0);
00033   const double GridletForger::phiStep(0.1); // 0.098
00034   const double GridletForger::etaStart(-2.0);
00035   const double GridletForger::etaStep(0.1);
00036 
00037   GridletForger::GridletForger(std::vector<IShowererSelector*> v):
00038     IDebug(), DebugBase("GridletForger"), m_showererSelectors(v){}
00039 
00040   GridletForger::GridletForger(): IDebug(), DebugBase("GridletForger"){
00042     Moni moniMode;
00043 
00044     SoftPhotonBarSelConfig spbConfig(moniMode);
00045     m_showererSelectors.push_back(new SingleShowererSelector(spbConfig));
00046 
00047     SoftPhotonEcSelConfig specConfig(moniMode);
00048     m_showererSelectors.push_back(new SingleShowererSelector(specConfig));
00049 
00050     HardPhotonBarSelConfig hpbConfig(moniMode);
00051     m_showererSelectors.push_back(new SingleShowererSelector(hpbConfig));
00052 
00053     HardPhotonEcSelConfig hpecConfig(moniMode);
00054     m_showererSelectors.push_back(new SingleShowererSelector(hpecConfig));
00055 
00056     ElectronBarSelConfig ebConfig(moniMode);
00057     m_showererSelectors.push_back(new SingleShowererSelector(ebConfig));
00058 
00059     ElectronEcSelConfig eecConfig(moniMode);
00060     m_showererSelectors.push_back(new SingleShowererSelector(eecConfig));
00061 
00062     //HadBarSelConfig hbConfig(moniMode);
00063     //m_showererSelectors.push_back(new DoubleShowererSelector(hbConfig));
00064 
00065     //HadEcSelConfig hecConfig(moniMode);
00066     //m_showererSelectors.push_back(new DoubleShowererSelector(hecConfig));
00067 
00068     HadBarSelConfig hbConfig(moniMode);
00069     m_showererSelectors.push_back(new TripleShowererSelector(hbConfig));
00070 
00071     HadEcSelConfig hecConfig(moniMode);
00072     m_showererSelectors.push_back(new TripleShowererSelector(hecConfig));
00073   }
00074 
00075 
00076   GridletForger::GridletForger(const std::string s): IDebug(), DebugBase("GridletForger"){
00078     Moni moniMode;
00079 
00080     map<std::string, int> key_map;
00081     // eta scan for Bar or Ec
00082     key_map[ "spb"  ] = 1;
00083     key_map[ "spec" ] = 2;
00084     key_map[ "hpb"  ] = 3;
00085     key_map[ "hpec" ] = 4;
00086     key_map[ "eb"   ] = 5;
00087     key_map[ "eec"  ] = 6;
00088     key_map[ "hb"   ] = 7;
00089     key_map[ "hec"  ] = 8;
00090     // eta scan for Bar and Ec
00091     key_map[ "SoftPhoton"  ] = 12;
00092     key_map[ "HardPhoton"  ] = 34;
00093     key_map[ "Electron"    ] = 56;
00094     key_map[ "Hadron"      ] = 78;
00095 
00096     switch (key_map[s])
00097       {
00098       case 1:
00099         {
00100           SoftPhotonBarSelConfig spbConfig(moniMode);
00101           m_showererSelectors.push_back(new SingleShowererSelector(spbConfig));
00102         }
00103         break;
00104       case 2:
00105         {
00106           SoftPhotonEcSelConfig specConfig(moniMode);
00107           m_showererSelectors.push_back(new SingleShowererSelector(specConfig));
00108         }
00109         break;
00110       case 3:
00111         {
00112           HardPhotonBarSelConfig hpbConfig(moniMode);
00113           m_showererSelectors.push_back(new SingleShowererSelector(hpbConfig));
00114         }
00115         break;
00116       case 4:
00117         {
00118           HardPhotonEcSelConfig hpecConfig(moniMode);
00119           m_showererSelectors.push_back(new SingleShowererSelector(hpecConfig));
00120         }
00121         break;
00122       case 5:
00123         {
00124           ElectronBarSelConfig ebConfig(moniMode);
00125           m_showererSelectors.push_back(new SingleShowererSelector(ebConfig));
00126         }
00127         break;
00128       case 6:
00129         {
00130           ElectronEcSelConfig eecConfig(moniMode);
00131           m_showererSelectors.push_back(new SingleShowererSelector(eecConfig));
00132         }
00133         break;
00134       case 7:
00135         {
00136           HadBarSelConfig hbConfig(moniMode);
00137           m_showererSelectors.push_back(new TripleShowererSelector(hbConfig));
00138         }
00139         break;
00140       case 8:
00141         {
00142           HadEcSelConfig hecConfig(moniMode);
00143           m_showererSelectors.push_back(new TripleShowererSelector(hecConfig));
00144         }
00145         break;
00146       case 12:
00147         {
00148           SoftPhotonBarSelConfig spbConfig(moniMode);
00149           m_showererSelectors.push_back(new SingleShowererSelector(spbConfig));
00150           SoftPhotonEcSelConfig specConfig(moniMode);
00151           m_showererSelectors.push_back(new SingleShowererSelector(specConfig));
00152         }
00153         break;
00154       case 34:
00155         {
00156           HardPhotonBarSelConfig hpbConfig(moniMode);
00157           m_showererSelectors.push_back(new SingleShowererSelector(hpbConfig));
00158           HardPhotonEcSelConfig hpecConfig(moniMode);
00159           m_showererSelectors.push_back(new SingleShowererSelector(hpecConfig));
00160         }
00161         break;
00162       case 56:
00163         {
00164           ElectronBarSelConfig ebConfig(moniMode);
00165           m_showererSelectors.push_back(new SingleShowererSelector(ebConfig));
00166           ElectronEcSelConfig eecConfig(moniMode);
00167           m_showererSelectors.push_back(new SingleShowererSelector(eecConfig));
00168         }
00169         break;
00170       case 78:
00171         {
00172           HadBarSelConfig hbConfig(moniMode);
00173           m_showererSelectors.push_back(new TripleShowererSelector(hbConfig));
00174           HadEcSelConfig hecConfig(moniMode);
00175           m_showererSelectors.push_back(new TripleShowererSelector(hecConfig));
00176         }
00177         break;
00178       default:
00179         cout<<"Invalid Showerer-type request: "<<s<<endl;
00180         throw;
00181       }
00182     
00183   }
00184 
00185 
00186   //
00187   GridletForger::~GridletForger(){
00188     std::vector<IShowererSelector*>::iterator it = m_showererSelectors.begin();
00189     std::vector<IShowererSelector*>::iterator end = m_showererSelectors.end();
00190     for(; it!= end; ++it){delete (*it);}
00191   }
00192 
00193 
00195   Gridlet* GridletForger::makeGridlet(ParticleInfo& pi) const{
00196 
00197     ParticleParameters pp = makeParameters(pi);
00198     //    cout<<"GridletForger "<<endl;
00199     //    cout<<pi;
00200     //    cout<<pp;
00201 
00202     // gridlwt with center coordinate of the hit cell
00203     Gridlet* g = new Gridlet(pp.eta()-pp.delEta(),pp.phi()-pp.delPhi());
00204 
00206     if( find_if(m_showererSelectors.begin(),m_showererSelectors.end(),selectShowerer(pp,g))
00207         == m_showererSelectors.end() ){
00208       g=0;
00209     }
00210     
00211     return g;
00212   };
00213 
00214   //
00215   //  ParticleParameters 
00216   //  GridletForger::makeParameters(const TransportedParticleCollectionCIter& tpcCIter){
00217   ParticleParameters 
00218   GridletForger::makeParameters(const ParticleInfo& pi) const{
00219 
00220     // calo region?
00221     ParticleParameters::Region region;
00222     if (fabs(pi.eta())<=1.5)
00223       region = ParticleParameters::barrel;
00224     else if (fabs(pi.eta())>1.5 && fabs(pi.eta())<=maxEta)
00225       region = ParticleParameters::endcap;
00226     else if (fabs(pi.eta())>maxEta && fabs(pi.eta())<5.0)
00227       region=ParticleParameters::fcal;
00228     else
00229       region=ParticleParameters::beyond;
00230 
00231     // hit cell indices
00232     int    iPhi = static_cast<int>((pi.phi()-minPhi)/phiGran);
00233     int    iEta = static_cast<int>((pi.eta()-minEta)/etaGran);
00234     // center coordinate of the hit cell
00235     double cPhi = minPhi + (iPhi+0.5)*phiGran;
00236     double cEta = minEta + (iEta+0.5)*etaGran;
00237     // distance: impact point to cell center (assuming symmetry about Eta=0!)
00238     double delPhi = pi.phi() - cPhi;
00239     double delEta = pi.eta() - cEta;
00240 
00241     ParticleParameters 
00242       pp(pi.phi(),pi.eta(),delPhi,delEta,pi.energy(),region,pi.id());
00243 
00244     EnergyLimiter* energyLimiter;
00245     if (pp.region()==ParticleParameters::endcap && pp.isHadron()){
00246       energyLimiter = new EnergyLimiter(10., 50., "EnergyLimiter");
00247     }else{
00248       energyLimiter = new EnergyLimiter(10., 100., "EnergyLimiter");
00249     }
00250     pp.setEnergyLimiter(energyLimiter);
00251     
00252     return pp;
00253   }
00254   //
00255   void GridletForger::components(IDebug::Cpts& c) const{
00256     std::copy(m_showererSelectors.begin(), m_showererSelectors.end(), back_inserter(c));
00257   }
00258 
00259 }//namespace
00260 
00261 
00262 
00263 

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