CMS 3D CMS Logo

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

#include <HitEff.h>

Inheritance diagram for HitEff:
edm::EDAnalyzer edm::EDConsumerBase

Public Member Functions

bool check2DPartner (unsigned int iidd, const std::vector< TrajectoryMeasurement > &traj)
 
double checkConsistency (const StripClusterParameterEstimator::LocalValues &parameters, double xx, double xerr)
 
unsigned int checkLayer (unsigned int iidd, const TrackerTopology *tTopo)
 
 HitEff (const edm::ParameterSet &conf)
 
bool isDoubleSided (unsigned int iidd, const TrackerTopology *tTopo) const
 
 ~HitEff () override
 
- Public Member Functions inherited from edm::EDAnalyzer
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
std::string workerType () const
 
 ~EDAnalyzer () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void analyze (const edm::Event &e, const edm::EventSetup &c) override
 
void beginJob () override
 
void endJob () override
 

Private Attributes

bool addCommonMode_
 
bool addLumi_
 
unsigned int bunchx
 
float ClusterLocErrX
 
float ClusterLocErrY
 
float ClusterLocX
 
float ClusterLocY
 
const edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusters_token_
 
float ClusterStoN
 
const edm::EDGetTokenT< reco::TrackCollectioncombinatorialTracks_token_
 
float commonMode
 
const edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > commonModeToken_
 
int compSettings
 
edm::ParameterSet conf_
 
bool cutOnTracks_
 
bool DEBUG
 
const edm::EDGetTokenT< DetIdCollectiondigis_token_
 
unsigned int event
 
int events
 
int EventTrackCKF
 
bool highPurity
 
unsigned int Id
 
float instLumi
 
unsigned int layers
 
unsigned int ModIsBad
 
int nHits
 
float pT
 
float PU
 
float ResX
 
float ResXSig
 
unsigned int run
 
const edm::EDGetTokenT< LumiScalersCollectionscalerToken_
 
unsigned int SiStripQualBad
 
int tquality
 
const edm::EDGetTokenT< MeasurementTrackerEventtrackerEvent_token_
 
unsigned int trackMultiplicityCut_
 
TTree * traj
 
const edm::EDGetTokenT< std::vector< Trajectory > > trajectories_token_
 
float TrajGlbX
 
float TrajGlbY
 
float TrajGlbZ
 
unsigned int trajHitValid
 
float TrajLocAngleX
 
float TrajLocAngleY
 
float TrajLocErrX
 
float TrajLocErrY
 
float TrajLocX
 
float TrajLocY
 
const edm::EDGetTokenT< TrajTrackAssociationCollectiontrajTrackAsso_token_
 
bool useAllHitsFromTracksWithMissingHits_
 
bool useFirstMeas_
 
bool useLastMeas_
 
unsigned int whatlayer
 
bool withinAcceptance
 

Additional Inherited Members

- Public Types inherited from edm::EDAnalyzer
typedef EDAnalyzer ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDAnalyzer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 48 of file HitEff.h.

Constructor & Destructor Documentation

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

Definition at line 73 of file HitEff.cc.

References addCommonMode_, addLumi_, compSettings, conf_, cutOnTracks_, DEBUG, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), layers, trackMultiplicityCut_, useAllHitsFromTracksWithMissingHits_, useFirstMeas_, and useLastMeas_.

74  : scalerToken_(consumes<LumiScalersCollection>(conf.getParameter<edm::InputTag>("lumiScalers"))),
77  consumes<reco::TrackCollection>(conf.getParameter<edm::InputTag>("combinatorialTracks"))),
78  trajectories_token_(consumes<std::vector<Trajectory> >(conf.getParameter<edm::InputTag>("trajectories"))),
79  trajTrackAsso_token_(consumes<TrajTrackAssociationCollection>(conf.getParameter<edm::InputTag>("trajectories"))),
82  digis_token_(consumes<DetIdCollection>(conf.getParameter<edm::InputTag>("siStripDigis"))),
83  trackerEvent_token_(consumes<MeasurementTrackerEvent>(conf.getParameter<edm::InputTag>("trackerEvent"))),
84  conf_(conf) {
85  compSettings = conf_.getUntrackedParameter<int>("CompressionSettings", -1);
86  layers = conf_.getParameter<int>("Layer");
87  DEBUG = conf_.getParameter<bool>("Debug");
88  addLumi_ = conf_.getUntrackedParameter<bool>("addLumi", false);
89  addCommonMode_ = conf_.getUntrackedParameter<bool>("addCommonMode", false);
90  cutOnTracks_ = conf_.getUntrackedParameter<bool>("cutOnTracks", false);
91  trackMultiplicityCut_ = conf.getUntrackedParameter<unsigned int>("trackMultiplicity", 100);
92  useFirstMeas_ = conf_.getUntrackedParameter<bool>("useFirstMeas", false);
93  useLastMeas_ = conf_.getUntrackedParameter<bool>("useLastMeas", false);
95  conf_.getUntrackedParameter<bool>("useAllHitsFromTracksWithMissingHits", false);
96 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
bool useAllHitsFromTracksWithMissingHits_
Definition: HitEff.h:73
int compSettings
Definition: HitEff.h:87
const edm::EDGetTokenT< std::vector< Trajectory > > trajectories_token_
Definition: HitEff.h:76
bool DEBUG
Definition: HitEff.h:89
const edm::EDGetTokenT< MeasurementTrackerEvent > trackerEvent_token_
Definition: HitEff.h:80
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
const edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusters_token_
Definition: HitEff.h:78
const edm::EDGetTokenT< reco::TrackCollection > combinatorialTracks_token_
Definition: HitEff.h:75
const edm::EDGetTokenT< DetIdCollection > digis_token_
Definition: HitEff.h:79
bool useLastMeas_
Definition: HitEff.h:72
unsigned int trackMultiplicityCut_
Definition: HitEff.h:70
unsigned int layers
Definition: HitEff.h:88
bool addLumi_
Definition: HitEff.h:67
bool addCommonMode_
Definition: HitEff.h:68
const edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAsso_token_
Definition: HitEff.h:77
bool cutOnTracks_
Definition: HitEff.h:69
bool useFirstMeas_
Definition: HitEff.h:71
const edm::EDGetTokenT< LumiScalersCollection > scalerToken_
Definition: HitEff.h:64
EDGetTokenT< ProductType > mayConsume(edm::InputTag const &tag)
const edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > commonModeToken_
Definition: HitEff.h:65
edm::ParameterSet conf_
Definition: HitEff.h:82
HitEff::~HitEff ( )
override

Definition at line 99 of file HitEff.cc.

99 {}

Member Function Documentation

void HitEff::analyze ( const edm::Event e,
const edm::EventSetup c 
)
overrideprivate

Definition at line 160 of file HitEff.cc.

References funct::abs(), addCommonMode_, addLumi_, AnalyticalPropagator_cfi::AnalyticalPropagator, anyDirection, edm::AssociationMap< Tag >::begin(), edmNew::DetSetVector< T >::begin(), Surface::bounds(), edm::EventBase::bunchCrossing(), bunchx, check2DPartner(), checkConsistency(), checkLayer(), hltPixelTracks_cff::chi2, ClusterLocErrX, ClusterLocErrY, ClusterLocX, ClusterLocY, clusters_token_, ClusterStoN, combinatorialTracks_token_, commonMode, commonModeToken_, edm::AssociationMap< edm::OneToOne< std::vector< Trajectory >, reco::TrackCollection, unsigned short > >::const_iterator, cutOnTracks_, digis_token_, edmNew::DetSetVector< T >::empty(), edm::AssociationMap< Tag >::end(), edmNew::DetSetVector< T >::end(), edm::EventID::event(), events, EventTrackCKF, edm::EventSetup::get(), SiStripQuality::getBadApvs(), edm::Event::getByLabel(), edm::Event::getByToken(), tkConvValidator_cfi::highPurity, highPurity, mps_fire::i, edm::EventBase::id(), Id, TrackerGeometry::idToDetUnit(), cuy::ii, input, instLumi, ires, isDoubleSided(), edm::HandleBase::isValid(), edm::Ref< C, T, F >::key(), layers, StripClusterParameterEstimator::localParameters(), LogDebug, V0Monitor_cfi::lumiScalers, LayerMeasurements::measurements(), HLT_2018_cff::measurementTrackerEvent, combine::missing, ModIsBad, heavyionUCCDQM_cfi::nClusters, reco::MuonTime::nDof, nHits, StripTopology::nstrips(), AlCaHLTBitMon_ParallelJobs::p, TrapezoidalPlaneBounds::parameters(), edm::Handle< T >::product(), edm::ESHandle< T >::product(), TrackCandidateProducer_cfi::propagator, pT, PU, rpcPointValidation_cfi::recHit, TrajectoryMeasurement::recHit(), ResX, ResXSig, edm::EventID::run(), run, scalerToken_, SiStripQualBad, edm::EDCollection< T >::size(), edm::DetSetVector< T >::size(), edmNew::DetSetVector< T >::size(), StripGeomDetUnit::specificTopology(), mathSSE::sqrt(), subdetector, GeomDet::surface(), StripSubdetector::TEC, TrackerTopology::tecSide(), reco::MuonTime::timeAtIpInOut, reco::MuonTime::timeAtIpInOutErr, createJobs::tmp, PbPb_ZMuSkimMuonDPG_cff::tracker, trackerEvent_token_, trackMultiplicityCut_, traj, trajectories_token_, TrajGlbX, TrajGlbY, TrajGlbZ, trajHitValid, TrajLocAngleX, TrajLocAngleY, TrajLocErrX, TrajLocErrY, TrajLocX, TrajLocY, trajTrackAsso_token_, useAllHitsFromTracksWithMissingHits_, useFirstMeas_, useLastMeas_, whatlayer, Bounds::width(), and withinAcceptance.

160  {
161  //Retrieve tracker topology from geometry
162  edm::ESHandle<TrackerTopology> tTopoHandle;
163  es.get<TrackerTopologyRcd>().get(tTopoHandle);
164  const TrackerTopology* const tTopo = tTopoHandle.product();
165 
166  // bool DEBUG = false;
167 
168  LogDebug("SiStripHitEfficiency:HitEff") << "beginning analyze from HitEff" << endl;
169 
170  using namespace edm;
171  using namespace reco;
172  // Step A: Get Inputs
173 
174  int run_nr = e.id().run();
175  int ev_nr = e.id().event();
176  int bunch_nr = e.bunchCrossing();
177 
178  // Luminosity informations
180  instLumi = 0;
181  PU = 0;
182  if (addLumi_) {
183  e.getByToken(scalerToken_, lumiScalers);
184  if (lumiScalers->begin() != lumiScalers->end()) {
185  instLumi = lumiScalers->begin()->instantLumi();
186  PU = lumiScalers->begin()->pileup();
187  }
188  }
189 
190  // CM
192  if (addCommonMode_)
193  e.getByToken(commonModeToken_, commonModeDigis);
194 
195  //CombinatoriaTrack
196  edm::Handle<reco::TrackCollection> trackCollectionCKF;
197  //edm::InputTag TkTagCKF = conf_.getParameter<edm::InputTag>("combinatorialTracks");
198  e.getByToken(combinatorialTracks_token_, trackCollectionCKF);
199 
200  edm::Handle<std::vector<Trajectory> > TrajectoryCollectionCKF;
201  //edm::InputTag TkTrajCKF = conf_.getParameter<edm::InputTag>("trajectories");
202  e.getByToken(trajectories_token_, TrajectoryCollectionCKF);
203 
204  edm::Handle<TrajTrackAssociationCollection> trajTrackAssociationHandle;
205  e.getByToken(trajTrackAsso_token_, trajTrackAssociationHandle);
206 
207  // Clusters
208  // get the SiStripClusters from the event
210  //e.getByLabel("siStripClusters", theClusters);
211  e.getByToken(clusters_token_, theClusters);
212 
213  //get tracker geometry
215  es.get<TrackerDigiGeometryRecord>().get(tracker);
216  const TrackerGeometry* tkgeom = &(*tracker);
217 
218  //get Cluster Parameter Estimator
219  //std::string cpe = conf_.getParameter<std::string>("StripCPE");
221  es.get<TkStripCPERecord>().get("StripCPEfromTrackAngle", parameterestimator);
222  const StripClusterParameterEstimator& stripcpe(*parameterestimator);
223 
224  // get the SiStripQuality records
225  edm::ESHandle<SiStripQuality> SiStripQuality_;
226  //LQ commenting the try/catch that causes problem in 74X calibTree production
227  // try {
228  // es.get<SiStripQualityRcd>().get("forCluster",SiStripQuality_);
229  // }
230  // catch (...) {
231  es.get<SiStripQualityRcd>().get(SiStripQuality_);
232  // }
233 
234  edm::ESHandle<MagneticField> magFieldHandle;
235  es.get<IdealMagneticFieldRecord>().get(magFieldHandle);
236  const MagneticField* magField_ = magFieldHandle.product();
237 
238  // get the list of module IDs with FED-detected errors
239  edm::Handle<DetIdCollection> fedErrorIds;
240  //e.getByLabel("siStripDigis", fedErrorIds );
241  e.getByToken(digis_token_, fedErrorIds);
242 
243  ESHandle<MeasurementTracker> measurementTrackerHandle;
244  es.get<CkfComponentsRecord>().get(measurementTrackerHandle);
245 
247  //e.getByLabel("MeasurementTrackerEvent", measurementTrackerEvent);
248  e.getByToken(trackerEvent_token_, measurementTrackerEvent);
249 
251  es.get<TrackingComponentsRecord>().get("Chi2", est);
252 
254  es.get<TrackingComponentsRecord>().get("PropagatorWithMaterial", prop);
255  const Propagator* thePropagator = prop.product();
256 
257  events++;
258 
259  // *************** SiStripCluster Collection
260  const edmNew::DetSetVector<SiStripCluster>& input = *theClusters;
261 
262  //go through clusters to write out global position of good clusters for the layer understudy for comparison
263  // Loop through clusters just to print out locations
264  // Commented out to avoid discussion, should really be deleted.
265  /*
266  for (edmNew::DetSetVector<SiStripCluster>::const_iterator DSViter = input.begin(); DSViter != input.end(); DSViter++) {
267  // DSViter is a vector of SiStripClusters located on a single module
268  unsigned int ClusterId = DSViter->id();
269  DetId ClusterDetId(ClusterId);
270  const StripGeomDetUnit * stripdet=(const StripGeomDetUnit*)tkgeom->idToDetUnit(ClusterDetId);
271 
272  edmNew::DetSet<SiStripCluster>::const_iterator begin=DSViter->begin();
273  edmNew::DetSet<SiStripCluster>::const_iterator end =DSViter->end();
274  for(edmNew::DetSet<SiStripCluster>::const_iterator iter=begin;iter!=end;++iter) {
275  //iter is a single SiStripCluster
276  StripClusterParameterEstimator::LocalValues parameters=stripcpe.localParameters(*iter,*stripdet);
277 
278  const Surface* surface;
279  surface = &(tracker->idToDet(ClusterDetId)->surface());
280  LocalPoint lp = parameters.first;
281  GlobalPoint gp = surface->toGlobal(lp);
282  unsigned int layer = checkLayer(ClusterId, tTopo);
283  if(DEBUG) cout << "Found hit in cluster collection layer = " << layer << " with id = " << ClusterId << " local X position = " << lp.x() << " +- " << sqrt(parameters.second.xx()) << " matched/stereo/rphi = " << ((ClusterId & 0x3)==0) << "/" << ((ClusterId & 0x3)==1) << "/" << ((ClusterId & 0x3)==2) << endl;
284  }
285  }
286  */
287 
288  // Tracking
289  const reco::TrackCollection* tracksCKF = trackCollectionCKF.product();
290  LogDebug("SiStripHitEfficiency:HitEff") << "number ckf tracks found = " << tracksCKF->size() << endl;
291  //if (tracksCKF->size() == 1 ){
292  if (!tracksCKF->empty()) {
293  if (cutOnTracks_ && (tracksCKF->size() >= trackMultiplicityCut_))
294  return;
295  if (cutOnTracks_)
296  LogDebug("SiStripHitEfficiency:HitEff")
297  << "starting checking good event with < " << trackMultiplicityCut_ << " tracks" << endl;
298 
299  EventTrackCKF++;
300 
301 #ifdef ExtendedCALIBTree
302  //get dEdx info if available
303  Handle<ValueMap<DeDxData> > dEdxUncalibHandle;
304  if (e.getByLabel("dedxMedianCTF", dEdxUncalibHandle)) {
305  const ValueMap<DeDxData> dEdxTrackUncalib = *dEdxUncalibHandle.product();
306 
307  reco::TrackRef itTrack = reco::TrackRef(trackCollectionCKF, 0);
308  dedx = dEdxTrackUncalib[itTrack].dEdx();
309  dedxNOM = dEdxTrackUncalib[itTrack].numberOfMeasurements();
310  } else {
311  dedx = -999.0;
312  dedxNOM = -999;
313  }
314 
315  //get muon and ecal timing info if available
317  if (e.getByLabel("muonsWitht0Correction", muH)) {
318  const MuonCollection& muonsT0 = *muH.product();
319  if (!muonsT0.empty()) {
320  MuonTime mt0 = muonsT0[0].time();
321  timeDT = mt0.timeAtIpInOut;
322  timeDTErr = mt0.timeAtIpInOutErr;
323  timeDTDOF = mt0.nDof;
324 
325  bool hasCaloEnergyInfo = muonsT0[0].isEnergyValid();
326  if (hasCaloEnergyInfo)
327  timeECAL = muonsT0[0].calEnergy().ecal_time;
328  }
329  } else {
330  timeDT = -999.0;
331  timeDTErr = -999.0;
332  timeDTDOF = -999;
333  timeECAL = -999.0;
334  }
335 
336 #endif
337  // actually should do a loop over all the tracks in the event here
338 
339  // Looping over traj-track associations to be able to get traj & track informations
340  for (TrajTrackAssociationCollection::const_iterator it = trajTrackAssociationHandle->begin();
341  it != trajTrackAssociationHandle->end();
342  it++) {
344  reco::TrackRef itrack = it->val;
345 
346  // for each track, fill some variables such as number of hits and momentum
347  nHits = itraj->foundHits();
348 #ifdef ExtendedCALIBTree
349  nLostHits = itraj->lostHits();
350  chi2 = (itraj->chiSquared() / itraj->ndof());
351  p = itraj->lastMeasurement().updatedState().globalMomentum().mag();
352 #endif
353  pT = sqrt((itraj->lastMeasurement().updatedState().globalMomentum().x() *
354  itraj->lastMeasurement().updatedState().globalMomentum().x()) +
355  (itraj->lastMeasurement().updatedState().globalMomentum().y() *
356  itraj->lastMeasurement().updatedState().globalMomentum().y()));
357 
358  // track quality
360 
361  std::vector<TrajectoryMeasurement> TMeas = itraj->measurements();
362  vector<TrajectoryMeasurement>::iterator itm;
363  double xloc = 0.;
364  double yloc = 0.;
365  double xErr = 0.;
366  double yErr = 0.;
367  double angleX = -999.;
368  double angleY = -999.;
369  double xglob, yglob, zglob;
370 
371  // Check whether the trajectory has some missing hits
372  bool hasMissingHits = false;
373  for (itm = TMeas.begin(); itm != TMeas.end(); itm++) {
374  auto theHit = (*itm).recHit();
375  if (theHit->getType() == TrackingRecHit::Type::missing)
376  hasMissingHits = true;
377  }
378 
379  // Loop on each measurement and take it into consideration
380  //--------------------------------------------------------
381 
382  for (itm = TMeas.begin(); itm != TMeas.end(); itm++) {
383  auto theInHit = (*itm).recHit();
384 
385  LogDebug("SiStripHitEfficiency:HitEff") << "theInHit is valid = " << theInHit->isValid() << endl;
386 
387  unsigned int iidd = theInHit->geographicalId().rawId();
388 
389  unsigned int TKlayers = checkLayer(iidd, tTopo);
390  LogDebug("SiStripHitEfficiency:HitEff") << "TKlayer from trajectory: " << TKlayers << " from module = " << iidd
391  << " matched/stereo/rphi = " << ((iidd & 0x3) == 0) << "/"
392  << ((iidd & 0x3) == 1) << "/" << ((iidd & 0x3) == 2) << endl;
393 
394  // Test first and last points of the trajectory
395  // the list of measurements starts from outer layers !!! This could change -> should add a check
396  bool isFirstMeas = (itm == (TMeas.end() - 1));
397  bool isLastMeas = (itm == (TMeas.begin()));
398 
399  if (!useFirstMeas_ && isFirstMeas)
400  continue;
401  if (!useLastMeas_ && isLastMeas)
402  continue;
403 
404  // In case of missing hit in the track, check whether to use the other hits or not.
405  if (hasMissingHits && theInHit->getType() != TrackingRecHit::Type::missing &&
407  continue;
408 
409  // If Trajectory measurement from TOB 6 or TEC 9, skip it because it's always valid they are filled later
410  if (TKlayers == 10 || TKlayers == 22) {
411  LogDebug("SiStripHitEfficiency:HitEff") << "skipping original TM for TOB 6 or TEC 9" << endl;
412  continue;
413  }
414 
415  // Make vector of TrajectoryAtInvalidHits to hold the trajectories
416  std::vector<TrajectoryAtInvalidHit> TMs;
417 
418  // Make AnalyticalPropagator to use in TAVH constructor
420 
421  // for double sided layers check both sensors--if no hit was found on either sensor surface,
422  // the trajectory measurements only have one invalid hit entry on the matched surface
423  // so get the TrajectoryAtInvalidHit for both surfaces and include them in the study
424  if (isDoubleSided(iidd, tTopo) && ((iidd & 0x3) == 0)) {
425  // do hit eff check twice--once for each sensor
426  //add a TM for each surface
427  TMs.push_back(TrajectoryAtInvalidHit(*itm, tTopo, tkgeom, propagator, 1));
428  TMs.push_back(TrajectoryAtInvalidHit(*itm, tTopo, tkgeom, propagator, 2));
429  } else if (isDoubleSided(iidd, tTopo) && (!check2DPartner(iidd, TMeas))) {
430  // if only one hit was found the trajectory measurement is on that sensor surface, and the other surface from
431  // the matched layer should be added to the study as well
432  TMs.push_back(TrajectoryAtInvalidHit(*itm, tTopo, tkgeom, propagator, 1));
433  TMs.push_back(TrajectoryAtInvalidHit(*itm, tTopo, tkgeom, propagator, 2));
434  LogDebug("SiStripHitEfficiency:HitEff") << " found a hit with a missing partner" << endl;
435  } else {
436  //only add one TM for the single surface and the other will be added in the next iteration
437  TMs.push_back(TrajectoryAtInvalidHit(*itm, tTopo, tkgeom, propagator));
438  }
439 
441  //Now check for tracks at TOB6 and TEC9
442 
443  // to make sure we only propagate on the last TOB5 hit check the next entry isn't also in TOB5
444  // to avoid bias, make sure the TOB5 hit is valid (an invalid hit on TOB5 could only exist with a valid hit on TOB6)
445 
446  bool isValid = theInHit->isValid();
447  bool isLast = (itm == (TMeas.end() - 1));
448  bool isLastTOB5 = true;
449  if (!isLast) {
450  if (checkLayer((++itm)->recHit()->geographicalId().rawId(), tTopo) == 9)
451  isLastTOB5 = false;
452  else
453  isLastTOB5 = true;
454  --itm;
455  }
456 
457  if (TKlayers == 9 && isValid && isLastTOB5) {
458  // if ( TKlayers==9 && itm==TMeas.rbegin()) {
459  // if ( TKlayers==9 && (itm==TMeas.back()) ) { // to check for only the last entry in the trajectory for propagation
460  std::vector<BarrelDetLayer const*> barrelTOBLayers =
461  measurementTrackerHandle->geometricSearchTracker()->tobLayers();
462  const DetLayer* tob6 = barrelTOBLayers[barrelTOBLayers.size() - 1];
463  const MeasurementEstimator* estimator = est.product();
464  const LayerMeasurements* theLayerMeasurements =
465  new LayerMeasurements(*measurementTrackerHandle, *measurementTrackerEvent);
466  const TrajectoryStateOnSurface tsosTOB5 = itm->updatedState();
467  vector<TrajectoryMeasurement> tmp =
468  theLayerMeasurements->measurements(*tob6, tsosTOB5, *thePropagator, *estimator);
469 
470  if (!tmp.empty()) {
471  LogDebug("SiStripHitEfficiency:HitEff") << "size of TM from propagation = " << tmp.size() << endl;
472 
473  // take the last of the TMs, which is always an invalid hit
474  // if no detId is available, ie detId==0, then no compatible layer was crossed
475  // otherwise, use that TM for the efficiency measurement
476  TrajectoryMeasurement tob6TM(tmp.back());
477  const auto& tob6Hit = tob6TM.recHit();
478 
479  if (tob6Hit->geographicalId().rawId() != 0) {
480  LogDebug("SiStripHitEfficiency:HitEff") << "tob6 hit actually being added to TM vector" << endl;
481  TMs.push_back(TrajectoryAtInvalidHit(tob6TM, tTopo, tkgeom, propagator));
482  }
483  }
484  }
485 
486  bool isLastTEC8 = true;
487  if (!isLast) {
488  if (checkLayer((++itm)->recHit()->geographicalId().rawId(), tTopo) == 21)
489  isLastTEC8 = false;
490  else
491  isLastTEC8 = true;
492  --itm;
493  }
494 
495  if (TKlayers == 21 && isValid && isLastTEC8) {
496  std::vector<const ForwardDetLayer*> posTecLayers =
497  measurementTrackerHandle->geometricSearchTracker()->posTecLayers();
498  const DetLayer* tec9pos = posTecLayers[posTecLayers.size() - 1];
499  std::vector<const ForwardDetLayer*> negTecLayers =
500  measurementTrackerHandle->geometricSearchTracker()->negTecLayers();
501  const DetLayer* tec9neg = negTecLayers[negTecLayers.size() - 1];
502 
503  const MeasurementEstimator* estimator = est.product();
504  const LayerMeasurements* theLayerMeasurements =
505  new LayerMeasurements(*measurementTrackerHandle, *measurementTrackerEvent);
506  const TrajectoryStateOnSurface tsosTEC9 = itm->updatedState();
507 
508  // check if track on positive or negative z
509  if (!(iidd == StripSubdetector::TEC))
510  LogDebug("SiStripHitEfficiency:HitEff") << "there is a problem with TEC 9 extrapolation" << endl;
511 
512  //cout << " tec9 id = " << iidd << " and side = " << tTopo->tecSide(iidd) << endl;
513  vector<TrajectoryMeasurement> tmp;
514  if (tTopo->tecSide(iidd) == 1) {
515  tmp = theLayerMeasurements->measurements(*tec9neg, tsosTEC9, *thePropagator, *estimator);
516  //cout << "on negative side" << endl;
517  }
518  if (tTopo->tecSide(iidd) == 2) {
519  tmp = theLayerMeasurements->measurements(*tec9pos, tsosTEC9, *thePropagator, *estimator);
520  //cout << "on positive side" << endl;
521  }
522 
523  if (!tmp.empty()) {
524  // take the last of the TMs, which is always an invalid hit
525  // if no detId is available, ie detId==0, then no compatible layer was crossed
526  // otherwise, use that TM for the efficiency measurement
527  TrajectoryMeasurement tec9TM(tmp.back());
528  const auto& tec9Hit = tec9TM.recHit();
529 
530  unsigned int tec9id = tec9Hit->geographicalId().rawId();
531  LogDebug("SiStripHitEfficiency:HitEff")
532  << "tec9id = " << tec9id << " is Double sided = " << isDoubleSided(tec9id, tTopo)
533  << " and 0x3 = " << (tec9id & 0x3) << endl;
534 
535  if (tec9Hit->geographicalId().rawId() != 0) {
536  LogDebug("SiStripHitEfficiency:HitEff") << "tec9 hit actually being added to TM vector" << endl;
537  // in tec the hit can be single or doubled sided. whenever the invalid hit at the end of vector of TMs is
538  // double sided it is always on the matched surface, so we need to split it into the true sensor surfaces
539  if (isDoubleSided(tec9id, tTopo)) {
540  TMs.push_back(TrajectoryAtInvalidHit(tec9TM, tTopo, tkgeom, propagator, 1));
541  TMs.push_back(TrajectoryAtInvalidHit(tec9TM, tTopo, tkgeom, propagator, 2));
542  } else
543  TMs.push_back(TrajectoryAtInvalidHit(tec9TM, tTopo, tkgeom, propagator));
544  }
545  } //else cout << "tec9 tmp empty" << endl;
546  }
547 
549 
550  // Modules Constraints
551 
552  for (std::vector<TrajectoryAtInvalidHit>::const_iterator TM = TMs.begin(); TM != TMs.end(); ++TM) {
553  // --> Get trajectory from combinatedState
554  iidd = TM->monodet_id();
555  LogDebug("SiStripHitEfficiency:HitEff") << "setting iidd = " << iidd << " before checking efficiency and ";
556 
557  xloc = TM->localX();
558  yloc = TM->localY();
559 
560  angleX = atan(TM->localDxDz());
561  angleY = atan(TM->localDyDz());
562 
563  TrajLocErrX = 0.0;
564  TrajLocErrY = 0.0;
565 
566  xglob = TM->globalX();
567  yglob = TM->globalY();
568  zglob = TM->globalZ();
569  xErr = TM->localErrorX();
570  yErr = TM->localErrorY();
571 
572  TrajGlbX = 0.0;
573  TrajGlbY = 0.0;
574  TrajGlbZ = 0.0;
575  withinAcceptance = TM->withinAcceptance();
576 
577  trajHitValid = TM->validHit();
578  int TrajStrip = -1;
579 
580  // reget layer from iidd here, to account for TOB 6 and TEC 9 TKlayers being off
581  TKlayers = checkLayer(iidd, tTopo);
582 
583  if ((layers == TKlayers) || (layers == 0)) { // Look at the layer not used to reconstruct the track
584  whatlayer = TKlayers;
585  LogDebug("SiStripHitEfficiency:HitEff") << "Looking at layer under study" << endl;
586  ModIsBad = 2;
587  Id = 0;
588  SiStripQualBad = 0;
589  run = 0;
590  event = 0;
591  TrajLocX = 0.0;
592  TrajLocY = 0.0;
593  TrajLocAngleX = -999.0;
594  TrajLocAngleY = -999.0;
595  ResX = 0.0;
596  ResXSig = 0.0;
597  ClusterLocX = 0.0;
598  ClusterLocY = 0.0;
599  ClusterLocErrX = 0.0;
600  ClusterLocErrY = 0.0;
601  ClusterStoN = 0.0;
602  bunchx = 0;
603  commonMode = -100;
604 
605  // RPhi RecHit Efficiency
606 
607  if (!input.empty()) {
608  LogDebug("SiStripHitEfficiency:HitEff") << "Checking clusters with size = " << input.size() << endl;
609  int nClusters = 0;
610  std::vector<std::vector<float> >
611  VCluster_info; //fill with X residual, X residual pull, local X, sig(X), local Y, sig(Y), StoN
612  for (edmNew::DetSetVector<SiStripCluster>::const_iterator DSViter = input.begin(); DSViter != input.end();
613  DSViter++) {
614  // DSViter is a vector of SiStripClusters located on a single module
615  //if (DEBUG) cout << "the ID from the DSViter = " << DSViter->id() << endl;
616  unsigned int ClusterId = DSViter->id();
617  if (ClusterId == iidd) {
618  LogDebug("SiStripHitEfficiency:HitEff")
619  << "found (ClusterId == iidd) with ClusterId = " << ClusterId << " and iidd = " << iidd << endl;
620  DetId ClusterDetId(ClusterId);
621  const StripGeomDetUnit* stripdet = (const StripGeomDetUnit*)tkgeom->idToDetUnit(ClusterDetId);
622  const StripTopology& Topo = stripdet->specificTopology();
623 
624  float hbedge = 0.0;
625  float htedge = 0.0;
626  float hapoth = 0.0;
627  float uylfac = 0.0;
628  float uxlden = 0.0;
629  if (TKlayers >= 11) {
630  const BoundPlane& plane = stripdet->surface();
631  const TrapezoidalPlaneBounds* trapezoidalBounds(
632  dynamic_cast<const TrapezoidalPlaneBounds*>(&(plane.bounds())));
633  std::array<const float, 4> const& parameterTrap =
634  (*trapezoidalBounds).parameters(); // el bueno aqui
635  hbedge = parameterTrap[0];
636  htedge = parameterTrap[1];
637  hapoth = parameterTrap[3];
638  uylfac = (htedge - hbedge) / (htedge + hbedge) / hapoth;
639  uxlden = 1 + yloc * uylfac;
640  }
641 
642  // Need to know position of trajectory in strip number for selecting the right APV later
643  if (TrajStrip == -1) {
644  int nstrips = Topo.nstrips();
645  float pitch = stripdet->surface().bounds().width() / nstrips;
646  TrajStrip = xloc / pitch + nstrips / 2.0;
647  // Need additionnal corrections for endcap
648  if (TKlayers >= 11) {
649  float TrajLocXMid = xloc / (1 + (htedge - hbedge) * yloc / (htedge + hbedge) /
650  hapoth); // radialy extrapolated x loc position at middle
651  TrajStrip = TrajLocXMid / pitch + nstrips / 2.0;
652  }
653  //cout<<" Layer "<<TKlayers<<" TrajStrip: "<<nstrips<<" "<<pitch<<" "<<TrajStrip<<endl;
654  }
655 
656  for (edmNew::DetSet<SiStripCluster>::const_iterator iter = DSViter->begin(); iter != DSViter->end();
657  ++iter) {
658  //iter is a single SiStripCluster
659  StripClusterParameterEstimator::LocalValues parameters = stripcpe.localParameters(*iter, *stripdet);
660  float res = (parameters.first.x() - xloc);
661  float sigma = checkConsistency(parameters, xloc, xErr);
662  // The consistency is probably more accurately measured with the Chi2MeasurementEstimator. To use it
663  // you need a TransientTrackingRecHit instead of the cluster
664  //theEstimator= new Chi2MeasurementEstimator(30);
665  //const Chi2MeasurementEstimator *theEstimator(100);
666  //theEstimator->estimate(TM->tsos(), TransientTrackingRecHit);
667 
668  if (TKlayers >= 11) {
669  res = parameters.first.x() - xloc / uxlden; // radialy extrapolated x loc position at middle
670  sigma = abs(res) /
671  sqrt(parameters.second.xx() + xErr * xErr / uxlden / uxlden +
672  yErr * yErr * xloc * xloc * uylfac * uylfac / uxlden / uxlden / uxlden / uxlden);
673  }
674 
675  SiStripClusterInfo clusterInfo = SiStripClusterInfo(*iter, es, ClusterId);
676  // signal to noise from SiStripClusterInfo not working in 225. I'll fix this after the interface
677  // redesign in 300 -ku
678  //float cluster_info[7] = {res, sigma, parameters.first.x(), sqrt(parameters.second.xx()), parameters.first.y(), sqrt(parameters.second.yy()), signal_to_noise};
679  std::vector<float> cluster_info;
680  cluster_info.push_back(res);
681  cluster_info.push_back(sigma);
682  cluster_info.push_back(parameters.first.x());
683  cluster_info.push_back(sqrt(parameters.second.xx()));
684  cluster_info.push_back(parameters.first.y());
685  cluster_info.push_back(sqrt(parameters.second.yy()));
686  cluster_info.push_back(clusterInfo.signalOverNoise());
687  //cluster_info.push_back( clusterInfo.getSignalOverNoise() );
688  VCluster_info.push_back(cluster_info);
689  nClusters++;
690  LogDebug("SiStripHitEfficiency:HitEff") << "Have ID match. residual = " << VCluster_info.back()[0]
691  << " res sigma = " << VCluster_info.back()[1] << endl;
692  LogDebug("SiStripHitEfficiency:HitEff")
693  << "trajectory measurement compatability estimate = " << (*itm).estimate() << endl;
694  LogDebug("SiStripHitEfficiency:HitEff")
695  << "hit position = " << parameters.first.x() << " hit error = " << sqrt(parameters.second.xx())
696  << " trajectory position = " << xloc << " traj error = " << xErr << endl;
697  }
698  }
699  }
700  float FinalResSig = 1000.0;
701  float FinalCluster[7] = {1000.0, 1000.0, 0.0, 0.0, 0.0, 0.0, 0.0};
702  if (nClusters > 0) {
703  LogDebug("SiStripHitEfficiency:HitEff") << "found clusters > 0" << endl;
704  if (nClusters > 1) {
705  //get the smallest one
706  vector<vector<float> >::iterator ires;
707  for (ires = VCluster_info.begin(); ires != VCluster_info.end(); ires++) {
708  if (abs((*ires)[1]) < abs(FinalResSig)) {
709  FinalResSig = (*ires)[1];
710  for (unsigned int i = 0; i < ires->size(); i++) {
711  LogDebug("SiStripHitEfficiency:HitEff")
712  << "filling final cluster. i = " << i << " before fill FinalCluster[i]=" << FinalCluster[i]
713  << " and (*ires)[i] =" << (*ires)[i] << endl;
714  FinalCluster[i] = (*ires)[i];
715  LogDebug("SiStripHitEfficiency:HitEff")
716  << "filling final cluster. i = " << i << " after fill FinalCluster[i]=" << FinalCluster[i]
717  << " and (*ires)[i] =" << (*ires)[i] << endl;
718  }
719  }
720  LogDebug("SiStripHitEfficiency:HitEff")
721  << "iresidual = " << (*ires)[0] << " isigma = " << (*ires)[1]
722  << " and FinalRes = " << FinalCluster[0] << endl;
723  }
724  } else {
725  FinalResSig = VCluster_info.at(0)[1];
726  for (unsigned int i = 0; i < VCluster_info.at(0).size(); i++) {
727  FinalCluster[i] = VCluster_info.at(0)[i];
728  }
729  }
730  nClusters = 0;
731  VCluster_info.clear();
732  }
733 
734  LogDebug("SiStripHitEfficiency:HitEff")
735  << "Final residual in X = " << FinalCluster[0] << "+-" << (FinalCluster[0] / FinalResSig) << endl;
736  LogDebug("SiStripHitEfficiency:HitEff") << "Checking location of trajectory: abs(yloc) = " << abs(yloc)
737  << " abs(xloc) = " << abs(xloc) << endl;
738  LogDebug("SiStripHitEfficiency:HitEff")
739  << "Checking location of cluster hit: yloc = " << FinalCluster[4] << "+-" << FinalCluster[5]
740  << " xloc = " << FinalCluster[2] << "+-" << FinalCluster[3] << endl;
741  LogDebug("SiStripHitEfficiency:HitEff") << "Final cluster signal to noise = " << FinalCluster[6] << endl;
742 
743  float exclusionWidth = 0.4;
744  float TOBexclusion = 0.0;
745  float TECexRing5 = -0.89;
746  float TECexRing6 = -0.56;
747  float TECexRing7 = 0.60;
748  //Added by Chris Edelmaier to do TEC bonding exclusion
749  int subdetector = ((iidd >> 25) & 0x7);
750  int ringnumber = ((iidd >> 5) & 0x7);
751 
752  //New TOB and TEC bonding region exclusion zone
753  if ((TKlayers >= 5 && TKlayers < 11) ||
754  ((subdetector == 6) && ((ringnumber >= 5) && (ringnumber <= 7)))) {
755  //There are only 2 cases that we need to exclude for
756  float highzone = 0.0;
757  float lowzone = 0.0;
758  float higherr = yloc + 5.0 * yErr;
759  float lowerr = yloc - 5.0 * yErr;
760  if (TKlayers >= 5 && TKlayers < 11) {
761  //TOB zone
762  highzone = TOBexclusion + exclusionWidth;
763  lowzone = TOBexclusion - exclusionWidth;
764  } else if (ringnumber == 5) {
765  //TEC ring 5
766  highzone = TECexRing5 + exclusionWidth;
767  lowzone = TECexRing5 - exclusionWidth;
768  } else if (ringnumber == 6) {
769  //TEC ring 6
770  highzone = TECexRing6 + exclusionWidth;
771  lowzone = TECexRing6 - exclusionWidth;
772  } else if (ringnumber == 7) {
773  //TEC ring 7
774  highzone = TECexRing7 + exclusionWidth;
775  lowzone = TECexRing7 - exclusionWidth;
776  }
777  //Now that we have our exclusion region, we just have to properly identify it
778  if ((highzone <= higherr) && (highzone >= lowerr))
779  withinAcceptance = false;
780  if ((lowzone >= lowerr) && (lowzone <= higherr))
781  withinAcceptance = false;
782  if ((higherr <= highzone) && (higherr >= lowzone))
783  withinAcceptance = false;
784  if ((lowerr >= lowzone) && (lowerr <= highzone))
785  withinAcceptance = false;
786  }
787 
788  // fill ntuple varibles
789  //get global position from module id number iidd
790  TrajGlbX = xglob;
791  TrajGlbY = yglob;
792  TrajGlbZ = zglob;
793 
794  TrajLocErrX = xErr;
795  TrajLocErrY = yErr;
796 
797  Id = iidd;
798  run = run_nr;
799  event = ev_nr;
800  bunchx = bunch_nr;
801  //if ( SiStripQuality_->IsModuleBad(iidd) ) {
802  if (SiStripQuality_->getBadApvs(iidd) != 0) {
803  SiStripQualBad = 1;
804  LogDebug("SiStripHitEfficiency:HitEff") << "strip is bad from SiStripQuality" << endl;
805  } else {
806  SiStripQualBad = 0;
807  LogDebug("SiStripHitEfficiency:HitEff") << "strip is good from SiStripQuality" << endl;
808  }
809 
810  //check for FED-detected errors and include those in SiStripQualBad
811  for (unsigned int ii = 0; ii < fedErrorIds->size(); ii++) {
812  if (iidd == (*fedErrorIds)[ii].rawId())
813  SiStripQualBad = 1;
814  }
815 
816  TrajLocX = xloc;
817  TrajLocY = yloc;
818  TrajLocAngleX = angleX;
819  TrajLocAngleY = angleY;
820  ResX = FinalCluster[0];
821  ResXSig = FinalResSig;
822  if (FinalResSig != FinalCluster[1])
823  LogDebug("SiStripHitEfficiency:HitEff")
824  << "Problem with best cluster selection because FinalResSig = " << FinalResSig
825  << " and FinalCluster[1] = " << FinalCluster[1] << endl;
826  ClusterLocX = FinalCluster[2];
827  ClusterLocY = FinalCluster[4];
828  ClusterLocErrX = FinalCluster[3];
829  ClusterLocErrY = FinalCluster[5];
830  ClusterStoN = FinalCluster[6];
831 
832  // CM of APV crossed by traj
833  if (addCommonMode_)
834  if (commonModeDigis.isValid() && TrajStrip >= 0 && TrajStrip <= 768) {
835  edm::DetSetVector<SiStripRawDigi>::const_iterator digiframe = commonModeDigis->find(iidd);
836  if (digiframe != commonModeDigis->end())
837  if ((unsigned)TrajStrip / 128 < digiframe->data.size())
838  commonMode = digiframe->data.at(TrajStrip / 128).adc();
839  }
840 
841  LogDebug("SiStripHitEfficiency:HitEff") << "before check good" << endl;
842 
843  if (FinalResSig < 999.0) { //could make requirement on track/hit consistency, but for
844  //now take anything with a hit on the module
845  LogDebug("SiStripHitEfficiency:HitEff")
846  << "hit being counted as good " << FinalCluster[0] << " FinalRecHit " << iidd << " TKlayers "
847  << TKlayers << " xloc " << xloc << " yloc " << yloc << " module " << iidd
848  << " matched/stereo/rphi = " << ((iidd & 0x3) == 0) << "/" << ((iidd & 0x3) == 1) << "/"
849  << ((iidd & 0x3) == 2) << endl;
850  ModIsBad = 0;
851  traj->Fill();
852  } else {
853  LogDebug("SiStripHitEfficiency:HitEff")
854  << "hit being counted as bad ######### Invalid RPhi FinalResX " << FinalCluster[0]
855  << " FinalRecHit " << iidd << " TKlayers " << TKlayers << " xloc " << xloc << " yloc " << yloc
856  << " module " << iidd << " matched/stereo/rphi = " << ((iidd & 0x3) == 0) << "/"
857  << ((iidd & 0x3) == 1) << "/" << ((iidd & 0x3) == 2) << endl;
858  ModIsBad = 1;
859  traj->Fill();
860 
861  LogDebug("SiStripHitEfficiency:HitEff") << " RPhi Error " << sqrt(xErr * xErr + yErr * yErr)
862  << " ErrorX " << xErr << " yErr " << yErr << endl;
863  }
864  LogDebug("SiStripHitEfficiency:HitEff") << "after good location check" << endl;
865  }
866  LogDebug("SiStripHitEfficiency:HitEff") << "after list of clusters" << endl;
867  }
868  LogDebug("SiStripHitEfficiency:HitEff") << "After layers=TKLayers if" << endl;
869  }
870  LogDebug("SiStripHitEfficiency:HitEff") << "After looping over TrajAtValidHit list" << endl;
871  }
872  LogDebug("SiStripHitEfficiency:HitEff") << "end TMeasurement loop" << endl;
873  }
874  LogDebug("SiStripHitEfficiency:HitEff") << "end of trajectories loop" << endl;
875  }
876 }
#define LogDebug(id)
std::pair< LocalPoint, LocalError > LocalValues
RunNumber_t run() const
Definition: EventID.h:38
size_type size() const
Definition: EDCollection.h:82
EventNumber_t event() const
Definition: EventID.h:40
static constexpr auto TEC
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
float TrajGlbZ
Definition: HitEff.h:102
bool check2DPartner(unsigned int iidd, const std::vector< TrajectoryMeasurement > &traj)
Definition: HitEff.cc:925
float ClusterLocErrX
Definition: HitEff.h:105
const_iterator end(bool update=false) const
float ClusterLocErrY
Definition: HitEff.h:105
ConstRecHitPointer const & recHit() const
float TrajGlbY
Definition: HitEff.h:102
float TrajLocX
Definition: HitEff.h:103
virtual const std::array< const float, 4 > parameters() const
const_iterator end() const
last iterator over the map (read only)
float ResXSig
Definition: HitEff.h:106
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
bool useAllHitsFromTracksWithMissingHits_
Definition: HitEff.h:73
TString subdetector
int ires[2]
float instLumi
Definition: HitEff.h:116
const edm::EDGetTokenT< std::vector< Trajectory > > trajectories_token_
Definition: HitEff.h:76
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
int bunchCrossing() const
Definition: EventBase.h:64
const Bounds & bounds() const
Definition: Surface.h:89
float ClusterStoN
Definition: HitEff.h:105
data_type const * const_iterator
Definition: DetSetNew.h:31
float TrajLocErrX
Definition: HitEff.h:104
key_type key() const
Accessor for product key.
Definition: Ref.h:250
float commonMode
Definition: HitEff.h:117
virtual const StripTopology & specificTopology() const
Returns a reference to the strip proxy topology.
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
Definition: Electron.h:6
missing
Definition: combine.py:5
std::vector< Muon > MuonCollection
collection of Muon objects
Definition: MuonFwd.h:9
const edm::EDGetTokenT< MeasurementTrackerEvent > trackerEvent_token_
Definition: HitEff.h:80
unsigned int bunchx
Definition: HitEff.h:114
static std::string const input
Definition: EdmProvDump.cc:48
virtual float width() const =0
const TrackerGeomDet * idToDetUnit(DetId) const override
Return the pointer to the GeomDetUnit corresponding to a given DetId.
bool isDoubleSided(unsigned int iidd, const TrackerTopology *tTopo) const
Definition: HitEff.cc:893
bool highPurity
Definition: HitEff.h:111
short getBadApvs(const uint32_t &detid) const
const edm::EDGetTokenT< edmNew::DetSetVector< SiStripCluster > > clusters_token_
Definition: HitEff.h:78
float PU
Definition: HitEff.h:116
int nHits
Definition: HitEff.h:112
unsigned int Id
Definition: HitEff.h:108
const edm::EDGetTokenT< reco::TrackCollection > combinatorialTracks_token_
Definition: HitEff.h:75
T sqrt(T t)
Definition: SSEVec.h:19
float timeAtIpInOutErr
Definition: MuonTime.h:14
const edm::EDGetTokenT< DetIdCollection > digis_token_
Definition: HitEff.h:79
int nDof
number of muon stations used
Definition: MuonTime.h:9
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int trajHitValid
Definition: HitEff.h:114
unsigned int ModIsBad
Definition: HitEff.h:107
float TrajGlbX
Definition: HitEff.h:102
bool isValid() const
Definition: HandleBase.h:70
bool withinAcceptance
Definition: HitEff.h:110
unsigned int run
Definition: HitEff.h:114
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:488
size_type size() const
Return the number of contained DetSets.
Definition: DetSetVector.h:259
float ClusterLocX
Definition: HitEff.h:105
ii
Definition: cuy.py:590
int events
Definition: HitEff.h:85
float TrajLocAngleX
Definition: HitEff.h:103
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
Definition: DetId.h:17
double checkConsistency(const StripClusterParameterEstimator::LocalValues &parameters, double xx, double xerr)
Definition: HitEff.cc:886
T const * product() const
Definition: Handle.h:69
bool useLastMeas_
Definition: HitEff.h:72
unsigned int whatlayer
Definition: HitEff.h:90
virtual int nstrips() const =0
unsigned int trackMultiplicityCut_
Definition: HitEff.h:70
edm::Ref< TrackCollection > TrackRef
persistent reference to a Track
Definition: TrackFwd.h:20
unsigned int checkLayer(unsigned int iidd, const TrackerTopology *tTopo)
Definition: HitEff.cc:943
unsigned int layers
Definition: HitEff.h:88
float pT
Definition: HitEff.h:113
float ResX
Definition: HitEff.h:106
bool addLumi_
Definition: HitEff.h:67
unsigned int SiStripQualBad
Definition: HitEff.h:109
bool addCommonMode_
Definition: HitEff.h:68
size_type size() const
edm::EventID id() const
Definition: EventBase.h:59
const edm::EDGetTokenT< TrajTrackAssociationCollection > trajTrackAsso_token_
Definition: HitEff.h:77
fixed size matrix
HLT enums.
float TrajLocErrY
Definition: HitEff.h:104
float TrajLocAngleY
Definition: HitEff.h:103
bool cutOnTracks_
Definition: HitEff.h:69
const_iterator begin() const
first iterator over the map (read only)
bool useFirstMeas_
Definition: HitEff.h:71
float ClusterLocY
Definition: HitEff.h:105
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
tmp
align.sh
Definition: createJobs.py:716
const edm::EDGetTokenT< LumiScalersCollection > scalerToken_
Definition: HitEff.h:64
TTree * traj
Definition: HitEff.h:84
T const * product() const
Definition: ESHandle.h:86
const edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > commonModeToken_
Definition: HitEff.h:65
float timeAtIpInOut
Definition: MuonTime.h:13
int EventTrackCKF
Definition: HitEff.h:85
const_iterator begin(bool update=false) const
float TrajLocY
Definition: HitEff.h:103
unsigned int tecSide(const DetId &id) const
void HitEff::beginJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 101 of file HitEff.cc.

References addCommonMode_, addLumi_, bunchx, hltPixelTracks_cff::chi2, ClusterLocErrX, ClusterLocErrY, ClusterLocX, ClusterLocY, ClusterStoN, commonMode, compSettings, events, EventTrackCKF, TFileService::file(), highPurity, Id, instLumi, TFileService::make(), ModIsBad, nHits, AlCaHLTBitMon_ParallelJobs::p, pT, PU, ResX, ResXSig, run, SiStripQualBad, tquality, traj, TrajGlbX, TrajGlbY, TrajGlbZ, trajHitValid, TrajLocAngleX, TrajLocAngleY, TrajLocErrX, TrajLocErrY, TrajLocX, TrajLocY, whatlayer, and withinAcceptance.

101  {
103  if (compSettings > 0) {
104  edm::LogInfo("SiStripHitEfficiency:HitEff") << "the compressions settings are:" << compSettings << std::endl;
105  fs->file().SetCompressionSettings(compSettings);
106  }
107 
108  traj = fs->make<TTree>("traj", "tree of trajectory positions");
109 #ifdef ExtendedCALIBTree
110  traj->Branch("timeDT", &timeDT, "timeDT/F");
111  traj->Branch("timeDTErr", &timeDTErr, "timeDTErr/F");
112  traj->Branch("timeDTDOF", &timeDTDOF, "timeDTDOF/I");
113  traj->Branch("timeECAL", &timeECAL, "timeECAL/F");
114  traj->Branch("dedx", &dedx, "dedx/F");
115  traj->Branch("dedxNOM", &dedxNOM, "dedxNOM/I");
116  traj->Branch("nLostHits", &nLostHits, "nLostHits/I");
117  traj->Branch("chi2", &chi2, "chi2/F");
118  traj->Branch("p", &p, "p/F");
119 #endif
120  traj->Branch("TrajGlbX", &TrajGlbX, "TrajGlbX/F");
121  traj->Branch("TrajGlbY", &TrajGlbY, "TrajGlbY/F");
122  traj->Branch("TrajGlbZ", &TrajGlbZ, "TrajGlbZ/F");
123  traj->Branch("TrajLocX", &TrajLocX, "TrajLocX/F");
124  traj->Branch("TrajLocY", &TrajLocY, "TrajLocY/F");
125  traj->Branch("TrajLocAngleX", &TrajLocAngleX, "TrajLocAngleX/F");
126  traj->Branch("TrajLocAngleY", &TrajLocAngleY, "TrajLocAngleY/F");
127  traj->Branch("TrajLocErrX", &TrajLocErrX, "TrajLocErrX/F");
128  traj->Branch("TrajLocErrY", &TrajLocErrY, "TrajLocErrY/F");
129  traj->Branch("ClusterLocX", &ClusterLocX, "ClusterLocX/F");
130  traj->Branch("ClusterLocY", &ClusterLocY, "ClusterLocY/F");
131  traj->Branch("ClusterLocErrX", &ClusterLocErrX, "ClusterLocErrX/F");
132  traj->Branch("ClusterLocErrY", &ClusterLocErrY, "ClusterLocErrY/F");
133  traj->Branch("ClusterStoN", &ClusterStoN, "ClusterStoN/F");
134  traj->Branch("ResX", &ResX, "ResX/F");
135  traj->Branch("ResXSig", &ResXSig, "ResXSig/F");
136  traj->Branch("ModIsBad", &ModIsBad, "ModIsBad/i");
137  traj->Branch("SiStripQualBad", &SiStripQualBad, "SiStripQualBad/i");
138  traj->Branch("withinAcceptance", &withinAcceptance, "withinAcceptance/O");
139  traj->Branch("nHits", &nHits, "nHits/I");
140  traj->Branch("pT", &pT, "pT/F");
141  traj->Branch("highPurity", &highPurity, "highPurity/O");
142  traj->Branch("trajHitValid", &trajHitValid, "trajHitValid/i");
143  traj->Branch("Id", &Id, "Id/i");
144  traj->Branch("run", &run, "run/i");
145  traj->Branch("event", &event, "event/i");
146  traj->Branch("layer", &whatlayer, "layer/i");
147  traj->Branch("tquality", &tquality, "tquality/I");
148  traj->Branch("bunchx", &bunchx, "bunchx/I");
149  if (addLumi_) {
150  traj->Branch("instLumi", &instLumi, "instLumi/F");
151  traj->Branch("PU", &PU, "PU/F");
152  }
153  if (addCommonMode_)
154  traj->Branch("commonMode", &commonMode, "commonMode/F");
155 
156  events = 0;
157  EventTrackCKF = 0;
158 }
float TrajGlbZ
Definition: HitEff.h:102
float ClusterLocErrX
Definition: HitEff.h:105
float ClusterLocErrY
Definition: HitEff.h:105
float TrajGlbY
Definition: HitEff.h:102
float TrajLocX
Definition: HitEff.h:103
float ResXSig
Definition: HitEff.h:106
int compSettings
Definition: HitEff.h:87
float instLumi
Definition: HitEff.h:116
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
float ClusterStoN
Definition: HitEff.h:105
float TrajLocErrX
Definition: HitEff.h:104
float commonMode
Definition: HitEff.h:117
unsigned int bunchx
Definition: HitEff.h:114
bool highPurity
Definition: HitEff.h:111
float PU
Definition: HitEff.h:116
int nHits
Definition: HitEff.h:112
unsigned int Id
Definition: HitEff.h:108
unsigned int trajHitValid
Definition: HitEff.h:114
unsigned int ModIsBad
Definition: HitEff.h:107
float TrajGlbX
Definition: HitEff.h:102
bool withinAcceptance
Definition: HitEff.h:110
unsigned int run
Definition: HitEff.h:114
float ClusterLocX
Definition: HitEff.h:105
int events
Definition: HitEff.h:85
float TrajLocAngleX
Definition: HitEff.h:103
TFile & file() const
return opened TFile
Definition: TFileService.h:37
unsigned int whatlayer
Definition: HitEff.h:90
float pT
Definition: HitEff.h:113
float ResX
Definition: HitEff.h:106
bool addLumi_
Definition: HitEff.h:67
unsigned int SiStripQualBad
Definition: HitEff.h:109
bool addCommonMode_
Definition: HitEff.h:68
float TrajLocErrY
Definition: HitEff.h:104
float TrajLocAngleY
Definition: HitEff.h:103
float ClusterLocY
Definition: HitEff.h:105
TTree * traj
Definition: HitEff.h:84
int EventTrackCKF
Definition: HitEff.h:85
float TrajLocY
Definition: HitEff.h:103
int tquality
Definition: HitEff.h:115
Definition: event.py:1
bool HitEff::check2DPartner ( unsigned int  iidd,
const std::vector< TrajectoryMeasurement > &  traj 
)

Definition at line 925 of file HitEff.cc.

Referenced by analyze().

925  {
926  unsigned int partner_iidd = 0;
927  bool found2DPartner = false;
928  // first get the id of the other detector
929  if ((iidd & 0x3) == 1)
930  partner_iidd = iidd + 1;
931  if ((iidd & 0x3) == 2)
932  partner_iidd = iidd - 1;
933  // next look in the trajectory measurements for a measurement from that detector
934  // loop through trajectory measurements to find the partner_iidd
935  for (std::vector<TrajectoryMeasurement>::const_iterator iTM = traj.begin(); iTM != traj.end(); ++iTM) {
936  if (iTM->recHit()->geographicalId().rawId() == partner_iidd) {
937  found2DPartner = true;
938  }
939  }
940  return found2DPartner;
941 }
TTree * traj
Definition: HitEff.h:84
double HitEff::checkConsistency ( const StripClusterParameterEstimator::LocalValues parameters,
double  xx,
double  xerr 
)

Definition at line 886 of file HitEff.cc.

References funct::abs(), relativeConstraints::error, mathSSE::sqrt(), and geometryCSVtoXML::xx.

Referenced by analyze().

886  {
887  double error = sqrt(parameters.second.xx() + xerr * xerr);
888  double separation = abs(parameters.first.x() - xx);
889  double consistency = separation / error;
890  return consistency;
891 }
T sqrt(T t)
Definition: SSEVec.h:19
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
unsigned int HitEff::checkLayer ( unsigned int  iidd,
const TrackerTopology tTopo 
)

Definition at line 943 of file HitEff.cc.

References DEFINE_FWK_MODULE, digitizers_cfi::strip, DetId::subdetId(), StripSubdetector::TEC, TrackerTopology::tecWheel(), StripSubdetector::TIB, TrackerTopology::tibLayer(), StripSubdetector::TID, TrackerTopology::tidWheel(), StripSubdetector::TOB, and TrackerTopology::tobLayer().

Referenced by analyze().

943  {
945  unsigned int subid = strip.subdetId();
946  if (subid == StripSubdetector::TIB) {
947  return tTopo->tibLayer(iidd);
948  }
949  if (subid == StripSubdetector::TOB) {
950  return tTopo->tobLayer(iidd) + 4;
951  }
952  if (subid == StripSubdetector::TID) {
953  return tTopo->tidWheel(iidd) + 10;
954  }
955  if (subid == StripSubdetector::TEC) {
956  return tTopo->tecWheel(iidd) + 13;
957  }
958  return 0;
959 }
static constexpr auto TEC
unsigned int tibLayer(const DetId &id) const
unsigned int tidWheel(const DetId &id) const
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
static constexpr auto TOB
static constexpr auto TIB
unsigned int tecWheel(const DetId &id) const
static constexpr auto TID
unsigned int tobLayer(const DetId &id) const
void HitEff::endJob ( void  )
overrideprivatevirtual

Reimplemented from edm::EDAnalyzer.

Definition at line 878 of file HitEff.cc.

References events, EventTrackCKF, LogDebug, and traj.

Referenced by o2olib.O2ORunMgr::executeJob().

878  {
879  traj->GetDirectory()->cd();
880  traj->Write();
881 
882  LogDebug("SiStripHitEfficiency:HitEff") << " Events Analysed " << events << endl;
883  LogDebug("SiStripHitEfficiency:HitEff") << " Number Of Tracked events " << EventTrackCKF << endl;
884 }
#define LogDebug(id)
int events
Definition: HitEff.h:85
TTree * traj
Definition: HitEff.h:84
int EventTrackCKF
Definition: HitEff.h:85
bool HitEff::isDoubleSided ( unsigned int  iidd,
const TrackerTopology tTopo 
) const

Definition at line 893 of file HitEff.cc.

References digitizers_cfi::strip, DetId::subdetId(), StripSubdetector::TEC, TrackerTopology::tecRing(), StripSubdetector::TIB, TrackerTopology::tibLayer(), StripSubdetector::TID, TrackerTopology::tidRing(), StripSubdetector::TOB, and TrackerTopology::tobLayer().

Referenced by analyze().

893  {
895  unsigned int subid = strip.subdetId();
896  unsigned int layer = 0;
897  if (subid == StripSubdetector::TIB) {
898  layer = tTopo->tibLayer(iidd);
899  if (layer == 1 || layer == 2)
900  return true;
901  else
902  return false;
903  } else if (subid == StripSubdetector::TOB) {
904  layer = tTopo->tobLayer(iidd) + 4;
905  if (layer == 5 || layer == 6)
906  return true;
907  else
908  return false;
909  } else if (subid == StripSubdetector::TID) {
910  layer = tTopo->tidRing(iidd) + 10;
911  if (layer == 11 || layer == 12)
912  return true;
913  else
914  return false;
915  } else if (subid == StripSubdetector::TEC) {
916  layer = tTopo->tecRing(iidd) + 13;
917  if (layer == 14 || layer == 15 || layer == 18)
918  return true;
919  else
920  return false;
921  } else
922  return false;
923 }
static constexpr auto TEC
unsigned int tibLayer(const DetId &id) const
unsigned int tidRing(const DetId &id) const
unsigned int tecRing(const DetId &id) const
ring id
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
static constexpr auto TOB
static constexpr auto TIB
static constexpr auto TID
unsigned int tobLayer(const DetId &id) const

Member Data Documentation

bool HitEff::addCommonMode_
private

Definition at line 68 of file HitEff.h.

Referenced by analyze(), beginJob(), and HitEff().

bool HitEff::addLumi_
private

Definition at line 67 of file HitEff.h.

Referenced by analyze(), beginJob(), and HitEff().

unsigned int HitEff::bunchx
private

Definition at line 114 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::ClusterLocErrX
private

Definition at line 105 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::ClusterLocErrY
private

Definition at line 105 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::ClusterLocX
private

Definition at line 105 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::ClusterLocY
private

Definition at line 105 of file HitEff.h.

Referenced by analyze(), and beginJob().

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

Definition at line 78 of file HitEff.h.

Referenced by analyze().

float HitEff::ClusterStoN
private

Definition at line 105 of file HitEff.h.

Referenced by analyze(), and beginJob().

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

Definition at line 75 of file HitEff.h.

Referenced by analyze().

float HitEff::commonMode
private

Definition at line 117 of file HitEff.h.

Referenced by analyze(), and beginJob().

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

Definition at line 65 of file HitEff.h.

Referenced by analyze().

int HitEff::compSettings
private

Definition at line 87 of file HitEff.h.

Referenced by beginJob(), and HitEff().

edm::ParameterSet HitEff::conf_
private

Definition at line 82 of file HitEff.h.

Referenced by HitEff().

bool HitEff::cutOnTracks_
private

Definition at line 69 of file HitEff.h.

Referenced by analyze(), and HitEff().

bool HitEff::DEBUG
private

Definition at line 89 of file HitEff.h.

Referenced by HitEff().

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

Definition at line 79 of file HitEff.h.

Referenced by analyze().

unsigned int HitEff::event
private
int HitEff::events
private
int HitEff::EventTrackCKF
private

Definition at line 85 of file HitEff.h.

Referenced by analyze(), beginJob(), and endJob().

bool HitEff::highPurity
private

Definition at line 111 of file HitEff.h.

Referenced by analyze(), and beginJob().

unsigned int HitEff::Id
private

Definition at line 108 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::instLumi
private

Definition at line 116 of file HitEff.h.

Referenced by analyze(), and beginJob().

unsigned int HitEff::layers
private

Definition at line 88 of file HitEff.h.

Referenced by analyze(), and HitEff().

unsigned int HitEff::ModIsBad
private

Definition at line 107 of file HitEff.h.

Referenced by analyze(), and beginJob().

int HitEff::nHits
private

Definition at line 112 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::pT
private

Definition at line 113 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::PU
private

Definition at line 116 of file HitEff.h.

Referenced by analyze(), beginJob(), and upgradeWorkflowComponents.UpgradeWorkflow::init().

float HitEff::ResX
private

Definition at line 106 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::ResXSig
private

Definition at line 106 of file HitEff.h.

Referenced by analyze(), and beginJob().

unsigned int HitEff::run
private
const edm::EDGetTokenT<LumiScalersCollection> HitEff::scalerToken_
private

Definition at line 64 of file HitEff.h.

Referenced by analyze().

unsigned int HitEff::SiStripQualBad
private

Definition at line 109 of file HitEff.h.

Referenced by analyze(), and beginJob().

int HitEff::tquality
private

Definition at line 115 of file HitEff.h.

Referenced by beginJob().

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

Definition at line 80 of file HitEff.h.

Referenced by analyze().

unsigned int HitEff::trackMultiplicityCut_
private

Definition at line 70 of file HitEff.h.

Referenced by analyze(), and HitEff().

TTree* HitEff::traj
private

Definition at line 84 of file HitEff.h.

Referenced by analyze(), beginJob(), and endJob().

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

Definition at line 76 of file HitEff.h.

Referenced by analyze().

float HitEff::TrajGlbX
private

Definition at line 102 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajGlbY
private

Definition at line 102 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajGlbZ
private

Definition at line 102 of file HitEff.h.

Referenced by analyze(), and beginJob().

unsigned int HitEff::trajHitValid
private

Definition at line 114 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajLocAngleX
private

Definition at line 103 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajLocAngleY
private

Definition at line 103 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajLocErrX
private

Definition at line 104 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajLocErrY
private

Definition at line 104 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajLocX
private

Definition at line 103 of file HitEff.h.

Referenced by analyze(), and beginJob().

float HitEff::TrajLocY
private

Definition at line 103 of file HitEff.h.

Referenced by analyze(), and beginJob().

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

Definition at line 77 of file HitEff.h.

Referenced by analyze().

bool HitEff::useAllHitsFromTracksWithMissingHits_
private

Definition at line 73 of file HitEff.h.

Referenced by analyze(), and HitEff().

bool HitEff::useFirstMeas_
private

Definition at line 71 of file HitEff.h.

Referenced by analyze(), and HitEff().

bool HitEff::useLastMeas_
private

Definition at line 72 of file HitEff.h.

Referenced by analyze(), and HitEff().

unsigned int HitEff::whatlayer
private

Definition at line 90 of file HitEff.h.

Referenced by analyze(), and beginJob().

bool HitEff::withinAcceptance
private

Definition at line 110 of file HitEff.h.

Referenced by analyze(), and beginJob().