Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-04-24 01:30:21

0001 /*
0002   Scouting EGamma DQM core implementation.
0003 
0004   Description: ScoutingEGammaCollectionMonitoring is developed to enable us to
0005   monitor the comparison between pat::Object and Run3Scouting<Object>.
0006 
0007   Implementation:
0008      * Current runs on top of MINIAOD dataformat of the
0009 ScoutingEGammaCollectionMonitoring dataset.
0010      * Implemented only for electrons as of now.
0011 
0012   Authors: Ting-Hsiang Hsu, Abanti Ranadhir Sahasransu
0013 */
0014 
0015 // system includes
0016 #include <string>
0017 #include <vector>
0018 
0019 // user include files
0020 #include "DQMServices/Core/interface/DQMGlobalEDAnalyzer.h"
0021 #include "DataFormats/Common/interface/TriggerResults.h"
0022 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
0023 #include "DataFormats/HLTReco/interface/TriggerEventWithRefs.h"
0024 #include "DataFormats/HLTReco/interface/TriggerObject.h"
0025 #include "DataFormats/HLTReco/interface/TriggerRefsCollections.h"
0026 #include "DataFormats/Math/interface/deltaR.h"
0027 #include "DataFormats/PatCandidates/interface/Electron.h"
0028 #include "DataFormats/PatCandidates/interface/PackedTriggerPrescales.h"
0029 #include "DataFormats/PatCandidates/interface/TriggerObjectStandAlone.h"
0030 #include "DataFormats/Scouting/interface/Run3ScoutingElectron.h"
0031 #include "FWCore/Common/interface/TriggerNames.h"
0032 #include "FWCore/Framework/interface/Event.h"
0033 #include "FWCore/Framework/interface/Frameworkfwd.h"
0034 #include "FWCore/Framework/interface/MakerMacros.h"
0035 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0036 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0037 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
0038 
0039 #include "ScoutingDQMUtils.h"
0040 
0041 /////////////////////////
0042 //  Class declaration  //
0043 /////////////////////////
0044 
0045 struct kSctProbeFilterHistos {
0046   dqm::reco::MonitorElement* hPt_Barrel_passBaseDST;
0047   dqm::reco::MonitorElement* hPt_Endcap_passBaseDST;
0048   dqm::reco::MonitorElement* hEta_passBaseDST;
0049   std::vector<dqm::reco::MonitorElement*> hPt_Barrel_fireTrigObj;
0050   std::vector<dqm::reco::MonitorElement*> hPt_Endcap_fireTrigObj;
0051   std::vector<dqm::reco::MonitorElement*> hEta_fireTrigObj;
0052 };
0053 
0054 struct kSctProbeKinematicHistos {
0055   dqm::reco::MonitorElement* hPt_Barrel;
0056   dqm::reco::MonitorElement* hPt_Endcap;
0057   dqm::reco::MonitorElement* hEta;
0058   dqm::reco::MonitorElement* hEtavPhi;
0059   dqm::reco::MonitorElement* hPhi;
0060   dqm::reco::MonitorElement* hHoverE_Barrel;
0061   dqm::reco::MonitorElement* hHoverE_Endcap;
0062   dqm::reco::MonitorElement* hOoEMOoP_Barrel;
0063   dqm::reco::MonitorElement* hOoEMOoP_Endcap;
0064   dqm::reco::MonitorElement* hdPhiIn_Barrel;
0065   dqm::reco::MonitorElement* hdPhiIn_Endcap;
0066   dqm::reco::MonitorElement* hdEtaIn_Barrel;
0067   dqm::reco::MonitorElement* hdEtaIn_Endcap;
0068   dqm::reco::MonitorElement* hSigmaIetaIeta_Barrel;
0069   dqm::reco::MonitorElement* hSigmaIetaIeta_Endcap;
0070   dqm::reco::MonitorElement* hMissingHits_Barrel;
0071   dqm::reco::MonitorElement* hMissingHits_Endcap;
0072   dqm::reco::MonitorElement* hTrackfbrem_Barrel;
0073   dqm::reco::MonitorElement* hTrackfbrem_Endcap;
0074   dqm::reco::MonitorElement* hTrack_pt_Barrel;
0075   dqm::reco::MonitorElement* hTrack_pt_Endcap;
0076   dqm::reco::MonitorElement* hTrack_pMode_Barrel;
0077   dqm::reco::MonitorElement* hTrack_pMode_Endcap;
0078   dqm::reco::MonitorElement* hTrack_etaMode_Barrel;
0079   dqm::reco::MonitorElement* hTrack_etaMode_Endcap;
0080   dqm::reco::MonitorElement* hTrack_phiMode_Barrel;
0081   dqm::reco::MonitorElement* hTrack_phiMode_Endcap;
0082   dqm::reco::MonitorElement* hTrack_qoverpModeError_Barrel;
0083   dqm::reco::MonitorElement* hTrack_qoverpModeError_Endcap;
0084   dqm::reco::MonitorElement* hRelEcalIsolation_Barrel;
0085   dqm::reco::MonitorElement* hRelEcalIsolation_Endcap;
0086   dqm::reco::MonitorElement* hRelHcalIsolation_Barrel;
0087   dqm::reco::MonitorElement* hRelHcalIsolation_Endcap;
0088   dqm::reco::MonitorElement* hRelTrackIsolation_Barrel;
0089   dqm::reco::MonitorElement* hRelTrackIsolation_Endcap;
0090   dqm::reco::MonitorElement* hInvMass;
0091   dqm::reco::MonitorElement* hPt_Barrel_passID;
0092   dqm::reco::MonitorElement* hPt_Endcap_passID;
0093   kSctProbeFilterHistos leading_electron;
0094   kSctProbeFilterHistos subleading_electron;
0095 };
0096 
0097 struct kSctTagProbeHistos {
0098   kSctProbeKinematicHistos resonanceZ;
0099   kSctProbeKinematicHistos resonanceJ;
0100   kSctProbeKinematicHistos resonanceY;
0101   kSctProbeKinematicHistos resonanceAll;
0102 };
0103 
0104 class ScoutingElectronTagProbeAnalyzer : public DQMGlobalEDAnalyzer<kSctTagProbeHistos> {
0105 public:
0106   explicit ScoutingElectronTagProbeAnalyzer(const edm::ParameterSet& conf);
0107   ~ScoutingElectronTagProbeAnalyzer() override = default;
0108   static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0109 
0110 private:
0111   void dqmAnalyze(const edm::Event& e, const edm::EventSetup& c, kSctTagProbeHistos const&) const override;
0112 
0113   void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&, kSctTagProbeHistos&) const override;
0114 
0115   void bookHistograms_resonance(
0116       DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&, kSctProbeKinematicHistos&, const std::string&) const;
0117 
0118   void fillHistograms_resonance(const kSctProbeKinematicHistos& histos,
0119                                 const Run3ScoutingElectron& el,
0120                                 const float inv_mass,
0121                                 const trigger::TriggerObjectCollection* legObjectsCollection,
0122                                 const bool passBaseDST,
0123                                 const int pt_order) const;
0124 
0125   bool scoutingElectron_passHLT(const Run3ScoutingElectron& el,
0126                                 const trigger::TriggerObjectCollection& legObjects) const;
0127 
0128   // --------------------- member data  ----------------------
0129   std::string outputInternalPath_;
0130 
0131   const std::vector<std::string> vBaseTriggerSelection_;
0132   const std::vector<std::string> vtriggerSelection_;
0133   const std::vector<std::string> filterToMatch_;
0134 
0135   const edm::EDGetToken triggerResultsToken_;
0136   const edm::EDGetTokenT<pat::TriggerObjectStandAloneCollection> triggerObjects_;
0137 
0138   const edm::EDGetTokenT<std::vector<Run3ScoutingElectron>> scoutingElectronCollection_;
0139 };
0140 
0141 ScoutingElectronTagProbeAnalyzer::ScoutingElectronTagProbeAnalyzer(const edm::ParameterSet& iConfig)
0142     : outputInternalPath_(iConfig.getParameter<std::string>("OutputInternalPath")),
0143       vBaseTriggerSelection_{iConfig.getParameter<vector<string>>("BaseTriggerSelection")},
0144       vtriggerSelection_{iConfig.getParameter<vector<string>>("triggerSelection")},
0145       filterToMatch_{iConfig.getParameter<vector<string>>("finalfilterSelection")},
0146       triggerResultsToken_(consumes<edm::TriggerResults>(iConfig.getParameter<edm::InputTag>("TriggerResultTag"))),
0147       triggerObjects_(
0148           consumes<pat::TriggerObjectStandAloneCollection>(iConfig.getParameter<edm::InputTag>("TriggerObjects"))),
0149       scoutingElectronCollection_(consumes<std::vector<Run3ScoutingElectron>>(
0150           iConfig.getParameter<edm::InputTag>("ScoutingElectronCollection"))) {}
0151 
0152 void ScoutingElectronTagProbeAnalyzer::dqmAnalyze(edm::Event const& iEvent,
0153                                                   edm::EventSetup const& iSetup,
0154                                                   kSctTagProbeHistos const& histos) const {
0155   edm::Handle<std::vector<Run3ScoutingElectron>> sctEls;
0156   iEvent.getByToken(scoutingElectronCollection_, sctEls);
0157   if (sctEls.failedToGet()) {
0158     edm::LogWarning("ScoutingMonitoring") << "Run3ScoutingElectron collection not found.";
0159     return;
0160   }
0161 
0162   // Trigger
0163   edm::Handle<edm::TriggerResults> triggerResults;
0164   edm::Handle<pat::TriggerObjectStandAloneCollection> triggerObjects;
0165   iEvent.getByToken(triggerResultsToken_, triggerResults);
0166   iEvent.getByToken(triggerObjects_, triggerObjects);
0167 
0168   // Trigger result
0169   if (triggerResults.failedToGet()) {
0170     edm::LogWarning("ScoutingEGammaCollectionMonitoring") << "Trgger Results not found.";
0171     return;
0172   }
0173   int nTriggers = triggerResults->size();
0174   std::vector<bool> vtrigger_result(vtriggerSelection_.size(), false);
0175   bool passBaseDST = false;
0176   const edm::TriggerNames& triggerNames = iEvent.triggerNames(*triggerResults);
0177   for (int i_Trig = 0; i_Trig < nTriggers; i_Trig++) {
0178     if (triggerResults.product()->accept(i_Trig)) {
0179       TString TrigPath = triggerNames.triggerName(i_Trig);
0180       for (unsigned int i_selectTrig = 0; i_selectTrig < vtriggerSelection_.size(); i_selectTrig++) {
0181         if (TrigPath.Index(vtriggerSelection_.at(i_selectTrig)) >= 0) {
0182           vtrigger_result[i_selectTrig] = true;
0183         }
0184       }
0185 
0186       for (unsigned int i_BaseTrig = 0; i_BaseTrig < vBaseTriggerSelection_.size(); i_BaseTrig++) {
0187         if (TrigPath.Index(vBaseTriggerSelection_.at(i_BaseTrig)) >= 0) {
0188           passBaseDST = true;
0189         }
0190       }
0191     }
0192   }
0193 
0194   // Trigger Object Matching
0195   size_t numberOfFilters = filterToMatch_.size();
0196   trigger::TriggerObjectCollection* legObjects = new trigger::TriggerObjectCollection[numberOfFilters];
0197   for (size_t iteFilter = 0; iteFilter < filterToMatch_.size(); iteFilter++) {
0198     std::string filterTag = filterToMatch_.at(iteFilter);
0199     for (pat::TriggerObjectStandAlone obj : *triggerObjects) {
0200       obj.unpackNamesAndLabels(iEvent, *triggerResults);
0201       if (obj.hasFilterLabel(filterTag)) {
0202         legObjects[iteFilter].push_back(obj);
0203       }
0204     }
0205   }
0206 
0207   edm::LogInfo("ScoutingMonitoring") << "Process Run3ScoutingElectrons: " << sctEls->size();
0208 
0209   // Pt ordered sct electron collection
0210 
0211   std::vector<std::pair<size_t, Run3ScoutingElectron>> indexed_sctElectrons;
0212   for (size_t i = 0; i < sctEls->size(); i++) {
0213     indexed_sctElectrons.emplace_back(i, (*sctEls)[i]);
0214   }
0215   std::sort(indexed_sctElectrons.begin(), indexed_sctElectrons.end(), [](const auto& a, const auto& b) {
0216     return a.second.pt() > b.second.pt();
0217   });
0218 
0219   for (size_t sct_local_index = 0; sct_local_index < indexed_sctElectrons.size(); sct_local_index++) {
0220     const auto sct_el = indexed_sctElectrons[sct_local_index].second;
0221 
0222     if (!scoutingDQMUtils::scoutingElectronID(sct_el))
0223       continue;
0224     edm::LogInfo("ScoutingElectronTagProbeAnalyzer") << "Process Run3ScoutingElectrons: " << sct_el.sigmaIetaIeta();
0225 
0226     math::PtEtaPhiMLorentzVector tag_sct_el(sct_el.pt(), sct_el.eta(), sct_el.phi(), sct_el.m());
0227     int second_sct_pt_order = -1;
0228     for (size_t second_sct_local_index = 0; second_sct_local_index < indexed_sctElectrons.size();
0229          second_sct_local_index++) {
0230       const auto sct_el_second = indexed_sctElectrons[second_sct_local_index].second;
0231       if (scoutingDQMUtils::scoutingElectronID(sct_el_second))
0232         second_sct_pt_order += 1;  // Only use scouting electron passing ID in HLT eff calculation.
0233       if (&sct_el_second == &sct_el)
0234         continue;
0235       math::PtEtaPhiMLorentzVector probe_sct_el(
0236           sct_el_second.pt(), sct_el_second.eta(), sct_el_second.phi(), sct_el_second.m());
0237       float invMass = (tag_sct_el + probe_sct_el).mass();
0238       edm::LogInfo("ScoutingMonitoring") << "Inv Mass: " << invMass;
0239       if ((80 < invMass) && (invMass < 100)) {
0240         fillHistograms_resonance(
0241             histos.resonanceZ, sct_el_second, invMass, legObjects, passBaseDST, second_sct_pt_order);
0242         fillHistograms_resonance(
0243             histos.resonanceAll, sct_el_second, invMass, legObjects, passBaseDST, second_sct_pt_order);
0244       }
0245       if ((2.8 < invMass) && (invMass < 3.8)) {
0246         fillHistograms_resonance(histos.resonanceJ,
0247                                  sct_el_second,
0248                                  invMass,
0249                                  legObjects,
0250                                  passBaseDST,
0251                                  second_sct_pt_order);  // J/Psi mass: 3.3 +/- 0.2 GeV
0252         fillHistograms_resonance(
0253             histos.resonanceAll, sct_el_second, invMass, legObjects, passBaseDST, second_sct_pt_order);
0254       }
0255       if ((9.0 < invMass) && (invMass < 12.6)) {
0256         fillHistograms_resonance(histos.resonanceY,
0257                                  sct_el_second,
0258                                  invMass,
0259                                  legObjects,
0260                                  passBaseDST,
0261                                  second_sct_pt_order);  // Y mass: 9.8 +/- 0.4 GeV & 10.6 +/- 1 GeV
0262         fillHistograms_resonance(
0263             histos.resonanceAll, sct_el_second, invMass, legObjects, passBaseDST, second_sct_pt_order);
0264       }
0265     }
0266   }
0267 }
0268 
0269 bool ScoutingElectronTagProbeAnalyzer::scoutingElectron_passHLT(
0270     const Run3ScoutingElectron& el, const trigger::TriggerObjectCollection& legObjects) const {
0271   bool foundTheLeg = false;
0272   for (unsigned int i = 0; i < legObjects.size(); i++) {
0273     float delR2 = deltaR2(legObjects.at(i).eta(), legObjects.at(i).phi(), el.eta(), el.phi());
0274     if (delR2 < 0.01) {
0275       foundTheLeg = true;
0276       break;
0277     }
0278   }
0279   return foundTheLeg;
0280 }
0281 
0282 void ScoutingElectronTagProbeAnalyzer::fillHistograms_resonance(
0283     const kSctProbeKinematicHistos& histos,
0284     const Run3ScoutingElectron& el,
0285     const float inv_mass,
0286     const trigger::TriggerObjectCollection* legObjectsCollection,
0287     const bool passBaseDST,
0288     const int pt_order) const {
0289   histos.hEta->Fill(el.eta());
0290   histos.hPhi->Fill(el.phi());
0291   histos.hInvMass->Fill(inv_mass);
0292 
0293   if (fabs(el.eta()) < 1.5) {
0294     histos.hPt_Barrel->Fill(el.pt());
0295     if (scoutingDQMUtils::scoutingElectronID(el))
0296       histos.hPt_Barrel_passID->Fill(el.pt());
0297     histos.hHoverE_Barrel->Fill(el.hOverE());
0298     histos.hOoEMOoP_Barrel->Fill(el.ooEMOop());
0299     histos.hdPhiIn_Barrel->Fill(fabs(el.dPhiIn()));
0300     histos.hdEtaIn_Barrel->Fill(fabs(el.dEtaIn()));
0301     histos.hSigmaIetaIeta_Barrel->Fill(el.sigmaIetaIeta());
0302     histos.hMissingHits_Barrel->Fill(el.missingHits());
0303     histos.hTrackfbrem_Barrel->Fill(el.trackfbrem());
0304     histos.hRelEcalIsolation_Barrel->Fill(el.ecalIso() / el.pt());
0305     histos.hRelHcalIsolation_Barrel->Fill(el.hcalIso() / el.pt());
0306     histos.hRelTrackIsolation_Barrel->Fill(el.trackIso() / el.pt());
0307     for (const auto& trk : el.trkpt()) {
0308       histos.hTrack_pt_Barrel->Fill(trk);
0309     }
0310     for (const auto& trk : el.trkpMode()) {
0311       histos.hTrack_pMode_Barrel->Fill(trk);
0312     }
0313     for (const auto& trk : el.trketaMode()) {
0314       histos.hTrack_etaMode_Barrel->Fill(trk);
0315     }
0316     for (const auto& trk : el.trkphiMode()) {
0317       histos.hTrack_phiMode_Barrel->Fill(trk);
0318     }
0319     for (const auto& trk : el.trkqoverpModeError()) {
0320       histos.hTrack_qoverpModeError_Barrel->Fill(trk);
0321     }
0322 
0323     if (passBaseDST) {
0324       if (pt_order == 0) {
0325         histos.leading_electron.hPt_Barrel_passBaseDST->Fill(el.pt());
0326         histos.leading_electron.hEta_passBaseDST->Fill(el.eta());
0327         for (unsigned int iTrig = 0; iTrig < vtriggerSelection_.size(); iTrig++) {
0328           if (scoutingElectron_passHLT(el, legObjectsCollection[iTrig])) {
0329             histos.leading_electron.hPt_Barrel_fireTrigObj[iTrig]->Fill(el.pt());
0330             histos.leading_electron.hEta_fireTrigObj[iTrig]->Fill(el.eta());
0331           }
0332         }
0333       } else if (pt_order == 1) {
0334         histos.subleading_electron.hPt_Barrel_passBaseDST->Fill(el.pt());
0335         histos.subleading_electron.hEta_passBaseDST->Fill(el.eta());
0336         for (unsigned int iTrig = 0; iTrig < vtriggerSelection_.size(); iTrig++) {
0337           if (scoutingElectron_passHLT(el, legObjectsCollection[iTrig])) {
0338             histos.subleading_electron.hPt_Barrel_fireTrigObj[iTrig]->Fill(el.pt());
0339             histos.subleading_electron.hEta_fireTrigObj[iTrig]->Fill(el.eta());
0340           }
0341         }
0342       }
0343     }
0344   } else {
0345     histos.hPt_Endcap->Fill(el.pt());
0346     if (scoutingDQMUtils::scoutingElectronID(el))
0347       histos.hPt_Endcap_passID->Fill(el.pt());
0348     histos.hHoverE_Endcap->Fill(el.hOverE());
0349     histos.hOoEMOoP_Endcap->Fill(el.ooEMOop());
0350     histos.hdPhiIn_Endcap->Fill(fabs(el.dPhiIn()));
0351     histos.hdEtaIn_Endcap->Fill(fabs(el.dEtaIn()));
0352     histos.hSigmaIetaIeta_Endcap->Fill(el.sigmaIetaIeta());
0353     histos.hMissingHits_Endcap->Fill(el.missingHits());
0354     histos.hTrackfbrem_Endcap->Fill(el.trackfbrem());
0355     histos.hRelEcalIsolation_Endcap->Fill(el.ecalIso() / el.pt());
0356     histos.hRelHcalIsolation_Endcap->Fill(el.hcalIso() / el.pt());
0357     histos.hRelTrackIsolation_Endcap->Fill(el.trackIso() / el.pt());
0358     for (const auto& trk : el.trkpt()) {
0359       histos.hTrack_pt_Endcap->Fill(trk);
0360     }
0361     for (const auto& trk : el.trkpMode()) {
0362       histos.hTrack_pMode_Endcap->Fill(trk);
0363     }
0364     for (const auto& trk : el.trketaMode()) {
0365       histos.hTrack_etaMode_Endcap->Fill(trk);
0366     }
0367     for (const auto& trk : el.trkphiMode()) {
0368       histos.hTrack_phiMode_Endcap->Fill(trk);
0369     }
0370     for (const auto& trk : el.trkqoverpModeError()) {
0371       histos.hTrack_qoverpModeError_Endcap->Fill(trk);
0372     }
0373 
0374     if (passBaseDST) {
0375       if (pt_order == 0) {
0376         histos.leading_electron.hPt_Endcap_passBaseDST->Fill(el.pt());
0377         histos.leading_electron.hEta_passBaseDST->Fill(el.eta());
0378         for (unsigned int iTrig = 0; iTrig < vtriggerSelection_.size(); iTrig++) {
0379           if (scoutingElectron_passHLT(el, legObjectsCollection[iTrig])) {
0380             histos.leading_electron.hPt_Endcap_fireTrigObj[iTrig]->Fill(el.pt());
0381             histos.leading_electron.hEta_fireTrigObj[iTrig]->Fill(el.eta());
0382           }
0383         }
0384       } else if (pt_order == 1) {
0385         histos.subleading_electron.hPt_Endcap_passBaseDST->Fill(el.pt());
0386         histos.subleading_electron.hEta_passBaseDST->Fill(el.eta());
0387         for (unsigned int iTrig = 0; iTrig < vtriggerSelection_.size(); iTrig++) {
0388           if (scoutingElectron_passHLT(el, legObjectsCollection[iTrig])) {
0389             histos.subleading_electron.hPt_Endcap_fireTrigObj[iTrig]->Fill(el.pt());
0390             histos.subleading_electron.hEta_fireTrigObj[iTrig]->Fill(el.eta());
0391           }
0392         }
0393       }
0394     }
0395   }
0396 }
0397 
0398 void ScoutingElectronTagProbeAnalyzer::bookHistograms(DQMStore::IBooker& ibook,
0399                                                       edm::Run const& run,
0400                                                       edm::EventSetup const& iSetup,
0401                                                       kSctTagProbeHistos& histos) const {
0402   ibook.setCurrentFolder(outputInternalPath_);
0403   bookHistograms_resonance(ibook, run, iSetup, histos.resonanceZ, "resonanceZ");
0404   bookHistograms_resonance(ibook, run, iSetup, histos.resonanceJ, "resonanceJ");
0405   bookHistograms_resonance(ibook, run, iSetup, histos.resonanceY, "resonanceY");
0406   bookHistograms_resonance(ibook, run, iSetup, histos.resonanceAll, "resonanceAll");
0407 }
0408 
0409 void ScoutingElectronTagProbeAnalyzer::bookHistograms_resonance(DQMStore::IBooker& ibook,
0410                                                                 edm::Run const& run,
0411                                                                 edm::EventSetup const& iSetup,
0412                                                                 kSctProbeKinematicHistos& histos,
0413                                                                 const std::string& name) const {
0414   ibook.setCurrentFolder(outputInternalPath_);
0415   histos.hPt_Barrel =
0416       ibook.book1D(name + "_Probe_sctElectron_Pt_Barrel", name + "_Probe_sctElectron_Pt_Barrel", 500, 0, 500);
0417   histos.hPt_Endcap =
0418       ibook.book1D(name + "_Probe_sctElectron_Pt_Endcap", name + "_Probe_sctElectron_Pt_Endcap", 500, 0, 500);
0419 
0420   histos.hEta = ibook.book1D(name + "_Probe_sctElectron_Eta", name + "_Probe_sctElectron_Eta", 100, -5.0, 5.0);
0421   histos.hPhi = ibook.book1D(name + "_Probe_sctElectron_Phi", name + "_Probe_sctElectron_Phi", 100, -3.3, 3.3);
0422 
0423   histos.hHoverE_Barrel =
0424       ibook.book1D(name + "_Probe_sctElectron_HoverE_Barrel", name + "_Probe_sctElectron_HoverE_Barrel", 500, 0, 0.5);
0425   histos.hHoverE_Endcap =
0426       ibook.book1D(name + "_Probe_sctElectron_HoverE_Endcap", name + "_Probe_sctElectron_HoverE_Endcap", 500, 0, 0.5);
0427 
0428   histos.hOoEMOoP_Barrel = ibook.book1D(
0429       name + "_Probe_sctElectron_OoEMOoP_Barrel", name + "_Probe_sctElectron_OoEMOoP_Barrel", 500, -0.2, 0.2);
0430   histos.hOoEMOoP_Endcap = ibook.book1D(
0431       name + "_Probe_sctElectron_OoEMOoP_Endcap", name + "_Probe_sctElectron_OoEMOoP_Endcap", 500, -0.2, 0.2);
0432 
0433   histos.hdPhiIn_Barrel =
0434       ibook.book1D(name + "_Probe_sctElectron_dPhiIn_Barrel", name + "_Probe_sctElectron_dPhiIn_Barrel", 100, 0, 0.1);
0435   histos.hdPhiIn_Endcap =
0436       ibook.book1D(name + "_Probe_sctElectron_dPhiIn_Endcap", name + "_Probe_sctElectron_dPhiIn_Endcap", 100, 0, 0.1);
0437 
0438   histos.hdEtaIn_Barrel =
0439       ibook.book1D(name + "_Probe_sctElectron_dEtaIn_Barrel", name + "_Probe_sctElectron_dEtaIn_Barrel", 100, 0, 0.1);
0440   histos.hdEtaIn_Endcap =
0441       ibook.book1D(name + "_Probe_sctElectron_dEtaIn_Endcap", name + "_Probe_sctElectron_dEtaIn_Endcap", 100, 0, 0.1);
0442 
0443   histos.hSigmaIetaIeta_Barrel = ibook.book1D(
0444       name + "_Probe_sctElectron_SigmaIetaIeta_Barrel", name + "_Probe_sctElectron_SigmaIetaIeta_Barrel", 500, 0, 0.05);
0445   histos.hSigmaIetaIeta_Endcap = ibook.book1D(
0446       name + "_Probe_sctElectron_SigmaIetaIeta_Endcap", name + "_Probe_sctElectron_SigmaIetaIeta_Endcap", 500, 0, 0.05);
0447 
0448   histos.hMissingHits_Barrel = ibook.book1D(
0449       name + "_Probe_sctElectron_MissingHits_Barrel", name + "_Probe_sctElectron_MissingHits_Barrel", 21, -0.5, 20.5);
0450   histos.hMissingHits_Endcap = ibook.book1D(
0451       name + "_Probe_sctElectron_MissingHits_Endcap", name + "_Probe_sctElectron_MissingHits_Endcap", 21, -0.5, 20.5);
0452 
0453   histos.hTrackfbrem_Barrel = ibook.book1D(
0454       name + "_Probe_sctElectron_Trackfbrem_Barrel", name + "_Probe_sctElectron_Trackfbrem_Barrel", 100, 0, 1.0);
0455   histos.hTrackfbrem_Endcap = ibook.book1D(
0456       name + "_Probe_sctElectron_Trackfbrem_Endcap", name + "_Probe_sctElectron_Trackfbrem_Endcap", 100, 0, 1.0);
0457 
0458   histos.hTrack_pt_Barrel = ibook.book1D(
0459       name + "_Probe_sctElectron_Track_pt_Barrel", name + "_Probe_sctElectron_Track_pt_Barrel", 200, 0, 100.0);
0460   histos.hTrack_pt_Endcap = ibook.book1D(
0461       name + "_Probe_sctElectron_Track_pt_Endcap", name + "_Probe_sctElectron_Track_pt_Endcap", 200, 0, 100.0);
0462 
0463   histos.hTrack_pMode_Barrel = ibook.book1D(
0464       name + "_Probe_sctElectron_Track_pMode_Barrel", name + "_Probe_sctElectron_Track_pMode_Barrel", 50, -0.5, 49.5);
0465   histos.hTrack_pMode_Endcap = ibook.book1D(
0466       name + "_Probe_sctElectron_Track_pMode_Endcap", name + "_Probe_sctElectron_Track_pMode_Endcap", 50, -0.5, 49.5);
0467 
0468   histos.hTrack_etaMode_Barrel = ibook.book1D(
0469       name + "_Probe_sctElectron_Track_etaMode_Barrel", name + "_Probe_sctElectron_Track_etaMode_Barrel", 26, -6.5, 6.5);
0470   histos.hTrack_etaMode_Endcap = ibook.book1D(
0471       name + "_Probe_sctElectron_Track_etaMode_Endcap", name + "_Probe_sctElectron_Track_etaMode_Endcap", 26, -6.5, 6.5);
0472 
0473   histos.hTrack_phiMode_Barrel = ibook.book1D(
0474       name + "_Probe_sctElectron_Track_phiMode_Barrel", name + "_Probe_sctElectron_Track_phiMode_Barrel", 18, -4.5, 4.5);
0475   histos.hTrack_phiMode_Endcap = ibook.book1D(
0476       name + "_Probe_sctElectron_Track_phiMode_Endcap", name + "_Probe_sctElectron_Track_phiMode_Endcap", 18, -4.5, 4.5);
0477 
0478   histos.hTrack_qoverpModeError_Barrel = ibook.book1D(name + "_Probe_sctElectron_Track_qoverpModeError_Barrel",
0479                                                       name + "_Probe_sctElectron_Track_qoverpModeError_Barrel",
0480                                                       36,
0481                                                       -4.5,
0482                                                       4.5);
0483   histos.hTrack_qoverpModeError_Endcap = ibook.book1D(name + "_Probe_sctElectron_Track_qoverpModeError_Endcap",
0484                                                       name + "_Probe_sctElectron_Track_qoverpModeError_Endcap",
0485                                                       36,
0486                                                       -4.5,
0487                                                       4.5);
0488 
0489   histos.hRelEcalIsolation_Barrel = ibook.book1D(name + "_Probe_sctElectron_RelEcalIsolation_Barrel",
0490                                                  name + "_Probe_sctElectron_RelEcalIsolation_Barrel",
0491                                                  100,
0492                                                  0,
0493                                                  1.0);
0494   histos.hRelEcalIsolation_Endcap = ibook.book1D(name + "_Probe_sctElectron_RelEcalIsolation_Endcap",
0495                                                  name + "_Probe_sctElectron_RelEcalIsolation_Endcap",
0496                                                  100,
0497                                                  0,
0498                                                  1.0);
0499 
0500   histos.hRelHcalIsolation_Barrel = ibook.book1D(name + "_Probe_sctElectron_RelHcalIsolation_Barrel",
0501                                                  name + "_Probe_sctElectron_RelHcalIsolation_Barrel",
0502                                                  100,
0503                                                  0,
0504                                                  1.0);
0505   histos.hRelHcalIsolation_Endcap = ibook.book1D(name + "_Probe_sctElectron_RelHcalIsolation_Endcap",
0506                                                  name + "_Probe_sctElectron_RelHcalIsolation_Endcap",
0507                                                  100,
0508                                                  0,
0509                                                  1.0);
0510 
0511   histos.hRelTrackIsolation_Barrel = ibook.book1D(name + "_Probe_sctElectron_RelTrackIsolation_Barrel",
0512                                                   name + "_Probe_sctElectron_RelTrackIsolation_Barrel",
0513                                                   100,
0514                                                   0,
0515                                                   1.0);
0516   histos.hRelTrackIsolation_Endcap = ibook.book1D(name + "_Probe_sctElectron_RelTrackIsolation_Endcap",
0517                                                   name + "_Probe_sctElectron_RelTrackIsolation_Endcap",
0518                                                   100,
0519                                                   0,
0520                                                   1.0);
0521   histos.hInvMass =
0522       ibook.book1D(name + "_sctElectron_Invariant_Mass", name + "_sctElectron_Invariant_Mass", 800, 0, 200);
0523 
0524   histos.hPt_Barrel_passID = ibook.book1D(
0525       name + "_Probe_sctElectron_Pt_Barrel_passID", name + "_Probe_sctElectron_Pt_Barrel_passID", 500, 0, 500);
0526   histos.hPt_Endcap_passID = ibook.book1D(
0527       name + "_Probe_sctElectron_Pt_Endcap_passID", name + "_Probe_sctElectron_Pt_Endcap_passID", 500, 0, 500);
0528 
0529   // Leading Electron
0530   histos.leading_electron.hPt_Barrel_passBaseDST =
0531       ibook.book1D(name + "_leading_Pt_Barrel_passBaseDST", name + "_leading_Pt_Barrel_passBaseDST", 40, 0, 200);
0532   histos.leading_electron.hPt_Endcap_passBaseDST =
0533       ibook.book1D(name + "_leading_Pt_Endcap_passBaseDST", name + "_leading_Pt_Endcap_passBaseDST", 40, 0, 200);
0534   histos.leading_electron.hEta_passBaseDST =
0535       ibook.book1D(name + "_leading_Eta_passBaseDST", name + "_leading_Eta_passBaseDST", 20, -5.0, 5.0);
0536 
0537   // Sub-Leading Electron
0538   histos.subleading_electron.hPt_Barrel_passBaseDST =
0539       ibook.book1D(name + "_subleading_Pt_Barrel_passBaseDST", name + "_subleading_Pt_Barrel_passBaseDST", 40, 0, 200);
0540   histos.subleading_electron.hPt_Endcap_passBaseDST =
0541       ibook.book1D(name + "_subleading_Pt_Endcap_passBaseDST", name + "_subleading_Pt_Endcap_passBaseDST", 40, 0, 200);
0542   histos.subleading_electron.hEta_passBaseDST =
0543       ibook.book1D(name + "_subleading_Eta_passBaseDST", name + "_subleading_Eta_passBaseDST", 20, -5.0, 5.0);
0544 
0545   for (auto const& vt : vtriggerSelection_) {
0546     std::string cleaned_vt = vt;
0547     cleaned_vt.erase(std::remove(cleaned_vt.begin(), cleaned_vt.end(), '*'), cleaned_vt.end());
0548 
0549     // Leading Electron
0550 
0551     histos.leading_electron.hPt_Barrel_fireTrigObj.push_back(
0552         ibook.book1D(name + "_leading_Pt_Barrel_pass" + cleaned_vt + "_fireTrigObj",
0553                      name + "_leading_Pt_Barrel_pass" + cleaned_vt + "_fireTrigObj",
0554                      40,
0555                      0,
0556                      200));
0557     histos.leading_electron.hPt_Endcap_fireTrigObj.push_back(
0558         ibook.book1D(name + "_leading_Pt_Endcap_pass" + cleaned_vt + "_fireTrigObj",
0559                      name + "_leading_Pt_Endcap_pass" + cleaned_vt + "_fireTrigObj",
0560                      40,
0561                      0,
0562                      200));
0563     histos.leading_electron.hEta_fireTrigObj.push_back(
0564         ibook.book1D(name + "_leading_Eta_pass" + cleaned_vt + "_fireTrigObj",
0565                      name + "_leading_Eta_pass" + cleaned_vt + "_fireTrigObj",
0566                      20,
0567                      -5.0,
0568                      5.0));
0569 
0570     // SubLeading Electron
0571 
0572     histos.subleading_electron.hPt_Barrel_fireTrigObj.push_back(
0573         ibook.book1D(name + "_subleading_Pt_Barrel_pass" + cleaned_vt + "_fireTrigObj",
0574                      name + "_subleading_Pt_Barrel_pass" + cleaned_vt + "_fireTrigObj",
0575                      40,
0576                      0,
0577                      200));
0578     histos.subleading_electron.hPt_Endcap_fireTrigObj.push_back(
0579         ibook.book1D(name + "_subleading_Pt_Endcap_pass" + cleaned_vt + "_fireTrigObj",
0580                      name + "_subleading_Pt_Endcap_pass" + cleaned_vt + "_fireTrigObj",
0581                      40,
0582                      0,
0583                      200));
0584     histos.subleading_electron.hEta_fireTrigObj.push_back(
0585         ibook.book1D(name + "_subleading_Eta_pass" + cleaned_vt + "_fireTrigObj",
0586                      name + "_subleading_Eta_pass" + cleaned_vt + "_fireTrigObj",
0587                      20,
0588                      -5.0,
0589                      5.0));
0590   }
0591 }
0592 
0593 // ------------ method fills 'descriptions' with the allowed parameters for the
0594 // module  ------------
0595 void ScoutingElectronTagProbeAnalyzer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0596   edm::ParameterSetDescription desc;
0597   desc.add<std::string>("OutputInternalPath", "MY_FOLDER");
0598   desc.add<vector<string>>("BaseTriggerSelection", {});
0599   desc.add<vector<string>>("triggerSelection", {});
0600   desc.add<vector<string>>("finalfilterSelection", {});
0601   desc.add<edm::InputTag>("TriggerResultTag", edm::InputTag("TriggerResults", "", "HLT"));
0602   desc.add<edm::InputTag>("TriggerObjects", edm::InputTag("slimmedPatTrigger"));
0603   desc.add<edm::InputTag>("ElectronCollection", edm::InputTag("slimmedElectrons"));
0604   desc.add<edm::InputTag>("ScoutingElectronCollection", edm::InputTag("Run3ScoutingElectrons"));
0605   descriptions.addWithDefaultLabel(desc);
0606 }
0607 
0608 DEFINE_FWK_MODULE(ScoutingElectronTagProbeAnalyzer);