File indexing completed on 2025-02-24 23:24:40
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <memory>
0021 #include <sys/time.h>
0022 #include <cstdlib>
0023
0024
0025 #include "DataFormats/Common/interface/TriggerResults.h"
0026 #include "DataFormats/HLTReco/interface/TriggerObject.h"
0027 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
0028 #include "DataFormats/HLTReco/interface/TriggerTypeDefs.h"
0029 #include "DataFormats/Scalers/interface/LumiScalers.h"
0030
0031 #include "FWCore/Framework/interface/Frameworkfwd.h"
0032 #include "FWCore/Framework/interface/Event.h"
0033 #include "FWCore/Framework/interface/MakerMacros.h"
0034 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0035 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0036
0037 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
0038
0039
0040 #include "HLTrigger/JetMET/interface/AlphaT.h"
0041 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0042 #include "DataFormats/METReco/interface/MET.h"
0043 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
0044 #include "DataFormats/BTauReco/interface/JetTag.h"
0045 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h"
0046 #include "DataFormats/Math/interface/deltaR.h"
0047 #include "DataFormats/JetReco/interface/PFJet.h"
0048 #include "DataFormats/JetReco/interface/CaloJet.h"
0049
0050 #include "DQMServices/Core/interface/DQMStore.h"
0051 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0052
0053 #include "TMath.h"
0054 #include "TStyle.h"
0055 #include "TLorentzVector.h"
0056
0057 #include <unordered_map>
0058
0059
0060
0061
0062
0063 using namespace trigger;
0064 using std::string;
0065 using std::unordered_map;
0066 using std::vector;
0067
0068 class HLTObjectMonitor : public DQMEDAnalyzer {
0069 struct hltPlot {
0070 MonitorElement* ME;
0071 string pathName;
0072 string pathNameOR;
0073 string moduleName;
0074 string moduleNameOR;
0075 int pathIndex = -99;
0076 int pathIndexOR = -99;
0077 string plotLabel;
0078 string xAxisLabel;
0079 int nBins;
0080 double xMin;
0081 double xMax;
0082 bool displayInPrimary;
0083 };
0084
0085 public:
0086 explicit HLTObjectMonitor(const edm::ParameterSet&);
0087 static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
0088
0089 private:
0090 void analyze(const edm::Event&, const edm::EventSetup&) override;
0091 void bookHistograms(DQMStore::IBooker& i, edm::Run const&, edm::EventSetup const&) override;
0092 void dqmBeginRun(edm::Run const&, edm::EventSetup const&) override;
0093 vector<hltPlot*> plotList;
0094 double dxyFinder(double, double, edm::Handle<reco::RecoChargedCandidateCollection>, edm::Handle<reco::BeamSpot>);
0095 double dzFinder(double, double, edm::Handle<reco::RecoChargedCandidateCollection>, edm::Handle<reco::BeamSpot>);
0096 double get_wall_time(void);
0097
0098
0099 bool debugPrint;
0100 HLTConfigProvider hltConfig_;
0101 string topDirectoryName;
0102 string mainShifterFolder;
0103 string backupFolder;
0104 unordered_map<string, bool> acceptMap;
0105 unordered_map<hltPlot*, edm::ParameterSet*> plotMap;
0106
0107
0108 edm::EDGetTokenT<edm::TriggerResults> triggerResultsToken_;
0109 edm::EDGetTokenT<trigger::TriggerEvent> aodTriggerToken_;
0110 edm::EDGetTokenT<LumiScalersCollection> lumiScalersToken_;
0111 edm::EDGetTokenT<reco::BeamSpot> beamSpotToken_;
0112 edm::EDGetTokenT<reco::RecoChargedCandidateCollection> chargedCandToken_;
0113 edm::EDGetTokenT<reco::JetTagCollection> csvCaloTagsToken_;
0114 edm::EDGetTokenT<reco::JetTagCollection> csvPfTagsToken_;
0115 edm::EDGetTokenT<vector<reco::CaloJet>> csvCaloJetsToken_;
0116 edm::EDGetTokenT<vector<reco::PFJet>> csvPfJetsToken_;
0117
0118
0119 edm::ParameterSet rsq_pset;
0120 edm::ParameterSet mr_pset;
0121 edm::ParameterSet alphaT_pset;
0122 edm::ParameterSet photonPt_pset;
0123 edm::ParameterSet photonEta_pset;
0124 edm::ParameterSet photonPhi_pset;
0125 edm::ParameterSet muonPt_pset;
0126 edm::ParameterSet muonEta_pset;
0127 edm::ParameterSet muonPhi_pset;
0128 edm::ParameterSet l2muonPt_pset;
0129 edm::ParameterSet l2muonEta_pset;
0130 edm::ParameterSet l2muonPhi_pset;
0131 edm::ParameterSet l2NoBPTXmuonPt_pset;
0132 edm::ParameterSet l2NoBPTXmuonEta_pset;
0133 edm::ParameterSet l2NoBPTXmuonPhi_pset;
0134 edm::ParameterSet electronPt_pset;
0135 edm::ParameterSet electronEta_pset;
0136 edm::ParameterSet electronPhi_pset;
0137 edm::ParameterSet jetPt_pset;
0138 edm::ParameterSet jetAK8Pt_pset;
0139 edm::ParameterSet jetAK8Mass_pset;
0140 edm::ParameterSet tauPt_pset;
0141 edm::ParameterSet diMuonLowMass_pset;
0142 edm::ParameterSet caloMetPt_pset;
0143 edm::ParameterSet caloMetPhi_pset;
0144 edm::ParameterSet pfMetPt_pset;
0145 edm::ParameterSet pfMetPhi_pset;
0146 edm::ParameterSet caloHtPt_pset;
0147 edm::ParameterSet pfHtPt_pset;
0148 edm::ParameterSet bJetPhi_pset;
0149 edm::ParameterSet bJetEta_pset;
0150 edm::ParameterSet bJetCSVCalo_pset;
0151 edm::ParameterSet bJetCSVPF_pset;
0152 edm::ParameterSet diMuonMass_pset;
0153 edm::ParameterSet pAL1DoubleMuZMass_pset;
0154 edm::ParameterSet pAL2DoubleMuZMass_pset;
0155 edm::ParameterSet pAL3DoubleMuZMass_pset;
0156 edm::ParameterSet diElecMass_pset;
0157 edm::ParameterSet muonDxy_pset;
0158 edm::ParameterSet muonDz_pset;
0159 edm::ParameterSet wallTime_pset;
0160
0161 string processName_;
0162
0163 hltPlot rsq_;
0164 hltPlot mr_;
0165 hltPlot alphaT_;
0166 hltPlot photonPt_;
0167 hltPlot photonEta_;
0168 hltPlot photonPhi_;
0169 hltPlot muonPt_;
0170 hltPlot muonEta_;
0171 hltPlot muonPhi_;
0172 hltPlot l2muonPt_;
0173 hltPlot l2muonEta_;
0174 hltPlot l2muonPhi_;
0175 hltPlot l2NoBPTXmuonPt_;
0176 hltPlot l2NoBPTXmuonEta_;
0177 hltPlot l2NoBPTXmuonPhi_;
0178 hltPlot electronPt_;
0179 hltPlot electronEta_;
0180 hltPlot electronPhi_;
0181 hltPlot jetPt_;
0182 hltPlot jetAK8Pt_;
0183 hltPlot jetAK8Mass_;
0184 hltPlot tauPt_;
0185 hltPlot diMuonLowMass_;
0186 hltPlot caloMetPt_;
0187 hltPlot caloMetPhi_;
0188 hltPlot pfMetPt_;
0189 hltPlot pfMetPhi_;
0190 hltPlot caloHtPt_;
0191 hltPlot pfHtPt_;
0192 hltPlot bJetPhi_;
0193 hltPlot bJetEta_;
0194 hltPlot bJetCSVCalo_;
0195 hltPlot bJetCSVPF_;
0196 hltPlot diMuonMass_;
0197 hltPlot pAL1DoubleMuZMass_;
0198 hltPlot pAL2DoubleMuZMass_;
0199 hltPlot pAL3DoubleMuZMass_;
0200 hltPlot diElecMass_;
0201 hltPlot muonDxy_;
0202 hltPlot muonDz_;
0203 hltPlot wallTime_;
0204 };
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217 HLTObjectMonitor::HLTObjectMonitor(const edm::ParameterSet& iConfig)
0218
0219 {
0220
0221 debugPrint = false;
0222
0223 topDirectoryName = "HLT/ObjectMonitor";
0224 mainShifterFolder = topDirectoryName + "/MainShifter";
0225 backupFolder = topDirectoryName + "/Backup";
0226
0227
0228 processName_ = iConfig.getParameter<string>("processName");
0229
0230 rsq_pset = iConfig.getParameter<edm::ParameterSet>("rsq");
0231 plotMap[&rsq_] = &rsq_pset;
0232 mr_pset = iConfig.getParameter<edm::ParameterSet>("mr");
0233 plotMap[&mr_] = &mr_pset;
0234 alphaT_pset = iConfig.getParameter<edm::ParameterSet>("alphaT");
0235 plotMap[&alphaT_] = &alphaT_pset;
0236 photonPt_pset = iConfig.getParameter<edm::ParameterSet>("photonPt");
0237 plotMap[&photonPt_] = &photonPt_pset;
0238 photonEta_pset = iConfig.getParameter<edm::ParameterSet>("photonEta");
0239 plotMap[&photonEta_] = &photonEta_pset;
0240 photonPhi_pset = iConfig.getParameter<edm::ParameterSet>("photonPhi");
0241 plotMap[&photonPhi_] = &photonPhi_pset;
0242 muonPt_pset = iConfig.getParameter<edm::ParameterSet>("muonPt");
0243 plotMap[&muonPt_] = &muonPt_pset;
0244 muonEta_pset = iConfig.getParameter<edm::ParameterSet>("muonEta");
0245 plotMap[&muonEta_] = &muonEta_pset;
0246 muonPhi_pset = iConfig.getParameter<edm::ParameterSet>("muonPhi");
0247 plotMap[&muonPhi_] = &muonPhi_pset;
0248 l2muonPt_pset = iConfig.getParameter<edm::ParameterSet>("l2muonPt");
0249 plotMap[&l2muonPt_] = &l2muonPt_pset;
0250 l2muonEta_pset = iConfig.getParameter<edm::ParameterSet>("l2muonEta");
0251 plotMap[&l2muonEta_] = &l2muonEta_pset;
0252 l2muonPhi_pset = iConfig.getParameter<edm::ParameterSet>("l2muonPhi");
0253 plotMap[&l2muonPhi_] = &l2muonPhi_pset;
0254 l2NoBPTXmuonPt_pset = iConfig.getParameter<edm::ParameterSet>("l2NoBPTXmuonPt");
0255 plotMap[&l2NoBPTXmuonPt_] = &l2NoBPTXmuonPt_pset;
0256 l2NoBPTXmuonEta_pset = iConfig.getParameter<edm::ParameterSet>("l2NoBPTXmuonEta");
0257 plotMap[&l2NoBPTXmuonEta_] = &l2NoBPTXmuonEta_pset;
0258 l2NoBPTXmuonPhi_pset = iConfig.getParameter<edm::ParameterSet>("l2NoBPTXmuonPhi");
0259 plotMap[&l2NoBPTXmuonPhi_] = &l2NoBPTXmuonPhi_pset;
0260 electronPt_pset = iConfig.getParameter<edm::ParameterSet>("electronPt");
0261 plotMap[&electronPt_] = &electronPt_pset;
0262 electronEta_pset = iConfig.getParameter<edm::ParameterSet>("electronEta");
0263 plotMap[&electronEta_] = &electronEta_pset;
0264 electronPhi_pset = iConfig.getParameter<edm::ParameterSet>("electronPhi");
0265 plotMap[&electronPhi_] = &electronPhi_pset;
0266 jetPt_pset = iConfig.getParameter<edm::ParameterSet>("jetPt");
0267 plotMap[&jetPt_] = &jetPt_pset;
0268 jetAK8Mass_pset = iConfig.getParameter<edm::ParameterSet>("jetAK8Mass");
0269 plotMap[&jetAK8Mass_] = &jetAK8Mass_pset;
0270 diMuonLowMass_pset = iConfig.getParameter<edm::ParameterSet>("diMuonLowMass");
0271 plotMap[&diMuonLowMass_] = &diMuonLowMass_pset;
0272 caloMetPt_pset = iConfig.getParameter<edm::ParameterSet>("caloMetPt");
0273 plotMap[&caloMetPt_] = &caloMetPt_pset;
0274 caloMetPhi_pset = iConfig.getParameter<edm::ParameterSet>("caloMetPhi");
0275 plotMap[&caloMetPhi_] = &caloMetPhi_pset;
0276 pfMetPt_pset = iConfig.getParameter<edm::ParameterSet>("pfMetPt");
0277 plotMap[&pfMetPt_] = &pfMetPt_pset;
0278 pfMetPhi_pset = iConfig.getParameter<edm::ParameterSet>("pfMetPhi");
0279 plotMap[&pfMetPhi_] = &pfMetPhi_pset;
0280 caloHtPt_pset = iConfig.getParameter<edm::ParameterSet>("caloHtPt");
0281 plotMap[&caloHtPt_] = &caloHtPt_pset;
0282 pfHtPt_pset = iConfig.getParameter<edm::ParameterSet>("pfHtPt");
0283 plotMap[&pfHtPt_] = &pfHtPt_pset;
0284 bJetPhi_pset = iConfig.getParameter<edm::ParameterSet>("bJetPhi");
0285 plotMap[&bJetPhi_] = &bJetPhi_pset;
0286 bJetEta_pset = iConfig.getParameter<edm::ParameterSet>("bJetEta");
0287 plotMap[&bJetEta_] = &bJetEta_pset;
0288 bJetCSVCalo_pset = iConfig.getParameter<edm::ParameterSet>("bJetCSVCalo");
0289 plotMap[&bJetCSVCalo_] = &bJetCSVCalo_pset;
0290 bJetCSVPF_pset = iConfig.getParameter<edm::ParameterSet>("bJetCSVPF");
0291 plotMap[&bJetCSVPF_] = &bJetCSVPF_pset;
0292 diMuonMass_pset = iConfig.getParameter<edm::ParameterSet>("diMuonMass");
0293 plotMap[&diMuonMass_] = &diMuonMass_pset;
0294 pAL1DoubleMuZMass_pset = iConfig.getParameter<edm::ParameterSet>("pAL1DoubleMuZMass");
0295 plotMap[&pAL1DoubleMuZMass_] = &pAL1DoubleMuZMass_pset;
0296 pAL2DoubleMuZMass_pset = iConfig.getParameter<edm::ParameterSet>("pAL2DoubleMuZMass");
0297 plotMap[&pAL2DoubleMuZMass_] = &pAL2DoubleMuZMass_pset;
0298 pAL3DoubleMuZMass_pset = iConfig.getParameter<edm::ParameterSet>("pAL3DoubleMuZMass");
0299 plotMap[&pAL3DoubleMuZMass_] = &pAL3DoubleMuZMass_pset;
0300 diElecMass_pset = iConfig.getParameter<edm::ParameterSet>("diElecMass");
0301 plotMap[&diElecMass_] = &diElecMass_pset;
0302 muonDxy_pset = iConfig.getParameter<edm::ParameterSet>("muonDxy");
0303 plotMap[&muonDxy_] = &muonDxy_pset;
0304 muonDz_pset = iConfig.getParameter<edm::ParameterSet>("muonDz");
0305 plotMap[&muonDz_] = &muonDz_pset;
0306 jetAK8Pt_pset = iConfig.getParameter<edm::ParameterSet>("jetAK8Pt");
0307 plotMap[&jetAK8Pt_] = &jetAK8Pt_pset;
0308 tauPt_pset = iConfig.getParameter<edm::ParameterSet>("tauPt");
0309 plotMap[&tauPt_] = &tauPt_pset;
0310 wallTime_pset = iConfig.getParameter<edm::ParameterSet>("wallTime");
0311 plotMap[&wallTime_] = &wallTime_pset;
0312
0313 for (auto& [key, value] : plotMap) {
0314 key->pathName = value->getParameter<std::string>("pathName");
0315 key->moduleName = value->getParameter<std::string>("moduleName");
0316 key->nBins = value->getParameter<int>("NbinsX");
0317 key->xMin = value->getParameter<double>("Xmin");
0318 key->xMax = value->getParameter<double>("Xmax");
0319 key->xAxisLabel = value->getParameter<std::string>("axisLabel");
0320 key->plotLabel = value->getParameter<std::string>("plotLabel");
0321 key->displayInPrimary = value->getParameter<bool>("mainWorkspace");
0322
0323 if (value->exists("pathName_OR")) {
0324 key->pathNameOR = value->getParameter<std::string>("pathName_OR");
0325 }
0326 if (value->exists("moduleName_OR")) {
0327 key->moduleNameOR = value->getParameter<std::string>("moduleName_OR");
0328 }
0329 plotList.push_back(key);
0330 }
0331 plotMap.clear();
0332
0333
0334 triggerResultsToken_ = consumes<edm::TriggerResults>(edm::InputTag("TriggerResults", "", processName_));
0335 aodTriggerToken_ = consumes<trigger::TriggerEvent>(edm::InputTag("hltTriggerSummaryAOD", "", processName_));
0336 lumiScalersToken_ = consumes<LumiScalersCollection>(edm::InputTag("hltScalersRawToDigi", "", ""));
0337 beamSpotToken_ = consumes<reco::BeamSpot>(edm::InputTag("hltOnlineBeamSpot", "", processName_));
0338 chargedCandToken_ = consumes<vector<reco::RecoChargedCandidate>>(
0339 edm::InputTag("hltL3NoFiltersNoVtxMuonCandidates", "", processName_));
0340 csvCaloTagsToken_ =
0341 consumes<reco::JetTagCollection>(edm::InputTag("hltCombinedSecondaryVertexBJetTagsCalo", "", processName_));
0342 csvPfTagsToken_ =
0343 consumes<reco::JetTagCollection>(edm::InputTag("hltCombinedSecondaryVertexBJetTagsPF", "", processName_));
0344 csvCaloJetsToken_ =
0345 consumes<vector<reco::CaloJet>>(edm::InputTag("hltSelector8CentralJetsL1FastJet", "", processName_));
0346 csvPfJetsToken_ = consumes<vector<reco::PFJet>>(edm::InputTag("hltPFJetForBtag", "", processName_));
0347 }
0348
0349
0350
0351
0352
0353
0354 void HLTObjectMonitor::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup) {
0355 double start = get_wall_time();
0356
0357 using namespace edm;
0358
0359 if (debugPrint)
0360 std::cout << "Inside analyze(). " << std::endl;
0361
0362
0363 edm::Handle<edm::TriggerResults> triggerResults;
0364 iEvent.getByToken(triggerResultsToken_, triggerResults);
0365 if (!triggerResults.isValid())
0366 return;
0367
0368 edm::Handle<trigger::TriggerEvent> aodTriggerEvent;
0369 iEvent.getByToken(aodTriggerToken_, aodTriggerEvent);
0370 if (!aodTriggerEvent.isValid())
0371 return;
0372
0373
0374 unordered_map<string, bool> firedMap = acceptMap;
0375 for (auto plot : plotList)
0376 {
0377 if (firedMap[plot->pathName])
0378 continue;
0379 bool triggerAccept = false;
0380 const TriggerObjectCollection objects = aodTriggerEvent->getObjects();
0381 edm::InputTag moduleFilter;
0382 std::string pathName;
0383 if (plot->pathIndex > 0 && triggerResults->accept(plot->pathIndex) && hltConfig_.saveTags(plot->moduleName)) {
0384 moduleFilter = edm::InputTag(plot->moduleName, "", processName_);
0385 pathName = plot->pathName;
0386 triggerAccept = true;
0387 } else if (plot->pathIndexOR > 0 && triggerResults->accept(plot->pathIndexOR) &&
0388 hltConfig_.saveTags(plot->moduleNameOR)) {
0389 if (firedMap[plot->pathNameOR])
0390 continue;
0391 moduleFilter = edm::InputTag(plot->moduleNameOR, "", processName_);
0392 pathName = plot->pathNameOR;
0393 triggerAccept = true;
0394 }
0395
0396 if (triggerAccept) {
0397 unsigned int moduleFilterIndex = aodTriggerEvent->filterIndex(moduleFilter);
0398
0399 if (moduleFilterIndex + 1 > aodTriggerEvent->sizeFilters())
0400 return;
0401 const Keys& keys = aodTriggerEvent->filterKeys(moduleFilterIndex);
0402
0403
0404
0405
0406
0407
0408
0409
0410 if (pathName == pfHtPt_.pathName) {
0411 for (const auto& key : keys)
0412 pfHtPt_.ME->Fill(objects[key].pt());
0413 }
0414
0415
0416 else if (pathName == jetPt_.pathName) {
0417 for (const auto& key : keys)
0418 jetPt_.ME->Fill(objects[key].pt());
0419 }
0420
0421
0422 else if (pathName == photonPt_.pathName) {
0423 for (const auto& key : keys) {
0424 photonPt_.ME->Fill(objects[key].pt());
0425 photonEta_.ME->Fill(objects[key].eta());
0426 photonPhi_.ME->Fill(objects[key].phi());
0427 }
0428 }
0429
0430
0431 else if (pathName == electronPt_.pathName) {
0432 for (const auto& key : keys) {
0433 electronPt_.ME->Fill(objects[key].pt());
0434 electronEta_.ME->Fill(objects[key].eta());
0435 electronPhi_.ME->Fill(objects[key].phi());
0436 }
0437 }
0438
0439
0440 else if (pathName == muonPt_.pathName) {
0441 for (const auto& key : keys) {
0442 muonPt_.ME->Fill(objects[key].pt());
0443 muonEta_.ME->Fill(objects[key].eta());
0444 muonPhi_.ME->Fill(objects[key].phi());
0445 }
0446 }
0447
0448
0449 else if (pathName == l2muonPt_.pathName) {
0450 for (const auto& key : keys) {
0451 l2muonPt_.ME->Fill(objects[key].pt());
0452 l2muonEta_.ME->Fill(objects[key].eta());
0453 l2muonPhi_.ME->Fill(objects[key].phi());
0454 }
0455 }
0456
0457
0458 else if (pathName == l2NoBPTXmuonPt_.pathName) {
0459 for (const auto& key : keys) {
0460 l2NoBPTXmuonPt_.ME->Fill(objects[key].pt());
0461 l2NoBPTXmuonEta_.ME->Fill(objects[key].eta());
0462 l2NoBPTXmuonPhi_.ME->Fill(objects[key].phi());
0463 }
0464 }
0465
0466
0467 else if (pathName == mr_.pathName) {
0468 double onlineMR = 0, onlineRsq = 0;
0469 for (const auto& key : keys) {
0470 if (objects[key].id() == 0) {
0471 onlineMR = objects[key].px();
0472 onlineRsq = objects[key].py();
0473 }
0474 mr_.ME->Fill(onlineMR);
0475 rsq_.ME->Fill(onlineRsq);
0476 }
0477 }
0478
0479
0480 else if (pathName == alphaT_.pathName) {
0481 std::vector<ROOT::Math::LorentzVector<ROOT::Math::PtEtaPhiM4D<double>>> alphaT_jets;
0482 for (const auto& key : keys) {
0483 ROOT::Math::LorentzVector<ROOT::Math::PtEtaPhiM4D<double>> JetLVec(
0484 objects[key].pt(), objects[key].eta(), objects[key].phi(), objects[key].mass());
0485 alphaT_jets.push_back(JetLVec);
0486 }
0487
0488 float alphaT = AlphaT(alphaT_jets, false).value();
0489 alphaT_.ME->Fill(alphaT);
0490 }
0491
0492
0493 else if (pathName == tauPt_.pathName) {
0494 for (const auto& key : keys)
0495 tauPt_.ME->Fill(objects[key].pt());
0496 }
0497
0498
0499 else if (pathName == caloMetPt_.pathName) {
0500 for (const auto& key : keys) {
0501 caloMetPt_.ME->Fill(objects[key].pt());
0502 caloMetPhi_.ME->Fill(objects[key].phi());
0503 }
0504 }
0505
0506
0507 else if (pathName == caloHtPt_.pathName) {
0508 for (const auto& key : keys) {
0509 if (objects[key].id() == 89)
0510 caloHtPt_.ME->Fill(objects[key].pt());
0511 }
0512 }
0513
0514
0515 else if (pathName == jetAK8Pt_.pathName) {
0516 for (const auto& key : keys) {
0517 jetAK8Pt_.ME->Fill(objects[key].pt());
0518 jetAK8Mass_.ME->Fill(objects[key].mass());
0519 }
0520 }
0521
0522
0523 else if (pathName == pfMetPt_.pathName) {
0524 for (const auto& key : keys) {
0525 pfMetPt_.ME->Fill(objects[key].pt());
0526 pfMetPhi_.ME->Fill(objects[key].phi());
0527 }
0528 }
0529
0530
0531 else if (pathName == bJetEta_.pathName || pathName == bJetEta_.pathNameOR) {
0532 for (const auto& key : keys) {
0533 bJetEta_.ME->Fill(objects[key].eta());
0534 bJetPhi_.ME->Fill(objects[key].phi());
0535 }
0536 }
0537
0538
0539 if (pathName == bJetCSVPF_.pathName) {
0540 edm::Handle<reco::JetTagCollection> csvPfTags;
0541 iEvent.getByToken(csvPfTagsToken_, csvPfTags);
0542 edm::Handle<vector<reco::PFJet>> csvPfJets;
0543 iEvent.getByToken(csvPfJetsToken_, csvPfJets);
0544
0545 if (csvPfTags.isValid() && csvPfJets.isValid()) {
0546 for (auto iter = csvPfTags->begin(); iter != csvPfTags->end(); iter++)
0547 bJetCSVPF_.ME->Fill(iter->second);
0548 }
0549 }
0550 if (pathName == bJetCSVCalo_.pathName) {
0551 edm::Handle<reco::JetTagCollection> csvCaloTags;
0552 iEvent.getByToken(csvCaloTagsToken_, csvCaloTags);
0553 edm::Handle<vector<reco::CaloJet>> csvCaloJets;
0554 iEvent.getByToken(csvCaloJetsToken_, csvCaloJets);
0555
0556 if (csvCaloTags.isValid() && csvCaloJets.isValid()) {
0557 for (auto iter = csvCaloTags->begin(); iter != csvCaloTags->end(); iter++)
0558 bJetCSVCalo_.ME->Fill(iter->second);
0559 }
0560 }
0561
0562
0563 else if (pathName == muonDxy_.pathName) {
0564 edm::Handle<vector<reco::RecoChargedCandidate>> recoChargedCands;
0565 iEvent.getByToken(chargedCandToken_, recoChargedCands);
0566 edm::Handle<reco::BeamSpot> recoBeamSpot;
0567 iEvent.getByToken(beamSpotToken_, recoBeamSpot);
0568 double muon_dxy, muon_dz;
0569
0570 if (recoChargedCands.isValid() && recoBeamSpot.isValid()) {
0571 for (const auto& key : keys) {
0572 muon_dxy = dxyFinder(objects[key].eta(), objects[key].phi(), recoChargedCands, recoBeamSpot);
0573 if (muon_dxy != -99.) {
0574 muonDxy_.ME->Fill(muon_dxy);
0575 }
0576
0577 muon_dz = dzFinder(objects[key].eta(), objects[key].phi(), recoChargedCands, recoBeamSpot);
0578 if (muon_dz != -99.) {
0579 muonDz_.ME->Fill(muon_dz);
0580 }
0581 }
0582 }
0583 }
0584
0585
0586
0587
0588
0589
0590
0591
0592 else if (pathName == diMuonLowMass_.pathName) {
0593 const double mu_mass(.105658);
0594 unsigned int kCnt0 = 0;
0595 for (const auto& key0 : keys) {
0596 unsigned int kCnt1 = 0;
0597 for (const auto& key1 : keys) {
0598 if (key0 != key1 &&
0599 kCnt1 > kCnt0)
0600 {
0601 if (abs(objects[key0].id()) == 13 &&
0602 (objects[key0].id() + objects[key1].id() == 0))
0603 {
0604 TLorentzVector mu1, mu2, dimu;
0605 mu1.SetPtEtaPhiM(objects[key0].pt(), objects[key0].eta(), objects[key0].phi(), mu_mass);
0606 mu2.SetPtEtaPhiM(objects[key1].pt(), objects[key1].eta(), objects[key1].phi(), mu_mass);
0607 dimu = mu1 + mu2;
0608 diMuonLowMass_.ME->Fill(dimu.M());
0609 }
0610 }
0611 kCnt1 += 1;
0612 }
0613 kCnt0 += 1;
0614 }
0615 }
0616
0617 else if (pathName == diMuonMass_.pathName || pathName == diMuonMass_.pathNameOR) {
0618 const double mu_mass(.105658);
0619 unsigned int kCnt0 = 0;
0620 for (const auto& key0 : keys) {
0621 unsigned int kCnt1 = 0;
0622 for (const auto& key1 : keys) {
0623 if (key0 != key1 &&
0624 kCnt1 > kCnt0)
0625 {
0626 if (abs(objects[key0].id()) == 13 &&
0627 (objects[key0].id() + objects[key1].id() == 0))
0628 {
0629 TLorentzVector mu1, mu2, dimu;
0630 mu1.SetPtEtaPhiM(objects[key0].pt(), objects[key0].eta(), objects[key0].phi(), mu_mass);
0631 mu2.SetPtEtaPhiM(objects[key1].pt(), objects[key1].eta(), objects[key1].phi(), mu_mass);
0632 dimu = mu1 + mu2;
0633 diMuonMass_.ME->Fill(dimu.M());
0634 }
0635 }
0636 kCnt1 += 1;
0637 }
0638 kCnt0 += 1;
0639 }
0640 }
0641
0642 else if (pathName == pAL1DoubleMuZMass_.pathName) {
0643 const double mu_mass(.105658);
0644 unsigned int kCnt0 = 0;
0645 for (const auto& key0 : keys) {
0646 unsigned int kCnt1 = 0;
0647 for (const auto& key1 : keys) {
0648 if (key0 != key1 &&
0649 kCnt1 > kCnt0)
0650 {
0651
0652
0653 TLorentzVector mu1, mu2, dimu;
0654 mu1.SetPtEtaPhiM(objects[key0].pt(), objects[key0].eta(), objects[key0].phi(), mu_mass);
0655 mu2.SetPtEtaPhiM(objects[key1].pt(), objects[key1].eta(), objects[key1].phi(), mu_mass);
0656 dimu = mu1 + mu2;
0657 if (dimu.M() > pAL1DoubleMuZMass_.xMin && dimu.M() < pAL1DoubleMuZMass_.xMax)
0658 pAL1DoubleMuZMass_.ME->Fill(dimu.M());
0659
0660 }
0661 kCnt1 += 1;
0662 }
0663 kCnt0 += 1;
0664 }
0665 }
0666
0667 else if (pathName == pAL2DoubleMuZMass_.pathName) {
0668 const double mu_mass(.105658);
0669 unsigned int kCnt0 = 0;
0670 for (const auto& key0 : keys) {
0671 unsigned int kCnt1 = 0;
0672 for (const auto& key1 : keys) {
0673 if (key0 != key1 &&
0674 kCnt1 > kCnt0)
0675 {
0676 if (abs(objects[key0].id()) == 13 &&
0677 (objects[key0].id() + objects[key1].id() == 0))
0678 {
0679 TLorentzVector mu1, mu2, dimu;
0680 mu1.SetPtEtaPhiM(objects[key0].pt(), objects[key0].eta(), objects[key0].phi(), mu_mass);
0681 mu2.SetPtEtaPhiM(objects[key1].pt(), objects[key1].eta(), objects[key1].phi(), mu_mass);
0682 dimu = mu1 + mu2;
0683 if (dimu.M() > pAL2DoubleMuZMass_.xMin && dimu.M() < pAL2DoubleMuZMass_.xMax)
0684 pAL2DoubleMuZMass_.ME->Fill(dimu.M());
0685 }
0686 }
0687 kCnt1 += 1;
0688 }
0689 kCnt0 += 1;
0690 }
0691 }
0692
0693 else if (pathName == pAL3DoubleMuZMass_.pathName) {
0694 const double mu_mass(.105658);
0695 unsigned int kCnt0 = 0;
0696 for (const auto& key0 : keys) {
0697 unsigned int kCnt1 = 0;
0698 for (const auto& key1 : keys) {
0699 if (key0 != key1 &&
0700 kCnt1 > kCnt0)
0701 {
0702 if (abs(objects[key0].id()) == 13 &&
0703 (objects[key0].id() + objects[key1].id() == 0))
0704 {
0705 TLorentzVector mu1, mu2, dimu;
0706 mu1.SetPtEtaPhiM(objects[key0].pt(), objects[key0].eta(), objects[key0].phi(), mu_mass);
0707 mu2.SetPtEtaPhiM(objects[key1].pt(), objects[key1].eta(), objects[key1].phi(), mu_mass);
0708 dimu = mu1 + mu2;
0709 if (dimu.M() > pAL3DoubleMuZMass_.xMin && dimu.M() < pAL3DoubleMuZMass_.xMax)
0710 pAL3DoubleMuZMass_.ME->Fill(dimu.M());
0711 }
0712 }
0713 kCnt1 += 1;
0714 }
0715 kCnt0 += 1;
0716 }
0717 }
0718
0719 else if (pathName == diElecMass_.pathName) {
0720 unsigned int kCnt0 = 0;
0721 for (const auto& key0 : keys) {
0722 unsigned int kCnt1 = 0;
0723 for (const auto& key1 : keys) {
0724 if (key0 != key1 &&
0725 kCnt1 > kCnt0)
0726 {
0727
0728
0729 TLorentzVector el1, el2, diEl;
0730 el1.SetPtEtaPhiM(objects[key0].pt(), objects[key0].eta(), objects[key0].phi(), 0);
0731 el2.SetPtEtaPhiM(objects[key1].pt(), objects[key1].eta(), objects[key1].phi(), 0);
0732 diEl = el1 + el2;
0733 diElecMass_.ME->Fill(diEl.M());
0734
0735 }
0736 kCnt1 += 1;
0737 }
0738 kCnt0 += 1;
0739 }
0740 }
0741
0742 firedMap[pathName] = true;
0743 }
0744 }
0745
0746
0747 double end = get_wall_time();
0748 double wallTime = end - start;
0749 wallTime_.ME->Fill(wallTime);
0750 }
0751
0752
0753 void HLTObjectMonitor::dqmBeginRun(edm::Run const& iRun, edm::EventSetup const& iSetup) {
0754 if (debugPrint)
0755 std::cout << "Calling beginRun. " << std::endl;
0756 bool changed = true;
0757 if (hltConfig_.init(iRun, iSetup, processName_, changed)) {
0758 if (debugPrint)
0759 std::cout << "Extracting HLTconfig. " << std::endl;
0760 }
0761
0762
0763 string pathName_noVersion;
0764 vector<string> triggerPaths = hltConfig_.triggerNames();
0765
0766 for (const auto& pathName : triggerPaths) {
0767 pathName_noVersion = hltConfig_.removeVersion(pathName);
0768 for (auto plot : plotList) {
0769 if (plot->pathName == pathName_noVersion) {
0770 (*plot).pathIndex = hltConfig_.triggerIndex(pathName);
0771 } else if (plot->pathNameOR == pathName_noVersion) {
0772 (*plot).pathIndexOR = hltConfig_.triggerIndex(pathName);
0773 }
0774 }
0775 }
0776 vector<hltPlot*> plotList_temp;
0777 for (auto plot : plotList) {
0778 if (plot->pathIndex > 0 || plot->pathIndexOR > 0) {
0779 plotList_temp.push_back(plot);
0780 acceptMap[plot->pathName] = false;
0781 if (plot->pathIndexOR > 0)
0782 acceptMap[plot->pathNameOR] = false;
0783 }
0784 }
0785
0786 plotList = plotList_temp;
0787 plotList_temp.clear();
0788 }
0789
0790
0791
0792 void HLTObjectMonitor::bookHistograms(DQMStore::IBooker& ibooker, edm::Run const& iRun, edm::EventSetup const& iSetup) {
0793
0794
0795
0796
0797
0798
0799
0800 ibooker.setCurrentFolder(mainShifterFolder);
0801 wallTime_.ME =
0802 ibooker.book1D(wallTime_.plotLabel, wallTime_.pathName, wallTime_.nBins, wallTime_.xMin, wallTime_.xMax);
0803 wallTime_.ME->setAxisTitle(wallTime_.xAxisLabel);
0804
0805 for (auto plot : plotList) {
0806 std::string display_pathNames = plot->pathName;
0807 if (!plot->pathNameOR.empty())
0808 display_pathNames = plot->pathName + " OR " + plot->pathNameOR;
0809
0810 if (plot->displayInPrimary) {
0811 ibooker.setCurrentFolder(mainShifterFolder);
0812 (*plot).ME = ibooker.book1D(plot->plotLabel, display_pathNames.c_str(), plot->nBins, plot->xMin, plot->xMax);
0813 (*plot).ME->setAxisTitle(plot->xAxisLabel);
0814
0815 } else {
0816 ibooker.setCurrentFolder(backupFolder);
0817 (*plot).ME = ibooker.book1D(plot->plotLabel, display_pathNames.c_str(), plot->nBins, plot->xMin, plot->xMax);
0818 (*plot).ME->setAxisTitle(plot->xAxisLabel);
0819 }
0820 }
0821 }
0822
0823 double HLTObjectMonitor::dxyFinder(double eta,
0824 double phi,
0825 edm::Handle<reco::RecoChargedCandidateCollection> recoChargedCands,
0826 edm::Handle<reco::BeamSpot> recoBeamSpot) {
0827 double dxy = -99.;
0828 for (reco::RecoChargedCandidateCollection::const_iterator l3Muon = recoChargedCands->begin();
0829 l3Muon != recoChargedCands->end();
0830 l3Muon++) {
0831 if (deltaR(eta, phi, l3Muon->eta(), l3Muon->phi()) < 0.1) {
0832 dxy = (-(l3Muon->vx() - recoBeamSpot->x0()) * l3Muon->py() + (l3Muon->vy() - recoBeamSpot->y0()) * l3Muon->px()) /
0833 l3Muon->pt();
0834 break;
0835 }
0836 }
0837 return dxy;
0838 }
0839
0840 double HLTObjectMonitor::dzFinder(double eta,
0841 double phi,
0842 edm::Handle<reco::RecoChargedCandidateCollection> recoChargedCands,
0843 edm::Handle<reco::BeamSpot> recoBeamSpot) {
0844 double dz = -99.;
0845 for (reco::RecoChargedCandidateCollection::const_iterator l3Muon = recoChargedCands->begin();
0846 l3Muon != recoChargedCands->end();
0847 l3Muon++) {
0848 if (deltaR(eta, phi, l3Muon->eta(), l3Muon->phi()) < 0.1) {
0849 dz = (l3Muon->vz() - recoBeamSpot->z0()) -
0850 ((l3Muon->vx() - recoBeamSpot->x0()) * l3Muon->px() + (l3Muon->vy() - recoBeamSpot->y0()) * l3Muon->py()) /
0851 l3Muon->pt() * (l3Muon->pz() / l3Muon->pt());
0852 break;
0853 }
0854 }
0855 return dz;
0856 }
0857
0858 double HLTObjectMonitor::get_wall_time() {
0859 struct timeval time;
0860 if (gettimeofday(&time, nullptr))
0861 return 0;
0862 return (double)time.tv_sec + (double)time.tv_usec * .000001;
0863 }
0864
0865
0866 void HLTObjectMonitor::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
0867 edm::ParameterSetDescription desc;
0868 desc.add<std::string>("processName", "HLT");
0869
0870 auto addPSet = [](edm::ParameterSetDescription& desc, const std::string& name) {
0871 edm::ParameterSetDescription pset;
0872 pset.add<std::string>("pathName", "");
0873 pset.add<std::string>("moduleName", "");
0874 pset.addOptional<std::string>("pathName_OR");
0875 pset.addOptional<std::string>("moduleName_OR");
0876 pset.add<std::string>("plotLabel", "");
0877 pset.add<std::string>("axisLabel", "");
0878 pset.add<bool>("mainWorkspace", false);
0879 pset.add<int>("NbinsX", 50);
0880 pset.add<double>("Xmin", 0.0);
0881 pset.add<double>("Xmax", 1.0);
0882 desc.add<edm::ParameterSetDescription>(name, pset);
0883 };
0884
0885 addPSet(desc, "alphaT");
0886 addPSet(desc, "photonPt");
0887 addPSet(desc, "photonEta");
0888 addPSet(desc, "photonPhi");
0889 addPSet(desc, "muonPt");
0890 addPSet(desc, "muonEta");
0891 addPSet(desc, "muonPhi");
0892 addPSet(desc, "l2muonPt");
0893 addPSet(desc, "l2muonEta");
0894 addPSet(desc, "l2muonPhi");
0895 addPSet(desc, "l2NoBPTXmuonPt");
0896 addPSet(desc, "l2NoBPTXmuonEta");
0897 addPSet(desc, "l2NoBPTXmuonPhi");
0898 addPSet(desc, "electronPt");
0899 addPSet(desc, "electronEta");
0900 addPSet(desc, "electronPhi");
0901 addPSet(desc, "jetPt");
0902 addPSet(desc, "jetAK8Pt");
0903 addPSet(desc, "jetAK8Mass");
0904 addPSet(desc, "tauPt");
0905 addPSet(desc, "diMuonLowMass");
0906 addPSet(desc, "caloMetPt");
0907 addPSet(desc, "caloMetPhi");
0908 addPSet(desc, "pfMetPt");
0909 addPSet(desc, "pfMetPhi");
0910 addPSet(desc, "caloHtPt");
0911 addPSet(desc, "pfHtPt");
0912 addPSet(desc, "bJetEta");
0913 addPSet(desc, "bJetPhi");
0914 addPSet(desc, "bJetCSVCalo");
0915 addPSet(desc, "bJetCSVPF");
0916 addPSet(desc, "rsq");
0917 addPSet(desc, "mr");
0918 addPSet(desc, "diMuonMass");
0919 addPSet(desc, "pAL1DoubleMuZMass");
0920 addPSet(desc, "pAL2DoubleMuZMass");
0921 addPSet(desc, "pAL3DoubleMuZMass");
0922 addPSet(desc, "diElecMass");
0923 addPSet(desc, "muonDxy");
0924 addPSet(desc, "muonDz");
0925 addPSet(desc, "wallTime");
0926 descriptions.addWithDefaultLabel(desc);
0927 }
0928
0929
0930 DEFINE_FWK_MODULE(HLTObjectMonitor);