1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
// -*- C++ -*-
//
// Package: CalibTracker/SiStripChannelGain
// Class: SiStripGainsPCLWorker
//
/**\class SiStripGainsPCLWorker SiStripGainsPCLWorker.cc
Description: Fill DQM histograms with SiStrip Charge normalized to path length
*/
//
// Original Author: L. Quertermont (calibration algorithm)
// Contributors: M. Verzetti (data access)
// A. Di Mattia (PCL multi stream processing and monitoring)
// M. Delcourt (monitoring)
// M. Musich (migration to thread-safe DQMStore access)
// P. David (merge ShallowGainCalibration with SiStripGainsPCLWorker)
//
// Created: Wed, 12 Apr 2017 14:46:48 GMT
//
// CMSSW includes
#include "CalibFormats/SiStripObjects/interface/SiStripDetCabling.h"
#include "CalibFormats/SiStripObjects/interface/SiStripGain.h"
#include "CalibFormats/SiStripObjects/interface/SiStripQuality.h"
#include "CalibTracker/Records/interface/SiStripDetCablingRcd.h"
#include "CalibTracker/Records/interface/SiStripGainRcd.h"
#include "CalibTracker/Records/interface/SiStripQualityRcd.h"
#include "CondFormats/SiStripObjects/interface/SiStripApvGain.h"
#include "DQMServices/Core/interface/DQMGlobalEDAnalyzer.h"
#include "DQMServices/Core/interface/DQMStore.h"
#include "DataFormats/DetId/interface/DetId.h"
#include "DataFormats/FEDRawData/interface/FEDNumbering.h"
#include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
#include "DataFormats/GeometrySurface/interface/RectangularPlaneBounds.h"
#include "DataFormats/GeometrySurface/interface/TrapezoidalPlaneBounds.h"
#include "DataFormats/SiStripCluster/interface/SiStripClusterCollection.h"
#include "DataFormats/SiStripDetId/interface/StripSubdetector.h"
#include "DataFormats/TrackReco/interface/Track.h"
#include "DataFormats/TrackReco/interface/TrackFwd.h"
#include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
#include "DataFormats/TrackerRecHit2D/interface/SiStripMatchedRecHit2D.h"
#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit1D.h"
#include "DataFormats/TrackerRecHit2D/interface/SiStripRecHit2D.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"
#include "FWCore/Framework/interface/MakerMacros.h"
#include "FWCore/ParameterSet/interface/ParameterSet.h"
#include "FWCore/ServiceRegistry/interface/Service.h"
#include "FWCore/Utilities/interface/EDGetToken.h"
#include "FWCore/Utilities/interface/Exception.h"
#include "FWCore/Framework/interface/ESWatcher.h"
#include "Geometry/CommonDetUnit/interface/GeomDetType.h"
#include "Geometry/CommonDetUnit/interface/GeomDet.h"
#include "Geometry/CommonDetUnit/interface/TrackingGeometry.h"
#include "Geometry/CommonTopologies/interface/StripTopology.h"
#include "Geometry/Records/interface/TrackerDigiGeometryRecord.h"
#include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
#include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
#include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
#include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
#include "TrackingTools/PatternTools/interface/TrajTrackAssociation.h"
#include "TrackingTools/PatternTools/interface/Trajectory.h"
/// user includes
#include "CalibTracker/SiStripChannelGain/interface/APVGainStruct.h"
#include "CalibTracker/SiStripChannelGain/interface/APVGainHelpers.h"
// System includes
#include <unordered_map>
//
// class declaration
//
class SiStripGainsPCLWorker : public DQMGlobalEDAnalyzer<APVGain::APVGainHistograms> {
public:
explicit SiStripGainsPCLWorker(const edm::ParameterSet &);
void bookHistograms(DQMStore::IBooker &,
edm::Run const &,
edm::EventSetup const &,
APVGain::APVGainHistograms &) const override;
void dqmAnalyze(edm::Event const &, edm::EventSetup const &, APVGain::APVGainHistograms const &) const override;
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions);
private:
void dqmBeginRun(edm::Run const &, edm::EventSetup const &, APVGain::APVGainHistograms &) const override;
void checkBookAPVColls(const TrackerGeometry *bareTkGeomPtr,
const TrackerTopology *bareTkTopoPtr,
APVGain::APVGainHistograms &histograms) const;
std::vector<std::string> dqm_tag_;
int statCollectionFromMode(const char *tag) const;
double MinTrackMomentum;
double MaxTrackMomentum;
double MinTrackEta;
double MaxTrackEta;
unsigned int MaxNrStrips;
unsigned int MinTrackHits;
double MaxTrackChiOverNdf;
int MaxTrackingIteration;
bool AllowSaturation;
bool FirstSetOfConstants;
bool Validation;
bool OldGainRemoving;
bool useCalibration;
bool doChargeMonitorPerPlane; /*!< Charge monitor per detector plane */
std::string m_DQMdir; /*!< DQM folder hosting the charge statistics and the monitor plots */
std::string m_calibrationMode; /*!< Type of statistics for the calibration */
std::vector<std::string> VChargeHisto; /*!< Charge monitor plots to be output */
edm::EDGetTokenT<edm::View<reco::Track>> m_tracks_token;
edm::EDGetTokenT<TrajTrackAssociationCollection> m_association_token;
edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> tTopoTokenBR_, tTopoToken_;
edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> tkGeomTokenBR_, tkGeomToken_;
edm::ESGetToken<SiStripGain, SiStripGainRcd> gainToken_;
edm::ESGetToken<SiStripQuality, SiStripQualityRcd> qualityToken_;
// maps histograms index to topology
std::map<unsigned int, APVloc> theTopologyMap;
};
inline int SiStripGainsPCLWorker::statCollectionFromMode(const char *tag) const {
std::vector<std::string>::const_iterator it = dqm_tag_.begin();
while (it != dqm_tag_.end()) {
if (*it == std::string(tag))
return it - dqm_tag_.begin();
it++;
}
if (std::string(tag).empty())
return 0; // return StdBunch calibration mode for backward compatibility
return None;
}
|