File indexing completed on 2023-10-25 09:42:48
0001 #include "DQM/Physics/src/EwkElecDQM.h"
0002
0003 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "DataFormats/Common/interface/Handle.h"
0006
0007 #include "FWCore/ServiceRegistry/interface/Service.h"
0008 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0009
0010 #include "DQMServices/Core/interface/DQMStore.h"
0011
0012 #include "DataFormats/TrackReco/interface/Track.h"
0013 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0014 #include "DataFormats/VertexReco/interface/Vertex.h"
0015
0016
0017 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h" // I guess this is the right one??
0018
0019 #include "DataFormats/METReco/interface/MET.h"
0020 #include "DataFormats/JetReco/interface/Jet.h"
0021
0022 #include "DataFormats/GeometryVector/interface/Phi.h"
0023
0024 #include "FWCore/Common/interface/TriggerNames.h"
0025 #include "FWCore/Framework/interface/Event.h"
0026 #include "DataFormats/Common/interface/TriggerResults.h"
0027
0028 #include "DataFormats/Common/interface/View.h"
0029
0030 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
0031
0032 using namespace edm;
0033 using namespace std;
0034 using namespace reco;
0035
0036 EwkElecDQM::EwkElecDQM(const ParameterSet& cfg)
0037 :
0038 metTag_(cfg.getUntrackedParameter<edm::InputTag>("METTag", edm::InputTag("met"))),
0039 jetTag_(cfg.getUntrackedParameter<edm::InputTag>("JetTag", edm::InputTag("sisCone5CaloJets"))),
0040
0041
0042
0043 elecTag_(consumes<edm::View<reco::GsfElectron> >(
0044 cfg.getUntrackedParameter<edm::InputTag>("ElecTag", edm::InputTag("gsfElectrons")))),
0045 metToken_(
0046 consumes<edm::View<reco::MET> >(cfg.getUntrackedParameter<edm::InputTag>("METTag", edm::InputTag("met")))),
0047 jetToken_(consumes<edm::View<reco::Jet> >(
0048 cfg.getUntrackedParameter<edm::InputTag>("JetTag", edm::InputTag("sisCone5CaloJets")))),
0049 vertexTag_(consumes<edm::View<reco::Vertex> >(
0050 cfg.getUntrackedParameter<edm::InputTag>("VertexTag", edm::InputTag("offlinePrimaryVertices")))),
0051 beamSpotTag_(
0052 consumes<reco::BeamSpot>(cfg.getUntrackedParameter<edm::InputTag>("BeamSpotTag", edm::InputTag("BeamSpot")))),
0053
0054
0055
0056
0057
0058
0059 elecTrig_(cfg.getUntrackedParameter<std::vector<std::string> >("ElecTrig")),
0060
0061 ptCut_(cfg.getUntrackedParameter<double>("PtCut", 10.)),
0062
0063 etaCut_(cfg.getUntrackedParameter<double>("EtaCut", 2.4)),
0064 sieieCutBarrel_(cfg.getUntrackedParameter<double>("SieieBarrel", 0.01)),
0065 sieieCutEndcap_(cfg.getUntrackedParameter<double>("SieieEndcap", 0.028)),
0066 detainCutBarrel_(cfg.getUntrackedParameter<double>("DetainBarrel", 0.0071)),
0067 detainCutEndcap_(cfg.getUntrackedParameter<double>("DetainEndcap", 0.0066)),
0068
0069
0070
0071
0072
0073 ecalIsoCutBarrel_(cfg.getUntrackedParameter<double>("EcalIsoCutBarrel", 5.7)),
0074 ecalIsoCutEndcap_(cfg.getUntrackedParameter<double>("EcalIsoCutEndcap", 5.0)),
0075 hcalIsoCutBarrel_(cfg.getUntrackedParameter<double>("HcalIsoCutBarrel", 8.1)),
0076 hcalIsoCutEndcap_(cfg.getUntrackedParameter<double>("HcalIsoCutEndcap", 3.4)),
0077 trkIsoCutBarrel_(cfg.getUntrackedParameter<double>("TrkIsoCutBarrel", 7.2)),
0078 trkIsoCutEndcap_(cfg.getUntrackedParameter<double>("TrkIsoCutEndcap", 5.1)),
0079 mtMin_(cfg.getUntrackedParameter<double>("MtMin", -999999)),
0080 mtMax_(cfg.getUntrackedParameter<double>("MtMax", 999999.)),
0081 metMin_(cfg.getUntrackedParameter<double>("MetMin", -999999.)),
0082 metMax_(cfg.getUntrackedParameter<double>("MetMax", 999999.)),
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099 eJetMin_(cfg.getUntrackedParameter<double>("EJetMin", 999999.)),
0100 nJetMax_(cfg.getUntrackedParameter<int>("NJetMax", 999999)),
0101 PUMax_(cfg.getUntrackedParameter<unsigned int>("PUMax", 60)),
0102 PUBinCount_(cfg.getUntrackedParameter<unsigned int>("PUBinCount", 12)),
0103 hltPrescaleProvider_(cfg, consumesCollector(), *this)
0104
0105 {
0106 isValidHltConfig_ = false;
0107 }
0108
0109 void EwkElecDQM::dqmBeginRun(const Run& iRun, const EventSetup& iSet) {
0110 nall = 0;
0111 nsel = 0;
0112
0113 nrec = 0;
0114 neid = 0;
0115 niso = 0;
0116
0117
0118
0119
0120 bool isConfigChanged = false;
0121
0122
0123 isValidHltConfig_ = hltPrescaleProvider_.init(iRun, iSet, "HLT", isConfigChanged);
0124
0125 LogTrace("") << "isValidHltConfig_=" << isValidHltConfig_ << "\n";
0126 }
0127
0128 void EwkElecDQM::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const&, edm::EventSetup const&) {
0129 ibooker.setCurrentFolder("Physics/EwkElecDQM");
0130
0131 char chtitle[256] = "";
0132
0133 pt_before_ = ibooker.book1D("PT_BEFORECUTS", "Electron transverse momentum [GeV]", 100, 0., 100.);
0134 pt_after_ = ibooker.book1D("PT_LASTCUT", "Electron transverse momentum [GeV]", 100, 0., 100.);
0135
0136 eta_before_ = ibooker.book1D("ETA_BEFORECUTS", "Electron pseudo-rapidity", 50, -2.5, 2.5);
0137 eta_after_ = ibooker.book1D("ETA_LASTCUT", "Electron pseudo-rapidity", 50, -2.5, 2.5);
0138
0139 sieiebarrel_before_ = ibooker.book1D("SIEIEBARREL_BEFORECUTS", "Electron #sigma_{i#etai#eta} (barrel)", 70, 0., 0.07);
0140 sieiebarrel_after_ = ibooker.book1D("SIEIEBARREL_LASTCUT", "Electron #sigma_{i#etai#eta} (barrel)", 70, 0., 0.07);
0141
0142 sieieendcap_before_ = ibooker.book1D("SIEIEENDCAP_BEFORECUTS", "Electron #sigma_{i#etai#eta} (endcap)", 70, 0., 0.07);
0143 sieieendcap_after_ = ibooker.book1D("SIEIEENDCAP_LASTCUT", "Electron #sigma_{i#etai#eta} (endcap)", 70, 0., 0.07);
0144
0145 detainbarrel_before_ =
0146 ibooker.book1D("DETAINBARREL_BEFORECUTS", "Electron #Delta#eta_{in} (barrel)", 40, -0.02, 0.02);
0147 detainbarrel_after_ = ibooker.book1D("DETAINBARREL_LASTCUT", "Electron #Delta#eta_{in} (barrel)", 40, -0.02, 0.02);
0148
0149 detainendcap_before_ =
0150 ibooker.book1D("DETAINENDCAP_BEFORECUTS", "Electron #Delta#eta_{in} (endcap)", 40, -0.02, 0.02);
0151 detainendcap_after_ = ibooker.book1D("DETAINENDCAP_LASTCUT", "Electron #Delta#eta_{in} (endcap)", 40, -0.02, 0.02);
0152
0153 ecalisobarrel_before_ = ibooker.book1D(
0154 "ECALISOBARREL_BEFORECUTS", "Absolute electron ECAL isolation variable (barrel) [GeV]", 50, 0., 50.);
0155 ecalisobarrel_after_ =
0156 ibooker.book1D("ECALISOBARREL_LASTCUT", "Absolute electron ECAL isolation variable (barrel) [GeV]", 50, 0., 50.);
0157
0158 ecalisoendcap_before_ = ibooker.book1D(
0159 "ECALISOENDCAP_BEFORECUTS", "Absolute electron ECAL isolation variable (endcap) [GeV]", 50, 0., 50.);
0160 ecalisoendcap_after_ =
0161 ibooker.book1D("ECALISOENDCAP_LASTCUT", "Absolute electron ECAL isolation variable (endcap) [GeV]", 50, 0., 50.);
0162
0163 hcalisobarrel_before_ = ibooker.book1D(
0164 "HCALISOBARREL_BEFORECUTS", "Absolute electron HCAL isolation variable (barrel) [GeV]", 50, 0., 50.);
0165 hcalisobarrel_after_ =
0166 ibooker.book1D("HCALISOBARREL_LASTCUT", "Absolute electron HCAL isolation variable (barrel) [GeV]", 50, 0., 50.);
0167
0168 hcalisoendcap_before_ = ibooker.book1D(
0169 "HCALISOENDCAP_BEFORECUTS", "Absolute electron HCAL isolation variable (endcap) [GeV]", 50, 0., 50.);
0170 hcalisoendcap_after_ =
0171 ibooker.book1D("HCALISOENDCAP_LASTCUT", "Absolute electron HCAL isolation variable (endcap) [GeV]", 50, 0., 50.);
0172
0173 trkisobarrel_before_ = ibooker.book1D(
0174 "TRKISOBARREL_BEFORECUTS", "Absolute electron track isolation variable (barrel) [GeV]", 50, 0., 50.);
0175 trkisobarrel_after_ =
0176 ibooker.book1D("TRKISOBARREL_LASTCUT", "Absolute electron track isolation variable (barrel) [GeV]", 50, 0., 50.);
0177
0178 trkisoendcap_before_ = ibooker.book1D(
0179 "TRKISOENDCAP_BEFORECUTS", "Absolute electron track isolation variable (endcap) [GeV]", 50, 0., 50.);
0180 trkisoendcap_after_ =
0181 ibooker.book1D("TRKISOENDCAP_LASTCUT", "Absolute electron track isolation variable (endcap) [GeV]", 50, 0., 50.);
0182
0183
0184
0185
0186
0187 invmass_before_ = ibooker.book1D("INVMASS_BEFORECUTS", "Di-electron invariant mass [GeV]", 100, 0., 200.);
0188 invmass_after_ = ibooker.book1D("INVMASS_AFTERCUTS", "Di-electron invariant mass [GeV]", 100, 0., 200.);
0189
0190 invmassPU_before_ = ibooker.book2D("INVMASS_PU_BEFORECUTS",
0191 "Di-electron invariant mass [GeV] vs PU; mass [GeV]; PU count",
0192 100,
0193 0.,
0194 200.,
0195 PUBinCount_,
0196 -0.5,
0197 PUMax_ + 0.5);
0198 invmassPU_afterZ_ = ibooker.book2D("INVMASS_PU_AFTERZCUTS",
0199 "Di-electron invariant mass [GeV] vs PU; mass [GeV]; PU count",
0200 100,
0201 0.,
0202 200.,
0203 PUBinCount_,
0204 -0.5,
0205 PUMax_ + 0.5);
0206
0207 npvs_before_ =
0208 ibooker.book1D("NPVs_BEFORECUTS", "Number of Valid Primary Vertices; nGoodPVs", PUMax_ + 1, -0.5, PUMax_ + 0.5);
0209
0210 npvs_afterZ_ =
0211 ibooker.book1D("NPVs_AFTERZCUTS", "Number of Valid Primary Vertices; nGoodPVs", PUMax_ + 1, -0.5, PUMax_ + 0.5);
0212
0213 nelectrons_before_ = ibooker.book1D("NELECTRONS_BEFORECUTS", "Number of electrons in event", 10, -0.5, 9.5);
0214 nelectrons_after_ = ibooker.book1D("NELECTRONS_AFTERCUTS", "Number of electrons in event", 10, -0.5, 9.5);
0215
0216 snprintf(chtitle, 255, "Transverse mass (%s) [GeV]", metTag_.label().data());
0217 mt_before_ = ibooker.book1D("MT_BEFORECUTS", chtitle, 150, 0., 300.);
0218 mt_after_ = ibooker.book1D("MT_LASTCUT", chtitle, 150, 0., 300.);
0219
0220 snprintf(chtitle, 255, "Missing transverse energy (%s) [GeV]", metTag_.label().data());
0221 met_before_ = ibooker.book1D("MET_BEFORECUTS", chtitle, 100, 0., 200.);
0222 met_after_ = ibooker.book1D("MET_LASTCUT", chtitle, 100, 0., 200.);
0223
0224 snprintf(chtitle, 255, "Number of jets (%s) above %.2f GeV", jetTag_.label().data(), eJetMin_);
0225 njets_before_ = ibooker.book1D("NJETS_BEFORECUTS", chtitle, 10, -0.5, 9.5);
0226 njets_after_ = ibooker.book1D("NJETS_LASTCUT", chtitle, 10, -0.5, 9.5);
0227
0228 snprintf(chtitle, 255, "Jet with highest E_{T} (%s)", jetTag_.label().data());
0229 jet_et_before_ = ibooker.book1D("JETET1_BEFORECUTS", chtitle, 20, 0., 200.0);
0230 jet_et_after_ = ibooker.book1D("JETET1_AFTERCUTS", chtitle, 20, 0., 200.0);
0231
0232 snprintf(chtitle, 255, "Eta of Jet with highest E_{T} (%s)", jetTag_.label().data());
0233 jet_eta_before_ = ibooker.book1D("JETETA1_BEFORECUTS", chtitle, 20, -5, 5);
0234 jet_eta_after_ = ibooker.book1D("JETETA1_AFTERCUTS", chtitle, 20, -5, 5);
0235 }
0236
0237 void EwkElecDQM::dqmEndRun(const Run& r, const EventSetup&) {
0238
0239 double all = nall;
0240 double esel = nsel / all;
0241 LogVerbatim("") << "\n>>>>>> SELECTION SUMMARY BEGIN >>>>>>>>>>>>>>>";
0242 LogVerbatim("") << "Total number of events analyzed: " << nall << " [events]";
0243 LogVerbatim("") << "Total number of events selected: " << nsel << " [events]";
0244 LogVerbatim("") << "Overall efficiency: "
0245 << "(" << setprecision(4) << esel * 100. << " +/- " << setprecision(2)
0246 << sqrt(esel * (1 - esel) / all) * 100. << ")%";
0247
0248 double erec = nrec / all;
0249 double eeid = neid / all;
0250 double eiso = niso / all;
0251
0252
0253
0254
0255 double num = nrec;
0256 double eff = erec;
0257 double err = sqrt(eff * (1 - eff) / all);
0258 LogVerbatim("") << "Passing Pt/Eta/Quality cuts: " << num << " [events], (" << setprecision(4) << eff * 100.
0259 << " +/- " << setprecision(2) << err * 100. << ")%";
0260
0261
0262 num = neid;
0263 eff = eeid;
0264 err = sqrt(eff * (1 - eff) / all);
0265 double effstep = 0.;
0266 double errstep = 0.;
0267 if (nrec > 0)
0268 effstep = eeid / erec;
0269 if (nrec > 0)
0270 errstep = sqrt(effstep * (1 - effstep) / nrec);
0271 LogVerbatim("") << "Passing eID cuts: " << num << " [events], (" << setprecision(4) << eff * 100. << " +/- "
0272 << setprecision(2) << err * 100. << ")%, to previous step: (" << setprecision(4) << effstep * 100.
0273 << " +/- " << setprecision(2) << errstep * 100. << ")%";
0274
0275
0276 num = niso;
0277 eff = eiso;
0278 err = sqrt(eff * (1 - eff) / all);
0279 effstep = 0.;
0280 errstep = 0.;
0281 if (neid > 0)
0282 effstep = eiso / eeid;
0283 if (neid > 0)
0284 errstep = sqrt(effstep * (1 - effstep) / neid);
0285 LogVerbatim("") << "Passing isolation cuts: " << num << " [events], (" << setprecision(4) << eff * 100.
0286 << " +/- " << setprecision(2) << err * 100. << ")%, to previous step: (" << setprecision(4)
0287 << effstep * 100. << " +/- " << setprecision(2) << errstep * 100. << ")%";
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301
0302
0303 num = nsel;
0304 eff = esel;
0305 err = sqrt(eff * (1 - eff) / all);
0306 effstep = 0.;
0307 errstep = 0.;
0308 if (niso > 0)
0309 effstep = esel / eiso;
0310 if (niso > 0)
0311 errstep = sqrt(effstep * (1 - effstep) / niso);
0312 LogVerbatim("") << "Passing HLT criteria: " << num << " [events], (" << setprecision(4) << eff * 100.
0313 << " +/- " << setprecision(2) << err * 100. << ")%, to previous step: (" << setprecision(4)
0314 << effstep * 100. << " +/- " << setprecision(2) << errstep * 100. << ")%";
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326
0327
0328
0329
0330
0331
0332
0333
0334
0335
0336
0337
0338
0339
0340
0341
0342 LogVerbatim("") << ">>>>>> SELECTION SUMMARY END >>>>>>>>>>>>>>>\n";
0343 }
0344
0345 inline void HERE(const char* msg) { std::cout << msg << "\n"; }
0346
0347 void EwkElecDQM::analyze(const Event& ev, const EventSetup& iSet) {
0348
0349 bool rec_sel = false;
0350 bool eid_sel = false;
0351 bool iso_sel = false;
0352 bool all_sel = false;
0353
0354
0355 Handle<View<GsfElectron> > electronCollection;
0356 if (!ev.getByToken(elecTag_, electronCollection)) {
0357
0358 return;
0359 }
0360 unsigned int electronCollectionSize = electronCollection->size();
0361
0362
0363 Handle<reco::BeamSpot> beamSpotHandle;
0364 if (!ev.getByToken(beamSpotTag_, beamSpotHandle)) {
0365
0366 return;
0367 }
0368
0369
0370 double met_px = 0.;
0371 double met_py = 0.;
0372 Handle<View<MET> > metCollection;
0373 if (!ev.getByToken(metToken_, metCollection)) {
0374
0375 return;
0376 }
0377
0378 const MET& met = metCollection->at(0);
0379 met_px = met.px();
0380 met_py = met.py();
0381
0382
0383
0384
0385
0386
0387
0388
0389 double met_et = sqrt(met_px * met_px + met_py * met_py);
0390 LogTrace("") << ">>> MET, MET_px, MET_py: " << met_et << ", " << met_px << ", " << met_py << " [GeV]";
0391 met_before_->Fill(met_et);
0392
0393
0394 int npvCount = 0;
0395 Handle<View<reco::Vertex> > vertexCollection;
0396 if (!ev.getByToken(vertexTag_, vertexCollection)) {
0397 LogError("") << ">>> Vertex collection does not exist !!!";
0398 return;
0399 }
0400
0401 for (unsigned int i = 0; i < vertexCollection->size(); i++) {
0402 const Vertex& vertex = vertexCollection->at(i);
0403 if (vertex.isValid())
0404 npvCount++;
0405 }
0406 npvs_before_->Fill(npvCount);
0407
0408
0409
0410
0411
0412 return;
0413
0414
0415
0416
0417
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459
0460
0461
0462
0463
0464
0465
0466
0467
0468
0469
0470
0471
0472 const int prescaleSet = hltPrescaleProvider_.prescaleSet(ev, iSet);
0473 if (prescaleSet == -1) {
0474 LogTrace("") << "Failed to determine prescaleSet\n";
0475
0476 return;
0477 }
0478
0479
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501
0502
0503
0504
0505
0506
0507
0508
0509 Handle<View<Jet> > jetCollection;
0510 if (!ev.getByToken(jetToken_, jetCollection)) {
0511
0512 return;
0513 }
0514 float electron_et = -8.0;
0515 float electron_eta = -8.0;
0516 float electron_phi = -8.0;
0517 float electron2_et = -9.0;
0518 float electron2_eta = -9.0;
0519 float electron2_phi = -9.0;
0520
0521 for (unsigned int i = 0; i < electronCollectionSize; i++) {
0522 const GsfElectron& elec = electronCollection->at(i);
0523
0524 if (i < 1) {
0525 electron_et = elec.pt();
0526 electron_eta = elec.eta();
0527 electron_phi = elec.phi();
0528 }
0529 if (i == 2) {
0530 electron2_et = elec.pt();
0531 electron2_eta = elec.eta();
0532 electron2_phi = elec.phi();
0533 }
0534 }
0535
0536 float jet_et = -8.0;
0537 float jet_eta = -8.0;
0538 float jet2_et = -9.0;
0539 unsigned int jetCollectionSize = jetCollection->size();
0540 int njets = 0;
0541 for (unsigned int i = 0; i < jetCollectionSize; i++) {
0542 const Jet& jet = jetCollection->at(i);
0543
0544 float jet_current_et = jet.et();
0545
0546
0547 if (electron_et > 0.0 && fabs(jet.eta() - electron_eta) < 0.2 && calcDeltaPhi(jet.phi(), electron_phi) < 0.2)
0548 continue;
0549 if (electron2_et > 0.0 && fabs(jet.eta() - electron2_eta) < 0.2 && calcDeltaPhi(jet.phi(), electron2_phi) < 0.2)
0550 continue;
0551
0552
0553
0554
0555
0556 if (jet.et() > eJetMin_) {
0557 njets++;
0558 }
0559 if (jet_current_et > jet_et) {
0560 jet2_et = jet_et;
0561 jet_et = jet.et();
0562 jet_eta = jet.eta();
0563 } else if (jet_current_et > jet2_et) {
0564 jet2_et = jet.et();
0565 }
0566 }
0567
0568
0569 if (jet_et > 10)
0570 {
0571 jet_et_before_->Fill(jet_et);
0572
0573 jet_eta_before_->Fill(jet_eta);
0574 }
0575
0576 LogTrace("") << ">>> Total number of jets: " << jetCollectionSize;
0577 LogTrace("") << ">>> Number of jets above " << eJetMin_ << " [GeV]: " << njets;
0578 njets_before_->Fill(njets);
0579
0580
0581 nall++;
0582
0583
0584
0585
0586 bool met_hist_done = false;
0587
0588
0589 bool njets_hist_done = false;
0590
0591
0592
0593 const int NFLAGS = 10;
0594
0595
0596
0597
0598
0599
0600
0601
0602 bool electron_sel[NFLAGS];
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616
0617
0618 double electron[2][6];
0619 double goodElectron[2][6];
0620 nGoodElectrons = 0;
0621 for (unsigned int i = 0; i < 2; i++) {
0622 for (unsigned int j = 0; j < 6; j++) {
0623 electron[i][j] = 0.;
0624 goodElectron[i][j] = 0.;
0625 }
0626 }
0627
0628 for (unsigned int i = 0; i < electronCollectionSize; i++) {
0629 for (int j = 0; j < NFLAGS; ++j) {
0630 electron_sel[j] = false;
0631 }
0632
0633 const GsfElectron& elec = electronCollection->at(i);
0634
0635
0636
0637
0638 LogTrace("") << "> elec: processing electron number " << i << "...";
0639
0640
0641
0642
0643 if (i < 2) {
0644 electron[i][0] = 1.;
0645 electron[i][1] = elec.massSqr();
0646 electron[i][2] = elec.energy();
0647 electron[i][3] = elec.px();
0648 electron[i][4] = elec.py();
0649 electron[i][5] = elec.pz();
0650 }
0651
0652
0653 double pt = elec.pt();
0654 double px = elec.px();
0655 double py = elec.py();
0656 double eta = elec.eta();
0657 LogTrace("") << "\t... pt, eta: " << pt << " [GeV], " << eta;
0658 ;
0659 if (pt > ptCut_)
0660 electron_sel[0] = true;
0661 if (fabs(eta) < etaCut_)
0662 electron_sel[1] = true;
0663
0664 bool isBarrel = false;
0665 bool isEndcap = false;
0666 if (eta < 1.4442 && eta > -1.4442) {
0667 isBarrel = true;
0668 } else if ((eta > 1.56 && eta < 2.4) || (eta < -1.56 && eta > -2.4)) {
0669 isEndcap = true;
0670 }
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681
0682
0683
0684 pt_before_->Fill(pt);
0685 eta_before_->Fill(eta);
0686
0687
0688
0689
0690
0691
0692 double sieie = (double)elec.sigmaIetaIeta();
0693 double detain = (double)elec.deltaEtaSuperClusterTrackAtVtx();
0694 if (sieie < sieieCutBarrel_ && isBarrel)
0695 electron_sel[2] = true;
0696 if (sieie < sieieCutEndcap_ && isEndcap)
0697 electron_sel[2] = true;
0698 if (detain < detainCutBarrel_ && isBarrel)
0699 electron_sel[3] = true;
0700 if (detain < detainCutEndcap_ && isEndcap)
0701 electron_sel[3] = true;
0702 if (isBarrel) {
0703 LogTrace("") << "\t... sieie value " << sieie << " (barrel), pass? " << electron_sel[2];
0704 LogTrace("") << "\t... detain value " << detain << " (barrel), pass? " << electron_sel[3];
0705 } else if (isEndcap) {
0706 LogTrace("") << "\t... sieie value " << sieie << " (endcap), pass? " << electron_sel[2];
0707 LogTrace("") << "\t... detain value " << detain << " (endcap), pass? " << electron_sel[2];
0708 }
0709
0710 if (isBarrel) {
0711 sieiebarrel_before_->Fill(sieie);
0712 detainbarrel_before_->Fill(detain);
0713 } else if (isEndcap) {
0714 sieieendcap_before_->Fill(sieie);
0715 detainendcap_before_->Fill(detain);
0716 }
0717
0718
0719
0720 double ecalisovar = elec.dr03EcalRecHitSumEt();
0721 double hcalisovar = elec.dr03HcalTowerSumEt();
0722 double trkisovar = elec.dr04TkSumPt();
0723
0724
0725
0726
0727
0728 if (ecalisovar < ecalIsoCutBarrel_ && isBarrel)
0729 electron_sel[4] = true;
0730 if (ecalisovar < ecalIsoCutEndcap_ && isEndcap)
0731 electron_sel[4] = true;
0732 if (hcalisovar < hcalIsoCutBarrel_ && isBarrel)
0733 electron_sel[5] = true;
0734 if (hcalisovar < hcalIsoCutEndcap_ && isEndcap)
0735 electron_sel[5] = true;
0736 if (trkisovar < trkIsoCutBarrel_ && isBarrel)
0737 electron_sel[6] = true;
0738 if (trkisovar < trkIsoCutEndcap_ && isEndcap)
0739 electron_sel[6] = true;
0740 if (isBarrel) {
0741 LogTrace("") << "\t... ecal isolation value " << ecalisovar << " (barrel), pass? " << electron_sel[4];
0742 LogTrace("") << "\t... hcal isolation value " << hcalisovar << " (barrel), pass? " << electron_sel[5];
0743 LogTrace("") << "\t... trk isolation value " << trkisovar << " (barrel), pass? " << electron_sel[6];
0744 } else if (isEndcap) {
0745 LogTrace("") << "\t... ecal isolation value " << ecalisovar << " (endcap), pass? " << electron_sel[4];
0746 LogTrace("") << "\t... hcal isolation value " << hcalisovar << " (endcap), pass? " << electron_sel[5];
0747 LogTrace("") << "\t... trk isolation value " << trkisovar << " (endcap), pass? " << electron_sel[6];
0748 }
0749
0750
0751 if (isBarrel) {
0752 ecalisobarrel_before_->Fill(ecalisovar);
0753 hcalisobarrel_before_->Fill(hcalisovar);
0754 trkisobarrel_before_->Fill(trkisovar);
0755 } else if (isEndcap) {
0756 ecalisoendcap_before_->Fill(ecalisovar);
0757 hcalisoendcap_before_->Fill(hcalisovar);
0758 trkisoendcap_before_->Fill(trkisovar);
0759 }
0760
0761
0762
0763
0764
0765 double w_et = met_et + pt;
0766 double w_px = met_px + px;
0767 double w_py = met_py + py;
0768
0769 double massT = w_et * w_et - w_px * w_px - w_py * w_py;
0770 massT = (massT > 0) ? sqrt(massT) : 0;
0771
0772 LogTrace("") << "\t... W mass, W_et, W_px, W_py: " << massT << ", " << w_et << ", " << w_px << ", " << w_py
0773 << " [GeV]";
0774 if (massT > mtMin_ && massT < mtMax_)
0775 electron_sel[7] = true;
0776 mt_before_->Fill(massT);
0777 if (met_et > metMin_ && met_et < metMax_)
0778 electron_sel[8] = true;
0779
0780
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791 if (njets <= nJetMax_)
0792 electron_sel[9] = true;
0793
0794
0795 int flags_passed = 0;
0796 bool rec_sel_this = true;
0797 bool eid_sel_this = true;
0798 bool iso_sel_this = true;
0799 bool all_sel_this = true;
0800 for (int j = 0; j < NFLAGS; ++j) {
0801 if (electron_sel[j])
0802 flags_passed += 1;
0803 if (j < 2 && !electron_sel[j])
0804 rec_sel_this = false;
0805 if (j < 4 && !electron_sel[j])
0806 eid_sel_this = false;
0807 if (j < 7 && !electron_sel[j])
0808 iso_sel_this = false;
0809 if (!electron_sel[j])
0810 all_sel_this = false;
0811 }
0812
0813 if (all_sel_this) {
0814 if (nGoodElectrons < 2) {
0815 goodElectron[nGoodElectrons][0] = 1.;
0816 goodElectron[nGoodElectrons][1] = elec.massSqr();
0817 goodElectron[nGoodElectrons][2] = elec.energy();
0818 goodElectron[nGoodElectrons][3] = elec.px();
0819 goodElectron[nGoodElectrons][4] = elec.py();
0820 goodElectron[nGoodElectrons][5] = elec.pz();
0821 }
0822 nGoodElectrons++;
0823 }
0824
0825
0826
0827
0828
0829
0830
0831
0832
0833
0834
0835 if (rec_sel_this)
0836 rec_sel = true;
0837
0838 if (eid_sel_this)
0839 iso_sel = true;
0840
0841 if (iso_sel_this)
0842 iso_sel = true;
0843
0844
0845 if (all_sel_this)
0846 all_sel = true;
0847
0848
0849 if (flags_passed >= (NFLAGS - 1)) {
0850 if (!electron_sel[0] || flags_passed == NFLAGS) {
0851 pt_after_->Fill(pt);
0852 }
0853 if (!electron_sel[1] || flags_passed == NFLAGS) {
0854 eta_after_->Fill(eta);
0855 }
0856 if (!electron_sel[2] || flags_passed == NFLAGS) {
0857 if (isBarrel) {
0858 sieiebarrel_after_->Fill(sieie);
0859 } else if (isEndcap) {
0860 sieieendcap_after_->Fill(sieie);
0861 }
0862 }
0863 if (!electron_sel[3] || flags_passed == NFLAGS) {
0864 if (isBarrel) {
0865 detainbarrel_after_->Fill(detain);
0866 } else if (isEndcap) {
0867 detainendcap_after_->Fill(detain);
0868 }
0869 }
0870 if (!electron_sel[4] || flags_passed == NFLAGS) {
0871 if (isBarrel) {
0872 ecalisobarrel_after_->Fill(ecalisovar);
0873 } else if (isEndcap) {
0874 ecalisoendcap_after_->Fill(ecalisovar);
0875 }
0876 }
0877 if (!electron_sel[5] || flags_passed == NFLAGS) {
0878 if (isBarrel) {
0879 hcalisobarrel_after_->Fill(hcalisovar);
0880 } else if (isEndcap) {
0881 hcalisoendcap_after_->Fill(hcalisovar);
0882 }
0883 }
0884 if (!electron_sel[6] || flags_passed == NFLAGS) {
0885 if (isBarrel) {
0886 trkisobarrel_after_->Fill(trkisovar);
0887 } else if (isEndcap) {
0888 trkisoendcap_after_->Fill(trkisovar);
0889 }
0890 }
0891
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905
0906
0907
0908
0909
0910
0911
0912
0913 if (!electron_sel[7] || flags_passed == NFLAGS) {
0914 mt_after_->Fill(massT);
0915 }
0916 if (!electron_sel[8] || flags_passed == NFLAGS) {
0917 if (!met_hist_done) {
0918 met_after_->Fill(met_et);
0919 }
0920 }
0921 met_hist_done = true;
0922
0923
0924
0925
0926
0927
0928
0929
0930
0931
0932 if (!electron_sel[9] || flags_passed == NFLAGS) {
0933 if (!njets_hist_done) {
0934 njets_after_->Fill(njets);
0935 if (jet_et > 10)
0936 {
0937 jet_et_after_->Fill(jet_et);
0938 jet_eta_after_->Fill(jet_eta);
0939 }
0940 }
0941 }
0942 njets_hist_done = true;
0943
0944 }
0945
0946 }
0947
0948
0949
0950 double invMass = 0;
0951
0952 nelectrons_before_->Fill(electronCollectionSize);
0953 if (electronCollectionSize > 1) {
0954 invMass =
0955 sqrt(electron[0][1] + electron[1][1] +
0956 2 * (electron[0][2] * electron[1][2] - (electron[0][3] * electron[1][3] + electron[0][4] * electron[1][4] +
0957 electron[0][5] * electron[1][5])));
0958 invmass_before_->Fill(invMass);
0959 invmassPU_before_->Fill(invMass, npvCount);
0960 }
0961
0962 nelectrons_after_->Fill(nGoodElectrons);
0963 if (nGoodElectrons > 1) {
0964 invMass = sqrt(goodElectron[0][1] + goodElectron[1][1] +
0965 2 * (goodElectron[0][2] * goodElectron[1][2] -
0966 (goodElectron[0][3] * goodElectron[1][3] + goodElectron[0][4] * goodElectron[1][4] +
0967 goodElectron[0][5] * goodElectron[1][5])));
0968 invmass_after_->Fill(invMass);
0969 invmassPU_afterZ_->Fill(invMass, npvCount);
0970 npvs_afterZ_->Fill(npvCount);
0971 }
0972
0973
0974 if (rec_sel)
0975 nrec++;
0976 if (eid_sel)
0977 neid++;
0978 if (iso_sel)
0979 niso++;
0980
0981
0982
0983 if (all_sel) {
0984 nsel++;
0985 LogTrace("") << ">>>> Event ACCEPTED";
0986 } else {
0987 LogTrace("") << ">>>> Event REJECTED";
0988 }
0989
0990 return;
0991 }
0992
0993
0994 double EwkElecDQM::calcDeltaPhi(double phi1, double phi2) {
0995 double deltaPhi = phi1 - phi2;
0996
0997 if (deltaPhi < 0)
0998 deltaPhi = -deltaPhi;
0999
1000 if (deltaPhi > 3.1415926) {
1001 deltaPhi = 2 * 3.1415926 - deltaPhi;
1002 }
1003
1004 return deltaPhi;
1005 }
1006
1007
1008
1009
1010