00001 #include <Utilities/Configuration/interface/Architecture.h>
00002
00003 #include "CARF/G3Event/interface/G3EventProxy.h"
00004 #include "Utilities/Notification/interface/Observer.h"
00005
00006
00007 #include "Calorimetry/CaloRecHit/interface/CaloRecHit.h"
00008 #include "Calorimetry/EcalPlusHcalTower/interface/EcalPlusHcalTower.h"
00009 #include "Calorimetry/EcalPlusHcalTower/src/EcalPlusHcalTowerBuilder.h"
00010 #include "Calorimetry/CaloCommon/interface/CaloItr.h"
00011 #include "Calorimetry/CaloDetector/interface/CellID.h"
00012
00013
00014 #include "CARF/Reco/interface/RecItr.h"
00015 #include "CARF/Reco/interface/Reconstructor.h"
00016
00017 #include "Utilities/Notification/interface/PackageInitializer.h"
00018 #include <Utilities/UI/interface/SimpleConfigurable.h>
00019
00020 #include "CLHEP/Geometry/Point3D.h"
00021 #include "CLHEP/Units/PhysicalConstants.h"
00022
00023
00024 #include "JetMetAnalysis/MetObjects/interface/CaloEtaSliceMet.h"
00025 #include "JetMetAnalysis/MetObjects/interface/L1CaloMet.h"
00026 #include "JetMetAnalysis/MetObjects/interface/ConcreteMet.h"
00027
00028 #include "JetMetAnalysis/MetBuilders/interface/JetMetSetup.h"
00029
00030 #include "JetMetAnalysis/JetMetParticles/interface/JetMetParticleSetup.h"
00031
00032
00033
00034
00035 #include <XANADOO/XANAEtMiss/interface/XANAEtMiss.h>
00036
00037 #include <iostream>
00038 #include<string>
00039
00040 class MySetup{
00049 public:
00050 MySetup();
00051 ~MySetup();
00052 private:
00053 JetMetSetup * setup;
00054 double dummy;
00055 };
00056
00057 MySetup::MySetup()
00058 {
00059 cout<<"***********My setUp**********************";
00060 setup = new JetMetSetup;
00061 }
00062
00063 MySetup::~MySetup()
00064 {
00065 delete setup;
00066 }
00067
00068 class EtMissTest : private Observer<G3EventProxy *>
00069 {
00070 public:
00071 EtMissTest();
00072 ~EtMissTest(){ cout<<"End of EtMissTest"<<endl;delete _mysetup;}
00073 void FillingTest(G3EventProxy *ev);
00074 private:
00075 void upDate(G3EventProxy *ev){if (ev!=0) FillingTest(ev);}
00076 void FillEtMiss(G3EventProxy *ev, EtMiss *a);
00077 void Print(EtMiss a);
00078 void PrintEvInfo(G3EventProxy *ev);
00079 SimpleConfigurable<string> _Scheme;
00080 string CheckSchemeName();
00081 MySetup * _mysetup;
00082 };
00083
00084 EtMissTest::EtMissTest()
00085 {
00086 Observer<G3EventProxy *>::init() ;
00087 _Scheme=SimpleConfigurable<string>("default","EtMissScheme");
00088 _mysetup = new MySetup;
00089 }
00090
00091 void EtMissTest::FillingTest(G3EventProxy *ev)
00092 {
00093 PrintEvInfo(ev);
00094 EtMiss* myMet = new EtMiss(CheckSchemeName());
00095 FillEtMiss (ev,myMet);
00096 Print(*myMet);
00097 delete myMet;
00098 }
00099
00100 void EtMissTest::PrintEvInfo(G3EventProxy *ev)
00101 {
00102 static int nEvRead=0;
00103 cout <<"======================================================================= " << endl;
00104 cout << " ======> Reading " << ++nEvRead << " Event" << endl;
00105
00106 cout <<" pythia run " << ev->simSignal()->originalId().runNumber()
00107 <<" pythia ev " << ev->simSignal()->originalId().eventInRun() << endl;
00108
00109 cout << " oohit Run Number " << ev->simSignal()->id().runNumber()
00110 << " event number " << ev->simSignal()->id().eventInRun() << endl;
00111
00112 cout <<" digi run = " << ev->pEvent()->id().runNumber()
00113 <<" event number = " << ev->pEvent()->id().eventInRun() << endl;
00114
00115 cout <<"***************************************************************** " << endl;
00116
00117 }
00118
00119 void EtMissTest::Print(EtMiss a)
00120 {
00121 cout<<"=========== scheme : "<<a.WhichScheme()<<endl;
00122 cout<<"*************EtMiss*************************** \n";
00123 cout<<" "<<a.getEMissX()<<" "<<a.getEMissY()<<" "<<a.getEtMiss()<<endl;
00124
00125 cout<<"\n ********* ECAL ******************"<<endl;
00126 for (int i=0;i<5;i++){cout<<a.getEECal(i)<<" ";}
00127 cout<<endl;
00128 for (int i=0;i<5;i++){cout<<a.getEScalarECal(i)<<" ";}
00129
00130 cout<<"\n ********* HCAL ******************"<<endl;
00131 for (int i=0;i<5;i++){cout<<a.getEHCal(i)<<" ";}
00132 cout<<endl;
00133 for (int i=0;i<5;i++){cout<<a.getEScalarHCal(i)<<" ";}
00134
00135 cout<<"\n ********* Total ******************"<<endl;
00136 for (int i=0;i<5;i++){cout<<a.getE(i)<<" ";}
00137 cout<<endl;
00138 for (int i=0;i<5;i++){cout<<a.getEScalar(i)<<" ";}
00139
00140 cout<<"\n ********* MC ******************"<<endl;
00141 for (int i=0;i<5;i++){cout<<a.getETrue(i)<<" ";}
00142 cout<<endl<<endl;
00143
00144 }
00145
00146 void EtMissTest::FillEtMiss(G3EventProxy *ev, EtMiss* a)
00147 {
00148
00149 string scheme = CheckSchemeName();
00150 if(scheme != "default")
00151 {
00152 RecItr<ConcreteMet> gMet(ev->recEvent(),scheme.c_str());
00153 cout<<"AAA ConcreteMet AAAA"<<endl;
00154 while (gMet.next())
00155 {
00156 cout<<*gMet<<endl;
00157 a->SetEtMiss(gMet->getMissingEx(),gMet->getMissingEy());
00158 }
00159
00160 }
00161
00162
00164
00165
00166 JetMetParticleSetup * jps = Singleton<JetMetParticleSetup>::instance();
00167 double towerEtThreshold = jps->getEcalPlusHcalTowerEtCut();
00168 cout<<"AAA towerEtThreshold: "<<towerEtThreshold<<endl;
00169 double EEcal[3] = {0,0,0};
00170 double EHcal[3] = {0,0,0};
00171 double ETot[3] = {0,0,0};
00172
00173 double EScEcal[5] = {0,0,0,0,0};
00174 double EScHcal[5] = {0,0,0,0,0};
00175 double EScTot[5] = {0,0,0,0,0};
00176
00177 RecItr<EcalPlusHcalTower> aTower(ev->recEvent());
00178 while(aTower.next())
00179 {
00180 HepPoint3D position = aTower->Position();
00181 double theta = position.theta();
00182 double phi = position.phi();
00183 double EnEcal = aTower->EnergyEcalTower();
00184 double EnHcal = aTower->EnergyHcalTower();
00185 if(aTower->Energy()*sin(theta) > towerEtThreshold)
00186 {
00187 double Ex_E=EnEcal*sin(theta)*cos(phi);
00188 double Ey_E=EnEcal*sin(theta)*sin(phi);
00189 double Ez_E=EnEcal*cos(theta);
00190 double Ex_H=EnHcal*sin(theta)*cos(phi);
00191 double Ey_H=EnHcal*sin(theta)*sin(phi);
00192 double Ez_H=EnHcal*cos(theta);
00193
00194 EEcal[0] += Ex_E;
00195 EEcal[1] += Ey_E;
00196 EEcal[2] += Ez_E;
00197
00198 EHcal[0] += Ex_H;
00199 EHcal[1] += Ey_H;
00200 EHcal[2] += Ez_H;
00201
00202
00203 EScEcal[0] += fabs(Ex_E);
00204 EScEcal[1] += fabs(Ey_E);
00205 EScEcal[2] += fabs(Ez_E);
00206 EScEcal[3] += sqrt(Ex_E*Ex_E+Ey_E*Ey_E);
00207 EScEcal[4] += sqrt(Ex_E*Ex_E+Ey_E*Ey_E+Ez_E*Ez_E);
00208
00209 EScHcal[0] += fabs(Ex_H);
00210 EScHcal[1] += fabs(Ey_H);
00211 EScHcal[2] += fabs(Ez_H);
00212 EScHcal[3] += sqrt(Ex_H*Ex_H+Ey_H*Ey_H);
00213 EScHcal[4] += sqrt(Ex_H*Ex_H+Ey_H*Ey_H+Ez_H*Ez_H);
00214
00215 }
00216 }
00217
00218 for (int i=0;i<3;i++)
00219 {
00220 ETot[i]=EEcal[i]+EHcal[i];
00221 }
00222
00223 a->SetEECal(EEcal[0],EEcal[1],EEcal[2]);
00224 a->SetEHCal(EHcal[0],EHcal[1],EHcal[2]);
00225
00226 a->SetEScalECal(EScEcal[0],EScEcal[1],EScEcal[2],EScEcal[3],EScEcal[4]);
00227 a->SetEScalHCal(EScHcal[0],EScHcal[1],EScHcal[2],EScHcal[3],EScHcal[4]);
00228 a->SetETotal(ETot[0],ETot[1],ETot[2]);
00229 if(scheme == "default") a->SetEtMiss(-1*ETot[0],-1*ETot[1]);
00230
00231 a->SetEScalTotal(0.9,0.4,0.3,11,12);
00232
00233 }
00234
00235 string EtMissTest::CheckSchemeName()
00236 {
00240
00241 if(_Scheme.value()=="pippo") return _Scheme.value();
00242 if(_Scheme.value()=="pappo") return _Scheme.value();
00243 if(_Scheme.value()=="MetGenCalo") return _Scheme.value();
00244 if(_Scheme.value()=="MetCaloTower") return _Scheme.value();
00245
00246
00247 return "default";
00248
00249 }
00250 static PKBuilder<EtMissTest> pippo("EtMissTest") ;