CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
SiStripHitEfficiencyWorker Class Reference
Inheritance diagram for SiStripHitEfficiencyWorker:
DQMEDAnalyzer edm::stream::EDProducer< edm::GlobalCache< DQMEDAnalyzerGlobalCache >, edm::EndRunProducer, edm::EndLuminosityBlockProducer, edm::Accumulator >

Classes

struct  EffME1
 
struct  EffTkMap
 

Public Member Functions

 SiStripHitEfficiencyWorker (const edm::ParameterSet &conf)
 
 ~SiStripHitEfficiencyWorker () override=default
 
- 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 &e, const edm::EventSetup &c) override
 
void bookHistograms (DQMStore::IBooker &booker, const edm::Run &run, const edm::EventSetup &setup) override
 
void fillForTraj (const TrajectoryAtInvalidHit &tm, const TrackerTopology *tTopo, const TrackerGeometry *tkgeom, const StripClusterParameterEstimator &stripCPE, const SiStripQuality &stripQuality, const DetIdCollection &fedErrorIds, const edm::Handle< edm::DetSetVector< SiStripRawDigi >> &commonModeDigis, const edmNew::DetSetVector< SiStripCluster > &theClusters, int bunchCrossing, float instLumi, float PU, bool highPurity)
 

Private Attributes

bool addCommonMode_
 
bool addLumi_
 
std::set< uint32_t > badModules_
 
int bunchX_
 
SiStripHitEffData calibData_
 
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecordchi2EstimatorToken_
 
unsigned int clusterMatchingMethod_
 
const edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusters_token_
 
float clusterTracjDist_
 
const edm::EDGetTokenT< reco::TrackCollectioncombinatorialTracks_token_
 
const edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > commonModeToken_
 
bool cutOnTracks_
 
bool DEBUG_
 
const edm::EDGetTokenT< DetIdCollectiondigis_token_
 
std::string dqmDir_
 
EffME1 h_allLayer
 
MonitorElementh_bx
 
EffME1 h_goodLayer
 
std::vector< MonitorElement * > h_hotcold
 
MonitorElementh_instLumi
 
EffME1 h_layer
 
std::vector< EffME1h_layer_vsBx
 
std::vector< EffME1h_layer_vsCM
 
std::vector< EffME1h_layer_vsLumi
 
std::vector< EffME1h_layer_vsPU
 
EffTkMap h_module
 
MonitorElementh_nTracks
 
MonitorElementh_nTracksVsPU
 
MonitorElementh_PU
 
std::vector< MonitorElement * > h_resolution
 
unsigned int layers_
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmagFieldToken_
 
const edm::ESGetToken< MeasurementTracker, CkfComponentsRecordmeasTrackerToken_
 
const edm::EDGetTokenT< OnlineLuminosityRecordmetaDataToken_
 
unsigned int nTEClayers_
 
const edm::ESGetToken< Propagator, TrackingComponentsRecordpropagatorToken_
 
float resXSig_
 
const edm::EDGetTokenT< LumiScalersCollectionscalerToken_
 
bool showRings_
 
bool showTOB6TEC9_
 
const edm::ESGetToken< StripClusterParameterEstimator, TkStripCPERecordstripCPEToken_
 
const edm::ESGetToken< SiStripQuality, SiStripQualityRcdstripQualityToken_
 
float stripsApvEdge_
 
const edm::ESGetToken< TkDetMap, TrackerTopologyRcdtkDetMapToken_
 
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordtkGeomToken_
 
const edm::EDGetTokenT< MeasurementTrackerEventtrackerEvent_token_
 
unsigned int trackMultiplicityCut_
 
const edm::EDGetTokenT< std::vector< Trajectory > > trajectories_token_
 
const edm::EDGetTokenT< TrajTrackAssociationCollectiontrajTrackAsso_token_
 
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcdtTopoToken_
 
bool useAllHitsFromTracksWithMissingHits_
 
bool useFirstMeas_
 
bool useLastMeas_
 
bool useOnlyHighPurityTracks_
 

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

Definition at line 62 of file SiStripHitEfficiencyWorker.cc.

Constructor & Destructor Documentation

◆ SiStripHitEfficiencyWorker()

SiStripHitEfficiencyWorker::SiStripHitEfficiencyWorker ( const edm::ParameterSet conf)
explicit

Definition at line 180 of file SiStripHitEfficiencyWorker.cc.

181  : scalerToken_(consumes<LumiScalersCollection>(conf.getParameter<edm::InputTag>("lumiScalers"))),
182  metaDataToken_(consumes<OnlineLuminosityRecord>(conf.getParameter<edm::InputTag>("metadata"))),
185  consumes<reco::TrackCollection>(conf.getParameter<edm::InputTag>("combinatorialTracks"))),
186  trajectories_token_(consumes<std::vector<Trajectory>>(conf.getParameter<edm::InputTag>("trajectories"))),
187  trajTrackAsso_token_(consumes<TrajTrackAssociationCollection>(conf.getParameter<edm::InputTag>("trajectories"))),
189  consumes<edmNew::DetSetVector<SiStripCluster>>(conf.getParameter<edm::InputTag>("siStripClusters"))),
190  digis_token_(consumes<DetIdCollection>(conf.getParameter<edm::InputTag>("siStripDigis"))),
191  trackerEvent_token_(consumes<MeasurementTrackerEvent>(conf.getParameter<edm::InputTag>("trackerEvent"))),
194  stripCPEToken_(esConsumes(edm::ESInputTag{"", "StripCPEfromTrackAngle"})),
199  propagatorToken_(esConsumes(edm::ESInputTag{"", "PropagatorWithMaterial"})),
200  tkDetMapToken_(esConsumes<edm::Transition::BeginRun>()),
201  dqmDir_(conf.getParameter<std::string>("dqmDir")),
202  layers_(conf.getParameter<int>("Layer")),
203  DEBUG_(conf.getUntrackedParameter<bool>("Debug", false)),
204  addLumi_(conf.getUntrackedParameter<bool>("addLumi", false)),
205  addCommonMode_(conf.getUntrackedParameter<bool>("addCommonMode", false)),
206  cutOnTracks_(conf.getParameter<bool>("cutOnTracks")),
207  trackMultiplicityCut_(conf.getParameter<unsigned int>("trackMultiplicity")),
208  useFirstMeas_(conf.getParameter<bool>("useFirstMeas")),
209  useLastMeas_(conf.getParameter<bool>("useLastMeas")),
210  useAllHitsFromTracksWithMissingHits_(conf.getParameter<bool>("useAllHitsFromTracksWithMissingHits")),
211  clusterMatchingMethod_(conf.getParameter<int>("ClusterMatchingMethod")),
212  resXSig_(conf.getParameter<double>("ResXSig")),
213  clusterTracjDist_(conf.getParameter<double>("ClusterTrajDist")),
214  stripsApvEdge_(conf.getParameter<double>("StripsApvEdge")),
215  useOnlyHighPurityTracks_(conf.getParameter<bool>("UseOnlyHighPurityTracks")),
216  bunchX_(conf.getUntrackedParameter<int>("BunchCrossing", 0)),
217  showRings_(conf.getUntrackedParameter<bool>("ShowRings", false)),
218  showTOB6TEC9_(conf.getUntrackedParameter<bool>("ShowTOB6TEC9", false)) {
219  nTEClayers_ = (showRings_ ? 7 : 9); // number of rings or wheels
220 
221  const std::string badModulesFile = conf.getUntrackedParameter<std::string>("BadModulesFile", "");
222  if (!badModulesFile.empty()) {
223  std::ifstream badModules_file(badModulesFile);
224  uint32_t badmodule_detid;
225  int mods, fiber1, fiber2, fiber3;
226  if (badModules_file.is_open()) {
228  while (getline(badModules_file, line)) {
229  if (badModules_file.eof())
230  continue;
231  std::stringstream ss(line);
232  ss >> badmodule_detid >> mods >> fiber1 >> fiber2 >> fiber3;
233  if (badmodule_detid != 0 && mods == 1 && (fiber1 == 1 || fiber2 == 1 || fiber3 == 1))
234  badModules_.insert(badmodule_detid);
235  }
236  badModules_file.close();
237  }
238  }
239  if (!badModules_.empty())
240  LogDebug("SiStripHitEfficiencyWorker") << "Remove additionnal bad modules from the analysis: ";
241  for (const auto badMod : badModules_) {
242  LogDebug("SiStripHitEfficiencyWorker") << " " << badMod;
243  }
244 }
const edm::ESGetToken< MeasurementTracker, CkfComponentsRecord > measTrackerToken_
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const edm::EDGetTokenT< std::vector< Trajectory > > trajectories_token_
const edm::EDGetTokenT< DetIdCollection > digis_token_
const edm::EDGetTokenT< MeasurementTrackerEvent > trackerEvent_token_
T getUntrackedParameter(std::string const &, T const &) const
const edm::ESGetToken< TkDetMap, TrackerTopologyRcd > tkDetMapToken_
const edm::ESGetToken< StripClusterParameterEstimator, TkStripCPERecord > stripCPEToken_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorToken_
const edm::EDGetTokenT< OnlineLuminosityRecord > metaDataToken_
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > chi2EstimatorToken_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
const edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAsso_token_
const edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusters_token_
const edm::EDGetTokenT< reco::TrackCollection > combinatorialTracks_token_
const edm::ESGetToken< SiStripQuality, SiStripQualityRcd > stripQualityToken_
const edm::EDGetTokenT< LumiScalersCollection > scalerToken_
const edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > commonModeToken_
#define LogDebug(id)

◆ ~SiStripHitEfficiencyWorker()

SiStripHitEfficiencyWorker::~SiStripHitEfficiencyWorker ( )
overridedefault

Member Function Documentation

◆ analyze()

void SiStripHitEfficiencyWorker::analyze ( const edm::Event e,
const edm::EventSetup c 
)
overrideprivatevirtual

Reimplemented from DQMEDAnalyzer.

Definition at line 378 of file SiStripHitEfficiencyWorker.cc.

References addCommonMode_, addLumi_, anyDirection, OnlineLuminosityRecord::avgPileUp(), calibData_, chi2EstimatorToken_, clusters_token_, combinatorialTracks_token_, commonModeToken_, cutOnTracks_, digis_token_, MillePedeFileConverter_cfg::e, SiStripHitEffData::EventStats, SiStripHitEffData::fedErrorCounts, SiStripHitEffData::FEDErrorOccupancy, dqm::impl::MonitorElement::Fill(), fillForTraj(), edm::EventSetup::getData(), h_bx, h_instLumi, h_nTracks, h_nTracksVsPU, h_PU, muons_cff::highPurity, muonGEMDigis_cfi::instLumi, OnlineLuminosityRecord::instLumi(), edm::HandleBase::isValid(), LogDebug, V0Monitor_cfi::lumiScalers, magFieldToken_, measTrackerToken_, HLT_2022v15_cff::measurementTrackerEvent, metaDataToken_, combine::missing, TrackCandidateProducer_cfi::propagator, propagatorToken_, MLClient_cfi::PU, scalerToken_, stripCPEToken_, stripQualityToken_, SiStripSubdetector::TEC, SiStripSubdetector::TIB, tkGeomToken_, createJobs::tmp, trackerEvent_token_, trackMultiplicityCut_, trajectories_token_, trajTrackAsso_token_, tTopoToken_, useAllHitsFromTracksWithMissingHits_, useFirstMeas_, and useLastMeas_.

378  {
379  const auto tTopo = &es.getData(tTopoToken_);
380 
381  // bool DEBUG_ = false;
382 
383  LogDebug("SiStripHitEfficiencyWorker") << "beginning analyze from HitEff";
384 
385  // Step A: Get Inputs
386 
387  // Luminosity informations
390 
391  float instLumi = 0;
392  float PU = 0;
393  if (addLumi_) {
394  if (lumiScalers.isValid() && !lumiScalers->empty()) {
395  if (lumiScalers->begin() != lumiScalers->end()) {
396  instLumi = lumiScalers->begin()->instantLumi();
397  PU = lumiScalers->begin()->pileup();
398  }
399  } else if (metaData.isValid()) {
400  instLumi = metaData->instLumi();
401  PU = metaData->avgPileUp();
402  } else {
403  edm::LogWarning("SiStripHitEfficiencyWorker") << "could not find a source for the Luminosity and PU";
404  }
405  }
406 
407  h_bx->Fill(e.bunchCrossing());
409  h_PU->Fill(PU);
410 
412  if (addCommonMode_)
413  e.getByToken(commonModeToken_, commonModeDigis);
414 
416  e.getByToken(combinatorialTracks_token_, tracksCKF);
417 
418  edm::Handle<std::vector<Trajectory>> TrajectoryCollectionCKF;
419  e.getByToken(trajectories_token_, TrajectoryCollectionCKF);
420 
421  edm::Handle<TrajTrackAssociationCollection> trajTrackAssociationHandle;
422  e.getByToken(trajTrackAsso_token_, trajTrackAssociationHandle);
423 
425  e.getByToken(clusters_token_, theClusters);
426 
427  edm::Handle<DetIdCollection> fedErrorIds;
428  e.getByToken(digis_token_, fedErrorIds);
429 
430  // fill the calibData with the FEDErrors
431  for (const auto& fedErr : *fedErrorIds) {
432  // fill the TkHistoMap occupancy map
433  calibData_.FEDErrorOccupancy->fill(fedErr.rawId(), 1.);
434 
435  // fill the unordered map
436  if (calibData_.fedErrorCounts.find(fedErr.rawId()) != calibData_.fedErrorCounts.end()) {
437  calibData_.fedErrorCounts[fedErr.rawId()] += 1;
438  } else {
439  calibData_.fedErrorCounts.insert(std::make_pair(fedErr.rawId(), 1));
440  }
441  }
442 
445 
446  const auto tkgeom = &es.getData(tkGeomToken_);
447  const auto& stripcpe = es.getData(stripCPEToken_);
448  const auto& stripQuality = es.getData(stripQualityToken_);
449  const auto& magField = es.getData(magFieldToken_);
450  const auto& measTracker = es.getData(measTrackerToken_);
451  const auto& chi2Estimator = es.getData(chi2EstimatorToken_);
452  const auto& prop = es.getData(propagatorToken_);
453 
454  // Tracking
455  LogDebug("SiStripHitEfficiencyWorker") << "number ckf tracks found = " << tracksCKF->size();
456 
457  h_nTracks->Fill(tracksCKF->size());
458  h_nTracksVsPU->Fill(PU, tracksCKF->size());
459 
460  // bin 0: one entry for each event
461  calibData_.EventStats->Fill(0., 0., 1);
462  // bin 1: one entry for each track
463  calibData_.EventStats->Fill(1., 0., tracksCKF->size());
464 
465  if (!tracksCKF->empty()) {
466  if (cutOnTracks_ && (tracksCKF->size() >= trackMultiplicityCut_))
467  return;
468  if (cutOnTracks_)
469  LogDebug("SiStripHitEfficiencyWorker")
470  << "starting checking good event with < " << trackMultiplicityCut_ << " tracks";
471 
472  // actually should do a loop over all the tracks in the event here
473 
474  // Looping over traj-track associations to be able to get traj & track informations
475  for (const auto& trajTrack : *trajTrackAssociationHandle) {
476  // for each track, fill some variables such as number of hits and momentum
477 
478  const bool highPurity = trajTrack.val->quality(reco::TrackBase::TrackQuality::highPurity);
479  auto TMeas = trajTrack.key->measurements();
480 
481  const bool hasMissingHits = std::any_of(std::begin(TMeas), std::end(TMeas), [](const auto& tm) {
482  return tm.recHit()->getType() == TrackingRecHit::Type::missing;
483  });
484 
485  // Loop on each measurement and take into consideration
486  //--------------------------------------------------------
487  for (auto itm = TMeas.cbegin(); itm != TMeas.cend(); ++itm) {
488  const auto theInHit = (*itm).recHit();
489 
490  //bin 2: one entry for each measurement
491  calibData_.EventStats->Fill(2., 0., 1.);
492 
493  LogDebug("SiStripHitEfficiencyWorker") << "theInHit is valid = " << theInHit->isValid();
494 
495  unsigned int iidd = theInHit->geographicalId().rawId();
496 
497  unsigned int TKlayers = ::checkLayer(iidd, tTopo);
498 
499  // do not bother with pixel hits
500  if (DetId(iidd).subdetId() < SiStripSubdetector::TIB)
501  continue;
502 
503  LogDebug("SiStripHitEfficiencyWorker") << "TKlayer from trajectory: " << TKlayers << " from module = " << iidd
504  << " matched/stereo/rphi = " << ((iidd & 0x3) == 0) << "/"
505  << ((iidd & 0x3) == 1) << "/" << ((iidd & 0x3) == 2);
506 
507  // Test first and last points of the trajectory
508  // the list of measurements starts from outer layers !!! This could change -> should add a check
509  if ((!useFirstMeas_ && (itm == (TMeas.end() - 1))) || (!useLastMeas_ && (itm == (TMeas.begin()))) ||
510  // In case of missing hit in the track, check whether to use the other hits or not.
511  (!useAllHitsFromTracksWithMissingHits_ && hasMissingHits &&
512  theInHit->getType() != TrackingRecHit::Type::missing))
513  continue;
514  // If Trajectory measurement from TOB 6 or TEC 9, skip it because it's always valid they are filled later
515  if (TKlayers == bounds::k_LayersAtTOBEnd || TKlayers == bounds::k_LayersAtTECEnd) {
516  LogDebug("SiStripHitEfficiencyWorker") << "skipping original TM for TOB 6 or TEC 9";
517  continue;
518  }
519 
520  std::vector<TrajectoryAtInvalidHit> TMs;
521 
522  // Make AnalyticalPropagat // TODO where to save these?or to use in TAVH constructor
524 
525  // for double sided layers check both sensors--if no hit was found on either sensor surface,
526  // the trajectory measurements only have one invalid hit entry on the matched surface
527  // so get the TrajectoryAtInvalidHit for both surfaces and include them in the study
528  if (::isDoubleSided(iidd, tTopo) && ((iidd & 0x3) == 0)) {
529  // do hit eff check twice--once for each sensor
530  //add a TM for each surface
531  TMs.emplace_back(*itm, tTopo, tkgeom, propagator, 1);
532  TMs.emplace_back(*itm, tTopo, tkgeom, propagator, 2);
533  } else if (::isDoubleSided(iidd, tTopo) && (!::check2DPartner(iidd, TMeas))) {
534  // if only one hit was found the trajectory measurement is on that sensor surface, and the other surface from
535  // the matched layer should be added to the study as well
536  TMs.emplace_back(*itm, tTopo, tkgeom, propagator, 1);
537  TMs.emplace_back(*itm, tTopo, tkgeom, propagator, 2);
538  LogDebug("SiStripHitEfficiencyWorker") << " found a hit with a missing partner";
539  } else {
540  //only add one TM for the single surface and the other will be added in the next iteration
541  TMs.emplace_back(*itm, tTopo, tkgeom, propagator);
542  }
543 
545  //Now check for tracks at TOB6 and TEC9
546 
547  // to make sure we only propagate on the last TOB5 hit check the next entry isn't also in TOB5
548  // to avoid bias, make sure the TOB5 hit is valid (an invalid hit on TOB5 could only exist with a valid hit on TOB6)
549  const auto nextId = (itm + 1 != TMeas.end()) ? (itm + 1)->recHit()->geographicalId() : DetId{}; // null if last
550 
551  if (TKlayers == 9 && theInHit->isValid() && !((!nextId.null()) && (::checkLayer(nextId.rawId(), tTopo) == 9))) {
552  // if ( TKlayers==9 && itm==TMeas.rbegin()) {
553  // if ( TKlayers==9 && (itm==TMeas.back()) ) { // to check for only the last entry in the trajectory for propagation
554  const DetLayer* tob6 = measTracker.geometricSearchTracker()->tobLayers().back();
555  const LayerMeasurements theLayerMeasurements{measTracker, *measurementTrackerEvent};
556  const TrajectoryStateOnSurface tsosTOB5 = itm->updatedState();
557  const auto tmp = theLayerMeasurements.measurements(*tob6, tsosTOB5, prop, chi2Estimator);
558 
559  if (!tmp.empty()) {
560  LogDebug("SiStripHitEfficiencyWorker") << "size of TM from propagation = " << tmp.size();
561 
562  // take the last of the TMs, which is always an invalid hit
563  // if no detId is available, ie detId==0, then no compatible layer was crossed
564  // otherwise, use that TM for the efficiency measurement
565  const auto& tob6TM = tmp.back();
566  const auto& tob6Hit = tob6TM.recHit();
567  if (tob6Hit->geographicalId().rawId() != 0) {
568  LogDebug("SiStripHitEfficiencyWorker") << "tob6 hit actually being added to TM vector";
569  TMs.emplace_back(tob6TM, tTopo, tkgeom, propagator);
570  }
571  }
572  }
573 
574  // same for TEC8
575  if (TKlayers == 21 && theInHit->isValid() &&
576  !((!nextId.null()) && (::checkLayer(nextId.rawId(), tTopo) == 21))) {
577  const DetLayer* tec9pos = measTracker.geometricSearchTracker()->posTecLayers().back();
578  const DetLayer* tec9neg = measTracker.geometricSearchTracker()->negTecLayers().back();
579 
580  const LayerMeasurements theLayerMeasurements{measTracker, *measurementTrackerEvent};
581  const TrajectoryStateOnSurface tsosTEC9 = itm->updatedState();
582 
583  // check if track on positive or negative z
584  if (!(iidd == SiStripSubdetector::TEC))
585  LogDebug("SiStripHitEfficiencyWorker") << "there is a problem with TEC 9 extrapolation";
586 
587  //LogDebug("SiStripHitEfficiencyWorker") << " tec9 id = " << iidd << " and side = " << tTopo->tecSide(iidd) ;
588  std::vector<TrajectoryMeasurement> tmp;
589  if (tTopo->tecSide(iidd) == 1) {
590  tmp = theLayerMeasurements.measurements(*tec9neg, tsosTEC9, prop, chi2Estimator);
591  //LogDebug("SiStripHitEfficiencyWorker") << "on negative side" ;
592  }
593  if (tTopo->tecSide(iidd) == 2) {
594  tmp = theLayerMeasurements.measurements(*tec9pos, tsosTEC9, prop, chi2Estimator);
595  //LogDebug("SiStripHitEfficiencyWorker") << "on positive side" ;
596  }
597 
598  if (!tmp.empty()) {
599  // take the last of the TMs, which is always an invalid hit
600  // if no detId is available, ie detId==0, then no compatible layer was crossed
601  // otherwise, use that TM for the efficiency measurement
602  const auto& tec9TM = tmp.back();
603  const auto& tec9Hit = tec9TM.recHit();
604 
605  const unsigned int tec9id = tec9Hit->geographicalId().rawId();
606  LogDebug("SiStripHitEfficiencyWorker")
607  << "tec9id = " << tec9id << " is Double sided = " << ::isDoubleSided(tec9id, tTopo)
608  << " and 0x3 = " << (tec9id & 0x3);
609 
610  if (tec9Hit->geographicalId().rawId() != 0) {
611  LogDebug("SiStripHitEfficiencyWorker") << "tec9 hit actually being added to TM vector";
612  // in tec the hit can be single or doubled sided. whenever the invalid hit at the end of vector of TMs is
613  // double sided it is always on the matched surface, so we need to split it into the true sensor surfaces
614  if (::isDoubleSided(tec9id, tTopo)) {
615  TMs.emplace_back(tec9TM, tTopo, tkgeom, propagator, 1);
616  TMs.emplace_back(tec9TM, tTopo, tkgeom, propagator, 2);
617  } else
618  TMs.emplace_back(tec9TM, tTopo, tkgeom, propagator);
619  }
620  } //else LogDebug("SiStripHitEfficiencyWorker") << "tec9 tmp empty" ;
621  }
622 
623  for (const auto& tm : TMs) {
624  fillForTraj(tm,
625  tTopo,
626  tkgeom,
627  stripcpe,
628  stripQuality,
629  *fedErrorIds,
630  commonModeDigis,
631  *theClusters,
632  e.bunchCrossing(),
633  instLumi,
634  PU,
635  highPurity);
636  }
637  LogDebug("SiStripHitEfficiencyWorker") << "After looping over TrajAtValidHit list";
638  }
639  LogDebug("SiStripHitEfficiencyWorker") << "end TMeasurement loop";
640  }
641  LogDebug("SiStripHitEfficiencyWorker") << "end of trajectories loop";
642  }
643 }
const edm::ESGetToken< MeasurementTracker, CkfComponentsRecord > measTrackerToken_
const edm::EDGetTokenT< std::vector< Trajectory > > trajectories_token_
const edm::EDGetTokenT< DetIdCollection > digis_token_
float instLumi() const
Return the luminosity for the current nibble.
std::unordered_map< uint32_t, int > fedErrorCounts
missing
Definition: combine.py:5
std::unique_ptr< TkHistoMap > FEDErrorOccupancy
const edm::EDGetTokenT< MeasurementTrackerEvent > trackerEvent_token_
void Fill(long long x)
void fillForTraj(const TrajectoryAtInvalidHit &tm, const TrackerTopology *tTopo, const TrackerGeometry *tkgeom, const StripClusterParameterEstimator &stripCPE, const SiStripQuality &stripQuality, const DetIdCollection &fedErrorIds, const edm::Handle< edm::DetSetVector< SiStripRawDigi >> &commonModeDigis, const edmNew::DetSetVector< SiStripCluster > &theClusters, int bunchCrossing, float instLumi, float PU, bool highPurity)
const edm::ESGetToken< StripClusterParameterEstimator, TkStripCPERecord > stripCPEToken_
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorToken_
const edm::EDGetTokenT< OnlineLuminosityRecord > metaDataToken_
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > chi2EstimatorToken_
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tkGeomToken_
dqm::reco::MonitorElement * EventStats
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
Definition: DetId.h:17
const edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAsso_token_
const edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusters_token_
bool isValid() const
Definition: HandleBase.h:70
const edm::EDGetTokenT< reco::TrackCollection > combinatorialTracks_token_
const edm::ESGetToken< SiStripQuality, SiStripQualityRcd > stripQualityToken_
const edm::EDGetTokenT< LumiScalersCollection > scalerToken_
const edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > commonModeToken_
Log< level::Warning, false > LogWarning
tmp
align.sh
Definition: createJobs.py:716
float avgPileUp() const
Return the average pileup for th current nibble.
#define LogDebug(id)

◆ bookHistograms()

void SiStripHitEfficiencyWorker::bookHistograms ( DQMStore::IBooker booker,
const edm::Run run,
const edm::EventSetup setup 
)
overrideprivatevirtual

Implements DQMEDAnalyzer.

Definition at line 246 of file SiStripHitEfficiencyWorker.cc.

References addCommonMode_, dqm::implementation::IBooker::book1D(), dqm::implementation::IBooker::book2D(), dqm::implementation::IBooker::book2I(), dqm::implementation::IBooker::bookProfile(), calibData_, dqmDir_, SiStripHitEffData::EventStats, SiStripHitEffData::FEDErrorOccupancy, dqm-mbProfile::format, h_allLayer, h_bx, h_goodLayer, h_hotcold, h_instLumi, h_layer, h_layer_vsBx, h_layer_vsCM, h_layer_vsLumi, h_layer_vsPU, h_module, h_nTracks, h_nTracksVsPU, h_PU, h_resolution, phase1PixelTopology::layer, phase1PixelTopology::layerName, Skims_PA_cff::name, nTEClayers_, l1ctLayer1_patternWriters_cff::partition, dqm::impl::MonitorElement::setAxisTitle(), dqm::impl::MonitorElement::setBinLabel(), dqm::implementation::NavigatorBase::setCurrentFolder(), singleTopDQM_cfi::setup, showRings_, AlCaHLTBitMon_QueryRunRegistry::string, tkDetMapToken_, and multiplicitycorr_cfi::yMax.

248  {
249  booker.setCurrentFolder(fmt::format("{}/EventInfo", dqmDir_));
250  h_bx = booker.book1D("bx", "bx", 3600, 0, 3600);
251  h_instLumi = booker.book1D("instLumi", "inst. lumi.", 250, 0, 25000);
252  h_PU = booker.book1D("PU", "PU", 200, 0, 200);
253  h_nTracks = booker.book1D("ntracks", "n.tracks;n. tracks;n.events", 500, -0.5, 499.5);
254  h_nTracksVsPU = booker.bookProfile("nTracksVsPU", "n. tracks vs PU; PU; n.tracks ", 200, 0, 200, 500, -0.5, 499.5);
255 
256  calibData_.EventStats = booker.book2I("EventStats", "Statistics", 3, -0.5, 2.5, 1, 0, 1);
257  calibData_.EventStats->setBinLabel(1, "events count", 1);
258  calibData_.EventStats->setBinLabel(2, "tracks count", 1);
259  calibData_.EventStats->setBinLabel(3, "measurements count", 1);
260 
261  booker.setCurrentFolder(dqmDir_);
262  h_goodLayer = EffME1(booker.book1D("goodlayer_total", "goodlayer_total", 35, 0., 35.),
263  booker.book1D("goodlayer_found", "goodlayer_found", 35, 0., 35.));
264  h_allLayer = EffME1(booker.book1D("alllayer_total", "alllayer_total", 35, 0., 35.),
265  booker.book1D("alllayer_found", "alllayer_found", 35, 0., 35.));
266 
267  h_layer = EffME1(
268  booker.book1D(
269  "layer_found", "layer_found", bounds::k_END_OF_LAYERS, 0., static_cast<float>(bounds::k_END_OF_LAYERS)),
270  booker.book1D(
271  "layer_total", "layer_total", bounds::k_END_OF_LAYERS, 0., static_cast<float>(bounds::k_END_OF_LAYERS)));
272 
273  for (int layer = 1; layer != bounds::k_END_OF_LAYERS; ++layer) {
274  const auto lyrName = ::layerName(layer, showRings_, nTEClayers_);
275 
276  // book resolutions
277  booker.setCurrentFolder(fmt::format("{}/Resolutions", dqmDir_));
278  auto ihres = booker.book1D(Form("resol_layer_%i", layer), lyrName, 125, -125., 125.);
279  ihres->setAxisTitle("trajX-clusX [strip unit]");
280  h_resolution.push_back(ihres);
281 
282  // book plots vs Lumi
283  booker.setCurrentFolder(fmt::format("{}/VsLumi", dqmDir_));
284  h_layer_vsLumi.push_back(EffME1(booker.book1D(Form("layertotal_vsLumi_layer_%i", layer), lyrName, 100, 0, 25000),
285  booker.book1D(Form("layerfound_vsLumi_layer_%i", layer), lyrName, 100, 0, 25000)));
286 
287  // book plots vs Lumi
288  booker.setCurrentFolder(fmt::format("{}/VsPu", dqmDir_));
289  h_layer_vsPU.push_back(EffME1(booker.book1D(Form("layertotal_vsPU_layer_%i", layer), lyrName, 45, 0, 90),
290  booker.book1D(Form("layerfound_vsPU_layer_%i", layer), lyrName, 45, 0, 90)));
291  if (addCommonMode_) {
292  // book plots for common mode
293  booker.setCurrentFolder(fmt::format("{}/CommonMode", dqmDir_));
294  h_layer_vsCM.push_back(EffME1(booker.book1D(Form("layertotal_vsCM_layer_%i", layer), lyrName, 20, 0, 400),
295  booker.book1D(Form("layerfound_vsCM_layer_%i", layer), lyrName, 20, 0, 400)));
296  }
297 
298  // book plots vs Lumi
299  booker.setCurrentFolder(fmt::format("{}/VsBx", dqmDir_));
300  h_layer_vsBx.push_back(EffME1(
301  booker.book1D(Form("totalVsBx_layer%i", layer), Form("layer %i (%s)", layer, lyrName.c_str()), 3565, 0, 3565),
302  booker.book1D(Form("foundVsBx_layer%i", layer), Form("layer %i (%s)", layer, lyrName.c_str()), 3565, 0, 3565)));
303 
304  // book hot and cold
305  booker.setCurrentFolder(fmt::format("{}/MissingHits", dqmDir_));
306  if (layer <= bounds::k_LayersAtTOBEnd) {
307  const bool isTIB = layer <= bounds::k_LayersAtTIBEnd;
308  const auto partition = (isTIB ? "TIB" : "TOB");
309  const auto yMax = (isTIB ? 100 : 120);
310 
311  const auto& tit =
312  Form("%s%i: Map of missing hits", partition, (isTIB ? layer : layer - bounds::k_LayersAtTIBEnd));
313 
314  // histogram name must not contain ":" otherwise it fails upload to the GUI
315  // see https://github.com/cms-DQM/dqmgui_prod/blob/af0a388e8f57c60e51111585d298aeeea943367f/src/cpp/DQM/DQMStore.cc#L56
316  std::string name{tit};
317  ::replaceInString(name, ":", "");
318 
319  auto ihhotcold = booker.book2D(name, tit, 100, -1, 361, 100, -yMax, yMax);
320  ihhotcold->setAxisTitle("#phi [deg]", 1);
321  ihhotcold->setBinLabel(1, "360", 1);
322  ihhotcold->setBinLabel(50, "180", 1);
323  ihhotcold->setBinLabel(100, "0", 1);
324  ihhotcold->setAxisTitle("Global Z [cm]", 2);
325  ihhotcold->setOption("colz");
326  h_hotcold.push_back(ihhotcold);
327  } else {
328  const bool isTID = layer <= bounds::k_LayersAtTIDEnd;
329  const auto partitions =
330  (isTID ? std::vector<std::string>{"TIDplus", "TIDminus"} : std::vector<std::string>{"TECplus", "TECminus"});
331  const auto axMax = (isTID ? 100 : 120);
332  for (const auto& part : partitions) {
333  // create the title by replacing the minus/plus symbols
334  std::string forTitle{part};
335  ::replaceInString(forTitle, "minus", "-");
336  ::replaceInString(forTitle, "plus", "+");
337 
338  // histogram name must not contain ":" otherwise it fails upload to the GUI
339  // see https://github.com/cms-DQM/dqmgui_prod/blob/af0a388e8f57c60e51111585d298aeeea943367f/src/cpp/DQM/DQMStore.cc#L56
340  const auto& name = Form("%s %i Map of Missing Hits",
341  part.c_str(),
342  (isTID ? layer - bounds::k_LayersAtTOBEnd : layer - bounds::k_LayersAtTIDEnd));
343  const auto& tit = Form("%s%i: Map of Missing Hits",
344  forTitle.c_str(),
345  (isTID ? layer - bounds::k_LayersAtTOBEnd : layer - bounds::k_LayersAtTIDEnd));
346 
347  auto ihhotcold = booker.book2D(name, tit, 100, -axMax, axMax, 100, -axMax, axMax);
348  ihhotcold->setAxisTitle("Global Y", 1);
349  ihhotcold->setBinLabel(1, "+Y", 1);
350  ihhotcold->setBinLabel(50, "0", 1);
351  ihhotcold->setBinLabel(100, "-Y", 1);
352  ihhotcold->setAxisTitle("Global X", 2);
353  ihhotcold->setBinLabel(1, "-X", 2);
354  ihhotcold->setBinLabel(50, "0", 2);
355  ihhotcold->setBinLabel(100, "+X", 2);
356  ihhotcold->setOption("colz");
357  h_hotcold.push_back(ihhotcold);
358  }
359  }
360  }
361 
362  // come back to the main folder
363  booker.setCurrentFolder(dqmDir_);
364  const auto tkDetMapFolder = fmt::format("{}/TkDetMaps", dqmDir_);
365 
366  const TkDetMap* tkDetMap = &setup.getData(tkDetMapToken_);
367  h_module =
368  EffTkMap(std::make_unique<TkHistoMap>(tkDetMap, booker, tkDetMapFolder, "perModule_total", 0, false, true),
369  std::make_unique<TkHistoMap>(tkDetMap, booker, tkDetMapFolder, "perModule_found", 0, false, true));
370 
371  // fill the FED Errors
372  booker.setCurrentFolder(dqmDir_);
373  const auto FEDErrorMapFolder = fmt::format("{}/FEDErrorTkDetMaps", dqmDir_);
375  std::make_unique<TkHistoMap>(tkDetMap, booker, FEDErrorMapFolder, "perModule_FEDErrors", 0, false, true);
376 }
constexpr char const * layerName[numberOfLayers]
std::vector< MonitorElement * > h_resolution
virtual void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:36
std::vector< MonitorElement * > h_hotcold
std::unique_ptr< TkHistoMap > FEDErrorOccupancy
constexpr std::array< uint8_t, layerIndexSize > layer
const edm::ESGetToken< TkDetMap, TrackerTopologyRcd > tkDetMapToken_
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
virtual void setBinLabel(int bin, const std::string &label, int axis=1)
set bin label for x, y or z axis (axis=1, 2, 3 respectively)
dqm::reco::MonitorElement * EventStats
part
Definition: HCALResponse.h:20
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
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 * book2I(TString const &name, TString const &title, int nchX, double lowX, double highX, int nchY, double lowY, double highY, FUNC onbooking=NOOP())
Definition: DQMStore.h:296
virtual void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)

◆ fillDescriptions()

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

Definition at line 1021 of file SiStripHitEfficiencyWorker.cc.

References edm::ConfigurationDescriptions::addWithDefaultLabel(), submitPVResolutionJobs::desc, and AlCaHLTBitMon_QueryRunRegistry::string.

1021  {
1023  desc.add<std::string>("dqmDir", "AlCaReco/SiStripHitEfficiency");
1024  desc.add<bool>("UseOnlyHighPurityTracks", true);
1025  desc.add<bool>("cutOnTracks", false);
1026  desc.add<bool>("useAllHitsFromTracksWithMissingHits", false);
1027  desc.add<bool>("useFirstMeas", false);
1028  desc.add<bool>("useLastMeas", false);
1029  desc.add<double>("ClusterTrajDist", 64.0);
1030  desc.add<double>("ResXSig", -1);
1031  desc.add<double>("StripsApvEdge", 10.0);
1032  desc.add<edm::InputTag>("combinatorialTracks", edm::InputTag{"generalTracks"});
1033  desc.add<edm::InputTag>("commonMode", edm::InputTag{"siStripDigis", "CommonMode"});
1034  desc.add<edm::InputTag>("lumiScalers", edm::InputTag{"scalersRawToDigi"});
1035  desc.add<edm::InputTag>("metadata", edm::InputTag{"onlineMetaDataDigis"});
1036  desc.add<edm::InputTag>("siStripClusters", edm::InputTag{"siStripClusters"});
1037  desc.add<edm::InputTag>("siStripDigis", edm::InputTag{"siStripDigis"});
1038  desc.add<edm::InputTag>("trackerEvent", edm::InputTag{"MeasurementTrackerEvent"});
1039  desc.add<edm::InputTag>("trajectories", edm::InputTag{"generalTracks"});
1040  desc.add<int>("ClusterMatchingMethod", 0);
1041  desc.add<int>("Layer", 0);
1042  desc.add<unsigned int>("trackMultiplicity", 100);
1043  desc.addUntracked<bool>("Debug", false);
1044  desc.addUntracked<bool>("ShowRings", false);
1045  desc.addUntracked<bool>("ShowTOB6TEC9", false);
1046  desc.addUntracked<bool>("addCommonMode", false);
1047  desc.addUntracked<bool>("addLumi", true);
1048  desc.addUntracked<int>("BunchCrossing", 0);
1049  desc.addUntracked<std::string>("BadModulesFile", "");
1050  descriptions.addWithDefaultLabel(desc);
1051 }
void addWithDefaultLabel(ParameterSetDescription const &psetDescription)

◆ fillForTraj()

void SiStripHitEfficiencyWorker::fillForTraj ( const TrajectoryAtInvalidHit tm,
const TrackerTopology tTopo,
const TrackerGeometry tkgeom,
const StripClusterParameterEstimator stripCPE,
const SiStripQuality stripQuality,
const DetIdCollection fedErrorIds,
const edm::Handle< edm::DetSetVector< SiStripRawDigi >> &  commonModeDigis,
const edmNew::DetSetVector< SiStripCluster > &  theClusters,
int  bunchCrossing,
float  instLumi,
float  PU,
bool  highPurity 
)
private

Definition at line 645 of file SiStripHitEfficiencyWorker.cc.

References funct::abs(), addCommonMode_, addLumi_, badModules_, Surface::bounds(), bunchX_, clusterMatchingMethod_, clusterTracjDist_, edmNew::DetSetVector< T >::empty(), edmNew::DetSetVector< T >::end(), SiStripHitEfficiencyWorker::EffME1::fill(), SiStripHitEfficiencyWorker::EffTkMap::fill(), edmNew::DetSetVector< T >::find(), SiStripQuality::getBadApvs(), TrajectoryAtInvalidHit::globalX(), TrajectoryAtInvalidHit::globalY(), TrajectoryAtInvalidHit::globalZ(), h_allLayer, h_goodLayer, h_hotcold, h_layer_vsBx, h_layer_vsCM, h_layer_vsLumi, h_layer_vsPU, h_module, h_resolution, muons_cff::highPurity, TrackerGeometry::idToDetUnit(), cuy::ii, muonGEMDigis_cfi::instLumi, createfilelist::int, phase1PixelTopology::layer, layers_, TrajectoryAtInvalidHit::localErrorX(), TrajectoryAtInvalidHit::localErrorY(), StripClusterParameterEstimator::localParameters(), TrajectoryAtInvalidHit::localX(), TrajectoryAtInvalidHit::localY(), LogDebug, TrajectoryAtInvalidHit::monodet_id(), StripTopology::nstrips(), TrapezoidalPlaneBounds::parameters(), phi, MLClient_cfi::PU, resXSig_, showRings_, showTOB6TEC9_, edm::EDCollection< T >::size(), edmNew::DetSetVector< T >::size(), StripGeomDetUnit::specificTopology(), mathSSE::sqrt(), TrackingMonitor_cfi::stripCluster, sistrip::STRIPS_PER_APV, stripsApvEdge_, GeomDet::surface(), TrackerTopology::tecRing(), TrackerTopology::tecSide(), TrackerTopology::tidRing(), TrackerTopology::tidSide(), useOnlyHighPurityTracks_, Bounds::width(), and TrajectoryAtInvalidHit::withinAcceptance().

Referenced by analyze().

656  {
657  // --> Get trajectory from combinatedStat& e
658  const auto iidd = tm.monodet_id();
659  LogDebug("SiStripHitEfficiencyWorker") << "setting iidd = " << iidd << " before checking efficiency and ";
660 
661  const auto xloc = tm.localX();
662  const auto yloc = tm.localY();
663 
664  const auto xErr = tm.localErrorX();
665  const auto yErr = tm.localErrorY();
666 
667  int TrajStrip = -1;
668 
669  // reget layer from iidd here, to account for TOB 6 and TEC 9 TKlayers being off
670  const auto TKlayers = ::checkLayer(iidd, tTopo);
671 
672  const bool withinAcceptance =
673  tm.withinAcceptance() && (!::isInBondingExclusionZone(iidd, TKlayers, yloc, yErr, tTopo));
674 
675  if ( // (TKlayers > 0) && // FIXME confirm this
676  ((layers_ == TKlayers) ||
677  (layers_ == bounds::k_LayersStart))) { // Look at the layer not used to reconstruct the track
678  LogDebug("SiStripHitEfficiencyWorker") << "Looking at layer under study";
679  unsigned int ModIsBad = 2;
680  unsigned int SiStripQualBad = 0;
681  float commonMode = -100;
682 
683  // RPhi RecHit Efficiency
684 
685  if (!theClusters.empty()) {
686  LogDebug("SiStripHitEfficiencyWorker") << "Checking clusters with size = " << theClusters.size();
687  std::vector<::ClusterInfo> VCluster_info; //fill with X residual, X residual pull, local X
688  const auto idsv = theClusters.find(iidd);
689  if (idsv != theClusters.end()) {
690  //if (DEBUG_) LogDebug("SiStripHitEfficiencyWorker") << "the ID from the dsv = " << dsv.id() ;
691  LogDebug("SiStripHitEfficiencyWorker")
692  << "found (ClusterId == iidd) with ClusterId = " << idsv->id() << " and iidd = " << iidd;
693  const auto stripdet = dynamic_cast<const StripGeomDetUnit*>(tkgeom->idToDetUnit(DetId(iidd)));
694  const StripTopology& Topo = stripdet->specificTopology();
695 
696  float hbedge = 0.0;
697  float htedge = 0.0;
698  float hapoth = 0.0;
699  float uylfac = 0.0;
700  float uxlden = 0.0;
701  if (TKlayers > bounds::k_LayersAtTOBEnd) {
702  const BoundPlane& plane = stripdet->surface();
703  const TrapezoidalPlaneBounds* trapezoidalBounds(
704  dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
705  std::array<const float, 4> const& parameterTrap = (*trapezoidalBounds).parameters(); // el bueno aqui
706  hbedge = parameterTrap[0];
707  htedge = parameterTrap[1];
708  hapoth = parameterTrap[3];
709  uylfac = (htedge - hbedge) / (htedge + hbedge) / hapoth;
710  uxlden = 1 + yloc * uylfac;
711  }
712 
713  // Need to know position of trajectory in strip number for selecting the right APV later
714  if (TrajStrip == -1) {
715  int nstrips = Topo.nstrips();
716  float pitch = stripdet->surface().bounds().width() / nstrips;
717  TrajStrip = xloc / pitch + nstrips / 2.0;
718  // Need additionnal corrections for endcap
719  if (TKlayers > bounds::k_LayersAtTOBEnd) {
720  const float TrajLocXMid = xloc / (1 + (htedge - hbedge) * yloc / (htedge + hbedge) /
721  hapoth); // radialy extrapolated x loc position at middle
722  TrajStrip = TrajLocXMid / pitch + nstrips / 2.0;
723  }
724  //LogDebug("SiStripHitEfficiency")<<" Layer "<<TKlayers<<" TrajStrip: "<<nstrips<<" "<<pitch<<" "<<TrajStrip;;
725  }
726 
727  for (const auto& clus : *idsv) {
729  float res = (parameters.first.x() - xloc);
730  float sigma = ::checkConsistency(parameters, xloc, xErr);
731  // The consistency is probably more accurately measured with the Chi2MeasurementEstimator. To use it
732  // you need a TransientTrackingRecHit instead of the cluster
733  //theEstimator= new Chi2MeasurementEstimator(30);
734  //const Chi2MeasurementEstimator *theEstimator(100);
735  //theEstimator->estimate(tm.tsos(), TransientTrackingRecHit);
736 
737  if (TKlayers > bounds::k_LayersAtTOBEnd) {
738  res = parameters.first.x() - xloc / uxlden; // radialy extrapolated x loc position at middle
739  sigma = abs(res) / sqrt(parameters.second.xx() + xErr * xErr / uxlden / uxlden +
740  yErr * yErr * xloc * xloc * uylfac * uylfac / uxlden / uxlden / uxlden / uxlden);
741  }
742 
743  VCluster_info.emplace_back(res, sigma, parameters.first.x());
744 
745  LogDebug("SiStripHitEfficiencyWorker") << "Have ID match. residual = " << res << " res sigma = " << sigma;
746  //LogDebug("SiStripHitEfficiencyWorker")
747  // << "trajectory measurement compatability estimate = " << (*itm).estimate() ;
748  LogDebug("SiStripHitEfficiencyWorker")
749  << "hit position = " << parameters.first.x() << " hit error = " << sqrt(parameters.second.xx())
750  << " trajectory position = " << xloc << " traj error = " << xErr;
751  }
752  }
753  ::ClusterInfo finalCluster{1000.0, 1000.0, 0.0};
754  if (!VCluster_info.empty()) {
755  LogDebug("SiStripHitEfficiencyWorker") << "found clusters > 0";
756  if (VCluster_info.size() > 1) {
757  //get the smallest one
758  for (const auto& res : VCluster_info) {
759  if (std::abs(res.xResidualPull) < std::abs(finalCluster.xResidualPull)) {
760  finalCluster = res;
761  }
762  LogDebug("SiStripHitEfficiencyWorker")
763  << "iresidual = " << res.xResidual << " isigma = " << res.xResidualPull
764  << " and FinalRes = " << finalCluster.xResidual;
765  }
766  } else {
767  finalCluster = VCluster_info[0];
768  }
769  VCluster_info.clear();
770  }
771 
772  LogDebug("SiStripHitEfficiencyWorker") << "Final residual in X = " << finalCluster.xResidual << "+-"
773  << (finalCluster.xResidual / finalCluster.xResidualPull);
774  LogDebug("SiStripHitEfficiencyWorker")
775  << "Checking location of trajectory: abs(yloc) = " << abs(yloc) << " abs(xloc) = " << abs(xloc);
776 
777  //
778  // fill ntuple varibles
779 
780  //if ( stripQuality->IsModuleBad(iidd) )
781  if (stripQuality.getBadApvs(iidd) != 0) {
782  SiStripQualBad = 1;
783  LogDebug("SiStripHitEfficiencyWorker") << "strip is bad from SiStripQuality";
784  } else {
785  SiStripQualBad = 0;
786  LogDebug("SiStripHitEfficiencyWorker") << "strip is good from SiStripQuality";
787  }
788 
789  //check for FED-detected errors and include those in SiStripQualBad
790  for (unsigned int ii = 0; ii < fedErrorIds.size(); ii++) {
791  if (iidd == fedErrorIds[ii].rawId())
792  SiStripQualBad = 1;
793  }
794 
795  // CM of APV crossed by traj
796  if (addCommonMode_)
797  if (commonModeDigis.isValid() && TrajStrip >= 0 && TrajStrip <= 768) {
798  const auto digiframe = commonModeDigis->find(iidd);
799  if (digiframe != commonModeDigis->end())
800  if ((unsigned)TrajStrip / sistrip::STRIPS_PER_APV < digiframe->data.size())
801  commonMode = digiframe->data.at(TrajStrip / sistrip::STRIPS_PER_APV).adc();
802  }
803 
804  LogDebug("SiStripHitEfficiencyWorker") << "before check good";
805 
806  if (finalCluster.xResidualPull < 999.0) { //could make requirement on track/hit consistency, but for
807  //now take anything with a hit on the module
808  LogDebug("SiStripHitEfficiencyWorker")
809  << "hit being counted as good " << finalCluster.xResidual << " FinalRecHit " << iidd << " TKlayers "
810  << TKlayers << " xloc " << xloc << " yloc " << yloc << " module " << iidd
811  << " matched/stereo/rphi = " << ((iidd & 0x3) == 0) << "/" << ((iidd & 0x3) == 1) << "/"
812  << ((iidd & 0x3) == 2);
813  ModIsBad = 0;
814  } else {
815  LogDebug("SiStripHitEfficiencyWorker")
816  << "hit being counted as bad ######### Invalid RPhi FinalResX " << finalCluster.xResidual
817  << " FinalRecHit " << iidd << " TKlayers " << TKlayers << " xloc " << xloc << " yloc " << yloc
818  << " module " << iidd << " matched/stereo/rphi = " << ((iidd & 0x3) == 0) << "/" << ((iidd & 0x3) == 1)
819  << "/" << ((iidd & 0x3) == 2);
820  ModIsBad = 1;
821  LogDebug("SiStripHitEfficiencyWorker")
822  << " RPhi Error " << sqrt(xErr * xErr + yErr * yErr) << " ErrorX " << xErr << " yErr " << yErr;
823  }
824 
825  LogDebug("SiStripHitEfficiencyWorker")
826  << "To avoid them staying unused: ModIsBad=" << ModIsBad << ", SiStripQualBad=" << SiStripQualBad
827  << ", commonMode=" << commonMode << ", highPurity=" << highPurity
828  << ", withinAcceptance=" << withinAcceptance;
829 
830  unsigned int layer = TKlayers;
831  if (showRings_ && layer > bounds::k_LayersAtTOBEnd) { // use rings instead of wheels
832  if (layer <= bounds::k_LayersAtTIDEnd) { // TID
833  layer = bounds::k_LayersAtTOBEnd +
834  tTopo->tidRing(iidd); // ((iidd >> 9) & 0x3); // 3 disks and also 3 rings -> use the same container
835  } else { // TEC
836  layer = bounds::k_LayersAtTIDEnd + tTopo->tecRing(iidd); // ((iidd >> 5) & 0x7);
837  }
838  }
839  unsigned int layerWithSide = layer;
840  if (layer > bounds::k_LayersAtTOBEnd && layer <= bounds::k_LayersAtTIDEnd) {
841  const auto side = tTopo->tidSide(iidd); //(iidd >> 13) & 0x3; // TID
842  if (side == 2)
843  layerWithSide = layer + 3;
844  } else if (layer > bounds::k_LayersAtTIDEnd) {
845  const auto side = tTopo->tecSide(iidd); // (iidd >> 18) & 0x3; // TEC
846  if (side == 1) {
847  layerWithSide = layer + 3;
848  } else if (side == 2) {
849  layerWithSide = layer + 3 + (showRings_ ? 7 : 9);
850  }
851  }
852 
853  if ((bunchX_ > 0 && bunchX_ != bunchCrossing) || (!withinAcceptance) ||
855  (!showTOB6TEC9_ && (TKlayers == bounds::k_LayersAtTOBEnd || TKlayers == bounds::k_LayersAtTECEnd)) ||
856  (badModules_.end() != badModules_.find(iidd)))
857  return;
858 
859  const bool badquality = (SiStripQualBad == 1);
860 
861  //Now that we have a good event, we need to look at if we expected it or not, and the location
862  //if we didn't
863  //Fill the missing hit information first
864  bool badflag = false; // true for hits that are expected but not found
865  if (resXSig_ < 0) {
866  if (ModIsBad == 1)
867  badflag = true; // isBad set to false in the tree when resxsig<999.0
868  } else {
869  if (ModIsBad == 1 || finalCluster.xResidualPull > resXSig_)
870  badflag = true;
871  }
872 
873  // Conversion of positions in strip unit
874  int nstrips = -9;
875  float Pitch = -9.0;
876  const StripGeomDetUnit* stripdet = nullptr;
877  if (finalCluster.xResidualPull ==
878  1000.0) { // special treatment, no GeomDetUnit associated in some cases when no cluster found
879  Pitch = 0.0205; // maximum
880  nstrips = 768; // maximum
881  } else {
882  stripdet = dynamic_cast<const StripGeomDetUnit*>(tkgeom->idToDetUnit(iidd));
883  const StripTopology& Topo = stripdet->specificTopology();
884  nstrips = Topo.nstrips();
885  Pitch = stripdet->surface().bounds().width() / Topo.nstrips();
886  }
887  double stripTrajMid = xloc / Pitch + nstrips / 2.0;
888  double stripCluster = finalCluster.xLocal / Pitch + nstrips / 2.0;
889  // For trapezoidal modules: extrapolation of x trajectory position to the y middle of the module
890  // for correct comparison with cluster position
891  if (stripdet && layer > bounds::k_LayersAtTOBEnd) {
892  const auto& trapezoidalBounds = dynamic_cast<const TrapezoidalPlaneBounds&>(stripdet->surface().bounds());
893  std::array<const float, 4> const& parameters = trapezoidalBounds.parameters();
894  const float hbedge = parameters[0];
895  const float htedge = parameters[1];
896  const float hapoth = parameters[3];
897  const float TrajLocXMid = xloc / (1 + (htedge - hbedge) * yloc / (htedge + hbedge) /
898  hapoth); // radialy extrapolated x loc position at middle
899  stripTrajMid = TrajLocXMid / Pitch + nstrips / 2.0;
900  }
901 
902  if ((!badquality) && (layer < h_resolution.size())) {
903  LogDebug("SiStripHitEfficiencyWorker")
904  << "layer " << layer << " vector index " << layer - 1 << " before filling h_resolution" << std::endl;
905  h_resolution[layer - 1]->Fill(finalCluster.xResidualPull != 1000.0 ? stripTrajMid - stripCluster : 1000);
906  }
907 
908  // New matching methods
909  if (clusterMatchingMethod_ >= 1) {
910  badflag = false;
911  if (finalCluster.xResidualPull == 1000.0) {
912  LogDebug("SiStripHitEfficiencyWorker") << "Marking bad for resxsig=1000";
913  badflag = true;
914  } else {
916  // check the distance between cluster and trajectory position
917  if (std::abs(stripCluster - stripTrajMid) > clusterTracjDist_) {
918  LogDebug("SiStripHitEfficiencyWorker") << "Marking bad for cluster-to-traj distance";
919  badflag = true;
920  }
921  }
923  // cluster and traj have to be in the same APV (don't take edges into accounts)
924  const int tapv = (int)stripTrajMid / sistrip::STRIPS_PER_APV;
925  const int capv = (int)stripCluster / sistrip::STRIPS_PER_APV;
926  float stripInAPV = stripTrajMid - tapv * sistrip::STRIPS_PER_APV;
927  if (stripInAPV < stripsApvEdge_ || stripInAPV > sistrip::STRIPS_PER_APV - stripsApvEdge_) {
928  LogDebug("SiStripHitEfficiencyWorker") << "Too close to the edge: " << stripInAPV;
929  return;
930  }
931  if (tapv != capv) {
932  LogDebug("SiStripHitEfficiencyWorker") << "Marking bad for tapv!=capv";
933  badflag = true;
934  }
935  }
936  }
937  }
938  if (!badquality) {
939  LogDebug("SiStripHitEfficiencyWorker")
940  << "Filling measurement for " << iidd << " in layer " << layer << " histograms with bx=" << bunchCrossing
941  << ", lumi=" << instLumi << ", PU=" << PU << "; bad flag=" << badflag;
942 
943  // hot/cold maps of hits that are expected but not found
944  if (badflag) {
945  if (layer > bounds::k_LayersStart && layer <= bounds::k_LayersAtTIBEnd) {
946  //We are in the TIB
947  float phi = ::calcPhi(tm.globalX(), tm.globalY());
948  h_hotcold[layer - 1]->Fill(360. - phi, tm.globalZ(), 1.);
949  } else if (layer > bounds::k_LayersAtTIBEnd && layer <= bounds::k_LayersAtTOBEnd) {
950  //We are in the TOB
951  float phi = ::calcPhi(tm.globalX(), tm.globalY());
952  h_hotcold[layer - 1]->Fill(360. - phi, tm.globalZ(), 1.);
953  } else if (layer > bounds::k_LayersAtTOBEnd && layer <= bounds::k_LayersAtTIDEnd) {
954  //We are in the TID
955  //There are 2 different maps here
956  int side = tTopo->tidSide(iidd);
957  if (side == 1)
958  h_hotcold[(layer - 1) + (layer - 11)]->Fill(-tm.globalY(), tm.globalX(), 1.);
959  else if (side == 2)
960  h_hotcold[(layer - 1) + (layer - 10)]->Fill(-tm.globalY(), tm.globalX(), 1.);
961  } else if (layer > bounds::k_LayersAtTIDEnd) {
962  //We are in the TEC
963  //There are 2 different maps here
964  int side = tTopo->tecSide(iidd);
965  if (side == 1)
966  h_hotcold[(layer + 2) + (layer - 14)]->Fill(-tm.globalY(), tm.globalX(), 1.);
967  else if (side == 2)
968  h_hotcold[(layer + 2) + (layer - 13)]->Fill(-tm.globalY(), tm.globalX(), 1.);
969  }
970  }
971 
972  LogDebug("SiStripHitEfficiencyWorker")
973  << "layer " << layer << " vector index " << layer - 1 << " before filling h_layer_vsSmthg" << std::endl;
974  h_layer_vsBx[layer - 1].fill(bunchCrossing, !badflag);
975  if (addLumi_) {
976  h_layer_vsLumi[layer - 1].fill(instLumi, !badflag);
977  h_layer_vsPU[layer - 1].fill(PU, !badflag);
978  }
979  if (addCommonMode_) {
980  h_layer_vsCM[layer - 1].fill(commonMode, !badflag);
981  }
982  h_goodLayer.fill(layerWithSide, !badflag);
983  }
984  // efficiency without bad modules excluded
985  h_allLayer.fill(layerWithSide, !badflag);
986 
987  // efficiency without bad modules excluded
988  if (TKlayers) {
989  h_module.fill(iidd, !badflag);
990  }
991 
992  /* Used in SiStripHitEffFromCalibTree:
993  * run -> "run" -> run // e.id().run()
994  * event -> "event" -> evt // e.id().event()
995  * ModIsBad -> "ModIsBad" -> isBad
996  * SiStripQualBad -> "SiStripQualBad"" -> quality
997  * Id -> "Id" -> id // iidd
998  * withinAcceptance -> "withinAcceptance" -> accept
999  * whatlayer -> "layer" -> layer_wheel // Tklayers
1000  * highPurity -> "highPurity" -> highPurity
1001  * TrajGlbX -> "TrajGlbX" -> x // tm.globalX()
1002  * TrajGlbY -> "TrajGlbY" -> y // tm.globalY()
1003  * TrajGlbZ -> "TrajGlbZ" -> z // tm.globalZ()
1004  * ResXSig -> "ResXSig" -> resxsig // finalCluster.xResidualPull;
1005  * TrajLocX -> "TrajLocX" -> TrajLocX // xloc
1006  * TrajLocY -> "TrajLocY" -> TrajLocY // yloc
1007  * ClusterLocX -> "ClusterLocX" -> ClusterLocX // finalCluster.xLocal
1008  * bunchx -> "bunchx" -> bx // e.bunchCrossing()
1009  * instLumi -> "instLumi" -> instLumi ## if addLumi_
1010  * PU -> "PU" -> PU ## if addLumi_
1011  * commonMode -> "commonMode" -> CM ## if addCommonMode_ / _useCM
1012  */
1013  LogDebug("SiStripHitEfficiencyWorker") << "after good location check";
1014  }
1015  LogDebug("SiStripHitEfficiencyWorker") << "after list of clusters";
1016  }
1017  LogDebug("SiStripHitEfficiencyWorker") << "After layers=TKLayers if with TKlayers=" << TKlayers
1018  << ", layers=" << layers_;
1019 }
std::pair< LocalPoint, LocalError > LocalValues
virtual int nstrips() const =0
void fill(double x, bool found, float weight=1.)
iterator find(det_id_type id)
Definition: DetSetVector.h:264
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
std::vector< MonitorElement * > h_resolution
std::vector< MonitorElement * > h_hotcold
virtual void localParameters(AClusters const &clusters, ALocalValues &retValues, const GeomDetUnit &gd, const LocalTrajectoryParameters &ltp) const
unsigned int tidSide(const DetId &id) const
unsigned int monodet_id() const
unsigned int tecRing(const DetId &id) const
ring id
Definition: Electron.h:6
constexpr std::array< uint8_t, layerIndexSize > layer
const_iterator end(bool update=false) const
unsigned int tecSide(const DetId &id) const
T sqrt(T t)
Definition: SSEVec.h:19
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
ii
Definition: cuy.py:589
Definition: DetId.h:17
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
size_type size() const
virtual const std::array< const float, 4 > parameters() const
bool isValid() const
Definition: HandleBase.h:70
const_iterator find(id_type i, bool update=false) const
size_type size() const
Definition: EDCollection.h:82
static const uint16_t STRIPS_PER_APV
unsigned int tidRing(const DetId &id) const
void fill(uint32_t id, bool found, float weight=1.)
virtual float width() const =0
#define LogDebug(id)
short getBadApvs(uint32_t detid) const
const Bounds & bounds() const
Definition: Surface.h:87

Member Data Documentation

◆ addCommonMode_

bool SiStripHitEfficiencyWorker::addCommonMode_
private

Definition at line 114 of file SiStripHitEfficiencyWorker.cc.

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

◆ addLumi_

bool SiStripHitEfficiencyWorker::addLumi_
private

Definition at line 113 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze(), and fillForTraj().

◆ badModules_

std::set<uint32_t> SiStripHitEfficiencyWorker::badModules_
private

Definition at line 131 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ bunchX_

int SiStripHitEfficiencyWorker::bunchX_
private

Definition at line 125 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ calibData_

SiStripHitEffData SiStripHitEfficiencyWorker::calibData_
private

Definition at line 85 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze(), and bookHistograms().

◆ chi2EstimatorToken_

const edm::ESGetToken<Chi2MeasurementEstimatorBase, TrackingComponentsRecord> SiStripHitEfficiencyWorker::chi2EstimatorToken_
private

Definition at line 105 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ clusterMatchingMethod_

unsigned int SiStripHitEfficiencyWorker::clusterMatchingMethod_
private

Definition at line 120 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ clusters_token_

const edm::EDGetTokenT<edmNew::DetSetVector<SiStripCluster> > SiStripHitEfficiencyWorker::clusters_token_
private

Definition at line 94 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ clusterTracjDist_

float SiStripHitEfficiencyWorker::clusterTracjDist_
private

Definition at line 122 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ combinatorialTracks_token_

const edm::EDGetTokenT<reco::TrackCollection> SiStripHitEfficiencyWorker::combinatorialTracks_token_
private

Definition at line 91 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ commonModeToken_

const edm::EDGetTokenT<edm::DetSetVector<SiStripRawDigi> > SiStripHitEfficiencyWorker::commonModeToken_
private

Definition at line 90 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ cutOnTracks_

bool SiStripHitEfficiencyWorker::cutOnTracks_
private

Definition at line 115 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ DEBUG_

bool SiStripHitEfficiencyWorker::DEBUG_
private

Definition at line 112 of file SiStripHitEfficiencyWorker.cc.

◆ digis_token_

const edm::EDGetTokenT<DetIdCollection> SiStripHitEfficiencyWorker::digis_token_
private

Definition at line 95 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ dqmDir_

std::string SiStripHitEfficiencyWorker::dqmDir_
private

Definition at line 110 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms().

◆ h_allLayer

EffME1 SiStripHitEfficiencyWorker::h_allLayer
private

Definition at line 164 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_bx

MonitorElement* SiStripHitEfficiencyWorker::h_bx
private

Definition at line 161 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze(), and bookHistograms().

◆ h_goodLayer

EffME1 SiStripHitEfficiencyWorker::h_goodLayer
private

Definition at line 163 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_hotcold

std::vector<MonitorElement*> SiStripHitEfficiencyWorker::h_hotcold
private

Definition at line 171 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_instLumi

MonitorElement * SiStripHitEfficiencyWorker::h_instLumi
private

Definition at line 161 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze(), and bookHistograms().

◆ h_layer

EffME1 SiStripHitEfficiencyWorker::h_layer
private

Definition at line 165 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms().

◆ h_layer_vsBx

std::vector<EffME1> SiStripHitEfficiencyWorker::h_layer_vsBx
private

Definition at line 168 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_layer_vsCM

std::vector<EffME1> SiStripHitEfficiencyWorker::h_layer_vsCM
private

Definition at line 170 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_layer_vsLumi

std::vector<EffME1> SiStripHitEfficiencyWorker::h_layer_vsLumi
private

Definition at line 167 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_layer_vsPU

std::vector<EffME1> SiStripHitEfficiencyWorker::h_layer_vsPU
private

Definition at line 169 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_module

EffTkMap SiStripHitEfficiencyWorker::h_module
private

Definition at line 173 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ h_nTracks

MonitorElement* SiStripHitEfficiencyWorker::h_nTracks
private

Definition at line 162 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze(), and bookHistograms().

◆ h_nTracksVsPU

MonitorElement * SiStripHitEfficiencyWorker::h_nTracksVsPU
private

Definition at line 162 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze(), and bookHistograms().

◆ h_PU

MonitorElement * SiStripHitEfficiencyWorker::h_PU
private

Definition at line 161 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze(), and bookHistograms().

◆ h_resolution

std::vector<MonitorElement*> SiStripHitEfficiencyWorker::h_resolution
private

Definition at line 166 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ layers_

unsigned int SiStripHitEfficiencyWorker::layers_
private

Definition at line 111 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ magFieldToken_

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> SiStripHitEfficiencyWorker::magFieldToken_
private

Definition at line 103 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ measTrackerToken_

const edm::ESGetToken<MeasurementTracker, CkfComponentsRecord> SiStripHitEfficiencyWorker::measTrackerToken_
private

Definition at line 104 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ metaDataToken_

const edm::EDGetTokenT<OnlineLuminosityRecord> SiStripHitEfficiencyWorker::metaDataToken_
private

Definition at line 89 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ nTEClayers_

unsigned int SiStripHitEfficiencyWorker::nTEClayers_
private

Definition at line 128 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms().

◆ propagatorToken_

const edm::ESGetToken<Propagator, TrackingComponentsRecord> SiStripHitEfficiencyWorker::propagatorToken_
private

Definition at line 106 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ resXSig_

float SiStripHitEfficiencyWorker::resXSig_
private

Definition at line 121 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ scalerToken_

const edm::EDGetTokenT<LumiScalersCollection> SiStripHitEfficiencyWorker::scalerToken_
private

Definition at line 88 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ showRings_

bool SiStripHitEfficiencyWorker::showRings_
private

Definition at line 126 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms(), and fillForTraj().

◆ showTOB6TEC9_

bool SiStripHitEfficiencyWorker::showTOB6TEC9_
private

Definition at line 127 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ stripCPEToken_

const edm::ESGetToken<StripClusterParameterEstimator, TkStripCPERecord> SiStripHitEfficiencyWorker::stripCPEToken_
private

Definition at line 101 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ stripQualityToken_

const edm::ESGetToken<SiStripQuality, SiStripQualityRcd> SiStripHitEfficiencyWorker::stripQualityToken_
private

Definition at line 102 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ stripsApvEdge_

float SiStripHitEfficiencyWorker::stripsApvEdge_
private

Definition at line 123 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().

◆ tkDetMapToken_

const edm::ESGetToken<TkDetMap, TrackerTopologyRcd> SiStripHitEfficiencyWorker::tkDetMapToken_
private

Definition at line 107 of file SiStripHitEfficiencyWorker.cc.

Referenced by bookHistograms().

◆ tkGeomToken_

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> SiStripHitEfficiencyWorker::tkGeomToken_
private

Definition at line 100 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ trackerEvent_token_

const edm::EDGetTokenT<MeasurementTrackerEvent> SiStripHitEfficiencyWorker::trackerEvent_token_
private

Definition at line 96 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ trackMultiplicityCut_

unsigned int SiStripHitEfficiencyWorker::trackMultiplicityCut_
private

Definition at line 116 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ trajectories_token_

const edm::EDGetTokenT<std::vector<Trajectory> > SiStripHitEfficiencyWorker::trajectories_token_
private

Definition at line 92 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ trajTrackAsso_token_

const edm::EDGetTokenT<TrajTrackAssociationCollection> SiStripHitEfficiencyWorker::trajTrackAsso_token_
private

Definition at line 93 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ tTopoToken_

const edm::ESGetToken<TrackerTopology, TrackerTopologyRcd> SiStripHitEfficiencyWorker::tTopoToken_
private

Definition at line 99 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ useAllHitsFromTracksWithMissingHits_

bool SiStripHitEfficiencyWorker::useAllHitsFromTracksWithMissingHits_
private

Definition at line 119 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ useFirstMeas_

bool SiStripHitEfficiencyWorker::useFirstMeas_
private

Definition at line 117 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ useLastMeas_

bool SiStripHitEfficiencyWorker::useLastMeas_
private

Definition at line 118 of file SiStripHitEfficiencyWorker.cc.

Referenced by analyze().

◆ useOnlyHighPurityTracks_

bool SiStripHitEfficiencyWorker::useOnlyHighPurityTracks_
private

Definition at line 124 of file SiStripHitEfficiencyWorker.cc.

Referenced by fillForTraj().