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;
00030 const double etaGran = 3.2/32;
00031
00032 const double GridletForger::phiStart(-2.0);
00033 const double GridletForger::phiStep(0.1);
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
00063
00064
00065
00066
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
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
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
00199
00200
00201
00202
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
00216
00217 ParticleParameters
00218 GridletForger::makeParameters(const ParticleInfo& pi) const{
00219
00220
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
00232 int iPhi = static_cast<int>((pi.phi()-minPhi)/phiGran);
00233 int iEta = static_cast<int>((pi.eta()-minEta)/etaGran);
00234
00235 double cPhi = minPhi + (iPhi+0.5)*phiGran;
00236 double cEta = minEta + (iEta+0.5)*etaGran;
00237
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 }
00260
00261
00262
00263