CMS 3D CMS Logo

EtlLocalRecoValidation.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Validation/MtdValidation
4 // Class: EtlLocalRecoValidation
5 //
14 #include <string>
15 
20 
23 
28 
32 
34 public:
36  ~EtlLocalRecoValidation() override;
37 
38  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
39 
40 private:
41  void bookHistograms(DQMStore::IBooker&, edm::Run const&, edm::EventSetup const&) override;
42 
43  void analyze(const edm::Event&, const edm::EventSetup&) override;
44 
45  // ------------ member data ------------
46 
48  const float hitMinEnergy_;
49 
52 
53  // --- histograms declaration
54 
56 
59 
61 
67 
73 
80 };
81 
82 // ------------ constructor and destructor --------------
84  : folder_(iConfig.getParameter<std::string>("folder")),
85  hitMinEnergy_(iConfig.getParameter<double>("hitMinimumEnergy")) {
86  etlRecHitsToken_ = consumes<FTLRecHitCollection>(iConfig.getParameter<edm::InputTag>("recHitsTag"));
87  etlRecCluToken_ = consumes<FTLClusterCollection>(iConfig.getParameter<edm::InputTag>("recCluTag"));
88 }
89 
91 
92 // ------------ method called for each event ------------
94  using namespace edm;
95 
96  edm::ESHandle<MTDGeometry> geometryHandle;
97  iSetup.get<MTDDigiGeometryRecord>().get(geometryHandle);
98  const MTDGeometry* geom = geometryHandle.product();
99 
100  auto etlRecHitsHandle = makeValid(iEvent.getHandle(etlRecHitsToken_));
101  auto etlRecCluHandle = makeValid(iEvent.getHandle(etlRecCluToken_));
102 
103  // --- Loop over the ELT RECO hits
104 
105  unsigned int n_reco_etl[2] = {0, 0};
106 
107  for (const auto& recHit : *etlRecHitsHandle) {
108  ETLDetId detId = recHit.id();
109 
110  DetId geoId = detId.geographicalId();
111  const MTDGeomDet* thedet = geom->idToDet(geoId);
112  if (thedet == nullptr)
113  throw cms::Exception("EtlLocalRecoValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
114  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
115  const PixelTopology& topo = static_cast<const PixelTopology&>(thedet->topology());
116 
117  Local3DPoint local_point(topo.localX(recHit.row()), topo.localY(recHit.column()), 0.);
118  const auto& global_point = thedet->toGlobal(local_point);
119 
120  // --- Fill the histograms
121 
122  int idet = (detId.zside() + 1) / 2;
123 
124  meHitEnergy_[idet]->Fill(recHit.energy());
125  meHitTime_[idet]->Fill(recHit.time());
126 
127  meOccupancy_[idet]->Fill(global_point.x(), global_point.y());
128 
129  meHitX_[idet]->Fill(global_point.x());
130  meHitY_[idet]->Fill(global_point.y());
131  meHitZ_[idet]->Fill(global_point.z());
132  meHitPhi_[idet]->Fill(global_point.phi());
133  meHitEta_[idet]->Fill(global_point.eta());
134 
135  meHitTvsE_[idet]->Fill(recHit.energy(), recHit.time());
136  meHitEvsPhi_[idet]->Fill(global_point.phi(), recHit.energy());
137  meHitEvsEta_[idet]->Fill(global_point.eta(), recHit.energy());
138  meHitTvsPhi_[idet]->Fill(global_point.phi(), recHit.time());
139  meHitTvsEta_[idet]->Fill(global_point.eta(), recHit.time());
140 
141  n_reco_etl[idet]++;
142 
143  } // recHit loop
144 
145  meNhits_[0]->Fill(n_reco_etl[0]);
146  meNhits_[1]->Fill(n_reco_etl[1]);
147 
148  // --- Loop over the ETL RECO clusters ---
149  for (const auto& DetSetClu : *etlRecCluHandle) {
150  for (const auto& cluster : DetSetClu) {
151  if (cluster.energy() < hitMinEnergy_)
152  continue;
153  ETLDetId cluId = cluster.id();
154  DetId detIdObject(cluId);
155  const auto& genericDet = geom->idToDetUnit(detIdObject);
156  if (genericDet == nullptr) {
157  throw cms::Exception("EtlLocalRecoValidation")
158  << "GeographicalID: " << std::hex << cluId << " is invalid!" << std::dec << std::endl;
159  }
160 
161  //const ProxyMTDTopology& topoproxy = static_cast<const ProxyMTDTopology&>(genericDet->topology());
162  //const RectangularMTDTopology& topo = static_cast<const RectangularMTDTopology&>(topoproxy.specificTopology());
163  const PixelTopology& topo = static_cast<const PixelTopology&>(genericDet->topology());
164 
165  Local3DPoint local_point(topo.localX(cluster.x()), topo.localY(cluster.y()), 0.);
166  //Local3DPoint local_point(topo.localX(cluster.x()), topo.localY(cluster.y()), 0.);
167  const auto& global_point = genericDet->toGlobal(local_point);
168 
169  int idet = (cluId.zside() + 1) / 2;
170 
171  meCluEnergy_[idet]->Fill(cluster.energy());
172  meCluTime_[idet]->Fill(cluster.time());
173  meCluPhi_[idet]->Fill(global_point.phi());
174  meCluEta_[idet]->Fill(global_point.eta());
175  meCluOccupancy_[idet]->Fill(global_point.x(), global_point.y());
176  meCluHits_[idet]->Fill(cluster.size());
177  }
178  }
179 }
180 
181 // ------------ method for histogram booking ------------
183  edm::Run const& run,
184  edm::EventSetup const& iSetup) {
185  ibook.setCurrentFolder(folder_);
186 
187  // --- histograms booking
188 
189  meNhits_[0] = ibook.book1D("EtlNhitsZneg", "Number of ETL RECO hits (-Z);N_{RECO}", 100, 0., 5000.);
190  meNhits_[1] = ibook.book1D("EtlNhitsZpos", "Number of ETL RECO hits (+Z);N_{RECO}", 100, 0., 5000.);
191 
192  meHitEnergy_[0] = ibook.book1D("EtlHitEnergyZneg", "ETL RECO hits energy (-Z);E_{RECO} [MeV]", 100, 0., 3.);
193  meHitEnergy_[1] = ibook.book1D("EtlHitEnergyZpos", "ETL RECO hits energy (+Z);E_{RECO} [MeV]", 100, 0., 3.);
194 
195  meHitTime_[0] = ibook.book1D("EtlHitTimeZneg", "ETL RECO hits ToA (-Z);ToA_{RECO} [ns]", 100, 0., 25.);
196  meHitTime_[1] = ibook.book1D("EtlHitTimeZpos", "ETL RECO hits ToA (+Z);ToA_{RECO} [ns]", 100, 0., 25.);
197 
198  meOccupancy_[0] = ibook.book2D("EtlOccupancyZneg",
199  "ETL RECO hits occupancy (-Z);X_{RECO} [cm];Y_{RECO} [cm]",
200  135,
201  -135.,
202  135.,
203  135,
204  -135.,
205  135.);
206  meOccupancy_[1] = ibook.book2D("EtlOccupancyZpos",
207  "ETL DIGI hits occupancy (+Z);X_{RECO} [cm];Y_{RECO} [cm]",
208  135,
209  -135.,
210  135.,
211  135,
212  -135.,
213  135.);
214 
215  meHitX_[1] = ibook.book1D("EtlHitXZpos", "ETL RECO hits X (+Z);X_{RECO} [cm]", 100, -130., 130.);
216  meHitX_[0] = ibook.book1D("EtlHitXZneg", "ETL RECO hits X (-Z);X_{RECO} [cm]", 100, -130., 130.);
217  meHitY_[1] = ibook.book1D("EtlHitYZpos", "ETL RECO hits Y (+Z);Y_{RECO} [cm]", 100, -130., 130.);
218  meHitY_[0] = ibook.book1D("EtlHitYZneg", "ETL RECO hits Y (-Z);Y_{RECO} [cm]", 100, -130., 130.);
219  meHitZ_[1] = ibook.book1D("EtlHitZZpos", "ETL RECO hits Z (+Z);Z_{RECO} [cm]", 100, 303.4, 304.2);
220  meHitZ_[0] = ibook.book1D("EtlHitZZneg", "ETL RECO hits Z (-Z);Z_{RECO} [cm]", 100, -304.2, -303.4);
221 
222  meHitPhi_[1] = ibook.book1D("EtlHitPhiZpos", "ETL RECO hits #phi (+Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
223  meHitPhi_[0] = ibook.book1D("EtlHitPhiZneg", "ETL RECO hits #phi (-Z);#phi_{RECO} [rad]", 100, -3.2, 3.2);
224  meHitEta_[1] = ibook.book1D("EtlHitEtaZpos", "ETL RECO hits #eta (+Z);#eta_{RECO}", 100, 1.56, 3.2);
225  meHitEta_[0] = ibook.book1D("EtlHitEtaZneg", "ETL RECO hits #eta (-Z);#eta_{RECO}", 100, -3.2, -1.56);
226 
227  meHitTvsE_[1] = ibook.bookProfile(
228  "EtlHitTvsEZpos", "ETL RECO time vs energy (+Z);E_{RECO} [MeV];ToA_{RECO} [ns]", 50, 0., 2., 0., 100.);
229  meHitTvsE_[0] = ibook.bookProfile(
230  "EtlHitTvsEZneg", "ETL RECO time vs energy (-Z);E_{RECO} [MeV];ToA_{RECO} [ns]", 50, 0., 2., 0., 100.);
231  meHitEvsPhi_[1] = ibook.bookProfile(
232  "EtlHitEvsPhiZpos", "ETL RECO energy vs #phi (+Z);#phi_{RECO} [rad];E_{RECO} [MeV]", 50, -3.2, 3.2, 0., 100.);
233  meHitEvsPhi_[0] = ibook.bookProfile(
234  "EtlHitEvsPhiZneg", "ETL RECO energy vs #phi (-Z);#phi_{RECO} [rad];E_{RECO} [MeV]", 50, -3.2, 3.2, 0., 100.);
235  meHitEvsEta_[1] = ibook.bookProfile(
236  "EtlHitEvsEtaZpos", "ETL RECO energy vs #eta (+Z);#eta_{RECO};E_{RECO} [MeV]", 50, 1.56, 3.2, 0., 100.);
237  meHitEvsEta_[0] = ibook.bookProfile(
238  "EtlHitEvsEtaZneg", "ETL RECO energy vs #eta (-Z);#eta_{RECO};E_{RECO} [MeV]", 50, -3.2, -1.56, 0., 100.);
239  meHitTvsPhi_[1] = ibook.bookProfile(
240  "EtlHitTvsPhiZpos", "ETL RECO time vs #phi (+Z);#phi_{RECO} [rad];ToA_{RECO} [ns]", 50, -3.2, 3.2, 0., 100.);
241  meHitTvsPhi_[0] = ibook.bookProfile(
242  "EtlHitTvsPhiZneg", "ETL RECO time vs #phi (-Z);#phi_{RECO} [rad];ToA_{RECO} [ns]", 50, -3.2, 3.2, 0., 100.);
243  meHitTvsEta_[1] = ibook.bookProfile(
244  "EtlHitTvsEtaZpos", "ETL RECO time vs #eta (+Z);#eta_{RECO};ToA_{RECO} [ns]", 50, 1.56, 3.2, 0., 100.);
245  meHitTvsEta_[0] = ibook.bookProfile(
246  "EtlHitTvsEtaZneg", "ETL RECO time vs #eta (-Z);#eta_{RECO};ToA_{RECO} [ns]", 50, -3.2, -1.56, 0., 100.);
247  meCluTime_[0] = ibook.book1D("EtlCluTimeZneg", "ETL cluster ToA (-Z);ToA [ns]", 250, 0, 25);
248  meCluTime_[1] = ibook.book1D("EtlCluTimeZpos", "ETL cluster ToA (+Z);ToA [ns]", 250, 0, 25);
249  meCluEnergy_[0] = ibook.book1D("EtlCluEnergyZneg", "ETL cluster energy (-Z);E_{RECO} [MeV]", 100, 0, 10);
250  meCluEnergy_[1] = ibook.book1D("EtlCluEnergyZpos", "ETL cluster energy (+Z);E_{RECO} [MeV]", 100, 0, 10);
251  meCluPhi_[0] = ibook.book1D("EtlCluPhiZneg", "ETL cluster #phi (-Z);#phi_{RECO} [rad]", 126, -3.2, 3.2);
252  meCluPhi_[1] = ibook.book1D("EtlCluPhiZpos", "ETL cluster #phi (+Z);#phi_{RECO} [rad]", 126, -3.2, 3.2);
253  meCluEta_[0] = ibook.book1D("EtlCluEtaZneg", "ETL cluster #eta (-Z);#eta_{RECO}", 100, -3.2, -1.4);
254  meCluEta_[1] = ibook.book1D("EtlCluEtaZpos", "ETL cluster #eta (+Z);#eta_{RECO}", 100, 1.4, 3.2);
255  meCluHits_[0] = ibook.book1D("EtlCluHitNumberZneg", "ETL hits per cluster (-Z);Cluster size", 10, 0, 10);
256  meCluHits_[1] = ibook.book1D("EtlCluHitNumberZpos", "ETL hits per cluster (+Z);Cluster size", 10, 0, 10);
257  meCluOccupancy_[0] = ibook.book2D(
258  "EtlOccupancyZneg", "ETL cluster X vs Y (-Z);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., 150., 100, -150, 150);
259  meCluOccupancy_[1] = ibook.book2D(
260  "EtlOccupancyZpos", "ETL cluster X vs Y (+Z);X_{RECO} [cm]; Y_{RECO} [cm]", 100, -150., 150., 100, -150, 150);
261 }
262 
263 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
266 
267  desc.add<std::string>("folder", "MTD/ETL/LocalReco");
268  desc.add<edm::InputTag>("recHitsTag", edm::InputTag("mtdRecHits", "FTLEndcap"));
269  desc.add<edm::InputTag>("recCluTag", edm::InputTag("mtdClusters", "FTLEndcap"));
270  desc.add<double>("hitMinimumEnergy", 1.); // [MeV]
271 
272  descriptions.add("etlLocalReco", desc);
273 }
274 
MTDDigiGeometryRecord
Definition: MTDDigiGeometryRecord.h:15
edm::ESHandle::product
T const * product() const
Definition: ESHandle.h:86
EtlLocalRecoValidation::bookHistograms
void bookHistograms(DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
Definition: EtlLocalRecoValidation.cc:182
dqm::impl::MonitorElement
Definition: MonitorElement.h:98
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
EtlLocalRecoValidation::meHitTvsE_
MonitorElement * meHitTvsE_[2]
Definition: EtlLocalRecoValidation.cc:68
EtlLocalRecoValidation::meHitTvsPhi_
MonitorElement * meHitTvsPhi_[2]
Definition: EtlLocalRecoValidation.cc:71
PixelTopology.h
EtlLocalRecoValidation::meCluEnergy_
MonitorElement * meCluEnergy_[2]
Definition: EtlLocalRecoValidation.cc:75
edm::Run
Definition: Run.h:45
EtlLocalRecoValidation::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: EtlLocalRecoValidation.cc:264
edm::EDGetTokenT
Definition: EDGetToken.h:33
edm
HLT enums.
Definition: AlignableModifier.h:19
MTDGeometry.h
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
TrackerGeomDet
Definition: TrackerGeomDet.h:6
dqm::implementation::NavigatorBase::setCurrentFolder
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:32
EtlLocalRecoValidation::meHitZ_
MonitorElement * meHitZ_[2]
Definition: EtlLocalRecoValidation.cc:64
MTDDigiGeometryRecord.h
EtlLocalRecoValidation::meNhits_
MonitorElement * meNhits_[2]
Definition: EtlLocalRecoValidation.cc:55
EtlLocalRecoValidation::meHitPhi_
MonitorElement * meHitPhi_[2]
Definition: EtlLocalRecoValidation.cc:65
DQMStore.h
GeomDet::topology
virtual const Topology & topology() const
Definition: GeomDet.cc:67
EtlLocalRecoValidation::meHitEnergy_
MonitorElement * meHitEnergy_[2]
Definition: EtlLocalRecoValidation.cc:57
ETLDetId
Detector identifier class for the Endcap Timing Layer.
Definition: ETLDetId.h:15
EtlLocalRecoValidation::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: EtlLocalRecoValidation.cc:93
ETLDetId.h
EtlLocalRecoValidation::meHitEvsPhi_
MonitorElement * meHitEvsPhi_[2]
Definition: EtlLocalRecoValidation.cc:69
EtlLocalRecoValidation
Definition: EtlLocalRecoValidation.cc:33
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
DetId
Definition: DetId.h:17
MakerMacros.h
EtlLocalRecoValidation::folder_
const std::string folder_
Definition: EtlLocalRecoValidation.cc:47
EtlLocalRecoValidation::meHitEvsEta_
MonitorElement * meHitEvsEta_[2]
Definition: EtlLocalRecoValidation.cc:70
EtlLocalRecoValidation::etlRecCluToken_
edm::EDGetTokenT< FTLClusterCollection > etlRecCluToken_
Definition: EtlLocalRecoValidation.cc:51
edm::EventSetup::get
T get() const
Definition: EventSetup.h:73
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
EtlLocalRecoValidation::meCluPhi_
MonitorElement * meCluPhi_[2]
Definition: EtlLocalRecoValidation.cc:76
dqm::impl::MonitorElement::Fill
void Fill(long long x)
Definition: MonitorElement.h:290
edm::ESHandle
Definition: DTSurvey.h:22
dqm::implementation::IBooker::bookProfile
MonitorElement * bookProfile(TString const &name, TString const &title, int nchX, double lowX, double highX, int, double lowY, double highY, char const *option="s", FUNC onbooking=NOOP())
Definition: DQMStore.h:322
relativeConstraints.geom
geom
Definition: relativeConstraints.py:72
MTDDetId::zside
int zside() const
Definition: MTDDetId.h:61
ETLDetId::geographicalId
ETLDetId geographicalId() const
Definition: ETLDetId.h:81
Point3DBase< float, LocalTag >
PixelTopology
Definition: PixelTopology.h:10
DQMEDAnalyzer.h
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
ValidHandle.h
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
EtlLocalRecoValidation::meHitY_
MonitorElement * meHitY_[2]
Definition: EtlLocalRecoValidation.cc:63
folder_
std::string folder_
Definition: DQMEDAnalyzer.cc:60
DQMEDAnalyzer
Definition: DQMEDAnalyzer.py:1
GeomDet::toGlobal
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
edm::ParameterSet
Definition: ParameterSet.h:36
Event.h
EtlLocalRecoValidation::meHitEta_
MonitorElement * meHitEta_[2]
Definition: EtlLocalRecoValidation.cc:66
EtlLocalRecoValidation::meHitTime_
MonitorElement * meHitTime_[2]
Definition: EtlLocalRecoValidation.cc:58
EtlLocalRecoValidation::meCluOccupancy_
MonitorElement * meCluOccupancy_[2]
Definition: EtlLocalRecoValidation.cc:79
iEvent
int iEvent
Definition: GenABIO.cc:224
edm::EventSetup
Definition: EventSetup.h:57
EtlLocalRecoValidation::meOccupancy_
MonitorElement * meOccupancy_[2]
Definition: EtlLocalRecoValidation.cc:60
edm::makeValid
auto makeValid(const U &iOtherHandleType) noexcept(false)
Definition: ValidHandle.h:52
get
#define get
EtlLocalRecoValidation::meHitTvsEta_
MonitorElement * meHitTvsEta_[2]
Definition: EtlLocalRecoValidation.cc:72
FTLRecHitCollections.h
EtlLocalRecoValidation::meCluHits_
MonitorElement * meCluHits_[2]
Definition: EtlLocalRecoValidation.cc:78
EtlLocalRecoValidation::meCluTime_
MonitorElement * meCluTime_[2]
Definition: EtlLocalRecoValidation.cc:74
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
MTDGeometry
Definition: MTDGeometry.h:14
EtlLocalRecoValidation::hitMinEnergy_
const float hitMinEnergy_
Definition: EtlLocalRecoValidation.cc:48
std
Definition: JetResolutionObject.h:76
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
writedatasetfile.run
run
Definition: writedatasetfile.py:27
EtlLocalRecoValidation::meHitX_
MonitorElement * meHitX_[2]
Definition: EtlLocalRecoValidation.cc:62
Frameworkfwd.h
EtlLocalRecoValidation::~EtlLocalRecoValidation
~EtlLocalRecoValidation() override
Definition: EtlLocalRecoValidation.cc:90
dqm::implementation::IBooker::book2D
MonitorElement * book2D(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:177
Exception
Definition: hltDiff.cc:246
PixelTopology::localY
virtual float localY(float mpY) const =0
EtlLocalRecoValidation::meCluEta_
MonitorElement * meCluEta_[2]
Definition: EtlLocalRecoValidation.cc:77
dqm::implementation::IBooker
Definition: DQMStore.h:43
PixelTopology::localX
virtual float localX(float mpX) const =0
ParameterSet.h
EtlLocalRecoValidation::EtlLocalRecoValidation
EtlLocalRecoValidation(const edm::ParameterSet &)
Definition: EtlLocalRecoValidation.cc:83
edm::Event
Definition: Event.h:73
FTLClusterCollections.h
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
edm::InputTag
Definition: InputTag.h:15
dqm::implementation::IBooker::book1D
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
EtlLocalRecoValidation::etlRecHitsToken_
edm::EDGetTokenT< FTLRecHitCollection > etlRecHitsToken_
Definition: EtlLocalRecoValidation.cc:50