File indexing completed on 2024-04-06 11:57:03
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #include "RtypesCore.h"
0018 #include "TAxis.h"
0019 #include "TCanvas.h"
0020 #include "TColor.h"
0021 #include "TH1.h"
0022 #include "TH2.h"
0023 #include "TLatex.h"
0024 #include "TMath.h"
0025 #include "TProfile.h"
0026 #include "TString.h"
0027 #include "TStyle.h"
0028 #include "TVirtualPad.h"
0029
0030
0031
0032 #include <algorithm>
0033 #include <array>
0034 #include <cmath>
0035 #include <cstdint>
0036 #include <cstdlib>
0037 #include <ctime>
0038 #include <ext/alloc_traits.h>
0039 #include <fmt/printf.h>
0040 #include <iomanip>
0041 #include <iostream>
0042 #include <map>
0043 #include <memory>
0044 #include <string>
0045 #include <type_traits>
0046 #include <utility>
0047 #include <vector>
0048 #include "boost/range/adaptor/indexed.hpp"
0049
0050
0051
0052 #include "CalibTracker/StandaloneTrackerTopology/interface/StandaloneTrackerTopology.h"
0053 #include "CommonTools/TrackerMap/interface/TrackerMap.h"
0054 #include "CommonTools/UtilAlgos/interface/TFileService.h"
0055 #include "CommonTools/Utils/interface/TFileDirectory.h"
0056 #include "DQM/TrackerRemapper/interface/Phase1PixelMaps.h"
0057 #include "DQM/TrackerRemapper/interface/Phase1PixelSummaryMap.h"
0058 #include "CondCore/SiPixelPlugins/interface/PixelRegionContainers.h"
0059 #include "CondCore/SiPixelPlugins/interface/SiPixelPayloadInspectorHelper.h"
0060 #include "CondFormats/DataRecord/interface/RunSummaryRcd.h"
0061 #include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h"
0062 #include "CondFormats/RunInfo/interface/RunInfo.h"
0063 #include "CondFormats/SiStripObjects/interface/SiStripLatency.h"
0064 #include "DataFormats/BeamSpot/interface/BeamSpot.h"
0065 #include "DataFormats/Common/interface/Handle.h"
0066 #include "DataFormats/Common/interface/RefTraits.h"
0067 #include "DataFormats/Common/interface/TriggerResults.h"
0068 #include "DataFormats/DetId/interface/DetId.h"
0069 #include "DataFormats/GeometrySurface/interface/Plane.h"
0070 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0071 #include "DataFormats/GeometryVector/interface/GlobalVector.h"
0072 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0073 #include "DataFormats/GeometryVector/interface/Phi.h"
0074 #include "DataFormats/GeometryVector/interface/Theta.h"
0075 #include "DataFormats/Math/interface/Point3D.h"
0076 #include "DataFormats/Math/interface/deltaPhi.h"
0077 #include "DataFormats/Provenance/interface/RunLumiEventNumber.h"
0078 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0079 #include "DataFormats/SiStripDetId/interface/SiStripDetId.h"
0080 #include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
0081 #include "DataFormats/TrackReco/interface/HitPattern.h"
0082 #include "DataFormats/TrackReco/interface/Track.h"
0083 #include "DataFormats/TrackReco/interface/TrackBase.h"
0084 #include "DataFormats/TrackReco/interface/TrackExtraFwd.h"
0085 #include "DataFormats/TrackReco/interface/TrackFwd.h"
0086 #include "DataFormats/TrackReco/interface/TrackResiduals.h"
0087 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0088 #include "DataFormats/TrackerRecHit2D/interface/ProjectedSiStripRecHit2D.h"
0089 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
0090 #include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
0091 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h"
0092 #include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
0093 #include "DataFormats/TrackingRecHit/interface/TrackingRecHit.h"
0094 #include "DataFormats/TrackingRecHit/interface/TrackingRecHitFwd.h"
0095 #include "DataFormats/VertexReco/interface/Vertex.h"
0096 #include "DataFormats/VertexReco/interface/VertexFwd.h"
0097 #include "FWCore/Common/interface/TriggerNames.h"
0098 #include "FWCore/Framework/interface/Event.h"
0099 #include "FWCore/Framework/interface/EventSetup.h"
0100 #include "FWCore/Framework/interface/MakerMacros.h"
0101 #include "FWCore/Framework/interface/one/EDAnalyzer.h"
0102 #include "FWCore/MessageLogger/interface/ErrorObj.h"
0103 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0104 #include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h"
0105 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0106 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0107 #include "FWCore/ParameterSet/interface/ParameterSetDescriptionFiller.h"
0108 #include "FWCore/ServiceRegistry/interface/Service.h"
0109 #include "FWCore/Utilities/interface/EDGetToken.h"
0110 #include "FWCore/Utilities/interface/ESGetToken.h"
0111 #include "FWCore/Utilities/interface/InputTag.h"
0112 #include "Geometry/CommonTopologies/interface/GeomDet.h"
0113 #include "Geometry/CommonTopologies/interface/TrackerGeomDet.h"
0114 #include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
0115 #include "Geometry/Records/interface/TrackerTopologyRcd.h"
0116 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0117 #include "MagneticField/Engine/interface/MagneticField.h"
0118 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h"
0119
0120 #define DEBUG 0
0121
0122 using namespace std;
0123 using namespace edm;
0124
0125 const int kBPIX = PixelSubdetector::PixelBarrel;
0126 const int kFPIX = PixelSubdetector::PixelEndcap;
0127 constexpr float cmToUm = 10000.;
0128
0129
0130
0131
0132
0133
0134 namespace running {
0135 struct Estimators {
0136 int rDirection;
0137 int zDirection;
0138 int rOrZDirection;
0139 int hitCount;
0140 float runningMeanOfRes_;
0141 float runningVarOfRes_;
0142 float runningNormMeanOfRes_;
0143 float runningNormVarOfRes_;
0144 };
0145
0146 using estimatorMap = std::map<uint32_t, running::Estimators>;
0147
0148 }
0149
0150 class DMRChecker : public edm::one::EDAnalyzer<edm::one::WatchRuns, edm::one::SharedResources> {
0151 public:
0152 DMRChecker(const edm::ParameterSet &pset)
0153 : geomToken_(esConsumes<edm::Transition::BeginRun>()),
0154 runInfoToken_(esConsumes<edm::Transition::BeginRun>()),
0155 magFieldToken_(esConsumes<edm::Transition::BeginRun>()),
0156 topoToken_(esConsumes<edm::Transition::BeginRun>()),
0157 isCosmics_(pset.getParameter<bool>("isCosmics")),
0158 doLatencyAnalysis_(pset.getParameter<bool>("doLatencyAnalysis")) {
0159 usesResource(TFileService::kSharedResource);
0160
0161 if (doLatencyAnalysis_) {
0162 latencyToken_ = esConsumes<edm::Transition::BeginRun>();
0163 } else {
0164 latencyToken_ = edm::ESGetToken<SiStripLatency, SiStripLatencyRcd>();
0165 }
0166
0167 TkTag_ = pset.getParameter<edm::InputTag>("TkTag");
0168 theTrackCollectionToken_ = consumes<reco::TrackCollection>(TkTag_);
0169
0170 TriggerResultsTag_ = pset.getParameter<edm::InputTag>("TriggerResultsTag");
0171 hltresultsToken_ = consumes<edm::TriggerResults>(TriggerResultsTag_);
0172
0173 BeamSpotTag_ = pset.getParameter<edm::InputTag>("BeamSpotTag");
0174 beamspotToken_ = consumes<reco::BeamSpot>(BeamSpotTag_);
0175
0176 VerticesTag_ = pset.getParameter<edm::InputTag>("VerticesTag");
0177 vertexToken_ = consumes<reco::VertexCollection>(VerticesTag_);
0178
0179
0180
0181 pmap = std::make_unique<TrackerMap>("Pixel");
0182 pmap->onlyPixel(true);
0183 pmap->setTitle("Pixel Hit entries");
0184 pmap->setPalette(1);
0185
0186 tmap = std::make_unique<TrackerMap>("Strip");
0187 tmap->setTitle("Strip Hit entries");
0188 tmap->setPalette(1);
0189
0190
0191
0192 pixelmap = std::make_unique<Phase1PixelMaps>("COLZ0 L");
0193 pixelmap->bookBarrelHistograms("DMRsX", "Median Residuals x-direction", "Median Residuals");
0194 pixelmap->bookForwardHistograms("DMRsX", "Median Residuals x-direction", "Median Residuals");
0195
0196 pixelmap->bookBarrelHistograms("DMRsY", "Median Residuals y-direction", "Median Residuals");
0197 pixelmap->bookForwardHistograms("DMRsY", "Median Residuals y-direction", "Median Residuals");
0198
0199
0200 pixelmap->setNoRescale();
0201
0202
0203 fullPixelmapXDMR = std::make_unique<Phase1PixelSummaryMap>("", "DMR-x", "median of residuals [#mum]");
0204 fullPixelmapYDMR = std::make_unique<Phase1PixelSummaryMap>("", "DMR-y", "median of residuals [#mum]");
0205 }
0206
0207 static void fillDescriptions(edm::ConfigurationDescriptions &);
0208
0209 ~DMRChecker() override = default;
0210
0211
0212
0213
0214
0215
0216 template <class OBJECT_TYPE>
0217 int index(const std::vector<OBJECT_TYPE *> &vec, const std::string &name) {
0218 for (const auto &iter : vec | boost::adaptors::indexed(0)) {
0219 if (iter.value() && iter.value()->GetName() == name) {
0220 return iter.index();
0221 }
0222 }
0223 edm::LogError("Alignment") << "@SUB=DMRChecker::index"
0224 << " could not find " << name;
0225 return -1;
0226 }
0227
0228 template <typename T, typename... Args>
0229 T *book(const Args &...args) const {
0230 T *t = fs->make<T>(args...);
0231 return t;
0232 }
0233
0234 private:
0235
0236 const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> geomToken_;
0237 const edm::ESGetToken<RunInfo, RunInfoRcd> runInfoToken_;
0238 const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> magFieldToken_;
0239 const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> topoToken_;
0240
0241 edm::ESGetToken<SiStripLatency, SiStripLatencyRcd> latencyToken_;
0242
0243 const MagneticField *magneticField_;
0244 const TrackerGeometry *trackerGeometry_;
0245 const TrackerTopology *trackerTopology_;
0246
0247 edm::Service<TFileService> fs;
0248
0249 std::unique_ptr<Phase1PixelMaps> pixelmap;
0250 std::unique_ptr<Phase1PixelSummaryMap> fullPixelmapXDMR;
0251 std::unique_ptr<Phase1PixelSummaryMap> fullPixelmapYDMR;
0252
0253 std::unique_ptr<PixelRegions::PixelRegionContainers> PixelDMRS_x_ByLayer;
0254 std::unique_ptr<PixelRegions::PixelRegionContainers> PixelDMRS_y_ByLayer;
0255
0256 std::unique_ptr<TrackerMap> tmap;
0257 std::unique_ptr<TrackerMap> pmap;
0258
0259 TH1D *hchi2ndof;
0260 TH1D *hNtrk;
0261 TH1D *hNtrkZoom;
0262 TH1I *htrkQuality;
0263 TH1I *htrkAlgo;
0264 TH1D *hNhighPurity;
0265 TH1D *hP;
0266 TH1D *hPPlus;
0267 TH1D *hPMinus;
0268 TH1D *hPt;
0269 TH1D *hMinPt;
0270 TH1D *hPtPlus;
0271 TH1D *hPtMinus;
0272 TH1D *hHit;
0273 TH1D *hHit2D;
0274
0275 TH1D *hBPixResXPrime;
0276 TH1D *hFPixResXPrime;
0277 TH1D *hFPixZPlusResXPrime;
0278 TH1D *hFPixZMinusResXPrime;
0279
0280 TH1D *hBPixResYPrime;
0281 TH1D *hFPixResYPrime;
0282 TH1D *hFPixZPlusResYPrime;
0283 TH1D *hFPixZMinusResYPrime;
0284
0285 TH1D *hBPixResXPull;
0286 TH1D *hFPixResXPull;
0287 TH1D *hFPixZPlusResXPull;
0288 TH1D *hFPixZMinusResXPull;
0289
0290 TH1D *hBPixResYPull;
0291 TH1D *hFPixResYPull;
0292 TH1D *hFPixZPlusResYPull;
0293 TH1D *hFPixZMinusResYPull;
0294
0295 TH1D *hTIBResXPrime;
0296 TH1D *hTOBResXPrime;
0297 TH1D *hTIDResXPrime;
0298 TH1D *hTECResXPrime;
0299
0300 TH1D *hTIBResXPull;
0301 TH1D *hTOBResXPull;
0302 TH1D *hTIDResXPull;
0303 TH1D *hTECResXPull;
0304
0305 TH1D *hHitCountVsXBPix;
0306 TH1D *hHitCountVsXFPix;
0307 TH1D *hHitCountVsYBPix;
0308 TH1D *hHitCountVsYFPix;
0309 TH1D *hHitCountVsZBPix;
0310 TH1D *hHitCountVsZFPix;
0311
0312 TH1D *hHitCountVsThetaBPix;
0313 TH1D *hHitCountVsPhiBPix;
0314
0315 TH1D *hHitCountVsThetaFPix;
0316 TH1D *hHitCountVsPhiFPix;
0317
0318 TH1D *hHitCountVsXFPixPlus;
0319 TH1D *hHitCountVsXFPixMinus;
0320 TH1D *hHitCountVsYFPixPlus;
0321 TH1D *hHitCountVsYFPixMinus;
0322 TH1D *hHitCountVsZFPixPlus;
0323 TH1D *hHitCountVsZFPixMinus;
0324
0325 TH1D *hHitCountVsThetaFPixPlus;
0326 TH1D *hHitCountVsPhiFPixPlus;
0327
0328 TH1D *hHitCountVsThetaFPixMinus;
0329 TH1D *hHitCountVsPhiFPixMinus;
0330
0331 TH1D *hHitPlus;
0332 TH1D *hHitMinus;
0333
0334 TH1D *hPhp;
0335 TH1D *hPthp;
0336 TH1D *hHithp;
0337 TH1D *hEtahp;
0338 TH1D *hPhihp;
0339 TH1D *hchi2ndofhp;
0340 TH1D *hchi2Probhp;
0341
0342 TH1D *hCharge;
0343 TH1D *hQoverP;
0344 TH1D *hQoverPZoom;
0345 TH1D *hEta;
0346 TH1D *hEtaPlus;
0347 TH1D *hEtaMinus;
0348 TH1D *hPhi;
0349 TH1D *hPhiBarrel;
0350 TH1D *hPhiOverlapPlus;
0351 TH1D *hPhiOverlapMinus;
0352 TH1D *hPhiEndcapPlus;
0353 TH1D *hPhiEndcapMinus;
0354 TH1D *hPhiPlus;
0355 TH1D *hPhiMinus;
0356
0357 TH1D *hDeltaPhi;
0358 TH1D *hDeltaEta;
0359 TH1D *hDeltaR;
0360
0361 TH1D *hvx;
0362 TH1D *hvy;
0363 TH1D *hvz;
0364 TH1D *hd0;
0365 TH1D *hdz;
0366 TH1D *hdxy;
0367
0368 TH2D *hd0PVvsphi;
0369 TH2D *hd0PVvseta;
0370 TH2D *hd0PVvspt;
0371
0372 TH2D *hd0vsphi;
0373 TH2D *hd0vseta;
0374 TH2D *hd0vspt;
0375
0376 TH1D *hnhpxb;
0377 TH1D *hnhpxe;
0378 TH1D *hnhTIB;
0379 TH1D *hnhTID;
0380 TH1D *hnhTOB;
0381 TH1D *hnhTEC;
0382
0383 TH1D *hHitComposition;
0384
0385 TProfile *pNBpixHitsVsVx;
0386 TProfile *pNBpixHitsVsVy;
0387 TProfile *pNBpixHitsVsVz;
0388
0389 TH1D *hMultCand;
0390
0391 TH1D *hdxyBS;
0392 TH1D *hd0BS;
0393 TH1D *hdzBS;
0394 TH1D *hdxyPV;
0395 TH1D *hd0PV;
0396 TH1D *hdzPV;
0397 TH1D *hrun;
0398 TH1D *hlumi;
0399
0400 std::vector<TH1 *> vTrackHistos_;
0401 std::vector<TH1 *> vTrackProfiles_;
0402 std::vector<TH1 *> vTrack2DHistos_;
0403
0404 TH1D *tksByTrigger_;
0405 TH1D *evtsByTrigger_;
0406
0407 TH1D *modeByRun_;
0408 TH1D *fieldByRun_;
0409
0410 TH1D *tracksByRun_;
0411 TH1D *hitsByRun_;
0412
0413 TH1D *trackRatesByRun_;
0414 TH1D *eventRatesByRun_;
0415
0416 TH1D *hitsinBPixByRun_;
0417 TH1D *hitsinFPixByRun_;
0418
0419
0420
0421 TH1D *DMRBPixX_;
0422 TH1D *DMRBPixY_;
0423
0424 TH1D *DMRFPixX_;
0425 TH1D *DMRFPixY_;
0426
0427 TH1D *DRnRBPixX_;
0428 TH1D *DRnRBPixY_;
0429
0430 TH1D *DRnRFPixX_;
0431 TH1D *DRnRFPixY_;
0432
0433
0434
0435 TH1D *DMRTIB_;
0436 TH1D *DMRTOB_;
0437
0438 TH1D *DMRTID_;
0439 TH1D *DMRTEC_;
0440
0441 TH1D *DRnRTIB_;
0442 TH1D *DRnRTOB_;
0443
0444 TH1D *DRnRTID_;
0445 TH1D *DRnRTEC_;
0446
0447
0448
0449 std::array<TH1D *, 2> DMRBPixXSplit_;
0450 std::array<TH1D *, 2> DMRBPixYSplit_;
0451
0452 std::array<TH1D *, 2> DMRFPixXSplit_;
0453 std::array<TH1D *, 2> DMRFPixYSplit_;
0454
0455 std::array<TH1D *, 2> DMRTIBSplit_;
0456 std::array<TH1D *, 2> DMRTOBSplit_;
0457
0458
0459
0460 std::map<unsigned int, TH1D *> barrelLayersResidualsX;
0461 std::map<unsigned int, TH1D *> barrelLayersPullsX;
0462 std::map<unsigned int, TH1D *> barrelLayersResidualsY;
0463 std::map<unsigned int, TH1D *> barrelLayersPullsY;
0464
0465 std::map<unsigned int, TH1D *> endcapDisksResidualsX;
0466 std::map<unsigned int, TH1D *> endcapDisksPullsX;
0467 std::map<unsigned int, TH1D *> endcapDisksResidualsY;
0468 std::map<unsigned int, TH1D *> endcapDisksPullsY;
0469
0470 int ievt;
0471 int itrks;
0472 int mode;
0473
0474 SiPixelPI::phase phase_;
0475 float etaMax_;
0476
0477 const bool isCosmics_;
0478 const bool doLatencyAnalysis_;
0479
0480 edm::InputTag TkTag_;
0481 edm::InputTag TriggerResultsTag_;
0482 edm::InputTag BeamSpotTag_;
0483 edm::InputTag VerticesTag_;
0484
0485 edm::EDGetTokenT<reco::TrackCollection> theTrackCollectionToken_;
0486 edm::EDGetTokenT<edm::TriggerResults> hltresultsToken_;
0487 edm::EDGetTokenT<reco::BeamSpot> beamspotToken_;
0488 edm::EDGetTokenT<reco::VertexCollection> vertexToken_;
0489
0490 std::map<std::string, std::pair<int, int> > triggerMap_;
0491 std::map<int, std::pair<int, float> > conditionsMap_;
0492 std::map<int, std::pair<int, int> > runInfoMap_;
0493 std::map<int, std::array<int, 6> > runHitsMap_;
0494
0495 std::map<int, float> timeMap_;
0496
0497
0498
0499 running::estimatorMap resDetailsBPixX_;
0500 running::estimatorMap resDetailsBPixY_;
0501 running::estimatorMap resDetailsFPixX_;
0502 running::estimatorMap resDetailsFPixY_;
0503
0504
0505
0506 running::estimatorMap resDetailsTIB_;
0507 running::estimatorMap resDetailsTOB_;
0508 running::estimatorMap resDetailsTID_;
0509 running::estimatorMap resDetailsTEC_;
0510
0511 void analyze(const edm::Event &event, const edm::EventSetup &setup) override {
0512 ievt++;
0513
0514 edm::Handle<reco::TrackCollection> trackCollection = event.getHandle(theTrackCollectionToken_);
0515
0516 GlobalPoint zeroPoint(0, 0, 0);
0517 if (DEBUG)
0518 edm::LogVerbatim("DMRChecker") << "event #" << ievt << " Event ID = " << event.id()
0519 << " magnetic field: " << magneticField_->inTesla(zeroPoint) << std::endl;
0520
0521 const reco::TrackCollection tC = *(trackCollection.product());
0522 itrks += tC.size();
0523
0524 runInfoMap_[event.run()].first += 1;
0525 runInfoMap_[event.run()].second += tC.size();
0526
0527 if (DEBUG)
0528 edm::LogVerbatim("DMRChecker") << "Reconstructed " << tC.size() << " tracks" << std::endl;
0529
0530 edm::Handle<edm::TriggerResults> hltresults = event.getHandle(hltresultsToken_);
0531 if (hltresults.isValid()) {
0532 const edm::TriggerNames &triggerNames_ = event.triggerNames(*hltresults);
0533 int ntrigs = hltresults->size();
0534
0535 for (int itrig = 0; itrig != ntrigs; ++itrig) {
0536 const string &trigName = triggerNames_.triggerName(itrig);
0537 bool accept = hltresults->accept(itrig);
0538 if (accept == 1) {
0539 if (DEBUG)
0540 edm::LogVerbatim("DMRChecker") << trigName << " " << accept << " ,track size: " << tC.size() << endl;
0541 triggerMap_[trigName].first += 1;
0542 triggerMap_[trigName].second += tC.size();
0543 }
0544 }
0545 }
0546
0547 hrun->Fill(event.run());
0548 hlumi->Fill(event.luminosityBlock());
0549
0550 int nHighPurityTracks = 0;
0551
0552 for (const auto &track : tC) {
0553 auto const &residuals = track.extra()->residuals();
0554
0555 unsigned int nHit2D = 0;
0556 int h_index = 0;
0557 for (trackingRecHit_iterator iHit = track.recHitsBegin(); iHit != track.recHitsEnd(); ++iHit, ++h_index) {
0558 if (this->isHit2D(**iHit))
0559 ++nHit2D;
0560
0561 double resX = residuals.residualX(h_index);
0562 double resY = residuals.residualY(h_index);
0563 double pullX = residuals.pullX(h_index);
0564 double pullY = residuals.pullY(h_index);
0565
0566 const DetId &detId = (*iHit)->geographicalId();
0567
0568 unsigned int subid = detId.subdetId();
0569 uint32_t detid_db = detId.rawId();
0570
0571 const GeomDet *geomDet(trackerGeometry_->idToDet(detId));
0572
0573 float uOrientation(-999.F), vOrientation(-999.F);
0574 LocalPoint lPModule(0., 0., 0.), lUDirection(1., 0., 0.), lVDirection(0., 1., 0.), lWDirection(0., 0., 1.);
0575
0576
0577 GlobalPoint gUDirection = geomDet->surface().toGlobal(lUDirection);
0578 GlobalPoint gVDirection = geomDet->surface().toGlobal(lVDirection);
0579 GlobalPoint gWDirection = geomDet->surface().toGlobal(lWDirection);
0580 GlobalPoint gPModule = geomDet->surface().toGlobal(lPModule);
0581
0582 if (!(*iHit)->detUnit())
0583 continue;
0584
0585 if ((*iHit)->isValid() && (subid > PixelSubdetector::PixelEndcap)) {
0586 if (phase_ != SiPixelPI::phase::two)
0587 tmap->fill(detid_db, 1);
0588
0589
0590
0591
0592
0593 if (subid == StripSubdetector::TIB) {
0594 uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
0595
0596
0597
0598 if (resDetailsTIB_.find(detid_db) == resDetailsTIB_.end()) {
0599 resDetailsTIB_[detid_db].rDirection = gWDirection.perp() - gPModule.perp() >= 0 ? +1 : -1;
0600 resDetailsTIB_[detid_db].zDirection = gVDirection.z() - gPModule.z() >= 0 ? +1 : -1;
0601 resDetailsTIB_[detid_db].rOrZDirection = resDetailsTIB_[detid_db].rDirection;
0602 }
0603
0604 hTIBResXPrime->Fill(uOrientation * resX * cmToUm);
0605 hTIBResXPull->Fill(pullX);
0606
0607
0608 this->updateOnlineMomenta(resDetailsTIB_, detid_db, uOrientation * resX * cmToUm, pullX);
0609
0610 } else if (subid == StripSubdetector::TOB) {
0611 uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
0612
0613
0614 hTOBResXPrime->Fill(uOrientation * resX * cmToUm);
0615 hTOBResXPull->Fill(pullX);
0616
0617
0618 if (resDetailsTOB_.find(detid_db) == resDetailsTOB_.end()) {
0619 resDetailsTOB_[detid_db].rDirection = gWDirection.perp() - gPModule.perp() >= 0 ? +1 : -1;
0620 resDetailsTOB_[detid_db].zDirection = gVDirection.z() - gPModule.z() >= 0 ? +1 : -1;
0621 resDetailsTOB_[detid_db].rOrZDirection = resDetailsTOB_[detid_db].rDirection;
0622 }
0623
0624
0625 this->updateOnlineMomenta(resDetailsTOB_, detid_db, uOrientation * resX * cmToUm, pullX);
0626
0627 } else if (subid == StripSubdetector::TID) {
0628 uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
0629
0630
0631 hTIDResXPrime->Fill(uOrientation * resX * cmToUm);
0632 hTIDResXPull->Fill(pullX);
0633
0634
0635 this->updateOnlineMomenta(resDetailsTID_, detid_db, uOrientation * resX * cmToUm, pullX);
0636
0637 } else if (subid == StripSubdetector::TEC) {
0638 uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
0639
0640
0641 hTECResXPrime->Fill(uOrientation * resX * cmToUm);
0642 hTECResXPull->Fill(pullX);
0643
0644
0645 this->updateOnlineMomenta(resDetailsTEC_, detid_db, uOrientation * resX * cmToUm, pullX);
0646 }
0647 }
0648
0649 const SiPixelRecHit *pixhit = dynamic_cast<const SiPixelRecHit *>(*iHit);
0650
0651 if (pixhit) {
0652 if (pixhit->isValid()) {
0653 if (phase_ == SiPixelPI::phase::zero) {
0654 pmap->fill(detid_db, 1);
0655 }
0656
0657 LocalPoint lp = (*iHit)->localPosition();
0658
0659 GlobalPoint GP = geomDet->surface().toGlobal(lp);
0660
0661 if ((subid == PixelSubdetector::PixelBarrel) || (subid == PixelSubdetector::PixelEndcap)) {
0662
0663 if (subid == PixelSubdetector::PixelBarrel) {
0664 int layer_num = trackerTopology_->pxbLayer(detid_db);
0665
0666 uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
0667 vOrientation = gVDirection.z() - gPModule.z() >= 0 ? +1.F : -1.F;
0668
0669
0670 if (resDetailsBPixX_.find(detid_db) == resDetailsBPixX_.end()) {
0671 resDetailsBPixX_[detid_db].rDirection = gWDirection.perp() - gPModule.perp() >= 0 ? +1 : -1;
0672 resDetailsBPixX_[detid_db].zDirection = gVDirection.z() - gPModule.z() >= 0 ? +1 : -1;
0673 resDetailsBPixX_[detid_db].rOrZDirection =
0674 resDetailsBPixX_[detid_db].rDirection;
0675 }
0676
0677
0678 if (resDetailsBPixY_.find(detid_db) == resDetailsBPixY_.end()) {
0679 resDetailsBPixY_[detid_db].rDirection = gWDirection.perp() - gPModule.perp() >= 0 ? +1 : -1;
0680 resDetailsBPixY_[detid_db].zDirection = gVDirection.z() - gPModule.z() >= 0 ? +1 : -1;
0681 resDetailsBPixY_[detid_db].rOrZDirection =
0682 resDetailsBPixY_[detid_db].rDirection;
0683 }
0684
0685 hHitCountVsThetaBPix->Fill(GP.theta());
0686 hHitCountVsPhiBPix->Fill(GP.phi());
0687
0688 hHitCountVsZBPix->Fill(GP.z());
0689 hHitCountVsXBPix->Fill(GP.x());
0690 hHitCountVsYBPix->Fill(GP.y());
0691
0692 hBPixResXPrime->Fill(uOrientation * resX * cmToUm);
0693 hBPixResYPrime->Fill(vOrientation * resY * cmToUm);
0694 hBPixResXPull->Fill(pullX);
0695 hBPixResYPull->Fill(pullY);
0696
0697 if (DEBUG)
0698 edm::LogVerbatim("DMRChecker") << "layer: " << layer_num << std::endl;
0699
0700
0701 this->updateOnlineMomenta(resDetailsBPixX_, detid_db, uOrientation * resX * cmToUm, pullX);
0702
0703
0704 this->updateOnlineMomenta(resDetailsBPixY_, detid_db, vOrientation * resY * cmToUm, pullY);
0705
0706 fillByIndex(barrelLayersResidualsX, layer_num, uOrientation * resX * cmToUm);
0707 fillByIndex(barrelLayersPullsX, layer_num, pullX);
0708 fillByIndex(barrelLayersResidualsY, layer_num, vOrientation * resY * cmToUm);
0709 fillByIndex(barrelLayersPullsY, layer_num, pullY);
0710
0711 } else if (subid == PixelSubdetector::PixelEndcap) {
0712 uOrientation = gUDirection.perp() - gPModule.perp() >= 0 ? +1.F : -1.F;
0713 vOrientation = deltaPhi(gVDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
0714
0715 int side_num = trackerTopology_->pxfSide(detid_db);
0716 int disk_num = trackerTopology_->pxfDisk(detid_db);
0717
0718 int packedTopo = disk_num + 3 * (side_num - 1);
0719
0720 if (DEBUG)
0721 edm::LogVerbatim("DMRChecker") << "side: " << side_num << " disk: " << disk_num
0722 << " packedTopo: " << packedTopo << " GP.z(): " << GP.z() << std::endl;
0723
0724 hHitCountVsThetaFPix->Fill(GP.theta());
0725 hHitCountVsPhiFPix->Fill(GP.phi());
0726
0727 hHitCountVsZFPix->Fill(GP.z());
0728 hHitCountVsXFPix->Fill(GP.x());
0729 hHitCountVsYFPix->Fill(GP.y());
0730
0731 hFPixResXPrime->Fill(uOrientation * resX * cmToUm);
0732 hFPixResYPrime->Fill(vOrientation * resY * cmToUm);
0733 hFPixResXPull->Fill(pullX);
0734 hFPixResYPull->Fill(pullY);
0735
0736 fillByIndex(endcapDisksResidualsX, packedTopo, uOrientation * resX * cmToUm);
0737 fillByIndex(endcapDisksPullsX, packedTopo, pullX);
0738 fillByIndex(endcapDisksResidualsY, packedTopo, vOrientation * resY * cmToUm);
0739 fillByIndex(endcapDisksPullsY, packedTopo, pullY);
0740
0741
0742 if (resDetailsFPixX_.find(detid_db) == resDetailsFPixX_.end()) {
0743 resDetailsFPixX_[detid_db].rDirection = gUDirection.perp() - gPModule.perp() >= 0 ? +1 : -1;
0744 resDetailsFPixX_[detid_db].zDirection = gWDirection.z() - gPModule.z() >= 0 ? +1 : -1;
0745 resDetailsFPixX_[detid_db].rOrZDirection =
0746 resDetailsFPixX_[detid_db].zDirection;
0747 }
0748
0749
0750 if (resDetailsFPixY_.find(detid_db) == resDetailsFPixY_.end()) {
0751 resDetailsFPixY_[detid_db].rDirection = gUDirection.perp() - gPModule.perp() >= 0 ? +1 : -1;
0752 resDetailsFPixY_[detid_db].zDirection = gWDirection.z() - gPModule.z() >= 0 ? +1 : -1;
0753 resDetailsFPixY_[detid_db].rOrZDirection =
0754 resDetailsFPixY_[detid_db].zDirection;
0755 }
0756
0757
0758 this->updateOnlineMomenta(resDetailsFPixX_, detid_db, uOrientation * resX * cmToUm, pullX);
0759
0760
0761 this->updateOnlineMomenta(resDetailsFPixY_, detid_db, vOrientation * resY * cmToUm, pullY);
0762
0763 if (side_num == 1) {
0764 hHitCountVsXFPixMinus->Fill(GP.x());
0765 hHitCountVsYFPixMinus->Fill(GP.y());
0766 hHitCountVsZFPixMinus->Fill(GP.z());
0767 hHitCountVsThetaFPixMinus->Fill(GP.theta());
0768 hHitCountVsPhiFPixMinus->Fill(GP.phi());
0769
0770 hFPixZMinusResXPrime->Fill(uOrientation * resX * cmToUm);
0771 hFPixZMinusResYPrime->Fill(vOrientation * resY * cmToUm);
0772 hFPixZMinusResXPull->Fill(pullX);
0773 hFPixZMinusResYPull->Fill(pullY);
0774
0775 } else {
0776 hHitCountVsXFPixPlus->Fill(GP.x());
0777 hHitCountVsYFPixPlus->Fill(GP.y());
0778 hHitCountVsZFPixPlus->Fill(GP.z());
0779 hHitCountVsThetaFPixPlus->Fill(GP.theta());
0780 hHitCountVsPhiFPixPlus->Fill(GP.phi());
0781
0782 hFPixZPlusResXPrime->Fill(uOrientation * resX * cmToUm);
0783 hFPixZPlusResYPrime->Fill(vOrientation * resY * cmToUm);
0784 hFPixZPlusResXPull->Fill(pullX);
0785 hFPixZPlusResYPull->Fill(pullY);
0786 }
0787 }
0788 }
0789 }
0790 }
0791 }
0792
0793 hHit2D->Fill(nHit2D);
0794 hHit->Fill(track.numberOfValidHits());
0795 hnhpxb->Fill(track.hitPattern().numberOfValidPixelBarrelHits());
0796 hnhpxe->Fill(track.hitPattern().numberOfValidPixelEndcapHits());
0797 hnhTIB->Fill(track.hitPattern().numberOfValidStripTIBHits());
0798 hnhTID->Fill(track.hitPattern().numberOfValidStripTIDHits());
0799 hnhTOB->Fill(track.hitPattern().numberOfValidStripTOBHits());
0800 hnhTEC->Fill(track.hitPattern().numberOfValidStripTECHits());
0801
0802 runHitsMap_[event.run()][0] += track.hitPattern().numberOfValidPixelBarrelHits();
0803 runHitsMap_[event.run()][1] += track.hitPattern().numberOfValidPixelEndcapHits();
0804 runHitsMap_[event.run()][2] += track.hitPattern().numberOfValidStripTIBHits();
0805 runHitsMap_[event.run()][3] += track.hitPattern().numberOfValidStripTIDHits();
0806 runHitsMap_[event.run()][4] += track.hitPattern().numberOfValidStripTOBHits();
0807 runHitsMap_[event.run()][5] += track.hitPattern().numberOfValidStripTECHits();
0808
0809
0810 if (track.hitPattern().numberOfValidPixelBarrelHits() != 0) {
0811 hHitComposition->Fill(0., track.hitPattern().numberOfValidPixelBarrelHits());
0812
0813 pNBpixHitsVsVx->Fill(track.vx(), track.hitPattern().numberOfValidPixelBarrelHits());
0814 pNBpixHitsVsVy->Fill(track.vy(), track.hitPattern().numberOfValidPixelBarrelHits());
0815 pNBpixHitsVsVz->Fill(track.vz(), track.hitPattern().numberOfValidPixelBarrelHits());
0816 }
0817 if (track.hitPattern().numberOfValidPixelEndcapHits() != 0) {
0818 hHitComposition->Fill(1., track.hitPattern().numberOfValidPixelEndcapHits());
0819 }
0820 if (track.hitPattern().numberOfValidStripTIBHits() != 0) {
0821 hHitComposition->Fill(2., track.hitPattern().numberOfValidStripTIBHits());
0822 }
0823 if (track.hitPattern().numberOfValidStripTIDHits() != 0) {
0824 hHitComposition->Fill(3., track.hitPattern().numberOfValidStripTIDHits());
0825 }
0826 if (track.hitPattern().numberOfValidStripTOBHits() != 0) {
0827 hHitComposition->Fill(4., track.hitPattern().numberOfValidStripTOBHits());
0828 }
0829 if (track.hitPattern().numberOfValidStripTECHits() != 0) {
0830 hHitComposition->Fill(5., track.hitPattern().numberOfValidStripTECHits());
0831 }
0832
0833 hCharge->Fill(track.charge());
0834 hQoverP->Fill(track.qoverp());
0835 hQoverPZoom->Fill(track.qoverp());
0836 hPt->Fill(track.pt());
0837 hP->Fill(track.p());
0838 hchi2ndof->Fill(track.normalizedChi2());
0839 hEta->Fill(track.eta());
0840 hPhi->Fill(track.phi());
0841
0842 if (fabs(track.eta()) < 0.8)
0843 hPhiBarrel->Fill(track.phi());
0844 if (track.eta() > 0.8 && track.eta() < 1.4)
0845 hPhiOverlapPlus->Fill(track.phi());
0846 if (track.eta() < -0.8 && track.eta() > -1.4)
0847 hPhiOverlapMinus->Fill(track.phi());
0848 if (track.eta() > 1.4)
0849 hPhiEndcapPlus->Fill(track.phi());
0850 if (track.eta() < -1.4)
0851 hPhiEndcapMinus->Fill(track.phi());
0852
0853 hd0->Fill(track.d0());
0854 hdz->Fill(track.dz());
0855 hdxy->Fill(track.dxy());
0856 hvx->Fill(track.vx());
0857 hvy->Fill(track.vy());
0858 hvz->Fill(track.vz());
0859
0860 htrkAlgo->Fill(track.algo());
0861
0862 int myquality = -99;
0863 if (track.quality(reco::TrackBase::undefQuality)) {
0864 myquality = -1;
0865 htrkQuality->Fill(myquality);
0866 }
0867 if (track.quality(reco::TrackBase::loose)) {
0868 myquality = 0;
0869 htrkQuality->Fill(myquality);
0870 }
0871 if (track.quality(reco::TrackBase::tight)) {
0872 myquality = 1;
0873 htrkQuality->Fill(myquality);
0874 }
0875 if (track.quality(reco::TrackBase::highPurity) && (!isCosmics_)) {
0876 myquality = 2;
0877 htrkQuality->Fill(myquality);
0878 hPhp->Fill(track.p());
0879 hPthp->Fill(track.pt());
0880 hHithp->Fill(track.numberOfValidHits());
0881 hEtahp->Fill(track.eta());
0882 hPhihp->Fill(track.phi());
0883 hchi2ndofhp->Fill(track.normalizedChi2());
0884 hchi2Probhp->Fill(TMath::Prob(track.chi2(), track.ndof()));
0885 nHighPurityTracks++;
0886 }
0887 if (track.quality(reco::TrackBase::confirmed)) {
0888 myquality = 3;
0889 htrkQuality->Fill(myquality);
0890 }
0891 if (track.quality(reco::TrackBase::goodIterative)) {
0892 myquality = 4;
0893 htrkQuality->Fill(myquality);
0894 }
0895
0896
0897 static const int etaindex = this->index(vTrackHistos_, "h_tracketa");
0898 vTrackHistos_[etaindex]->Fill(track.eta());
0899 static const int phiindex = this->index(vTrackHistos_, "h_trackphi");
0900 vTrackHistos_[phiindex]->Fill(track.phi());
0901 static const int numOfValidHitsindex = this->index(vTrackHistos_, "h_trackNumberOfValidHits");
0902 vTrackHistos_[numOfValidHitsindex]->Fill(track.numberOfValidHits());
0903 static const int numOfLostHitsindex = this->index(vTrackHistos_, "h_trackNumberOfLostHits");
0904 vTrackHistos_[numOfLostHitsindex]->Fill(track.numberOfLostHits());
0905
0906 GlobalPoint gPoint(track.vx(), track.vy(), track.vz());
0907 double theLocalMagFieldInInverseGeV = magneticField_->inInverseGeV(gPoint).z();
0908 double kappa = -track.charge() * theLocalMagFieldInInverseGeV / track.pt();
0909
0910 static const int kappaindex = this->index(vTrackHistos_, "h_curvature");
0911 vTrackHistos_[kappaindex]->Fill(kappa);
0912 static const int kappaposindex = this->index(vTrackHistos_, "h_curvature_pos");
0913 if (track.charge() > 0)
0914 vTrackHistos_[kappaposindex]->Fill(fabs(kappa));
0915 static const int kappanegindex = this->index(vTrackHistos_, "h_curvature_neg");
0916 if (track.charge() < 0)
0917 vTrackHistos_[kappanegindex]->Fill(fabs(kappa));
0918
0919 double chi2Prob = TMath::Prob(track.chi2(), track.ndof());
0920 double normchi2 = track.normalizedChi2();
0921
0922 static const int normchi2index = this->index(vTrackHistos_, "h_normchi2");
0923 vTrackHistos_[normchi2index]->Fill(normchi2);
0924 static const int chi2index = this->index(vTrackHistos_, "h_chi2");
0925 vTrackHistos_[chi2index]->Fill(track.chi2());
0926 static const int chi2Probindex = this->index(vTrackHistos_, "h_chi2Prob");
0927 vTrackHistos_[chi2Probindex]->Fill(chi2Prob);
0928 static const int ptindex = this->index(vTrackHistos_, "h_pt");
0929 static const int pt2index = this->index(vTrackHistos_, "h_ptrebin");
0930 vTrackHistos_[ptindex]->Fill(track.pt());
0931 vTrackHistos_[pt2index]->Fill(track.pt());
0932 if (track.ptError() != 0.) {
0933 static const int ptResolutionindex = this->index(vTrackHistos_, "h_ptResolution");
0934 vTrackHistos_[ptResolutionindex]->Fill(track.ptError() / track.pt());
0935 }
0936
0937 static const int d0phiindex = this->index(vTrackProfiles_, "p_d0_vs_phi");
0938 vTrackProfiles_[d0phiindex]->Fill(track.phi(), track.d0());
0939 static const int dzphiindex = this->index(vTrackProfiles_, "p_dz_vs_phi");
0940 vTrackProfiles_[dzphiindex]->Fill(track.phi(), track.dz());
0941 static const int d0etaindex = this->index(vTrackProfiles_, "p_d0_vs_eta");
0942 vTrackProfiles_[d0etaindex]->Fill(track.eta(), track.d0());
0943 static const int dzetaindex = this->index(vTrackProfiles_, "p_dz_vs_eta");
0944 vTrackProfiles_[dzetaindex]->Fill(track.eta(), track.dz());
0945 static const int chiProbphiindex = this->index(vTrackProfiles_, "p_chi2Prob_vs_phi");
0946 vTrackProfiles_[chiProbphiindex]->Fill(track.phi(), chi2Prob);
0947 static const int chiProbabsd0index = this->index(vTrackProfiles_, "p_chi2Prob_vs_d0");
0948 vTrackProfiles_[chiProbabsd0index]->Fill(fabs(track.d0()), chi2Prob);
0949 static const int chiProbabsdzindex = this->index(vTrackProfiles_, "p_chi2Prob_vs_dz");
0950 vTrackProfiles_[chiProbabsdzindex]->Fill(track.dz(), chi2Prob);
0951 static const int chiphiindex = this->index(vTrackProfiles_, "p_chi2_vs_phi");
0952 vTrackProfiles_[chiphiindex]->Fill(track.phi(), track.chi2());
0953 static const int normchiphiindex = this->index(vTrackProfiles_, "p_normchi2_vs_phi");
0954 vTrackProfiles_[normchiphiindex]->Fill(track.phi(), normchi2);
0955 static const int chietaindex = this->index(vTrackProfiles_, "p_chi2_vs_eta");
0956 vTrackProfiles_[chietaindex]->Fill(track.eta(), track.chi2());
0957 static const int normchiptindex = this->index(vTrackProfiles_, "p_normchi2_vs_pt");
0958 vTrackProfiles_[normchiptindex]->Fill(track.pt(), normchi2);
0959 static const int normchipindex = this->index(vTrackProfiles_, "p_normchi2_vs_p");
0960 vTrackProfiles_[normchipindex]->Fill(track.p(), normchi2);
0961 static const int chiProbetaindex = this->index(vTrackProfiles_, "p_chi2Prob_vs_eta");
0962 vTrackProfiles_[chiProbetaindex]->Fill(track.eta(), chi2Prob);
0963 static const int normchietaindex = this->index(vTrackProfiles_, "p_normchi2_vs_eta");
0964 vTrackProfiles_[normchietaindex]->Fill(track.eta(), normchi2);
0965 static const int kappaphiindex = this->index(vTrackProfiles_, "p_kappa_vs_phi");
0966 vTrackProfiles_[kappaphiindex]->Fill(track.phi(), kappa);
0967 static const int kappaetaindex = this->index(vTrackProfiles_, "p_kappa_vs_eta");
0968 vTrackProfiles_[kappaetaindex]->Fill(track.eta(), kappa);
0969 static const int ptResphiindex = this->index(vTrackProfiles_, "p_ptResolution_vs_phi");
0970 vTrackProfiles_[ptResphiindex]->Fill(track.phi(), track.ptError() / track.pt());
0971 static const int ptResetaindex = this->index(vTrackProfiles_, "p_ptResolution_vs_eta");
0972 vTrackProfiles_[ptResetaindex]->Fill(track.eta(), track.ptError() / track.pt());
0973
0974
0975 static const int etaphiindex_2d = this->index(vTrack2DHistos_, "h2_phi_vs_eta");
0976 vTrack2DHistos_[etaphiindex_2d]->Fill(track.eta(), track.phi());
0977 static const int d0phiindex_2d = this->index(vTrack2DHistos_, "h2_d0_vs_phi");
0978 vTrack2DHistos_[d0phiindex_2d]->Fill(track.phi(), track.d0());
0979 static const int dzphiindex_2d = this->index(vTrack2DHistos_, "h2_dz_vs_phi");
0980 vTrack2DHistos_[dzphiindex_2d]->Fill(track.phi(), track.dz());
0981 static const int d0etaindex_2d = this->index(vTrack2DHistos_, "h2_d0_vs_eta");
0982 vTrack2DHistos_[d0etaindex_2d]->Fill(track.eta(), track.d0());
0983 static const int dzetaindex_2d = this->index(vTrack2DHistos_, "h2_dz_vs_eta");
0984 vTrack2DHistos_[dzetaindex_2d]->Fill(track.eta(), track.dz());
0985 static const int chiphiindex_2d = this->index(vTrack2DHistos_, "h2_chi2_vs_phi");
0986 vTrack2DHistos_[chiphiindex_2d]->Fill(track.phi(), track.chi2());
0987 static const int chiProbphiindex_2d = this->index(vTrack2DHistos_, "h2_chi2Prob_vs_phi");
0988 vTrack2DHistos_[chiProbphiindex_2d]->Fill(track.phi(), chi2Prob);
0989 static const int chiProbabsd0index_2d = this->index(vTrack2DHistos_, "h2_chi2Prob_vs_d0");
0990 vTrack2DHistos_[chiProbabsd0index_2d]->Fill(fabs(track.d0()), chi2Prob);
0991 static const int normchiphiindex_2d = this->index(vTrack2DHistos_, "h2_normchi2_vs_phi");
0992 vTrack2DHistos_[normchiphiindex_2d]->Fill(track.phi(), normchi2);
0993 static const int chietaindex_2d = this->index(vTrack2DHistos_, "h2_chi2_vs_eta");
0994 vTrack2DHistos_[chietaindex_2d]->Fill(track.eta(), track.chi2());
0995 static const int chiProbetaindex_2d = this->index(vTrack2DHistos_, "h2_chi2Prob_vs_eta");
0996 vTrack2DHistos_[chiProbetaindex_2d]->Fill(track.eta(), chi2Prob);
0997 static const int normchietaindex_2d = this->index(vTrack2DHistos_, "h2_normchi2_vs_eta");
0998 vTrack2DHistos_[normchietaindex_2d]->Fill(track.eta(), normchi2);
0999 static const int kappaphiindex_2d = this->index(vTrack2DHistos_, "h2_kappa_vs_phi");
1000 vTrack2DHistos_[kappaphiindex_2d]->Fill(track.phi(), kappa);
1001 static const int kappaetaindex_2d = this->index(vTrack2DHistos_, "h2_kappa_vs_eta");
1002 vTrack2DHistos_[kappaetaindex_2d]->Fill(track.eta(), kappa);
1003 static const int normchi2kappa_2d = this->index(vTrack2DHistos_, "h2_normchi2_vs_kappa");
1004 vTrack2DHistos_[normchi2kappa_2d]->Fill(normchi2, kappa);
1005
1006 if (DEBUG)
1007 edm::LogVerbatim("DMRChecker") << "filling histos" << std::endl;
1008
1009
1010 reco::BeamSpot beamSpot;
1011 edm::Handle<reco::BeamSpot> beamSpotHandle = event.getHandle(beamspotToken_);
1012 if (beamSpotHandle.isValid()) {
1013 beamSpot = *beamSpotHandle;
1014 math::XYZPoint point(beamSpot.x0(), beamSpot.y0(), beamSpot.z0());
1015 double dxy = track.dxy(point);
1016 double dz = track.dz(point);
1017 hdxyBS->Fill(dxy);
1018 hd0BS->Fill(-dxy);
1019 hdzBS->Fill(dz);
1020 }
1021
1022
1023 reco::Vertex pvtx;
1024 edm::Handle<reco::VertexCollection> vertexHandle = event.getHandle(vertexToken_);
1025 double mindxy = 100.;
1026 double dz = 100;
1027 if (vertexHandle.isValid() && !isCosmics_) {
1028 for (reco::VertexCollection::const_iterator pvtx = vertexHandle->begin(); pvtx != vertexHandle->end(); ++pvtx) {
1029 math::XYZPoint mypoint(pvtx->x(), pvtx->y(), pvtx->z());
1030 if (abs(mindxy) > abs(track.dxy(mypoint))) {
1031 mindxy = track.dxy(mypoint);
1032 dz = track.dz(mypoint);
1033 if (DEBUG)
1034 edm::LogVerbatim("DMRChecker") << "dxy: " << mindxy << " dz: " << dz << std::endl;
1035 }
1036 }
1037
1038 hdxyPV->Fill(mindxy);
1039 hd0PV->Fill(-mindxy);
1040 hdzPV->Fill(dz);
1041
1042 hd0PVvsphi->Fill(track.phi(), -mindxy);
1043 hd0PVvseta->Fill(track.eta(), -mindxy);
1044 hd0PVvspt->Fill(track.pt(), -mindxy);
1045
1046 } else {
1047 hdxyPV->Fill(100);
1048 hd0PV->Fill(100);
1049 hdzPV->Fill(100);
1050 }
1051
1052 if (DEBUG)
1053 edm::LogVerbatim("DMRChecker") << "end of track loop" << std::endl;
1054 }
1055
1056 if (DEBUG)
1057 edm::LogVerbatim("DMRChecker") << "end of analysis" << std::endl;
1058
1059 hNtrk->Fill(tC.size());
1060 hNtrkZoom->Fill(tC.size());
1061 hNhighPurity->Fill(nHighPurityTracks);
1062
1063 if (DEBUG)
1064 edm::LogVerbatim("DMRChecker") << "end of analysis" << std::endl;
1065 }
1066
1067
1068 void beginRun(edm::Run const &run, edm::EventSetup const &setup) override
1069
1070 {
1071
1072 runInfoMap_[run.run()].first = 0;
1073 runInfoMap_[run.run()].second = 0;
1074
1075
1076 for (int n : {0, 1, 2, 3, 4, 5}) {
1077 runHitsMap_[run.run()][n] = 0;
1078 }
1079
1080
1081 magneticField_ = &setup.getData(magFieldToken_);
1082 float B_ = magneticField_->inTesla(GlobalPoint(0, 0, 0)).mag();
1083
1084 edm::LogInfo("DMRChecker") << "run number:" << run.run() << " magnetic field: " << B_ << " [T]" << std::endl;
1085
1086 const RunInfo *summary = &setup.getData(runInfoToken_);
1087 time_t start_time = summary->m_start_time_ll;
1088 ctime(&start_time);
1089 time_t end_time = summary->m_stop_time_ll;
1090 ctime(&end_time);
1091
1092 float average_current = summary->m_avg_current;
1093 float uptimeInSeconds = summary->m_run_intervall_micros;
1094 edm::LogVerbatim("DMRChecker") << " start_time: " << start_time << " ( " << summary->m_start_time_str << " )"
1095 << " | end_time: " << end_time << " ( " << summary->m_stop_time_str << " )"
1096 << " | average current: " << average_current
1097 << " | uptime in seconds: " << uptimeInSeconds << std::endl;
1098
1099 double seconds = difftime(end_time, start_time) / 1.0e+6;
1100 edm::LogVerbatim("DMRChecker") << "time difference: " << seconds << " s" << std::endl;
1101 timeMap_[run.run()] = seconds;
1102
1103
1104 trackerGeometry_ = &setup.getData(geomToken_);
1105 if (trackerGeometry_->isThere(GeomDetEnumerators::P2PXB) || trackerGeometry_->isThere(GeomDetEnumerators::P2PXEC)) {
1106 phase_ = SiPixelPI::phase::two;
1107 } else if (trackerGeometry_->isThere(GeomDetEnumerators::P1PXB) ||
1108 trackerGeometry_->isThere(GeomDetEnumerators::P1PXEC)) {
1109 phase_ = SiPixelPI::phase::one;
1110 } else {
1111 phase_ = SiPixelPI::phase::zero;
1112 }
1113
1114 trackerTopology_ = &setup.getData(topoToken_);
1115
1116
1117 if (phase_ == SiPixelPI::phase::two) {
1118 mode = 0;
1119 } else {
1120 if (doLatencyAnalysis_) {
1121
1122 const SiStripLatency *apvlat = &setup.getData(latencyToken_);
1123 if (apvlat->singleReadOutMode() == 1) {
1124 mode = 1;
1125 } else if (apvlat->singleReadOutMode() == 0) {
1126 mode = -1;
1127 }
1128 } else {
1129 mode = 0.;
1130 }
1131 }
1132
1133 conditionsMap_[run.run()].first = mode;
1134 conditionsMap_[run.run()].second = B_;
1135 }
1136
1137
1138 void endRun(edm::Run const &, edm::EventSetup const &) override {}
1139
1140
1141 void beginJob() override {
1142 if (DEBUG)
1143 edm::LogVerbatim("DMRChecker") << __LINE__ << endl;
1144
1145 TH1D::SetDefaultSumw2(kTRUE);
1146
1147 etaMax_ = 3.;
1148
1149
1150 ievt = 0;
1151 itrks = 0;
1152
1153 hrun = book<TH1D>("h_run", "run", 100000, 230000, 240000);
1154 hlumi = book<TH1D>("h_lumi", "lumi", 1000, 0, 1000);
1155
1156
1157
1158 hchi2ndof = book<TH1D>("h_chi2ndof", "chi2/ndf;#chi^{2}/ndf;tracks", 100, 0, 5.);
1159 hCharge = book<TH1D>("h_charge", "charge;Charge of the track;tracks", 5, -2.5, 2.5);
1160 hNtrk = book<TH1D>("h_Ntrk", "ntracks;Number of Tracks;events", 200, 0., 200.);
1161 hNtrkZoom = book<TH1D>("h_NtrkZoom", "Number of tracks; number of tracks;events", 10, 0., 10.);
1162 hNhighPurity = book<TH1D>("h_NhighPurity", "n. high purity tracks;Number of high purity tracks;events", 200, 0., 200.);
1163
1164 int nAlgos = reco::TrackBase::algoSize;
1165 htrkAlgo = book<TH1I>("h_trkAlgo", "tracking step;iterative tracking step;tracks", nAlgos, -0.5, nAlgos - 0.5);
1166 for (int nbin = 1; nbin <= htrkAlgo->GetNbinsX(); nbin++) {
1167 htrkAlgo->GetXaxis()->SetBinLabel(nbin, reco::TrackBase::algoNames[nbin - 1].c_str());
1168 }
1169
1170 htrkQuality = book<TH1I>("h_trkQuality", "track quality;track quality;tracks", 6, -1, 5);
1171 std::string qualities[7] = {"undef", "loose", "tight", "highPurity", "confirmed", "goodIterative"};
1172 for (int nbin = 1; nbin <= htrkQuality->GetNbinsX(); nbin++) {
1173 htrkQuality->GetXaxis()->SetBinLabel(nbin, qualities[nbin - 1].c_str());
1174 }
1175
1176 hP = book<TH1D>("h_P", "Momentum;track momentum [GeV];tracks", 100, 0., 100.);
1177 hQoverP = book<TH1D>("h_qoverp", "Track q/p; track q/p [GeV^{-1}];tracks", 100, -1., 1.);
1178 hQoverPZoom = book<TH1D>("h_qoverpZoom", "Track q/p; track q/p [GeV^{-1}];tracks", 100, -0.1, 0.1);
1179 hPt = book<TH1D>("h_Pt", "Transverse Momentum;track p_{T} [GeV];tracks", 100, 0., 100.);
1180 hHit = book<TH1D>("h_nHits", "Number of hits;track n. hits;tracks", 50, -0.5, 49.5);
1181 hHit2D = book<TH1D>("h_nHit2D", "Number of 2D hits; number of 2D hits;tracks", 20, 0, 20);
1182
1183
1184
1185 hBPixResXPrime = book<TH1D>("h_BPixResXPrime", "BPix track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1186 hFPixResXPrime = book<TH1D>("h_FPixResXPrime", "FPix track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1187 hFPixZPlusResXPrime = book<TH1D>("h_FPixZPlusResXPrime", "FPix (Z+) track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1188 hFPixZMinusResXPrime = book<TH1D>("h_FPixZMinusResXPrime", "FPix (Z-) track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1189
1190 hBPixResYPrime = book<TH1D>("h_BPixResYPrime", "BPix track Y-residuals;res_{Y'} [#mum];hits", 100, -1000., 1000.);
1191 hFPixResYPrime = book<TH1D>("h_FPixResYPrime", "FPix track Y-residuals;res_{Y'} [#mum];hits", 100, -1000., 1000.);
1192 hFPixZPlusResYPrime = book<TH1D>("h_FPixZPlusResYPrime", "FPix (Z+) track Y-residuals;res_{Y'} [#mum];hits", 100, -1000., 1000.);
1193 hFPixZMinusResYPrime = book<TH1D>("h_FPixZMinusResYPrime", "FPix (Z-) track Y-residuals;res_{Y'} [#mum];hits", 100, -1000., 1000.);
1194
1195 hBPixResXPull = book<TH1D>("h_BPixResXPull", "BPix track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1196 hFPixResXPull = book<TH1D>("h_FPixResXPull", "FPix track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1197 hFPixZPlusResXPull = book<TH1D>("h_FPixZPlusResXPull", "FPix (Z+) track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1198 hFPixZMinusResXPull = book<TH1D>("h_FPixZMinusResXPull", "FPix (Z-) track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1199
1200 hBPixResYPull = book<TH1D>("h_BPixResYPull", "BPix track Y-pulls;res_{Y'}/#sigma_{res_{Y'}};hits", 100, -5., 5.);
1201 hFPixResYPull = book<TH1D>("h_FPixResYPull", "FPix track Y-pulls;res_{Y'}/#sigma_{res_{Y'}};hits", 100, -5., 5.);
1202 hFPixZPlusResYPull = book<TH1D>("h_FPixZPlusResYPull", "FPix (Z+) track Y-pulls;res_{Y'}/#sigma_{res_{Y'}};hits", 100, -5., 5.);
1203 hFPixZMinusResYPull = book<TH1D>("h_FPixZMinusResYPull", "FPix (Z-) track Y-pulls;res_{Y'}/#sigma_{res_{Y'}};hits", 100, -5., 5.);
1204
1205
1206
1207 hTIBResXPrime = book<TH1D>("h_TIBResXPrime", "TIB track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1208 hTOBResXPrime = book<TH1D>("h_TOBResXPrime", "TOB track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1209 hTIDResXPrime = book<TH1D>("h_TIDResXPrime", "TID track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1210 hTECResXPrime = book<TH1D>("h_TECResXPrime", "TEC track X-residuals;res_{X'} [#mum];hits", 100, -1000., 1000.);
1211
1212 hTIBResXPull = book<TH1D>("h_TIBResXPull", "TIB track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1213 hTOBResXPull = book<TH1D>("h_TOBResXPull", "TOB track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1214 hTIDResXPull = book<TH1D>("h_TIDResXPull", "TID track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1215 hTECResXPull = book<TH1D>("h_TECResXPull", "TEC track X-pulls;res_{X'}/#sigma_{res_{X'}};hits", 100, -5., 5.);
1216
1217
1218
1219 hHitCountVsZBPix = book<TH1D>("h_HitCountVsZBpix", "Number of BPix hits vs z;hit global z;hits", 60, -30, 30);
1220 hHitCountVsZFPix = book<TH1D>("h_HitCountVsZFpix", "Number of FPix hits vs z;hit global z;hits", 100, -100, 100);
1221
1222 hHitCountVsXBPix = book<TH1D>("h_HitCountVsXBpix", "Number of BPix hits vs x;hit global x;hits", 20, -20, 20);
1223 hHitCountVsXFPix = book<TH1D>("h_HitCountVsXFpix", "Number of FPix hits vs x;hit global x;hits", 20, -20, 20);
1224
1225 hHitCountVsYBPix = book<TH1D>("h_HitCountVsYBpix", "Number of BPix hits vs y;hit global y;hits", 20, -20, 20);
1226 hHitCountVsYFPix = book<TH1D>("h_HitCountVsYFpix", "Number of FPix hits vs y;hit global y;hits", 20, -20, 20);
1227
1228 hHitCountVsThetaBPix = book<TH1D>("h_HitCountVsThetaBpix", "Number of BPix hits vs #theta;hit global #theta;hits", 20, 0., M_PI);
1229 hHitCountVsPhiBPix = book<TH1D>("h_HitCountVsPhiBpix", "Number of BPix hits vs #phi;hit global #phi;hits", 20, -M_PI, M_PI);
1230
1231 hHitCountVsThetaFPix = book<TH1D>("h_HitCountVsThetaFpix", "Number of FPix hits vs #theta;hit global #theta;hits", 40, 0., M_PI);
1232 hHitCountVsPhiFPix = book<TH1D>("h_HitCountVsPhiFpix", "Number of FPix hits vs #phi;hit global #phi;hits", 20, -M_PI, M_PI);
1233
1234
1235
1236 hHitCountVsZFPixPlus = book<TH1D>("h_HitCountVsZFPixPlus", "Number of FPix(Z+) hits vs z;hit global z;hits", 60, 15., 60);
1237 hHitCountVsZFPixMinus = book<TH1D>("h_HitCountVsZFPixMinus", "Number of FPix(Z-) hits vs z;hit global z;hits", 100, -60., -15.);
1238
1239 hHitCountVsXFPixPlus = book<TH1D>("h_HitCountVsXFPixPlus", "Number of FPix(Z+) hits vs x;hit global x;hits", 20, -20, 20);
1240 hHitCountVsXFPixMinus = book<TH1D>("h_HitCountVsXFPixMinus", "Number of FPix(Z-) hits vs x;hit global x;hits", 20, -20, 20);
1241
1242 hHitCountVsYFPixPlus = book<TH1D>("h_HitCountVsYFPixPlus", "Number of FPix(Z+) hits vs y;hit global y;hits", 20, -20, 20);
1243 hHitCountVsYFPixMinus = book<TH1D>("h_HitCountVsYFPixMinus", "Number of FPix(Z-) hits vs y;hit global y;hits", 20, -20, 20);
1244
1245 hHitCountVsThetaFPixPlus = book<TH1D>("h_HitCountVsThetaFPixPlus", "Number of FPix(Z+) hits vs #theta;hit global #theta;hits", 20, 0., M_PI);
1246 hHitCountVsPhiFPixPlus = book<TH1D>("h_HitCountVsPhiFPixPlus","Number of FPix(Z+) hits vs #phi;hit global #phi;hits",20,-M_PI,M_PI);
1247
1248 hHitCountVsThetaFPixMinus = book<TH1D>("h_HitCountVsThetaFPixMinus", "Number of FPix(Z+) hits vs #theta;hit global #theta;hits", 40, 0., M_PI);
1249 hHitCountVsPhiFPixMinus = book<TH1D>("h_HitCountVsPhiFPixMinus","Number of FPix(Z+) hits vs #phi;hit global #phi;hits",20,-M_PI,M_PI);
1250
1251 TFileDirectory ByLayerResiduals = fs->mkdir("ByLayerResiduals");
1252 barrelLayersResidualsX = bookResidualsHistogram(ByLayerResiduals, 4, "X", "Res", "BPix");
1253 endcapDisksResidualsX = bookResidualsHistogram(ByLayerResiduals, 6, "X", "Res", "FPix");
1254 barrelLayersResidualsY = bookResidualsHistogram(ByLayerResiduals, 4, "Y", "Res", "BPix");
1255 endcapDisksResidualsY = bookResidualsHistogram(ByLayerResiduals, 6, "Y", "Res", "FPix");
1256
1257 TFileDirectory ByLayerPulls = fs->mkdir("ByLayerPulls");
1258 barrelLayersPullsX = bookResidualsHistogram(ByLayerPulls, 4, "X", "Pull", "BPix");
1259 endcapDisksPullsX = bookResidualsHistogram(ByLayerPulls, 6, "X", "Pull", "FPix");
1260 barrelLayersPullsY = bookResidualsHistogram(ByLayerPulls, 4, "Y", "Pull", "BPix");
1261 endcapDisksPullsY = bookResidualsHistogram(ByLayerPulls, 6, "Y", "Pull", "FPix");
1262
1263 hEta = book<TH1D>("h_Eta", "Track pseudorapidity; track #eta;tracks", 100, -etaMax_, etaMax_);
1264 hPhi = book<TH1D>("h_Phi", "Track azimuth; track #phi;tracks", 100, -M_PI, M_PI);
1265
1266 hPhiBarrel = book<TH1D>("h_PhiBarrel", "hPhiBarrel (0<|#eta|<0.8);track #Phi;tracks", 100, -M_PI, M_PI);
1267 hPhiOverlapPlus = book<TH1D>("h_PhiOverlapPlus", "hPhiOverlapPlus (0.8<#eta<1.4);track #phi;tracks", 100, -M_PI, M_PI);
1268 hPhiOverlapMinus = book<TH1D>("h_PhiOverlapMinus", "hPhiOverlapMinus (-1.4<#eta<-0.8);track #phi;tracks", 100, -M_PI, M_PI);
1269 hPhiEndcapPlus = book<TH1D>("h_PhiEndcapPlus", "hPhiEndcapPlus (#eta>1.4);track #phi;track", 100, -M_PI, M_PI);
1270 hPhiEndcapMinus = book<TH1D>("h_PhiEndcapMinus", "hPhiEndcapMinus (#eta<1.4);track #phi;tracks", 100, -M_PI, M_PI);
1271
1272 if (!isCosmics_) {
1273 hPhp = book<TH1D>("h_P_hp", "Momentum (high purity);track momentum [GeV];tracks", 100, 0., 100.);
1274 hPthp = book<TH1D>("h_Pt_hp", "Transverse Momentum (high purity);track p_{T} [GeV];tracks", 100, 0., 100.);
1275 hHithp = book<TH1D>("h_nHit_hp", "Number of hits (high purity);track n. hits;tracks", 30, 0, 30);
1276 hEtahp = book<TH1D>("h_Eta_hp", "Track pseudorapidity (high purity); track #eta;tracks", 100, -etaMax_, etaMax_);
1277 hPhihp = book<TH1D>("h_Phi_hp", "Track azimuth (high purity); track #phi;tracks", 100, -M_PI, M_PI);
1278 hchi2ndofhp = book<TH1D>("h_chi2ndof_hp", "chi2/ndf (high purity);#chi^{2}/ndf;tracks", 100, 0, 5.);
1279 hchi2Probhp = book<TH1D>("hchi2_Prob_hp", "#chi^{2} probability (high purity);#chi^{2}prob_{Track};Number of Tracks", 100, 0.0, 1.);
1280
1281 hvx = book<TH1D>("h_vx", "Track v_{x} ; track v_{x} [cm];tracks", 100, -1.5, 1.5);
1282 hvy = book<TH1D>("h_vy", "Track v_{y} ; track v_{y} [cm];tracks", 100, -1.5, 1.5);
1283 hvz = book<TH1D>("h_vz", "Track v_{z} ; track v_{z} [cm];tracks", 100, -20., 20.);
1284 hd0 = book<TH1D>("h_d0", "Track d_{0} ; track d_{0} [cm];tracks", 100, -1., 1.);
1285 hdxy = book<TH1D>("h_dxy", "Track d_{xy}; track d_{xy} [cm]; tracks", 100, -0.5, 0.5);
1286 hdz = book<TH1D>("h_dz", "Track d_{z} ; track d_{z} [cm]; tracks", 100, -20, 20);
1287
1288 hd0PVvsphi = book<TH2D>("h2_d0PVvsphi", "hd0PVvsphi;track #phi;track d_{0}(PV) [cm]", 160, -M_PI, M_PI, 100, -1., 1.);
1289 hd0PVvseta = book<TH2D>("h2_d0PVvseta", "hdPV0vseta;track #eta;track d_{0}(PV) [cm]", 160, -etaMax_, etaMax_, 100, -1., 1.);
1290 hd0PVvspt = book<TH2D>("h2_d0PVvspt", "hdPV0vspt;track p_{T};d_{0}(PV) [cm]", 50, 0., 100., 100, -1, 1.);
1291
1292 hdxyBS = book<TH1D>("h_dxyBS", "hdxyBS; track d_{xy}(BS) [cm];tracks", 100, -0.1, 0.1);
1293 hd0BS = book<TH1D>("h_d0BS", "hd0BS ; track d_{0}(BS) [cm];tracks", 100, -0.1, 0.1);
1294 hdzBS = book<TH1D>("h_dzBS", "hdzBS ; track d_{z}(BS) [cm];tracks", 100, -12, 12);
1295 hdxyPV = book<TH1D>("h_dxyPV", "hdxyPV; track d_{xy}(PV) [cm];tracks", 100, -0.1, 0.1);
1296 hd0PV = book<TH1D>("h_d0PV", "hd0PV ; track d_{0}(PV) [cm];tracks", 100, -0.15, 0.15);
1297 hdzPV = book<TH1D>("h_dzPV", "hdzPV ; track d_{z}(PV) [cm];tracks", 100, -0.1, 0.1);
1298
1299 hnhTIB = book<TH1D>("h_nHitTIB", "nhTIB;# hits in TIB; tracks", 20, 0., 20.);
1300 hnhTID = book<TH1D>("h_nHitTID", "nhTID;# hits in TID; tracks", 20, 0., 20.);
1301 hnhTOB = book<TH1D>("h_nHitTOB", "nhTOB;# hits in TOB; tracks", 20, 0., 20.);
1302 hnhTEC = book<TH1D>("h_nHitTEC", "nhTEC;# hits in TEC; tracks", 20, 0., 20.);
1303
1304 } else {
1305 hvx = book<TH1D>("h_vx", "Track v_{x};track v_{x} [cm];tracks", 100, -100., 100.);
1306 hvy = book<TH1D>("h_vy", "Track v_{y};track v_{y} [cm];tracks", 100, -100., 100.);
1307 hvz = book<TH1D>("h_vz", "Track v_{z};track v_{z} [cm];track", 100, -100., 100.);
1308 hd0 = book<TH1D>("h_d0", "Track d_{0};track d_{0} [cm];track", 100, -100., 100.);
1309 hdxy = book<TH1D>("h_dxy", "Track d_{xy};track d_{xy} [cm];tracks", 100, -100, 100);
1310 hdz = book<TH1D>("h_dz", "Track d_{z};track d_{z} [cm];tracks", 100, -200, 200);
1311
1312 hd0vsphi = book<TH2D>("h2_d0vsphi", "Track d_{0} vs #phi; track #phi;track d_{0} [cm]", 160, -M_PI, M_PI, 100, -100., 100.);
1313 hd0vseta = book<TH2D>("h2_d0vseta", "Track d_{0} vs #eta; track #eta;track d_{0} [cm]", 160, -etaMax_, etaMax_, 100, -100., 100.);
1314 hd0vspt = book<TH2D>("h2_d0vspt", "Track d_{0} vs p_{T};track p_{T};track d_{0} [cm]", 50, 0., 100., 100, -100, 100);
1315
1316 hdxyBS = book<TH1D>("h_dxyBS", "Track d_{xy}(BS);d_{xy}(BS) [cm];tracks", 100, -100., 100.);
1317 hd0BS = book<TH1D>("h_d0BS", "Track d_{0}(BS);d_{0}(BS) [cm];tracks", 100, -100., 100.);
1318 hdzBS = book<TH1D>("h_dzBS", "Track d_{z}(BS);d_{z}(BS) [cm];tracks", 100, -100., 100.);
1319 hdxyPV = book<TH1D>("h_dxyPV", "Track d_{xy}(PV); d_{xy}(PV) [cm];tracks", 100, -100., 100.);
1320 hd0PV = book<TH1D>("h_d0PV", "Track d_{0}(PV); d_{0}(PV) [cm];tracks", 100, -100., 100.);
1321 hdzPV = book<TH1D>("h_dzPV", "Track d_{z}(PV); d_{z}(PV) [cm];tracks", 100, -100., 100.);
1322
1323 hnhTIB = book<TH1D>("h_nHitTIB", "nhTIB;# hits in TIB; tracks", 30, 0., 30.);
1324 hnhTID = book<TH1D>("h_nHitTID", "nhTID;# hits in TID; tracks", 30, 0., 30.);
1325 hnhTOB = book<TH1D>("h_nHitTOB", "nhTOB;# hits in TOB; tracks", 30, 0., 30.);
1326 hnhTEC = book<TH1D>("h_nHitTEC", "nhTEC;# hits in TEC; tracks", 30, 0., 30.);
1327 }
1328
1329 hnhpxb = book<TH1D>("h_nHitPXB", "nhpxb;# hits in Pixel Barrel; tracks", 10, 0., 10.);
1330 hnhpxe = book<TH1D>("h_nHitPXE", "nhpxe;# hits in Pixel Endcap; tracks", 10, 0., 10.);
1331
1332 hHitComposition = book<TH1D>("h_hitcomposition", "track hit composition;;# hits", 6, -0.5, 5.5);
1333 pNBpixHitsVsVx = book<TProfile>("p_NpixHits_vs_Vx", "n. Barrel Pixel hits vs. v_{x};v_{x} (cm);n. BPix hits", 20, -20, 20);
1334 pNBpixHitsVsVy = book<TProfile>("p_NpixHits_vs_Vy", "n. Barrel Pixel hits vs. v_{y};v_{y} (cm);n. BPix hits", 20, -20, 20);
1335 pNBpixHitsVsVz = book<TProfile>("p_NpixHits_vs_Vz", "n. Barrel Pixel hits vs. v_{z};v_{z} (cm);n. BPix hits", 20, -100, 100);
1336
1337 std::string dets[6] = {"PXB", "PXF", "TIB", "TID", "TOB", "TEC"};
1338 for (int i = 1; i <= hHitComposition->GetNbinsX(); i++) {
1339 hHitComposition->GetXaxis()->SetBinLabel(i, dets[i - 1].c_str());
1340 }
1341
1342 vTrackHistos_.push_back(book<TH1F>("h_tracketa", "Track #eta;#eta_{Track};Number of Tracks", 90, -etaMax_, etaMax_));
1343 vTrackHistos_.push_back(book<TH1F>("h_trackphi", "Track #phi;#phi_{Track};Number of Tracks", 90, -M_PI, M_PI));
1344 vTrackHistos_.push_back(book<TH1F>("h_trackNumberOfValidHits", "Track # of valid hits;# of valid hits _{Track};Number of Tracks", 40, 0., 40.));
1345 vTrackHistos_.push_back(book<TH1F>("h_trackNumberOfLostHits", "Track # of lost hits;# of lost hits _{Track};Number of Tracks", 10, 0., 10.));
1346 vTrackHistos_.push_back(book<TH1F>("h_curvature", "Curvature #kappa;#kappa_{Track};Number of Tracks", 100, -.05, .05));
1347 vTrackHistos_.push_back(book<TH1F>("h_curvature_pos", "Curvature |#kappa| Positive Tracks;|#kappa_{pos Track}|;Number of Tracks", 100, .0, .05));
1348 vTrackHistos_.push_back(book<TH1F>("h_curvature_neg", "Curvature |#kappa| Negative Tracks;|#kappa_{neg Track}|;Number of Tracks", 100, .0, .05));
1349 vTrackHistos_.push_back(book<TH1F>("h_diff_curvature", "Curvature |#kappa| Tracks Difference;|#kappa_{Track}|;# Pos Tracks - # Neg Tracks", 100,.0,.05));
1350
1351 vTrackHistos_.push_back(book<TH1F>("h_chi2", "Track #chi^{2};#chi^{2}_{Track};Number of Tracks", 500, -0.01, 500.));
1352 vTrackHistos_.push_back(book<TH1F>("h_chi2Prob", "#chi^{2} probability;Track Prob(#chi^{2},ndof);Number of Tracks", 100, 0.0, 1.));
1353 vTrackHistos_.push_back(book<TH1F>("h_normchi2", "#chi^{2}/ndof;#chi^{2}/ndof;Number of Tracks", 100, -0.01, 10.));
1354
1355
1356 double xBins[19] = {0., 0.15, 0.5, 1., 1.5, 2., 2.5, 3., 3.5, 4., 4.5, 5., 7., 10., 15., 25., 40., 100., 200.};
1357 vTrackHistos_.push_back(book<TH1F>("h_pt", "Track p_{T};p_{T}^{track} [GeV];Number of Tracks", 250, 0., 250));
1358 vTrackHistos_.push_back(book<TH1F>("h_ptrebin", "Track p_{T};p_{T}^{track} [GeV];Number of Tracks", 18, xBins));
1359
1360 vTrackHistos_.push_back(book<TH1F>("h_ptResolution", "#delta_{p_{T}}/p_{T}^{track};#delta_{p_{T}}/p_{T}^{track};Number of Tracks", 100, 0., 0.5));
1361 vTrackProfiles_.push_back(book<TProfile>("p_d0_vs_phi", "Transverse Impact Parameter vs. #phi;#phi_{Track};#LT d_{0} #GT [cm]", 100, -M_PI, M_PI));
1362 vTrackProfiles_.push_back(book<TProfile>("p_dz_vs_phi", "Longitudinal Impact Parameter vs. #phi;#phi_{Track};#LT d_{z} #GT [cm]", 100, -M_PI, M_PI));
1363 vTrackProfiles_.push_back(book<TProfile>("p_d0_vs_eta", "Transverse Impact Parameter vs. #eta;#eta_{Track};#LT d_{0} #GT [cm]", 100, -etaMax_, etaMax_));
1364 vTrackProfiles_.push_back(book<TProfile>("p_dz_vs_eta", "Longitudinal Impact Parameter vs. #eta;#eta_{Track};#LT d_{z} #GT [cm]", 100, -etaMax_, etaMax_));
1365 vTrackProfiles_.push_back(book<TProfile>("p_chi2_vs_phi", "#chi^{2} vs. #phi;#phi_{Track};#LT #chi^{2} #GT", 100, -M_PI, M_PI));
1366 vTrackProfiles_.push_back(book<TProfile>("p_chi2Prob_vs_phi","#chi^{2} probablility vs. #phi;#phi_{Track};#LT #chi^{2} probability#GT",100,-M_PI,M_PI));
1367 vTrackProfiles_.push_back(book<TProfile>("p_chi2Prob_vs_d0", "#chi^{2} probablility vs. |d_{0}|;|d_{0}|[cm];#LT #chi^{2} probability#GT", 100, 0, 80));
1368 vTrackProfiles_.push_back(book<TProfile>("p_chi2Prob_vs_dz", "#chi^{2} probablility vs. dz;d_{z} [cm];#LT #chi^{2} probability#GT", 100, -30, 30));
1369 vTrackProfiles_.push_back(book<TProfile>("p_normchi2_vs_phi", "#chi^{2}/ndof vs. #phi;#phi_{Track};#LT #chi^{2}/ndof #GT", 100, -M_PI, M_PI));
1370 vTrackProfiles_.push_back(book<TProfile>("p_chi2_vs_eta", "#chi^{2} vs. #eta;#eta_{Track};#LT #chi^{2} #GT", 100, -etaMax_, etaMax_));
1371 vTrackProfiles_.push_back(book<TProfile>("p_normchi2_vs_pt", "norm #chi^{2} vs. p_{T}_{Track}; p_{T}_{Track};#LT #chi^{2}/ndof #GT", 18, xBins));
1372 vTrackProfiles_.push_back(book<TProfile>("p_normchi2_vs_p", "#chi^{2}/ndof vs. p_{Track};p_{Track};#LT #chi^{2}/ndof #GT", 18, xBins));
1373 vTrackProfiles_.push_back(book<TProfile>("p_chi2Prob_vs_eta","#chi^{2} probability vs. #eta;#eta_{Track};#LT #chi^{2} probability #GT",100,-etaMax_, etaMax_));
1374 vTrackProfiles_.push_back(book<TProfile>("p_normchi2_vs_eta", "#chi^{2}/ndof vs. #eta;#eta_{Track};#LT #chi^{2}/ndof #GT", 100, -etaMax_, etaMax_));
1375 vTrackProfiles_.push_back(book<TProfile>("p_kappa_vs_phi", "#kappa vs. #phi;#phi_{Track};#kappa", 100, -M_PI, M_PI));
1376 vTrackProfiles_.push_back(book<TProfile>("p_kappa_vs_eta", "#kappa vs. #eta;#eta_{Track};#kappa", 100, -etaMax_, etaMax_));
1377 vTrackProfiles_.push_back(book<TProfile>("p_ptResolution_vs_phi","#delta_{p_{T}}/p_{T}^{track};#phi^{track};#delta_{p_{T}}/p_{T}^{track}", 100,-M_PI,M_PI));
1378 vTrackProfiles_.push_back(book<TProfile>("p_ptResolution_vs_eta","#delta_{p_{T}}/p_{T}^{track};#eta^{track};#delta_{p_{T}}/p_{T}^{track}", 100, -etaMax_, etaMax_));
1379 vTrack2DHistos_.push_back(book<TH2F>("h2_d0_vs_phi","Transverse Impact Parameter vs. #phi;#phi_{Track};d_{0} [cm]", 100, -M_PI, M_PI, 100, -1., 1.));
1380 vTrack2DHistos_.push_back(book<TH2F>("h2_phi_vs_eta", "Track #phi vs. #eta;#eta_{Track};#phi_{Track}",50, -etaMax_, etaMax_, 50, -M_PI, M_PI));
1381 vTrack2DHistos_.push_back(book<TH2F>("h2_dz_vs_phi","Longitudinal Impact Parameter vs. #phi;#phi_{Track};d_{z} [cm]",100,-M_PI,M_PI,100,-100.,100.));
1382 vTrack2DHistos_.push_back(book<TH2F>("h2_d0_vs_eta","Transverse Impact Parameter vs. #eta;#eta_{Track};d_{0} [cm]", 100, -etaMax_, etaMax_, 100, -1., 1.));
1383 vTrack2DHistos_.push_back(book<TH2F>("h2_dz_vs_eta","Longitudinal Impact Parameter vs. #eta;#eta_{Track};d_{z} [cm]",100, -etaMax_, etaMax_, 100,-100.,100.));
1384 vTrack2DHistos_.push_back(book<TH2F>("h2_chi2_vs_phi", "#chi^{2} vs. #phi;#phi_{Track};#chi^{2}", 100, -M_PI, M_PI, 500, 0., 500.));
1385 vTrack2DHistos_.push_back(book<TH2F>("h2_chi2Prob_vs_phi","#chi^{2} probability vs. #phi;#phi_{Track};#chi^{2} probability",100,-M_PI,M_PI,100,0.,1.));
1386 vTrack2DHistos_.push_back(book<TH2F>("h2_chi2Prob_vs_d0","#chi^{2} probability vs. |d_{0}|;|d_{0}| [cm];#chi^{2} probability",100,0,80,100,0.,1.));
1387 vTrack2DHistos_.push_back(book<TH2F>("h2_normchi2_vs_phi", "#chi^{2}/ndof vs. #phi;#phi_{Track};#chi^{2}/ndof", 100, -M_PI, M_PI, 100, 0., 10.));
1388 vTrack2DHistos_.push_back(book<TH2F>("h2_chi2_vs_eta", "#chi^{2} vs. #eta;#eta_{Track};#chi^{2}", 100, -etaMax_, etaMax_, 500, 0., 500.));
1389 vTrack2DHistos_.push_back(book<TH2F>("h2_chi2Prob_vs_eta","#chi^{2} probaility vs. #eta;#eta_{Track};#chi^{2} probability",100,-M_PI,M_PI,100,0.,1.));
1390 vTrack2DHistos_.push_back(book<TH2F>("h2_normchi2_vs_eta", "#chi^{2}/ndof vs. #eta;#eta_{Track};#chi^{2}/ndof", 100, -etaMax_, etaMax_, 100, 0., 10.));
1391 vTrack2DHistos_.push_back(book<TH2F>("h2_kappa_vs_phi", "#kappa vs. #phi;#phi_{Track};#kappa", 100, -M_PI, M_PI, 100, .0, .05));
1392 vTrack2DHistos_.push_back(book<TH2F>("h2_kappa_vs_eta", "#kappa vs. #eta;#eta_{Track};#kappa", 100, -etaMax_, etaMax_, 100, .0, .05));
1393 vTrack2DHistos_.push_back(book<TH2F>("h2_normchi2_vs_kappa", "#kappa vs. #chi^{2}/ndof;#chi^{2}/ndof;#kappa", 100, 0., 10, 100, -.03, .03));
1394
1395
1396
1397 fullPixelmapXDMR->createTrackerBaseMap();
1398 fullPixelmapYDMR->createTrackerBaseMap();
1399
1400 }
1401
1402 void endJob() override {
1403 edm::LogPrint("DMRChecker") << "*******************************" << std::endl;
1404 edm::LogPrint("DMRChecker") << "Events run in total: " << ievt << std::endl;
1405 edm::LogPrint("DMRChecker") << "n. tracks: " << itrks << std::endl;
1406 edm::LogPrint("DMRChecker") << "*******************************" << std::endl;
1407
1408 int nFiringTriggers = !triggerMap_.empty() ? triggerMap_.size() : 1;
1409 edm::LogPrint("DMRChecker") << "firing triggers: " << triggerMap_.size() << std::endl;
1410 edm::LogPrint("DMRChecker") << "*******************************" << std::endl;
1411
1412 tksByTrigger_ =
1413 book<TH1D>("tksByTrigger", "tracks by HLT path;;% of # traks", nFiringTriggers, -0.5, nFiringTriggers - 0.5);
1414 evtsByTrigger_ =
1415 book<TH1D>("evtsByTrigger", "events by HLT path;;% of # events", nFiringTriggers, -0.5, nFiringTriggers - 0.5);
1416
1417 if (DEBUG)
1418 edm::LogPrint("DMRChecker") << __FILE__ << "@" << __FUNCTION__ << " L-" << __LINE__ << std::endl;
1419
1420 int i = 0;
1421 for (const auto &it : triggerMap_) {
1422 i++;
1423
1424 double trkpercent = ((it.second).second) * 100. / double(itrks);
1425 double evtpercent = ((it.second).first) * 100. / double(ievt);
1426
1427 std::cout.precision(4);
1428
1429 edm::LogPrint("DMRChecker") << "HLT path: " << std::setw(60) << left << it.first << " | events firing: " << right
1430 << std::setw(8) << (it.second).first << " (" << setw(8) << fixed << evtpercent << "%)"
1431 << " | tracks collected: " << std::setw(10) << (it.second).second << " (" << setw(8)
1432 << fixed << trkpercent << "%)";
1433
1434 tksByTrigger_->SetBinContent(i, trkpercent);
1435 tksByTrigger_->GetXaxis()->SetBinLabel(i, (it.first).c_str());
1436
1437 evtsByTrigger_->SetBinContent(i, evtpercent);
1438 evtsByTrigger_->GetXaxis()->SetBinLabel(i, (it.first).c_str());
1439 }
1440
1441 if (DEBUG)
1442 edm::LogPrint("DMRChecker") << __FILE__ << "@" << __FUNCTION__ << " L-" << __LINE__ << std::endl;
1443
1444 int nRuns = conditionsMap_.size();
1445 if (nRuns < 1)
1446 return;
1447
1448 vector<int> theRuns_;
1449 theRuns_.reserve(conditionsMap_.size());
1450 for (const auto &it : conditionsMap_) {
1451 theRuns_.push_back(it.first);
1452 }
1453
1454 std::sort(theRuns_.begin(), theRuns_.end());
1455 int runRange = theRuns_.back() - theRuns_.front() + 1;
1456
1457 edm::LogPrint("DMRChecker") << "*******************************" << std::endl;
1458 edm::LogPrint("DMRChecker") << "first run: " << theRuns_.front() << std::endl;
1459 edm::LogPrint("DMRChecker") << "last run: " << theRuns_.back() << std::endl;
1460 edm::LogPrint("DMRChecker") << "considered runs: " << nRuns << std::endl;
1461 edm::LogPrint("DMRChecker") << "*******************************" << std::endl;
1462
1463 modeByRun_ = book<TH1D>("modeByRun",
1464 "Strip APV mode by run number;;APV mode (-1=deco,+1=peak)",
1465 runRange,
1466 theRuns_.front() - 0.5,
1467 theRuns_.back() + 0.5);
1468 fieldByRun_ = book<TH1D>("fieldByRun",
1469 "CMS B-field intensity by run number;;B-field intensity [T]",
1470 runRange,
1471 theRuns_.front() - 0.5,
1472 theRuns_.back() + 0.5);
1473
1474 tracksByRun_ = book<TH1D>("tracksByRun",
1475 "n. AlCaReco Tracks by run number;;n. of tracks",
1476 runRange,
1477 theRuns_.front() - 0.5,
1478 theRuns_.back() + 0.5);
1479 hitsByRun_ = book<TH1D>(
1480 "histByRun", "n. of hits by run number;;n. of hits", runRange, theRuns_.front() - 0.5, theRuns_.back() + 0.5);
1481
1482 trackRatesByRun_ = book<TH1D>("trackRatesByRun",
1483 "rate of AlCaReco Tracks by run number;;n. of tracks/s",
1484 runRange,
1485 theRuns_.front() - 0.5,
1486 theRuns_.back() + 0.5);
1487 eventRatesByRun_ = book<TH1D>("eventRatesByRun",
1488 "rate of AlCaReco Events by run number;;n. of events/s",
1489 runRange,
1490 theRuns_.front() - 0.5,
1491 theRuns_.back() + 0.5);
1492
1493 hitsinBPixByRun_ = book<TH1D>("histinBPixByRun",
1494 "n. of hits in BPix by run number;;n. of BPix hits",
1495 runRange,
1496 theRuns_.front() - 0.5,
1497 theRuns_.back() + 0.5);
1498 hitsinFPixByRun_ = book<TH1D>("histinFPixByRun",
1499 "n. of hits in FPix by run number;;n. of FPix hits",
1500 runRange,
1501 theRuns_.front() - 0.5,
1502 theRuns_.back() + 0.5);
1503
1504 for (const auto &the_r : theRuns_) {
1505 if (conditionsMap_.find(the_r)->second.first != 0) {
1506 auto indexing = (the_r - theRuns_.front()) + 1;
1507 double runTime = timeMap_.find(the_r)->second;
1508
1509 edm::LogPrint("DMRChecker") << "run:" << the_r << " | isPeak: " << std::setw(4)
1510 << conditionsMap_.find(the_r)->second.first
1511 << "| B-field: " << conditionsMap_.find(the_r)->second.second << " [T]"
1512 << "| events: " << setw(10) << runInfoMap_.find(the_r)->second.first
1513 << "(rate: " << setw(10) << (runInfoMap_.find(the_r)->second.first) / runTime
1514 << " ev/s)"
1515 << ", tracks " << setw(10) << runInfoMap_.find(the_r)->second.second
1516 << "(rate: " << setw(10) << (runInfoMap_.find(the_r)->second.second) / runTime
1517 << " trk/s)" << std::endl;
1518
1519
1520 modeByRun_->SetBinContent(indexing, conditionsMap_.find(the_r)->second.first);
1521 modeByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1522 fieldByRun_->SetBinContent(indexing, conditionsMap_.find(the_r)->second.second);
1523 fieldByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1524
1525 tracksByRun_->SetBinContent(indexing, runInfoMap_.find(the_r)->second.first);
1526 tracksByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1527 hitsByRun_->SetBinContent(indexing, runInfoMap_.find(the_r)->second.second);
1528 hitsByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1529
1530 hitsinBPixByRun_->SetBinContent(indexing, (runHitsMap_.find(the_r)->second)[0]);
1531 hitsinBPixByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1532 hitsinFPixByRun_->SetBinContent(indexing, (runHitsMap_.find(the_r)->second)[1]);
1533 hitsinFPixByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1534
1535 trackRatesByRun_->SetBinContent(indexing, (runInfoMap_.find(the_r)->second.second) / runTime);
1536 trackRatesByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1537 eventRatesByRun_->SetBinContent(indexing, (runInfoMap_.find(the_r)->second.first) / runTime);
1538 eventRatesByRun_->GetXaxis()->SetBinLabel(indexing, Form("%d", the_r));
1539
1540 constexpr const char *subdets[]{"BPix", "FPix", "TIB", "TID", "TOB", "TEC"};
1541
1542 edm::LogPrint("DMRChecker") << "*******************************" << std::endl;
1543 edm::LogPrint("DMRChecker") << "Hits by SubDetector" << std::endl;
1544 int si = 0;
1545 for (const auto &entry : runHitsMap_.find(the_r)->second) {
1546 edm::LogPrint("DMRChecker") << subdets[si] << " " << entry << std::endl;
1547 si++;
1548 }
1549 edm::LogPrint("DMRChecker") << "*******************************" << std::endl;
1550 }
1551
1552
1553 }
1554
1555 if (DEBUG)
1556 edm::LogPrint("DMRChecker") << __FILE__ << "@" << __FUNCTION__ << " L-" << __LINE__ << std::endl;
1557
1558
1559
1560 TFileDirectory DMeanR = fs->mkdir("DMRs");
1561
1562 DMRBPixX_ = DMeanR.make<TH1D>("DMRBPix-X", "DMR of BPix-X;mean of X-residuals;modules", 100., -200, 200);
1563 DMRBPixY_ = DMeanR.make<TH1D>("DMRBPix-Y", "DMR of BPix-Y;mean of Y-residuals;modules", 100., -200, 200);
1564
1565 DMRFPixX_ = DMeanR.make<TH1D>("DMRFPix-X", "DMR of FPix-X;mean of X-residuals;modules", 100., -200, 200);
1566 DMRFPixY_ = DMeanR.make<TH1D>("DMRFPix-Y", "DMR of FPix-Y;mean of Y-residuals;modules", 100., -200, 200);
1567
1568 DMRTIB_ = DMeanR.make<TH1D>("DMRTIB", "DMR of TIB;mean of X-residuals;modules", 100., -200, 200);
1569 DMRTOB_ = DMeanR.make<TH1D>("DMRTOB", "DMR of TOB;mean of X-residuals;modules", 100., -200, 200);
1570
1571 DMRTID_ = DMeanR.make<TH1D>("DMRTID", "DMR of TID;mean of X-residuals;modules", 100., -200, 200);
1572 DMRTEC_ = DMeanR.make<TH1D>("DMRTEC", "DMR of TEC;mean of X-residuals;modules", 100., -200, 200);
1573
1574 TFileDirectory DMeanRSplit = fs->mkdir("SplitDMRs");
1575
1576 DMRBPixXSplit_ = bookSplitDMRHistograms(DMeanRSplit, "BPix", "X", true);
1577 DMRBPixYSplit_ = bookSplitDMRHistograms(DMeanRSplit, "BPix", "Y", true);
1578
1579 DMRFPixXSplit_ = bookSplitDMRHistograms(DMeanRSplit, "FPix", "X", false);
1580 DMRFPixYSplit_ = bookSplitDMRHistograms(DMeanRSplit, "FPix", "Y", false);
1581
1582 DMRTIBSplit_ = bookSplitDMRHistograms(DMeanRSplit, "TIB", "X", true);
1583 DMRTOBSplit_ = bookSplitDMRHistograms(DMeanRSplit, "TOB", "X", true);
1584
1585
1586 TFileDirectory DRnRs = fs->mkdir("DRnRs");
1587
1588 DRnRBPixX_ = DRnRs.make<TH1D>("DRnRBPix-X", "DRnR of BPix-X;rms of normalized X-residuals;modules", 100., 0., 3.);
1589 DRnRBPixY_ = DRnRs.make<TH1D>("DRnRBPix-Y", "DRnR of BPix-Y;rms of normalized Y-residuals;modules", 100., 0., 3.);
1590
1591 DRnRFPixX_ = DRnRs.make<TH1D>("DRnRFPix-X", "DRnR of FPix-X;rms of normalized X-residuals;modules", 100., 0., 3.);
1592 DRnRFPixY_ = DRnRs.make<TH1D>("DRnRFPix-Y", "DRnR of FPix-Y;rms of normalized Y-residuals;modules", 100., 0., 3.);
1593
1594 DRnRTIB_ = DRnRs.make<TH1D>("DRnRTIB", "DRnR of TIB;rms of normalized X-residuals;modules", 100., 0., 3.);
1595 DRnRTOB_ = DRnRs.make<TH1D>("DRnRTOB", "DRnR of TOB;rms of normalized Y-residuals;modules", 100., 0., 3.);
1596
1597 DRnRTID_ = DRnRs.make<TH1D>("DRnRTID", "DRnR of TID;rms of normalized X-residuals;modules", 100., 0., 3.);
1598 DRnRTEC_ = DRnRs.make<TH1D>("DRnRTEC", "DRnR of TEC;rms of normalized Y-residuals;modules", 100., 0., 3.);
1599
1600
1601
1602 SiPixelPI::PhaseInfo ph_info(phase_);
1603 const char *path_toTopologyXML = ph_info.pathToTopoXML();
1604 const TrackerTopology standaloneTopo =
1605 StandaloneTrackerTopology::fromTrackerParametersXMLFile(edm::FileInPath(path_toTopologyXML).fullPath());
1606
1607
1608 PixelDMRS_x_ByLayer = std::make_unique<PixelRegions::PixelRegionContainers>(&standaloneTopo, ph_info.phase());
1609 PixelDMRS_y_ByLayer = std::make_unique<PixelRegions::PixelRegionContainers>(&standaloneTopo, ph_info.phase());
1610
1611
1612 PixelDMRS_x_ByLayer->bookAll("Barrel Pixel DMRs", "median(x'_{pred}-x'_{hit}) [#mum]", "# modules", 100, -50, 50);
1613 PixelDMRS_y_ByLayer->bookAll("Barrel Pixel DMRs", "median(y'_{pred}-y'_{hit}) [#mum]", "# modules", 100, -50, 50);
1614
1615 if (DEBUG) {
1616 auto dets = PixelRegions::attachedDets(PixelRegions::PixelId::L1, &standaloneTopo, phase_);
1617 for (const auto &det : dets) {
1618 auto myLocalTopo = PixelDMRS_x_ByLayer->getTheTopo();
1619 edm::LogVerbatim("DMRChecker") << myLocalTopo->print(det) << std::endl;
1620 }
1621 }
1622
1623
1624
1625 for (auto &bpixid : resDetailsBPixX_) {
1626 DMRBPixX_->Fill(bpixid.second.runningMeanOfRes_);
1627 if (phase_ == SiPixelPI::phase::one) {
1628 pixelmap->fillBarrelBin("DMRsX", bpixid.first, bpixid.second.runningMeanOfRes_);
1629 fullPixelmapXDMR->fillTrackerMap(bpixid.first, bpixid.second.runningMeanOfRes_);
1630 }
1631
1632 if (DEBUG) {
1633 auto myLocalTopo = PixelDMRS_x_ByLayer->getTheTopo();
1634 edm::LogPrint("DMRChecker") << myLocalTopo->print(bpixid.first) << std::endl;
1635 }
1636
1637 PixelDMRS_x_ByLayer->fill(bpixid.first, bpixid.second.runningMeanOfRes_);
1638
1639
1640 if (bpixid.second.rDirection > 0) {
1641 DMRBPixXSplit_[0]->Fill(bpixid.second.runningMeanOfRes_);
1642 } else {
1643 DMRBPixXSplit_[1]->Fill(bpixid.second.runningMeanOfRes_);
1644 }
1645
1646 if (bpixid.second.hitCount < 2)
1647 DRnRBPixX_->Fill(-1);
1648 else
1649 DRnRBPixX_->Fill(sqrt(bpixid.second.runningNormVarOfRes_ / (bpixid.second.hitCount - 1)));
1650 }
1651
1652 for (auto &bpixid : resDetailsBPixY_) {
1653 DMRBPixY_->Fill(bpixid.second.runningMeanOfRes_);
1654 if (phase_ == SiPixelPI::phase::one) {
1655 pixelmap->fillBarrelBin("DMRsY", bpixid.first, bpixid.second.runningMeanOfRes_);
1656 fullPixelmapYDMR->fillTrackerMap(bpixid.first, bpixid.second.runningMeanOfRes_);
1657 }
1658
1659 PixelDMRS_y_ByLayer->fill(bpixid.first, bpixid.second.runningMeanOfRes_);
1660
1661
1662 if (bpixid.second.rDirection > 0) {
1663 DMRBPixYSplit_[0]->Fill(bpixid.second.runningMeanOfRes_);
1664 } else {
1665 DMRBPixYSplit_[1]->Fill(bpixid.second.runningMeanOfRes_);
1666 }
1667
1668 if (bpixid.second.hitCount < 2)
1669 DRnRBPixY_->Fill(-1);
1670 else
1671 DRnRBPixY_->Fill(sqrt(bpixid.second.runningNormVarOfRes_ / (bpixid.second.hitCount - 1)));
1672 }
1673
1674 for (auto &fpixid : resDetailsFPixX_) {
1675 DMRFPixX_->Fill(fpixid.second.runningMeanOfRes_);
1676 if (phase_ == SiPixelPI::phase::one) {
1677 pixelmap->fillForwardBin("DMRsX", fpixid.first, fpixid.second.runningMeanOfRes_);
1678 fullPixelmapXDMR->fillTrackerMap(fpixid.first, fpixid.second.runningMeanOfRes_);
1679 }
1680 PixelDMRS_x_ByLayer->fill(fpixid.first, fpixid.second.runningMeanOfRes_);
1681
1682
1683 if (fpixid.second.zDirection > 0) {
1684 DMRFPixXSplit_[0]->Fill(fpixid.second.runningMeanOfRes_);
1685 } else {
1686 DMRFPixXSplit_[1]->Fill(fpixid.second.runningMeanOfRes_);
1687 }
1688
1689 if (fpixid.second.hitCount < 2)
1690 DRnRFPixX_->Fill(-1);
1691 else
1692 DRnRFPixX_->Fill(sqrt(fpixid.second.runningNormVarOfRes_ / (fpixid.second.hitCount - 1)));
1693 }
1694
1695 for (auto &fpixid : resDetailsFPixY_) {
1696 DMRFPixY_->Fill(fpixid.second.runningMeanOfRes_);
1697 if (phase_ == SiPixelPI::phase::one) {
1698 pixelmap->fillForwardBin("DMRsY", fpixid.first, fpixid.second.runningMeanOfRes_);
1699 fullPixelmapXDMR->fillTrackerMap(fpixid.first, fpixid.second.runningMeanOfRes_);
1700 }
1701 PixelDMRS_y_ByLayer->fill(fpixid.first, fpixid.second.runningMeanOfRes_);
1702
1703
1704 if (fpixid.second.zDirection > 0) {
1705 DMRFPixYSplit_[0]->Fill(fpixid.second.runningMeanOfRes_);
1706 } else {
1707 DMRFPixYSplit_[1]->Fill(fpixid.second.runningMeanOfRes_);
1708 }
1709
1710 if (fpixid.second.hitCount < 2)
1711 DRnRFPixY_->Fill(-1);
1712 else
1713 DRnRFPixY_->Fill(sqrt(fpixid.second.runningNormVarOfRes_ / (fpixid.second.hitCount - 1)));
1714 }
1715
1716
1717
1718 for (auto &tibid : resDetailsTIB_) {
1719 DMRTIB_->Fill(tibid.second.runningMeanOfRes_);
1720
1721
1722 if (tibid.second.rDirection > 0) {
1723 DMRTIBSplit_[0]->Fill(tibid.second.runningMeanOfRes_);
1724 } else {
1725 DMRTIBSplit_[1]->Fill(tibid.second.runningMeanOfRes_);
1726 }
1727
1728 if (tibid.second.hitCount < 2)
1729 DRnRTIB_->Fill(-1);
1730 else
1731 DRnRTIB_->Fill(sqrt(tibid.second.runningNormVarOfRes_ / (tibid.second.hitCount - 1)));
1732 }
1733
1734 for (auto &tobid : resDetailsTOB_) {
1735 DMRTOB_->Fill(tobid.second.runningMeanOfRes_);
1736
1737
1738 if (tobid.second.rDirection > 0) {
1739 DMRTOBSplit_[0]->Fill(tobid.second.runningMeanOfRes_);
1740 } else {
1741 DMRTOBSplit_[1]->Fill(tobid.second.runningMeanOfRes_);
1742 }
1743
1744 if (tobid.second.hitCount < 2)
1745 DRnRTOB_->Fill(-1);
1746 else
1747 DRnRTOB_->Fill(sqrt(tobid.second.runningNormVarOfRes_ / (tobid.second.hitCount - 1)));
1748 }
1749
1750 for (auto &tidid : resDetailsTID_) {
1751 DMRTID_->Fill(tidid.second.runningMeanOfRes_);
1752
1753 if (tidid.second.hitCount < 2)
1754 DRnRTID_->Fill(-1);
1755 else
1756 DRnRTID_->Fill(sqrt(tidid.second.runningNormVarOfRes_ / (tidid.second.hitCount - 1)));
1757 }
1758
1759 for (auto &tecid : resDetailsTEC_) {
1760 DMRTEC_->Fill(tecid.second.runningMeanOfRes_);
1761
1762 if (tecid.second.hitCount < 2)
1763 DRnRTEC_->Fill(-1);
1764 else
1765 DRnRTEC_->Fill(sqrt(tecid.second.runningNormVarOfRes_ / (tecid.second.hitCount - 1)));
1766 }
1767
1768 edm::LogPrint("DMRChecker") << "n. of bpix modules " << resDetailsBPixX_.size() << std::endl;
1769 edm::LogPrint("DMRChecker") << "n. of fpix modules " << resDetailsFPixX_.size() << std::endl;
1770
1771 if (phase_ == SiPixelPI::phase::zero) {
1772 pmap->save(true, 0, 0, "PixelHitMap.pdf", 600, 800);
1773 pmap->save(true, 0, 0, "PixelHitMap.png", 500, 750);
1774 }
1775
1776 tmap->save(true, 0, 0, "StripHitMap.pdf");
1777 tmap->save(true, 0, 0, "StripHitMap.png");
1778
1779 if (phase_ == SiPixelPI::phase::one) {
1780 gStyle->SetPalette(kRainBow);
1781 pixelmap->beautifyAllHistograms();
1782
1783 TCanvas cBX("CanvXBarrel", "CanvXBarrel", 1200, 1000);
1784 pixelmap->drawBarrelMaps("DMRsX", cBX);
1785 cBX.SaveAs("pixelBarrelDMR_x.png");
1786
1787 TCanvas cFX("CanvXForward", "CanvXForward", 1600, 1000);
1788 pixelmap->drawForwardMaps("DMRsX", cFX);
1789 cFX.SaveAs("pixelForwardDMR_x.png");
1790
1791 TCanvas cBY("CanvYBarrel", "CanvYBarrel", 1200, 1000);
1792 pixelmap->drawBarrelMaps("DMRsY", cBY);
1793 cBY.SaveAs("pixelBarrelDMR_y.png");
1794
1795 TCanvas cFY("CanvXForward", "CanvXForward", 1600, 1000);
1796 pixelmap->drawForwardMaps("DMRsY", cFY);
1797 cFY.SaveAs("pixelForwardDMR_y.png");
1798
1799 TCanvas cFullPixelxDMR("CanvFullPixelX", "CanvFullPixelX", 3000, 2000);
1800 fullPixelmapXDMR->printTrackerMap(cFullPixelxDMR);
1801 cFullPixelxDMR.SaveAs("fullPixelDMR_x.png");
1802
1803 TCanvas cFullPixelyDMR("CanvFullPixelX", "CanvFullPixelY", 3000, 2000);
1804 fullPixelmapXDMR->printTrackerMap(cFullPixelyDMR);
1805 cFullPixelyDMR.SaveAs("fullPixelDMR_y.png");
1806 }
1807
1808
1809 gStyle->SetOptStat("emr");
1810 PixelDMRS_x_ByLayer->beautify(2, 0);
1811 PixelDMRS_y_ByLayer->beautify(2, 0);
1812
1813 TCanvas DMRxBarrel("DMRxBarrelCanv", "x-coordinate", 1400, 1200);
1814 DMRxBarrel.Divide(2, 2);
1815 PixelDMRS_x_ByLayer->draw(DMRxBarrel, true, "HISTS");
1816 adjustCanvases(DMRxBarrel, true);
1817 for (unsigned int c = 1; c <= 4; c++) {
1818 DMRxBarrel.cd(c)->Update();
1819 }
1820 PixelDMRS_x_ByLayer->stats();
1821
1822 TCanvas DMRxForward("DMRxForwardCanv", "x-coordinate", 1400, 1200);
1823 DMRxForward.Divide(4, 3);
1824 PixelDMRS_x_ByLayer->draw(DMRxForward, false, "HISTS");
1825 adjustCanvases(DMRxForward, false);
1826 for (unsigned int c = 1; c <= 12; c++) {
1827 DMRxForward.cd(c)->Update();
1828 }
1829 PixelDMRS_x_ByLayer->stats();
1830
1831 DMRxBarrel.SaveAs("DMR_x_Barrel_ByLayer.png");
1832 DMRxForward.SaveAs("DMR_x_Forward_ByRing.png");
1833
1834 TCanvas DMRyBarrel("DMRyBarrelCanv", "y-coordinate", 1400, 1200);
1835 DMRyBarrel.Divide(2, 2);
1836 PixelDMRS_y_ByLayer->draw(DMRyBarrel, true, "HISTS");
1837 adjustCanvases(DMRyBarrel, true);
1838 for (unsigned int c = 1; c <= 4; c++) {
1839 DMRyBarrel.cd(c)->Update();
1840 }
1841 PixelDMRS_y_ByLayer->stats();
1842
1843 TCanvas DMRyForward("DMRyForwardCanv", "y-coordinate", 1400, 1200);
1844 DMRyForward.Divide(4, 3);
1845 PixelDMRS_y_ByLayer->draw(DMRyForward, false, "HISTS");
1846 adjustCanvases(DMRyForward, false);
1847 for (unsigned int c = 1; c <= 12; c++) {
1848 DMRyForward.cd(c)->Update();
1849 }
1850 PixelDMRS_y_ByLayer->stats();
1851
1852 DMRyBarrel.SaveAs("DMR_y_Barrel_ByLayer.png");
1853 DMRyForward.SaveAs("DMR_y_Forward_ByRing.png");
1854 }
1855
1856
1857
1858
1859 void adjustCanvases(TCanvas &canvas, bool isBarrel) {
1860 unsigned int maxPads = isBarrel ? 4 : 12;
1861 for (unsigned int c = 1; c <= maxPads; c++) {
1862 canvas.cd(c);
1863 SiPixelPI::adjustCanvasMargins(canvas.cd(c), 0.06, 0.12, 0.12, 0.05);
1864 }
1865
1866 auto ltx = TLatex();
1867 ltx.SetTextFont(62);
1868 ltx.SetTextSize(0.05);
1869 ltx.SetTextAlign(11);
1870
1871 std::string toAppend = canvas.GetTitle();
1872
1873 for (unsigned int c = 1; c <= maxPads; c++) {
1874 auto index = isBarrel ? c - 1 : c + 3;
1875 canvas.cd(c);
1876 ltx.DrawLatexNDC(gPad->GetLeftMargin(),
1877 1 - gPad->GetTopMargin() + 0.01,
1878 (PixelRegions::IDlabels.at(index) + " " + toAppend).c_str());
1879 }
1880 }
1881
1882
1883
1884
1885 bool isHit2D(const TrackingRecHit &hit) {
1886 bool countStereoHitAs2D_ = true;
1887
1888
1889 if (!hit.isValid() ||
1890 (hit.dimension() < 2 && !countStereoHitAs2D_ && !dynamic_cast<const SiStripRecHit1D *>(&hit))) {
1891 return false;
1892 } else {
1893 const DetId detId(hit.geographicalId());
1894 if (detId.det() == DetId::Tracker) {
1895 if (detId.subdetId() == kBPIX || detId.subdetId() == kFPIX) {
1896 return true;
1897 } else {
1898 const SiStripDetId stripId(detId);
1899 if (stripId.stereo())
1900 return countStereoHitAs2D_;
1901 else if (dynamic_cast<const SiStripRecHit1D *>(&hit) || dynamic_cast<const SiStripRecHit2D *>(&hit))
1902 return false;
1903
1904 else if (dynamic_cast<const SiStripMatchedRecHit2D *>(&hit))
1905 return true;
1906 else if (dynamic_cast<const ProjectedSiStripRecHit2D *>(&hit)) {
1907 const ProjectedSiStripRecHit2D *pH = static_cast<const ProjectedSiStripRecHit2D *>(&hit);
1908 return (countStereoHitAs2D_ && this->isHit2D(pH->originalHit()));
1909 } else {
1910 edm::LogError("UnknownType") << "@SUB=DMRChecker::isHit2D"
1911 << "Tracker hit not in pixel, neither SiStripRecHit[12]D nor "
1912 << "SiStripMatchedRecHit2D nor ProjectedSiStripRecHit2D.";
1913 return false;
1914 }
1915 }
1916 } else {
1917 edm::LogWarning("DetectorMismatch") << "@SUB=DMRChecker::isHit2D"
1918 << "Hit not in tracker with 'official' dimension >=2.";
1919 return true;
1920 }
1921 }
1922
1923 }
1924
1925
1926
1927
1928 std::array<TH1D *, 2> bookSplitDMRHistograms(TFileDirectory dir,
1929 std::string subdet,
1930 std::string vartype,
1931 bool isBarrel) {
1932 TH1F::SetDefaultSumw2(kTRUE);
1933
1934 std::array<TH1D *, 2> out;
1935 std::array<std::string, 2> sign_name = {{"plus", "minus"}};
1936 std::array<std::string, 2> sign = {{">0", "<0"}};
1937 for (unsigned int i = 0; i < 2; i++) {
1938 const char *name_;
1939 const char *title_;
1940 const char *axisTitle_;
1941
1942 if (isBarrel) {
1943 name_ = Form("DMR%s_%s_rDir%s", subdet.c_str(), vartype.c_str(), sign_name[i].c_str());
1944 title_ = Form("Split DMR of %s-%s (rDir%s)", subdet.c_str(), vartype.c_str(), sign[i].c_str());
1945 axisTitle_ = Form("mean of %s-residuals (rDir%s);modules", vartype.c_str(), sign[i].c_str());
1946 } else {
1947 name_ = Form("DMR%s_%s_zDir%s", subdet.c_str(), vartype.c_str(), sign_name[i].c_str());
1948 title_ = Form("Split DMR of %s-%s (zDir%s)", subdet.c_str(), vartype.c_str(), sign[i].c_str());
1949 axisTitle_ = Form("mean of %s-residuals (zDir%s);modules", vartype.c_str(), sign[i].c_str());
1950 }
1951
1952 out[i] = dir.make<TH1D>(name_, fmt::sprintf("%s;%s", title_, axisTitle_).c_str(), 100., -200, 200);
1953 }
1954 return out;
1955 }
1956
1957
1958
1959
1960 std::map<unsigned int, TH1D *> bookResidualsHistogram(
1961 TFileDirectory dir, unsigned int theNLayers, std::string resType, std::string varType, std::string detType) {
1962 TH1F::SetDefaultSumw2(kTRUE);
1963
1964 std::pair<double, double> limits;
1965
1966 if (varType.find("Res") != std::string::npos) {
1967 limits = std::make_pair(-1000., 1000);
1968 } else {
1969 limits = std::make_pair(-3., 3.);
1970 }
1971
1972 std::map<unsigned int, TH1D *> h;
1973
1974 for (unsigned int i = 1; i <= theNLayers; i++) {
1975 const char *name_;
1976 const char *title_;
1977 std::string xAxisTitle_;
1978
1979 if (varType.find("Res") != std::string::npos) {
1980 xAxisTitle_ = fmt::sprintf("res_{%s'} [#mum]", resType);
1981 } else {
1982 xAxisTitle_ = fmt::sprintf("res_{%s'}/#sigma_{res_{%s`}}", resType, resType);
1983 }
1984
1985 unsigned int side = -1;
1986 if (detType.find("FPix") != std::string::npos) {
1987 side = (i - 1) / 3 + 1;
1988 unsigned int plane = (i - 1) % 3 + 1;
1989
1990 std::string theSide = "";
1991 if (side == 1) {
1992 theSide = "Z-";
1993 } else {
1994 theSide = "Z+";
1995 }
1996
1997 name_ = Form("h_%s%s%s_side%i_disk%i", detType.c_str(), varType.c_str(), resType.c_str(), side, plane);
1998 title_ = Form("%s (%s, disk %i) track %s-%s;%s;hits",
1999 detType.c_str(),
2000 theSide.c_str(),
2001 plane,
2002 resType.c_str(),
2003 varType.c_str(),
2004 xAxisTitle_.c_str());
2005
2006 } else {
2007 name_ = Form("h_%s%s%s_layer%i", detType.c_str(), varType.c_str(), resType.c_str(), i);
2008 title_ = Form("%s (layer %i) track %s-%s;%s;hits",
2009 detType.c_str(),
2010 i,
2011 resType.c_str(),
2012 varType.c_str(),
2013 xAxisTitle_.c_str());
2014
2015
2016 }
2017
2018 h[i] = dir.make<TH1D>(name_, title_, 100, limits.first, limits.second);
2019 }
2020
2021 return h;
2022 }
2023
2024
2025
2026
2027 void fillByIndex(std::map<unsigned int, TH1D *> &h, unsigned int index, double x) {
2028 if (h.count(index) != 0) {
2029
2030
2031
2032 double min = h[index]->GetXaxis()->GetXmin();
2033 double max = h[index]->GetXaxis()->GetXmax();
2034 if (x < min)
2035 h[index]->Fill(min);
2036 else if (x >= max)
2037 h[index]->Fill(0.99999 * max);
2038 else
2039 h[index]->Fill(x);
2040 }
2041 }
2042
2043
2044
2045
2046
2047 void updateOnlineMomenta(running::estimatorMap &myDetails, uint32_t theID, float the_data, float the_pull) {
2048 myDetails[theID].hitCount += 1;
2049
2050 float delta = 0;
2051 float n_delta = 0;
2052
2053 if (myDetails[theID].hitCount != 1) {
2054 delta = the_data - myDetails[theID].runningMeanOfRes_;
2055 n_delta = the_pull - myDetails[theID].runningNormMeanOfRes_;
2056 myDetails[theID].runningMeanOfRes_ += (delta / myDetails[theID].hitCount);
2057 myDetails[theID].runningNormMeanOfRes_ += (n_delta / myDetails[theID].hitCount);
2058 } else {
2059 myDetails[theID].runningMeanOfRes_ = the_data;
2060 myDetails[theID].runningNormMeanOfRes_ = the_pull;
2061 }
2062
2063 float delta2 = the_data - myDetails[theID].runningMeanOfRes_;
2064 float n_delta2 = the_pull - myDetails[theID].runningNormMeanOfRes_;
2065
2066 myDetails[theID].runningVarOfRes_ += delta * delta2;
2067 myDetails[theID].runningNormVarOfRes_ += n_delta * n_delta2;
2068 }
2069
2070
2071
2072
2073 void fillDMRs(const running::estimatorMap &myDetails,
2074 TH1D *DMR,
2075 TH1D *DRnR,
2076 std::array<TH1D *, 2> DMRSplit,
2077 std::unique_ptr<PixelRegions::PixelRegionContainers> regionalDMR) {
2078 for (const auto &element : myDetails) {
2079
2080 DMR->Fill(element.second.runningMeanOfRes_);
2081
2082
2083 if (regionalDMR.get()) {
2084 regionalDMR->fill(element.first, element.second.runningMeanOfRes_);
2085 }
2086
2087
2088 if (element.second.rOrZDirection > 0) {
2089 DMRSplit[0]->Fill(element.second.runningMeanOfRes_);
2090 } else {
2091 DMRSplit[1]->Fill(element.second.runningMeanOfRes_);
2092 }
2093
2094
2095 if (element.second.hitCount < 2) {
2096 DRnR->Fill(-1);
2097 } else {
2098 DRnR->Fill(sqrt(element.second.runningNormVarOfRes_ / (element.second.hitCount - 1)));
2099 }
2100 }
2101 }
2102 };
2103
2104
2105 void DMRChecker::fillDescriptions(edm::ConfigurationDescriptions &descriptions)
2106
2107 {
2108 edm::ParameterSetDescription desc;
2109 desc.setComment("Generic track analyzer to check ALCARECO sample quantities / compute fast DMRs");
2110 desc.add<edm::InputTag>("TkTag", edm::InputTag("generalTracks"));
2111 desc.add<edm::InputTag>("TriggerResultsTag", edm::InputTag("TriggerResults", "", "HLT"));
2112 desc.add<edm::InputTag>("BeamSpotTag", edm::InputTag("offlineBeamSpot"));
2113 desc.add<edm::InputTag>("VerticesTag", edm::InputTag("offlinePrimaryVertices"));
2114 desc.add<bool>("isCosmics", false);
2115 desc.add<bool>("doLatencyAnalysis", true);
2116 descriptions.addWithDefaultLabel(desc);
2117 }
2118
2119 DEFINE_FWK_MODULE(DMRChecker);