00001
00002 #include <memory>
00003 #include <string>
00004 #include <iostream>
00005 #include <algorithm>
00006
00007
00008 #include "FWCore/Framework/interface/Frameworkfwd.h"
00009 #include "FWCore/Framework/interface/EDAnalyzer.h"
00010 #include "FWCore/Framework/interface/Event.h"
00011 #include "FWCore/Framework/interface/EventSetup.h"
00012 #include "FWCore/Framework/interface/MakerMacros.h"
00013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00014 #include "Calibration/EcalAlCaRecoProducers/interface/AlCaElectronsProducer.h"
00015 #include "DataFormats/EgammaCandidates/interface/SiStripElectron.h"
00016 #include "DataFormats/EgammaCandidates/interface/ElectronFwd.h"
00017 #include "DataFormats/EgammaCandidates/interface/Electron.h"
00018 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00019 #include "DataFormats/EcalRecHit/interface/EcalRecHitCollections.h"
00020 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00021 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00022 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00023 #include "DataFormats/EgammaReco/interface/BasicCluster.h"
00024
00025
00026 #include "TFile.h"
00027 #include "TH1.h"
00028 #include "TH2.h"
00029
00030 #include <Math/VectorUtil.h>
00031
00032 class AlCaElectronsTest : public edm::EDAnalyzer {
00033 public:
00034 explicit AlCaElectronsTest (const edm::ParameterSet&) ;
00035 ~AlCaElectronsTest () {}
00036 virtual void analyze (const edm::Event& iEvent,
00037 const edm::EventSetup& iSetup) ;
00038 virtual void beginJob() ;
00039 virtual void endJob () ;
00040
00041 private:
00042
00043 EcalRecHit getMaximum (const EcalRecHitCollection * recHits) ;
00044 void fillAroundBarrel (const EcalRecHitCollection * recHits, int eta, int phi) ;
00045 void fillAroundEndcap (const EcalRecHitCollection * recHits, int ics, int ips) ;
00046
00047
00048 private:
00049
00050 edm::InputTag m_barrelAlCa ;
00051 edm::InputTag m_endcapAlCa ;
00052 std::string m_outputFileName ;
00053
00055 TH2F * m_barrelGlobalCrystalsMap ;
00057 TH2F * m_barrelLocalCrystalsMap ;
00059 TH2F * m_endcapGlobalCrystalsMap ;
00061 TH2F * m_endcapLocalCrystalsMap ;
00063 TH2F * m_barrelGlobalCrystalsEnergy ;
00065 TH2F * m_barrelLocalCrystalsEnergy ;
00067 TH2F * m_endcapGlobalCrystalsEnergy ;
00069 TH2F * m_endcapLocalCrystalsEnergy ;
00071 TH2F * m_barrelGlobalCrystalsEnergyMap ;
00073 TH2F * m_endcapGlobalCrystalsEnergyMap ;
00074 } ;
00075
00076
00077
00078
00079
00080 AlCaElectronsTest::AlCaElectronsTest (const edm::ParameterSet& iConfig) :
00081 m_barrelAlCa (iConfig.getParameter<edm::InputTag> ("alcaBarrelHitCollection")) ,
00082 m_endcapAlCa (iConfig.getParameter<edm::InputTag> ("alcaEndcapHitCollection")) ,
00083 m_outputFileName (iConfig.getUntrackedParameter<std::string>
00084 ("HistOutFile",std::string ("AlCaElectronsTest.root")))
00085 {}
00086
00087
00088
00089
00090
00091 void
00092 AlCaElectronsTest::beginJob()
00093 {
00094 m_barrelGlobalCrystalsMap = new TH2F ("m_barrelGlobalCrystalsMap","m_barrelGlobalCrystalsMap",171,-85,86,360,0,360) ;
00095 m_barrelLocalCrystalsMap = new TH2F ("m_barrelLocalCrystalsMap","m_barrelLocalCrystalsMap",20,-10,10,20,-10,10) ;
00096 m_endcapGlobalCrystalsMap = new TH2F ("m_endcapGlobalCrystalsMap","m_endcapGlobalCrystalsMap",100,0,100,100,0,100) ;
00097 m_endcapLocalCrystalsMap = new TH2F ("m_endcapLocalCrystalsMap","m_endcapLocalCrystalsMap",20,-10,10,20,-10,10) ;
00098 m_barrelGlobalCrystalsEnergy = new TH2F ("m_barrelGlobalCrystalsEnergy","m_barrelGlobalCrystalsEnergy",171,-85,86,360,0,360) ;
00099 m_barrelLocalCrystalsEnergy = new TH2F ("m_barrelLocalCrystalsEnergy","m_barrelLocalCrystalsEnergy",20,-10,10,20,-10,10) ;
00100 m_endcapGlobalCrystalsEnergy = new TH2F ("m_endcapGlobalCrystalsEnergy","m_endcapGlobalCrystalsEnergy",100,0,100,100,0,100) ;
00101 m_endcapLocalCrystalsEnergy = new TH2F ("m_endcapLocalCrystalsEnergy","m_endcapLocalCrystalsEnergy",20,-10,10,20,-10,10) ;
00102 m_barrelGlobalCrystalsEnergyMap = new TH2F ("m_barrelGlobalCrystalsEnergyMap","m_barrelGlobalCrystalsEnergyMap",171,-85,86,360,0,360) ;
00103 m_endcapGlobalCrystalsEnergyMap = new TH2F ("m_endcapGlobalCrystalsEnergyMap","m_endcapGlobalCrystalsEnergyMap",100,0,100,100,0,100) ;
00104 return ;
00105 }
00106
00107
00108
00109
00110
00111 void
00112 AlCaElectronsTest::endJob ()
00113 {
00114 TFile output (m_outputFileName.c_str (),"recreate") ;
00115 m_barrelGlobalCrystalsMap->Write () ;
00116 m_barrelLocalCrystalsMap->Write () ;
00117 m_endcapGlobalCrystalsMap->Write () ;
00118 m_endcapLocalCrystalsMap->Write () ;
00119 m_barrelGlobalCrystalsEnergy->Write () ;
00120 m_barrelLocalCrystalsEnergy->Write () ;
00121 m_endcapGlobalCrystalsEnergy->Write () ;
00122 m_endcapLocalCrystalsEnergy->Write () ;
00123 m_barrelGlobalCrystalsEnergyMap->Write () ;
00124 m_endcapGlobalCrystalsEnergyMap->Write () ;
00125 output.Close () ;
00126
00127 return ;
00128 }
00129
00130
00131
00132
00133
00134 void
00135 AlCaElectronsTest::analyze (const edm::Event& iEvent,
00136 const edm::EventSetup& iSetup)
00137 {
00138
00139 std::cout << "[AlCaElectronsTest] analysing event "
00140 << iEvent.id () << std::endl ;
00141
00142
00143
00144 edm::Handle<EBRecHitCollection> barrelRecHitsHandle ;
00145 iEvent.getByLabel (m_barrelAlCa, barrelRecHitsHandle) ;
00146 if (!barrelRecHitsHandle.isValid()) {
00147 std::cerr << "[AlCaElectronsTest] caught std::exception "
00148 << " in rertieving " << m_barrelAlCa
00149 << std::endl ;
00150 return ;
00151 } else {
00152 const EBRecHitCollection* barrelHitsCollection = barrelRecHitsHandle.product () ;
00153
00154 EcalRecHit barrelMax = getMaximum (barrelHitsCollection) ;
00155 EBDetId barrelMaxId (barrelMax.id ()) ;
00156 m_barrelGlobalCrystalsMap->Fill (
00157 barrelMaxId.ieta () ,
00158 barrelMaxId.iphi ()
00159 ) ;
00160 m_barrelGlobalCrystalsEnergy->Fill (
00161 barrelMaxId.ieta () ,
00162 barrelMaxId.iphi () ,
00163 barrelMax.energy ()
00164 ) ;
00165 fillAroundBarrel (
00166 barrelHitsCollection,
00167 barrelMaxId.ieta (),
00168 barrelMaxId.iphi ()
00169 ) ;
00170 }
00171
00172
00173 edm::Handle<EERecHitCollection> endcapRecHitsHandle ;
00174 iEvent.getByLabel (m_endcapAlCa,endcapRecHitsHandle) ;
00175 if (!endcapRecHitsHandle.isValid()) {
00176 std::cerr << "[AlCaElectronsTest] caught std::exception "
00177 << " in rertieving " << m_endcapAlCa
00178 << std::endl ;
00179 return ;
00180 } else {
00181 const EERecHitCollection* endcapHitsCollection = endcapRecHitsHandle.product () ;
00182
00183 EcalRecHit endcapMax = getMaximum (endcapHitsCollection) ;
00184 EEDetId endcapMaxId (endcapMax.id ()) ;
00185 m_endcapGlobalCrystalsMap->Fill (
00186 endcapMaxId.ix () ,
00187 endcapMaxId.iy ()
00188 ) ;
00189 m_endcapGlobalCrystalsEnergy->Fill (
00190 endcapMaxId.ix () ,
00191 endcapMaxId.iy () ,
00192 endcapMax.energy ()
00193 ) ;
00194 fillAroundEndcap (
00195 endcapHitsCollection,
00196 endcapMaxId.ix (),
00197 endcapMaxId.iy ()
00198 ) ;
00199 }
00200 }
00201
00202
00203
00204
00205
00206 EcalRecHit
00207 AlCaElectronsTest::getMaximum (const EcalRecHitCollection * recHits)
00208 {
00209 double energy = 0. ;
00210 EcalRecHit max ;
00211 for (EcalRecHitCollection::const_iterator elem = recHits->begin () ;
00212 elem != recHits->end () ;
00213 ++elem)
00214 {
00215 if (elem->energy () > energy)
00216 {
00217 energy = elem->energy () ;
00218 max = *elem ;
00219 }
00220 }
00221 return max ;
00222 }
00223
00224
00225
00226
00227
00228 void
00229 AlCaElectronsTest::fillAroundBarrel (const EcalRecHitCollection * recHits, int eta, int phi)
00230 {
00231 for (EcalRecHitCollection::const_iterator elem = recHits->begin () ;
00232 elem != recHits->end () ;
00233 ++elem)
00234 {
00235 EBDetId elementId = elem->id () ;
00236 m_barrelLocalCrystalsMap->Fill (
00237 elementId.ieta () - eta ,
00238 elementId.iphi () - phi
00239 ) ;
00240 m_barrelLocalCrystalsEnergy->Fill (
00241 elementId.ieta () - eta ,
00242 elementId.iphi () - phi ,
00243 elem->energy ()
00244 ) ;
00245 m_barrelGlobalCrystalsEnergyMap->Fill (
00246 elementId.ieta () ,
00247 elementId.iphi () ,
00248 elem->energy ()
00249 ) ;
00250
00251 }
00252 return ;
00253 }
00254
00255
00256
00257
00258
00259 void
00260 AlCaElectronsTest::fillAroundEndcap (const EcalRecHitCollection * recHits, int ics, int ips)
00261 {
00262 for (EcalRecHitCollection::const_iterator elem = recHits->begin () ;
00263 elem != recHits->end () ;
00264 ++elem)
00265 {
00266 EEDetId elementId = elem->id () ;
00267 m_endcapLocalCrystalsMap->Fill (
00268 elementId.ix () - ics ,
00269 elementId.iy () - ips
00270 ) ;
00271 m_endcapLocalCrystalsEnergy->Fill (
00272 elementId.ix () - ics ,
00273 elementId.iy () - ips ,
00274 elem->energy ()
00275 ) ;
00276 m_endcapGlobalCrystalsEnergyMap->Fill (
00277 elementId.ix () ,
00278 elementId.iy () ,
00279 elem->energy ()
00280 ) ;
00281 }
00282 return ;
00283 }