File indexing completed on 2024-04-06 12:08:07
0001
0002 #ifndef QcdLowPtDQM_H
0003 #define QcdLowPtDQM_H
0004
0005 #include "DQMServices/Core/interface/DQMOneEDAnalyzer.h"
0006 #include "DataFormats/Common/interface/Handle.h"
0007 #include "DataFormats/GeometryVector/interface/VectorUtil.h"
0008 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0009 #include "FWCore/Framework/interface/Frameworkfwd.h"
0010 #include "FWCore/Framework/interface/Event.h"
0011 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0012 #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
0013 #include "DQMServices/Core/interface/DQMStore.h"
0014 #include <TMath.h>
0015 #include <vector>
0016
0017 class TrackerGeometry;
0018 class TrackerDigiGeometryRecord;
0019 class TrackerTopology;
0020 class TrackerTopologyRcd;
0021 class TH1F;
0022 class TH2F;
0023 class TH3F;
0024
0025 namespace qlpd {
0026 struct Cache {};
0027 }
0028
0029 class QcdLowPtDQM : public DQMOneEDAnalyzer<edm::LuminosityBlockCache<qlpd::Cache>> {
0030 public:
0031 class Pixel {
0032 public:
0033 Pixel(double x = 0,
0034 double y = 0,
0035 double z = 0,
0036 double eta = 0,
0037 double phi = 0,
0038 double adc = 0,
0039 double sx = 0,
0040 double sy = 0)
0041 : x_(x),
0042 y_(y),
0043 z_(z),
0044 rho_(TMath::Sqrt(x_ * x_ + y_ * y_)),
0045 eta_(eta),
0046 phi_(phi),
0047 adc_(adc),
0048 sizex_(sx),
0049 sizey_(sy) {}
0050 Pixel(const GlobalPoint &p, double adc = 0, double sx = 0, double sy = 0)
0051 : x_(p.x()),
0052 y_(p.y()),
0053 z_(p.z()),
0054 rho_(TMath::Sqrt(x_ * x_ + y_ * y_)),
0055 eta_(p.eta()),
0056 phi_(p.phi()),
0057 adc_(adc),
0058 sizex_(sx),
0059 sizey_(sy) {}
0060 double adc() const { return adc_; }
0061 double eta() const { return eta_; }
0062 double rho() const { return rho_; }
0063 double phi() const { return phi_; }
0064 double sizex() const { return sizex_; }
0065 double sizey() const { return sizey_; }
0066 double x() const { return x_; }
0067 double y() const { return y_; }
0068 double z() const { return z_; }
0069
0070 protected:
0071 double x_, y_, z_, rho_, eta_, phi_;
0072 double adc_, sizex_, sizey_;
0073 };
0074 class Tracklet {
0075 public:
0076 Tracklet() : i1_(-1), i2_(-2), deta_(0), dphi_(0) {}
0077 Tracklet(const Pixel &p1, const Pixel &p2)
0078 : p1_(p1), p2_(p2), i1_(-1), i2_(-1), deta_(p1.eta() - p2.eta()), dphi_(Geom::deltaPhi(p1.phi(), p2.phi())) {}
0079 double deta() const { return deta_; }
0080 double dphi() const { return dphi_; }
0081 int i1() const { return i1_; }
0082 int i2() const { return i2_; }
0083 double eta() const { return p1_.eta(); }
0084 const Pixel &p1() const { return p1_; }
0085 const Pixel &p2() const { return p2_; }
0086 void seti1(int i1) { i1_ = i1; }
0087 void seti2(int i2) { i2_ = i2; }
0088
0089 protected:
0090 Pixel p1_, p2_;
0091 int i1_, i2_;
0092 double deta_, dphi_;
0093 };
0094 class Vertex {
0095 public:
0096 Vertex(double x = 0, double y = 0, double z = 0, double xs = 0, double ys = 0, double zs = 0, int n = 0)
0097 : x_(x), y_(y), z_(z), xs_(xs), ys_(ys), zs_(zs), n_(n) {}
0098 int n() const { return n_; }
0099 double x() const { return x_; }
0100 double y() const { return y_; }
0101 double z() const { return z_; }
0102 double xs() const { return xs_; }
0103 double ys() const { return ys_; }
0104 double zs() const { return zs_; }
0105 void set(int n, double z, double zs) {
0106 n_ = n;
0107 z_ = z;
0108 zs_ = zs;
0109 }
0110 void set(int n, double x, double y, double z, double xs, double ys, double zs) {
0111 n_ = n;
0112 x_ = x;
0113 xs_ = xs;
0114 y_ = y;
0115 ys_ = ys;
0116 z_ = z;
0117 zs_ = zs;
0118 }
0119
0120 protected:
0121 double x_, y_, z_, xs_, ys_, zs_;
0122 int n_;
0123 };
0124
0125 QcdLowPtDQM(const edm::ParameterSet ¶meters);
0126 ~QcdLowPtDQM() override;
0127 void dqmBeginRun(const edm::Run &, const edm::EventSetup &) override;
0128 void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override;
0129 void analyze(const edm::Event &iEvent, const edm::EventSetup &iSetup) override;
0130 std::shared_ptr<qlpd::Cache> globalBeginLuminosityBlock(const edm::LuminosityBlock &,
0131 const edm::EventSetup &) const override;
0132 void globalEndLuminosityBlock(const edm::LuminosityBlock &l, const edm::EventSetup &iSetup) override;
0133 void dqmEndRun(const edm::Run &r, const edm::EventSetup &iSetup) override;
0134
0135 private:
0136 void book1D(DQMStore::IBooker &,
0137 std::vector<MonitorElement *> &mes,
0138 const std::string &name,
0139 const std::string &title,
0140 int nx,
0141 double x1,
0142 double x2,
0143 bool sumw2 = true,
0144 bool sbox = true);
0145 void book2D(DQMStore::IBooker &,
0146 std::vector<MonitorElement *> &mes,
0147 const std::string &name,
0148 const std::string &title,
0149 int nx,
0150 double x1,
0151 double x2,
0152 int ny,
0153 double y1,
0154 double y2,
0155 bool sumw2 = true,
0156 bool sbox = true);
0157 void create1D(std::vector<TH1F *> &mes,
0158 const std::string &name,
0159 const std::string &title,
0160 int nx,
0161 double x1,
0162 double x2,
0163 bool sumw2 = true,
0164 bool sbox = true);
0165 void create2D(std::vector<TH2F *> &mes,
0166 const std::string &name,
0167 const std::string &title,
0168 int nx,
0169 double x1,
0170 double x2,
0171 int ny,
0172 double y1,
0173 double y2,
0174 bool sumw2 = true,
0175 bool sbox = true);
0176 void fill1D(std::vector<TH1F *> &hs, double val, double w = 1.);
0177 void fill1D(std::vector<MonitorElement *> &mes, double val, double w = 1.);
0178 void fill2D(std::vector<TH2F *> &hs, double valx, double valy, double w = 1.);
0179 void fill2D(std::vector<MonitorElement *> &mes, double valx, double valy, double w = 1.);
0180 void fill3D(std::vector<TH3F *> &hs, int gbin, double w = 1.);
0181 void filldNdeta(const TH3F *AlphaTracklets,
0182 const std::vector<TH3F *> &NsigTracklets,
0183 const std::vector<TH3F *> &NbkgTracklets,
0184 const std::vector<TH1F *> &NEvsPerEta,
0185 std::vector<MonitorElement *> &hdNdEtaRawTrkl,
0186 std::vector<MonitorElement *> &hdNdEtaSubTrkl,
0187 std::vector<MonitorElement *> &hdNdEtaTrklets);
0188 void fillHltBits(const edm::Event &iEvent);
0189 void fillPixels(const edm::Event &iEvent, const edm::EventSetup &iSetup);
0190 void fillPixelClusterInfos(const edm::Event &iEvent, int which = 12);
0191 void fillPixelClusterInfos(const double vz,
0192 const std::vector<Pixel> &pix,
0193 std::vector<MonitorElement *> &hClusterYSize,
0194 std::vector<MonitorElement *> &hClusterADC);
0195 void fillTracklets(const edm::Event &iEvent, int which = 12);
0196 void fillTracklets(std::vector<Tracklet> &tracklets,
0197 const std::vector<Pixel> &pix1,
0198 const std::vector<Pixel> &pix2,
0199 const Vertex &trackletV);
0200 void fillTracklets(const std::vector<Tracklet> &tracklets,
0201 const std::vector<Pixel> &pixels,
0202 const Vertex &trackletV,
0203 const TH3F *AlphaTracklets,
0204 std::vector<TH3F *> &NsigTracklets,
0205 std::vector<TH3F *> &NbkgTracklets,
0206 std::vector<TH1F *> &eventpereta,
0207 std::vector<MonitorElement *> &detaphi,
0208 std::vector<MonitorElement *> &deta,
0209 std::vector<MonitorElement *> &dphi,
0210 std::vector<MonitorElement *> &etavsvtx);
0211 template <typename TYPE>
0212 void getProduct(const std::string name, edm::Handle<TYPE> &prod, const edm::Event &event) const;
0213 template <typename TYPE>
0214 bool getProductSafe(const std::string name, edm::Handle<TYPE> &prod, const edm::Event &event) const;
0215 void print(int level, const char *msg);
0216 void print(int level, const std::string &msg) { print(level, msg.c_str()); }
0217 void reallyPrint(int level, const char *msg);
0218 void trackletVertexUnbinned(const edm::Event &iEvent, int which = 12);
0219 void trackletVertexUnbinned(std::vector<Pixel> &pix1, std::vector<Pixel> &pix2, Vertex &vtx);
0220 double vertexZFromClusters(const std::vector<Pixel> &pix) const;
0221 void yieldAlphaHistogram(int which = 12);
0222
0223 edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomToken_;
0224 edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tTopoToken_;
0225 std::string hltResName_;
0226 std::vector<std::string> hltProcNames_;
0227 std::vector<std::string> hltTrgNames_;
0228 std::string pixelName_;
0229 std::string clusterVtxName_;
0230 double ZVCut_;
0231 double ZVEtaRegion_;
0232 double ZVVtxRegion_;
0233 double dPhiVc_;
0234 double dZVc_;
0235 double sigEtaCut_;
0236 double sigPhiCut_;
0237 double bkgEtaCut_;
0238 double bkgPhiCut_;
0239 int verbose_;
0240 int pixLayers_;
0241 int clusLayers_;
0242 bool useRecHitQ_;
0243 bool usePixelQ_;
0244 std::vector<int> hltTrgBits_;
0245 std::vector<bool> hltTrgDeci_;
0246 std::vector<std::string> hltTrgUsedNames_;
0247 std::string hltUsedResName_;
0248 std::vector<Pixel> bpix1_;
0249 std::vector<Pixel> bpix2_;
0250 std::vector<Pixel> bpix3_;
0251 std::vector<Tracklet> btracklets12_;
0252 std::vector<Tracklet> btracklets13_;
0253 std::vector<Tracklet> btracklets23_;
0254 Vertex trackletV12_;
0255 Vertex trackletV13_;
0256 Vertex trackletV23_;
0257 std::vector<TH3F *> NsigTracklets12_;
0258 std::vector<TH3F *> NbkgTracklets12_;
0259 std::vector<TH1F *> hEvtCountsPerEta12_;
0260
0261 TH3F *AlphaTracklets12_;
0262 std::vector<TH3F *> NsigTracklets13_;
0263 std::vector<TH3F *> NbkgTracklets13_;
0264 std::vector<TH1F *> hEvtCountsPerEta13_;
0265
0266 TH3F *AlphaTracklets13_;
0267 std::vector<TH3F *> NsigTracklets23_;
0268 std::vector<TH3F *> NbkgTracklets23_;
0269 std::vector<TH1F *> hEvtCountsPerEta23_;
0270
0271 TH3F *AlphaTracklets23_;
0272 HLTConfigProvider hltConfig_;
0273 const TrackerGeometry *tgeo_;
0274 MonitorElement *repSumMap_;
0275 MonitorElement *repSummary_;
0276 MonitorElement *h2TrigCorr_;
0277 std::vector<MonitorElement *> hNhitsL1_;
0278 std::vector<MonitorElement *> hNhitsL2_;
0279 std::vector<MonitorElement *> hNhitsL3_;
0280 std::vector<MonitorElement *> hNhitsL1z_;
0281
0282 std::vector<MonitorElement *> hNhitsL2z_;
0283
0284 std::vector<MonitorElement *> hNhitsL3z_;
0285
0286 std::vector<MonitorElement *> hdNdEtaHitsL1_;
0287 std::vector<MonitorElement *> hdNdEtaHitsL2_;
0288 std::vector<MonitorElement *> hdNdEtaHitsL3_;
0289 std::vector<MonitorElement *> hdNdPhiHitsL1_;
0290 std::vector<MonitorElement *> hdNdPhiHitsL2_;
0291 std::vector<MonitorElement *> hdNdPhiHitsL3_;
0292 std::vector<MonitorElement *> hTrkVtxZ12_;
0293 std::vector<MonitorElement *> hTrkVtxZ13_;
0294 std::vector<MonitorElement *> hTrkVtxZ23_;
0295 std::vector<MonitorElement *> hRawTrkEtaVtxZ12_;
0296
0297 std::vector<MonitorElement *> hRawTrkEtaVtxZ13_;
0298
0299 std::vector<MonitorElement *> hRawTrkEtaVtxZ23_;
0300
0301 std::vector<MonitorElement *> hTrkRawDetaDphi12_;
0302
0303 std::vector<MonitorElement *> hTrkRawDeta12_;
0304 std::vector<MonitorElement *> hTrkRawDphi12_;
0305 std::vector<MonitorElement *> hTrkRawDetaDphi13_;
0306
0307 std::vector<MonitorElement *> hTrkRawDeta13_;
0308 std::vector<MonitorElement *> hTrkRawDphi13_;
0309 std::vector<MonitorElement *> hTrkRawDetaDphi23_;
0310
0311 std::vector<MonitorElement *> hTrkRawDeta23_;
0312 std::vector<MonitorElement *> hTrkRawDphi23_;
0313 std::vector<MonitorElement *> hdNdEtaRawTrkl12_;
0314
0315 std::vector<MonitorElement *> hdNdEtaSubTrkl12_;
0316
0317 std::vector<MonitorElement *> hdNdEtaTrklets12_;
0318
0319 std::vector<MonitorElement *> hdNdEtaRawTrkl13_;
0320
0321 std::vector<MonitorElement *> hdNdEtaSubTrkl13_;
0322
0323 std::vector<MonitorElement *> hdNdEtaTrklets13_;
0324
0325 std::vector<MonitorElement *> hdNdEtaRawTrkl23_;
0326
0327 std::vector<MonitorElement *> hdNdEtaSubTrkl23_;
0328
0329 std::vector<MonitorElement *> hdNdEtaTrklets23_;
0330
0331 std::vector<MonitorElement *> hClusterVertexZ_;
0332
0333 std::vector<MonitorElement *> hClusterYSize1_;
0334
0335 std::vector<MonitorElement *> hClusterYSize2_;
0336
0337 std::vector<MonitorElement *> hClusterYSize3_;
0338
0339 std::vector<MonitorElement *> hClusterADC1_;
0340
0341 std::vector<MonitorElement *> hClusterADC2_;
0342
0343 std::vector<MonitorElement *> hClusterADC3_;
0344
0345 };
0346
0347
0348 template <typename TYPE>
0349 inline void QcdLowPtDQM::getProduct(const std::string name, edm::Handle<TYPE> &prod, const edm::Event &event) const {
0350
0351
0352
0353
0354 event.getByLabel(edm::InputTag(name), prod);
0355 if (!prod.isValid())
0356 throw edm::Exception(edm::errors::Configuration, "QcdLowPtDQM::GetProduct()\n")
0357 << "Collection with label " << name << " is not valid" << std::endl;
0358 }
0359
0360
0361 template <typename TYPE>
0362 inline bool QcdLowPtDQM::getProductSafe(const std::string name,
0363 edm::Handle<TYPE> &prod,
0364 const edm::Event &event) const {
0365
0366
0367
0368
0369 if (name.empty())
0370 return false;
0371
0372 try {
0373 event.getByLabel(edm::InputTag(name), prod);
0374 if (!prod.isValid())
0375 return false;
0376 } catch (...) {
0377 return false;
0378 }
0379 return true;
0380 }
0381
0382
0383 inline void QcdLowPtDQM::print(int level, const char *msg) {
0384
0385
0386 if (level >= verbose_)
0387 reallyPrint(level, msg);
0388 }
0389 #endif
0390
0391
0392
0393
0394