File indexing completed on 2023-03-17 10:55:48
0001
0002
0003
0004
0005
0006
0007 #ifndef QcdUeDQM_H
0008 #define QcdUeDQM_H
0009
0010 #include "DQMServices/Core/interface/DQMEDAnalyzer.h"
0011 #include "DataFormats/Common/interface/Handle.h"
0012 #include "DataFormats/GeometryVector/interface/VectorUtil.h"
0013 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0014 #include "FWCore/Framework/interface/Frameworkfwd.h"
0015 #include "FWCore/Framework/interface/Event.h"
0016 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0017 #include "AnalysisDataFormats/TrackInfo/interface/TrackInfo.h"
0018 #include "AnalysisDataFormats/TrackInfo/interface/TrackInfoTrackAssociation.h"
0019 #include "DataFormats/TrackReco/interface/Track.h"
0020 #include "DataFormats/Candidate/interface/CandidateFwd.h"
0021 #include "DataFormats/Candidate/interface/CandMatchMap.h"
0022 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
0023 #include "DataFormats/JetReco/interface/TrackJetCollection.h"
0024 #include "DataFormats/VertexReco/interface/Vertex.h"
0025 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0026 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
0027 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0028 #include "DataFormats/Common/interface/TriggerResults.h"
0029 #include "FWCore/Common/interface/TriggerNames.h"
0030 #include "DataFormats/HLTReco/interface/TriggerFilterObjectWithRefs.h"
0031 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
0032 #include "DQMServices/Core/interface/DQMStore.h"
0033
0034 #include <TMath.h>
0035 #include <vector>
0036
0037 #define PI 3.141592654
0038
0039 class TrackerGeometry;
0040 class TH1F;
0041 class TH2F;
0042 class TH3F;
0043 class TProfile;
0044
0045 class PtSorter {
0046 public:
0047 template <class T>
0048 bool operator()(const T &a, const T &b) {
0049 return (a.pt() > b.pt());
0050 }
0051 };
0052
0053 class QcdUeDQM : public DQMEDAnalyzer {
0054 public:
0055 QcdUeDQM(const edm::ParameterSet ¶meters);
0056 ~QcdUeDQM() override;
0057 void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override;
0058 void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
0059 void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override;
0060
0061 private:
0062 bool isHltConfigSuccessful_;
0063
0064 void book1D(DQMStore::IBooker &,
0065 std::vector<MonitorElement *> &mes,
0066 const std::string &name,
0067 const std::string &title,
0068 int nx,
0069 double x1,
0070 double x2,
0071 bool sumw2 = true,
0072 bool sbox = true);
0073 void bookProfile(DQMStore::IBooker &,
0074 std::vector<MonitorElement *> &mes,
0075 const std::string &name,
0076 const std::string &title,
0077 int nx,
0078 double x1,
0079 double x2,
0080 double y1,
0081 double y2,
0082 bool sumw2 = true,
0083 bool sbox = true);
0084 void fill1D(std::vector<TH1F *> &hs, double val, double w = 1.);
0085 void fill1D(std::vector<MonitorElement *> &mes, double val, double w = 1.);
0086 void fill2D(std::vector<TH2F *> &hs, double valx, double valy, double w = 1.);
0087 void fill2D(std::vector<MonitorElement *> &mes, double valx, double valy, double w = 1.);
0088 void fillProfile(std::vector<TProfile *> &hs, double valx, double valy, double w = 1.);
0089 void fillProfile(std::vector<MonitorElement *> &mes, double valx, double valy, double w = 1.);
0090 void fill3D(std::vector<TH3F *> &hs, int gbin, double w = 1.);
0091 void setLabel1D(std::vector<MonitorElement *> &mes);
0092
0093 bool trackSelection(const reco::Track &trk, const reco::BeamSpot *bs, const reco::Vertex &vtx, int sizevtx);
0094 void fillHltBits(const edm::Event &iEvent, const edm::EventSetup &iSetup);
0095 bool fillVtxPlots(const reco::BeamSpot *bs, const edm::Handle<reco::VertexCollection> vtxColl);
0096 void fillpTMaxRelated(const std::vector<const reco::Track *> &track);
0097 void fillChargedJetSpectra(const edm::Handle<reco::TrackJetCollection> trackJets);
0098 void fillUE_with_ChargedJets(const std::vector<const reco::Track *> &track,
0099 const edm::Handle<reco::TrackJetCollection> &trackJets);
0100 void fillUE_with_MaxpTtrack(const std::vector<const reco::Track *> &track);
0101
0102 template <typename TYPE>
0103 void getProduct(const std::string name, edm::Handle<TYPE> &prod, const edm::Event &event) const;
0104 template <typename TYPE>
0105 bool getProductSafe(const std::string name, edm::Handle<TYPE> &prod, const edm::Event &event) const;
0106
0107 HLTConfigProvider hltConfig;
0108
0109 std::string hltResName_;
0110 std::vector<std::string> hltProcNames_;
0111 std::vector<std::string> hltTrgNames_;
0112
0113 std::vector<int> hltTrgBits_;
0114 std::vector<bool> hltTrgDeci_;
0115 std::vector<std::string> hltTrgUsedNames_;
0116 std::string hltUsedResName_;
0117 int verbose_;
0118 const TrackerGeometry *tgeo_;
0119 MonitorElement *repSumMap_;
0120 MonitorElement *repSummary_;
0121 MonitorElement *h2TrigCorr_;
0122
0123 std::vector<MonitorElement *> hNevts_;
0124 std::vector<MonitorElement *> hNtrackerLayer_;
0125 std::vector<MonitorElement *> hNtrackerPixelLayer_;
0126 std::vector<MonitorElement *> hNtrackerStripPixelLayer_;
0127 std::vector<MonitorElement *> hRatioPtErrorPt_;
0128 std::vector<MonitorElement *> hTrkPt_;
0129 std::vector<MonitorElement *> hTrkEta_;
0130 std::vector<MonitorElement *> hTrkPhi_;
0131 std::vector<MonitorElement *> hNgoodTrk_;
0132 std::vector<MonitorElement *> hGoodTrkPt500_;
0133 std::vector<MonitorElement *> hGoodTrkEta500_;
0134 std::vector<MonitorElement *> hGoodTrkPhi500_;
0135 std::vector<MonitorElement *> hGoodTrkPt900_;
0136 std::vector<MonitorElement *> hGoodTrkEta900_;
0137 std::vector<MonitorElement *> hGoodTrkPhi900_;
0138 std::vector<MonitorElement *> hRatioDxySigmaDxyBS_;
0139 std::vector<MonitorElement *> hRatioDxySigmaDxyPV_;
0140 std::vector<MonitorElement *> hRatioDzSigmaDzBS_;
0141 std::vector<MonitorElement *> hRatioDzSigmaDzPV_;
0142 std::vector<MonitorElement *> hTrkChi2_;
0143 std::vector<MonitorElement *> hTrkNdof_;
0144
0145 std::vector<MonitorElement *> hNvertices_;
0146 std::vector<MonitorElement *> hVertex_z_;
0147 std::vector<MonitorElement *> hVertex_y_;
0148 std::vector<MonitorElement *> hVertex_x_;
0149 std::vector<MonitorElement *> hVertex_ndof_;
0150 std::vector<MonitorElement *> hVertex_rho_;
0151 std::vector<MonitorElement *> hVertex_z_bs_;
0152
0153 std::vector<MonitorElement *> hBeamSpot_z_;
0154 std::vector<MonitorElement *> hBeamSpot_y_;
0155 std::vector<MonitorElement *> hBeamSpot_x_;
0156
0157 std::vector<MonitorElement *> hLeadingTrack_pTSpectrum_;
0158
0159 std::vector<MonitorElement *> hLeadingTrack_etaSpectrum_;
0160
0161 std::vector<MonitorElement *> hLeadingTrack_phiSpectrum_;
0162
0163
0164 std::vector<MonitorElement *> hChargedJetMulti_;
0165 std::vector<MonitorElement *> hChargedJetConstituent_;
0166
0167
0168 std::vector<MonitorElement *> hLeadingChargedJet_pTSpectrum_;
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183 std::vector<MonitorElement *> hdPhi_maxpTTrack_tracks_;
0184
0185
0186
0187
0188 std::vector<MonitorElement *> hdPhi_chargedJet_tracks_;
0189
0190
0191
0192 std::vector<MonitorElement *> hLeadingChargedJet_etaSpectrum_;
0193
0194
0195
0196 std::vector<MonitorElement *> hLeadingChargedJet_phiSpectrum_;
0197
0198
0199
0200
0201 std::vector<MonitorElement *> hdNdEtadPhi_pTMax_Toward500_;
0202
0203
0204
0205
0206
0207 std::vector<MonitorElement *> hdNdEtadPhi_pTMax_Transverse500_;
0208
0209
0210
0211
0212
0213
0214 std::vector<MonitorElement *> hdNdEtadPhi_pTMax_Away500_;
0215
0216
0217
0218
0219
0220
0221
0222
0223
0224
0225 std::vector<MonitorElement *> hdNdEtadPhi_trackJet_Toward500_;
0226
0227
0228
0229
0230
0231
0232 std::vector<MonitorElement *> hdNdEtadPhi_trackJet_Transverse500_;
0233
0234
0235 std::vector<MonitorElement *> hdNdEtadPhi_trackJet_Away500_;
0236
0237
0238
0239
0240
0241
0242 std::vector<MonitorElement *> hpTSumdEtadPhi_pTMax_Toward500_;
0243
0244
0245
0246
0247
0248
0249 std::vector<MonitorElement *> hpTSumdEtadPhi_pTMax_Transverse500_;
0250
0251
0252 std::vector<MonitorElement *> hpTSumdEtadPhi_pTMax_Away500_;
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265 std::vector<MonitorElement *> hpTSumdEtadPhi_trackJet_Toward500_;
0266
0267
0268
0269
0270
0271
0272
0273
0274
0275
0276 std::vector<MonitorElement *> hpTSumdEtadPhi_trackJet_Transverse500_;
0277
0278
0279 std::vector<MonitorElement *> hpTSumdEtadPhi_trackJet_Away500_;
0280
0281
0282
0283
0284
0285
0286
0287
0288 std::vector<MonitorElement *> hdNdEtadPhi_pTMax_Toward900_;
0289
0290
0291
0292
0293
0294 std::vector<MonitorElement *> hdNdEtadPhi_pTMax_Transverse900_;
0295
0296
0297
0298
0299
0300
0301 std::vector<MonitorElement *> hdNdEtadPhi_pTMax_Away900_;
0302
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312 std::vector<MonitorElement *> hdNdEtadPhi_trackJet_Toward900_;
0313
0314
0315
0316
0317
0318
0319 std::vector<MonitorElement *> hdNdEtadPhi_trackJet_Transverse900_;
0320
0321
0322 std::vector<MonitorElement *> hdNdEtadPhi_trackJet_Away900_;
0323
0324
0325
0326
0327
0328
0329 std::vector<MonitorElement *> hpTSumdEtadPhi_pTMax_Toward900_;
0330
0331
0332
0333
0334
0335
0336 std::vector<MonitorElement *> hpTSumdEtadPhi_pTMax_Transverse900_;
0337
0338
0339 std::vector<MonitorElement *> hpTSumdEtadPhi_pTMax_Away900_;
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352 std::vector<MonitorElement *> hpTSumdEtadPhi_trackJet_Toward900_;
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363 std::vector<MonitorElement *> hpTSumdEtadPhi_trackJet_Transverse900_;
0364
0365
0366 std::vector<MonitorElement *> hpTSumdEtadPhi_trackJet_Away900_;
0367
0368
0369
0370
0371
0372
0373
0374
0375 double ptMin_;
0376 double minRapidity_;
0377 double maxRapidity_;
0378 double tip_;
0379 double lip_;
0380 double diffvtxbs_;
0381 double ptErr_pt_;
0382 double vtxntk_;
0383 int minHit_;
0384 double pxlLayerMinCut_;
0385 bool requirePIX1_;
0386 int min3DHit_;
0387 double maxChi2_;
0388 bool bsuse_;
0389 bool allowTriplets_;
0390 double bsPos_;
0391 edm::EDGetTokenT<reco::CaloJetCollection> caloJetLabel_;
0392 edm::EDGetTokenT<reco::TrackJetCollection> chargedJetLabel_;
0393 edm::EDGetTokenT<reco::TrackCollection> trackLabel_;
0394 edm::EDGetTokenT<reco::VertexCollection> vtxLabel_;
0395 edm::EDGetTokenT<reco::BeamSpot> bsLabel_;
0396 std::vector<reco::TrackBase::TrackQuality> quality_;
0397 std::vector<reco::TrackBase::TrackAlgorithm> algorithm_;
0398 typedef std::vector<const reco::Track *> container;
0399 container selected_;
0400 reco::Vertex vtx1;
0401 };
0402
0403
0404 template <typename TYPE>
0405 inline void QcdUeDQM::getProduct(const std::string name, edm::Handle<TYPE> &prod, const edm::Event &event) const {
0406
0407
0408
0409
0410 event.getByLabel(edm::InputTag(name), prod);
0411 if (!prod.isValid())
0412 throw edm::Exception(edm::errors::Configuration, "QcdUeDQM::GetProduct()\n")
0413 << "Collection with label " << name << " is not valid" << std::endl;
0414 }
0415
0416
0417 template <typename TYPE>
0418 inline bool QcdUeDQM::getProductSafe(const std::string name, edm::Handle<TYPE> &prod, const edm::Event &event) const {
0419
0420
0421
0422
0423 if (name.empty())
0424 return false;
0425
0426 try {
0427 event.getByLabel(edm::InputTag(name), prod);
0428 if (!prod.isValid())
0429 return false;
0430 } catch (...) {
0431 return false;
0432 }
0433 return true;
0434 }
0435
0436
0437 #endif
0438
0439
0440
0441
0442