File indexing completed on 2024-04-06 12:09:21
0001 #include "DQMOffline/EGamma/plugins/ElectronAnalyzer.h"
0002
0003 #include "DQMServices/Core/interface/DQMStore.h"
0004
0005 #include "DataFormats/GsfTrackReco/interface/GsfTrack.h"
0006 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
0007 #include "DataFormats/EgammaReco/interface/BasicClusterFwd.h"
0008 #include "DataFormats/Common/interface/Handle.h"
0009 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0010 #include "DataFormats/Common/interface/TriggerResults.h"
0011
0012 #include "FWCore/Common/interface/TriggerNames.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014 #include "FWCore/Framework/interface/Event.h"
0015 #include "FWCore/Framework/interface/MakerMacros.h"
0016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0017 #include "FWCore/ServiceRegistry/interface/Service.h"
0018
0019 #include "CLHEP/Units/GlobalPhysicalConstants.h"
0020 #include "TMath.h"
0021
0022 #include <iostream>
0023
0024 using namespace reco;
0025
0026 ElectronAnalyzer::ElectronAnalyzer(const edm::ParameterSet& conf) : ElectronDqmAnalyzerBase(conf) {
0027
0028 Selection_ = conf.getParameter<int>("Selection");
0029 electronCollection_ = consumes<GsfElectronCollection>(conf.getParameter<edm::InputTag>("ElectronCollection"));
0030 matchingObjectCollection_ =
0031 consumes<SuperClusterCollection>(conf.getParameter<edm::InputTag>("MatchingObjectCollection"));
0032 trackCollection_ = consumes<TrackCollection>(conf.getParameter<edm::InputTag>("TrackCollection"));
0033 vertexCollection_ = consumes<VertexCollection>(conf.getParameter<edm::InputTag>("VertexCollection"));
0034 gsftrackCollection_ = consumes<GsfTrackCollection>(conf.getParameter<edm::InputTag>("GsfTrackCollection"));
0035 beamSpotTag_ = consumes<BeamSpot>(conf.getParameter<edm::InputTag>("BeamSpot"));
0036 readAOD_ = conf.getParameter<bool>("ReadAOD");
0037
0038
0039 matchingCondition_ = conf.getParameter<std::string>("MatchingCondition");
0040 assert(matchingCondition_ == "Cone");
0041 maxPtMatchingObject_ = conf.getParameter<double>("MaxPtMatchingObject");
0042 maxAbsEtaMatchingObject_ = conf.getParameter<double>("MaxAbsEtaMatchingObject");
0043 deltaR_ = conf.getParameter<double>("DeltaR");
0044
0045
0046 minEt_ = conf.getParameter<double>("MinEt");
0047 minPt_ = conf.getParameter<double>("MinPt");
0048 maxAbsEta_ = conf.getParameter<double>("MaxAbsEta");
0049 isEB_ = conf.getParameter<bool>("SelectEb");
0050 isEE_ = conf.getParameter<bool>("SelectEe");
0051 isNotEBEEGap_ = conf.getParameter<bool>("SelectNotEbEeGap");
0052 isEcalDriven_ = conf.getParameter<bool>("SelectEcalDriven");
0053 isTrackerDriven_ = conf.getParameter<bool>("SelectTrackerDriven");
0054 eOverPMinBarrel_ = conf.getParameter<double>("MinEopBarrel");
0055 eOverPMaxBarrel_ = conf.getParameter<double>("MaxEopBarrel");
0056 eOverPMinEndcaps_ = conf.getParameter<double>("MinEopEndcaps");
0057 eOverPMaxEndcaps_ = conf.getParameter<double>("MaxEopEndcaps");
0058 dEtaMinBarrel_ = conf.getParameter<double>("MinDetaBarrel");
0059 dEtaMaxBarrel_ = conf.getParameter<double>("MaxDetaBarrel");
0060 dEtaMinEndcaps_ = conf.getParameter<double>("MinDetaEndcaps");
0061 dEtaMaxEndcaps_ = conf.getParameter<double>("MaxDetaEndcaps");
0062 dPhiMinBarrel_ = conf.getParameter<double>("MinDphiBarrel");
0063 dPhiMaxBarrel_ = conf.getParameter<double>("MaxDphiBarrel");
0064 dPhiMinEndcaps_ = conf.getParameter<double>("MinDphiEndcaps");
0065 dPhiMaxEndcaps_ = conf.getParameter<double>("MaxDphiEndcaps");
0066 sigIetaIetaMinBarrel_ = conf.getParameter<double>("MinSigIetaIetaBarrel");
0067 sigIetaIetaMaxBarrel_ = conf.getParameter<double>("MaxSigIetaIetaBarrel");
0068 sigIetaIetaMinEndcaps_ = conf.getParameter<double>("MinSigIetaIetaEndcaps");
0069 sigIetaIetaMaxEndcaps_ = conf.getParameter<double>("MaxSigIetaIetaEndcaps");
0070 hadronicOverEmMaxBarrel_ = conf.getParameter<double>("MaxHoeBarrel");
0071 hadronicOverEmMaxEndcaps_ = conf.getParameter<double>("MaxHoeEndcaps");
0072 mvaMin_ = conf.getParameter<double>("MinMva");
0073 tipMaxBarrel_ = conf.getParameter<double>("MaxTipBarrel");
0074 tipMaxEndcaps_ = conf.getParameter<double>("MaxTipEndcaps");
0075 tkIso03Max_ = conf.getParameter<double>("MaxTkIso03");
0076 hcalIso03Depth1MaxBarrel_ = conf.getParameter<double>("MaxHcalIso03Depth1Barrel");
0077 hcalIso03Depth1MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth1Endcaps");
0078 hcalIso03Depth2MaxEndcaps_ = conf.getParameter<double>("MaxHcalIso03Depth2Endcaps");
0079 ecalIso03MaxBarrel_ = conf.getParameter<double>("MaxEcalIso03Barrel");
0080 ecalIso03MaxEndcaps_ = conf.getParameter<double>("MaxEcalIso03Endcaps");
0081
0082
0083 triggerResults_ = conf.getParameter<edm::InputTag>("TriggerResults");
0084
0085
0086
0087
0088 nbineta = conf.getParameter<int>("NbinEta");
0089 nbineta2D = conf.getParameter<int>("NbinEta2D");
0090 etamin = conf.getParameter<double>("EtaMin");
0091 etamax = conf.getParameter<double>("EtaMax");
0092
0093 nbinphi = conf.getParameter<int>("NbinPhi");
0094 nbinphi2D = conf.getParameter<int>("NbinPhi2D");
0095 phimin = conf.getParameter<double>("PhiMin");
0096 phimax = conf.getParameter<double>("PhiMax");
0097
0098 nbinpt = conf.getParameter<int>("NbinPt");
0099 nbinpteff = conf.getParameter<int>("NbinPtEff");
0100 nbinpt2D = conf.getParameter<int>("NbinPt2D");
0101 ptmax = conf.getParameter<double>("PtMax");
0102
0103 nbinp = conf.getParameter<int>("NbinP");
0104 nbinp2D = conf.getParameter<int>("NbinP2D");
0105 pmax = conf.getParameter<double>("PMax");
0106
0107 nbineop = conf.getParameter<int>("NbinEop");
0108 nbineop2D = conf.getParameter<int>("NbinEop2D");
0109 eopmax = conf.getParameter<double>("EopMax");
0110 eopmaxsht = conf.getParameter<double>("EopMaxSht");
0111
0112 nbindeta = conf.getParameter<int>("NbinDeta");
0113 detamin = conf.getParameter<double>("DetaMin");
0114 detamax = conf.getParameter<double>("DetaMax");
0115
0116 nbindphi = conf.getParameter<int>("NbinDphi");
0117 dphimin = conf.getParameter<double>("DphiMin");
0118 dphimax = conf.getParameter<double>("DphiMax");
0119
0120 nbindetamatch = conf.getParameter<int>("NbinDetaMatch");
0121 nbindetamatch2D = conf.getParameter<int>("NbinDetaMatch2D");
0122 detamatchmin = conf.getParameter<double>("DetaMatchMin");
0123 detamatchmax = conf.getParameter<double>("DetaMatchMax");
0124
0125 nbindphimatch = conf.getParameter<int>("NbinDphiMatch");
0126 nbindphimatch2D = conf.getParameter<int>("NbinDphiMatch2D");
0127 dphimatchmin = conf.getParameter<double>("DphiMatchMin");
0128 dphimatchmax = conf.getParameter<double>("DphiMatchMax");
0129
0130 nbinfhits = conf.getParameter<int>("NbinFhits");
0131 fhitsmax = conf.getParameter<double>("FhitsMax");
0132
0133 nbinlhits = conf.getParameter<int>("NbinLhits");
0134 lhitsmax = conf.getParameter<double>("LhitsMax");
0135
0136 nbinxyz = conf.getParameter<int>("NbinXyz");
0137 nbinxyz2D = conf.getParameter<int>("NbinXyz2D");
0138
0139 nbinpoptrue = conf.getParameter<int>("NbinPopTrue");
0140 poptruemin = conf.getParameter<double>("PopTrueMin");
0141 poptruemax = conf.getParameter<double>("PopTrueMax");
0142
0143 nbinmee = conf.getParameter<int>("NbinMee");
0144 meemin = conf.getParameter<double>("MeeMin");
0145 meemax = conf.getParameter<double>("MeeMax");
0146
0147 nbinhoe = conf.getParameter<int>("NbinHoe");
0148 hoemin = conf.getParameter<double>("HoeMin");
0149 hoemax = conf.getParameter<double>("HoeMax");
0150
0151
0152
0153 }
0154
0155 ElectronAnalyzer::~ElectronAnalyzer() {}
0156
0157 void ElectronAnalyzer::bookHistograms(DQMStore::IBooker& iBooker, edm::Run const&, edm::EventSetup const&) {
0158 iBooker.setCurrentFolder(outputInternalPath_);
0159
0160 nEvents_ = 0;
0161
0162
0163 h1_vertexPt_barrel = bookH1(
0164 iBooker, "vertexPt_barrel", "ele transverse momentum in barrel", nbinpt, 0., ptmax, "p_{T vertex} (GeV/c)");
0165 h1_vertexPt_endcaps = bookH1(
0166 iBooker, "vertexPt_endcaps", "ele transverse momentum in endcaps", nbinpt, 0., ptmax, "p_{T vertex} (GeV/c)");
0167 h1_vertexEta = bookH1(iBooker, "vertexEta", "ele momentum #eta", nbineta, etamin, etamax, "#eta");
0168 h2_vertexEtaVsPhi = bookH2(iBooker,
0169 "vertexEtaVsPhi",
0170 "ele momentum #eta vs #phi",
0171 nbineta2D,
0172 etamin,
0173 etamax,
0174 nbinphi2D,
0175 phimin,
0176 phimax,
0177 "#eta",
0178 "#phi (rad)");
0179 h2_vertexXvsY = bookH2(
0180 iBooker, "vertexXvsY", "ele vertex x vs y", nbinxyz2D, -0.1, 0.1, nbinxyz2D, -0.1, 0.1, "x (cm)", "y (cm)");
0181 h1_vertexZ = bookH1(iBooker, "vertexZ", "ele vertex z", nbinxyz, -25, 25, "z (cm)");
0182
0183
0184 h1_sclEt = bookH1(iBooker, "sclEt", "ele supercluster transverse energy", nbinpt, 0., ptmax, "E_{T} (GeV)");
0185
0186
0187 h1_chi2 = bookH1(iBooker, "chi2", "ele track #chi^{2}", 100, 0., 15., "#Chi^{2}");
0188 py_chi2VsEta = bookP1(
0189 iBooker, "chi2VsEta", "ele track #chi^{2} vs #eta", nbineta2D, etamin, etamax, 0., 15., "#eta", "<#chi^{2}>");
0190 py_chi2VsPhi = bookP1(iBooker,
0191 "chi2VsPhi",
0192 "ele track #chi^{2} vs #phi",
0193 nbinphi2D,
0194 phimin,
0195 phimax,
0196 0.,
0197 15.,
0198 "#phi (rad)",
0199 "<#chi^{2}>");
0200 h1_foundHits = bookH1(iBooker, "foundHits", "ele track # found hits", nbinfhits, 0., fhitsmax, "N_{hits}");
0201 py_foundHitsVsEta = bookP1(iBooker,
0202 "foundHitsVsEta",
0203 "ele track # found hits vs #eta",
0204 nbineta2D,
0205 etamin,
0206 etamax,
0207 0.,
0208 fhitsmax,
0209 "#eta",
0210 "<# hits>");
0211 py_foundHitsVsPhi = bookP1(iBooker,
0212 "foundHitsVsPhi",
0213 "ele track # found hits vs #phi",
0214 nbinphi2D,
0215 phimin,
0216 phimax,
0217 0.,
0218 fhitsmax,
0219 "#phi (rad)",
0220 "<# hits>");
0221 h1_lostHits = bookH1(iBooker, "lostHits", "ele track # lost hits", 5, 0., 5., "N_{lost hits}");
0222 py_lostHitsVsEta = bookP1(iBooker,
0223 "lostHitsVsEta",
0224 "ele track # lost hits vs #eta",
0225 nbineta2D,
0226 etamin,
0227 etamax,
0228 0.,
0229 lhitsmax,
0230 "#eta",
0231 "<# hits>");
0232 py_lostHitsVsPhi = bookP1(iBooker,
0233 "lostHitsVsPhi",
0234 "ele track # lost hits vs #eta",
0235 nbinphi2D,
0236 phimin,
0237 phimax,
0238 0.,
0239 lhitsmax,
0240 "#phi (rad)",
0241 "<# hits>");
0242
0243
0244 h1_Eop_barrel = bookH1(iBooker, "Eop_barrel", "ele E/P_{vertex} in barrel", nbineop, 0., eopmax, "E/P_{vertex}");
0245 h1_Eop_endcaps = bookH1(iBooker, "Eop_endcaps", "ele E/P_{vertex} in endcaps", nbineop, 0., eopmax, "E/P_{vertex}");
0246 py_EopVsPhi = bookP1(iBooker,
0247 "EopVsPhi",
0248 "ele E/P_{vertex} vs #phi",
0249 nbinphi2D,
0250 phimin,
0251 phimax,
0252 0.,
0253 eopmax,
0254 "#phi (rad)",
0255 "<E/P_{vertex}>");
0256 h1_EeleOPout_barrel =
0257 bookH1(iBooker, "EeleOPout_barrel", "ele E_{ele}/P_{out} in barrel", nbineop, 0., eopmax, "E_{ele}/P_{out}");
0258 h1_EeleOPout_endcaps =
0259 bookH1(iBooker, "EeleOPout_endcaps", "ele E_{ele}/P_{out} in endcaps", nbineop, 0., eopmax, "E_{ele}/P_{out}");
0260 h1_dEtaSc_propVtx_barrel = bookH1(iBooker,
0261 "dEtaSc_propVtx_barrel",
0262 "ele #eta_{sc} - #eta_{tr}, prop from vertex, in barrel",
0263 nbindetamatch,
0264 detamatchmin,
0265 detamatchmax,
0266 "#eta_{sc} - #eta_{tr}");
0267 h1_dEtaSc_propVtx_endcapsPos = bookH1(iBooker,
0268 "dEtaSc_propVtx_endcapsPos",
0269 "ele #eta_{sc} - #eta_{tr}, prop from vertex, in positive endcap",
0270 nbindetamatch,
0271 detamatchmin,
0272 detamatchmax,
0273 "#eta_{sc} - #eta_{tr}");
0274 h1_dEtaSc_propVtx_endcapsNeg = bookH1(iBooker,
0275 "dEtaSc_propVtx_endcapsNeg",
0276 "ele #eta_{sc} - #eta_{tr}, prop from vertex, in negative endcap",
0277 nbindetamatch,
0278 detamatchmin,
0279 detamatchmax,
0280 "#eta_{sc} - #eta_{tr}");
0281 py_dEtaSc_propVtxVsPhi = bookP1(iBooker,
0282 "dEtaSc_propVtxVsPhi",
0283 "ele #eta_{sc} - #eta_{tr}, prop from vertex vs #phi",
0284 nbinphi2D,
0285 phimin,
0286 phimax,
0287 detamatchmin,
0288 detamatchmax,
0289 "#phi (rad)",
0290 "<#eta_{sc} - #eta_{tr}>");
0291 h1_dEtaEleCl_propOut_barrel = bookH1(iBooker,
0292 "dEtaEleCl_propOut_barrel",
0293 "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in barrel",
0294 nbindetamatch,
0295 detamatchmin,
0296 detamatchmax,
0297 "#eta_{elecl} - #eta_{tr}");
0298 h1_dEtaEleCl_propOut_endcapsPos = bookH1(iBooker,
0299 "dEtaEleCl_propOut_endcapsPos",
0300 "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in positive endcap",
0301 nbindetamatch,
0302 detamatchmin,
0303 detamatchmax,
0304 "#eta_{elecl} - #eta_{tr}");
0305 h1_dEtaEleCl_propOut_endcapsNeg = bookH1(iBooker,
0306 "dEtaEleCl_propOut_endcapsNeg",
0307 "ele #eta_{EleCl} - #eta_{tr}, prop from outermost, in negative endcap",
0308 nbindetamatch,
0309 detamatchmin,
0310 detamatchmax,
0311 "#eta_{elecl} - #eta_{tr}");
0312 h1_dPhiSc_propVtx_barrel = bookH1(iBooker,
0313 "dPhiSc_propVtx_barrel",
0314 "ele #phi_{sc} - #phi_{tr}, prop from vertex, in barrel",
0315 nbindphimatch,
0316 dphimatchmin,
0317 dphimatchmax,
0318 "#phi_{sc} - #phi_{tr} (rad)");
0319 h1_dPhiSc_propVtx_endcapsPos = bookH1(iBooker,
0320 "dPhiSc_propVtx_endcapsPos",
0321 "ele #phi_{sc} - #phi_{tr}, prop from vertex, in positive endcap",
0322 nbindphimatch,
0323 dphimatchmin,
0324 dphimatchmax,
0325 "#phi_{sc} - #phi_{tr} (rad)");
0326 h1_dPhiSc_propVtx_endcapsNeg = bookH1(iBooker,
0327 "dPhiSc_propVtx_endcapsNeg",
0328 "ele #phi_{sc} - #phi_{tr}, prop from vertex, in negative endcap",
0329 nbindphimatch,
0330 dphimatchmin,
0331 dphimatchmax,
0332 "#phi_{sc} - #phi_{tr} (rad)");
0333 py_dPhiSc_propVtxVsPhi = bookP1(iBooker,
0334 "dPhiSc_propVtxVsPhi",
0335 "ele #phi_{sc} - #phi_{tr}, prop from vertex vs #phi",
0336 nbinphi2D,
0337 phimin,
0338 phimax,
0339 dphimatchmin,
0340 dphimatchmax,
0341 "#phi (rad)",
0342 "<#phi_{sc} - #phi_{tr}> (rad)");
0343 h1_dPhiEleCl_propOut_barrel = bookH1(iBooker,
0344 "dPhiEleCl_propOut_barrel",
0345 "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in barrel",
0346 nbindphimatch,
0347 dphimatchmin,
0348 dphimatchmax,
0349 "#phi_{elecl} - #phi_{tr} (rad)");
0350 h1_dPhiEleCl_propOut_endcapsPos = bookH1(iBooker,
0351 "dPhiEleCl_propOut_endcapsPos",
0352 "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in positive endcap",
0353 nbindphimatch,
0354 dphimatchmin,
0355 dphimatchmax,
0356 "#phi_{elecl} - #phi_{tr} (rad)");
0357 h1_dPhiEleCl_propOut_endcapsNeg = bookH1(iBooker,
0358 "dPhiEleCl_propOut_endcapsNeg",
0359 "ele #phi_{EleCl} - #phi_{tr}, prop from outermost, in negative endcap",
0360 nbindphimatch,
0361 dphimatchmin,
0362 dphimatchmax,
0363 "#phi_{elecl} - #phi_{tr} (rad)");
0364 h1_Hoe_barrel = bookH1(iBooker,
0365 "Hoe_barrel",
0366 "ele hadronic energy / em energy, in barrel",
0367 nbinhoe,
0368 hoemin,
0369 hoemax,
0370 "H/E",
0371 "Events",
0372 "ELE_LOGY E1 P");
0373 h1_Hoe_endcaps = bookH1(iBooker,
0374 "Hoe_endcaps",
0375 "ele hadronic energy / em energy, in endcaps",
0376 nbinhoe,
0377 hoemin,
0378 hoemax,
0379 "H/E",
0380 "Events",
0381 "ELE_LOGY E1 P");
0382 py_HoeVsPhi = bookP1(iBooker,
0383 "HoeVsPhi",
0384 "ele hadronic energy / em energy vs #phi",
0385 nbinphi2D,
0386 phimin,
0387 phimax,
0388 hoemin,
0389 hoemax,
0390 "#phi (rad)",
0391 "<H/E>",
0392 "E1 P");
0393 h1_sclSigEtaEta_barrel =
0394 bookH1(iBooker, "sclSigEtaEta_barrel", "ele sigma eta eta in barrel", 100, 0., 0.05, "sietaieta");
0395 h1_sclSigEtaEta_endcaps =
0396 bookH1(iBooker, "sclSigEtaEta_endcaps", "ele sigma eta eta in endcaps", 100, 0., 0.05, "sietaieta");
0397 h1_sigIEtaIEta5x5_barrel =
0398 bookH1(iBooker, "sigIEtaIEta5x5_barrel", "ele sigma ieta ieta 5x5 in barrel", 100, 0., 0.05, "sietaieta5x5");
0399 h1_sigIEtaIEta5x5_endcaps =
0400 bookH1(iBooker, "sigIEtaIEta5x5_endcaps", "ele sigma ieta ieta 5x5 in endcaps", 100, 0., 0.05, "sietaieta5x5");
0401
0402
0403 h1_fbrem = bookH1(iBooker, "fbrem", "ele brem fraction", 100, 0., 1., "P_{in} - P_{out} / P_{in}");
0404 py_fbremVsEta = bookP1(iBooker,
0405 "fbremVsEta",
0406 "ele brem fraction vs #eta",
0407 nbineta2D,
0408 etamin,
0409 etamax,
0410 0.,
0411 1.,
0412 "#eta",
0413 "<P_{in} - P_{out} / P_{in}>");
0414 py_fbremVsPhi = bookP1(iBooker,
0415 "fbremVsPhi",
0416 "ele brem fraction vs #phi",
0417 nbinphi2D,
0418 phimin,
0419 phimax,
0420 0.,
0421 1.,
0422 "#phi (rad)",
0423 "<P_{in} - P_{out} / P_{in}>");
0424 h1_classes = bookH1(iBooker, "classes", "ele electron classes", 10, 0.0, 10.);
0425
0426
0427 h1_mva = bookH1(iBooker, "mva", "ele identification mva", 100, -1., 1., "mva");
0428 h1_provenance = bookH1(iBooker, "provenance", "ele provenance", 5, -2., 3., "provenance");
0429
0430
0431 h1_tkSumPt_dr03 = bookH1(
0432 iBooker, "tkSumPt_dr03", "tk isolation sum, dR=0.3", 100, 0.0, 20., "TkIsoSum (GeV/c)", "Events", "ELE_LOGY E1 P");
0433 h1_ecalRecHitSumEt_dr03 = bookH1(iBooker,
0434 "ecalRecHitSumEt_dr03",
0435 "ecal isolation sum, dR=0.3",
0436 100,
0437 0.0,
0438 20.,
0439 "EcalIsoSum (GeV)",
0440 "Events",
0441 "ELE_LOGY E1 P");
0442 h1_hcalTowerSumEt_dr03 = bookH1(iBooker,
0443 "hcalTowerSumEt_dr03",
0444 "hcal isolation sum, dR=0.3",
0445 100,
0446 0.0,
0447 20.,
0448 "HcalIsoSum (GeV)",
0449 "Events",
0450 "ELE_LOGY E1 P");
0451
0452
0453 h1_PFch_dr03 = bookH1(iBooker,
0454 "PFch_dr03",
0455 "Charged PF candidate sum, dR=0.3",
0456 100,
0457 0.0,
0458 20.,
0459 "PF charged (GeV/c)",
0460 "Events",
0461 "ELE_LOGY E1 P");
0462 h1_PFem_dr03 = bookH1(iBooker,
0463 "PFem_dr03",
0464 "Neutral EM PF candidate sum, dR=0.3",
0465 100,
0466 0.0,
0467 20.,
0468 "PF neutral EM (GeV)",
0469 "Events",
0470 "ELE_LOGY E1 P");
0471 h1_PFnh_dr03 = bookH1(iBooker,
0472 "PFnh_dr03",
0473 "Neutral Had PF candidate sum, dR=0.3",
0474 100,
0475 0.0,
0476 20.,
0477 "PF neutral Had (GeV)",
0478 "Events",
0479 "ELE_LOGY E1 P");
0480
0481
0482 setBookIndex(200);
0483 h1_mee = bookH1(iBooker, "mee", "ele pairs invariant mass", nbinmee, meemin, meemax, "m_{ee} (GeV/c^{2})");
0484 h1_mee_os = bookH1(iBooker,
0485 "mee_os",
0486 "ele pairs invariant mass, opposite sign",
0487 nbinmee,
0488 meemin,
0489 meemax,
0490 "m_{e^{+}e^{-}} (GeV/c^{2})");
0491 h1_mee_os_bb = bookH1(iBooker,
0492 "mee_os_bb",
0493 "ele pairs invariant mass, opposite sign, barrel-barrel",
0494 nbinmee,
0495 meemin,
0496 meemax,
0497 "m_{e^{+}e^{-}} (GeV/c^{2})");
0498 h1_mee_os_ee = bookH1(iBooker,
0499 "mee_os_ee",
0500 "ele pairs invariant mass, opposite sign, endcap-endcap",
0501 nbinmee,
0502 meemin,
0503 meemax,
0504 "m_{e^{+}e^{-}} (GeV/c^{2})");
0505 h1_mee_os_eb = bookH1(iBooker,
0506 "mee_os_eb",
0507 "ele pairs invariant mass, opposite sign, barrel-endcap",
0508 nbinmee,
0509 meemin,
0510 meemax,
0511 "m_{e^{+}e^{-}} (GeV/c^{2})");
0512
0513
0514
0515
0516
0517
0518 std::string matchingObjectType;
0519 Labels l;
0520 labelsForToken(matchingObjectCollection_, l);
0521 if (std::string::npos != std::string(l.module).find("SuperCluster", 0)) {
0522 matchingObjectType = "SC";
0523 }
0524 if (matchingObjectType.empty()) {
0525 edm::LogError("ElectronMcFakeValidator::beginJob") << "Unknown matching object type !";
0526 } else {
0527 edm::LogInfo("ElectronMcFakeValidator::beginJob") << "Matching object type: " << matchingObjectType;
0528 }
0529
0530
0531 h1_matchingObject_Eta = bookH1withSumw2(
0532 iBooker, "matchingObject_Eta", matchingObjectType + " #eta", nbineta, etamin, etamax, "#eta_{SC}");
0533
0534 h1_matchingObject_Pt = bookH1withSumw2(
0535 iBooker, "matchingObject_Pt", matchingObjectType + " pt", nbinpteff, 5., ptmax, "pt_{SC} (GeV/c)");
0536 h1_matchingObject_Phi = bookH1withSumw2(
0537 iBooker, "matchingObject_Phi", matchingObjectType + " #phi", nbinphi, phimin, phimax, "#phi (rad)");
0538
0539 h1_matchedObject_Eta = bookH1withSumw2(
0540 iBooker, "matchedObject_Eta", "Efficiency vs matching SC #eta", nbineta, etamin, etamax, "#eta_{SC}");
0541 h1_matchedObject_Pt = bookH1withSumw2(
0542 iBooker, "matchedObject_Pt", "Efficiency vs matching SC E_{T}", nbinpteff, 5., ptmax, "pt_{SC} (GeV/c)");
0543 h1_matchedObject_Phi = bookH1withSumw2(
0544 iBooker, "matchedObject_Phi", "Efficiency vs matching SC #phi", nbinphi, phimin, phimax, "#phi (rad)");
0545
0546 }
0547
0548 void ElectronAnalyzer::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0549 nEvents_++;
0550
0551 edm::Handle<GsfElectronCollection> gsfElectrons;
0552 iEvent.getByToken(electronCollection_, gsfElectrons);
0553 edm::Handle<reco::SuperClusterCollection> recoClusters;
0554 iEvent.getByToken(matchingObjectCollection_, recoClusters);
0555 edm::Handle<reco::TrackCollection> tracks;
0556 iEvent.getByToken(trackCollection_, tracks);
0557 edm::Handle<reco::GsfTrackCollection> gsfTracks;
0558 iEvent.getByToken(gsftrackCollection_, gsfTracks);
0559 edm::Handle<reco::VertexCollection> vertices;
0560 iEvent.getByToken(vertexCollection_, vertices);
0561 edm::Handle<reco::BeamSpot> recoBeamSpotHandle;
0562 iEvent.getByToken(beamSpotTag_, recoBeamSpotHandle);
0563 const BeamSpot bs = *recoBeamSpotHandle;
0564
0565 edm::EventNumber_t ievt = iEvent.id().event();
0566 edm::RunNumber_t irun = iEvent.id().run();
0567 edm::LuminosityBlockNumber_t ils = iEvent.luminosityBlock();
0568
0569 edm::LogInfo("ElectronAnalyzer::analyze") << "Treating " << gsfElectrons.product()->size() << " electrons"
0570 << " from event " << ievt << " in run " << irun << " and lumiblock " << ils;
0571
0572
0573
0574 reco::GsfElectronCollection::const_iterator gsfIter;
0575 for (gsfIter = gsfElectrons->begin(); gsfIter != gsfElectrons->end(); gsfIter++) {
0576
0577 double vertexTIP = (gsfIter->vertex().x() - bs.position().x()) * (gsfIter->vertex().x() - bs.position().x()) +
0578 (gsfIter->vertex().y() - bs.position().y()) * (gsfIter->vertex().y() - bs.position().y());
0579 vertexTIP = sqrt(vertexTIP);
0580
0581
0582 if (!selected(gsfIter, vertexTIP))
0583 continue;
0584
0585
0586 reco::GsfElectronCollection::const_iterator gsfIter2;
0587 for (gsfIter2 = gsfIter + 1; gsfIter2 != gsfElectrons->end(); gsfIter2++) {
0588 if (!selected(gsfIter2, vertexTIP))
0589 continue;
0590 float invMass = computeInvMass(*gsfIter, *gsfIter2);
0591 h1_mee->Fill(invMass);
0592 if (((gsfIter->charge()) * (gsfIter2->charge())) < 0.) {
0593 h1_mee_os->Fill(invMass);
0594 if (gsfIter->isEB() && gsfIter2->isEB())
0595 h1_mee_os_bb->Fill(invMass);
0596 else if (gsfIter->isEE() && gsfIter2->isEE())
0597 h1_mee_os_ee->Fill(invMass);
0598 else
0599 h1_mee_os_eb->Fill(invMass);
0600 }
0601 }
0602
0603
0604 if (gsfIter->isEB())
0605 h1_vertexPt_barrel->Fill(gsfIter->pt());
0606 if (gsfIter->isEE())
0607 h1_vertexPt_endcaps->Fill(gsfIter->pt());
0608 h1_vertexEta->Fill(gsfIter->eta());
0609 h2_vertexEtaVsPhi->Fill(gsfIter->eta(), gsfIter->phi());
0610 h2_vertexXvsY->Fill(gsfIter->vertex().x(), gsfIter->vertex().y());
0611 h1_vertexZ->Fill(gsfIter->vertex().z());
0612
0613
0614 reco::SuperClusterRef sclRef = gsfIter->superCluster();
0615
0616 double R = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y() + sclRef->z() * sclRef->z());
0617 double Rt = TMath::Sqrt(sclRef->x() * sclRef->x() + sclRef->y() * sclRef->y());
0618 h1_sclEt->Fill(sclRef->energy() * (Rt / R));
0619
0620
0621 if (!readAOD_) {
0622 h1_foundHits->Fill(gsfIter->gsfTrack()->numberOfValidHits());
0623 py_foundHitsVsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->numberOfValidHits());
0624 py_foundHitsVsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->numberOfValidHits());
0625 h1_lostHits->Fill(gsfIter->gsfTrack()->numberOfLostHits());
0626 py_lostHitsVsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->numberOfLostHits());
0627 py_lostHitsVsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->numberOfLostHits());
0628 h1_chi2->Fill(gsfIter->gsfTrack()->normalizedChi2());
0629 py_chi2VsEta->Fill(gsfIter->eta(), gsfIter->gsfTrack()->normalizedChi2());
0630 py_chi2VsPhi->Fill(gsfIter->phi(), gsfIter->gsfTrack()->normalizedChi2());
0631 }
0632
0633
0634 if (gsfIter->isEB()) {
0635 h1_Eop_barrel->Fill(gsfIter->eSuperClusterOverP());
0636 h1_EeleOPout_barrel->Fill(gsfIter->eEleClusterOverPout());
0637 h1_dEtaSc_propVtx_barrel->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
0638 h1_dEtaEleCl_propOut_barrel->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
0639 h1_dPhiSc_propVtx_barrel->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
0640 h1_dPhiEleCl_propOut_barrel->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
0641 h1_Hoe_barrel->Fill(gsfIter->hadronicOverEm());
0642 h1_sclSigEtaEta_barrel->Fill(gsfIter->scSigmaEtaEta());
0643 h1_sigIEtaIEta5x5_barrel->Fill(gsfIter->full5x5_sigmaIetaIeta());
0644 }
0645 if (gsfIter->isEE()) {
0646 h1_Eop_endcaps->Fill(gsfIter->eSuperClusterOverP());
0647 h1_EeleOPout_endcaps->Fill(gsfIter->eEleClusterOverPout());
0648 if (gsfIter->eta() > 0) {
0649 h1_dEtaSc_propVtx_endcapsPos->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
0650 h1_dEtaEleCl_propOut_endcapsPos->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
0651 h1_dPhiSc_propVtx_endcapsPos->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
0652 h1_dPhiEleCl_propOut_endcapsPos->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
0653 } else {
0654 h1_dEtaSc_propVtx_endcapsNeg->Fill(gsfIter->deltaEtaSuperClusterTrackAtVtx());
0655 h1_dEtaEleCl_propOut_endcapsNeg->Fill(gsfIter->deltaEtaEleClusterTrackAtCalo());
0656 h1_dPhiSc_propVtx_endcapsNeg->Fill(gsfIter->deltaPhiSuperClusterTrackAtVtx());
0657 h1_dPhiEleCl_propOut_endcapsNeg->Fill(gsfIter->deltaPhiEleClusterTrackAtCalo());
0658 }
0659 h1_Hoe_endcaps->Fill(gsfIter->hadronicOverEm());
0660 h1_sclSigEtaEta_endcaps->Fill(gsfIter->scSigmaEtaEta());
0661 h1_sigIEtaIEta5x5_endcaps->Fill(gsfIter->full5x5_sigmaIetaIeta());
0662 }
0663 py_EopVsPhi->Fill(gsfIter->phi(), gsfIter->eSuperClusterOverP());
0664 py_dEtaSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaEtaSuperClusterTrackAtVtx());
0665 py_dPhiSc_propVtxVsPhi->Fill(gsfIter->phi(), gsfIter->deltaPhiSuperClusterTrackAtVtx());
0666 py_HoeVsPhi->Fill(gsfIter->phi(), gsfIter->hadronicOverEm());
0667
0668
0669 h1_fbrem->Fill(gsfIter->fbrem());
0670 py_fbremVsEta->Fill(gsfIter->eta(), gsfIter->fbrem());
0671 py_fbremVsPhi->Fill(gsfIter->phi(), gsfIter->fbrem());
0672 int eleClass = gsfIter->classification();
0673 if (gsfIter->isEE())
0674 eleClass += 5;
0675 h1_classes->Fill(eleClass);
0676
0677
0678 h1_mva->Fill(gsfIter->mva_e_pi());
0679 if (gsfIter->ecalDrivenSeed())
0680 h1_provenance->Fill(1.);
0681 if (gsfIter->trackerDrivenSeed())
0682 h1_provenance->Fill(-1.);
0683 if (gsfIter->trackerDrivenSeed() || gsfIter->ecalDrivenSeed())
0684 h1_provenance->Fill(0.);
0685 if (gsfIter->trackerDrivenSeed() && !gsfIter->ecalDrivenSeed())
0686 h1_provenance->Fill(-2.);
0687 if (!gsfIter->trackerDrivenSeed() && gsfIter->ecalDrivenSeed())
0688 h1_provenance->Fill(2.);
0689
0690
0691 h1_tkSumPt_dr03->Fill(gsfIter->dr03TkSumPt());
0692 h1_ecalRecHitSumEt_dr03->Fill(gsfIter->dr03EcalRecHitSumEt());
0693 h1_hcalTowerSumEt_dr03->Fill(gsfIter->dr03HcalTowerSumEt());
0694
0695
0696 GsfElectron::PflowIsolationVariables pfIso = gsfIter->pfIsolationVariables();
0697 h1_PFch_dr03->Fill(pfIso.sumChargedHadronPt);
0698 h1_PFem_dr03->Fill(pfIso.sumPhotonEt);
0699 h1_PFnh_dr03->Fill(pfIso.sumNeutralHadronEt);
0700 }
0701
0702
0703 reco::SuperClusterCollection::const_iterator moIter;
0704 for (moIter = recoClusters->begin(); moIter != recoClusters->end(); moIter++) {
0705
0706
0707 if (moIter->energy() / cosh(moIter->eta()) > maxPtMatchingObject_ ||
0708 std::abs(moIter->eta()) > maxAbsEtaMatchingObject_) {
0709 continue;
0710 }
0711
0712
0713 h1_matchingObject_Eta->Fill(moIter->eta());
0714 h1_matchingObject_Pt->Fill(moIter->energy() / cosh(moIter->eta()));
0715 h1_matchingObject_Phi->Fill(moIter->phi());
0716
0717 bool okGsfFound = false;
0718 double gsfOkRatio = 999999999.;
0719 reco::GsfElectron bestGsfElectron;
0720 reco::GsfElectronCollection::const_iterator gsfIter;
0721 for (gsfIter = gsfElectrons->begin(); gsfIter != gsfElectrons->end(); gsfIter++) {
0722 double vertexTIP = (gsfIter->vertex().x() - bs.position().x()) * (gsfIter->vertex().x() - bs.position().x()) +
0723 (gsfIter->vertex().y() - bs.position().y()) * (gsfIter->vertex().y() - bs.position().y());
0724 vertexTIP = sqrt(vertexTIP);
0725
0726
0727 if (!selected(gsfIter, vertexTIP))
0728 continue;
0729
0730
0731 if (matchingCondition_ == "Cone") {
0732 double dphi = gsfIter->phi() - moIter->phi();
0733 if (std::abs(dphi) > CLHEP::pi) {
0734 dphi = dphi < 0 ? (CLHEP::twopi) + dphi : dphi - CLHEP::twopi;
0735 }
0736 double deltaR = sqrt(pow((moIter->eta() - gsfIter->eta()), 2) + pow(dphi, 2));
0737 if (deltaR < deltaR_) {
0738 double tmpGsfRatio = gsfIter->p() / moIter->energy();
0739 if (std::abs(tmpGsfRatio - 1) < std::abs(gsfOkRatio - 1)) {
0740 gsfOkRatio = tmpGsfRatio;
0741 bestGsfElectron = *gsfIter;
0742 okGsfFound = true;
0743 }
0744 }
0745 }
0746 }
0747 if (okGsfFound) {
0748
0749 h1_matchedObject_Eta->Fill(moIter->eta());
0750 h1_matchedObject_Pt->Fill(moIter->energy() / cosh(moIter->eta()));
0751 h1_matchedObject_Phi->Fill(moIter->phi());
0752
0753
0754 }
0755
0756 }
0757 }
0758
0759 float ElectronAnalyzer::computeInvMass(const reco::GsfElectron& e1, const reco::GsfElectron& e2) {
0760 math::XYZTLorentzVector p12 = e1.p4() + e2.p4();
0761 float mee2 = p12.Dot(p12);
0762 float invMass = mee2 > 0. ? sqrt(mee2) : 0;
0763 return invMass;
0764 }
0765
0766 bool ElectronAnalyzer::selected(const reco::GsfElectronCollection::const_iterator& gsfIter, double vertexTIP) {
0767 if ((Selection_ > 0) && generalCut(gsfIter))
0768 return false;
0769 if ((Selection_ >= 1) && etCut(gsfIter))
0770 return false;
0771 if ((Selection_ >= 2) && isolationCut(gsfIter, vertexTIP))
0772 return false;
0773 if ((Selection_ >= 3) && idCut(gsfIter))
0774 return false;
0775 return true;
0776 }
0777
0778 bool ElectronAnalyzer::generalCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
0779 if (std::abs(gsfIter->eta()) > maxAbsEta_)
0780 return true;
0781 if (gsfIter->pt() < minPt_)
0782 return true;
0783
0784 if (gsfIter->isEB() && isEE_)
0785 return true;
0786 if (gsfIter->isEE() && isEB_)
0787 return true;
0788 if (gsfIter->isEBEEGap() && isNotEBEEGap_)
0789 return true;
0790
0791 if (gsfIter->ecalDrivenSeed() && isTrackerDriven_)
0792 return true;
0793 if (gsfIter->trackerDrivenSeed() && isEcalDriven_)
0794 return true;
0795
0796 return false;
0797 }
0798
0799 bool ElectronAnalyzer::etCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
0800 if (gsfIter->superCluster()->energy() / cosh(gsfIter->superCluster()->eta()) < minEt_)
0801 return true;
0802
0803 return false;
0804 }
0805
0806 bool ElectronAnalyzer::isolationCut(const reco::GsfElectronCollection::const_iterator& gsfIter, double vertexTIP) {
0807 if (gsfIter->isEB() && vertexTIP > tipMaxBarrel_)
0808 return true;
0809 if (gsfIter->isEE() && vertexTIP > tipMaxEndcaps_)
0810 return true;
0811
0812 if (gsfIter->dr03TkSumPt() > tkIso03Max_)
0813 return true;
0814 if (gsfIter->isEB() && gsfIter->dr03HcalTowerSumEt(1) > hcalIso03Depth1MaxBarrel_)
0815 return true;
0816 if (gsfIter->isEE() && gsfIter->dr03HcalTowerSumEt(1) > hcalIso03Depth1MaxEndcaps_)
0817 return true;
0818 if (gsfIter->isEE() && gsfIter->dr03HcalTowerSumEt(2) > hcalIso03Depth2MaxEndcaps_)
0819 return true;
0820 if (gsfIter->isEB() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxBarrel_)
0821 return true;
0822 if (gsfIter->isEE() && gsfIter->dr03EcalRecHitSumEt() > ecalIso03MaxEndcaps_)
0823 return true;
0824
0825 return false;
0826 }
0827
0828 bool ElectronAnalyzer::idCut(const reco::GsfElectronCollection::const_iterator& gsfIter) {
0829 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() < eOverPMinBarrel_)
0830 return true;
0831 if (gsfIter->isEB() && gsfIter->eSuperClusterOverP() > eOverPMaxBarrel_)
0832 return true;
0833 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() < eOverPMinEndcaps_)
0834 return true;
0835 if (gsfIter->isEE() && gsfIter->eSuperClusterOverP() > eOverPMaxEndcaps_)
0836 return true;
0837 if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinBarrel_)
0838 return true;
0839 if (gsfIter->isEB() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxBarrel_)
0840 return true;
0841 if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) < dEtaMinEndcaps_)
0842 return true;
0843 if (gsfIter->isEE() && std::abs(gsfIter->deltaEtaSuperClusterTrackAtVtx()) > dEtaMaxEndcaps_)
0844 return true;
0845 if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinBarrel_)
0846 return true;
0847 if (gsfIter->isEB() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxBarrel_)
0848 return true;
0849 if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) < dPhiMinEndcaps_)
0850 return true;
0851 if (gsfIter->isEE() && std::abs(gsfIter->deltaPhiSuperClusterTrackAtVtx()) > dPhiMaxEndcaps_)
0852 return true;
0853 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinBarrel_)
0854 return true;
0855 if (gsfIter->isEB() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxBarrel_)
0856 return true;
0857 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() < sigIetaIetaMinEndcaps_)
0858 return true;
0859 if (gsfIter->isEE() && gsfIter->scSigmaIEtaIEta() > sigIetaIetaMaxEndcaps_)
0860 return true;
0861 if (gsfIter->isEB() && gsfIter->hadronicOverEm() > hadronicOverEmMaxBarrel_)
0862 return true;
0863 if (gsfIter->isEE() && gsfIter->hadronicOverEm() > hadronicOverEmMaxEndcaps_)
0864 return true;
0865
0866 return false;
0867 }