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]
 
MonitorElementmeCluEnergyRes_simLC_ [2]
 
MonitorElementmeCluEta_ [4]
 
MonitorElementmeCluHits_ [4]
 
MonitorElementmeCluOccupancy_ [4]
 
MonitorElementmeCluPhi_ [4]
 
MonitorElementmeCluTime_ [4]
 
MonitorElementmeCluTimeError_ [4]
 
MonitorElementmeCluTimeRes_ [2]
 
MonitorElementmeCluTimeRes_simLC_ [2]
 
MonitorElementmeCluTPullvsE_ [2]
 
MonitorElementmeCluTPullvsE_simLC_ [2]
 
MonitorElementmeCluTPullvsEta_ [2]
 
MonitorElementmeCluTPullvsEta_simLC_ [2]
 
MonitorElementmeCluXLocalErr_ [2]
 
MonitorElementmeCluXPull_ [2]
 
MonitorElementmeCluXPull_simLC_ [2]
 
MonitorElementmeCluXRes_ [2]
 
MonitorElementmeCluXRes_simLC_ [2]
 
MonitorElementmeCluYLocalErr_ [2]
 
MonitorElementmeCluYPull_ [2]
 
MonitorElementmeCluYPull_simLC_ [2]
 
MonitorElementmeCluYRes_ [2]
 
MonitorElementmeCluYRes_simLC_ [2]
 
MonitorElementmeCluYXLocal_ [2]
 
MonitorElementmeCluYXLocalSim_ [2]
 
MonitorElementmeCluYXLocalSim_simLC_ [2]
 
MonitorElementmeCluZRes_ [2]
 
MonitorElementmeCluZRes_simLC_ [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_
 
edm::EDGetTokenT< MtdRecoClusterToSimLayerClusterAssociationMapr2sAssociationMapToken_
 
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 49 of file EtlLocalRecoValidation.cc.

Constructor & Destructor Documentation

◆ EtlLocalRecoValidation()

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

Definition at line 168 of file EtlLocalRecoValidation.cc.

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

169  : folder_(iConfig.getParameter<std::string>("folder")),
170  hitMinEnergy2Dis_(iConfig.getParameter<double>("hitMinimumEnergy2Dis")),
171  optionalPlots_(iConfig.getParameter<bool>("optionalPlots")),
172  uncalibRecHitsPlots_(iConfig.getParameter<bool>("UncalibRecHitsPlots")),
173  hitMinAmplitude_(iConfig.getParameter<double>("HitMinimumAmplitude")),
174  mtdgeoToken_(esConsumes<MTDGeometry, MTDDigiGeometryRecord>()),
175  mtdtopoToken_(esConsumes<MTDTopology, MTDTopologyRcd>()),
176  cpeToken_(esConsumes<MTDClusterParameterEstimator, MTDCPERecord>(edm::ESInputTag("", "MTDCPEBase"))) {
177  etlRecHitsToken_ = consumes<FTLRecHitCollection>(iConfig.getParameter<edm::InputTag>("recHitsTag"));
180  consumes<FTLUncalibratedRecHitCollection>(iConfig.getParameter<edm::InputTag>("uncalibRecHitsTag"));
181  etlSimHitsToken_ = consumes<CrossingFrame<PSimHit>>(iConfig.getParameter<edm::InputTag>("simHitsTag"));
182  etlRecCluToken_ = consumes<FTLClusterCollection>(iConfig.getParameter<edm::InputTag>("recCluTag"));
183  mtdTrackingHitToken_ = consumes<MTDTrackingDetSetVector>(iConfig.getParameter<edm::InputTag>("trkHitTag"));
184  r2sAssociationMapToken_ = consumes<MtdRecoClusterToSimLayerClusterAssociationMap>(
185  iConfig.getParameter<edm::InputTag>("r2sAssociationMapTag"));
186 }
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< MtdRecoClusterToSimLayerClusterAssociationMap > r2sAssociationMapToken_
edm::EDGetTokenT< FTLClusterCollection > etlRecCluToken_

◆ ~EtlLocalRecoValidation()

EtlLocalRecoValidation::~EtlLocalRecoValidation ( )
override

Definition at line 188 of file EtlLocalRecoValidation.cc.

188 {}

Member Function Documentation

◆ analyze()

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

Reimplemented from DQMEDAnalyzer.

Definition at line 191 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, edmNew::makeRefTo(), edm::makeValid(), meCluEnergy_, meCluEnergyRes_, meCluEnergyRes_simLC_, meCluEta_, meCluHits_, meCluOccupancy_, meCluPhi_, meCluTime_, meCluTimeError_, meCluTimeRes_, meCluTimeRes_simLC_, meCluTPullvsE_, meCluTPullvsE_simLC_, meCluTPullvsEta_, meCluTPullvsEta_simLC_, meCluXLocalErr_, meCluXPull_, meCluXPull_simLC_, meCluXRes_, meCluXRes_simLC_, meCluYLocalErr_, meCluYPull_, meCluYPull_simLC_, meCluYRes_, meCluYRes_simLC_, meCluYXLocal_, meCluYXLocalSim_, meCluYXLocalSim_simLC_, meCluZRes_, meCluZRes_simLC_, 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, r2sAssociationMapToken_, nano_mu_digi_cff::rawId, DetId::rawId(), rpcPointValidation_cfi::recHit, edm::second(), 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().

191  {
192  using namespace edm;
193  using namespace std;
194  using namespace geant_units::operators;
195 
196  auto geometryHandle = iSetup.getTransientHandle(mtdgeoToken_);
197  const MTDGeometry* geom = geometryHandle.product();
198 
199  auto const& cpe = iSetup.getData(cpeToken_);
200 
201  auto etlRecHitsHandle = makeValid(iEvent.getHandle(etlRecHitsToken_));
202  auto etlSimHitsHandle = makeValid(iEvent.getHandle(etlSimHitsToken_));
203  auto etlRecCluHandle = makeValid(iEvent.getHandle(etlRecCluToken_));
204  auto mtdTrkHitHandle = makeValid(iEvent.getHandle(mtdTrackingHitToken_));
205  const auto& r2sAssociationMap = iEvent.get(r2sAssociationMapToken_);
206  MixCollection<PSimHit> etlSimHits(etlSimHitsHandle.product());
207 
208 #ifdef EDM_ML_DEBUG
209  for (const auto& hits : *mtdTrkHitHandle) {
210  if (MTDDetId(hits.id()).mtdSubDetector() == MTDDetId::MTDType::ETL) {
211  LogDebug("EtlLocalRecoValidation") << "MTD cluster DetId " << hits.id() << " # cluster " << hits.size();
212  for (const auto& hit : hits) {
213  LogDebug("EtlLocalRecoValidation")
214  << "MTD_TRH: " << hit.localPosition().x() << "," << hit.localPosition().y() << " : "
215  << hit.localPositionError().xx() << "," << hit.localPositionError().yy() << " : " << hit.time() << " : "
216  << hit.timeError();
217  }
218  }
219  }
220 #endif
221 
222  // --- Loop over the ETL SIM hits
223  std::unordered_map<uint32_t, MTDHit> m_etlSimHits[4];
224  for (auto const& simHit : etlSimHits) {
225  // --- Use only hits compatible with the in-time bunch-crossing
226  if (simHit.tof() < 0 || simHit.tof() > 25.)
227  continue;
228 
229  ETLDetId id = simHit.detUnitId();
230 
231  int idet = -1;
232 
233  if ((id.zside() == -1) && (id.nDisc() == 1)) {
234  idet = 0;
235  } else if ((id.zside() == -1) && (id.nDisc() == 2)) {
236  idet = 1;
237  } else if ((id.zside() == 1) && (id.nDisc() == 1)) {
238  idet = 2;
239  } else if ((id.zside() == 1) && (id.nDisc() == 2)) {
240  idet = 3;
241  } else {
242  edm::LogWarning("EtlLocalRecoValidation") << "Unknown ETL DetId configuration: " << id;
243  continue;
244  }
245 
246  auto simHitIt = m_etlSimHits[idet].emplace(id.rawId(), MTDHit()).first;
247 
248  // --- Accumulate the energy (in MeV) of SIM hits in the same detector cell
249  (simHitIt->second).energy += convertUnitsTo(0.001_MeV, simHit.energyLoss());
250 
251  // --- Get the time of the first SIM hit in the cell
252  if ((simHitIt->second).time == 0 || simHit.tof() < (simHitIt->second).time) {
253  (simHitIt->second).time = simHit.tof();
254 
255  auto hit_pos = simHit.localPosition();
256  (simHitIt->second).x = hit_pos.x();
257  (simHitIt->second).y = hit_pos.y();
258  (simHitIt->second).z = hit_pos.z();
259  }
260 
261  } // simHit loop
262 
263  // --- Loop over the ELT RECO hits
264  unsigned int n_reco_etl[4] = {0, 0, 0, 0};
265  for (const auto& recHit : *etlRecHitsHandle) {
266  double weight = 1.0;
267  ETLDetId detId = recHit.id();
268  DetId geoId = detId.geographicalId();
269  const MTDGeomDet* thedet = geom->idToDet(geoId);
270  if (thedet == nullptr)
271  throw cms::Exception("EtlLocalRecoValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
272  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
273  const ProxyMTDTopology& topoproxy = static_cast<const ProxyMTDTopology&>(thedet->topology());
274  const RectangularMTDTopology& topo = static_cast<const RectangularMTDTopology&>(topoproxy.specificTopology());
275 
276  Local3DPoint local_point(topo.localX(recHit.row()), topo.localY(recHit.column()), 0.);
277  const auto& global_point = thedet->toGlobal(local_point);
278 
279  int idet = 999;
280 
281  if (detId.discSide() == 1) {
282  weight = -weight;
283  }
284  if ((detId.zside() == -1) && (detId.nDisc() == 1)) {
285  idet = 0;
286  } else if ((detId.zside() == -1) && (detId.nDisc() == 2)) {
287  idet = 1;
288  } else if ((detId.zside() == 1) && (detId.nDisc() == 1)) {
289  idet = 2;
290  } else if ((detId.zside() == 1) && (detId.nDisc() == 2)) {
291  idet = 3;
292  } else {
293  edm::LogWarning("EtlLocalRecoValidation") << "Unknown ETL DetId configuration: " << detId;
294  continue;
295  }
296 
297  // --- Fill the histograms
298 
299  meHitEnergy_[idet]->Fill(recHit.energy());
300  meHitTime_[idet]->Fill(recHit.time());
301  meHitTimeError_[idet]->Fill(recHit.timeError());
302 
303  if ((idet == 0) || (idet == 1)) {
304  meHitXlocal_[0]->Fill(local_point.x());
305  meHitYlocal_[0]->Fill(local_point.y());
306  }
307  if ((idet == 2) || (idet == 3)) {
308  meHitXlocal_[1]->Fill(local_point.x());
309  meHitYlocal_[1]->Fill(local_point.y());
310  }
311 
312  if (optionalPlots_) {
313  meOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
314  if ((idet == 0) || (idet == 1)) {
315  meLocalOccupancy_[0]->Fill(local_point.x(), local_point.y());
316  }
317  if ((idet == 2) || (idet == 3)) {
318  meLocalOccupancy_[1]->Fill(local_point.x(), local_point.y());
319  }
320  }
321  meHitX_[idet]->Fill(global_point.x());
322  meHitY_[idet]->Fill(global_point.y());
323  meHitZ_[idet]->Fill(global_point.z());
324  meHitPhi_[idet]->Fill(global_point.phi());
325  meHitEta_[idet]->Fill(global_point.eta());
326  meHitTvsE_[idet]->Fill(recHit.energy(), recHit.time());
327  meHitEvsPhi_[idet]->Fill(global_point.phi(), recHit.energy());
328  meHitEvsEta_[idet]->Fill(global_point.eta(), recHit.energy());
329  meHitTvsPhi_[idet]->Fill(global_point.phi(), recHit.time());
330  meHitTvsEta_[idet]->Fill(global_point.eta(), recHit.time());
331 
332  // Resolution histograms
333  if (m_etlSimHits[idet].count(detId.rawId()) == 1) {
334  if (m_etlSimHits[idet][detId.rawId()].energy > hitMinEnergy2Dis_) {
335  float time_res = recHit.time() - m_etlSimHits[idet][detId.rawId()].time;
336  float energy_res = recHit.energy() - m_etlSimHits[idet][detId.rawId()].energy;
337 
338  meTimeRes_->Fill(time_res);
339  meEnergyRes_->Fill(energy_res);
340 
341  meTPullvsEta_->Fill(std::abs(global_point.eta()), time_res / recHit.timeError());
342  meTPullvsE_->Fill(m_etlSimHits[idet][detId.rawId()].energy, time_res / recHit.timeError());
343  }
344  }
345 
346  n_reco_etl[idet]++;
347  } // recHit loop
348 
349  for (int i = 0; i < 4; i++) {
350  meNhits_[i]->Fill(std::log10(n_reco_etl[i]));
351  }
352 
353  size_t index(0);
354 
355  // --- Loop over the ETL RECO clusters ---
356  for (const auto& DetSetClu : *etlRecCluHandle) {
357  for (const auto& cluster : DetSetClu) {
358  double weight = 1.0;
359  if (cluster.energy() < hitMinEnergy2Dis_) {
360  continue;
361  }
362  ETLDetId cluId = cluster.id();
363  DetId detIdObject(cluId);
364  const auto& genericDet = geom->idToDetUnit(detIdObject);
365  if (genericDet == nullptr) {
366  throw cms::Exception("EtlLocalRecoValidation")
367  << "GeographicalID: " << std::hex << cluId << " is invalid!" << std::dec << std::endl;
368  }
369 
370  MTDClusterParameterEstimator::ReturnType tuple = cpe.getParameters(cluster, *genericDet);
371 
372  // --- Cluster position in the module reference frame
373  LocalPoint local_point(std::get<0>(tuple));
374  const auto& global_point = genericDet->toGlobal(local_point);
375 
376  int idet = 999;
377 
378  if (cluId.discSide() == 1) {
379  weight = -weight;
380  }
381  if ((cluId.zside() == -1) && (cluId.nDisc() == 1)) {
382  idet = 0;
383  } else if ((cluId.zside() == -1) && (cluId.nDisc() == 2)) {
384  idet = 1;
385  } else if ((cluId.zside() == 1) && (cluId.nDisc() == 1)) {
386  idet = 2;
387  } else if ((cluId.zside() == 1) && (cluId.nDisc() == 2)) {
388  idet = 3;
389  } else {
390  edm::LogWarning("EtlLocalRecoValidation") << "Unknown ETL DetId configuration: " << cluId;
391  continue;
392  }
393 
394  index++;
395  LogDebug("EtlLocalRecoValidation") << "Cluster # " << index << " DetId " << cluId.rawId() << " idet " << idet;
396 
397  meCluEnergy_[idet]->Fill(cluster.energy());
398  meCluTime_[idet]->Fill(cluster.time());
399  meCluTimeError_[idet]->Fill(cluster.timeError());
400  meCluPhi_[idet]->Fill(global_point.phi());
401  meCluEta_[idet]->Fill(global_point.eta());
402  meCluHits_[idet]->Fill(cluster.size());
403  if (optionalPlots_) {
404  meCluOccupancy_[idet]->Fill(global_point.x(), global_point.y(), weight);
405  }
406 
407  // --- Get the SIM hits associated to the cluster and calculate
408  // the cluster SIM energy, time and position
409 
410  double cluEneSIM = 0.;
411  double cluTimeSIM = 0.;
412  double cluLocXSIM = 0.;
413  double cluLocYSIM = 0.;
414  double cluLocZSIM = 0.;
415 
416  for (int ihit = 0; ihit < cluster.size(); ++ihit) {
417  int hit_row = cluster.minHitRow() + cluster.hitOffset()[ihit * 2];
418  int hit_col = cluster.minHitCol() + cluster.hitOffset()[ihit * 2 + 1];
419 
420  // Match the RECO hit to the corresponding SIM hit
421  for (const auto& recHit : *etlRecHitsHandle) {
422  ETLDetId hitId(recHit.id().rawId());
423 
424  if (m_etlSimHits[idet].count(hitId.rawId()) == 0)
425  continue;
426 
427  // Check the hit position
428  if (hitId.zside() != cluId.zside() || hitId.mtdRR() != cluId.mtdRR() || hitId.module() != cluId.module() ||
429  recHit.row() != hit_row || recHit.column() != hit_col)
430  continue;
431 
432  // Check the hit energy and time
433  if (recHit.energy() != cluster.hitENERGY()[ihit] || recHit.time() != cluster.hitTIME()[ihit])
434  continue;
435 
436  // SIM hit's position in the module reference frame
437  Local3DPoint local_point_sim(convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].x),
438  convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].y),
439  convertMmToCm(m_etlSimHits[idet][recHit.id().rawId()].z));
440 
441  // Calculate the SIM cluster's position in the module reference frame
442  cluLocXSIM += local_point_sim.x() * m_etlSimHits[idet][recHit.id().rawId()].energy;
443  cluLocYSIM += local_point_sim.y() * m_etlSimHits[idet][recHit.id().rawId()].energy;
444  cluLocZSIM += local_point_sim.z() * m_etlSimHits[idet][recHit.id().rawId()].energy;
445 
446  // Calculate the SIM cluster energy and time
447  cluEneSIM += m_etlSimHits[idet][recHit.id().rawId()].energy;
448  cluTimeSIM += m_etlSimHits[idet][recHit.id().rawId()].time * m_etlSimHits[idet][recHit.id().rawId()].energy;
449 
450  break;
451 
452  } // recHit loop
453 
454  } // ihit loop
455 
456  // Find the MTDTrackingRecHit corresponding to the cluster
457  MTDTrackingRecHit* comp(nullptr);
458  bool matchClu = false;
459  const auto& trkHits = (*mtdTrkHitHandle)[detIdObject];
460  for (const auto& trkHit : trkHits) {
461  if (isSameCluster(trkHit.mtdCluster(), cluster)) {
462  comp = trkHit.clone();
463  matchClu = true;
464  break;
465  }
466  }
467  if (!matchClu) {
468  edm::LogWarning("BtlLocalRecoValidation")
469  << "No valid TrackingRecHit corresponding to cluster, detId = " << detIdObject.rawId();
470  }
471 
472  // --- Fill the cluster resolution histograms
473  int iside = (cluId.zside() == -1 ? 0 : 1);
474  if (cluTimeSIM > 0. && cluEneSIM > 0.) {
475  cluTimeSIM /= cluEneSIM;
476 
477  Local3DPoint cluLocalPosSIM(cluLocXSIM / cluEneSIM, cluLocYSIM / cluEneSIM, cluLocZSIM / cluEneSIM);
478  const auto& cluGlobalPosSIM = genericDet->toGlobal(cluLocalPosSIM);
479 
480  float time_res = cluster.time() - cluTimeSIM;
481  float energy_res = cluster.energy() - cluEneSIM;
482  float x_res = global_point.x() - cluGlobalPosSIM.x();
483  float y_res = global_point.y() - cluGlobalPosSIM.y();
484  float z_res = global_point.z() - cluGlobalPosSIM.z();
485 
486  meCluTimeRes_[iside]->Fill(time_res);
487  meCluEnergyRes_[iside]->Fill(energy_res);
488  meCluXRes_[iside]->Fill(x_res);
489  meCluYRes_[iside]->Fill(y_res);
490  meCluZRes_[iside]->Fill(z_res);
491 
492  meCluTPullvsEta_[iside]->Fill(cluGlobalPosSIM.eta(), time_res / cluster.timeError());
493  meCluTPullvsE_[iside]->Fill(cluEneSIM, time_res / cluster.timeError());
494 
495  if (matchClu && comp != nullptr) {
496  meCluXPull_[iside]->Fill(x_res / std::sqrt(comp->globalPositionError().cxx()));
497  meCluYPull_[iside]->Fill(y_res / std::sqrt(comp->globalPositionError().cyy()));
498  meCluXLocalErr_[iside]->Fill(std::sqrt(comp->localPositionError().xx()));
499  meCluYLocalErr_[iside]->Fill(std::sqrt(comp->localPositionError().yy()));
500  }
501  if (optionalPlots_) {
502  meCluYXLocal_[iside]->Fill(local_point.x(), local_point.y());
503  meCluYXLocalSim_[iside]->Fill(cluLocalPosSIM.x(), cluLocalPosSIM.y());
504  }
505 
506  } // if ( cluTimeSIM > 0. && cluEneSIM > 0. )
507  else {
508  meUnmatchedCluEnergy_[iside]->Fill(std::log10(cluster.energy()));
509  }
510 
511  // --- Fill the cluster resolution histograms using MtdSimLayerClusters as mtd truth
512  edm::Ref<edmNew::DetSetVector<FTLCluster>, FTLCluster> clusterRef = edmNew::makeRefTo(etlRecCluHandle, &cluster);
513  auto itp = r2sAssociationMap.equal_range(clusterRef);
514  if (itp.first != itp.second) {
515  std::vector<MtdSimLayerClusterRef> simClustersRefs =
516  (*itp.first).second; // the range of itp.first, itp.second should be always 1
517  for (unsigned int i = 0; i < simClustersRefs.size(); i++) {
518  auto simClusterRef = simClustersRefs[i];
519 
520  float simClusEnergy = convertUnitsTo(0.001_MeV, (*simClusterRef).simLCEnergy()); // GeV --> MeV
521  float simClusTime = (*simClusterRef).simLCTime();
522  LocalPoint simClusLocalPos = (*simClusterRef).simLCPos();
523  const auto& simClusGlobalPos = genericDet->toGlobal(simClusLocalPos);
524 
525  float time_res = cluster.time() - simClusTime;
526  float energy_res = cluster.energy() - simClusEnergy;
527  float x_res = global_point.x() - simClusGlobalPos.x();
528  float y_res = global_point.y() - simClusGlobalPos.y();
529  float z_res = global_point.z() - simClusGlobalPos.z();
530 
531  meCluTimeRes_simLC_[iside]->Fill(time_res);
532  meCluEnergyRes_simLC_[iside]->Fill(energy_res);
533  meCluXRes_simLC_[iside]->Fill(x_res);
534  meCluYRes_simLC_[iside]->Fill(y_res);
535  meCluZRes_simLC_[iside]->Fill(z_res);
536 
537  meCluTPullvsEta_simLC_[iside]->Fill(simClusGlobalPos.eta(), time_res / cluster.timeError());
538  meCluTPullvsE_simLC_[iside]->Fill(simClusEnergy, time_res / cluster.timeError());
539 
540  if (matchClu && comp != nullptr) {
541  meCluXPull_simLC_[iside]->Fill(x_res / std::sqrt(comp->globalPositionError().cxx()));
542  meCluYPull_simLC_[iside]->Fill(y_res / std::sqrt(comp->globalPositionError().cyy()));
543  }
544  if (optionalPlots_) {
545  meCluYXLocalSim_simLC_[iside]->Fill(simClusLocalPos.x(), simClusLocalPos.y());
546  }
547 
548  } // loop over MtdSimLayerClusters
549  }
550 
551  } // cluster loop
552 
553  } // DetSetClu loop
554 
555  // --- Loop over the ETL Uncalibrated RECO hits
556  if (uncalibRecHitsPlots_) {
557  auto etlUncalibRecHitsHandle = makeValid(iEvent.getHandle(etlUncalibRecHitsToken_));
558 
559  for (const auto& uRecHit : *etlUncalibRecHitsHandle) {
560  ETLDetId detId = uRecHit.id();
561 
562  int idet = detId.zside() + detId.nDisc();
563 
564  // --- Skip UncalibratedRecHits not matched to SimHits
565  if (m_etlSimHits[idet].count(detId.rawId()) != 1)
566  continue;
567 
568  DetId geoId = detId.geographicalId();
569  const MTDGeomDet* thedet = geom->idToDet(geoId);
570  if (thedet == nullptr)
571  throw cms::Exception("EtlLocalRecoValidation") << "GeographicalID: " << std::hex << geoId.rawId() << " ("
572  << detId.rawId() << ") is invalid!" << std::dec << std::endl;
573 
574  const ProxyMTDTopology& topoproxy = static_cast<const ProxyMTDTopology&>(thedet->topology());
575  const RectangularMTDTopology& topo = static_cast<const RectangularMTDTopology&>(topoproxy.specificTopology());
576 
577  Local3DPoint local_point(topo.localX(uRecHit.row()), topo.localY(uRecHit.column()), 0.);
578  const auto& global_point = thedet->toGlobal(local_point);
579 
580  // --- Fill the histograms
581 
582  if (uRecHit.amplitude().first < hitMinAmplitude_)
583  continue;
584 
585  float time_res = uRecHit.time().first - m_etlSimHits[idet][detId.rawId()].time;
586 
587  int iside = (detId.zside() == -1 ? 0 : 1);
588 
589  // amplitude histograms
590 
591  int qBin = (int)(uRecHit.amplitude().first / binWidthQ_);
592  if (qBin > nBinsQ_ - 1)
593  qBin = nBinsQ_ - 1;
594 
595  meTimeResQ_[iside][qBin]->Fill(time_res);
596 
597  // eta histograms
598 
599  int etaBin = (int)((fabs(global_point.eta()) - etaMin_) / binWidthEta_);
600  if (etaBin < 0)
601  etaBin = 0;
602  else if (etaBin > nBinsEta_ - 1)
603  etaBin = nBinsEta_ - 1;
604 
605  meTimeResEta_[iside][etaBin]->Fill(time_res);
606 
607  } // uRecHit loop
608  }
609 }
edm::Ref< typename HandleT::element_type, typename HandleT::element_type::value_type::value_type > makeRefTo(const HandleT &iHandle, typename HandleT::element_type::value_type::const_iterator itIter)
MonitorElement * meCluTimeRes_simLC_[2]
MonitorElement * meCluXRes_simLC_[2]
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 * meCluTPullvsEta_simLC_[2]
MonitorElement * meTimeResEta_[2][nBinsEta_]
int zside(DetId const &)
MonitorElement * meCluEnergyRes_simLC_[2]
MonitorElement * meHitTvsE_[4]
MonitorElement * meCluTPullvsE_simLC_[2]
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)
U second(std::pair< T, U > const &p)
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
MonitorElement * meHitEvsEta_[4]
MonitorElement * meHitTvsEta_[4]
MonitorElement * meCluTimeRes_[2]
int iEvent
Definition: GenABIO.cc:224
MonitorElement * meCluHits_[4]
MonitorElement * meCluZRes_simLC_[2]
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 * meCluYPull_simLC_[2]
MonitorElement * meCluXPull_[2]
const edm::ESGetToken< MTDGeometry, MTDDigiGeometryRecord > mtdgeoToken_
int module() const
Definition: ETLDetId.h:133
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 * meCluYXLocalSim_simLC_[2]
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:150
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
edm::EDGetTokenT< MtdRecoClusterToSimLayerClusterAssociationMap > r2sAssociationMapToken_
static constexpr float binWidthEta_
Detector identifier class for the Endcap Timing Layer.
Definition: ETLDetId.h:16
HLT enums.
int nDisc() const
Definition: ETLDetId.h:155
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 * meCluYRes_simLC_[2]
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
MonitorElement * meCluXPull_simLC_[2]
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 612 of file EtlLocalRecoValidation.cc.

References dqm::implementation::IBooker::book1D(), dqm::implementation::IBooker::book2D(), dqm::implementation::IBooker::bookProfile(), data, folder_, meCluEnergy_, meCluEnergyRes_, meCluEnergyRes_simLC_, meCluEta_, meCluHits_, meCluOccupancy_, meCluPhi_, meCluTime_, meCluTimeError_, meCluTimeRes_, meCluTimeRes_simLC_, meCluTPullvsE_, meCluTPullvsE_simLC_, meCluTPullvsEta_, meCluTPullvsEta_simLC_, meCluXLocalErr_, meCluXPull_, meCluXPull_simLC_, meCluXRes_, meCluXRes_simLC_, meCluYLocalErr_, meCluYPull_, meCluYPull_simLC_, meCluYRes_, meCluYRes_simLC_, meCluYXLocal_, meCluYXLocalSim_, meCluYXLocalSim_simLC_, meCluZRes_, meCluZRes_simLC_, 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_.

614  {
615  ibook.setCurrentFolder(folder_);
616 
617  // --- histograms booking
618 
619  meNhits_[0] = ibook.book1D("EtlNhitsZnegD1",
620  "Number of ETL RECO hits (-Z, Single(topo1D)/First(topo2D) disk);log_10(N_{RECO})",
621  100,
622  0.,
623  5.25);
624  meNhits_[1] =
625  ibook.book1D("EtlNhitsZnegD2", "Number of ETL RECO hits (-Z, Second disk);log_10(N_{RECO})", 100, 0., 5.25);
626  meNhits_[2] = ibook.book1D("EtlNhitsZposD1",
627  "Number of ETL RECO hits (+Z, Single(topo1D)/First(topo2D) disk);log_10(N_{RECO})",
628  100,
629  0.,
630  5.25);
631  meNhits_[3] =
632  ibook.book1D("EtlNhitsZposD2", "Number of ETL RECO hits (+Z, Second disk);log_10(N_{RECO})", 100, 0., 5.25);
633  meHitEnergy_[0] = ibook.book1D(
634  "EtlHitEnergyZnegD1", "ETL RECO hits energy (-Z, Single(topo1D)/First(topo2D) disk);E_{RECO} [MeV]", 40, 0., 1.);
635  meHitEnergy_[1] =
636  ibook.book1D("EtlHitEnergyZnegD2", "ETL RECO hits energy (-Z, Second disk);E_{RECO} [MeV]", 40, 0., 1.);
637  meHitEnergy_[2] = ibook.book1D(
638  "EtlHitEnergyZposD1", "ETL RECO hits energy (+Z, Single(topo1D)/First(topo2D) disk);E_{RECO} [MeV]", 40, 0., 1.);
639  meHitEnergy_[3] =
640  ibook.book1D("EtlHitEnergyZposD2", "ETL RECO hits energy (+Z, Second disk);E_{RECO} [MeV]", 40, 0., 1.);
641  meHitTime_[0] = ibook.book1D(
642  "EtlHitTimeZnegD1", "ETL RECO hits ToA (-Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
643  meHitTime_[1] = ibook.book1D("EtlHitTimeZnegD2", "ETL RECO hits ToA (-Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
644  meHitTime_[2] = ibook.book1D(
645  "EtlHitTimeZposD1", "ETL RECO hits ToA (+Z, Single(topo1D)/First(topo2D) disk);ToA_{RECO} [ns]", 100, 0., 25.);
646  meHitTime_[3] = ibook.book1D("EtlHitTimeZposD2", "ETL RECO hits ToA (+Z, Second disk);ToA_{RECO} [ns]", 100, 0., 25.);
647  meHitTimeError_[0] =
648  ibook.book1D("EtlHitTimeErrorZnegD1",
649  "ETL RECO hits ToA error (-Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
650  50,
651  0.,
652  0.1);
653  meHitTimeError_[1] = ibook.book1D(
654  "EtlHitTimeErrorZnegD2", "ETL RECO hits ToA error(-Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
655  meHitTimeError_[2] =
656  ibook.book1D("EtlHitTimeErrorZposD1",
657  "ETL RECO hits ToA error (+Z, Single(topo1D)/First(topo2D) disk);#sigma^{ToA}_{RECO} [ns]",
658  50,
659  0.,
660  0.1);
661  meHitTimeError_[3] = ibook.book1D(
662  "EtlHitTimeErrorZposD2", "ETL RECO hits ToA error(+Z, Second disk);#sigma^{ToA}_{RECO} [ns]", 50, 0., 0.1);
663 
664  if (optionalPlots_) {
665  meOccupancy_[0] =
666  ibook.book2D("EtlOccupancyZnegD1",
667  "ETL RECO hits occupancy (-Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
668  135,
669  -135.,
670  135.,
671  135,
672  -135.,
673  135.);
674  meOccupancy_[1] = ibook.book2D("EtlOccupancyZnegD2",
675  "ETL RECO hits occupancy (-Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
676  135,
677  -135.,
678  135.,
679  135,
680  -135.,
681  135.);
682  meOccupancy_[2] =
683  ibook.book2D("EtlOccupancyZposD1",
684  "ETL RECO hits occupancy (+Z, Single(topo1D)/First(topo2D) disk);X_{RECO} [cm];Y_{RECO} [cm]",
685  135,
686  -135.,
687  135.,
688  135,
689  -135.,
690  135.);
691  meOccupancy_[3] = ibook.book2D("EtlOccupancyZposD2",
692  "ETL RECO hits occupancy (+Z, Second disk);X_{RECO} [cm];Y_{RECO} [cm]",
693  135,
694  -135.,
695  135.,
696  135,
697  -135.,
698  135.);
699  meLocalOccupancy_[0] = ibook.book2D("EtlLocalOccupancyZneg",
700  "ETL RECO hits local occupancy (-Z);X_{RECO} [cm];Y_{RECO} [cm]",
701  100,
702  -2.2,
703  2.2,
704  50,
705  -1.1,
706  1.1);
707  meLocalOccupancy_[1] = ibook.book2D("EtlLocalOccupancyZpos",
708  "ETL RECO hits local occupancy (+Z);X_{RECO} [cm];Y_{RECO} [cm]",
709  100,
710  -2.2,
711  2.2,
712  50,
713  -1.1,
714  1.1);
715  }
716  meHitXlocal_[0] = ibook.book1D("EtlHitXlocalZneg", "ETL RECO local X (-Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
717  meHitXlocal_[1] = ibook.book1D("EtlHitXlocalZpos", "ETL RECO local X (+Z);X_{RECO}^{LOC} [cm]", 100, -2.2, 2.2);
718  meHitYlocal_[0] = ibook.book1D("EtlHitYlocalZneg", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
719  meHitYlocal_[1] = ibook.book1D("EtlHitYlocalZpos", "ETL RECO local Y (-Z);Y_{RECO}^{LOC} [cm]", 50, -1.1, 1.1);
720  meHitX_[0] = ibook.book1D(
721  "EtlHitXZnegD1", "ETL RECO hits X (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
722  meHitX_[1] = ibook.book1D("EtlHitXZnegD2", "ETL RECO hits X (-Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
723  meHitX_[2] = ibook.book1D(
724  "EtlHitXZposD1", "ETL RECO hits X (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]", 100, -130., 130.);
725  meHitX_[3] = ibook.book1D("EtlHitXZposD2", "ETL RECO hits X (+Z, Second Disk);X_{RECO} [cm]", 100, -130., 130.);
726  meHitY_[0] = ibook.book1D(
727  "EtlHitYZnegD1", "ETL RECO hits Y (-Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
728  meHitY_[1] = ibook.book1D("EtlHitYZnegD2", "ETL RECO hits Y (-Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
729  meHitY_[2] = ibook.book1D(
730  "EtlHitYZposD1", "ETL RECO hits Y (+Z, Single(topo1D)/First(topo2D) Disk);Y_{RECO} [cm]", 100, -130., 130.);
731  meHitY_[3] = ibook.book1D("EtlHitYZposD2", "ETL RECO hits Y (+Z, Second Disk);Y_{RECO} [cm]", 100, -130., 130.);
732  meHitZ_[0] = ibook.book1D(
733  "EtlHitZZnegD1", "ETL RECO hits Z (-Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, -302., -298.);
734  meHitZ_[1] = ibook.book1D("EtlHitZZnegD2", "ETL RECO hits Z (-Z, Second Disk);Z_{RECO} [cm]", 100, -304., -300.);
735  meHitZ_[2] = ibook.book1D(
736  "EtlHitZZposD1", "ETL RECO hits Z (+Z, Single(topo1D)/First(topo2D) Disk);Z_{RECO} [cm]", 100, 298., 302.);
737  meHitZ_[3] = ibook.book1D("EtlHitZZposD2", "ETL RECO hits Z (+Z, Second Disk);Z_{RECO} [cm]", 100, 300., 304.);
738  meHitPhi_[0] = ibook.book1D(
739  "EtlHitPhiZnegD1", "ETL RECO hits #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
740  meHitPhi_[1] =
741  ibook.book1D("EtlHitPhiZnegD2", "ETL RECO hits #phi (-Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
742  meHitPhi_[2] = ibook.book1D(
743  "EtlHitPhiZposD1", "ETL RECO hits #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
744  meHitPhi_[3] =
745  ibook.book1D("EtlHitPhiZposD2", "ETL RECO hits #phi (+Z, Second Disk);#phi_{RECO} [rad]", 100, -3.2, 3.2);
746  meHitEta_[0] = ibook.book1D(
747  "EtlHitEtaZnegD1", "ETL RECO hits #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.56);
748  meHitEta_[1] = ibook.book1D("EtlHitEtaZnegD2", "ETL RECO hits #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.56);
749  meHitEta_[2] = ibook.book1D(
750  "EtlHitEtaZposD1", "ETL RECO hits #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.56, 3.2);
751  meHitEta_[3] = ibook.book1D("EtlHitEtaZposD2", "ETL RECO hits #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.56, 3.2);
752  meTimeRes_ = ibook.book1D("EtlTimeRes", "ETL time resolution;T_{RECO}-T_{SIM}", 100, -0.5, 0.5);
753  meEnergyRes_ = ibook.book1D("EtlEnergyRes", "ETL energy resolution;E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
754  meHitTvsE_[0] = ibook.bookProfile(
755  "EtlHitTvsEZnegD1",
756  "ETL RECO time vs energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
757  50,
758  0.,
759  2.,
760  0.,
761  100.);
762  meHitTvsE_[1] = ibook.bookProfile("EtlHitTvsEZnegD2",
763  "ETL RECO time vs energy (-Z, Second Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
764  50,
765  0.,
766  2.,
767  0.,
768  100.);
769  meHitTvsE_[2] = ibook.bookProfile(
770  "EtlHitTvsEZposD1",
771  "ETL RECO time vs energy (+Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
772  50,
773  0.,
774  2.,
775  0.,
776  100.);
777  meHitTvsE_[3] = ibook.bookProfile("EtlHitTvsEZposD2",
778  "ETL RECO time vs energy (+Z, Second Disk);E_{RECO} [MeV];ToA_{RECO} [ns]",
779  50,
780  0.,
781  2.,
782  0.,
783  100.);
784  meHitEvsPhi_[0] = ibook.bookProfile(
785  "EtlHitEvsPhiZnegD1",
786  "ETL RECO energy vs #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
787  50,
788  -3.2,
789  3.2,
790  0.,
791  100.);
792  meHitEvsPhi_[1] = ibook.bookProfile("EtlHitEvsPhiZnegD2",
793  "ETL RECO energy vs #phi (-Z, Second Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
794  50,
795  -3.2,
796  3.2,
797  0.,
798  100.);
799  meHitEvsPhi_[2] = ibook.bookProfile(
800  "EtlHitEvsPhiZposD1",
801  "ETL RECO energy vs #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
802  50,
803  -3.2,
804  3.2,
805  0.,
806  100.);
807  meHitEvsPhi_[3] = ibook.bookProfile("EtlHitEvsPhiZposD2",
808  "ETL RECO energy vs #phi (+Z, Second Disk);#phi_{RECO} [rad];E_{RECO} [MeV]",
809  50,
810  -3.2,
811  3.2,
812  0.,
813  100.);
814  meHitEvsEta_[0] =
815  ibook.bookProfile("EtlHitEvsEtaZnegD1",
816  "ETL RECO energy vs #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};E_{RECO} [MeV]",
817  50,
818  -3.2,
819  -1.56,
820  0.,
821  100.);
822  meHitEvsEta_[1] = ibook.bookProfile("EtlHitEvsEtaZnegD2",
823  "ETL RECO energy vs #eta (-Z, Second Disk);#eta_{RECO};E_{RECO} [MeV]",
824  50,
825  -3.2,
826  -1.56,
827  0.,
828  100.);
829  meHitEvsEta_[2] =
830  ibook.bookProfile("EtlHitEvsEtaZposD1",
831  "ETL RECO energy vs #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};E_{RECO} [MeV]",
832  50,
833  1.56,
834  3.2,
835  0.,
836  100.);
837  meHitEvsEta_[3] = ibook.bookProfile("EtlHitEvsEtaZposD2",
838  "ETL RECO energy vs #eta (+Z, Second Disk);#eta_{RECO};E_{RECO} [MeV]",
839  50,
840  1.56,
841  3.2,
842  0.,
843  100.);
844  meHitTvsPhi_[0] = ibook.bookProfile(
845  "EtlHitTvsPhiZnegD1",
846  "ETL RECO time vs #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
847  50,
848  -3.2,
849  3.2,
850  0.,
851  100.);
852  meHitTvsPhi_[1] = ibook.bookProfile("EtlHitTvsPhiZnegD2",
853  "ETL RECO time vs #phi (-Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
854  50,
855  -3.2,
856  3.2,
857  0.,
858  100.);
859  meHitTvsPhi_[2] = ibook.bookProfile(
860  "EtlHitTvsPhiZposD1",
861  "ETL RECO time vs #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
862  50,
863  -3.2,
864  3.2,
865  0.,
866  100.);
867  meHitTvsPhi_[3] = ibook.bookProfile("EtlHitTvsPhiZposD2",
868  "ETL RECO time vs #phi (+Z, Second Disk);#phi_{RECO} [rad];ToA_{RECO} [ns]",
869  50,
870  -3.2,
871  3.2,
872  0.,
873  100.);
874  meHitTvsEta_[0] =
875  ibook.bookProfile("EtlHitTvsEtaZnegD1",
876  "ETL RECO time vs #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
877  50,
878  -3.2,
879  -1.56,
880  0.,
881  100.);
882  meHitTvsEta_[1] = ibook.bookProfile("EtlHitTvsEtaZnegD2",
883  "ETL RECO time vs #eta (-Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
884  50,
885  -3.2,
886  -1.56,
887  0.,
888  100.);
889  meHitTvsEta_[2] =
890  ibook.bookProfile("EtlHitTvsEtaZposD1",
891  "ETL RECO time vs #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO};ToA_{RECO} [ns]",
892  50,
893  1.56,
894  3.2,
895  0.,
896  100.);
897  meHitTvsEta_[3] = ibook.bookProfile("EtlHitTvsEtaZposD2",
898  "ETL RECO time vs #eta (+Z, Second Disk);#eta_{RECO};ToA_{RECO} [ns]",
899  50,
900  1.56,
901  3.2,
902  0.,
903  100.);
904  meTPullvsE_ = ibook.bookProfile(
905  "EtlTPullvsE", "ETL time pull vs E;E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}", 20, 0., 2., -5., 5., "S");
906  meTPullvsEta_ = ibook.bookProfile("EtlTPullvsEta",
907  "ETL time pull vs #eta;|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
908  26,
909  1.65,
910  3.0,
911  -5.,
912  5.,
913  "S");
914  meCluTime_[0] =
915  ibook.book1D("EtlCluTimeZnegD1", "ETL cluster ToA (-Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
916  meCluTime_[1] = ibook.book1D("EtlCluTimeZnegD2", "ETL cluster ToA (-Z, Second Disk);ToA [ns]", 250, 0, 25);
917  meCluTime_[2] =
918  ibook.book1D("EtlCluTimeZposD1", "ETL cluster ToA (+Z, Single(topo1D)/First(topo2D) Disk);ToA [ns]", 250, 0, 25);
919  meCluTime_[3] = ibook.book1D("EtlCluTimeZposD2", "ETL cluster ToA (+Z, Second Disk);ToA [ns]", 250, 0, 25);
920  meCluTimeError_[0] = ibook.book1D("EtlCluTimeErrosZnegD1",
921  "ETL cluster time error (-Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
922  100,
923  0,
924  0.1);
925  meCluTimeError_[1] =
926  ibook.book1D("EtlCluTimeErrorZnegD2", "ETL cluster time error (-Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
927  meCluTimeError_[2] = ibook.book1D("EtlCluTimeErrorZposD1",
928  "ETL cluster time error (+Z, Single(topo1D)/First(topo2D) Disk);#sigma_{t} [ns]",
929  100,
930  0,
931  0.1);
932  meCluTimeError_[3] =
933  ibook.book1D("EtlCluTimeErrorZposD2", "ETL cluster time error (+Z, Second Disk);#sigma_{t} [ns]", 100, 0, 0.1);
934  meCluEnergy_[0] = ibook.book1D(
935  "EtlCluEnergyZnegD1", "ETL cluster energy (-Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 40, 0, 2);
936  meCluEnergy_[1] = ibook.book1D("EtlCluEnergyZnegD2", "ETL cluster energy (-Z, Second Disk);E_{RECO} [MeV]", 40, 0, 2);
937  meCluEnergy_[2] = ibook.book1D(
938  "EtlCluEnergyZposD1", "ETL cluster energy (+Z, Single(topo1D)/First(topo2D) Disk);E_{RECO} [MeV]", 40, 0, 2);
939  meCluEnergy_[3] = ibook.book1D("EtlCluEnergyZposD2", "ETL cluster energy (+Z, Second Disk);E_{RECO} [MeV]", 40, 0, 2);
940  meCluPhi_[0] = ibook.book1D(
941  "EtlCluPhiZnegD1", "ETL cluster #phi (-Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
942  meCluPhi_[1] =
943  ibook.book1D("EtlCluPhiZnegD2", "ETL cluster #phi (-Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
944  meCluPhi_[2] = ibook.book1D(
945  "EtlCluPhiZposD1", "ETL cluster #phi (+Z, Single(topo1D)/First(topo2D) Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
946  meCluPhi_[3] =
947  ibook.book1D("EtlCluPhiZposD2", "ETL cluster #phi (+Z, Second Disk);#phi_{RECO} [rad]", 126, -3.2, 3.2);
948  meCluEta_[0] = ibook.book1D(
949  "EtlCluEtaZnegD1", "ETL cluster #eta (-Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, -3.2, -1.4);
950  meCluEta_[1] = ibook.book1D("EtlCluEtaZnegD2", "ETL cluster #eta (-Z, Second Disk);#eta_{RECO}", 100, -3.2, -1.4);
951  meCluEta_[2] = ibook.book1D(
952  "EtlCluEtaZposD1", "ETL cluster #eta (+Z, Single(topo1D)/First(topo2D) Disk);#eta_{RECO}", 100, 1.4, 3.2);
953  meCluEta_[3] = ibook.book1D("EtlCluEtaZposD2", "ETL cluster #eta (+Z, Second Disk);#eta_{RECO}", 100, 1.4, 3.2);
954  meCluHits_[0] = ibook.book1D(
955  "EtlCluHitNumberZnegD1", "ETL hits per cluster (-Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 5, 0, 5);
956  meCluHits_[1] = ibook.book1D("EtlCluHitNumberZnegD2", "ETL hits per cluster (-Z, Second Disk);Cluster size", 5, 0, 5);
957  meCluHits_[2] = ibook.book1D(
958  "EtlCluHitNumberZposD1", "ETL hits per cluster (+Z, Single(topo1D)/First(topo2D) Disk);Cluster size", 5, 0, 5);
959  meCluHits_[3] = ibook.book1D("EtlCluHitNumberZposD2", "ETL hits per cluster (+Z, Second Disk);Cluster size", 5, 0, 5);
960 
961  meCluTimeRes_[0] =
962  ibook.book1D("EtlCluTimeResZneg", "ETL cluster time resolution (-Z);T_{RECO}-T_{SIM} [ns]", 100, -0.5, 0.5);
963  meCluTimeRes_[1] =
964  ibook.book1D("EtlCluTimeResZpos", "ETL cluster time resolution (+Z);T_{RECO}-T_{SIM} [MeV]", 100, -0.5, 0.5);
965  meCluEnergyRes_[0] =
966  ibook.book1D("EtlCluEnergyResZneg", "ETL cluster energy resolution (-Z);E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
967  meCluEnergyRes_[1] =
968  ibook.book1D("EtlCluEnergyResZpos", "ETL cluster energy resolution (+Z);E_{RECO}-E_{SIM}", 100, -0.5, 0.5);
969 
970  meCluTPullvsE_[0] =
971  ibook.bookProfile("EtlCluTPullvsEZneg",
972  "ETL cluster time pull vs E (-Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
973  25,
974  0.,
975  0.5,
976  -5.,
977  5.,
978  "S");
979  meCluTPullvsE_[1] =
980  ibook.bookProfile("EtlCluTPullvsEZpos",
981  "ETL cluster time pull vs E (+Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
982  25,
983  0.,
984  0.5,
985  -5.,
986  5.,
987  "S");
988  meCluTPullvsEta_[0] =
989  ibook.bookProfile("EtlCluTPullvsEtaZneg",
990  "ETL cluster time pull vs #eta (-Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
991  30,
992  -3.,
993  -1.65,
994  -5.,
995  5.,
996  "S");
997  meCluTPullvsEta_[1] =
998  ibook.bookProfile("EtlCluTPullvsEtaZpos",
999  "ETL cluster time pull vs #eta (+Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1000  30,
1001  1.65,
1002  3.,
1003  -5.,
1004  5.,
1005  "S");
1006  meCluXRes_[0] = ibook.book1D("EtlCluXResZneg", "ETL cluster X resolution (-Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
1007  meCluXRes_[1] = ibook.book1D("EtlCluXResZpos", "ETL cluster X resolution (+Z);X_{RECO}-X_{SIM} [cm]", 100, -0.1, 0.1);
1008  meCluYRes_[0] = ibook.book1D("EtlCluYResZneg", "ETL cluster Y resolution (-Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
1009  meCluYRes_[1] = ibook.book1D("EtlCluYResZpos", "ETL cluster Y resolution (+Z);Y_{RECO}-Y_{SIM} [cm]", 100, -0.1, 0.1);
1010  meCluZRes_[0] =
1011  ibook.book1D("EtlCluZResZneg", "ETL cluster Z resolution (-Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
1012  meCluZRes_[1] =
1013  ibook.book1D("EtlCluZResZpos", "ETL cluster Z resolution (+Z);Z_{RECO}-Z_{SIM} [cm]", 100, -0.003, 0.003);
1014  meCluXPull_[0] =
1015  ibook.book1D("EtlCluXPullZneg", "ETL cluster X pull (-Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
1016  meCluXPull_[1] =
1017  ibook.book1D("EtlCluXPullZpos", "ETL cluster X pull (+Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]", 100, -5., 5.);
1018  meCluYPull_[0] =
1019  ibook.book1D("EtlCluYPullZneg", "ETL cluster Y pull (-Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
1020  meCluYPull_[1] =
1021  ibook.book1D("EtlCluYPullZpos", "ETL cluster Y pull (+Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]", 100, -5., 5.);
1022  meCluXLocalErr_[0] =
1023  ibook.book1D("EtlCluXLocalErrNeg", "ETL cluster X local error (-Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
1024  meCluXLocalErr_[1] =
1025  ibook.book1D("EtlCluXLocalErrPos", "ETL cluster X local error (+Z);sigmaX_{RECO,loc} [cm]", 50, 0., 0.2);
1026  meCluYLocalErr_[0] =
1027  ibook.book1D("EtlCluYLocalErrNeg", "ETL cluster Y local error (-Z);sigmaY_{RECO,loc} [cm]", 50., 0., 0.2);
1028  meCluYLocalErr_[1] =
1029  ibook.book1D("EtlCluYLocalErrPos", "ETL cluster Y local error (+Z);sigmaY_{RECO,loc} [cm]", 50, 0., 0.2);
1030  if (optionalPlots_) {
1031  meCluOccupancy_[0] =
1032  ibook.book2D("EtlCluOccupancyZnegD1",
1033  "ETL cluster X vs Y (-Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
1034  100,
1035  -150.,
1036  150.,
1037  100,
1038  -150,
1039  150);
1040  meCluOccupancy_[1] = ibook.book2D("EtlCluOccupancyZnegD2",
1041  "ETL cluster X vs Y (-Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
1042  100,
1043  -150.,
1044  150.,
1045  100,
1046  -150,
1047  150);
1048  meCluOccupancy_[2] =
1049  ibook.book2D("EtlCluOccupancyZposD1",
1050  "ETL cluster X vs Y (+Z, Single(topo1D)/First(topo2D) Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
1051  100,
1052  -150.,
1053  150.,
1054  100,
1055  -150,
1056  150);
1057  meCluOccupancy_[3] = ibook.book2D("EtlCluOccupancyZposD2",
1058  "ETL cluster X vs Y (+Z, Second Disk);X_{RECO} [cm]; Y_{RECO} [cm]",
1059  100,
1060  -150.,
1061  150.,
1062  100,
1063  -150,
1064  150);
1065  meCluYXLocal_[0] = ibook.book2D("EtlCluYXLocalZneg",
1066  "ETL cluster local Y vs X (-Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
1067  100,
1068  -2.2,
1069  2.2,
1070  100,
1071  -1.1,
1072  1.1);
1073  meCluYXLocal_[1] = ibook.book2D("EtlCluYXLocalZpos",
1074  "ETL cluster local Y vs X (+Z);X^{local}_{RECO} [cm];Y^{local}_{RECO} [cm]",
1075  100,
1076  -2.2,
1077  2.2,
1078  100,
1079  -1.1,
1080  1.1);
1081  meCluYXLocalSim_[0] = ibook.book2D("EtlCluYXLocalSimZneg",
1082  "ETL cluster local Y vs X (-Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1083  200,
1084  -2.2,
1085  2.2,
1086  200,
1087  -1.1,
1088  1.1);
1089  meCluYXLocalSim_[1] = ibook.book2D("EtlCluYXLocalSimZpos",
1090  "ETL cluster local Y vs X (+Z);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1091  200,
1092  -2.2,
1093  2.2,
1094  200,
1095  -1.1,
1096  1.1);
1098  ibook.book2D("EtlCluYXLocalSimZneg_simLC",
1099  "ETL cluster local Y vs X (-Z, MtdSimLayerClusters);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1100  200,
1101  -2.2,
1102  2.2,
1103  200,
1104  -1.1,
1105  1.1);
1107  ibook.book2D("EtlCluYXLocalSimZpos_simLC",
1108  "ETL cluster local Y vs X (+Z, MtdSimLayerClusters);X^{local}_{SIM} [cm];Y^{local}_{SIM} [cm]",
1109  200,
1110  -2.2,
1111  2.2,
1112  200,
1113  -1.1,
1114  1.1);
1115  }
1116 
1117  // resolution plots using MtdSimLayerClusters as truth
1118  meCluTimeRes_simLC_[0] = ibook.book1D("EtlCluTimeResZneg_simLC",
1119  "ETL cluster time resolution (MtdSimLayerClusters, -Z);T_{RECO}-T_{SIM} [ns]",
1120  100,
1121  -0.5,
1122  0.5);
1123  meCluTimeRes_simLC_[1] = ibook.book1D("EtlCluTimeResZpos_simLC",
1124  "ETL cluster time resolution (MtdSimLayerClusters, +Z);T_{RECO}-T_{SIM} [MeV]",
1125  100,
1126  -0.5,
1127  0.5);
1128  meCluEnergyRes_simLC_[0] = ibook.book1D("EtlCluEnergyResZneg_simLC",
1129  "ETL cluster energy resolution (MtdSimLayerClusters, -Z);E_{RECO}-E_{SIM}",
1130  100,
1131  -0.5,
1132  0.5);
1133  meCluEnergyRes_simLC_[1] = ibook.book1D("EtlCluEnergyResZpos_simLC",
1134  "ETL cluster energy resolution (MtdSimLayerClusters, +Z);E_{RECO}-E_{SIM}",
1135  100,
1136  -0.5,
1137  0.5);
1138 
1139  meCluTPullvsE_simLC_[0] = ibook.bookProfile(
1140  "EtlCluTPullvsEZneg_simLC",
1141  "ETL cluster time pull vs E (MtdSimLayerClusters, -Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1142  25,
1143  0.,
1144  0.5,
1145  -5.,
1146  5.,
1147  "S");
1148  meCluTPullvsE_simLC_[1] = ibook.bookProfile(
1149  "EtlCluTPullvsEZpos_simLC",
1150  "ETL cluster time pull vs E (MtdSimLayerClusters, +Z);E_{SIM} [MeV];(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1151  25,
1152  0.,
1153  0.5,
1154  -5.,
1155  5.,
1156  "S");
1158  "EtlCluTPullvsEtaZneg_simLC",
1159  "ETL cluster time pull vs #eta (MtdSimLayerClusters, -Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1160  30,
1161  -3.,
1162  -1.65,
1163  -5.,
1164  5.,
1165  "S");
1167  "EtlCluTPullvsEtaZpos_simLC",
1168  "ETL cluster time pull vs #eta (MtdSimLayerClusters, +Z);|#eta_{RECO}|;(T_{RECO}-T_{SIM})/#sigma_{T_{RECO}}",
1169  30,
1170  1.65,
1171  3.,
1172  -5.,
1173  5.,
1174  "S");
1175  meCluXRes_simLC_[0] = ibook.book1D("EtlCluXResZneg_simLC",
1176  "ETL cluster X resolution (MtdSimLayerClusters, -Z);X_{RECO}-X_{SIM} [cm]",
1177  100,
1178  -0.1,
1179  0.1);
1180  meCluXRes_simLC_[1] = ibook.book1D("EtlCluXResZpos_simLC",
1181  "ETL cluster X resolution (MtdSimLayerClusters, +Z);X_{RECO}-X_{SIM} [cm]",
1182  100,
1183  -0.1,
1184  0.1);
1185  meCluYRes_simLC_[0] = ibook.book1D("EtlCluYResZneg_simLC",
1186  "ETL cluster Y resolution (MtdSimLayerClusters, -Z);Y_{RECO}-Y_{SIM} [cm]",
1187  100,
1188  -0.1,
1189  0.1);
1190  meCluYRes_simLC_[1] = ibook.book1D("EtlCluYResZpos_simLC",
1191  "ETL cluster Y resolution (MtdSimLayerClusters, +Z);Y_{RECO}-Y_{SIM} [cm]",
1192  100,
1193  -0.1,
1194  0.1);
1195  meCluZRes_simLC_[0] = ibook.book1D("EtlCluZResZneg_simLC",
1196  "ETL cluster Z resolution (MtdSimLayerClusters, -Z);Z_{RECO}-Z_{SIM} [cm]",
1197  100,
1198  -0.003,
1199  0.003);
1200  meCluZRes_simLC_[1] = ibook.book1D("EtlCluZResZpos_simLC",
1201  "ETL cluster Z resolution (MtdSimLayerClusters, +Z);Z_{RECO}-Z_{SIM} [cm]",
1202  100,
1203  -0.003,
1204  0.003);
1205  meCluXPull_simLC_[0] =
1206  ibook.book1D("EtlCluXPullZneg_simLC",
1207  "ETL cluster X pull (MtdSimLayerClusters, -Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]",
1208  100,
1209  -5.,
1210  5.);
1211  meCluXPull_simLC_[1] =
1212  ibook.book1D("EtlCluXPullZpos_simLC",
1213  "ETL cluster X pull (MtdSimLayerClusters, +Z);X_{RECO}-X_{SIM}/sigmaX_[RECO] [cm]",
1214  100,
1215  -5.,
1216  5.);
1217  meCluYPull_simLC_[0] =
1218  ibook.book1D("EtlCluYPullZneg_simLC",
1219  "ETL cluster Y pull (MtdSimLayerClusters, -Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]",
1220  100,
1221  -5.,
1222  5.);
1223  meCluYPull_simLC_[1] =
1224  ibook.book1D("EtlCluYPullZpos_simLC",
1225  "ETL cluster Y pull (MtdSimLayerClusters, +Z);Y_{RECO}-Y_{SIM}/sigmaY_[RECO] [cm]",
1226  100,
1227  -5.,
1228  5.);
1229 
1230  meUnmatchedCluEnergy_[0] = ibook.book1D(
1231  "EtlUnmatchedCluEnergyNeg", "ETL unmatched cluster log10(energy) (-Z);log10(E_{RECO} [MeV])", 5, -3, 2);
1232  meUnmatchedCluEnergy_[1] = ibook.book1D(
1233  "EtlUnmatchedCluEnergyPos", "ETL unmatched cluster log10(energy) (+Z);log10(E_{RECO} [MeV])", 5, -3, 2);
1234 
1235  // --- UncalibratedRecHits histograms
1236 
1237  if (uncalibRecHitsPlots_) {
1238  const std::string det_name[2] = {"ETL-", "ETL+"};
1239  for (unsigned int iside = 0; iside < 2; ++iside) {
1240  for (unsigned int ihistoQ = 0; ihistoQ < nBinsQ_; ++ihistoQ) {
1241  std::string hname = Form("TimeResQ_%d_%d", iside, ihistoQ);
1242  std::string htitle =
1243  Form("%s time resolution (Q bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].data(), ihistoQ);
1244  meTimeResQ_[iside][ihistoQ] = ibook.book1D(hname, htitle, 200, -0.5, 0.5);
1245 
1246  } // ihistoQ loop
1247 
1248  for (unsigned int ihistoEta = 0; ihistoEta < nBinsEta_; ++ihistoEta) {
1249  std::string hname = Form("TimeResEta_%d_%d", iside, ihistoEta);
1250  std::string htitle =
1251  Form("%s time resolution (|#eta| bin = %d);T_{RECO} - T_{SIM} [ns]", det_name[iside].data(), ihistoEta);
1252  meTimeResEta_[iside][ihistoEta] = ibook.book1D(hname, htitle, 200, -0.5, 0.5);
1253 
1254  } // ihistoEta loop
1255  }
1256  }
1257 }
MonitorElement * meCluTimeRes_simLC_[2]
MonitorElement * meCluXRes_simLC_[2]
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 * meCluTPullvsEta_simLC_[2]
MonitorElement * meTimeResEta_[2][nBinsEta_]
MonitorElement * meCluEnergyRes_simLC_[2]
MonitorElement * meHitTvsE_[4]
MonitorElement * meCluTPullvsE_simLC_[2]
MonitorElement * meCluEnergy_[4]
MonitorElement * meHitEvsEta_[4]
MonitorElement * meHitTvsEta_[4]
MonitorElement * meCluTimeRes_[2]
MonitorElement * meCluHits_[4]
MonitorElement * meCluZRes_simLC_[2]
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 * meCluYPull_simLC_[2]
MonitorElement * meCluXPull_[2]
MonitorElement * meHitTimeError_[4]
static constexpr int nBinsEta_
MonitorElement * meCluYXLocalSim_simLC_[2]
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 * meCluYRes_simLC_[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
MonitorElement * meCluXPull_simLC_[2]
static constexpr int nBinsQ_
MonitorElement * meCluEnergyRes_[2]

◆ fillDescriptions()

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

Definition at line 1260 of file EtlLocalRecoValidation.cc.

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

1260  {
1262 
1263  desc.add<std::string>("folder", "MTD/ETL/LocalReco");
1264  desc.add<edm::InputTag>("recHitsTag", edm::InputTag("mtdRecHits", "FTLEndcap"));
1265  desc.add<edm::InputTag>("uncalibRecHitsTag", edm::InputTag("mtdUncalibratedRecHits", "FTLEndcap"));
1266  desc.add<edm::InputTag>("simHitsTag", edm::InputTag("mix", "g4SimHitsFastTimerHitsEndcap"));
1267  desc.add<edm::InputTag>("recCluTag", edm::InputTag("mtdClusters", "FTLEndcap"));
1268  desc.add<edm::InputTag>("trkHitTag", edm::InputTag("mtdTrackingRecHits"));
1269  desc.add<edm::InputTag>("r2sAssociationMapTag", edm::InputTag("mtdRecoClusterToSimLayerClusterAssociation"));
1270  desc.add<double>("hitMinimumEnergy2Dis", 0.001); // [MeV]
1271  desc.add<bool>("optionalPlots", false);
1272  desc.add<bool>("UncalibRecHitsPlots", false);
1273  desc.add<double>("HitMinimumAmplitude", 0.33); // [MIP]
1274 
1275  descriptions.add("etlLocalRecoValid", desc);
1276 }
void add(std::string const &label, ParameterSetDescription const &psetDescription)

◆ isSameCluster()

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

Definition at line 162 of file EtlLocalRecoValidation.cc.

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

Referenced by analyze().

162  {
163  return clu1.id() == clu2.id() && clu1.size() == clu2.size() && clu1.x() == clu2.x() && clu1.y() == clu2.y() &&
164  clu1.time() == clu2.time();
165 }
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 156 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ binWidthQ_

constexpr float EtlLocalRecoValidation::binWidthQ_ = 1.3
staticprivate

Definition at line 151 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ cpeToken_

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

Definition at line 80 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ etaMin_

constexpr float EtlLocalRecoValidation::etaMin_ = 1.65
staticprivate

Definition at line 157 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ etlRecCluToken_

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

Definition at line 74 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ etlRecHitsToken_

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

Definition at line 71 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ etlSimHitsToken_

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

Definition at line 73 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ etlUncalibRecHitsToken_

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

Definition at line 72 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ folder_

const std::string EtlLocalRecoValidation::folder_
private

Definition at line 65 of file EtlLocalRecoValidation.cc.

Referenced by bookHistograms().

◆ hitMinAmplitude_

const double EtlLocalRecoValidation::hitMinAmplitude_
private

Definition at line 69 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ hitMinEnergy2Dis_

const float EtlLocalRecoValidation::hitMinEnergy2Dis_
private

Definition at line 66 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ meCluEnergy_

MonitorElement* EtlLocalRecoValidation::meCluEnergy_[4]
private

Definition at line 109 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluEnergyRes_

MonitorElement* EtlLocalRecoValidation::meCluEnergyRes_[2]
private

Definition at line 121 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluEnergyRes_simLC_

MonitorElement* EtlLocalRecoValidation::meCluEnergyRes_simLC_[2]
private

Definition at line 136 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluEta_

MonitorElement* EtlLocalRecoValidation::meCluEta_[4]
private

Definition at line 111 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluHits_

MonitorElement* EtlLocalRecoValidation::meCluHits_[4]
private

Definition at line 112 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluOccupancy_

MonitorElement* EtlLocalRecoValidation::meCluOccupancy_[4]
private

Definition at line 113 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluPhi_

MonitorElement* EtlLocalRecoValidation::meCluPhi_[4]
private

Definition at line 110 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTime_

MonitorElement* EtlLocalRecoValidation::meCluTime_[4]
private

Definition at line 107 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTimeError_

MonitorElement* EtlLocalRecoValidation::meCluTimeError_[4]
private

Definition at line 108 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTimeRes_

MonitorElement* EtlLocalRecoValidation::meCluTimeRes_[2]
private

Definition at line 120 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTimeRes_simLC_

MonitorElement* EtlLocalRecoValidation::meCluTimeRes_simLC_[2]
private

Definition at line 135 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTPullvsE_

MonitorElement* EtlLocalRecoValidation::meCluTPullvsE_[2]
private

Definition at line 122 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTPullvsE_simLC_

MonitorElement* EtlLocalRecoValidation::meCluTPullvsE_simLC_[2]
private

Definition at line 137 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTPullvsEta_

MonitorElement* EtlLocalRecoValidation::meCluTPullvsEta_[2]
private

Definition at line 123 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluTPullvsEta_simLC_

MonitorElement* EtlLocalRecoValidation::meCluTPullvsEta_simLC_[2]
private

Definition at line 138 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXLocalErr_

MonitorElement* EtlLocalRecoValidation::meCluXLocalErr_[2]
private

Definition at line 131 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXPull_

MonitorElement* EtlLocalRecoValidation::meCluXPull_[2]
private

Definition at line 127 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXPull_simLC_

MonitorElement* EtlLocalRecoValidation::meCluXPull_simLC_[2]
private

Definition at line 142 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXRes_

MonitorElement* EtlLocalRecoValidation::meCluXRes_[2]
private

Definition at line 124 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluXRes_simLC_

MonitorElement* EtlLocalRecoValidation::meCluXRes_simLC_[2]
private

Definition at line 139 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYLocalErr_

MonitorElement* EtlLocalRecoValidation::meCluYLocalErr_[2]
private

Definition at line 132 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYPull_

MonitorElement* EtlLocalRecoValidation::meCluYPull_[2]
private

Definition at line 128 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYPull_simLC_

MonitorElement* EtlLocalRecoValidation::meCluYPull_simLC_[2]
private

Definition at line 143 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYRes_

MonitorElement* EtlLocalRecoValidation::meCluYRes_[2]
private

Definition at line 125 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYRes_simLC_

MonitorElement* EtlLocalRecoValidation::meCluYRes_simLC_[2]
private

Definition at line 140 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYXLocal_

MonitorElement* EtlLocalRecoValidation::meCluYXLocal_[2]
private

Definition at line 129 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYXLocalSim_

MonitorElement* EtlLocalRecoValidation::meCluYXLocalSim_[2]
private

Definition at line 130 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluYXLocalSim_simLC_

MonitorElement* EtlLocalRecoValidation::meCluYXLocalSim_simLC_[2]
private

Definition at line 144 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluZRes_

MonitorElement* EtlLocalRecoValidation::meCluZRes_[2]
private

Definition at line 126 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meCluZRes_simLC_

MonitorElement* EtlLocalRecoValidation::meCluZRes_simLC_[2]
private

Definition at line 141 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meEnergyRes_

MonitorElement* EtlLocalRecoValidation::meEnergyRes_
private

Definition at line 116 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEnergy_

MonitorElement* EtlLocalRecoValidation::meHitEnergy_[4]
private

Definition at line 85 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEta_

MonitorElement* EtlLocalRecoValidation::meHitEta_[4]
private

Definition at line 99 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEvsEta_

MonitorElement* EtlLocalRecoValidation::meHitEvsEta_[4]
private

Definition at line 103 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitEvsPhi_

MonitorElement* EtlLocalRecoValidation::meHitEvsPhi_[4]
private

Definition at line 102 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitPhi_

MonitorElement* EtlLocalRecoValidation::meHitPhi_[4]
private

Definition at line 98 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTime_

MonitorElement* EtlLocalRecoValidation::meHitTime_[4]
private

Definition at line 86 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTimeError_

MonitorElement* EtlLocalRecoValidation::meHitTimeError_[4]
private

Definition at line 87 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTvsE_

MonitorElement* EtlLocalRecoValidation::meHitTvsE_[4]
private

Definition at line 101 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTvsEta_

MonitorElement* EtlLocalRecoValidation::meHitTvsEta_[4]
private

Definition at line 105 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitTvsPhi_

MonitorElement* EtlLocalRecoValidation::meHitTvsPhi_[4]
private

Definition at line 104 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitX_

MonitorElement* EtlLocalRecoValidation::meHitX_[4]
private

Definition at line 95 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitXlocal_

MonitorElement* EtlLocalRecoValidation::meHitXlocal_[2]
private

Definition at line 92 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitY_

MonitorElement* EtlLocalRecoValidation::meHitY_[4]
private

Definition at line 96 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitYlocal_

MonitorElement* EtlLocalRecoValidation::meHitYlocal_[2]
private

Definition at line 93 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meHitZ_

MonitorElement* EtlLocalRecoValidation::meHitZ_[4]
private

Definition at line 97 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meLocalOccupancy_

MonitorElement* EtlLocalRecoValidation::meLocalOccupancy_[2]
private

Definition at line 91 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meNhits_

MonitorElement* EtlLocalRecoValidation::meNhits_[4]
private

Definition at line 84 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meOccupancy_

MonitorElement* EtlLocalRecoValidation::meOccupancy_[4]
private

Definition at line 89 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTimeRes_

MonitorElement* EtlLocalRecoValidation::meTimeRes_
private

Definition at line 115 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTimeResEta_

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

Definition at line 159 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTimeResQ_

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

Definition at line 153 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTPullvsE_

MonitorElement* EtlLocalRecoValidation::meTPullvsE_
private

Definition at line 117 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meTPullvsEta_

MonitorElement* EtlLocalRecoValidation::meTPullvsEta_
private

Definition at line 118 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ meUnmatchedCluEnergy_

MonitorElement* EtlLocalRecoValidation::meUnmatchedCluEnergy_[2]
private

Definition at line 146 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ mtdgeoToken_

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

Definition at line 78 of file EtlLocalRecoValidation.cc.

Referenced by analyze().

◆ mtdtopoToken_

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

Definition at line 79 of file EtlLocalRecoValidation.cc.

◆ mtdTrackingHitToken_

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

Definition at line 75 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ nBinsEta_

constexpr int EtlLocalRecoValidation::nBinsEta_ = 26
staticprivate

Definition at line 155 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ nBinsQ_

constexpr int EtlLocalRecoValidation::nBinsQ_ = 20
staticprivate

Definition at line 150 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ optionalPlots_

const bool EtlLocalRecoValidation::optionalPlots_
private

Definition at line 67 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and bookHistograms().

◆ r2sAssociationMapToken_

edm::EDGetTokenT<MtdRecoClusterToSimLayerClusterAssociationMap> EtlLocalRecoValidation::r2sAssociationMapToken_
private

Definition at line 76 of file EtlLocalRecoValidation.cc.

Referenced by analyze(), and EtlLocalRecoValidation().

◆ uncalibRecHitsPlots_

const bool EtlLocalRecoValidation::uncalibRecHitsPlots_
private

Definition at line 68 of file EtlLocalRecoValidation.cc.

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