diff --git a/DQMOffline/Lumi/BuildFile.xml b/DQMOffline/Lumi/BuildFile.xml
index a4a3e935ec662..c190a7442cfe0 100644
--- a/DQMOffline/Lumi/BuildFile.xml
+++ b/DQMOffline/Lumi/BuildFile.xml
@@ -4,6 +4,7 @@
+
diff --git a/DQMOffline/Lumi/interface/TTrigger.h b/DQMOffline/Lumi/interface/TTrigger.h
deleted file mode 100644
index a86e39eba0318..0000000000000
--- a/DQMOffline/Lumi/interface/TTrigger.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef DQMOFFLINE_LUMI_TTRIGGER_H
-#define DQMOFFLINE_LUMI_TTRIGGER_H
-
-#include "DQMOffline/Lumi/interface/TriggerRecord.h" // class to handle user specified trigger info
-#include "DQMOffline/Lumi/interface/TriggerDefs.h"
-
-namespace ZCountingTrigger {
- class TTrigger {
- public:
- TTrigger(const std::vector &muonTriggerNames, const std::vector &muonTriggerObjectNames);
- ~TTrigger() {}
-
- // Methods
- int getTriggerBit(const std::string &iName) const;
- int getTriggerObjectBit(const std::string &iName, const std::string &iObjName) const;
- bool pass(const std::string &iName, const TriggerBits &iTrig) const;
- bool passObj(const std::string &iName, const std::string &iObjName, const TriggerObjects &iTrigObj) const;
-
- std::vector fRecords;
- };
-} // namespace ZCountingTrigger
-#endif
diff --git a/DQMOffline/Lumi/interface/TriggerDefs.h b/DQMOffline/Lumi/interface/TriggerDefs.h
deleted file mode 100644
index a00f926cdda79..0000000000000
--- a/DQMOffline/Lumi/interface/TriggerDefs.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef DQMOFFLINE_LUMI_TRIGGERDEFS_H
-#define DQMOFFLINE_LUMI_TRIGGERDEFS_H
-
-#include
-
-const unsigned int kNTrigBit = 128;
-typedef std::bitset TriggerBits;
-const unsigned int kNTrigObjectBit = 256;
-typedef std::bitset TriggerObjects;
-
-#endif
diff --git a/DQMOffline/Lumi/interface/TriggerRecord.h b/DQMOffline/Lumi/interface/TriggerRecord.h
deleted file mode 100644
index 197ba0e59283c..0000000000000
--- a/DQMOffline/Lumi/interface/TriggerRecord.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef DQMOFFLINE_LUMI_TRIGGERRECORD_H
-#define DQMOFFLINE_LUMI_TRIGGERRECORD_H
-
-#include
-#include
-#include
-
-namespace ZCountingTrigger {
-
- class TriggerRecord {
- public:
- TriggerRecord(const std::string &name = "", const unsigned int value = 0) {
- hltPattern = name;
- baconTrigBit = value;
- hltPathName = "";
- hltPathIndex = (unsigned int)-1;
- }
- ~TriggerRecord() {}
-
- std::string hltPattern; // HLT path name/pattern (wildcards allowed: *,?)
- unsigned int baconTrigBit; // bacon trigger bit
- std::string hltPathName; // HLT path name in trigger menu
- unsigned int hltPathIndex; // HLT path index in trigger menu
-
- // map between trigger object name and bacon trigger object bit
- std::vector > objectMap;
- };
-
-} // namespace ZCountingTrigger
-#endif
diff --git a/DQMOffline/Lumi/interface/TriggerTools.h b/DQMOffline/Lumi/interface/TriggerTools.h
index 13c3cba091ab4..d1417b4ad628d 100644
--- a/DQMOffline/Lumi/interface/TriggerTools.h
+++ b/DQMOffline/Lumi/interface/TriggerTools.h
@@ -1,20 +1,73 @@
#ifndef DQMOFFLINE_LUMI_TRIGGERTOOLS_H
#define DQMOFFLINE_LUMI_TRIGGERTOOLS_H
-#include "DQMOffline/Lumi/interface/TriggerDefs.h"
-#include "DQMOffline/Lumi/interface/TriggerRecord.h"
+#include "FWCore/Framework/interface/Event.h"
+#include "FWCore/ParameterSet/interface/ParameterSet.h"
+#include "FWCore/MessageLogger/interface/MessageLogger.h"
+#include "FWCore/Common/interface/TriggerNames.h"
+#include "DataFormats/Common/interface/TriggerResults.h"
#include "DataFormats/HLTReco/interface/TriggerEvent.h"
-#include
+#include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
-namespace ZCountingTrigger {
+#include
- class TriggerTools {
- public:
- static TriggerObjects matchHLT(const double eta,
- const double phi,
- const std::vector &triggerRecords,
- const trigger::TriggerEvent &triggerEvent);
+const unsigned int kNTrigBit = 128;
+typedef std::bitset TriggerBits;
+const unsigned int kNTrigObjectBit = 256;
+typedef std::bitset TriggerObjectBits;
+
+class TriggerTools {
+public:
+ TriggerTools(){};
+ ~TriggerTools(){};
+
+ void readEvent(const edm::Event &iEvent);
+
+ void setTriggerResultsToken(edm::EDGetTokenT token) { fHLTTag_token = token; }
+ void setTriggerEventToken(edm::EDGetTokenT token) { fHLTObjTag_token = token; }
+ void setDRMAX(const double _drMax) { DRMAX = _drMax; }
+
+ void addTriggerRecord(const std::string &name) {
+ Record rec;
+ rec.hltPattern = name;
+ records.push_back(rec);
+ }
+ void addTriggerRecord(const std::string &name, const std::string &objName) {
+ Record rec;
+ rec.hltPattern = name;
+ rec.hltObjName = objName;
+ records.push_back(rec);
+ }
+
+ void initHLTObjects(const HLTConfigProvider &hltConfigProvider_);
+
+ bool pass() const;
+ bool passObj(const double eta, const double phi) const;
+
+private:
+ struct Record {
+ std::string hltPattern; // HLT path name/pattern (wildcards allowed: *,?)
+ std::string hltPathName = ""; // HLT path name in trigger menu
+ unsigned int hltPathIndex = (unsigned int)-1; // HLT path index in trigger menu
+ std::string hltObjName = ""; // trigger object name in trigger menu
};
+ std::vector records;
+
+ edm::EDGetTokenT fHLTTag_token;
+ edm::EDGetTokenT fHLTObjTag_token;
+
+ edm::Handle hTrgRes;
+ edm::Handle hTrgEvt;
+
+ edm::ParameterSetID fTriggerNamesID;
+
+ // initialization from HLT menu; needs to be called on every change in HLT menu
+ void initPathNames(const std::vector &triggerNames);
+
+ TriggerBits triggerBits;
+
+ // Matching parameter
+ double DRMAX = 0.1;
+};
-} // namespace ZCountingTrigger
#endif
diff --git a/DQMOffline/Lumi/plugins/ZCounting.cc b/DQMOffline/Lumi/plugins/ZCounting.cc
index 8795ddaad3d7c..00963672c5907 100644
--- a/DQMOffline/Lumi/plugins/ZCounting.cc
+++ b/DQMOffline/Lumi/plugins/ZCounting.cc
@@ -8,76 +8,61 @@
#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/MuonReco/interface/MuonSelectors.h"
-#include "DQMOffline/Lumi/interface/TriggerDefs.h"
-#include "DQMOffline/Lumi/interface/TTrigger.h"
-#include "DQMOffline/Lumi/interface/TriggerTools.h"
-
#include
#include
#include "DQMOffline/Lumi/plugins/ZCounting.h"
-using namespace ZCountingTrigger;
-
//
// -------------------------------------- Constructor --------------------------------------------
//
ZCounting::ZCounting(const edm::ParameterSet& iConfig)
- : fHLTObjTag(iConfig.getParameter("TriggerEvent")),
- fHLTTag(iConfig.getParameter("TriggerResults")),
- fPVName(iConfig.getUntrackedParameter("edmPVName", "offlinePrimaryVertices")),
- fMuonName(iConfig.getUntrackedParameter("edmName", "muons")),
- fTrackName(iConfig.getUntrackedParameter("edmTrackName", "generalTracks")),
-
- // Electron-specific Parameters
- fElectronName(iConfig.getUntrackedParameter("edmGsfEleName", "gedGsfElectrons")),
- fSCName(iConfig.getUntrackedParameter("edmSCName", "particleFlowEGamma")),
-
- // Electron-specific Tags
- fRhoTag(iConfig.getParameter("rhoname")),
- fBeamspotTag(iConfig.getParameter("beamspotName")),
- fConversionTag(iConfig.getParameter("conversionsName")),
-
- // Electron-specific Cuts
- ELE_PT_CUT_TAG(iConfig.getUntrackedParameter("PtCutEleTag")),
- ELE_PT_CUT_PROBE(iConfig.getUntrackedParameter("PtCutEleProbe")),
- ELE_ETA_CUT_TAG(iConfig.getUntrackedParameter("EtaCutEleTag")),
- ELE_ETA_CUT_PROBE(iConfig.getUntrackedParameter("EtaCutEleProbe")),
-
- ELE_MASS_CUT_LOW(iConfig.getUntrackedParameter("MassCutEleLow")),
- ELE_MASS_CUT_HIGH(iConfig.getUntrackedParameter("MassCutEleHigh")),
-
- ELE_ID_WP(iConfig.getUntrackedParameter("ElectronIDType", "TIGHT")),
- EleID_(ElectronIdentifier(iConfig)) {
+ : triggerResultsInputTag_(iConfig.getParameter("TriggerResults")),
+ fPVName_token(consumes(
+ iConfig.getUntrackedParameter("edmPVName", "offlinePrimaryVertices"))),
+ fMuonName_token(consumes(iConfig.getUntrackedParameter("edmName", "muons"))),
+ fTrackName_token(
+ consumes(iConfig.getUntrackedParameter("edmTrackName", "generalTracks"))),
+
+ PtCutL1_(iConfig.getUntrackedParameter("PtCutL1")),
+ PtCutL2_(iConfig.getUntrackedParameter("PtCutL2")),
+ EtaCutL1_(iConfig.getUntrackedParameter("EtaCutL1")),
+ EtaCutL2_(iConfig.getUntrackedParameter("EtaCutL2")),
+
+ MassBin_(iConfig.getUntrackedParameter("MassBin")),
+ MassMin_(iConfig.getUntrackedParameter("MassMin")),
+ MassMax_(iConfig.getUntrackedParameter("MassMax")),
+
+ LumiBin_(iConfig.getUntrackedParameter("LumiBin")),
+ LumiMin_(iConfig.getUntrackedParameter("LumiMin")),
+ LumiMax_(iConfig.getUntrackedParameter("LumiMax")),
+
+ PVBin_(iConfig.getUntrackedParameter("PVBin")),
+ PVMin_(iConfig.getUntrackedParameter("PVMin")),
+ PVMax_(iConfig.getUntrackedParameter("PVMax")),
+
+ VtxNTracksFitCut_(iConfig.getUntrackedParameter("VtxNTracksFitMin")),
+ VtxNdofCut_(iConfig.getUntrackedParameter("VtxNdofMin")),
+ VtxAbsZCut_(iConfig.getUntrackedParameter("VtxAbsZMax")),
+ VtxRhoCut_(iConfig.getUntrackedParameter("VtxRhoMax")),
+
+ IDTypestr_(iConfig.getUntrackedParameter("IDType")),
+ IsoTypestr_(iConfig.getUntrackedParameter("IsoType")),
+ IsoCut_(iConfig.getUntrackedParameter("IsoCut")) {
edm::LogInfo("ZCounting") << "Constructor ZCounting::ZCounting " << std::endl;
- //Get parameters from configuration file
- fHLTTag_token = consumes(fHLTTag);
- fHLTObjTag_token = consumes(fHLTObjTag);
- fPVName_token = consumes(fPVName);
- fMuonName_token = consumes(fMuonName);
- fTrackName_token = consumes(fTrackName);
-
- // Trigger-specific Parameters
- fMuonHLTNames = iConfig.getParameter>("MuonTriggerNames");
- fMuonHLTObjectNames = iConfig.getParameter>("MuonTriggerObjectNames");
- if (fMuonHLTNames.size() != fMuonHLTObjectNames.size()) {
- edm::LogError("ZCounting") << "List of MuonTriggerNames and MuonTriggerObjectNames has to be the same length"
- << std::endl;
- }
-
- // Electron-specific parameters
- fGsfElectronName_token = consumes>(fElectronName);
- fSCName_token = consumes>(fSCName);
- fRhoToken = consumes(fRhoTag);
- fBeamspotToken = consumes(fBeamspotTag);
- fConversionToken = consumes(fConversionTag);
+ // Trigger settings
+ triggers = new TriggerTools();
+ triggers->setTriggerResultsToken(consumes(triggerResultsInputTag_));
+ triggers->setTriggerEventToken(consumes(iConfig.getParameter("TriggerEvent")));
+ triggers->setDRMAX(DRMAX);
- // Muon-specific Cuts
- IDTypestr_ = iConfig.getUntrackedParameter("IDType");
- IsoTypestr_ = iConfig.getUntrackedParameter("IsoType");
- IsoCut_ = iConfig.getUntrackedParameter("IsoCut");
+ edm::LogVerbatim("ZCounting") << "ZCounting::ZCounting set trigger names";
+ const std::vector patterns_ = iConfig.getParameter>("MuonTriggerNames");
+ for (const std::string& pattern_ : patterns_) {
+ triggers->addTriggerRecord(pattern_);
+ }
if (IDTypestr_ == "Loose")
IDType_ = LooseID;
@@ -85,6 +70,8 @@ ZCounting::ZCounting(const edm::ParameterSet& iConfig)
IDType_ = MediumID;
else if (IDTypestr_ == "Tight")
IDType_ = TightID;
+ else if (IDTypestr_ == "CustomTight")
+ IDType_ = CustomTightID;
else
IDType_ = NoneID;
@@ -94,30 +81,6 @@ ZCounting::ZCounting(const edm::ParameterSet& iConfig)
IsoType_ = PFIso;
else
IsoType_ = NoneIso;
-
- PtCutL1_ = iConfig.getUntrackedParameter("PtCutL1");
- PtCutL2_ = iConfig.getUntrackedParameter("PtCutL2");
- EtaCutL1_ = iConfig.getUntrackedParameter("EtaCutL1");
- EtaCutL2_ = iConfig.getUntrackedParameter("EtaCutL2");
-
- MassBin_ = iConfig.getUntrackedParameter("MassBin");
- MassMin_ = iConfig.getUntrackedParameter("MassMin");
- MassMax_ = iConfig.getUntrackedParameter("MassMax");
-
- LumiBin_ = iConfig.getUntrackedParameter("LumiBin");
- LumiMin_ = iConfig.getUntrackedParameter("LumiMin");
- LumiMax_ = iConfig.getUntrackedParameter("LumiMax");
-
- PVBin_ = iConfig.getUntrackedParameter("PVBin");
- PVMin_ = iConfig.getUntrackedParameter("PVMin");
- PVMax_ = iConfig.getUntrackedParameter("PVMax");
-
- VtxNTracksFitCut_ = iConfig.getUntrackedParameter("VtxNTracksFitMin");
- VtxNdofCut_ = iConfig.getUntrackedParameter("VtxNdofMin");
- VtxAbsZCut_ = iConfig.getUntrackedParameter("VtxAbsZMax");
- VtxRhoCut_ = iConfig.getUntrackedParameter("VtxRhoMax");
-
- EleID_.setID(ELE_ID_WP);
}
//
@@ -128,12 +91,29 @@ ZCounting::~ZCounting() { edm::LogInfo("ZCounting") << "Destructor ZCounting::~Z
//
// -------------------------------------- beginRun --------------------------------------------
//
-void ZCounting::dqmBeginRun(edm::Run const&, edm::EventSetup const&) {
+void ZCounting::dqmBeginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
edm::LogInfo("ZCounting") << "ZCounting::beginRun" << std::endl;
- // Triggers
- fTrigger = std::make_unique(fMuonHLTNames, fMuonHLTObjectNames);
+ // initialize triggers
+
+ edm::LogVerbatim("ZCounting") << "ZCounting::dqmBeginRun now at " << iRun.id();
+ bool hltChanged_ = true;
+ if (hltConfigProvider_.init(iRun, iSetup, triggerResultsInputTag_.process(), hltChanged_)) {
+ edm::LogVerbatim("ZCounting") << "ZCounting::dqmBeginRun [TriggerObjMatchValueMapsProducer::beginRun] "
+ "HLTConfigProvider initialized [processName() = \""
+ << hltConfigProvider_.processName() << "\", tableName() = \""
+ << hltConfigProvider_.tableName() << "\", size() = " << hltConfigProvider_.size()
+ << "]";
+ } else {
+ edm::LogError("ZCounting") << "ZCounting::dqmBeginRun Initialization of HLTConfigProvider failed for Run="
+ << iRun.id() << " (process=\"" << triggerResultsInputTag_.process()
+ << "\") -> plugin will not produce outputs for this Run";
+ return;
+ }
+
+ triggers->initHLTObjects(hltConfigProvider_);
}
+
//
// -------------------------------------- bookHistos --------------------------------------------
//
@@ -143,164 +123,137 @@ void ZCounting::bookHistograms(DQMStore::IBooker& ibooker_, edm::Run const&, edm
ibooker_.setCurrentFolder("ZCounting/Histograms");
// Muon histograms
- h_mass_HLT_pass_central = ibooker_.book2D("h_mass_HLT_pass_central",
- "Muon HLT passing probes central",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_HLT_pass_forward = ibooker_.book2D("h_mass_HLT_pass_forward",
- "Muon HLT passing probes forward",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_HLT_fail_central = ibooker_.book2D("h_mass_HLT_fail_central",
- "Muon HLT failing probes central",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_HLT_fail_forward = ibooker_.book2D("h_mass_HLT_fail_forward",
- "Muon HLT failing probes forward",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
-
- h_mass_SIT_pass_central = ibooker_.book2D("h_mass_SIT_pass_central",
- "Muon SIT passing probes central",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_SIT_pass_forward = ibooker_.book2D("h_mass_SIT_pass_forward",
- "Muon SIT passing probes forward",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_SIT_fail_central = ibooker_.book2D("h_mass_SIT_fail_central",
- "Muon SIT_failing probes central",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_SIT_fail_forward = ibooker_.book2D("h_mass_SIT_fail_forward",
- "Muon SIT failing probes forward",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
-
- h_mass_Glo_pass_central = ibooker_.book2D("h_mass_Glo_pass_central",
- "Muon Glo passing probes central",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_Glo_pass_forward = ibooker_.book2D("h_mass_Glo_pass_forward",
- "Muon Glo passing probes forward",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_Glo_fail_central = ibooker_.book2D("h_mass_Glo_fail_central",
- "Muon Glo failing probes central",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
- h_mass_Glo_fail_forward = ibooker_.book2D("h_mass_Glo_fail_forward",
- "Muon Glo failing probes forward",
- LumiBin_,
- LumiMin_,
- LumiMax_,
- MassBin_,
- MassMin_,
- MassMax_);
+ h_mass_2HLT_BB = ibooker_.book2D("h_mass_2HLT_BB",
+ "Both muon pass HLT in barrel-barrel",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_mass_2HLT_BE = ibooker_.book2D("h_mass_2HLT_BE",
+ "Both muon pass HLT passing in barrel-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_mass_2HLT_EE = ibooker_.book2D("h_mass_2HLT_EE",
+ "Both muon pass HLT passing in endcap-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_mass_1HLT_BB = ibooker_.book2D("h_mass_1HLT_BB",
+ "One muon pass HLT in barrel-barrel",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_mass_1HLT_BE = ibooker_.book2D("h_mass_1HLT_BE",
+ "One muon pass HLT passing in barrel-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_mass_1HLT_EE = ibooker_.book2D("h_mass_1HLT_EE",
+ "One muon pass HLT passing in endcap-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+
+ h_mass_SIT_fail_BB = ibooker_.book2D("h_mass_SIT_fail_BB",
+ "Muon SIT failing barrel-barrel",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_mass_SIT_fail_BE = ibooker_.book2D("h_mass_SIT_fail_BE",
+ "Muon SIT failing barrel-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+
+ h_mass_SIT_fail_EE = ibooker_.book2D("h_mass_SIT_fail_EE",
+ "Muon SIT failing endcap-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+
+ h_mass_Glo_fail_BB = ibooker_.book2D("h_mass_Glo_fail_BB",
+ "Muon Glo failing barrel-barrel",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_mass_Glo_fail_BE = ibooker_.book2D("h_mass_Glo_fail_BE",
+ "Muon Glo failing barrel-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+
+ h_mass_Glo_fail_EE = ibooker_.book2D("h_mass_Glo_fail_EE",
+ "Muon Glo failing endcap-endcap",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
h_npv = ibooker_.book2D(
"h_npv", "Events with valid primary vertex", LumiBin_, LumiMin_, LumiMax_, PVBin_, PVMin_, PVMax_);
- h_mass_yield_Z = ibooker_.book2D(
- "h_mass_yield_Z", "reconstructed Z bosons", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
- h_npv_yield_Z =
- ibooker_.book2D("h_npv_yield_Z", "reconstructed Z bosons", LumiBin_, LumiMin_, LumiMax_, PVBin_, PVMin_, PVMax_);
- h_yieldBB_Z = ibooker_.book1D("h_yieldBB_Z", "reconstructed Z bosons in barrel", LumiBin_, LumiMin_, LumiMax_);
- h_yieldEE_Z = ibooker_.book1D("h_yieldEE_Z", "reconstructed Z bosons in endcap", LumiBin_, LumiMin_, LumiMax_);
// Axis titles
- h_mass_HLT_pass_central->setAxisTitle("luminosiry section", 1);
- h_mass_HLT_pass_forward->setAxisTitle("luminosiry section", 1);
- h_mass_HLT_fail_central->setAxisTitle("luminosiry section", 1);
- h_mass_HLT_fail_forward->setAxisTitle("luminosiry section", 1);
- h_mass_SIT_pass_central->setAxisTitle("luminosiry section", 1);
- h_mass_SIT_pass_forward->setAxisTitle("luminosiry section", 1);
- h_mass_SIT_fail_central->setAxisTitle("luminosiry section", 1);
- h_mass_SIT_fail_forward->setAxisTitle("luminosiry section", 1);
- h_mass_Glo_pass_central->setAxisTitle("luminosiry section", 1);
- h_mass_Glo_pass_forward->setAxisTitle("luminosiry section", 1);
- h_mass_Glo_fail_central->setAxisTitle("luminosiry section", 1);
- h_mass_Glo_fail_forward->setAxisTitle("luminosiry section", 1);
- h_mass_HLT_pass_central->setAxisTitle("tag and probe mass", 2);
- h_mass_HLT_pass_forward->setAxisTitle("tag and probe mass", 2);
- h_mass_HLT_fail_central->setAxisTitle("tag and probe mass", 2);
- h_mass_HLT_fail_forward->setAxisTitle("tag and probe mass", 2);
- h_mass_SIT_pass_central->setAxisTitle("tag and probe mass", 2);
- h_mass_SIT_pass_forward->setAxisTitle("tag and probe mass", 2);
- h_mass_SIT_fail_central->setAxisTitle("tag and probe mass", 2);
- h_mass_SIT_fail_forward->setAxisTitle("tag and probe mass", 2);
- h_mass_Glo_pass_central->setAxisTitle("tag and probe mass", 2);
- h_mass_Glo_pass_forward->setAxisTitle("tag and probe mass", 2);
- h_mass_Glo_fail_central->setAxisTitle("tag and probe mass", 2);
- h_mass_Glo_fail_forward->setAxisTitle("tag and probe mass", 2);
+ h_mass_2HLT_BB->setAxisTitle("luminosity section", 1);
+ h_mass_2HLT_BE->setAxisTitle("luminosity section", 1);
+ h_mass_2HLT_EE->setAxisTitle("luminosity section", 1);
+ h_mass_1HLT_BB->setAxisTitle("luminosity section", 1);
+ h_mass_1HLT_BE->setAxisTitle("luminosity section", 1);
+ h_mass_1HLT_EE->setAxisTitle("luminosity section", 1);
+ h_mass_SIT_fail_BB->setAxisTitle("luminosity section", 1);
+ h_mass_SIT_fail_BE->setAxisTitle("luminosity section", 1);
+ h_mass_SIT_fail_EE->setAxisTitle("luminosity section", 1);
+ h_mass_Glo_fail_BB->setAxisTitle("luminosity section", 1);
+ h_mass_Glo_fail_BE->setAxisTitle("luminosity section", 1);
+ h_mass_Glo_fail_EE->setAxisTitle("luminosity section", 1);
+ h_mass_2HLT_BB->setAxisTitle("tag and probe mass", 2);
+ h_mass_2HLT_BE->setAxisTitle("tag and probe mass", 2);
+ h_mass_2HLT_EE->setAxisTitle("tag and probe mass", 2);
+ h_mass_1HLT_BB->setAxisTitle("tag and probe mass", 2);
+ h_mass_1HLT_BE->setAxisTitle("tag and probe mass", 2);
+ h_mass_1HLT_EE->setAxisTitle("tag and probe mass", 2);
+ h_mass_SIT_fail_BB->setAxisTitle("tag and probe mass", 2);
+ h_mass_SIT_fail_BE->setAxisTitle("tag and probe mass", 2);
+ h_mass_SIT_fail_EE->setAxisTitle("tag and probe mass", 2);
+ h_mass_Glo_fail_BB->setAxisTitle("tag and probe mass", 2);
+ h_mass_Glo_fail_BE->setAxisTitle("tag and probe mass", 2);
+ h_mass_Glo_fail_EE->setAxisTitle("tag and probe mass", 2);
h_npv->setAxisTitle("luminosity section", 1);
h_npv->setAxisTitle("number of primary vertices", 2);
- h_npv_yield_Z->setAxisTitle("luminosiry section", 1);
- h_npv_yield_Z->setAxisTitle("number of primary vertices", 2);
- h_mass_yield_Z->setAxisTitle("luminosiry section", 1);
- h_mass_yield_Z->setAxisTitle("tag and probe mass", 2);
-
- h_yieldBB_Z->setAxisTitle("luminosiry section", 1);
- h_yieldEE_Z->setAxisTitle("luminosiry section", 1);
-
- /*
- // Electron histograms
- h_ee_mass_id_pass_central = ibooker_.book2D("h_ee_mass_id_pass_central", "h_ee_mass_id_pass_central", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
- h_ee_mass_id_fail_central = ibooker_.book2D("h_ee_mass_id_fail_central", "h_ee_mass_id_fail_central", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
- h_ee_mass_id_pass_forward = ibooker_.book2D("h_ee_mass_id_pass_forward", "h_ee_mass_id_pass_forward", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
- h_ee_mass_id_fail_forward = ibooker_.book2D("h_ee_mass_id_fail_forward", "h_ee_mass_id_fail_forward", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
-
- h_ee_mass_HLT_pass_central = ibooker_.book2D("h_ee_mass_HLT_pass_central", "h_ee_mass_HLT_pass_central", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
- h_ee_mass_HLT_fail_central = ibooker_.book2D("h_ee_mass_HLT_fail_central", "h_ee_mass_HLT_fail_central", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
- h_ee_mass_HLT_pass_forward = ibooker_.book2D("h_ee_mass_HLT_pass_forward", "h_ee_mass_HLT_pass_forward", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
- h_ee_mass_HLT_fail_forward = ibooker_.book2D("h_ee_mass_HLT_fail_forward", "h_ee_mass_HLT_fail_forward", LumiBin_, LumiMin_, LumiMax_, MassBin_, MassMin_, MassMax_);
-
- h_ee_yield_Z_ebeb = ibooker_.book1D("h_ee_yield_Z_ebeb", "h_ee_yield_Z_ebeb", LumiBin_, LumiMin_, LumiMax_);
- h_ee_yield_Z_ebee = ibooker_.book1D("h_ee_yield_Z_ebee", "h_ee_yield_Z_ebee", LumiBin_, LumiMin_, LumiMax_);
- h_ee_yield_Z_eeee = ibooker_.book1D("h_ee_yield_Z_eeee", "h_ee_yield_Z_eeee", LumiBin_, LumiMin_, LumiMax_);*/
}
//
@@ -309,23 +262,18 @@ void ZCounting::bookHistograms(DQMStore::IBooker& ibooker_, edm::Run const&, edm
//--------------------------------------------------------------------------------------------------
void ZCounting::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) { // Fill event tree on the fly
edm::LogInfo("ZCounting") << "ZCounting::analyze" << std::endl;
- analyzeMuons(iEvent, iSetup);
- //analyzeElectrons(iEvent, iSetup);
-}
-void ZCounting::analyzeMuons(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
- edm::LogInfo("ZCounting") << "ZCounting::analyzeMuons" << std::endl;
//-------------------------------
//--- Vertex
//-------------------------------
edm::Handle hVertexProduct;
iEvent.getByToken(fPVName_token, hVertexProduct);
if (!hVertexProduct.isValid()) {
- edm::LogWarning("ZCounting") << "ZCounting::analyzeMuons - no valid primary vertex product found" << std::endl;
+ edm::LogWarning("ZCounting") << "ZCounting::analyze - no valid primary vertex product found" << std::endl;
return;
}
- const reco::VertexCollection* pvCol = hVertexProduct.product();
- const reco::Vertex* pv = &(*pvCol->begin());
+
+ const reco::Vertex* pv = nullptr;
int nvtx = 0;
for (auto const& itVtx : *hVertexProduct) {
@@ -351,36 +299,10 @@ void ZCounting::analyzeMuons(const edm::Event& iEvent, const edm::EventSetup& iS
//-------------------------------
//--- Trigger
//-------------------------------
- edm::Handle hTrgRes;
- iEvent.getByToken(fHLTTag_token, hTrgRes);
- if (!hTrgRes.isValid())
- return;
-
- edm::Handle hTrgEvt;
- iEvent.getByToken(fHLTObjTag_token, hTrgEvt);
-
- const edm::TriggerNames& triggerNames = iEvent.triggerNames(*hTrgRes);
- bool config_changed = false;
- if (fTriggerNamesID != triggerNames.parameterSetID()) {
- fTriggerNamesID = triggerNames.parameterSetID();
- config_changed = true;
- }
- if (config_changed) {
- initHLT(*hTrgRes, triggerNames);
- }
-
- TriggerBits triggerBits;
- for (unsigned int irec = 0; irec < fTrigger->fRecords.size(); irec++) {
- if (fTrigger->fRecords[irec].hltPathIndex == (unsigned int)-1)
- continue;
- if (hTrgRes->accept(fTrigger->fRecords[irec].hltPathIndex)) {
- triggerBits[fTrigger->fRecords[irec].baconTrigBit] = true;
- }
- }
- //if(fSkipOnHLTFail && triggerBits == 0) return;
+ triggers->readEvent(iEvent);
// Trigger requirement
- if (!isMuonTrigger(*fTrigger, triggerBits))
+ if (!triggers->pass())
return;
//-------------------------------
@@ -402,32 +324,36 @@ void ZCounting::analyzeMuons(const edm::Event& iEvent, const edm::EventSetup& iS
// Tag loop
for (auto const& itMu1 : *hMuonProduct) {
- float pt1 = itMu1.muonBestTrack()->pt();
- float eta1 = itMu1.muonBestTrack()->eta();
- float phi1 = itMu1.muonBestTrack()->phi();
- float q1 = itMu1.muonBestTrack()->charge();
+ const float pt1 = itMu1.muonBestTrack()->pt();
+ const float eta1 = itMu1.muonBestTrack()->eta();
+ const float phi1 = itMu1.muonBestTrack()->phi();
+ const float q1 = itMu1.muonBestTrack()->charge();
// Tag selection: kinematic cuts, lepton selection and trigger matching
if (pt1 < PtCutL1_)
continue;
if (fabs(eta1) > EtaCutL1_)
continue;
- if (!(passMuonID(itMu1, *pv, IDType_) && passMuonIso(itMu1, IsoType_, IsoCut_)))
+ if (!(passMuonID(itMu1, pv) && passMuonIso(itMu1)))
continue;
- if (!isMuonTriggerObj(*fTrigger, TriggerTools::matchHLT(eta1, phi1, fTrigger->fRecords, *hTrgEvt)))
+ if (!triggers->passObj(eta1, phi1))
continue;
vTag.SetPtEtaPhiM(pt1, eta1, phi1, MUON_MASS);
+ bool isTagCentral = false;
+ if (fabs(eta1) < MUON_BOUND)
+ isTagCentral = true;
+
// Probe loop over muons
for (auto const& itMu2 : *hMuonProduct) {
if (&itMu2 == &itMu1)
continue;
- float pt2 = itMu2.muonBestTrack()->pt();
- float eta2 = itMu2.muonBestTrack()->eta();
- float phi2 = itMu2.muonBestTrack()->phi();
- float q2 = itMu2.muonBestTrack()->charge();
+ const float pt2 = itMu2.muonBestTrack()->pt();
+ const float eta2 = itMu2.muonBestTrack()->eta();
+ const float phi2 = itMu2.muonBestTrack()->phi();
+ const float q2 = itMu2.muonBestTrack()->charge();
// Probe selection: kinematic cuts and opposite charge requirement
if (pt2 < PtCutL2_)
@@ -445,86 +371,63 @@ void ZCounting::analyzeMuons(const edm::Event& iEvent, const edm::EventSetup& iS
if ((dilepMass < MassMin_) || (dilepMass > MassMax_))
continue;
- bool isTagCentral = false;
bool isProbeCentral = false;
- if (fabs(eta1) < MUON_BOUND)
- isTagCentral = true;
if (fabs(eta2) < MUON_BOUND)
isProbeCentral = true;
// Determine event category for efficiency calculation
- if (passMuonID(itMu2, *pv, IDType_) && passMuonIso(itMu2, IsoType_, IsoCut_)) {
- if (isMuonTriggerObj(*fTrigger, TriggerTools::matchHLT(eta2, phi2, fTrigger->fRecords, *hTrgEvt))) {
+ if (passMuonID(itMu2, pv) && passMuonIso(itMu2)) {
+ if (triggers->passObj(eta2, phi2)) {
// category 2HLT: both muons passing trigger requirements
if (&itMu1 > &itMu2)
continue; // make sure we don't double count MuMu2HLT category
- // Fill twice for each event, since both muons pass trigger
- if (isTagCentral) {
- h_mass_HLT_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_SIT_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
+ if (isTagCentral && isProbeCentral) {
+ h_mass_2HLT_BB->Fill(iEvent.luminosityBlock(), dilepMass);
+ } else if (!isTagCentral && !isProbeCentral) {
+ h_mass_2HLT_EE->Fill(iEvent.luminosityBlock(), dilepMass);
} else {
- h_mass_HLT_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_SIT_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
+ h_mass_2HLT_BE->Fill(iEvent.luminosityBlock(), dilepMass);
}
-
- if (isProbeCentral) {
- h_mass_HLT_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_SIT_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
- } else {
- h_mass_HLT_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_SIT_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- }
-
} else {
- // category 1HLT: probe passing selection but not trigger
- if (isProbeCentral) {
- h_mass_HLT_fail_central->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_SIT_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
+ // category 1HLT: only one muon passes trigger
+ if (isTagCentral && isProbeCentral) {
+ h_mass_1HLT_BB->Fill(iEvent.luminosityBlock(), dilepMass);
+ } else if (!isTagCentral && !isProbeCentral) {
+ h_mass_1HLT_EE->Fill(iEvent.luminosityBlock(), dilepMass);
} else {
- h_mass_HLT_fail_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_SIT_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
+ h_mass_1HLT_BE->Fill(iEvent.luminosityBlock(), dilepMass);
}
}
- // category 2HLT + 1HLT: Fill once for Z yield
- h_npv_yield_Z->Fill(iEvent.luminosityBlock(), nvtx);
- h_mass_yield_Z->Fill(iEvent.luminosityBlock(), dilepMass);
- if (isTagCentral && isProbeCentral)
- h_yieldBB_Z->Fill(iEvent.luminosityBlock());
- else if (!isTagCentral && !isProbeCentral)
- h_yieldEE_Z->Fill(iEvent.luminosityBlock());
} else if (itMu2.isGlobalMuon()) {
// category Glo: probe is a Global muon but failing selection
- if (isProbeCentral) {
- h_mass_SIT_fail_central->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_central->Fill(iEvent.luminosityBlock(), dilepMass);
+ if (isTagCentral && isProbeCentral) {
+ h_mass_SIT_fail_BB->Fill(iEvent.luminosityBlock(), dilepMass);
+ } else if (!isTagCentral && !isProbeCentral) {
+ h_mass_SIT_fail_EE->Fill(iEvent.luminosityBlock(), dilepMass);
} else {
- h_mass_SIT_fail_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- h_mass_Glo_pass_forward->Fill(iEvent.luminosityBlock(), dilepMass);
+ h_mass_SIT_fail_BE->Fill(iEvent.luminosityBlock(), dilepMass);
}
} else if (itMu2.isStandAloneMuon()) {
// category Sta: probe is a Standalone muon
- if (isProbeCentral) {
- h_mass_Glo_fail_central->Fill(iEvent.luminosityBlock(), dilepMass);
+ if (isTagCentral && isProbeCentral) {
+ h_mass_Glo_fail_BB->Fill(iEvent.luminosityBlock(), dilepMass);
+ } else if (!isTagCentral && !isProbeCentral) {
+ h_mass_Glo_fail_EE->Fill(iEvent.luminosityBlock(), dilepMass);
} else {
- h_mass_Glo_fail_forward->Fill(iEvent.luminosityBlock(), dilepMass);
+ h_mass_Glo_fail_BE->Fill(iEvent.luminosityBlock(), dilepMass);
}
} else if (itMu2.innerTrack()->hitPattern().trackerLayersWithMeasurement() >= 6 &&
itMu2.innerTrack()->hitPattern().numberOfValidPixelHits() >= 1) {
// cateogry Trk: probe is a tracker track
- if (isProbeCentral) {
- h_mass_Glo_fail_central->Fill(iEvent.luminosityBlock(), dilepMass);
+ if (isTagCentral && isProbeCentral) {
+ h_mass_Glo_fail_BB->Fill(iEvent.luminosityBlock(), dilepMass);
+ } else if (!isTagCentral && !isProbeCentral) {
+ h_mass_Glo_fail_EE->Fill(iEvent.luminosityBlock(), dilepMass);
} else {
- h_mass_Glo_fail_forward->Fill(iEvent.luminosityBlock(), dilepMass);
+ h_mass_Glo_fail_BE->Fill(iEvent.luminosityBlock(), dilepMass);
}
}
-
} // End of probe loop over muons
// Probe loop over tracks, only for standalone efficiency calculation
@@ -540,10 +443,10 @@ void ZCounting::analyzeMuons(const edm::Event& iEvent, const edm::EventSetup& iS
if (isMuon)
continue;
- float pt2 = itTrk.pt();
- float eta2 = itTrk.eta();
- float phi2 = itTrk.phi();
- float q2 = itTrk.charge();
+ const float pt2 = itTrk.pt();
+ const float eta2 = itTrk.eta();
+ const float phi2 = itTrk.phi();
+ const float q2 = itTrk.charge();
// Probe selection: kinematic cuts and opposite charge requirement
if (pt2 < PtCutL2_)
@@ -565,301 +468,22 @@ void ZCounting::analyzeMuons(const edm::Event& iEvent, const edm::EventSetup& iS
isTrackCentral = true;
if (itTrk.hitPattern().trackerLayersWithMeasurement() >= 6 && itTrk.hitPattern().numberOfValidPixelHits() >= 1) {
- if (isTrackCentral)
- h_mass_Glo_fail_central->Fill(iEvent.luminosityBlock(), dilepMass);
- else
- h_mass_Glo_fail_forward->Fill(iEvent.luminosityBlock(), dilepMass);
- }
-
- } //End of probe loop over tracks
-
- } //End of tag loop
-}
-void ZCounting::analyzeElectrons(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
- edm::LogInfo("ZCounting") << "ZCounting::analyzeElectrons" << std::endl;
-
- //-------------------------------
- //--- Vertex
- //-------------------------------
- edm::Handle hVertexProduct;
- iEvent.getByToken(fPVName_token, hVertexProduct);
- if (!hVertexProduct.isValid())
- return;
-
- const reco::VertexCollection* pvCol = hVertexProduct.product();
- int nvtx = 0;
-
- for (auto const& vtx : *pvCol) {
- if (vtx.isFake())
- continue;
- if (vtx.tracksSize() < VtxNTracksFitCut_)
- continue;
- if (vtx.ndof() < VtxNdofCut_)
- continue;
- if (fabs(vtx.z()) > VtxAbsZCut_)
- continue;
- if (vtx.position().Rho() > VtxRhoCut_)
- continue;
-
- nvtx++;
- }
-
- // Good vertex requirement
- if (nvtx == 0)
- return;
-
- //-------------------------------
- //--- Trigger
- //-------------------------------
- edm::Handle hTrgRes;
- iEvent.getByToken(fHLTTag_token, hTrgRes);
- if (!hTrgRes.isValid())
- return;
-
- edm::Handle hTrgEvt;
- iEvent.getByToken(fHLTObjTag_token, hTrgEvt);
-
- const edm::TriggerNames& triggerNames = iEvent.triggerNames(*hTrgRes);
- Bool_t config_changed = false;
- if (fTriggerNamesID != triggerNames.parameterSetID()) {
- fTriggerNamesID = triggerNames.parameterSetID();
- config_changed = true;
- }
- if (config_changed) {
- initHLT(*hTrgRes, triggerNames);
- }
-
- TriggerBits triggerBits;
- for (unsigned int irec = 0; irec < fTrigger->fRecords.size(); irec++) {
- if (fTrigger->fRecords[irec].hltPathIndex == (unsigned int)-1)
- continue;
- if (hTrgRes->accept(fTrigger->fRecords[irec].hltPathIndex)) {
- triggerBits[fTrigger->fRecords[irec].baconTrigBit] = true;
- }
- }
-
- // Trigger requirement
- if (!isElectronTrigger(*fTrigger, triggerBits))
- return;
-
- // Get Electrons
- edm::Handle> electrons;
- iEvent.getByToken(fGsfElectronName_token, electrons);
-
- // Get SuperClusters
- edm::Handle> superclusters;
- iEvent.getByToken(fSCName_token, superclusters);
-
- // Get Rho
- edm::Handle rhoHandle;
- iEvent.getByToken(fRhoToken, rhoHandle);
- EleID_.setRho(*rhoHandle);
-
- // Get beamspot
- edm::Handle beamspotHandle;
- iEvent.getByToken(fBeamspotToken, beamspotHandle);
-
- // Conversions
- edm::Handle conversionsHandle;
- iEvent.getByToken(fConversionToken, conversionsHandle);
-
- edm::Ptr eleProbe;
- enum { eEleEle2HLT = 1, eEleEle1HLT1L1, eEleEle1HLT, eEleEleNoSel, eEleSC }; // event category enum
-
- // Loop over Tags
- for (size_t itag = 0; itag < electrons->size(); ++itag) {
- const auto el1 = electrons->ptrAt(itag);
- if (not EleID_.passID(el1, beamspotHandle, conversionsHandle))
- continue;
-
- float pt1 = el1->pt();
- float eta1 = el1->eta();
- float phi1 = el1->phi();
-
- if (!isElectronTriggerObj(*fTrigger, TriggerTools::matchHLT(eta1, phi1, fTrigger->fRecords, *hTrgEvt)))
- continue;
- TLorentzVector vTag(0., 0., 0., 0.);
- vTag.SetPtEtaPhiM(pt1, eta1, phi1, ELECTRON_MASS);
-
- // Tag selection: kinematic cuts, lepton selection and trigger matching
- double tag_pt = vTag.Pt();
- double tag_abseta = fabs(vTag.Eta());
-
- bool tag_is_valid_tag = ele_tag_selection(tag_pt, tag_abseta);
- bool tag_is_valid_probe = ele_probe_selection(tag_pt, tag_abseta);
-
- if (not(tag_is_valid_tag or tag_is_valid_probe))
- continue;
-
- // Loop over probes
- for (size_t iprobe = 0; iprobe < superclusters->size(); ++iprobe) {
- // Initialize probe
- const auto sc = superclusters->ptrAt(iprobe);
- if (*sc == *(el1->superCluster())) {
- continue;
- }
-
- // Find matching electron
- for (size_t iele = 0; iele < electrons->size(); ++iele) {
- if (iele == itag)
- continue;
- const auto ele = electrons->ptrAt(iele);
- if (*sc == *(ele->superCluster())) {
- eleProbe = ele;
- break;
- }
- }
-
- // Assign final probe 4-vector
- TLorentzVector vProbe(0., 0., 0., 0.);
- if (eleProbe.isNonnull()) {
- vProbe.SetPtEtaPhiM(eleProbe->pt(), eleProbe->eta(), eleProbe->phi(), ELECTRON_MASS);
- } else {
- double pt = sc->energy() * sqrt(1 - pow(tanh(sc->eta()), 2));
- vProbe.SetPtEtaPhiM(pt, sc->eta(), sc->phi(), ELECTRON_MASS);
- }
-
- // Probe Selection
- double probe_pt = vProbe.Pt();
- double probe_abseta = fabs(sc->eta());
- bool probe_is_valid_probe = ele_probe_selection(probe_pt, probe_abseta);
- if (!probe_is_valid_probe)
- continue;
-
- // Good Probe found!
-
- // Require good Z
- TLorentzVector vDilep = vTag + vProbe;
-
- if ((vDilep.M() < ELE_MASS_CUT_LOW) || (vDilep.M() > ELE_MASS_CUT_HIGH))
- continue;
- if (eleProbe.isNonnull() and (eleProbe->charge() != -el1->charge()))
- continue;
-
- // Good Z found!
-
- long ls = iEvent.luminosityBlock();
- bool probe_pass_trigger = isElectronTriggerObj(
- *fTrigger, TriggerTools::matchHLT(vProbe.Eta(), vProbe.Phi(), fTrigger->fRecords, *hTrgEvt));
- bool probe_pass_id = eleProbe.isNonnull() and EleID_.passID(eleProbe, beamspotHandle, conversionsHandle);
-
- //// Fill for yields
- bool probe_is_forward = probe_abseta > ELE_ETA_CRACK_LOW;
- bool tag_is_forward = tag_abseta > ELE_ETA_CRACK_LOW;
-
- if (probe_pass_id) {
- if (probe_is_forward and tag_is_forward) {
- h_ee_yield_Z_eeee->Fill(ls);
- } else if (!probe_is_forward and !tag_is_forward) {
- h_ee_yield_Z_ebeb->Fill(ls);
+ if (isTagCentral && isTrackCentral) {
+ h_mass_Glo_fail_BB->Fill(iEvent.luminosityBlock(), dilepMass);
+ } else if (!isTagCentral && !isTrackCentral) {
+ h_mass_Glo_fail_EE->Fill(iEvent.luminosityBlock(), dilepMass);
} else {
- h_ee_yield_Z_ebee->Fill(ls);
+ h_mass_Glo_fail_BE->Fill(iEvent.luminosityBlock(), dilepMass);
}
}
-
- if (!tag_is_valid_tag)
- continue;
-
- /// Fill for ID efficiency
- if (probe_pass_id) {
- if (probe_is_forward) {
- h_ee_mass_id_pass_forward->Fill(ls, vDilep.M());
- } else {
- h_ee_mass_id_pass_central->Fill(ls, vDilep.M());
- }
- } else {
- if (probe_is_forward) {
- h_ee_mass_id_fail_forward->Fill(ls, vDilep.M());
- } else {
- h_ee_mass_id_fail_central->Fill(ls, vDilep.M());
- }
- }
-
- /// Fill for HLT efficiency
- if (probe_pass_id and probe_pass_trigger) {
- if (probe_is_forward) {
- h_ee_mass_HLT_pass_forward->Fill(ls, vDilep.M());
- } else {
- h_ee_mass_HLT_pass_central->Fill(ls, vDilep.M());
- }
- } else if (probe_pass_id) {
- if (probe_is_forward) {
- h_ee_mass_HLT_fail_forward->Fill(ls, vDilep.M());
- } else {
- h_ee_mass_HLT_fail_central->Fill(ls, vDilep.M());
- }
- }
- } // End of probe loop
+ } //End of probe loop over tracks
} //End of tag loop
}
-bool ZCounting::ele_probe_selection(double pt, double abseta) {
- if (pt < ELE_PT_CUT_PROBE)
- return false;
- if (abseta > ELE_ETA_CUT_PROBE)
- return false;
- if ((abseta > ELE_ETA_CRACK_LOW) and (abseta < ELE_ETA_CRACK_HIGH))
- return false;
- return true;
-}
-bool ZCounting::ele_tag_selection(double pt, double abseta) {
- if (pt < ELE_PT_CUT_TAG)
- return false;
- if (abseta > ELE_ETA_CUT_TAG)
- return false;
- if ((abseta > ELE_ETA_CRACK_LOW) and (abseta < ELE_ETA_CRACK_HIGH))
- return false;
- return true;
-}
//
// -------------------------------------- functions --------------------------------------------
//
-void ZCounting::initHLT(const edm::TriggerResults& result, const edm::TriggerNames& triggerNames) {
- for (unsigned int irec = 0; irec < fTrigger->fRecords.size(); irec++) {
- fTrigger->fRecords[irec].hltPathName = "";
- fTrigger->fRecords[irec].hltPathIndex = (unsigned int)-1;
- const std::string pattern = fTrigger->fRecords[irec].hltPattern;
- if (edm::is_glob(pattern)) { // handle pattern with wildcards (*,?)
- std::vector::const_iterator> matches =
- edm::regexMatch(triggerNames.triggerNames(), pattern);
- if (matches.empty()) {
- edm::LogWarning("ZCounting") << "requested pattern [" << pattern << "] does not match any HLT paths"
- << std::endl;
- } else {
- for (auto const& match : matches) {
- fTrigger->fRecords[irec].hltPathName = *match;
- }
- }
- } else { // take full HLT path name given
- fTrigger->fRecords[irec].hltPathName = pattern;
- }
- // Retrieve index in trigger menu corresponding to HLT path
- unsigned int index = triggerNames.triggerIndex(fTrigger->fRecords[irec].hltPathName);
- if (index < result.size()) { // check for valid index
- fTrigger->fRecords[irec].hltPathIndex = index;
- }
- }
-}
-
-//--------------------------------------------------------------------------------------------------
-bool ZCounting::isMuonTrigger(const ZCountingTrigger::TTrigger& triggerMenu, const TriggerBits& hltBits) {
- for (unsigned int i = 0; i < fMuonHLTNames.size(); ++i) {
- if (triggerMenu.pass(fMuonHLTNames.at(i), hltBits))
- return true;
- }
- return false;
-}
-
-//--------------------------------------------------------------------------------------------------
-bool ZCounting::isMuonTriggerObj(const ZCountingTrigger::TTrigger& triggerMenu, const TriggerObjects& hltMatchBits) {
- for (unsigned int i = 0; i < fMuonHLTNames.size(); ++i) {
- if (triggerMenu.passObj(fMuonHLTNames.at(i), fMuonHLTObjectNames.at(i), hltMatchBits))
- return true;
- }
- return false;
-}
-
//--------------------------------------------------------------------------------------------------
// Definition of the CustomTightID function
bool ZCounting::isCustomTightMuon(const reco::Muon& muon) {
@@ -875,50 +499,40 @@ bool ZCounting::isCustomTightMuon(const reco::Muon& muon) {
}
//--------------------------------------------------------------------------------------------------
-bool ZCounting::passMuonID(
- const reco::Muon& muon,
- const reco::Vertex& vtx,
- const MuonIDTypes& idType) { //Muon ID selection, using internal function "DataFormats/MuonReco/src/MuonSelectors.cc
-
- if (idType == LooseID && muon::isLooseMuon(muon))
- return true;
- else if (idType == MediumID && muon::isMediumMuon(muon))
- return true;
- else if (idType == TightID && muon::isTightMuon(muon, vtx))
- return true;
- else if (idType == CustomTightID && isCustomTightMuon(muon))
- return true;
- else if (idType == NoneID)
- return true;
- else
- return false;
-}
-//--------------------------------------------------------------------------------------------------
-bool ZCounting::passMuonIso(const reco::Muon& muon,
- const MuonIsoTypes& isoType,
- const float isoCut) { //Muon isolation selection, up-to-date with MUO POG recommendation
-
- if (isoType == TrackerIso && muon.isolationR03().sumPt < isoCut)
- return true;
- else if (isoType == PFIso &&
- muon.pfIsolationR04().sumChargedHadronPt +
- std::max(0.,
- muon.pfIsolationR04().sumNeutralHadronEt + muon.pfIsolationR04().sumPhotonEt -
- 0.5 * muon.pfIsolationR04().sumPUPt) <
- isoCut)
- return true;
- else if (isoType == NoneIso)
- return true;
- else
- return false;
+bool ZCounting::passMuonID(const reco::Muon& muon, const reco::Vertex* vtx) {
+ // Muon ID selection, using internal function "DataFormats/MuonReco/src/MuonSelectors.cc
+ switch (IDType_) {
+ case LooseID:
+ return muon::isLooseMuon(muon);
+ case MediumID:
+ return muon::isMediumMuon(muon);
+ case CustomTightID:
+ return isCustomTightMuon(muon);
+ case TightID:
+ return vtx != nullptr && muon::isTightMuon(muon, *vtx);
+ case NoneID:
+ return true;
+ }
+ return false;
}
//--------------------------------------------------------------------------------------------------
-bool ZCounting::isElectronTrigger(ZCountingTrigger::TTrigger triggerMenu, TriggerBits hltBits) {
- return triggerMenu.pass("HLT_Ele35_WPTight_Gsf_v*", hltBits);
-}
-//--------------------------------------------------------------------------------------------------
-bool ZCounting::isElectronTriggerObj(ZCountingTrigger::TTrigger triggerMenu, TriggerObjects hltMatchBits) {
- return triggerMenu.passObj("HLT_Ele35_WPTight_Gsf_v*", "hltEle35noerWPTightGsfTrackIsoFilter", hltMatchBits);
+bool ZCounting::passMuonIso(const reco::Muon& muon) {
+ //Muon isolation selection, up-to-date with MUO POG recommendation
+ switch (IsoType_) {
+ case TrackerIso:
+ return muon.isolationR03().sumPt < IsoCut_;
+ case PFIso:
+ return muon.pfIsolationR04().sumChargedHadronPt +
+ std::max(0.,
+ muon.pfIsolationR04().sumNeutralHadronEt + muon.pfIsolationR04().sumPhotonEt -
+ 0.5 * muon.pfIsolationR04().sumPUPt) <
+ IsoCut_;
+ case NoneIso:
+ return true;
+ }
+
+ return false;
}
+
DEFINE_FWK_MODULE(ZCounting);
diff --git a/DQMOffline/Lumi/plugins/ZCounting.h b/DQMOffline/Lumi/plugins/ZCounting.h
index 313c25c1d8c42..2dff7a5f3fcf6 100644
--- a/DQMOffline/Lumi/plugins/ZCounting.h
+++ b/DQMOffline/Lumi/plugins/ZCounting.h
@@ -21,22 +21,7 @@
#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
#include "DQMServices/Core/interface/DQMStore.h"
-#include "DQMOffline/Lumi/interface/TriggerDefs.h"
-#include "DQMOffline/Lumi/interface/TTrigger.h"
#include "DQMOffline/Lumi/interface/TriggerTools.h"
-#include "DQMOffline/Lumi/interface/ElectronIdentifier.h"
-
-class TFile;
-class TH1D;
-class TTree;
-class TClonesArray;
-namespace edm {
- class TriggerResults;
- class TriggerNames;
-} // namespace edm
-namespace ZCountingTrigger {
- class TTrigger;
-}
class ZCounting : public DQMEDAnalyzer {
public:
@@ -53,142 +38,82 @@ class ZCounting : public DQMEDAnalyzer {
private:
//other functions
- void analyzeMuons(edm::Event const& e, edm::EventSetup const& eSetup);
- void analyzeElectrons(edm::Event const& e, edm::EventSetup const& eSetup);
- bool isMuonTrigger(const ZCountingTrigger::TTrigger& triggerMenu, const TriggerBits& hltBits);
- bool isMuonTriggerObj(const ZCountingTrigger::TTrigger& triggerMenu, const TriggerObjects& hltMatchBits);
- bool passMuonID(const reco::Muon& muon, const reco::Vertex& vtx, const MuonIDTypes& idType);
- bool passMuonIso(const reco::Muon& muon, const MuonIsoTypes& isoType, const float isoCut);
+ bool passMuonID(const reco::Muon& muon, const reco::Vertex* vtx);
+ bool passMuonIso(const reco::Muon& muon);
bool isCustomTightMuon(const reco::Muon& muon);
- // Electron-specific functions
- bool isElectronTrigger(ZCountingTrigger::TTrigger triggerMenu, TriggerBits hltBits);
- bool isElectronTriggerObj(ZCountingTrigger::TTrigger triggerMenu, TriggerObjects hltMatchBits);
- bool ele_probe_selection(double pt, double abseta);
- bool ele_tag_selection(double pt, double abseta);
-
- // initialization from HLT menu; needs to be called on every change in HLT menu
- void initHLT(const edm::TriggerResults&, const edm::TriggerNames&);
-
// EDM object collection names
- edm::ParameterSetID fTriggerNamesID;
- edm::InputTag fHLTObjTag;
- edm::InputTag fHLTTag;
- edm::EDGetTokenT fHLTObjTag_token;
- edm::EDGetTokenT fHLTTag_token;
- std::string fPVName;
+ const edm::InputTag triggerResultsInputTag_;
edm::EDGetTokenT fPVName_token;
// Muons
- std::string fMuonName;
edm::EDGetTokenT fMuonName_token;
std::vector fMuonHLTNames;
std::vector fMuonHLTObjectNames;
// Tracks
- std::string fTrackName;
edm::EDGetTokenT fTrackName_token;
- // Electrons
- std::string fElectronName;
- edm::EDGetTokenT> fGsfElectronName_token;
- std::string fSCName;
- edm::EDGetTokenT> fSCName_token;
+ // other input
+ const double PtCutL1_;
+ const double PtCutL2_;
+ const double EtaCutL1_;
+ const double EtaCutL2_;
+
+ const int MassBin_;
+ const double MassMin_;
+ const double MassMax_;
- edm::InputTag fRhoTag;
- edm::EDGetTokenT fRhoToken;
+ const int LumiBin_;
+ const double LumiMin_;
+ const double LumiMax_;
- edm::InputTag fBeamspotTag;
- edm::EDGetTokenT fBeamspotToken;
+ const int PVBin_;
+ const double PVMin_;
+ const double PVMax_;
- edm::InputTag fConversionTag;
- edm::EDGetTokenT fConversionToken;
+ const double VtxNTracksFitCut_;
+ const double VtxNdofCut_;
+ const double VtxAbsZCut_;
+ const double VtxRhoCut_;
- // bacon fillers
- std::unique_ptr fTrigger;
+ const std::string IDTypestr_;
+ const std::string IsoTypestr_;
+ const double IsoCut_;
- std::string IDTypestr_;
- std::string IsoTypestr_;
+ // muon ID and ISO parameters
MuonIDTypes IDType_{NoneID};
MuonIsoTypes IsoType_{NoneIso};
- double IsoCut_;
-
- double PtCutL1_;
- double PtCutL2_;
- double EtaCutL1_;
- double EtaCutL2_;
-
- int MassBin_;
- double MassMin_;
- double MassMax_;
- int LumiBin_;
- double LumiMin_;
- double LumiMax_;
+ // trigger objects
+ HLTConfigProvider hltConfigProvider_;
+ TriggerTools* triggers;
- int PVBin_;
- double PVMin_;
- double PVMax_;
-
- double VtxNTracksFitCut_;
- double VtxNdofCut_;
- double VtxAbsZCut_;
- double VtxRhoCut_;
+ // constants
+ const double DRMAX = 0.1; // max dR matching between muon and hlt object
const double MUON_MASS = 0.105658369;
const double MUON_BOUND = 0.9;
- const float ELECTRON_MASS = 0.000511;
-
- const float ELE_PT_CUT_TAG;
- const float ELE_PT_CUT_PROBE;
- const float ELE_ETA_CUT_TAG;
- const float ELE_ETA_CUT_PROBE;
- const float ELE_MASS_CUT_LOW;
- const float ELE_MASS_CUT_HIGH;
-
- const std::string ELE_ID_WP;
- const float ELE_ETA_CRACK_LOW = 1.4442;
- const float ELE_ETA_CRACK_HIGH = 1.56;
- // Electron-specific members
- ElectronIdentifier EleID_;
+ // General Histograms
+ MonitorElement* h_npv;
// Muon Histograms
- MonitorElement* h_mass_HLT_pass_central;
- MonitorElement* h_mass_HLT_pass_forward;
- MonitorElement* h_mass_HLT_fail_central;
- MonitorElement* h_mass_HLT_fail_forward;
+ MonitorElement* h_mass_2HLT_BB;
+ MonitorElement* h_mass_2HLT_BE;
+ MonitorElement* h_mass_2HLT_EE;
- MonitorElement* h_mass_SIT_pass_central;
- MonitorElement* h_mass_SIT_pass_forward;
- MonitorElement* h_mass_SIT_fail_central;
- MonitorElement* h_mass_SIT_fail_forward;
+ MonitorElement* h_mass_1HLT_BB;
+ MonitorElement* h_mass_1HLT_BE;
+ MonitorElement* h_mass_1HLT_EE;
- MonitorElement* h_mass_Glo_pass_central;
- MonitorElement* h_mass_Glo_pass_forward;
- MonitorElement* h_mass_Glo_fail_central;
- MonitorElement* h_mass_Glo_fail_forward;
+ MonitorElement* h_mass_SIT_fail_BB;
+ MonitorElement* h_mass_SIT_fail_BE;
+ MonitorElement* h_mass_SIT_fail_EE;
- MonitorElement* h_npv;
- MonitorElement* h_npv_yield_Z;
- MonitorElement* h_mass_yield_Z;
- MonitorElement* h_yieldBB_Z;
- MonitorElement* h_yieldEE_Z;
-
- // Electron Histograms
- MonitorElement* h_ee_mass_id_pass_central;
- MonitorElement* h_ee_mass_id_fail_central;
- MonitorElement* h_ee_mass_id_pass_forward;
- MonitorElement* h_ee_mass_id_fail_forward;
-
- MonitorElement* h_ee_mass_HLT_pass_central;
- MonitorElement* h_ee_mass_HLT_fail_central;
- MonitorElement* h_ee_mass_HLT_pass_forward;
- MonitorElement* h_ee_mass_HLT_fail_forward;
-
- MonitorElement* h_ee_yield_Z_ebeb;
- MonitorElement* h_ee_yield_Z_ebee;
- MonitorElement* h_ee_yield_Z_eeee;
+ MonitorElement* h_mass_Glo_fail_BB;
+ MonitorElement* h_mass_Glo_fail_BE;
+ MonitorElement* h_mass_Glo_fail_EE;
};
#endif
diff --git a/DQMOffline/Lumi/plugins/ZCountingElectrons.cc b/DQMOffline/Lumi/plugins/ZCountingElectrons.cc
new file mode 100644
index 0000000000000..73a8672160c02
--- /dev/null
+++ b/DQMOffline/Lumi/plugins/ZCountingElectrons.cc
@@ -0,0 +1,418 @@
+#include "FWCore/Framework/interface/Event.h"
+#include "FWCore/Common/interface/TriggerNames.h"
+#include "FWCore/Utilities/interface/RegexMatch.h"
+#include "DataFormats/Common/interface/Handle.h"
+#include "DataFormats/Common/interface/TriggerResults.h"
+#include "DataFormats/HLTReco/interface/TriggerEvent.h"
+#include "DataFormats/VertexReco/interface/Vertex.h"
+
+#include
+
+#include
+
+#include "DQMOffline/Lumi/plugins/ZCountingElectrons.h"
+
+//
+// -------------------------------------- Constructor --------------------------------------------
+//
+ZCountingElectrons::ZCountingElectrons(const edm::ParameterSet& iConfig)
+ : triggerResultsInputTag_(iConfig.getParameter("TriggerResults")),
+ fPVName_token(consumes(
+ iConfig.getUntrackedParameter("edmPVName", "offlinePrimaryVertices"))),
+
+ // Electron-specific Parameters
+ fGsfElectronName_token(consumes>(
+ iConfig.getUntrackedParameter("edmGsfEleName", "gedGsfElectrons"))),
+ fSCName_token(consumes>(
+ iConfig.getUntrackedParameter("edmSCName", "particleFlowEGamma"))),
+
+ // Electron-specific Tags
+ fRhoToken(consumes(iConfig.getParameter("rhoname"))),
+ fBeamspotToken(consumes(iConfig.getParameter("beamspotName"))),
+ fConversionToken(consumes(iConfig.getParameter("conversionsName"))),
+
+ // Electron-specific Cuts
+ PtCutL1_(iConfig.getUntrackedParameter("PtCutL1")),
+ PtCutL2_(iConfig.getUntrackedParameter("PtCutL2")),
+ EtaCutL1_(iConfig.getUntrackedParameter("EtaCutL1")),
+ EtaCutL2_(iConfig.getUntrackedParameter("EtaCutL2")),
+
+ MassBin_(iConfig.getUntrackedParameter("MassBin")),
+ MassMin_(iConfig.getUntrackedParameter("MassMin")),
+ MassMax_(iConfig.getUntrackedParameter("MassMax")),
+
+ LumiBin_(iConfig.getUntrackedParameter("LumiBin")),
+ LumiMin_(iConfig.getUntrackedParameter("LumiMin")),
+ LumiMax_(iConfig.getUntrackedParameter("LumiMax")),
+
+ PVBin_(iConfig.getUntrackedParameter("PVBin")),
+ PVMin_(iConfig.getUntrackedParameter("PVMin")),
+ PVMax_(iConfig.getUntrackedParameter("PVMax")),
+
+ VtxNTracksFitCut_(iConfig.getUntrackedParameter("VtxNTracksFitMin")),
+ VtxNdofCut_(iConfig.getUntrackedParameter("VtxNdofMin")),
+ VtxAbsZCut_(iConfig.getUntrackedParameter("VtxAbsZMax")),
+ VtxRhoCut_(iConfig.getUntrackedParameter("VtxRhoMax")),
+
+ ELE_ID_WP(iConfig.getUntrackedParameter("ElectronIDType", "TIGHT")),
+ EleID_(ElectronIdentifier(iConfig)) {
+ edm::LogInfo("ZCounting") << "Constructor ZCountingElectrons::ZCounting " << std::endl;
+
+ // Trigger settings
+ triggers = new TriggerTools();
+ triggers->setTriggerResultsToken(consumes(triggerResultsInputTag_));
+ triggers->setTriggerEventToken(consumes(iConfig.getParameter("TriggerEvent")));
+ triggers->setDRMAX(DRMAX);
+
+ edm::LogVerbatim("ZCounting") << "ZCounting::ZCounting set trigger names";
+ const std::vector patterns_ = iConfig.getParameter>("ElectronTriggerNames");
+ for (const std::string& pattern_ : patterns_) {
+ triggers->addTriggerRecord(pattern_);
+ }
+
+ EleID_.setID(ELE_ID_WP);
+}
+
+//
+// -------------------------------------- Destructor --------------------------------------------
+//
+ZCountingElectrons::~ZCountingElectrons() {
+ edm::LogInfo("ZCountingElectrons") << "Destructor ZCountingElectrons::~ZCountingElectrons " << std::endl;
+}
+
+//
+// -------------------------------------- beginRun --------------------------------------------
+//
+void ZCountingElectrons::dqmBeginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
+ edm::LogInfo("ZCountingElectrons") << "ZCountingElectrons::beginRun" << std::endl;
+
+ // initialize triggers
+
+ edm::LogVerbatim("ZCountingElectrons") << "ZCountingElectrons::dqmBeginRun now at " << iRun.id();
+
+ bool hltChanged_ = true;
+ if (hltConfigProvider_.init(iRun, iSetup, triggerResultsInputTag_.process(), hltChanged_)) {
+ edm::LogVerbatim("ZCountingElectrons")
+ << "ZCountingElectrons::dqmBeginRun [TriggerObjMatchValueMapsProducer::beginRun] "
+ "HLTConfigProvider initialized [processName() = \""
+ << hltConfigProvider_.processName() << "\", tableName() = \"" << hltConfigProvider_.tableName()
+ << "\", size() = " << hltConfigProvider_.size() << "]";
+ } else {
+ edm::LogError("ZCountingElectrons")
+ << "ZCountingElectrons::dqmBeginRun Initialization of HLTConfigProvider failed for Run=" << iRun.id()
+ << " (process=\"" << triggerResultsInputTag_.process() << "\") -> plugin will not produce outputs for this Run";
+ return;
+ }
+
+ triggers->initHLTObjects(hltConfigProvider_);
+}
+//
+// -------------------------------------- bookHistos --------------------------------------------
+//
+void ZCountingElectrons::bookHistograms(DQMStore::IBooker& ibooker_, edm::Run const&, edm::EventSetup const&) {
+ edm::LogInfo("ZCountingElectrons") << "ZCountingElectrons::bookHistograms" << std::endl;
+ ibooker_.cd();
+ ibooker_.setCurrentFolder("ZCounting/Histograms");
+
+ h_npv = ibooker_.book2D(
+ "h_npv", "Events with valid primary vertex", LumiBin_, LumiMin_, LumiMax_, PVBin_, PVMin_, PVMax_);
+
+ h_npv->setAxisTitle("luminosity section", 1);
+ h_npv->setAxisTitle("number of primary vertices", 2);
+
+ // Electron histograms
+ h_ee_mass_id_pass_central = ibooker_.book2D("h_ee_mass_id_pass_central",
+ "h_ee_mass_id_pass_central",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_ee_mass_id_fail_central = ibooker_.book2D("h_ee_mass_id_fail_central",
+ "h_ee_mass_id_fail_central",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_ee_mass_id_pass_forward = ibooker_.book2D("h_ee_mass_id_pass_forward",
+ "h_ee_mass_id_pass_forward",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_ee_mass_id_fail_forward = ibooker_.book2D("h_ee_mass_id_fail_forward",
+ "h_ee_mass_id_fail_forward",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+
+ h_ee_mass_HLT_pass_central = ibooker_.book2D("h_ee_mass_HLT_pass_central",
+ "h_ee_mass_HLT_pass_central",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_ee_mass_HLT_fail_central = ibooker_.book2D("h_ee_mass_HLT_fail_central",
+ "h_ee_mass_HLT_fail_central",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_ee_mass_HLT_pass_forward = ibooker_.book2D("h_ee_mass_HLT_pass_forward",
+ "h_ee_mass_HLT_pass_forward",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+ h_ee_mass_HLT_fail_forward = ibooker_.book2D("h_ee_mass_HLT_fail_forward",
+ "h_ee_mass_HLT_fail_forward",
+ LumiBin_,
+ LumiMin_,
+ LumiMax_,
+ MassBin_,
+ MassMin_,
+ MassMax_);
+
+ h_ee_yield_Z_ebeb = ibooker_.book1D("h_ee_yield_Z_ebeb", "h_ee_yield_Z_ebeb", LumiBin_, LumiMin_, LumiMax_);
+ h_ee_yield_Z_ebee = ibooker_.book1D("h_ee_yield_Z_ebee", "h_ee_yield_Z_ebee", LumiBin_, LumiMin_, LumiMax_);
+ h_ee_yield_Z_eeee = ibooker_.book1D("h_ee_yield_Z_eeee", "h_ee_yield_Z_eeee", LumiBin_, LumiMin_, LumiMax_);
+}
+
+//
+// -------------------------------------- Analyze --------------------------------------------
+//
+//--------------------------------------------------------------------------------------------------
+void ZCountingElectrons::analyze(const edm::Event& iEvent,
+ const edm::EventSetup& iSetup) { // Fill event tree on the fly
+ edm::LogInfo("ZCountingElectrons") << "ZCountingElectrons::analyze" << std::endl;
+
+ //-------------------------------
+ //--- Vertex
+ //-------------------------------
+ edm::Handle hVertexProduct;
+ iEvent.getByToken(fPVName_token, hVertexProduct);
+ if (!hVertexProduct.isValid()) {
+ edm::LogWarning("ZCounting") << "ZCountingElectrons::analyze - no valid primary vertex product found" << std::endl;
+ return;
+ }
+ // const reco::VertexCollection* pvCol = hVertexProduct.product();
+ // const reco::Vertex* pv = &(*pvCol->begin());
+ int nvtx = 0;
+
+ for (auto const& itVtx : *hVertexProduct) {
+ if (itVtx.isFake())
+ continue;
+ if (itVtx.tracksSize() < VtxNTracksFitCut_)
+ continue;
+ if (itVtx.ndof() < VtxNdofCut_)
+ continue;
+ if (fabs(itVtx.z()) > VtxAbsZCut_)
+ continue;
+ if (itVtx.position().Rho() > VtxRhoCut_)
+ continue;
+
+ // if (nvtx == 0) {
+ // pv = &itVtx;
+ // }
+ nvtx++;
+ }
+
+ h_npv->Fill(iEvent.luminosityBlock(), nvtx);
+
+ //-------------------------------
+ //--- Trigger
+ //-------------------------------
+ triggers->readEvent(iEvent);
+
+ // Trigger requirement
+ if (!triggers->pass())
+ return;
+
+ // Get Electrons
+ edm::Handle> electrons;
+ iEvent.getByToken(fGsfElectronName_token, electrons);
+
+ // Get SuperClusters
+ edm::Handle> superclusters;
+ iEvent.getByToken(fSCName_token, superclusters);
+
+ // Get Rho
+ edm::Handle rhoHandle;
+ iEvent.getByToken(fRhoToken, rhoHandle);
+ EleID_.setRho(*rhoHandle);
+
+ // Get beamspot
+ edm::Handle beamspotHandle;
+ iEvent.getByToken(fBeamspotToken, beamspotHandle);
+
+ // Conversions
+ edm::Handle conversionsHandle;
+ iEvent.getByToken(fConversionToken, conversionsHandle);
+
+ edm::Ptr eleProbe;
+ enum { eEleEle2HLT = 1, eEleEle1HLT1L1, eEleEle1HLT, eEleEleNoSel, eEleSC }; // event category enum
+
+ // Loop over Tags
+ for (size_t itag = 0; itag < electrons->size(); ++itag) {
+ const auto el1 = electrons->ptrAt(itag);
+ if (not EleID_.passID(el1, beamspotHandle, conversionsHandle))
+ continue;
+
+ float pt1 = el1->pt();
+ float eta1 = el1->eta();
+ float phi1 = el1->phi();
+
+ if (!triggers->passObj(eta1, phi1))
+ continue;
+ TLorentzVector vTag(0., 0., 0., 0.);
+ vTag.SetPtEtaPhiM(pt1, eta1, phi1, ELECTRON_MASS);
+
+ // Tag selection: kinematic cuts, lepton selection and trigger matching
+ double tag_pt = vTag.Pt();
+ double tag_abseta = fabs(vTag.Eta());
+
+ bool tag_is_valid_tag = ele_tag_selection(tag_pt, tag_abseta);
+ bool tag_is_valid_probe = ele_probe_selection(tag_pt, tag_abseta);
+
+ if (not(tag_is_valid_tag or tag_is_valid_probe))
+ continue;
+
+ // Loop over probes
+ for (size_t iprobe = 0; iprobe < superclusters->size(); ++iprobe) {
+ // Initialize probe
+ const auto sc = superclusters->ptrAt(iprobe);
+ if (*sc == *(el1->superCluster())) {
+ continue;
+ }
+
+ // Find matching electron
+ for (size_t iele = 0; iele < electrons->size(); ++iele) {
+ if (iele == itag)
+ continue;
+ const auto ele = electrons->ptrAt(iele);
+ if (*sc == *(ele->superCluster())) {
+ eleProbe = ele;
+ break;
+ }
+ }
+
+ // Assign final probe 4-vector
+ TLorentzVector vProbe(0., 0., 0., 0.);
+ if (eleProbe.isNonnull()) {
+ vProbe.SetPtEtaPhiM(eleProbe->pt(), eleProbe->eta(), eleProbe->phi(), ELECTRON_MASS);
+ } else {
+ double pt = sc->energy() * sqrt(1 - pow(tanh(sc->eta()), 2));
+ vProbe.SetPtEtaPhiM(pt, sc->eta(), sc->phi(), ELECTRON_MASS);
+ }
+
+ // Probe Selection
+ double probe_pt = vProbe.Pt();
+ double probe_abseta = fabs(sc->eta());
+ bool probe_is_valid_probe = ele_probe_selection(probe_pt, probe_abseta);
+ if (!probe_is_valid_probe)
+ continue;
+
+ // Good Probe found!
+
+ // Require good Z
+ TLorentzVector vDilep = vTag + vProbe;
+
+ if ((vDilep.M() < MassMin_) || (vDilep.M() > MassMax_))
+ continue;
+ if (eleProbe.isNonnull() and (eleProbe->charge() != -el1->charge()))
+ continue;
+
+ // Good Z found!
+ long ls = iEvent.luminosityBlock();
+ bool probe_pass_trigger = triggers->passObj(vProbe.Eta(), vProbe.Phi());
+ bool probe_pass_id = eleProbe.isNonnull() and EleID_.passID(eleProbe, beamspotHandle, conversionsHandle);
+
+ //// Fill for yields
+ bool probe_is_forward = probe_abseta > ELE_ETA_CRACK_LOW;
+ bool tag_is_forward = tag_abseta > ELE_ETA_CRACK_LOW;
+
+ if (probe_pass_id) {
+ if (probe_is_forward and tag_is_forward) {
+ h_ee_yield_Z_eeee->Fill(ls);
+ } else if (!probe_is_forward and !tag_is_forward) {
+ h_ee_yield_Z_ebeb->Fill(ls);
+ } else {
+ h_ee_yield_Z_ebee->Fill(ls);
+ }
+ }
+
+ if (!tag_is_valid_tag)
+ continue;
+
+ /// Fill for ID efficiency
+ if (probe_pass_id) {
+ if (probe_is_forward) {
+ h_ee_mass_id_pass_forward->Fill(ls, vDilep.M());
+ } else {
+ h_ee_mass_id_pass_central->Fill(ls, vDilep.M());
+ }
+ } else {
+ if (probe_is_forward) {
+ h_ee_mass_id_fail_forward->Fill(ls, vDilep.M());
+ } else {
+ h_ee_mass_id_fail_central->Fill(ls, vDilep.M());
+ }
+ }
+
+ /// Fill for HLT efficiency
+ if (probe_pass_id and probe_pass_trigger) {
+ if (probe_is_forward) {
+ h_ee_mass_HLT_pass_forward->Fill(ls, vDilep.M());
+ } else {
+ h_ee_mass_HLT_pass_central->Fill(ls, vDilep.M());
+ }
+ } else if (probe_pass_id) {
+ if (probe_is_forward) {
+ h_ee_mass_HLT_fail_forward->Fill(ls, vDilep.M());
+ } else {
+ h_ee_mass_HLT_fail_central->Fill(ls, vDilep.M());
+ }
+ }
+ } // End of probe loop
+ } //End of tag loop
+}
+
+//
+// -------------------------------------- functions --------------------------------------------
+//
+
+bool ZCountingElectrons::ele_probe_selection(double pt, double abseta) {
+ if (pt < PtCutL2_)
+ return false;
+ if (abseta > EtaCutL2_)
+ return false;
+ if ((abseta > ELE_ETA_CRACK_LOW) and (abseta < ELE_ETA_CRACK_HIGH))
+ return false;
+ return true;
+}
+
+bool ZCountingElectrons::ele_tag_selection(double pt, double abseta) {
+ if (pt < PtCutL1_)
+ return false;
+ if (abseta > EtaCutL1_)
+ return false;
+ if ((abseta > ELE_ETA_CRACK_LOW) and (abseta < ELE_ETA_CRACK_HIGH))
+ return false;
+ return true;
+}
+
+DEFINE_FWK_MODULE(ZCountingElectrons);
diff --git a/DQMOffline/Lumi/plugins/ZCountingElectrons.h b/DQMOffline/Lumi/plugins/ZCountingElectrons.h
new file mode 100644
index 0000000000000..1b466d8e251c4
--- /dev/null
+++ b/DQMOffline/Lumi/plugins/ZCountingElectrons.h
@@ -0,0 +1,106 @@
+#ifndef ZCountingElectrons_H
+#define ZCountingElectrons_H
+
+#include "FWCore/Framework/interface/MakerMacros.h" // definitions for declaring plug-in modules
+#include "FWCore/Framework/interface/Frameworkfwd.h" // declaration of EDM types
+#include "FWCore/Framework/interface/EDAnalyzer.h" // EDAnalyzer class
+#include "FWCore/Framework/interface/ConsumesCollector.h"
+#include "FWCore/ParameterSet/interface/ParameterSet.h" // Parameters
+#include "FWCore/Utilities/interface/InputTag.h"
+
+#include // string class
+#include
+
+#include "DataFormats/HLTReco/interface/TriggerEvent.h"
+#include "DataFormats/VertexReco/interface/Vertex.h"
+#include "DataFormats/VertexReco/interface/VertexFwd.h"
+
+#include "DQMServices/Core/interface/DQMEDAnalyzer.h"
+#include "DQMServices/Core/interface/DQMStore.h"
+
+#include "DQMOffline/Lumi/interface/TriggerTools.h"
+#include "DQMOffline/Lumi/interface/ElectronIdentifier.h"
+
+class ZCountingElectrons : public DQMEDAnalyzer {
+public:
+ ZCountingElectrons(const edm::ParameterSet& ps);
+ ~ZCountingElectrons() override;
+
+protected:
+ void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override;
+ void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
+ void analyze(edm::Event const& e, edm::EventSetup const& eSetup) override;
+
+private:
+ // Electron-specific functions
+ bool ele_probe_selection(double pt, double abseta);
+ bool ele_tag_selection(double pt, double abseta);
+
+ // EDM object collection names
+ const edm::InputTag triggerResultsInputTag_;
+ edm::EDGetTokenT fPVName_token;
+
+ // Electrons
+ edm::EDGetTokenT> fGsfElectronName_token;
+ edm::EDGetTokenT> fSCName_token;
+ edm::EDGetTokenT fRhoToken;
+ edm::EDGetTokenT fBeamspotToken;
+ edm::EDGetTokenT fConversionToken;
+
+ double PtCutL1_;
+ double PtCutL2_;
+ double EtaCutL1_;
+ double EtaCutL2_;
+
+ int MassBin_;
+ double MassMin_;
+ double MassMax_;
+
+ int LumiBin_;
+ double LumiMin_;
+ double LumiMax_;
+
+ int PVBin_;
+ double PVMin_;
+ double PVMax_;
+
+ double VtxNTracksFitCut_;
+ double VtxNdofCut_;
+ double VtxAbsZCut_;
+ double VtxRhoCut_;
+
+ const std::string ELE_ID_WP;
+
+ // trigger objects
+ HLTConfigProvider hltConfigProvider_;
+ TriggerTools* triggers;
+
+ //constants
+ const double DRMAX = 0.1; // max dR matching between muon and hlt object
+ const float ELECTRON_MASS = 0.000511;
+ const float ELE_ETA_CRACK_LOW = 1.4442;
+ const float ELE_ETA_CRACK_HIGH = 1.56;
+
+ // Electron-specific members
+ ElectronIdentifier EleID_;
+
+ // General Histograms
+ MonitorElement* h_npv;
+
+ // Electron Histograms
+ MonitorElement* h_ee_mass_id_pass_central;
+ MonitorElement* h_ee_mass_id_fail_central;
+ MonitorElement* h_ee_mass_id_pass_forward;
+ MonitorElement* h_ee_mass_id_fail_forward;
+
+ MonitorElement* h_ee_mass_HLT_pass_central;
+ MonitorElement* h_ee_mass_HLT_fail_central;
+ MonitorElement* h_ee_mass_HLT_pass_forward;
+ MonitorElement* h_ee_mass_HLT_fail_forward;
+
+ MonitorElement* h_ee_yield_Z_ebeb;
+ MonitorElement* h_ee_yield_Z_ebee;
+ MonitorElement* h_ee_yield_Z_eeee;
+};
+
+#endif
diff --git a/DQMOffline/Lumi/python/ZCounting_cff.py b/DQMOffline/Lumi/python/ZCounting_cff.py
index be8b0f5bdfe3d..311a8a1486e5d 100644
--- a/DQMOffline/Lumi/python/ZCounting_cff.py
+++ b/DQMOffline/Lumi/python/ZCounting_cff.py
@@ -1,80 +1,4 @@
import FWCore.ParameterSet.Config as cms
-from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
-zcounting = DQMEDAnalyzer('ZCounting',
- TriggerEvent = cms.InputTag('hltTriggerSummaryAOD','','HLT'),
- TriggerResults = cms.InputTag('TriggerResults','','HLT'),
- edmPVName = cms.untracked.string('offlinePrimaryVertices'),
- edmName = cms.untracked.string('muons'),
- edmTrackName = cms.untracked.string('generalTracks'),
-
- edmGsfEleName = cms.untracked.string('gedGsfElectrons'),
- edmSCName = cms.untracked.string('particleFlowEGamma'),
-
- effAreasConfigFile = cms.FileInPath("RecoEgamma/ElectronIdentification/data/Summer16/effAreaElectrons_cone03_pfNeuHadronsAndPhotons_80X.txt"),
-
- rhoname = cms.InputTag('fixedGridRhoFastjetAll'),
- beamspotName = cms.InputTag('offlineBeamSpot'),
- conversionsName = cms.InputTag('conversions'),
-
- MuonTriggerNames = cms.vstring("HLT_IsoMu24_v*"),
- MuonTriggerObjectNames = cms.vstring("hltL3crIsoL1sSingleMu22L1f0L2f10QL3f24QL3trkIsoFiltered0p08"),
-
- IDType = cms.untracked.string("CustomTight"),# Tight, Medium, Loose, CustomTight
- IsoType = cms.untracked.string("NULL"), # Tracker-based, PF-based
- IsoCut = cms.untracked.double(0.), # {0.05, 0.10} for Tracker-based, {0.15, 0.25} for PF-based
-
- PtCutL1 = cms.untracked.double(27.0),
- PtCutL2 = cms.untracked.double(27.0),
- EtaCutL1 = cms.untracked.double(2.4),
- EtaCutL2 = cms.untracked.double(2.4),
-
- PtCutEleTag = cms.untracked.double(40.0),
- PtCutEleProbe = cms.untracked.double(35.0),
- EtaCutEleTag = cms.untracked.double(2.5),
- EtaCutEleProbe = cms.untracked.double(2.5),
- MassCutEleLow = cms.untracked.double(80.0),
- MassCutEleHigh = cms.untracked.double(100.0),
-
- ElectronIDType = cms.untracked.string("TIGHT"),
-
- MassBin = cms.untracked.int32(80),
- MassMin = cms.untracked.double(50.0),
- MassMax = cms.untracked.double(130.0),
-
- LumiBin = cms.untracked.int32(2500),
- LumiMin = cms.untracked.double(0.5),
- LumiMax = cms.untracked.double(2500.5),
-
- PVBin = cms.untracked.int32(100),
- PVMin = cms.untracked.double(0.5),
- PVMax = cms.untracked.double(100.5),
-
- VtxNTracksFitMin = cms.untracked.double(0.),
- VtxNdofMin = cms.untracked.double(4.),
- VtxAbsZMax = cms.untracked.double(24.),
- VtxRhoMax = cms.untracked.double(2.)
- )
-
-
-from Configuration.Eras.Modifier_run2_HLTconditions_2016_cff import run2_HLTconditions_2016
-run2_HLTconditions_2016.toModify( zcounting, MuonTriggerNames = cms.vstring("HLT_IsoMu24_v*","HLT_IsoTkMu24_v*"),
- MuonTriggerObjectNames = cms.vstring("hltL3crIsoL1sSingleMu22L1f0L2f10QL3f24QL3trkIsoFiltered0p07",
- "hltL3fL1sMu22L1f0Tkf24QL3trkIsoFiltered0p09"),
- PtCutL1 = cms.untracked.double(27.0),
- PtCutL2 = cms.untracked.double(27.0)
- )
-
-from Configuration.Eras.Modifier_run2_HLTconditions_2017_cff import run2_HLTconditions_2017
-run2_HLTconditions_2017.toModify(zcounting, MuonTriggerNames = cms.vstring("HLT_IsoMu27_v*"),
- MuonTriggerObjectNames = cms.vstring("hltL3crIsoL1sMu22Or25L1f0L2f10QL3f27QL3trkIsoFiltered0p07"),
- PtCutL1 = cms.untracked.double(30.0),
- PtCutL2 = cms.untracked.double(30.0)
- )
-
-from Configuration.Eras.Modifier_run2_HLTconditions_2018_cff import run2_HLTconditions_2018
-run2_HLTconditions_2018.toModify(zcounting, MuonTriggerNames = cms.vstring("HLT_IsoMu24_v*"),
- MuonTriggerObjectNames = cms.vstring("hltL3crIsoL1sSingleMu22L1f0L2f10QL3f24QL3trkIsoFiltered0p07"),
- PtCutL1 = cms.untracked.double(27.0),
- PtCutL2 = cms.untracked.double(27.0)
- )
+from DQMOffline.Lumi.ZCounting_cfi import *
+zcounting = cms.Sequence(ZCounting)
diff --git a/DQMOffline/Lumi/python/ZCounting_cfi.py b/DQMOffline/Lumi/python/ZCounting_cfi.py
new file mode 100644
index 0000000000000..1fa0980180354
--- /dev/null
+++ b/DQMOffline/Lumi/python/ZCounting_cfi.py
@@ -0,0 +1,44 @@
+import FWCore.ParameterSet.Config as cms
+
+from DQMServices.Core.DQMEDAnalyzer import DQMEDAnalyzer
+ZCounting = DQMEDAnalyzer('ZCounting',
+ TriggerEvent=cms.InputTag(
+ 'hltTriggerSummaryAOD', '', 'HLT'),
+ TriggerResults=cms.InputTag(
+ 'TriggerResults', '', 'HLT'),
+ edmPVName=cms.untracked.string(
+ 'offlinePrimaryVertices'),
+ edmName=cms.untracked.string('muons'),
+ edmTrackName=cms.untracked.string('generalTracks'),
+
+ MuonTriggerNames=cms.vstring("HLT_IsoMu24_v*"),
+
+ # Tight, Medium, Loose, CustomTight
+ IDType=cms.untracked.string("CustomTight"),
+ IsoType=cms.untracked.string(
+ "NULL"), # Tracker-based, PF-based
+ # {0.05, 0.10} for Tracker-based, {0.15, 0.25} for PF-based
+ IsoCut=cms.untracked.double(0.),
+
+ PtCutL1=cms.untracked.double(27.0),
+ PtCutL2=cms.untracked.double(27.0),
+ EtaCutL1=cms.untracked.double(2.4),
+ EtaCutL2=cms.untracked.double(2.4),
+
+ MassBin=cms.untracked.int32(80),
+ MassMin=cms.untracked.double(50.0),
+ MassMax=cms.untracked.double(130.0),
+
+ LumiBin=cms.untracked.int32(2500),
+ LumiMin=cms.untracked.double(0.5),
+ LumiMax=cms.untracked.double(2500.5),
+
+ PVBin=cms.untracked.int32(100),
+ PVMin=cms.untracked.double(0.5),
+ PVMax=cms.untracked.double(100.5),
+
+ VtxNTracksFitMin=cms.untracked.double(0.),
+ VtxNdofMin=cms.untracked.double(4.),
+ VtxAbsZMax=cms.untracked.double(24.),
+ VtxRhoMax=cms.untracked.double(2.)
+ )
diff --git a/DQMOffline/Lumi/src/ElectronIdentifier.cc b/DQMOffline/Lumi/src/ElectronIdentifier.cc
index 05eab88f24d21..d5f66dff8e14e 100644
--- a/DQMOffline/Lumi/src/ElectronIdentifier.cc
+++ b/DQMOffline/Lumi/src/ElectronIdentifier.cc
@@ -1,10 +1,7 @@
#include "DQMOffline/Lumi/interface/ElectronIdentifier.h"
#include "FWCore/Framework/interface/Event.h"
-#include "FWCore/Common/interface/TriggerNames.h"
#include "FWCore/Utilities/interface/RegexMatch.h"
#include "DataFormats/Common/interface/Handle.h"
-#include "DataFormats/Common/interface/TriggerResults.h"
-#include "DataFormats/HLTReco/interface/TriggerEvent.h"
#include "DataFormats/VertexReco/interface/Vertex.h"
#include "DataFormats/MuonReco/interface/Muon.h"
#include "DataFormats/MuonReco/interface/MuonSelectors.h"
@@ -14,9 +11,6 @@
#include "DataFormats/EgammaReco/interface/SuperCluster.h"
#include "CommonTools/Egamma/interface/ConversionTools.h"
-#include "DQMOffline/Lumi/interface/TTrigger.h"
-#include "DQMOffline/Lumi/interface/TriggerTools.h"
-
#include
#include
#include
diff --git a/DQMOffline/Lumi/src/TTrigger.cc b/DQMOffline/Lumi/src/TTrigger.cc
deleted file mode 100644
index 25aa5976d9139..0000000000000
--- a/DQMOffline/Lumi/src/TTrigger.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-#include "DQMOffline/Lumi/interface/TTrigger.h"
-#include "FWCore/MessageLogger/interface/MessageLogger.h"
-
-#include
-#include
-#include
-#include
-#include
-
-using namespace ZCountingTrigger;
-
-//--------------------------------------------------------------------------------------------------
-//
-// Reads in an input file specifying the triggers we're interested in.
-// The input file has the format:
-//
-//
-// A trigger with multiple objects will have multiple entries with the same but
-// one entry for each .
-//
-// The trigger object leg numbering is to account for the possibility that a particular object of
-// the trigger can evolve and obtain a different trigger object name, but we still want this to
-// be associated with the same leg (e.g. the trailing electron in a dielectron trigger)
-//
-TTrigger::TTrigger(const std::vector &muonTriggerNames,
- const std::vector &muonTriggerObjectNames) {
- for (unsigned int i = 0; i < muonTriggerNames.size(); ++i) {
- fRecords.push_back(ZCountingTrigger::TriggerRecord(muonTriggerNames.at(i), 0));
- fRecords.back().objectMap.push_back(std::pair(muonTriggerObjectNames.at(i), 0));
- }
- fRecords.push_back(ZCountingTrigger::TriggerRecord("HLT_Ele35_WPTight_Gsf_v*", 1));
- fRecords.back().objectMap.push_back(std::pair("hltEle35noerWPTightGsfTrackIsoFilter", 0));
- fRecords.push_back(ZCountingTrigger::TriggerRecord("HLT_Ele27_WPTight_Gsf_v*", 2));
- fRecords.back().objectMap.push_back(std::pair("hltEle27WPTightGsfTrackIsoFilter", 0));
-}
-
-//--------------------------------------------------------------------------------------------------
-int TTrigger::getTriggerBit(const std::string &iName) const {
- int lId = -1;
- for (unsigned int i0 = 0; i0 < fRecords.size(); i0++) {
- if (iName == fRecords[i0].hltPattern)
- lId = i0;
- }
- if (lId == -1)
- edm::LogWarning("ZCounting") << "=== Missing Trigger ==" << iName << std::endl;
- return lId;
-}
-
-//--------------------------------------------------------------------------------------------------
-int TTrigger::getTriggerObjectBit(const std::string &iName, const std::string &iObjName) const {
- int lId = getTriggerBit(iName);
- if (lId == -1)
- return -1;
-
- for (unsigned int i0 = 0; i0 < fRecords[lId].objectMap.size(); i0++) {
- if (iObjName != fRecords[lId].objectMap[i0].first)
- continue;
- return fRecords[lId].objectMap[i0].second;
- }
-
- return -1;
-}
-
-//--------------------------------------------------------------------------------------------------
-bool TTrigger::pass(const std::string &iName, const TriggerBits &iTrig) const {
- int lId = getTriggerBit(iName);
- if (lId == -1)
- return false;
-
- return iTrig[lId];
-}
-
-//--------------------------------------------------------------------------------------------------
-bool TTrigger::passObj(const std::string &iName, const std::string &iObjName, const TriggerObjects &iTrigObj) const {
- int lId = getTriggerObjectBit(iName, iObjName);
- if (lId == -1)
- return false;
-
- return iTrigObj[lId];
-}
diff --git a/DQMOffline/Lumi/src/TriggerTools.cc b/DQMOffline/Lumi/src/TriggerTools.cc
index 82ee68813a80b..b26d60941f5d6 100644
--- a/DQMOffline/Lumi/src/TriggerTools.cc
+++ b/DQMOffline/Lumi/src/TriggerTools.cc
@@ -1,39 +1,154 @@
#include "DQMOffline/Lumi/interface/TriggerTools.h"
+
+#include "FWCore/Utilities/interface/RegexMatch.h"
#include "FWCore/Utilities/interface/InputTag.h"
#include "DataFormats/Math/interface/deltaR.h"
-#include
-using namespace ZCountingTrigger;
+#include
//--------------------------------------------------------------------------------------------------
-TriggerObjects TriggerTools::matchHLT(const double eta,
- const double phi,
- const std::vector& triggerRecords,
- const trigger::TriggerEvent& triggerEvent) {
- const double dRMax = 0.2;
-
- TriggerObjects matchBits;
- for (unsigned int irec = 0; irec < triggerRecords.size(); irec++) {
- for (unsigned int iobj = 0; iobj < triggerRecords[irec].objectMap.size(); iobj++) {
- const std::string& filterName = triggerRecords[irec].objectMap[iobj].first;
- const unsigned int filterBit = triggerRecords[irec].objectMap[iobj].second;
-
- edm::InputTag filterTag(filterName, "", "HLT");
- // filterIndex must be less than the size of trgEvent or you get a CMSException: _M_range_check
- if (triggerEvent.filterIndex(filterTag) < triggerEvent.sizeFilters()) {
- const trigger::TriggerObjectCollection& toc(triggerEvent.getObjects());
- const trigger::Keys& keys(triggerEvent.filterKeys(triggerEvent.filterIndex(filterTag)));
-
- for (unsigned int hlto = 0; hlto < keys.size(); hlto++) {
- trigger::size_type hltf = keys[hlto];
- const trigger::TriggerObject& tobj(toc[hltf]);
- if (reco::deltaR(eta, phi, tobj.eta(), tobj.phi()) < dRMax) {
- matchBits[filterBit] = true;
- }
+void TriggerTools::initPathNames(const std::vector& triggerNames) {
+ /*
+ init HLT path every run (e.g. versions can change)
+ */
+ edm::LogVerbatim("TriggerTools") << "TriggerTools::initPathNames initHLT";
+ for (auto& iRec : records) {
+ iRec.hltPathName = "";
+ iRec.hltPathIndex = (unsigned int)-1;
+ const std::string pattern = iRec.hltPattern;
+ if (edm::is_glob(pattern)) { // handle pattern with wildcards (*,?)
+ std::vector::const_iterator> matches = edm::regexMatch(triggerNames, pattern);
+ if (matches.empty()) {
+ edm::LogWarning("ZCounting") << "requested pattern [" << pattern << "] does not match any HLT paths";
+ } else {
+ for (auto const& match : matches) {
+ iRec.hltPathName = *match;
}
}
+ } else { // take full HLT path name given
+ iRec.hltPathName = pattern;
}
}
+}
+
+//--------------------------------------------------------------------------------------------------
+void TriggerTools::initHLTObjects(const HLTConfigProvider& hltConfigProvider_) {
+ /*
+ execture each run to initialize the last filter of each trigger corresponding to the corresponding object that has fired the trigger
+ */
+ edm::LogVerbatim("TriggerTools") << "TriggerTools::initHLTObjects initHLTObjects";
+ const std::vector& triggerNames(hltConfigProvider_.triggerNames());
+
+ initPathNames(triggerNames);
+
+ for (auto& iRec : records) {
+ std::vector hltFiltersWithTags_;
+
+ for (auto const& iPathName : triggerNames) {
+ if (iPathName != iRec.hltPathName) {
+ continue;
+ }
+ edm::LogVerbatim("TriggerTools") << "TriggerTools::initHLTObjects trigger name: " << iPathName;
+
+ iRec.hltPathIndex = hltConfigProvider_.triggerIndex(iPathName);
+
+ auto const& moduleLabels(hltConfigProvider_.moduleLabels(iRec.hltPathIndex));
+
+ for (int idx = moduleLabels.size() - 1; idx >= 0; --idx) {
+ auto const& moduleLabel(moduleLabels.at(idx));
+
+ auto const& moduleEDMType(hltConfigProvider_.moduleEDMType(moduleLabel));
+ if (moduleEDMType != "EDFilter") {
+ continue;
+ }
+
+ auto const& moduleType(hltConfigProvider_.moduleType(moduleLabel));
+ if ((moduleType == "HLTTriggerTypeFilter") or (moduleType == "HLTBool") or (moduleType == "HLTPrescaler")) {
+ continue;
+ }
+
+ if (!hltConfigProvider_.saveTags(moduleLabel)) {
+ continue;
+ }
+ edm::LogVerbatim("TriggerTools") << "TriggerTools::initHLTObjects new hlt object name: " << moduleLabel;
+
+ iRec.hltObjName = moduleLabel;
+ break;
+ }
+ break;
+ }
- return matchBits;
+ if (iRec.hltPathIndex == (unsigned int)-1) {
+ edm::LogWarning("TriggerTools") << "TriggerTools::initHLTObjects hltPathIndex has not been found for: "
+ << iRec.hltPattern << std::endl;
+ continue;
+ }
+ }
}
+
+//--------------------------------------------------------------------------------------------------
+void TriggerTools::readEvent(const edm::Event& iEvent) {
+ /*
+ execture each event to load trigger objects
+ */
+
+ LogDebug("TriggerTools") << "TriggerTools::readEvent";
+
+ iEvent.getByToken(fHLTTag_token, hTrgRes);
+ if (!hTrgRes.isValid()) {
+ edm::LogWarning("TriggerTools") << "TriggerTools::readEvent No valid trigger result product found";
+ }
+
+ iEvent.getByToken(fHLTObjTag_token, hTrgEvt);
+ if (!hTrgEvt.isValid()) {
+ edm::LogWarning("TriggerTools") << "TriggerTools::readEvent No valid trigger event product found";
+ }
+
+ triggerBits.reset();
+ for (unsigned int i = 0; i < records.size(); i++) {
+ if (records.at(i).hltPathIndex == (unsigned int)-1) {
+ LogDebug("TriggerTools") << "TriggerTools::readEvent hltPathIndex has not been set" << std::endl;
+ continue;
+ }
+ if (hTrgRes->accept(records.at(i).hltPathIndex)) {
+ triggerBits[i] = true;
+ }
+ }
+ LogDebug("TriggerTools") << "TriggerTools::readEvent bitset = " << triggerBits[1] << triggerBits[0];
+}
+
+//--------------------------------------------------------------------------------------------------
+bool TriggerTools::pass() const {
+ /*
+ check if the event passed any of the initialized triggers
+ */
+
+ return triggerBits != 0;
+}
+
+//--------------------------------------------------------------------------------------------------
+bool TriggerTools::passObj(const double eta, const double phi) const {
+ /*
+ check if the object is matched to any trigger of the initialized triggers, and that this trigger is passed
+ */
+
+ for (unsigned int i = 0; i < records.size(); i++) {
+ const std::string& filterName = records.at(i).hltObjName;
+
+ edm::InputTag filterTag(filterName, "", "HLT");
+ // filterIndex must be less than the size of trgEvent or you get a CMSException: _M_range_check
+ if (hTrgEvt->filterIndex(filterTag) < hTrgEvt->sizeFilters()) {
+ const trigger::TriggerObjectCollection& toc(hTrgEvt->getObjects());
+ const trigger::Keys& keys(hTrgEvt->filterKeys(hTrgEvt->filterIndex(filterTag)));
+
+ for (unsigned int hlto = 0; hlto < keys.size(); hlto++) {
+ trigger::size_type hltf = keys[hlto];
+ const trigger::TriggerObject& tobj(toc[hltf]);
+ if (reco::deltaR(eta, phi, tobj.eta(), tobj.phi()) < DRMAX) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+}
\ No newline at end of file
diff --git a/DQMOffline/Lumi/test/ZCounting_cfg.py b/DQMOffline/Lumi/test/ZCounting_cfg.py
deleted file mode 100644
index d90edd57d3cea..0000000000000
--- a/DQMOffline/Lumi/test/ZCounting_cfg.py
+++ /dev/null
@@ -1,76 +0,0 @@
-import FWCore.ParameterSet.Config as cms
-
-from Configuration.Eras.Era_Run2_2018_cff import Run2_2018
-process = cms.Process('RECODQM', Run2_2018)
-
-# import of standard configurations
-process.load('Configuration/StandardSequences/Services_cff')
-process.load('FWCore/MessageService/MessageLogger_cfi')
-process.load('Configuration/StandardSequences/GeometryDB_cff')
-process.load('Configuration/StandardSequences/MagneticField_38T_cff')
-process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
-#process.load('Configuration/StandardSequences/FrontierConditions_GlobalTag_cff')
-process.load('Configuration/EventContent/EventContent_cff')
-process.load('TrackingTools/TransientTrack/TransientTrackBuilder_cfi')
-process.load('Configuration.StandardSequences.EDMtoMEAtRunEnd_cff')
-
-# load DQM
-process.load("DQMServices.Core.DQM_cfg")
-process.load("DQMServices.Components.DQMEnvironment_cfi")
-
-process.MessageLogger.cerr.FwkReport.reportEvery = 1000
-process.GlobalTag.globaltag = '101X_dataRun2_Prompt_v9'
-#process.GlobalTag.globaltag = '92X_dataRun2_Prompt_v4'
-
-
-# trigger filter
-process.load('HLTrigger/HLTfilters/hltHighLevel_cfi')
-process.hltHighLevel.throw = cms.bool(False)
-process.hltHighLevel.HLTPaths = cms.vstring()
-
-
-from CondCore.CondDB.CondDB_cfi import *
-
-process.maxEvents = cms.untracked.PSet( input = cms.untracked.int32(100) )
-process.source = cms.Source("PoolSource",
- fileNames = cms.untracked.vstring(
-#'/store/data/Run2017B/SingleMuon/RECO/PromptReco-v1/000/297/218/00000/14C84999-6457-E711-AAE4-02163E0136E0.root'
-'file:/eos/cms/store/data/Run2018D/SingleMuon/AOD/22Jan2019-v2/110000/104D2C01-12D2-0742-BE61-897755323EDE.root'
- )
- )
-
-process.source.inputCommands = cms.untracked.vstring("keep *",
- "drop *_MEtoEDMConverter_*_*")
-
-process.options = cms.untracked.PSet(
- wantSummary = cms.untracked.bool(False),
- Rethrow = cms.untracked.vstring('ProductNotFound'),
- fileMode = cms.untracked.string('FULLMERGE')
- )
-
-
-from DQMOffline.Lumi.ZCounting_cff import zcounting
-
-process.load("DQMOffline.Lumi.ZCounting_cff")
-
-#process.zcounting.MuonTriggerNames = cms.vstring("HLT_IsoMu27_v*","HLT_IsoMu24_v*")
-#process.zcounting.MuonTriggerObjectNames = cms.vstring("hltL3crIsoL1sMu22Or25L1f0L2f10QL3f27QL3trkIsoFiltered0p07",
-# "hltL3crIsoL1sSingleMu22L1f0L2f10QL3f24QL3trkIsoFiltered0p07")
-
-process.DQMoutput = cms.OutputModule("DQMRootOutputModule",
- fileName = cms.untracked.string("OUT_step1.root"))
-
-# Path and EndPath definitions
-process.dqmoffline_step = cms.Path(process.zcounting)
-process.dqmsave_step = cms.Path(process.DQMSaver)
-#process.DQMoutput_step = cms.EndPath(process.DQMoutput)
-
-
-# Schedule definition
-process.schedule = cms.Schedule(
- process.dqmoffline_step,
-# process.DQMoutput_step
- process.dqmsave_step
- )
-
-process.dqmSaver.workflow = '/SingleMuon/Run2017B-PromptReco-v1/RECO'
diff --git a/DQMOffline/Lumi/test/zcounting_step1_fromAOD.py b/DQMOffline/Lumi/test/zcounting_step1_fromAOD.py
new file mode 100644
index 0000000000000..711dc94c5574a
--- /dev/null
+++ b/DQMOffline/Lumi/test/zcounting_step1_fromAOD.py
@@ -0,0 +1,108 @@
+# Auto generated configuration file
+# using:
+# Revision: 1.19
+# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v
+# with command line options: step1 -s DQM:@lumi --conditions=124X_dataRun3_Prompt_v4 --datatier DQMIO --eventcontent DQM --filein=root://eoscms.cern.ch//eos/cms/tier0/store/data/Run2022C/Muon/AOD/PromptReco-v1/000/357/000/00000/0a70812e-3573-4552-955d-e3be9ec4af47.root --fileout=FILEOUT.root -n -1 --data --geometry DB:Extended --python_file step1_fromAOD.py
+import FWCore.ParameterSet.Config as cms
+
+
+
+process = cms.Process('DQM')
+
+# import of standard configurations
+process.load('Configuration.StandardSequences.Services_cff')
+process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
+process.load('FWCore.MessageService.MessageLogger_cfi')
+process.load('Configuration.EventContent.EventContent_cff')
+process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
+process.load('Configuration.StandardSequences.MagneticField_cff')
+process.load('DQMServices.Core.DQMStoreNonLegacy_cff')
+process.load('DQMOffline.Configuration.DQMOffline_cff')
+process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
+
+process.maxEvents = cms.untracked.PSet(
+ input = cms.untracked.int32(-1),
+ output = cms.optional.untracked.allowed(cms.int32,cms.PSet)
+)
+
+process.MessageLogger.cerr.FwkReport.reportEvery = 1000
+
+# Input source
+process.source = cms.Source("PoolSource",
+ fileNames = cms.untracked.vstring('root://eoscms.cern.ch//eos/cms/tier0/store/data/Run2022C/Muon/AOD/PromptReco-v1/000/357/000/00000/0a70812e-3573-4552-955d-e3be9ec4af47.root'),
+ secondaryFileNames = cms.untracked.vstring()
+)
+
+process.options = cms.untracked.PSet(
+ FailPath = cms.untracked.vstring(),
+ IgnoreCompletely = cms.untracked.vstring(),
+ Rethrow = cms.untracked.vstring(),
+ SkipEvent = cms.untracked.vstring(),
+ accelerators = cms.untracked.vstring('*'),
+ allowUnscheduled = cms.obsolete.untracked.bool,
+ canDeleteEarly = cms.untracked.vstring(),
+ deleteNonConsumedUnscheduledModules = cms.untracked.bool(True),
+ dumpOptions = cms.untracked.bool(False),
+ emptyRunLumiMode = cms.obsolete.untracked.string,
+ eventSetup = cms.untracked.PSet(
+ forceNumberOfConcurrentIOVs = cms.untracked.PSet(
+ allowAnyLabel_=cms.required.untracked.uint32
+ ),
+ numberOfConcurrentIOVs = cms.untracked.uint32(0)
+ ),
+ fileMode = cms.untracked.string('FULLMERGE'),
+ forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False),
+ makeTriggerResults = cms.obsolete.untracked.bool,
+ numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0),
+ numberOfConcurrentRuns = cms.untracked.uint32(1),
+ numberOfStreams = cms.untracked.uint32(0),
+ numberOfThreads = cms.untracked.uint32(1),
+ printDependencies = cms.untracked.bool(False),
+ sizeOfStackForThreadsInKB = cms.optional.untracked.uint32,
+ throwIfIllegalParameter = cms.untracked.bool(True),
+ wantSummary = cms.untracked.bool(True)
+)
+
+# Production Info
+process.configurationMetadata = cms.untracked.PSet(
+ annotation = cms.untracked.string('step1 nevts:-1'),
+ name = cms.untracked.string('Applications'),
+ version = cms.untracked.string('$Revision: 1.19 $')
+)
+
+# Output definition
+
+process.DQMoutput = cms.OutputModule("DQMRootOutputModule",
+ dataset = cms.untracked.PSet(
+ dataTier = cms.untracked.string('DQMIO'),
+ filterName = cms.untracked.string('')
+ ),
+ fileName = cms.untracked.string('FILEOUT.root'),
+ outputCommands = process.DQMEventContent.outputCommands,
+ splitLevel = cms.untracked.int32(0)
+)
+
+# Additional output definition
+
+# Other statements
+from Configuration.AlCa.GlobalTag import GlobalTag
+process.GlobalTag = GlobalTag(process.GlobalTag, '124X_dataRun3_Prompt_v4', '')
+
+# Path and EndPath definitions
+process.dqmoffline_step = cms.EndPath(process.DQMOfflineLumi)
+process.dqmofflineOnPAT_step = cms.EndPath(process.PostDQMOffline)
+process.DQMoutput_step = cms.EndPath(process.DQMoutput)
+
+# Schedule definition
+process.schedule = cms.Schedule(process.dqmoffline_step,process.dqmofflineOnPAT_step,process.DQMoutput_step)
+from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask
+associatePatAlgosToolsTask(process)
+
+
+
+# Customisation from command line
+
+# Add early deletion of temporary data products to reduce peak memory need
+from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete
+process = customiseEarlyDelete(process)
+# End adding early deletion
diff --git a/DQMOffline/Lumi/test/zcounting_step1_fromRAW.py b/DQMOffline/Lumi/test/zcounting_step1_fromRAW.py
new file mode 100644
index 0000000000000..56a0a770f3b86
--- /dev/null
+++ b/DQMOffline/Lumi/test/zcounting_step1_fromRAW.py
@@ -0,0 +1,127 @@
+# Auto generated configuration file
+# using:
+# Revision: 1.19
+# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v
+# with command line options: step1 --conditions=124X_dataRun3_Prompt_v4 --data --datatier RECO,DQMIO --era Run3 --eventcontent RECO,DQM --filein file:/eos/cms/tier0/store/data/Run2022C/Muon/RAW/v1/000/357/479/00001/0322010f-75fe-44a6-ad5d-7f53bd5177a7.root --fileout file:step1.root --no_exec --number 10 --process reRECO --python_filename step_2_cfg.py --scenario pp --step RAW2DIGI,L1Reco,RECO,DQM:@lumi
+import FWCore.ParameterSet.Config as cms
+
+from Configuration.Eras.Era_Run3_cff import Run3
+
+process = cms.Process('reRECO',Run3)
+
+# import of standard configurations
+process.load('Configuration.StandardSequences.Services_cff')
+process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
+process.load('FWCore.MessageService.MessageLogger_cfi')
+process.load('Configuration.EventContent.EventContent_cff')
+process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
+process.load('Configuration.StandardSequences.MagneticField_cff')
+process.load('Configuration.StandardSequences.RawToDigi_Data_cff')
+process.load('Configuration.StandardSequences.L1Reco_cff')
+process.load('Configuration.StandardSequences.Reconstruction_Data_cff')
+process.load('DQMServices.Core.DQMStoreNonLegacy_cff')
+process.load('DQMOffline.Configuration.DQMOffline_cff')
+process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
+
+process.maxEvents = cms.untracked.PSet(
+ input = cms.untracked.int32(10),
+ output = cms.optional.untracked.allowed(cms.int32,cms.PSet)
+)
+
+# Input source
+process.source = cms.Source("PoolSource",
+ fileNames = cms.untracked.vstring('file:/eos/cms/tier0/store/data/Run2022C/Muon/RAW/v1/000/357/479/00001/0322010f-75fe-44a6-ad5d-7f53bd5177a7.root'),
+ secondaryFileNames = cms.untracked.vstring()
+)
+
+process.options = cms.untracked.PSet(
+ FailPath = cms.untracked.vstring(),
+ IgnoreCompletely = cms.untracked.vstring(),
+ Rethrow = cms.untracked.vstring(),
+ SkipEvent = cms.untracked.vstring(),
+ accelerators = cms.untracked.vstring('*'),
+ allowUnscheduled = cms.obsolete.untracked.bool,
+ canDeleteEarly = cms.untracked.vstring(),
+ deleteNonConsumedUnscheduledModules = cms.untracked.bool(True),
+ dumpOptions = cms.untracked.bool(False),
+ emptyRunLumiMode = cms.obsolete.untracked.string,
+ eventSetup = cms.untracked.PSet(
+ forceNumberOfConcurrentIOVs = cms.untracked.PSet(
+ allowAnyLabel_=cms.required.untracked.uint32
+ ),
+ numberOfConcurrentIOVs = cms.untracked.uint32(0)
+ ),
+ fileMode = cms.untracked.string('FULLMERGE'),
+ forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False),
+ makeTriggerResults = cms.obsolete.untracked.bool,
+ numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0),
+ numberOfConcurrentRuns = cms.untracked.uint32(1),
+ numberOfStreams = cms.untracked.uint32(0),
+ numberOfThreads = cms.untracked.uint32(1),
+ printDependencies = cms.untracked.bool(False),
+ sizeOfStackForThreadsInKB = cms.optional.untracked.uint32,
+ throwIfIllegalParameter = cms.untracked.bool(True),
+ wantSummary = cms.untracked.bool(False)
+)
+
+# Production Info
+process.configurationMetadata = cms.untracked.PSet(
+ annotation = cms.untracked.string('step1 nevts:10'),
+ name = cms.untracked.string('Applications'),
+ version = cms.untracked.string('$Revision: 1.19 $')
+)
+
+# Output definition
+
+process.RECOoutput = cms.OutputModule("PoolOutputModule",
+ dataset = cms.untracked.PSet(
+ dataTier = cms.untracked.string('RECO'),
+ filterName = cms.untracked.string('')
+ ),
+ fileName = cms.untracked.string('file:step1.root'),
+ outputCommands = process.RECOEventContent.outputCommands,
+ splitLevel = cms.untracked.int32(0)
+)
+
+process.DQMoutput = cms.OutputModule("DQMRootOutputModule",
+ dataset = cms.untracked.PSet(
+ dataTier = cms.untracked.string('DQMIO'),
+ filterName = cms.untracked.string('')
+ ),
+ fileName = cms.untracked.string('file:step1_inDQM.root'),
+ outputCommands = process.DQMEventContent.outputCommands,
+ splitLevel = cms.untracked.int32(0)
+)
+
+# Additional output definition
+
+# Other statements
+from Configuration.AlCa.GlobalTag import GlobalTag
+process.GlobalTag = GlobalTag(process.GlobalTag, '124X_dataRun3_Prompt_v4', '')
+
+# Path and EndPath definitions
+process.raw2digi_step = cms.Path(process.RawToDigi)
+process.L1Reco_step = cms.Path(process.L1Reco)
+process.reconstruction_step = cms.Path(process.reconstruction)
+process.dqmoffline_step = cms.EndPath(process.DQMOfflineLumi)
+process.dqmofflineOnPAT_step = cms.EndPath(process.PostDQMOffline)
+process.RECOoutput_step = cms.EndPath(process.RECOoutput)
+process.DQMoutput_step = cms.EndPath(process.DQMoutput)
+
+# Schedule definition
+process.schedule = cms.Schedule(process.raw2digi_step,process.L1Reco_step,process.reconstruction_step,process.dqmoffline_step,process.dqmofflineOnPAT_step,process.RECOoutput_step,process.DQMoutput_step)
+from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask
+associatePatAlgosToolsTask(process)
+
+
+
+# Customisation from command line
+
+#Have logErrorHarvester wait for the same EDProducers to finish as those providing data for the OutputModule
+from FWCore.Modules.logErrorHarvester_cff import customiseLogErrorHarvesterUsingOutputCommands
+process = customiseLogErrorHarvesterUsingOutputCommands(process)
+
+# Add early deletion of temporary data products to reduce peak memory need
+from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete
+process = customiseEarlyDelete(process)
+# End adding early deletion
diff --git a/DQMOffline/Lumi/test/zcounting_step2_fromAOD.py b/DQMOffline/Lumi/test/zcounting_step2_fromAOD.py
new file mode 100644
index 0000000000000..e78b3fd7c4b83
--- /dev/null
+++ b/DQMOffline/Lumi/test/zcounting_step2_fromAOD.py
@@ -0,0 +1,108 @@
+# Auto generated configuration file
+# using:
+# Revision: 1.19
+# Source: /local/reps/CMSSW/CMSSW/Configuration/Applications/python/ConfigBuilder.py,v
+# with command line options: step2 -s HARVESTING:@lumi --conditions=124X_dataRun3_Prompt_v4 --datatier AOD --filein=file:FILEOUT.root --fileout=FILEOUT_Harvest.root --data --geometry DB:Extended --filetype DQM --python_file step2_fromAOD.py
+import FWCore.ParameterSet.Config as cms
+
+
+
+process = cms.Process('HARVESTING')
+
+# import of standard configurations
+process.load('Configuration.StandardSequences.Services_cff')
+process.load('SimGeneral.HepPDTESSource.pythiapdt_cfi')
+process.load('FWCore.MessageService.MessageLogger_cfi')
+process.load('Configuration.EventContent.EventContent_cff')
+process.load('Configuration.StandardSequences.GeometryRecoDB_cff')
+process.load('Configuration.StandardSequences.MagneticField_cff')
+process.load('Configuration.StandardSequences.DQMSaverAtRunEnd_cff')
+process.load('Configuration.StandardSequences.Harvesting_cff')
+process.load('Configuration.StandardSequences.FrontierConditions_GlobalTag_cff')
+
+process.maxEvents = cms.untracked.PSet(
+ input = cms.untracked.int32(1),
+ output = cms.optional.untracked.allowed(cms.int32,cms.PSet)
+)
+
+# Input source
+process.source = cms.Source("DQMRootSource",
+ fileNames = cms.untracked.vstring('file:FILEOUT.root')
+)
+
+process.options = cms.untracked.PSet(
+ FailPath = cms.untracked.vstring(),
+ IgnoreCompletely = cms.untracked.vstring(),
+ Rethrow = cms.untracked.vstring('ProductNotFound'),
+ SkipEvent = cms.untracked.vstring(),
+ accelerators = cms.untracked.vstring('*'),
+ allowUnscheduled = cms.obsolete.untracked.bool,
+ canDeleteEarly = cms.untracked.vstring(),
+ deleteNonConsumedUnscheduledModules = cms.untracked.bool(True),
+ dumpOptions = cms.untracked.bool(False),
+ emptyRunLumiMode = cms.obsolete.untracked.string,
+ eventSetup = cms.untracked.PSet(
+ forceNumberOfConcurrentIOVs = cms.untracked.PSet(
+ allowAnyLabel_=cms.required.untracked.uint32
+ ),
+ numberOfConcurrentIOVs = cms.untracked.uint32(0)
+ ),
+ fileMode = cms.untracked.string('FULLMERGE'),
+ forceEventSetupCacheClearOnNewRun = cms.untracked.bool(False),
+ makeTriggerResults = cms.obsolete.untracked.bool,
+ numberOfConcurrentLuminosityBlocks = cms.untracked.uint32(0),
+ numberOfConcurrentRuns = cms.untracked.uint32(1),
+ numberOfStreams = cms.untracked.uint32(0),
+ numberOfThreads = cms.untracked.uint32(1),
+ printDependencies = cms.untracked.bool(False),
+ sizeOfStackForThreadsInKB = cms.optional.untracked.uint32,
+ throwIfIllegalParameter = cms.untracked.bool(True),
+ wantSummary = cms.untracked.bool(False)
+)
+
+# Production Info
+process.configurationMetadata = cms.untracked.PSet(
+ annotation = cms.untracked.string('step2 nevts:1'),
+ name = cms.untracked.string('Applications'),
+ version = cms.untracked.string('$Revision: 1.19 $')
+)
+
+# Output definition
+
+# Additional output definition
+
+# Other statements
+from Configuration.AlCa.GlobalTag import GlobalTag
+process.GlobalTag = GlobalTag(process.GlobalTag, '124X_dataRun3_Prompt_v4', '')
+
+# Path and EndPath definitions
+process.alcaHarvesting = cms.Path()
+process.dqmHarvesting = cms.Path(process.DQMOffline_SecondStep+process.DQMOffline_Certification)
+process.dqmHarvestingExtraHLT = cms.Path(process.DQMOffline_SecondStep_ExtraHLT+process.DQMOffline_Certification)
+process.dqmHarvestingFakeHLT = cms.Path(process.DQMOffline_SecondStep_FakeHLT+process.DQMOffline_Certification)
+process.dqmHarvestingPOGMC = cms.Path(process.DQMOffline_SecondStep_PrePOGMC)
+process.genHarvesting = cms.Path(process.postValidation_gen)
+process.validationHarvesting = cms.Path(process.postValidation+process.hltpostvalidation+process.postValidation_gen)
+process.validationHarvestingFS = cms.Path(process.recoMuonPostProcessors+process.postValidationTracking+process.MuIsoValPostProcessor+process.calotowersPostProcessor+process.hcalSimHitsPostProcessor+process.hcaldigisPostProcessor+process.hcalrechitsPostProcessor+process.electronPostValidationSequence+process.photonPostProcessor+process.pfJetClient+process.pfMETClient+process.pfJetResClient+process.pfElectronClient+process.rpcRecHitPostValidation_step+process.makeBetterPlots+process.bTagCollectorSequenceMCbcl+process.METPostProcessor+process.L1GenPostProcessor+process.bdHadronTrackPostProcessor+process.MuonCSCDigisPostProcessors+process.postValidation_gen)
+process.validationHarvestingHI = cms.Path(process.postValidationHI)
+process.validationHarvestingMiniAOD = cms.Path(process.JetPostProcessor+process.METPostProcessorHarvesting+process.bTagMiniValidationHarvesting+process.postValidationMiniAOD)
+process.validationHarvestingNoHLT = cms.Path(process.postValidation+process.postValidation_gen)
+process.validationpreprodHarvesting = cms.Path(process.postValidation_preprod+process.hltpostvalidation_preprod+process.postValidation_gen)
+process.validationpreprodHarvestingNoHLT = cms.Path(process.postValidation_preprod+process.postValidation_gen)
+process.validationprodHarvesting = cms.Path(process.hltpostvalidation_prod+process.postValidation_gen)
+process.DQMNone_step = cms.Path(process.DQMNone)
+process.dqmsave_step = cms.Path(process.DQMSaver)
+
+# Schedule definition
+process.schedule = cms.Schedule(process.DQMNone_step,process.dqmsave_step)
+from PhysicsTools.PatAlgos.tools.helpers import associatePatAlgosToolsTask
+associatePatAlgosToolsTask(process)
+
+
+
+# Customisation from command line
+
+# Add early deletion of temporary data products to reduce peak memory need
+from Configuration.StandardSequences.earlyDeleteSettings_cff import customiseEarlyDelete
+process = customiseEarlyDelete(process)
+# End adding early deletion