CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
EtlLocalRecoValidation Class Reference

#include <Validation/MtdValidation/plugins/EtlLocalRecoValidation.cc>

Inheritance diagram for EtlLocalRecoValidation:
DQMEDAnalyzer edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >

Public Member Functions

 EtlLocalRecoValidation (const edm::ParameterSet &)
 
 ~EtlLocalRecoValidation () override
 
- Public Member Functions inherited from DQMEDAnalyzer
void accumulate (edm::Event const &event, edm::EventSetup const &setup) final
 
void beginLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void beginRun (edm::Run const &run, edm::EventSetup const &setup) final
 
void beginStream (edm::StreamID id) final
 
virtual void dqmBeginRun (edm::Run const &, edm::EventSetup const &)
 
 DQMEDAnalyzer ()
 
void endLuminosityBlock (edm::LuminosityBlock const &lumi, edm::EventSetup const &setup) final
 
void endRun (edm::Run const &run, edm::EventSetup const &setup) final
 
virtual bool getCanSaveByLumi ()
 
- Public Member Functions inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from DQMEDAnalyzer
static void globalEndJob (DQMEDAnalyzerGlobalCache const *)
 
static void globalEndLuminosityBlockProduce (edm::LuminosityBlock &lumi, edm::EventSetup const &setup, LuminosityBlockContext const *context)
 
static void globalEndRunProduce (edm::Run &run, edm::EventSetup const &setup, RunContext const *context)
 
static std::unique_ptr< DQMEDAnalyzerGlobalCacheinitializeGlobalCache (edm::ParameterSet const &)
 

Private Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 
void bookHistograms (DQMStore::IBooker &, edm::Run const &, edm::EventSetup const &) override
 
bool isSameCluster (const FTLCluster &, const FTLCluster &)
 

Private Attributes

const edm::ESGetToken< MTDClusterParameterEstimator, MTDCPERecordcpeToken_
 
edm::EDGetTokenT< FTLClusterCollectionetlRecCluToken_
 
edm::EDGetTokenT< FTLRecHitCollectionetlRecHitsToken_
 
edm::EDGetTokenT< CrossingFrame< PSimHit > > etlSimHitsToken_
 
edm::EDGetTokenT< FTLUncalibratedRecHitCollectionetlUncalibRecHitsToken_
 
const std::string folder_
 
const double hitMinAmplitude_
 
const float hitMinEnergy2Dis_
 
MonitorElementmeCluEnergy_ [4]
 
MonitorElementmeCluEnergyRes_ [2]
 
MonitorElementmeCluEta_ [4]
 
MonitorElementmeCluHits_ [4]
 
MonitorElementmeCluOccupancy_ [4]
 
MonitorElementmeCluPhi_ [4]
 
MonitorElementmeCluTime_ [4]
 
MonitorElementmeCluTimeError_ [4]
 
MonitorElementmeCluTimeRes_ [2]
 
MonitorElementmeCluTPullvsE_ [2]
 
MonitorElementmeCluTPullvsEta_ [2]
 
MonitorElementmeCluXLocalErr_ [2]
 
MonitorElementmeCluXPull_ [2]
 
MonitorElementmeCluXRes_ [2]
 
MonitorElementmeCluYLocalErr_ [2]
 
MonitorElementmeCluYPull_ [2]
 
MonitorElementmeCluYRes_ [2]
 
MonitorElementmeCluYXLocal_ [2]
 
MonitorElementmeCluYXLocalSim_ [2]
 
MonitorElementmeCluZRes_ [2]
 
MonitorElementmeEnergyRes_
 
MonitorElementmeHitEnergy_ [4]
 
MonitorElementmeHitEta_ [4]
 
MonitorElementmeHitEvsEta_ [4]
 
MonitorElementmeHitEvsPhi_ [4]
 
MonitorElementmeHitPhi_ [4]
 
MonitorElementmeHitTime_ [4]
 
MonitorElementmeHitTimeError_ [4]
 
MonitorElementmeHitTvsE_ [4]
 
MonitorElementmeHitTvsEta_ [4]
 
MonitorElementmeHitTvsPhi_ [4]
 
MonitorElementmeHitX_ [4]
 
MonitorElementmeHitXlocal_ [2]
 
MonitorElementmeHitY_ [4]
 
MonitorElementmeHitYlocal_ [2]
 
MonitorElementmeHitZ_ [4]
 
MonitorElementmeLocalOccupancy_ [2]
 
MonitorElementmeNhits_ [4]
 
MonitorElementmeOccupancy_ [4]
 
MonitorElementmeTimeRes_
 
MonitorElementmeTimeResEta_ [2][nBinsEta_]
 
MonitorElementmeTimeResQ_ [2][nBinsQ_]
 
MonitorElementmeTPullvsE_
 
MonitorElementmeTPullvsEta_
 
MonitorElementmeUnmatchedCluEnergy_ [2]
 
const edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecordmtdgeoToken_
 
const edm::ESGetToken< MTDTopology, MTDTopologyRcdmtdtopoToken_
 
edm::EDGetTokenT< MTDTrackingDetSetVectormtdTrackingHitToken_
 
const bool optionalPlots_
 
const bool uncalibRecHitsPlots_
 

Static Private Attributes

static constexpr float binWidthEta_ = 0.05
 
static constexpr float binWidthQ_ = 1.3
 
static constexpr float etaMin_ = 1.65
 
static constexpr int nBinsEta_ = 26
 
static constexpr int nBinsQ_ = 20
 

Additional Inherited Members

- Public Types inherited from DQMEDAnalyzer
typedef dqm::reco::DQMStore DQMStore
 
typedef dqm::reco::MonitorElement MonitorElement
 
- Public Types inherited from edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 
- Protected Member Functions inherited from DQMEDAnalyzer
uint64_t meId () const
 
- Protected Attributes inherited from DQMEDAnalyzer
edm::EDPutTokenT< DQMTokenlumiToken_
 
edm::EDPutTokenT< DQMTokenrunToken_
 
unsigned int streamId_
 

Detailed Description

Description: ETL RECO hits and clusters validation

Implementation: [Notes on implementation]

Definition at line 47 of file EtlLocalRecoValidation.cc.

Constructor & Destructor Documentation

◆ EtlLocalRecoValidation()

EtlLocalRecoValidation::EtlLocalRecoValidation ( const edm::ParameterSet iConfig)
explicit

Definition at line 153 of file EtlLocalRecoValidation.cc.

References etlRecCluToken_, etlRecHitsToken_, etlSimHitsToken_, etlUncalibRecHitsToken_, edm::ParameterSet::getParameter(), mtdTrackingHitToken_, and uncalibRecHitsPlots_.

154  : folder_(iConfig.getParameter<std::string>("folder")),
155  hitMinEnergy2Dis_(iConfig.getParameter<double>("hitMinimumEnergy2Dis")),
156  optionalPlots_(iConfig.getParameter<bool>("optionalPlots")),
157  uncalibRecHitsPlots_(iConfig.getParameter<bool>("UncalibRecHitsPlots")),
158  hitMinAmplitude_(iConfig.getParameter<double>("HitMinimumAmplitude")),
159  mtdgeoToken_(esConsumes<MTDGeometry, MTDDigiGeometryRecord>()),
160  mtdtopoToken_(esConsumes<MTDTopology, MTDTopologyRcd>()),
161  cpeToken_(esConsumes<MTDClusterParameterEstimator, MTDCPERecord>(edm::ESInputTag("", "MTDCPEBase"))) {
162  etlRecHitsToken_ = consumes<FTLRecHitCollection>(iConfig.getParameter<edm::InputTag>("recHitsTag"));
165  consumes<FTLUncalibratedRecHitCollection>(iConfig.getParameter<edm::InputTag>("uncalibRecHitsTag"));
166  etlSimHitsToken_ = consumes<CrossingFrame<PSimHit> >(iConfig.getParameter<edm::InputTag>("simHitsTag"));
167  etlRecCluToken_ = consumes<FTLClusterCollection>(iConfig.getParameter<edm::InputTag>("recCluTag"));
168  mtdTrackingHitToken_ = consumes<MTDTrackingDetSetVector>(iConfig.getParameter<edm::InputTag>("trkHitTag"));
169 }
T getParameter(std::string const &) const
Definition: ParameterSet.h:307
edm::EDGetTokenT< FTLUncalibratedRecHitCollection > etlUncalibRecHitsToken_
edm::EDGetTokenT< CrossingFrame< PSimHit > > etlSimHitsToken_
const edm::ESGetToken< MTDClusterParameterEstimator, MTDCPERecord > cpeToken_
edm::EDGetTokenT< FTLRecHitCollection > etlRecHitsToken_
edm::EDGetTokenT< MTDTrackingDetSetVector > mtdTrackingHitToken_
const edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
const edm::ESGetToken< MTDTopology, MTDTopologyRcd > mtdtopoToken_
edm::EDGetTokenT< FTLClusterCollection > etlRecCluToken_

◆ ~EtlLocalRecoValidation()

EtlLocalRecoValidation::~EtlLocalRecoValidation ( )
override

Definition at line 171 of file EtlLocalRecoValidation.cc.

171 {}

Member Function Documentation

◆ analyze()

void EtlLocalRecoValidation::analyze ( const edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivatevirtual

Reimplemented from DQMEDAnalyzer.

Definition at line 174 of file EtlLocalRecoValidation.cc.

References funct::abs(), binWidthEta_, binWidthQ_, AlCaHLTBitMon_QueryRunRegistry::comp, angle_units::operators::convertMmToCm(), geant_units::operators::convertUnitsTo(), submitPVResolutionJobs::count, cpeToken_, TauDecayModes::dec, hcalRecHitTable_cff::detId, ETLDetId::discSide(), hcalRecHitTable_cff::energy, muonRecoAnalyzer_cfi::etaBin, etaMin_, etlRecCluToken_, etlRecHitsToken_, etlSimHitsToken_, etlUncalibRecHitsToken_, Exception, dqm::impl::MonitorElement::Fill(), relativeConstraints::geom, edm::EventSetup::getData(), edm::EventSetup::getTransientHandle(), hitMinAmplitude_, hitMinEnergy2Dis_, hfClusterShapes_cfi::hits, mps_fire::i, l1ctLayer2EG_cff::id, iEvent, createfilelist::int, isSameCluster(), RectangularMTDTopology::localX(), RectangularMTDTopology::localY(), LogDebug, edm::makeValid(), meCluEnergy_, meCluEnergyRes_, meCluEta_, meCluHits_, meCluOccupancy_, meCluPhi_, meCluTime_, meCluTimeError_, meCluTimeRes_, meCluTPullvsE_, meCluTPullvsEta_, meCluXLocalErr_, meCluXPull_, meCluXRes_, meCluYLocalErr_, meCluYPull_, meCluYRes_, meCluYXLocal_, meCluYXLocalSim_, meCluZRes_, meEnergyRes_, meHitEnergy_, meHitEta_, meHitEvsEta_, meHitEvsPhi_, meHitPhi_, meHitTime_, meHitTimeError_, meHitTvsE_, meHitTvsEta_, meHitTvsPhi_, meHitX_, meHitXlocal_, meHitY_, meHitYlocal_, meHitZ_, meLocalOccupancy_, meNhits_, meOccupancy_, meTimeRes_, meTimeResEta_, meTimeResQ_, meTPullvsE_, meTPullvsEta_, meUnmatchedCluEnergy_, ETLDetId::module(), mtdgeoToken_, MTDDetId::mtdRR(), mtdTrackingHitToken_, nBinsEta_, nBinsQ_, ETLDetId::nDisc(), optionalPlots_, ApeEstimator_cff::qBin, nano_mu_digi_cff::rawId, DetId::rawId(), rpcPointValidation_cfi::recHit, rpcPointValidation_cfi::simHit, ProxyMTDTopology::specificTopology(), mathSSE::sqrt(), hcalRecHitTable_cff::time, GeomDet::toGlobal(), GeomDet::topology(), mkLumiAveragedPlots::tuple, uncalibRecHitsPlots_, mps_merge::weight, x, PV3DBase< T, PVType, FrameType >::x(), hit::x, y, PV3DBase< T, PVType, FrameType >::y(), hit::y, z, PV3DBase< T, PVType, FrameType >::z(), MTDDetId::zside(), and ecaldqm::zside().

174  {
175  using namespace edm;
176  using namespace std;
177  using namespace geant_units::operators;
178 
179  auto geometryHandle = iSetup.getTransientHandle(mtdgeoToken_);
180  const MTDGeometry* geom = geometryHandle.product();
181 
182  auto const& cpe = iSetup.getData(cpeToken_);
183 
184  auto etlRecHitsHandle = makeValid(iEvent.getHandle(etlRecHitsToken_));
185  auto etlSimHitsHandle = makeValid(iEvent.getHandle(etlSimHitsToken_));
186  auto etlRecCluHandle = makeValid(iEvent.getHandle(etlRecCluToken_));
187  auto mtdTrkHitHandle = makeValid(iEvent.getHandle(mtdTrackingHitToken_));
188  MixCollection<PSimHit> etlSimHits(etlSimHitsHandle.product());
189 
190 #ifdef EDM_ML_DEBUG
191  for (const auto& hits : *mtdTrkHitHandle) {
192  if (MTDDetId(hits.id()).mtdSubDetector() == MTDDetId::MTDType::ETL) {
193  LogDebug("EtlLocalRecoValidation") << "MTD cluster DetId " << hits.id() << " # cluster " << hits.size();
194  for (const auto& hit : hits) {
195  LogDebug("EtlLocalRecoValidation")
196  << "MTD_TRH: " << hit.localPosition().x() << "," << hit.localPosition().y() << " : "
197  << hit.localPositionError().xx() << "," << hit.localPositionError().yy() << " : " << hit.time() << " : "
198  << hit.timeError();
199  }
200  }
201  }
202 #endif
203 
204  // --- Loop over the ETL SIM hits
205  std::unordered_map<uint32_t, MTDHit> m_etlSimHits[4];
206  for (auto const& simHit : etlSimHits) {
207  // --- Use only hits compatible with the in-time bunch-crossing
208  if (simHit.tof() < 0 || simHit.tof() > 25.)
209  continue;
210 
211  ETLDetId id = simHit.detUnitId();
212 
213  int idet = -1;
214 
215  if ((id.zside() == -1) && (id.nDisc() == 1)) {
216  idet = 0;
217  } else if ((id.zside() == -1) && (id.nDisc() == 2)) {
218  idet = 1;
219  } else if ((id.zside() == 1) && (id.nDisc() == 1)) {
220  idet = 2;
221  } else if ((id.zside() == 1) && (id.nDisc() == 2)) {
222  idet = 3;
223  } else {
224  edm::LogWarning("EtlLocalRecoValidation") << "Unknown ETL DetId configuration: " << id;
225  continue;
226  }
227 
228  auto simHitIt = m_etlSimHits[idet].emplace(id.rawId(), MTDHit()).first;
229 
230  // --- Accumulate the energy (in MeV) of SIM hits in the same detector cell
231  (simHitIt->second).energy += convertUnitsTo(0.001_MeV, simHit.energyLoss());
232 
233  // --- Get the time of the first SIM hit in the cell
234  if ((simHitIt->second).time == 0 || simHit.tof() < (simHitIt->second).time) {
235  (simHitIt->second).time = simHit.tof();
236 
237  auto hit_pos = simHit.localPosition();
238  (simHitIt->second).x = hit_pos.x();
239  (simHitIt->second).y = hit_pos.y();
240  (simHitIt->second).z = hit_pos.z();
241  }
242 
243  } // simHit loop
244 
245  // --- Loop over the ELT RECO hits
246  unsigned int n_reco_etl[4] = {0, 0, 0, 0};
247  for (const auto& recHit : *etlRecHitsHandle) {
248  double weight = 1.0;
249  ETLDetId detId = recHit.id();
250  DetId geoId = detId.geographicalId();
251  const MTDGeomDet* thedet = geom->idToDet(geoId);
252  if (thedet == nullptr)
253  throw cms::Exception("EtlLocalRecoValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
254  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
255  const ProxyMTDTopology& topoproxy = static_cast<const ProxyMTDTopology&>(thedet->topology());
256  const RectangularMTDTopology& topo = static_cast<const RectangularMTDTopology&>(topoproxy.specificTopology());
257 
258  Local3DPoint local_point(topo.localX(recHit.row()), topo.localY(recHit.column()), 0.);
259  const auto& global_point = thedet->toGlobal(local_point);
260 
261  int idet = 999;
262 
263  if (detId.discSide() == 1) {
264  weight = -weight;
265  }
266  if ((detId.zside() == -1) && (detId.nDisc() == 1)) {
267  idet = 0;
268  } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) {
269  idet = 1;
270  } else if ((detId.zside() == 1) && (detId.nDisc() == 1)) {
271  idet = 2;
272  } else if ((detId.zside() == 1) && (detId.nDisc() == 2)) {
273  idet = 3;
274  } else {
275  edm::LogWarning("EtlLocalRecoValidation") << "Unknown ETL DetId configuration: " << detId;
276  continue;
277  }
278 
279  // --- Fill the histograms
280 
281  meHitEnergy_[idet]->Fill(recHit.energy());
282  meHitTime_[idet]->Fill(recHit.time());
283  meHitTimeError_[idet]->Fill(recHit.timeError());
284 
285  if ((idet == 0) || (idet == 1)) {
286  meHitXlocal_[0]->Fill(local_point.x());
287  meHitYlocal_[0]->Fill(local_point.y());
288  }
289  if ((idet == 2) || (idet == 3)) {
290  meHitXlocal_[1]->Fill(local_point.x());
291  meHitYlocal_[1]->Fill(local_point.y());
292  }
293 
294  if (optionalPlots_) {
295  meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
296  if ((idet == 0) || (idet == 1)) {
297  meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y());
298  }
299  if ((idet == 2) || (idet == 3)) {
300  meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y());
301  }
302  }
303  meHitX_[idet]->Fill(global_point.x());
304  meHitY_[idet]->Fill(global_point.y());
305  meHitZ_[idet]->Fill(global_point.z());
306  meHitPhi_[idet]->Fill(global_point.phi());
307  meHitEta_[idet]->Fill(global_point.eta());
308  meHitTvsE_[idet]->Fill(recHit.energy(), recHit.time());
309  meHitEvsPhi_[idet]->Fill(global_point.phi(), recHit.energy());
310  meHitEvsEta_[idet]->Fill(global_point.eta(), recHit.energy());
311  meHitTvsPhi_[idet]->Fill(global_point.phi(), recHit.time());
312  meHitTvsEta_[idet]->Fill(global_point.eta(), recHit.time());
313 
314  // Resolution histograms
315  if (m_etlSimHits[idet].count(detId.rawId()) == 1) {
316  if (m_etlSimHits[idet][detId.rawId()].energy > hitMinEnergy2Dis_) {
317  float time_res = recHit.time() - m_etlSimHits[idet][detId.rawId()].time;
318  float energy_res = recHit.energy() - m_etlSimHits[idet][detId.rawId()].energy;
319 
320  meTimeRes_->Fill(time_res);
321  meEnergyRes_->Fill(energy_res);
322 
323  meTPullvsEta_->Fill(std::abs(global_point.eta()), time_res / recHit.timeError());
324  meTPullvsE_->Fill(m_etlSimHits[idet][detId.rawId()].energy, time_res / recHit.timeError());
325  }
326  }
327 
328  n_reco_etl[idet]++;
329  } // recHit loop
330 
331  for (int i = 0; i < 4; i++) {
332  meNhits_[i]->Fill(std::log10(n_reco_etl[i]));
333  }
334 
335  size_t index(0);
336 
337  // --- Loop over the ETL RECO clusters ---
338  for (const auto& DetSetClu : *etlRecCluHandle) {
339  for (const auto& cluster : DetSetClu) {
340  double weight = 1.0;
341  if (cluster.energy() < hitMinEnergy2Dis_) {
342  continue;
343  }
344  ETLDetId cluId = cluster.id();
345  DetId detIdObject(cluId);
346  const auto& genericDet = geom->idToDetUnit(detIdObject);
347  if (genericDet == nullptr) {
348  throw cms::Exception("EtlLocalRecoValidation")
349  << "GeographicalID: " << std::hex << cluId << " is invalid!" << std::dec << std::endl;
350  }
351 
352  MTDClusterParameterEstimator::ReturnType tuple = cpe.getParameters(cluster, *genericDet);
353 
354  // --- Cluster position in the module reference frame
355  LocalPoint local_point(std::get<0>(tuple));
356  const auto& global_point = genericDet->toGlobal(local_point);
357 
358  int idet = 999;
359 
360  if (cluId.discSide() == 1) {
361  weight = -weight;
362  }
363  if ((cluId.zside() == -1) && (cluId.nDisc() == 1)) {
364  idet = 0;
365  } else if ((cluId.zside() == -1) && (cluId.nDisc() == 2)) {
366  idet = 1;
367  } else if ((cluId.zside() == 1) && (cluId.nDisc() == 1)) {
368  idet = 2;
369  } else if ((cluId.zside() == 1) && (cluId.nDisc() == 2)) {
370  idet = 3;
371  } else {
372  edm::LogWarning("EtlLocalRecoValidation") << "Unknown ETL DetId configuration: " << cluId;
373  continue;
374  }
375 
376  index++;
377  LogDebug("EtlLocalRecoValidation") << "Cluster # " << index << " DetId " << cluId.rawId() << " idet " << idet;
378 
379  meCluEnergy_[idet]->Fill(cluster.energy());
380  meCluTime_[idet]->Fill(cluster.time());
381  meCluTimeError_[idet]->Fill(cluster.timeError());
382  meCluPhi_[idet]->Fill(global_point.phi());
383  meCluEta_[idet]->Fill(global_point.eta());
384  meCluHits_[idet]->Fill(cluster.size());
385  if (optionalPlots_) {
386  meCluOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
387  }
388 
389  // --- Get the SIM hits associated to the cluster and calculate
390  // the cluster SIM energy, time and position
391 
392  double cluEneSIM = 0.;
393  double cluTimeSIM = 0.;
394  double cluLocXSIM = 0.;
395  double cluLocYSIM = 0.;
396  double cluLocZSIM = 0.;
397 
398  for (int ihit = 0; ihit < cluster.size(); ++ihit) {
399  int hit_row = cluster.minHitRow() + cluster.hitOffset()[ihit * 2];
400  int hit_col = cluster.minHitCol() + cluster.hitOffset()[ihit * 2 + 1];
401 
402  // Match the RECO hit to the corresponding SIM hit
403  for (const auto& recHit : *etlRecHitsHandle) {
404  ETLDetId hitId(recHit.id().rawId());
405 
406  if (m_etlSimHits[idet].count(hitId.rawId()) == 0)
407  continue;
408 
409  // Check the hit position
410  if (hitId.zside() != cluId.zside() || hitId.mtdRR() != cluId.mtdRR() || hitId.module() != cluId.module() ||
411  recHit.row() != hit_row || recHit.column() != hit_col)
412  continue;
413 
414  // Check the hit energy and time
415  if (recHit.energy() != cluster.hitENERGY()[ihit] || recHit.time() != cluster.hitTIME()[ihit])
416  continue;
417 
418  // SIM hit's position in the module reference frame
419  Local3DPoint local_point_sim(convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].x),
420  convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].y),
421  convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].z));
422 
423  // Calculate the SIM cluster's position in the module reference frame
424  cluLocXSIM += local_point_sim.x() * m_etlSimHits[idet][recHit.id().rawId()].energy;
425  cluLocYSIM += local_point_sim.y() * m_etlSimHits[idet][recHit.id().rawId()].energy;
426  cluLocZSIM += local_point_sim.z() * m_etlSimHits[idet][recHit.id().rawId()].energy;
427 
428  // Calculate the SIM cluster energy and time
429  cluEneSIM += m_etlSimHits[idet][recHit.id().rawId()].energy;
430  cluTimeSIM += m_etlSimHits[idet][recHit.id().rawId()].time * m_etlSimHits[idet][recHit.id().rawId()].energy;
431 
432  break;
433 
434  } // recHit loop
435 
436  } // ihit loop
437 
438  // Find the MTDTrackingRecHit corresponding to the cluster
439  MTDTrackingRecHit* comp(nullptr);
440  bool matchClu = false;
441  const auto& trkHits = (*mtdTrkHitHandle)[detIdObject];
442  for (const auto& trkHit : trkHits) {
443  if (isSameCluster(trkHit.mtdCluster(), cluster)) {
444  comp = trkHit.clone();
445  matchClu = true;
446  break;
447  }
448  }
449  if (!matchClu) {
450  edm::LogWarning("BtlLocalRecoValidation")
451  << "No valid TrackingRecHit corresponding to cluster, detId = " << detIdObject.rawId();
452  }
453 
454  // --- Fill the cluster resolution histograms
455  int iside = (cluId.zside() == -1 ? 0 : 1);
456  if (cluTimeSIM > 0. && cluEneSIM > 0.) {
457  cluTimeSIM /= cluEneSIM;
458 
459  Local3DPoint cluLocalPosSIM(cluLocXSIM / cluEneSIM, cluLocYSIM / cluEneSIM, cluLocZSIM / cluEneSIM);
460  const auto& cluGlobalPosSIM = genericDet->toGlobal(cluLocalPosSIM);
461 
462  float time_res = cluster.time() - cluTimeSIM;
463  float energy_res = cluster.energy() - cluEneSIM;
464  float x_res = global_point.x() - cluGlobalPosSIM.x();
465  float y_res = global_point.y() - cluGlobalPosSIM.y();
466  float z_res = global_point.z() - cluGlobalPosSIM.z();
467 
468  meCluTimeRes_[iside]->Fill(time_res);
469  meCluEnergyRes_[iside]->Fill(energy_res);
470  meCluXRes_[iside]->Fill(x_res);
471  meCluYRes_[iside]->Fill(y_res);
472  meCluZRes_[iside]->Fill(z_res);
473 
474  meCluTPullvsEta_[iside]->Fill(cluGlobalPosSIM.eta(), time_res / cluster.timeError());
475  meCluTPullvsE_[iside]->Fill(cluEneSIM, time_res / cluster.timeError());
476 
477  if (matchClu && comp != nullptr) {
478  meCluXPull_[iside]->Fill(x_res / std::sqrt(comp->globalPositionError().cxx()));
479  meCluYPull_[iside]->Fill(y_res / std::sqrt(comp->globalPositionError().cyy()));
480  meCluXLocalErr_[iside]->Fill(std::sqrt(comp->localPositionError().xx()));
481  meCluYLocalErr_[iside]->Fill(std::sqrt(comp->localPositionError().yy()));
482  }
483  if (optionalPlots_) {
484  meCluYXLocal_[iside]->Fill(local_point.x(), local_point.y());
485  meCluYXLocalSim_[iside]->Fill(cluLocalPosSIM.x(), cluLocalPosSIM.y());
486  }
487 
488  } // if ( cluTimeSIM > 0. && cluEneSIM > 0. )
489  else {
490  meUnmatchedCluEnergy_[iside]->Fill(std::log10(cluster.energy()));
491  }
492 
493  } // cluster loop
494 
495  } // DetSetClu loop
496 
497  // --- Loop over the ETL Uncalibrated RECO hits
498  if (uncalibRecHitsPlots_) {
499  auto etlUncalibRecHitsHandle = makeValid(iEvent.getHandle(etlUncalibRecHitsToken_));
500 
501  for (const auto& uRecHit : *etlUncalibRecHitsHandle) {
502  ETLDetId detId = uRecHit.id();
503 
504  int idet = detId.zside() + detId.nDisc();
505 
506  // --- Skip UncalibratedRecHits not matched to SimHits
507  if (m_etlSimHits[idet].count(detId.rawId()) != 1)
508  continue;
509 
510  DetId geoId = detId.geographicalId();
511  const MTDGeomDet* thedet = geom->idToDet(geoId);
512  if (thedet == nullptr)
513  throw cms::Exception("EtlLocalRecoValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
514  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
515 
516  const ProxyMTDTopology& topoproxy = static_cast<const ProxyMTDTopology&>(thedet->topology());
517  const RectangularMTDTopology& topo = static_cast<const RectangularMTDTopology&>(topoproxy.specificTopology());
518 
519  Local3DPoint local_point(topo.localX(uRecHit.row()), topo.localY(uRecHit.column()), 0.);
520  const auto& global_point = thedet->toGlobal(local_point);
521 
522  // --- Fill the histograms
523 
524  if (uRecHit.amplitude().first < hitMinAmplitude_)
525  continue;
526 
527  float time_res = uRecHit.time().first - m_etlSimHits[idet][detId.rawId()].time;
528 
529  int iside = (detId.zside() == -1 ? 0 : 1);
530 
531  // amplitude histograms
532 
533  int qBin = (int)(uRecHit.amplitude().first / binWidthQ_);
534  if (qBin > nBinsQ_ - 1)
535  qBin = nBinsQ_ - 1;
536 
537  meTimeResQ_[iside][qBin]->Fill(time_res);
538 
539  // eta histograms
540 
541  int etaBin = (int)((fabs(global_point.eta()) - etaMin_) / binWidthEta_);
542  if (etaBin < 0)
543  etaBin = 0;
544  else if (etaBin > nBinsEta_ - 1)
545  etaBin = nBinsEta_ - 1;
546 
547  meTimeResEta_[iside][etaBin]->Fill(time_res);
548 
549  } // uRecHit loop
550  }
551 }
edm::EDGetTokenT< FTLUncalibratedRecHitCollection > etlUncalibRecHitsToken_
edm::EDGetTokenT< CrossingFrame< PSimHit > > etlSimHitsToken_
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
MonitorElement * meCluXRes_[2]
bool isSameCluster(const FTLCluster &, const FTLCluster &)
MonitorElement * meHitTime_[4]
const edm::ESGetToken< MTDClusterParameterEstimator, MTDCPERecord > cpeToken_
virtual const Topology & topology() const
Definition: GeomDet.cc:67
MonitorElement * meOccupancy_[4]
MonitorElement * meCluYLocalErr_[2]
MonitorElement * meCluTPullvsEta_[2]
virtual const PixelTopology & specificTopology() const
MonitorElement * meCluTimeError_[4]
static constexpr float etaMin_
MonitorElement * meCluOccupancy_[4]
MonitorElement * meCluTime_[4]
MonitorElement * meNhits_[4]
Definition: MTDHit.h:4
Definition: weight.py:1
MonitorElement * meUnmatchedCluEnergy_[2]
MonitorElement * meTimeResEta_[2][nBinsEta_]
int zside(DetId const &)
MonitorElement * meHitTvsE_[4]
MonitorElement * meCluEnergy_[4]
Detector identifier base class for the MIP Timing Layer.
Definition: MTDDetId.h:21
constexpr NumType convertUnitsTo(double desiredUnits, NumType val)
Definition: GeantUnits.h:73
void Fill(long long x)
MonitorElement * meHitEvsEta_[4]
MonitorElement * meHitTvsEta_[4]
MonitorElement * meCluTimeRes_[2]
int iEvent
Definition: GenABIO.cc:224
MonitorElement * meCluHits_[4]
MonitorElement * meHitPhi_[4]
float localX(const float mpX) const override
edm::EDGetTokenT< FTLRecHitCollection > etlRecHitsToken_
MonitorElement * meHitEta_[4]
edm::EDGetTokenT< MTDTrackingDetSetVector > mtdTrackingHitToken_
T sqrt(T t)
Definition: SSEVec.h:19
MonitorElement * meCluXPull_[2]
const edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
int module() const
Definition: ETLDetId.h:105
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
MonitorElement * meHitTimeError_[4]
static constexpr int nBinsEta_
int mtdRR() const
Definition: MTDDetId.h:64
float localY(const float mpY) const override
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
MonitorElement * meHitYlocal_[2]
Definition: DetId.h:17
MonitorElement * meTimeResQ_[2][nBinsQ_]
MonitorElement * meCluZRes_[2]
constexpr NumType convertMmToCm(NumType millimeters)
Definition: angle_units.h:44
MonitorElement * meLocalOccupancy_[2]
int discSide() const
Definition: ETLDetId.h:119
MonitorElement * meCluYXLocal_[2]
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
MonitorElement * meCluYXLocalSim_[2]
A 2D TrackerRecHit with time and time error information.
int zside() const
Definition: MTDDetId.h:61
static constexpr float binWidthEta_
Detector identifier class for the Endcap Timing Layer.
Definition: ETLDetId.h:15
HLT enums.
int nDisc() const
Definition: ETLDetId.h:124
edm::EDGetTokenT< FTLClusterCollection > etlRecCluToken_
MonitorElement * meHitTvsPhi_[4]
MonitorElement * meCluXLocalErr_[2]
MonitorElement * meHitEvsPhi_[4]
MonitorElement * meCluYPull_[2]
ESTransientHandle< T > getTransientHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:141
static constexpr float binWidthQ_
MonitorElement * meCluTPullvsE_[2]
MonitorElement * meHitEnergy_[4]
MonitorElement * meHitXlocal_[2]
Log< level::Warning, false > LogWarning
MonitorElement * meCluYRes_[2]
auto makeValid(const U &iOtherHandleType) noexcept(false)
Definition: ValidHandle.h:52
std::tuple< LocalPoint, LocalError, TimeValue, TimeValueError > ReturnType
static constexpr int nBinsQ_
#define LogDebug(id)
MonitorElement * meCluEnergyRes_[2]

◆ bookHistograms()

void EtlLocalRecoValidation::bookHistograms ( DQMStore::IBooker ibook,
edm::Run const &  run,
edm::EventSetup const &  iSetup 
)
overrideprivatevirtual

Implements DQMEDAnalyzer.

Definition at line 554 of file EtlLocalRecoValidation.cc.

References dqm::implementation::IBooker::book1D(), dqm::implementation::IBooker::book2D(), dqm::implementation::IBooker::bookProfile(), data, folder_, meCluEnergy_, meCluEnergyRes_, meCluEta_, meCluHits_, meCluOccupancy_, meCluPhi_, meCluTime_, meCluTimeError_, meCluTimeRes_, meCluTPullvsE_, meCluTPullvsEta_, meCluXLocalErr_, meCluXPull_, meCluXRes_, meCluYLocalErr_, meCluYPull_, meCluYRes_, meCluYXLocal_, meCluYXLocalSim_, meCluZRes_, meEnergyRes_, meHitEnergy_, meHitEta_, meHitEvsEta_, meHitEvsPhi_, meHitPhi_, meHitTime_, meHitTimeError_, meHitTvsE_, meHitTvsEta_, meHitTvsPhi_, meHitX_, meHitXlocal_, meHitY_, meHitYlocal_, meHitZ_, meLocalOccupancy_, meNhits_, meOccupancy_, meTimeRes_, meTimeResEta_, meTimeResQ_, meTPullvsE_, meTPullvsEta_, meUnmatchedCluEnergy_, nBinsEta_, nBinsQ_, optionalPlots_, dqm::implementation::NavigatorBase::setCurrentFolder(), AlCaHLTBitMon_QueryRunRegistry::string, and uncalibRecHitsPlots_.

556  {
557  ibook.setCurrentFolder(folder_);
558 
559  // --- histograms booking
560 
561  meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
562  "Number of ETL RECO hits (-Z, Single(topo1D)/First(topo2D) disk);log_10(N_{RECO})",
563  100,
564  0.,
565  5.25);
566  meNhits_[1] =
567  ibook.book1D("EtlNhitsZnegD2", "Number of ETL RECO hits (-Z, Second disk);log_10(N_{RECO})", 100, 0., 5.25);
568  meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
569  "Number of ETL RECO hits (+Z, Single(topo1D)/First(topo2D) disk);log_10(N_{RECO})",
570  100,
571  0.,
572  5.25);
573  meNhits_[3] =
574  ibook.book1D("EtlNhitsZposD2", "Number of ETL RECO hits (+Z, Second disk);log_10(N_{RECO})", 100, 0., 5.25);
575  meHitEnergy_[0] = ibook.book1D(
576  "EtlHitEnergyZnegD1", "ETL RECO hits energy (-Z, Single(topo1D)/First(topo2D) disk);E_{RECO} [MeV]", 40, 0., 1.);
577  meHitEnergy_[1] =
578  ibook.book1D("EtlHitEnergyZnegD2", "ETL RECO hits energy (-Z, Second disk);E_{RECO} [MeV]", 40, 0., 1.);
579  meHitEnergy_[2] = ibook.book1D(
580  "EtlHitEnergyZposD1", "ETL RECO hits energy (+Z, Single(topo1D)/First(topo2D) disk);E_{RECO} [MeV]", 40, 0., 1.);
581  meHitEnergy_[3] =
582  ibook.book1D("EtlHitEnergyZposD2", "ETL RECO hits energy (+Z, Second disk);E_{RECO} [MeV]", 40, 0., 1.);
583  meHitTime_[0] = ibook.book1D(
584  "EtlHitTimeZnegD1", "ETL RECO hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
585  meHitTime_[1] = ibook.book1D("EtlHitTimeZnegD2", "ETL RECO hits ToA (-Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
586  meHitTime_[2] = ibook.book1D(
587  "EtlHitTimeZposD1", "ETL RECO hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
588  meHitTime_[3] = ibook.book1D("EtlHitTimeZposD2", "ETL RECO hits ToA (+Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
589  meHitTimeError_[0] =
590  ibook.book1D("EtlHitTimeErrorZnegD1",
591  "ETL RECO hits ToA error (-Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
592  50,
593  0.,
594  0.1);
595  meHitTimeError_[1] = ibook.book1D(
596  "EtlHitTimeErrorZnegD2", "ETL RECO hits ToA error(-Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
597  meHitTimeError_[2] =
598  ibook.book1D("EtlHitTimeErrorZposD1",
599  "ETL RECO hits ToA error (+Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
600  50,
601  0.,
602  0.1);
603  meHitTimeError_[3] = ibook.book1D(
604  "EtlHitTimeErrorZposD2", "ETL RECO hits ToA error(+Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
605 
606  if (optionalPlots_) {
607  meOccupancy_[0] =
608  ibook.book2D("EtlOccupancyZnegD1",
609  "ETL RECO hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
610  135,
611  -135.,
612  135.,
613  135,
614  -135.,
615  135.);
616  meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
617  "ETL RECO hits occupancy (-Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
618  135,
619  -135.,
620  135.,
621  135,
622  -135.,
623  135.);
624  meOccupancy_[2] =
625  ibook.book2D("EtlOccupancyZposD1",
626  "ETL RECO hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
627  135,
628  -135.,
629  135.,
630  135,
631  -135.,
632  135.);
633  meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
634  "ETL RECO hits occupancy (+Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
635  135,
636  -135.,
637  135.,
638  135,
639  -135.,
640  135.);
641  meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg",
642  "ETL RECO hits local occupancy (-Z);X_{RECO} [cm];Y_{RECO} [cm]",
643  100,
644  -2.2,
645  2.2,
646  50,
647  -1.1,
648  1.1);
649  meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos",
650  "ETL RECO hits local occupancy (+Z);X_{RECO} [cm];Y_{RECO} [cm]",
651  100,
652  -2.2,
653  2.2,
654  50,
655  -1.1,
656  1.1);
657  }
658  meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL RECO local X (-Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
659  meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL RECO local X (+Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
660  meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
661  meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
662  meHitX_[0] = ibook.book1D(
663  "EtlHitXZnegD1", "ETL RECO hits X (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
664  meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL RECO hits X (-Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
665  meHitX_[2] = ibook.book1D(
666  "EtlHitXZposD1", "ETL RECO hits X (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
667  meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL RECO hits X (+Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
668  meHitY_[0] = ibook.book1D(
669  "EtlHitYZnegD1", "ETL RECO hits Y (-Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
670  meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL RECO hits Y (-Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
671  meHitY_[2] = ibook.book1D(
672  "EtlHitYZposD1", "ETL RECO hits Y (+Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
673  meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL RECO hits Y (+Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
674  meHitZ_[0] = ibook.book1D(
675  "EtlHitZZnegD1", "ETL RECO hits Z (-Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, -302., -298.);
676  meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL RECO hits Z (-Z, Second Disk);Z_{RECO} [cm]", 100, -304., -300.);
677  meHitZ_[2] = ibook.book1D(
678  "EtlHitZZposD1", "ETL RECO hits Z (+Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, 298., 302.);
679  meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL RECO hits Z (+Z, Second Disk);Z_{RECO} [cm]", 100, 300., 304.);
680  meHitPhi_[0] = ibook.book1D(
681  "EtlHitPhiZnegD1", "ETL RECO hits #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
682  meHitPhi_[1] =
683  ibook.book1D("EtlHitPhiZnegD2", "ETL RECO hits #phi (-Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
684  meHitPhi_[2] = ibook.book1D(
685  "EtlHitPhiZposD1", "ETL RECO hits #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
686  meHitPhi_[3] =
687  ibook.book1D("EtlHitPhiZposD2", "ETL RECO hits #phi (+Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
688  meHitEta_[0] = ibook.book1D(
689  "EtlHitEtaZnegD1", "ETL RECO hits #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.56);
690  meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL RECO hits #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.56);
691  meHitEta_[2] = ibook.book1D(
692  "EtlHitEtaZposD1", "ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2);
693  meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2);
694  meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5);
695  meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
696  meHitTvsE_[0] = ibook.bookProfile(
697  "EtlHitTvsEZnegD1",
698  "ETL RECO time vs energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
699  50,
700  0.,
701  2.,
702  0.,
703  100.);
704  meHitTvsE_[1] = ibook.bookProfile("EtlHitTvsEZnegD2",
705  "ETL RECO time vs energy (-Z, Second Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
706  50,
707  0.,
708  2.,
709  0.,
710  100.);
711  meHitTvsE_[2] = ibook.bookProfile(
712  "EtlHitTvsEZposD1",
713  "ETL RECO time vs energy (+Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
714  50,
715  0.,
716  2.,
717  0.,
718  100.);
719  meHitTvsE_[3] = ibook.bookProfile("EtlHitTvsEZposD2",
720  "ETL RECO time vs energy (+Z, Second Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
721  50,
722  0.,
723  2.,
724  0.,
725  100.);
726  meHitEvsPhi_[0] = ibook.bookProfile(
727  "EtlHitEvsPhiZnegD1",
728  "ETL RECO energy vs #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
729  50,
730  -3.2,
731  3.2,
732  0.,
733  100.);
734  meHitEvsPhi_[1] = ibook.bookProfile("EtlHitEvsPhiZnegD2",
735  "ETL RECO energy vs #phi (-Z, Second Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
736  50,
737  -3.2,
738  3.2,
739  0.,
740  100.);
741  meHitEvsPhi_[2] = ibook.bookProfile(
742  "EtlHitEvsPhiZposD1",
743  "ETL RECO energy vs #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
744  50,
745  -3.2,
746  3.2,
747  0.,
748  100.);
749  meHitEvsPhi_[3] = ibook.bookProfile("EtlHitEvsPhiZposD2",
750  "ETL RECO energy vs #phi (+Z, Second Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
751  50,
752  -3.2,
753  3.2,
754  0.,
755  100.);
756  meHitEvsEta_[0] =
757  ibook.bookProfile("EtlHitEvsEtaZnegD1",
758  "ETL RECO energy vs #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};E_{RECO} [MeV]",
759  50,
760  -3.2,
761  -1.56,
762  0.,
763  100.);
764  meHitEvsEta_[1] = ibook.bookProfile("EtlHitEvsEtaZnegD2",
765  "ETL RECO energy vs #eta (-Z, Second Disk);#eta_{RECO};E_{RECO} [MeV]",
766  50,
767  -3.2,
768  -1.56,
769  0.,
770  100.);
771  meHitEvsEta_[2] =
772  ibook.bookProfile("EtlHitEvsEtaZposD1",
773  "ETL RECO energy vs #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};E_{RECO} [MeV]",
774  50,
775  1.56,
776  3.2,
777  0.,
778  100.);
779  meHitEvsEta_[3] = ibook.bookProfile("EtlHitEvsEtaZposD2",
780  "ETL RECO energy vs #eta (+Z, Second Disk);#eta_{RECO};E_{RECO} [MeV]",
781  50,
782  1.56,
783  3.2,
784  0.,
785  100.);
786  meHitTvsPhi_[0] = ibook.bookProfile(
787  "EtlHitTvsPhiZnegD1",
788  "ETL RECO time vs #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
789  50,
790  -3.2,
791  3.2,
792  0.,
793  100.);
794  meHitTvsPhi_[1] = ibook.bookProfile("EtlHitTvsPhiZnegD2",
795  "ETL RECO time vs #phi (-Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
796  50,
797  -3.2,
798  3.2,
799  0.,
800  100.);
801  meHitTvsPhi_[2] = ibook.bookProfile(
802  "EtlHitTvsPhiZposD1",
803  "ETL RECO time vs #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
804  50,
805  -3.2,
806  3.2,
807  0.,
808  100.);
809  meHitTvsPhi_[3] = ibook.bookProfile("EtlHitTvsPhiZposD2",
810  "ETL RECO time vs #phi (+Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
811  50,
812  -3.2,
813  3.2,
814  0.,
815  100.);
816  meHitTvsEta_[0] =
817  ibook.bookProfile("EtlHitTvsEtaZnegD1",
818  "ETL RECO time vs #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
819  50,
820  -3.2,
821  -1.56,
822  0.,
823  100.);
824  meHitTvsEta_[1] = ibook.bookProfile("EtlHitTvsEtaZnegD2",
825  "ETL RECO time vs #eta (-Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
826  50,
827  -3.2,
828  -1.56,
829  0.,
830  100.);
831  meHitTvsEta_[2] =
832  ibook.bookProfile("EtlHitTvsEtaZposD1",
833  "ETL RECO time vs #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
834  50,
835  1.56,
836  3.2,
837  0.,
838  100.);
839  meHitTvsEta_[3] = ibook.bookProfile("EtlHitTvsEtaZposD2",
840  "ETL RECO time vs #eta (+Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
841  50,
842  1.56,
843  3.2,
844  0.,
845  100.);
846  meTPullvsE_ = ibook.bookProfile(
847  "EtlTPullvsE", "ETL time pull vs E;E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}", 20, 0., 2., -5., 5., "S");
848  meTPullvsEta_ = ibook.bookProfile("EtlTPullvsEta",
849  "ETL time pull vs #eta;|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
850  26,
851  1.65,
852  3.0,
853  -5.,
854  5.,
855  "S");
856  meCluTime_[0] =
857  ibook.book1D("EtlCluTimeZnegD1", "ETL cluster ToA (-Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
858  meCluTime_[1] = ibook.book1D("EtlCluTimeZnegD2", "ETL cluster ToA (-Z, Second Disk);ToA [ns]", 250, 0, 25);
859  meCluTime_[2] =
860  ibook.book1D("EtlCluTimeZposD1", "ETL cluster ToA (+Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
861  meCluTime_[3] = ibook.book1D("EtlCluTimeZposD2", "ETL cluster ToA (+Z, Second Disk);ToA [ns]", 250, 0, 25);
862  meCluTimeError_[0] = ibook.book1D("EtlCluTimeErrosZnegD1",
863  "ETL cluster time error (-Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
864  100,
865  0,
866  0.1);
867  meCluTimeError_[1] =
868  ibook.book1D("EtlCluTimeErrorZnegD2", "ETL cluster time error (-Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
869  meCluTimeError_[2] = ibook.book1D("EtlCluTimeErrorZposD1",
870  "ETL cluster time error (+Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
871  100,
872  0,
873  0.1);
874  meCluTimeError_[3] =
875  ibook.book1D("EtlCluTimeErrorZposD2", "ETL cluster time error (+Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
876  meCluEnergy_[0] = ibook.book1D(
877  "EtlCluEnergyZnegD1", "ETL cluster energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 40, 0, 2);
878  meCluEnergy_[1] = ibook.book1D("EtlCluEnergyZnegD2", "ETL cluster energy (-Z, Second Disk);E_{RECO} [MeV]", 40, 0, 2);
879  meCluEnergy_[2] = ibook.book1D(
880  "EtlCluEnergyZposD1", "ETL cluster energy (+Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 40, 0, 2);
881  meCluEnergy_[3] = ibook.book1D("EtlCluEnergyZposD2", "ETL cluster energy (+Z, Second Disk);E_{RECO} [MeV]", 40, 0, 2);
882  meCluPhi_[0] = ibook.book1D(
883  "EtlCluPhiZnegD1", "ETL cluster #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
884  meCluPhi_[1] =
885  ibook.book1D("EtlCluPhiZnegD2", "ETL cluster #phi (-Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
886  meCluPhi_[2] = ibook.book1D(
887  "EtlCluPhiZposD1", "ETL cluster #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
888  meCluPhi_[3] =
889  ibook.book1D("EtlCluPhiZposD2", "ETL cluster #phi (+Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
890  meCluEta_[0] = ibook.book1D(
891  "EtlCluEtaZnegD1", "ETL cluster #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.4);
892  meCluEta_[1] = ibook.book1D("EtlCluEtaZnegD2", "ETL cluster #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.4);
893  meCluEta_[2] = ibook.book1D(
894  "EtlCluEtaZposD1", "ETL cluster #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.4, 3.2);
895  meCluEta_[3] = ibook.book1D("EtlCluEtaZposD2", "ETL cluster #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.4, 3.2);
896  meCluHits_[0] = ibook.book1D(
897  "EtlCluHitNumberZnegD1", "ETL hits per cluster (-Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 5, 0, 5);
898  meCluHits_[1] = ibook.book1D("EtlCluHitNumberZnegD2", "ETL hits per cluster (-Z, Second Disk);Cluster size", 5, 0, 5);
899  meCluHits_[2] = ibook.book1D(
900  "EtlCluHitNumberZposD1", "ETL hits per cluster (+Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 5, 0, 5);
901  meCluHits_[3] = ibook.book1D("EtlCluHitNumberZposD2", "ETL hits per cluster (+Z, Second Disk);Cluster size", 5, 0, 5);
902 
903  meCluTimeRes_[0] =
904  ibook.book1D("EtlCluTimeResZneg", "ETL cluster time resolution (-Z);T_{RECO}-T_{SIM} [ns]", 100, -0.5, 0.5);
905  meCluTimeRes_[1] =
906  ibook.book1D("EtlCluTimeResZpos", "ETL cluster time resolution (+Z);T_{RECO}-T_{SIM} [MeV]", 100, -0.5, 0.5);
907  meCluEnergyRes_[0] =
908  ibook.book1D("EtlCluEnergyResZneg", "ETL cluster energy resolution (-Z);E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
909  meCluEnergyRes_[1] =
910  ibook.book1D("EtlCluEnergyResZpos", "ETL cluster energy resolution (+Z);E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
911 
912  meCluTPullvsE_[0] =
913  ibook.bookProfile("EtlCluTPullvsEZneg",
914  "ETL cluster time pull vs E (-Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
915  25,
916  0.,
917  0.5,
918  -5.,
919  5.,
920  "S");
921  meCluTPullvsE_[1] =
922  ibook.bookProfile("EtlCluTPullvsEZpos",
923  "ETL cluster time pull vs E (+Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
924  25,
925  0.,
926  0.5,
927  -5.,
928  5.,
929  "S");
930  meCluTPullvsEta_[0] =
931  ibook.bookProfile("EtlCluTPullvsEtaZneg",
932  "ETL cluster time pull vs #eta (-Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
933  30,
934  -3.,
935  -1.65,
936  -5.,
937  5.,
938  "S");
939  meCluTPullvsEta_[1] =
940  ibook.bookProfile("EtlCluTPullvsEtaZpos",
941  "ETL cluster time pull vs #eta (+Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
942  30,
943  1.65,
944  3.,
945  -5.,
946  5.,
947  "S");
948  meCluXRes_[0] = ibook.book1D("EtlCluXResZneg", "ETL cluster X resolution (-Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
949  meCluXRes_[1] = ibook.book1D("EtlCluXResZpos", "ETL cluster X resolution (+Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
950  meCluYRes_[0] = ibook.book1D("EtlCluYResZneg", "ETL cluster Y resolution (-Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
951  meCluYRes_[1] = ibook.book1D("EtlCluYResZpos", "ETL cluster Y resolution (+Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
952  meCluZRes_[0] =
953  ibook.book1D("EtlCluZResZneg", "ETL cluster Z resolution (-Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
954  meCluZRes_[1] =
955  ibook.book1D("EtlCluZResZpos", "ETL cluster Z resolution (+Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
956  meCluXPull_[0] =
957  ibook.book1D("EtlCluXPullZneg", "ETL cluster X pull (-Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
958  meCluXPull_[1] =
959  ibook.book1D("EtlCluXPullZpos", "ETL cluster X pull (+Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
960  meCluYPull_[0] =
961  ibook.book1D("EtlCluYPullZneg", "ETL cluster Y pull (-Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
962  meCluYPull_[1] =
963  ibook.book1D("EtlCluYPullZpos", "ETL cluster Y pull (+Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
964  meCluXLocalErr_[0] =
965  ibook.book1D("EtlCluXLocalErrNeg", "ETL cluster X local error (-Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
966  meCluXLocalErr_[1] =
967  ibook.book1D("EtlCluXLocalErrPos", "ETL cluster X local error (+Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
968  meCluYLocalErr_[0] =
969  ibook.book1D("EtlCluYLocalErrNeg", "ETL cluster Y local error (-Z);sigmaY_{RECO,loc} [cm]", 50., 0., 0.2);
970  meCluYLocalErr_[1] =
971  ibook.book1D("EtlCluYLocalErrPos", "ETL cluster Y local error (+Z);sigmaY_{RECO,loc} [cm]", 50, 0., 0.2);
972  if (optionalPlots_) {
973  meCluOccupancy_[0] =
974  ibook.book2D("EtlCluOccupancyZnegD1",
975  "ETL cluster X vs Y (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
976  100,
977  -150.,
978  150.,
979  100,
980  -150,
981  150);
982  meCluOccupancy_[1] = ibook.book2D("EtlCluOccupancyZnegD2",
983  "ETL cluster X vs Y (-Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
984  100,
985  -150.,
986  150.,
987  100,
988  -150,
989  150);
990  meCluOccupancy_[2] =
991  ibook.book2D("EtlCluOccupancyZposD1",
992  "ETL cluster X vs Y (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
993  100,
994  -150.,
995  150.,
996  100,
997  -150,
998  150);
999  meCluOccupancy_[3] = ibook.book2D("EtlCluOccupancyZposD2",
1000  "ETL cluster X vs Y (+Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
1001  100,
1002  -150.,
1003  150.,
1004  100,
1005  -150,
1006  150);
1007  meCluYXLocal_[0] = ibook.book2D("EtlCluYXLocalZneg",
1008  "ETL cluster local Y vs X (-Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
1009  100,
1010  -2.2,
1011  2.2,
1012  100,
1013  -1.1,
1014  1.1);
1015  meCluYXLocal_[1] = ibook.book2D("EtlCluYXLocalZpos",
1016  "ETL cluster local Y vs X (+Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
1017  100,
1018  -2.2,
1019  2.2,
1020  100,
1021  -1.1,
1022  1.1);
1023  meCluYXLocalSim_[0] = ibook.book2D("EtlCluYXLocalSimZneg",
1024  "ETL cluster local Y vs X (-Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1025  200,
1026  -2.2,
1027  2.2,
1028  200,
1029  -1.1,
1030  1.1);
1031  meCluYXLocalSim_[1] = ibook.book2D("EtlCluYXLocalSimZpos",
1032  "ETL cluster local Y vs X (+Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1033  200,
1034  -2.2,
1035  2.2,
1036  200,
1037  -1.1,
1038  1.1);
1039  }
1040  meUnmatchedCluEnergy_[0] = ibook.book1D(
1041  "EtlUnmatchedCluEnergyNeg", "ETL unmatched cluster log10(energy) (-Z);log10(E_{RECO} [MeV])", 5, -3, 2);
1042  meUnmatchedCluEnergy_[1] = ibook.book1D(
1043  "EtlUnmatchedCluEnergyPos", "ETL unmatched cluster log10(energy) (+Z);log10(E_{RECO} [MeV])", 5, -3, 2);
1044 
1045  // --- UncalibratedRecHits histograms
1046 
1047  if (uncalibRecHitsPlots_) {
1048  const std::string det_name[2] = {"ETL-", "ETL+"};
1049  for (unsigned int iside = 0; iside < 2; ++iside) {
1050  for (unsigned int ihistoQ = 0; ihistoQ < nBinsQ_; ++ihistoQ) {
1051  std::string hname = Form("TimeResQ_%d_%d", iside, ihistoQ);
1052  std::string htitle =
1053  Form("%s time resolution (Q bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].data(), ihistoQ);
1054  meTimeResQ_[iside][ihistoQ] = ibook.book1D(hname, htitle, 200, -0.5, 0.5);
1055 
1056  } // ihistoQ loop
1057 
1058  for (unsigned int ihistoEta = 0; ihistoEta < nBinsEta_; ++ihistoEta) {
1059  std::string hname = Form("TimeResEta_%d_%d", iside, ihistoEta);
1060  std::string htitle =
1061  Form("%s time resolution (|#eta| bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].data(), ihistoEta);
1062  meTimeResEta_[iside][ihistoEta] = ibook.book1D(hname, htitle, 200, -0.5, 0.5);
1063 
1064  } // ihistoEta loop
1065  }
1066  }
1067 }
MonitorElement * meCluXRes_[2]
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
MonitorElement * meHitTime_[4]
MonitorElement * meOccupancy_[4]
MonitorElement * meCluYLocalErr_[2]
MonitorElement * meCluTPullvsEta_[2]
MonitorElement * meCluTimeError_[4]
MonitorElement * meCluOccupancy_[4]
MonitorElement * meCluTime_[4]
MonitorElement * meNhits_[4]
MonitorElement * meUnmatchedCluEnergy_[2]
MonitorElement * meTimeResEta_[2][nBinsEta_]
MonitorElement * meHitTvsE_[4]
MonitorElement * meCluEnergy_[4]
MonitorElement * meHitEvsEta_[4]
MonitorElement * meHitTvsEta_[4]
MonitorElement * meCluTimeRes_[2]
MonitorElement * meCluHits_[4]
MonitorElement * meHitPhi_[4]
MonitorElement * meHitEta_[4]
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:399
MonitorElement * meCluXPull_[2]
MonitorElement * meHitTimeError_[4]
static constexpr int nBinsEta_
MonitorElement * meHitYlocal_[2]
MonitorElement * meTimeResQ_[2][nBinsQ_]
MonitorElement * meCluZRes_[2]
MonitorElement * meLocalOccupancy_[2]
MonitorElement * meCluYXLocal_[2]
MonitorElement * meCluYXLocalSim_[2]
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:212
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:80
MonitorElement * meHitTvsPhi_[4]
MonitorElement * meCluXLocalErr_[2]
MonitorElement * meHitEvsPhi_[4]
MonitorElement * meCluYPull_[2]
MonitorElement * meCluTPullvsE_[2]
MonitorElement * meHitEnergy_[4]
MonitorElement * meHitXlocal_[2]
MonitorElement * meCluYRes_[2]
MonitorElement * book1D(TString const &name, TString const &title, int const nchX, double const lowX, double const highX, FUNC onbooking=NOOP())
Definition: DQMStore.h:98
static constexpr int nBinsQ_
MonitorElement * meCluEnergyRes_[2]

◆ fillDescriptions()

void EtlLocalRecoValidation::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 1070 of file EtlLocalRecoValidation.cc.

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, ProducerED_cfi::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

1070  {
1072 
1073  desc.add<std::string>("folder", "MTD/ETL/LocalReco");
1074  desc.add<edm::InputTag>("recHitsTag", edm::InputTag("mtdRecHits", "FTLEndcap"));
1075  desc.add<edm::InputTag>("uncalibRecHitsTag", edm::InputTag("mtdUncalibratedRecHits", "FTLEndcap"));
1076  desc.add<edm::InputTag>("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsEndcap"));
1077  desc.add<edm::InputTag>("recCluTag", edm::InputTag("mtdClusters", "FTLEndcap"));
1078  desc.add<edm::InputTag>("trkHitTag", edm::InputTag("mtdTrackingRecHits"));
1079  desc.add<double>("hitMinimumEnergy2Dis", 0.001); // [MeV]
1080  desc.add<bool>("optionalPlots", false);
1081  desc.add<bool>("UncalibRecHitsPlots", false);
1082  desc.add<double>("HitMinimumAmplitude", 0.33); // [MIP]
1083 
1084  descriptions.add("etlLocalRecoValid", desc);
1085 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ isSameCluster()

bool EtlLocalRecoValidation::isSameCluster ( const FTLCluster clu1,
const FTLCluster clu2 
)
private

Definition at line 147 of file EtlLocalRecoValidation.cc.

References FTLCluster::id(), FTLCluster::size(), FTLCluster::time(), FTLCluster::x(), and FTLCluster::y().

Referenced by analyze().

147  {
148  return clu1.id() == clu2.id() && clu1.size() == clu2.size() && clu1.x() == clu2.x() && clu1.y() == clu2.y() &&
149  clu1.time() == clu2.time();
150 }
float x() const
Definition: FTLCluster.h:120
int size() const
Definition: FTLCluster.h:153
float y() const
Definition: FTLCluster.h:125
const DetId & id() const
Definition: FTLCluster.h:190
float time() const
Definition: FTLCluster.h:142

Member Data Documentation

◆ binWidthEta_

constexpr float EtlLocalRecoValidation::binWidthEta_ = 0.05
staticprivate

Definition at line 141 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ binWidthQ_

constexpr float EtlLocalRecoValidation::binWidthQ_ = 1.3
staticprivate

Definition at line 136 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ cpeToken_

const edm::ESGetToken<MTDClusterParameterEstimator, MTDCPERecord> EtlLocalRecoValidation::cpeToken_
private

Definition at line 77 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ etaMin_

constexpr float EtlLocalRecoValidation::etaMin_ = 1.65
staticprivate

Definition at line 142 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ etlRecCluToken_

edm::EDGetTokenT<FTLClusterCollection> EtlLocalRecoValidation::etlRecCluToken_
private

Definition at line 72 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ etlRecHitsToken_

edm::EDGetTokenT<FTLRecHitCollection> EtlLocalRecoValidation::etlRecHitsToken_
private

Definition at line 69 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ etlSimHitsToken_

edm::EDGetTokenT<CrossingFrame<PSimHit> > EtlLocalRecoValidation::etlSimHitsToken_
private

Definition at line 71 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ etlUncalibRecHitsToken_

edm::EDGetTokenT<FTLUncalibratedRecHitCollection> EtlLocalRecoValidation::etlUncalibRecHitsToken_
private

Definition at line 70 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ folder_

const std::string EtlLocalRecoValidation::folder_
private

Definition at line 63 of file EtlLocalRecoValidation.cc.

Referenced by bookHistograms().

◆ hitMinAmplitude_

const double EtlLocalRecoValidation::hitMinAmplitude_
private

Definition at line 67 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ hitMinEnergy2Dis_

const float EtlLocalRecoValidation::hitMinEnergy2Dis_
private

Definition at line 64 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ meCluEnergy_

MonitorElement* EtlLocalRecoValidation::meCluEnergy_[4]
private

Definition at line 106 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluEnergyRes_

MonitorElement* EtlLocalRecoValidation::meCluEnergyRes_[2]
private

Definition at line 118 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluEta_

MonitorElement* EtlLocalRecoValidation::meCluEta_[4]
private

Definition at line 108 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluHits_

MonitorElement* EtlLocalRecoValidation::meCluHits_[4]
private

Definition at line 109 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluOccupancy_

MonitorElement* EtlLocalRecoValidation::meCluOccupancy_[4]
private

Definition at line 110 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluPhi_

MonitorElement* EtlLocalRecoValidation::meCluPhi_[4]
private

Definition at line 107 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTime_

MonitorElement* EtlLocalRecoValidation::meCluTime_[4]
private

Definition at line 104 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTimeError_

MonitorElement* EtlLocalRecoValidation::meCluTimeError_[4]
private

Definition at line 105 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTimeRes_

MonitorElement* EtlLocalRecoValidation::meCluTimeRes_[2]
private

Definition at line 117 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTPullvsE_

MonitorElement* EtlLocalRecoValidation::meCluTPullvsE_[2]
private

Definition at line 119 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTPullvsEta_

MonitorElement* EtlLocalRecoValidation::meCluTPullvsEta_[2]
private

Definition at line 120 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXLocalErr_

MonitorElement* EtlLocalRecoValidation::meCluXLocalErr_[2]
private

Definition at line 128 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXPull_

MonitorElement* EtlLocalRecoValidation::meCluXPull_[2]
private

Definition at line 124 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXRes_

MonitorElement* EtlLocalRecoValidation::meCluXRes_[2]
private

Definition at line 121 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYLocalErr_

MonitorElement* EtlLocalRecoValidation::meCluYLocalErr_[2]
private

Definition at line 129 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYPull_

MonitorElement* EtlLocalRecoValidation::meCluYPull_[2]
private

Definition at line 125 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYRes_

MonitorElement* EtlLocalRecoValidation::meCluYRes_[2]
private

Definition at line 122 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYXLocal_

MonitorElement* EtlLocalRecoValidation::meCluYXLocal_[2]
private

Definition at line 126 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYXLocalSim_

MonitorElement* EtlLocalRecoValidation::meCluYXLocalSim_[2]
private

Definition at line 127 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluZRes_

MonitorElement* EtlLocalRecoValidation::meCluZRes_[2]
private

Definition at line 123 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meEnergyRes_

MonitorElement* EtlLocalRecoValidation::meEnergyRes_
private

Definition at line 113 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEnergy_

MonitorElement* EtlLocalRecoValidation::meHitEnergy_[4]
private

Definition at line 82 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEta_

MonitorElement* EtlLocalRecoValidation::meHitEta_[4]
private

Definition at line 96 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEvsEta_

MonitorElement* EtlLocalRecoValidation::meHitEvsEta_[4]
private

Definition at line 100 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEvsPhi_

MonitorElement* EtlLocalRecoValidation::meHitEvsPhi_[4]
private

Definition at line 99 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitPhi_

MonitorElement* EtlLocalRecoValidation::meHitPhi_[4]
private

Definition at line 95 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTime_

MonitorElement* EtlLocalRecoValidation::meHitTime_[4]
private

Definition at line 83 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTimeError_

MonitorElement* EtlLocalRecoValidation::meHitTimeError_[4]
private

Definition at line 84 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTvsE_

MonitorElement* EtlLocalRecoValidation::meHitTvsE_[4]
private

Definition at line 98 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTvsEta_

MonitorElement* EtlLocalRecoValidation::meHitTvsEta_[4]
private

Definition at line 102 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTvsPhi_

MonitorElement* EtlLocalRecoValidation::meHitTvsPhi_[4]
private

Definition at line 101 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitX_

MonitorElement* EtlLocalRecoValidation::meHitX_[4]
private

Definition at line 92 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitXlocal_

MonitorElement* EtlLocalRecoValidation::meHitXlocal_[2]
private

Definition at line 89 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitY_

MonitorElement* EtlLocalRecoValidation::meHitY_[4]
private

Definition at line 93 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitYlocal_

MonitorElement* EtlLocalRecoValidation::meHitYlocal_[2]
private

Definition at line 90 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitZ_

MonitorElement* EtlLocalRecoValidation::meHitZ_[4]
private

Definition at line 94 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meLocalOccupancy_

MonitorElement* EtlLocalRecoValidation::meLocalOccupancy_[2]
private

Definition at line 88 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meNhits_

MonitorElement* EtlLocalRecoValidation::meNhits_[4]
private

Definition at line 81 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meOccupancy_

MonitorElement* EtlLocalRecoValidation::meOccupancy_[4]
private

Definition at line 86 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTimeRes_

MonitorElement* EtlLocalRecoValidation::meTimeRes_
private

Definition at line 112 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTimeResEta_

MonitorElement* EtlLocalRecoValidation::meTimeResEta_[2][nBinsEta_]
private

Definition at line 144 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTimeResQ_

MonitorElement* EtlLocalRecoValidation::meTimeResQ_[2][nBinsQ_]
private

Definition at line 138 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTPullvsE_

MonitorElement* EtlLocalRecoValidation::meTPullvsE_
private

Definition at line 114 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTPullvsEta_

MonitorElement* EtlLocalRecoValidation::meTPullvsEta_
private

Definition at line 115 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meUnmatchedCluEnergy_

MonitorElement* EtlLocalRecoValidation::meUnmatchedCluEnergy_[2]
private

Definition at line 131 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ mtdgeoToken_

const edm::ESGetToken<MTDGeometry, MTDDigiGeometryRecord> EtlLocalRecoValidation::mtdgeoToken_
private

Definition at line 75 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ mtdtopoToken_

const edm::ESGetToken<MTDTopology, MTDTopologyRcd> EtlLocalRecoValidation::mtdtopoToken_
private

Definition at line 76 of file EtlLocalRecoValidation.cc.

◆ mtdTrackingHitToken_

edm::EDGetTokenT<MTDTrackingDetSetVector> EtlLocalRecoValidation::mtdTrackingHitToken_
private

Definition at line 73 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ nBinsEta_

constexpr int EtlLocalRecoValidation::nBinsEta_ = 26
staticprivate

Definition at line 140 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ nBinsQ_

constexpr int EtlLocalRecoValidation::nBinsQ_ = 20
staticprivate

Definition at line 135 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ optionalPlots_

const bool EtlLocalRecoValidation::optionalPlots_
private

Definition at line 65 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ uncalibRecHitsPlots_

const bool EtlLocalRecoValidation::uncalibRecHitsPlots_
private

Definition at line 66 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), bookHistograms(), and EtlLocalRecoValidation().