CMS 3D CMS Logo

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

#include <SimpleCosmicBONSeeder.h>

Inheritance diagram for SimpleCosmicBONSeeder:
edm::stream::EDProducer<>

Public Member Functions

void done ()
 
bool goodTriplet (const GlobalPoint &inner, const GlobalPoint &middle, const GlobalPoint &outer, const double &minRho) const
 
void init (const edm::EventSetup &c)
 
std::pair< GlobalVector, int > pqFromHelixFit (const GlobalPoint &inner, const GlobalPoint &middle, const GlobalPoint &outer) const
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
bool seeds (TrajectorySeedCollection &output)
 
 SimpleCosmicBONSeeder (const edm::ParameterSet &conf)
 
bool triplets (const edm::Event &e)
 
 ~SimpleCosmicBONSeeder () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 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
 

Private Member Functions

bool checkCharge (const TrackingRecHit *hit) const
 
bool checkCharge (const SiStripRecHit2D &hit, int subdetid) const
 
void checkNoisyModules (const std::vector< SeedingHitSet::ConstRecHitPointer > &hits, std::vector< bool > &oks) const
 

Private Attributes

std::vector< int32_t > chargeThresholds_
 
ClusterChecker check_
 
bool checkCharge_
 
bool checkMaxHitsPerModule_
 
TkClonerImpl cloner
 
int goodHitsPerSeed_
 
uint32_t helixVerbosity_
 
OrderedHitTriplets hitTriplets
 
const MagneticFieldmagfield
 
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecordmagfieldToken_
 
bool matchedRecHitUsesAnd_
 
std::vector< int32_t > maxHitsPerModule_
 
int32_t maxSeeds_
 
int32_t maxTriplets_
 
bool negativeYOnly
 
double pMin_
 
bool positiveYOnly
 
GlobalTrackingRegion region_
 
double rescaleError_
 
const edm::EDGetTokenT< SeedingLayerSetsHitsseedingLayerToken_
 
bool seedOnMiddle_
 
uint32_t seedVerbosity_
 
PropagatorWithMaterialthePropagatorAl
 
PropagatorWithMaterialthePropagatorOp
 
KFUpdatortheUpdator
 
const TrackerGeometrytracker
 
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecordtrackerToken_
 
uint32_t tripletsVerbosity_
 
const edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecordttrhBuilderToken_
 
bool writeTriplets_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
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
 

Detailed Description

Definition at line 41 of file SimpleCosmicBONSeeder.h.

Constructor & Destructor Documentation

◆ SimpleCosmicBONSeeder()

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

Definition at line 25 of file SimpleCosmicBONSeeder.cc.

References chargeThresholds_, checkCharge_, checkMaxHitsPerModule_, edm::ParameterSet::existsAs(), edm::ParameterSet::getParameter(), goodHitsPerSeed_, matchedRecHitUsesAnd_, SiStripPI::max, maxHitsPerModule_, negativeYOnly, pMin_, positiveYOnly, ptmin, region_, StripSubdetector::TEC, StripSubdetector::TIB, StripSubdetector::TID, StripSubdetector::TOB, and writeTriplets_.

26  : seedingLayerToken_(consumes<SeedingLayerSetsHits>(conf.getParameter<edm::InputTag>("TripletsSrc"))),
30  writeTriplets_(conf.getParameter<bool>("writeTriplets")),
31  seedOnMiddle_(conf.existsAs<bool>("seedOnMiddle") ? conf.getParameter<bool>("seedOnMiddle") : false),
32  rescaleError_(conf.existsAs<double>("rescaleError") ? conf.getParameter<double>("rescaleError") : 1.0),
33  tripletsVerbosity_(conf.getUntrackedParameter<uint32_t>("TripletsDebugLevel", 0)),
34  seedVerbosity_(conf.getUntrackedParameter<uint32_t>("seedDebugLevel", 0)),
35  helixVerbosity_(conf.getUntrackedParameter<uint32_t>("helixDebugLevel", 0)),
36  check_(conf.getParameter<edm::ParameterSet>("ClusterCheckPSet"), consumesCollector()),
37  maxTriplets_(conf.getParameter<int32_t>("maxTriplets")),
38  maxSeeds_(conf.getParameter<int32_t>("maxSeeds")) {
39  edm::ParameterSet regionConf = conf.getParameter<edm::ParameterSet>("RegionPSet");
40  float ptmin = regionConf.getParameter<double>("ptMin");
41  float originradius = regionConf.getParameter<double>("originRadius");
42  float halflength = regionConf.getParameter<double>("originHalfLength");
43  float originz = regionConf.getParameter<double>("originZPosition");
44  region_ = GlobalTrackingRegion(ptmin, originradius, halflength, originz);
45  pMin_ = regionConf.getParameter<double>("pMin");
46 
47  //***top-bottom
48  positiveYOnly = conf.getParameter<bool>("PositiveYOnly");
49  negativeYOnly = conf.getParameter<bool>("NegativeYOnly");
50  //***
51 
52  produces<TrajectorySeedCollection>();
53  if (writeTriplets_)
54  produces<edm::OwnVector<TrackingRecHit>>("cosmicTriplets");
55 
56  if (conf.existsAs<edm::ParameterSet>("ClusterChargeCheck")) {
57  edm::ParameterSet cccc = conf.getParameter<edm::ParameterSet>("ClusterChargeCheck");
58  checkCharge_ = cccc.getParameter<bool>("checkCharge");
59  matchedRecHitUsesAnd_ = cccc.getParameter<bool>("matchedRecHitsUseAnd");
60  chargeThresholds_.resize(7, 0);
61  edm::ParameterSet ccct = cccc.getParameter<edm::ParameterSet>("Thresholds");
66  } else {
67  checkCharge_ = false;
68  }
69  if (conf.existsAs<edm::ParameterSet>("HitsPerModuleCheck")) {
70  edm::ParameterSet hpmcc = conf.getParameter<edm::ParameterSet>("HitsPerModuleCheck");
71  checkMaxHitsPerModule_ = hpmcc.getParameter<bool>("checkHitsPerModule");
73  edm::ParameterSet hpmct = hpmcc.getParameter<edm::ParameterSet>("Thresholds");
74  maxHitsPerModule_[StripSubdetector::TIB] = hpmct.getParameter<int32_t>("TIB");
75  maxHitsPerModule_[StripSubdetector::TID] = hpmct.getParameter<int32_t>("TID");
76  maxHitsPerModule_[StripSubdetector::TOB] = hpmct.getParameter<int32_t>("TOB");
77  maxHitsPerModule_[StripSubdetector::TEC] = hpmct.getParameter<int32_t>("TEC");
78  } else {
79  checkMaxHitsPerModule_ = false;
80  }
82  goodHitsPerSeed_ = conf.getParameter<int32_t>("minimumGoodHitsInSeed");
83  } else {
84  goodHitsPerSeed_ = 0;
85  }
86 }
static constexpr auto TEC
GlobalTrackingRegion region_
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< SeedingLayerSetsHits > seedingLayerToken_
bool existsAs(std::string const &parameterName, bool trackiness=true) const
checks if a parameter exists as a given type
Definition: ParameterSet.h:171
T getUntrackedParameter(std::string const &, T const &) const
static constexpr auto TOB
static constexpr auto TIB
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerToken_
double ptmin
Definition: HydjetWrapper.h:84
std::vector< int32_t > chargeThresholds_
std::vector< int32_t > maxHitsPerModule_
const edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > ttrhBuilderToken_
static constexpr auto TID
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magfieldToken_

◆ ~SimpleCosmicBONSeeder()

SimpleCosmicBONSeeder::~SimpleCosmicBONSeeder ( )
inlineoverride

Definition at line 45 of file SimpleCosmicBONSeeder.h.

45 {}

Member Function Documentation

◆ checkCharge() [1/2]

bool SimpleCosmicBONSeeder::checkCharge ( const TrackingRecHit hit) const
private

Definition at line 309 of file SimpleCosmicBONSeeder.cc.

References matchedRecHitUsesAnd_, SiStripMatchedRecHit2D::monoHit(), SiStripMatchedRecHit2D::stereoHit(), DetId::subdetId(), and DetId::Tracker.

Referenced by triplets().

309  {
310  DetId detid(hit->geographicalId());
311  if (detid.det() != DetId::Tracker)
312  return false; // should not happen
313  int subdet = detid.subdetId();
314  if (subdet < 3) { // pixel
315  return true;
316  } else {
317  if (typeid(*hit) == typeid(SiStripMatchedRecHit2D)) {
318  const SiStripMatchedRecHit2D *mhit = static_cast<const SiStripMatchedRecHit2D *>(hit);
319  if (matchedRecHitUsesAnd_) {
320  return checkCharge(mhit->monoHit(), subdet) && checkCharge(mhit->stereoHit(), subdet);
321  } else {
322  return checkCharge(mhit->monoHit(), subdet) || checkCharge(mhit->stereoHit(), subdet);
323  }
324  } else if (typeid(*hit) == typeid(SiStripRecHit2D)) {
325  return checkCharge(static_cast<const SiStripRecHit2D &>(*hit), subdet);
326  } else {
327  return true;
328  }
329  }
330 }
SiStripRecHit2D stereoHit() const
bool checkCharge(const TrackingRecHit *hit) 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
Definition: DetId.h:17
SiStripRecHit2D monoHit() const

◆ checkCharge() [2/2]

bool SimpleCosmicBONSeeder::checkCharge ( const SiStripRecHit2D hit,
int  subdetid 
) const
private

Definition at line 333 of file SimpleCosmicBONSeeder.cc.

References SiStripCluster::amplitudes(), SiStripCluster::begin(), EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0::cerr, ALCARECOTkAlJpsiMuMu_cff::charge, chargeThresholds_, SiStripCluster::end(), SiStripCluster::firstStrip(), createfilelist::int, and tripletsVerbosity_.

333  {
334  const SiStripCluster *clust = hit.cluster().get();
335  int charge = std::accumulate(clust->amplitudes().begin(), clust->amplitudes().end(), int(0));
336  if (tripletsVerbosity_ > 1) {
337  std::cerr << "Hit on " << subdetid << ", charge = " << charge << ", threshold = " << chargeThresholds_[subdetid]
338  << ", detid = " << hit.geographicalId().rawId() << ", firstStrip = " << clust->firstStrip() << std::endl;
339  } else if ((tripletsVerbosity_ == 1) && (charge < chargeThresholds_[subdetid])) {
340  std::cerr << "Hit on " << subdetid << ", charge = " << charge << ", threshold = " << chargeThresholds_[subdetid]
341  << ", detid = " << hit.geographicalId().rawId() << ", firstStrip = " << clust->firstStrip() << std::endl;
342  }
343  return charge > chargeThresholds_[subdetid];
344 }
uint16_t firstStrip() const
auto const * begin() const
auto const * end() const
SiStripCluster const & amplitudes() const
std::vector< int32_t > chargeThresholds_

◆ checkNoisyModules()

void SimpleCosmicBONSeeder::checkNoisyModules ( const std::vector< SeedingHitSet::ConstRecHitPointer > &  hits,
std::vector< bool > &  oks 
) const
private

Definition at line 346 of file SimpleCosmicBONSeeder.cc.

References EcnaPython_AdcPeg12_S1_10_R170298_1_0_150_Dee0::cerr, mps_fire::end, ntuplemaker::fill, hfClusterShapes_cfi::hits, maxHitsPerModule_, SiStripPI::min, convertSQLiteXML::ok, DetId::rawId(), command_line::start, DetId::subdetId(), and tripletsVerbosity_.

Referenced by triplets().

347  {
349  std::vector<TTRH>::const_iterator it = hits.begin(), start = it, end = hits.end();
350  std::vector<bool>::iterator ok = oks.begin(), okStart = ok;
351  while (start < end) {
352  DetId lastid = (*start)->geographicalId();
353  for (it = start + 1; (it < end) && ((*it)->geographicalId() == lastid); ++it) {
354  ++ok;
355  }
356  if ((it - start) > maxHitsPerModule_[lastid.subdetId()]) {
357  if (tripletsVerbosity_ > 0) {
358  std::cerr << "SimpleCosmicBONSeeder: Marking noisy module " << lastid.rawId() << ", it has " << (it - start)
359  << " rechits"
360  << " (threshold is " << maxHitsPerModule_[lastid.subdetId()] << ")" << std::endl;
361  }
362  std::fill(okStart, ok, false);
363  } else if (tripletsVerbosity_ > 0) {
364  if ((it - start) > std::min(4, maxHitsPerModule_[lastid.subdetId()] / 4)) {
365  std::cerr << "SimpleCosmicBONSeeder: Not marking noisy module " << lastid.rawId() << ", it has " << (it - start)
366  << " rechits"
367  << " (threshold is " << maxHitsPerModule_[lastid.subdetId()] << ")" << std::endl;
368  }
369  }
370  start = it;
371  okStart = ok;
372  }
373 }
Definition: start.py:1
BaseTrackerRecHit const * ConstRecHitPointer
Definition: SeedingHitSet.h:14
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
Definition: DetId.h:17
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::vector< int32_t > maxHitsPerModule_

◆ done()

void SimpleCosmicBONSeeder::done ( )

Definition at line 619 of file SimpleCosmicBONSeeder.cc.

References thePropagatorAl, thePropagatorOp, and theUpdator.

Referenced by produce().

619  {
620  delete thePropagatorAl;
621  delete thePropagatorOp;
622  delete theUpdator;
623 }
PropagatorWithMaterial * thePropagatorOp
PropagatorWithMaterial * thePropagatorAl

◆ goodTriplet()

bool SimpleCosmicBONSeeder::goodTriplet ( const GlobalPoint inner,
const GlobalPoint middle,
const GlobalPoint outer,
const double &  minRho 
) const

Definition at line 375 of file SimpleCosmicBONSeeder.cc.

References gather_cfg::cout, SurfaceOrientation::inner, SurfaceOrientation::outer, FastCircle::rho(), tripletsVerbosity_, PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by triplets().

378  {
379  float dyOM = outer.y() - middle.y(), dyIM = inner.y() - middle.y();
380  if ((dyOM * dyIM > 0) && (fabs(dyOM) > 10) && (fabs(dyIM) > 10)) {
381  if (tripletsVerbosity_ > 2)
382  std::cout << " fail for non coherent dy" << std::endl;
383  return false;
384  }
385  float dzOM = outer.z() - middle.z(), dzIM = inner.z() - middle.z();
386  if ((dzOM * dzIM > 0) && (fabs(dzOM) > 50) && (fabs(dzIM) > 50)) {
387  if (tripletsVerbosity_ > 2)
388  std::cout << " fail for non coherent dz" << std::endl;
389  return false;
390  }
391  if (minRho > 0) {
392  FastCircle theCircle(inner, middle, outer);
393  if (theCircle.rho() < minRho) {
394  if (tripletsVerbosity_ > 2)
395  std::cout << " fail for pt cut" << std::endl;
396  return false;
397  }
398  }
399  return true;
400 }
T z() const
Definition: PV3DBase.h:61
T y() const
Definition: PV3DBase.h:60

◆ init()

void SimpleCosmicBONSeeder::init ( const edm::EventSetup c)

Definition at line 127 of file SimpleCosmicBONSeeder.cc.

References alongMomentum, cloner, edm::EventSetup::getData(), magfield, oppositeToMomentum, thePropagatorAl, thePropagatorOp, theUpdator, tracker, trackerToken_, and ttrhBuilderToken_.

Referenced by produce().

127  {
128  tracker = &iSetup.getData(trackerToken_);
129  cloner = dynamic_cast<TkTransientTrackingRecHitBuilder const &>(iSetup.getData(ttrhBuilderToken_)).cloner();
130  // FIXME: these should come from ES too!!
133  theUpdator = new KFUpdator();
134 }
const TrackerGeometry * tracker
PropagatorWithMaterial * thePropagatorOp
const MagneticField * magfield
PropagatorWithMaterial * thePropagatorAl
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerToken_
const edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > ttrhBuilderToken_

◆ pqFromHelixFit()

std::pair< GlobalVector, int > SimpleCosmicBONSeeder::pqFromHelixFit ( const GlobalPoint inner,
const GlobalPoint middle,
const GlobalPoint outer 
) const

Definition at line 402 of file SimpleCosmicBONSeeder.cc.

References funct::abs(), gather_cfg::cout, PVValHelper::dz, helixVerbosity_, SurfaceOrientation::inner, MagneticField::inTesla(), magfield, MagneticField::nominalValue(), SurfaceOrientation::outer, DiDispStaMuonMonitor_cfi::pt, multPhiCorr_741_25nsDY_cfi::px, multPhiCorr_741_25nsDY_cfi::py, rho, FastCircle::rho(), PV3DBase< T, PVType, FrameType >::x(), FastCircle::x0(), PV3DBase< T, PVType, FrameType >::y(), FastCircle::y0(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by seeds(), and triplets().

404  {
405  if (helixVerbosity_ > 0) {
406  std::cout << "DEBUG PZ =====" << std::endl;
407  FastHelix helix(inner, middle, outer, magfield->nominalValue(), &*magfield);
408  GlobalVector gv = helix.stateAtVertex().momentum(); // status on inner hit
409  std::cout << "FastHelix P = " << gv << "\n";
410  std::cout << "FastHelix Q = " << helix.stateAtVertex().charge() << "\n";
411  }
412 
413  // My attempt (with different approx from FastHelix)
414  // 1) fit the circle
415  FastCircle theCircle(inner, middle, outer);
416  double rho = theCircle.rho();
417 
418  // 2) Get the PT
419  GlobalVector tesla = magfield->inTesla(middle);
420  double pt = 0.01 * rho * (0.3 * tesla.z());
421 
422  // 3) Get the PX,PY at OUTER hit (VERTEX)
423  double dx1 = outer.x() - theCircle.x0();
424  double dy1 = outer.y() - theCircle.y0();
425  double py = pt * dx1 / rho, px = -pt * dy1 / rho;
426  if (px * (middle.x() - outer.x()) + py * (middle.y() - outer.y()) < 0.) {
427  px *= -1.;
428  py *= -1.;
429  }
430 
431  // 4) Get the PZ through pz = pT*(dz/d(R*phi)))
432  double dz = inner.z() - outer.z();
433  double sinphi = (dx1 * (inner.y() - theCircle.y0()) - dy1 * (inner.x() - theCircle.x0())) / (rho * rho);
434  double dphi = std::abs(std::asin(sinphi));
435  double pz = pt * dz / (dphi * rho);
436 
437  int myq = ((theCircle.x0() * py - theCircle.y0() * px) / tesla.z()) > 0. ? +1 : -1;
438 
439  std::pair<GlobalVector, int> mypq(GlobalVector(px, py, pz), myq);
440 
441  if (helixVerbosity_ > 1) {
442  std::cout << "Gio: pt = " << pt << std::endl;
443  std::cout << "Gio: dz = " << dz << ", sinphi = " << sinphi << ", dphi = " << dphi
444  << ", dz/drphi = " << (dz / dphi / rho) << std::endl;
445  }
446  if (helixVerbosity_ > 0) {
447  std::cout << "Gio's fit P = " << mypq.first << "\n";
448  std::cout << "Gio's fit Q = " << myq << "\n";
449  }
450 
451  return mypq;
452 }
T z() const
Definition: PV3DBase.h:61
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const MagneticField * magfield
int nominalValue() const
The nominal field value for this map in kGauss.
Definition: MagneticField.h:49
Global3DVector GlobalVector
Definition: GlobalVector.h:10

◆ produce()

void SimpleCosmicBONSeeder::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Definition at line 89 of file SimpleCosmicBONSeeder.cc.

References check_, TrackingRecHit::clone(), done(), makeMEIFBenchmarkPlots::ev, edm::EventSetup::getData(), TrackingRecHit::hit(), hitTriplets, init(), MagneticField::inTesla(), PV3DBase< T, PVType, FrameType >::mag(), magfield, magfieldToken_, eostools::move(), convertSQLitetoXML_cfg::output, seeds(), ClusterChecker::tooManyClusters(), triplets(), and writeTriplets_.

89  {
90  auto output = std::make_unique<TrajectorySeedCollection>();
91  auto outtriplets = std::make_unique<edm::OwnVector<TrackingRecHit>>();
92 
93  magfield = &es.getData(magfieldToken_);
94  if (magfield->inTesla(GlobalPoint(0, 0, 0)).mag() > 0.01) {
95  size_t clustsOrZero = check_.tooManyClusters(ev);
96  if (clustsOrZero) {
97  edm::LogError("TooManyClusters") << "Found too many clusters (" << clustsOrZero << "), bailing out.\n";
98  } else {
99  init(es);
100  bool tripletsOk = triplets(ev);
101  if (tripletsOk) {
102  bool seedsOk = seeds(*output);
103  if (!seedsOk) {
104  }
105 
106  if (writeTriplets_) {
107  for (OrderedHitTriplets::const_iterator it = hitTriplets.begin(); it != hitTriplets.end(); ++it) {
108  const TrackingRecHit *hit1 = it->inner()->hit();
109  const TrackingRecHit *hit2 = it->middle()->hit();
110  const TrackingRecHit *hit3 = it->outer()->hit();
111  outtriplets->push_back(hit1->clone());
112  outtriplets->push_back(hit2->clone());
113  outtriplets->push_back(hit3->clone());
114  }
115  }
116  }
117  done();
118  }
119  }
120 
121  if (writeTriplets_) {
122  ev.put(std::move(outtriplets), "cosmicTriplets");
123  }
124  ev.put(std::move(output));
125 }
void init(const edm::EventSetup &c)
size_t tooManyClusters(const edm::Event &e) const
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
OrderedHitTriplets hitTriplets
bool seeds(TrajectorySeedCollection &output)
Log< level::Error, false > LogError
bool triplets(const edm::Event &e)
T mag() const
Definition: PV3DBase.h:64
const MagneticField * magfield
virtual TrackingRecHit * clone() const =0
virtual TrackingRecHit const * hit() const
def move(src, dest)
Definition: eostools.py:511
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magfieldToken_

◆ seeds()

bool SimpleCosmicBONSeeder::seeds ( TrajectorySeedCollection output)

Definition at line 454 of file SimpleCosmicBONSeeder.cc.

References alongMomentum, FreeTrajectoryState::cartesianError(), cloner, gather_cfg::cout, hfClusterShapes_cfi::hits, hitTriplets, TrackerGeometry::idToDet(), SurfaceOrientation::inner, OrderedHitTriplet::inner(), edm::isNotFinite(), magfield, CartesianTrajectoryError::matrix(), maxSeeds_, OrderedHitTriplet::middle(), oppositeToMomentum, SurfaceOrientation::outer, OrderedHitTriplet::outer(), convertSQLitetoXML_cfg::output, PV3DBase< T, PVType, FrameType >::perp(), trajectoryStateTransform::persistentState(), pMin_, pqFromHelixFit(), TrackCandidateProducer_cfi::propagator, TrackingRegion::ptMin(), region_, FreeTrajectoryState::rescaleError(), rescaleError_, seedOnMiddle_, seedVerbosity_, OrderedHitTriplets::size(), mathSSE::sqrt(), std::swap(), thePropagatorAl, thePropagatorOp, theUpdator, GeomDet::toGlobal(), tracker, KFUpdator::update(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

454  {
456 
457  for (size_t it = 0; it < hitTriplets.size(); it++) {
458  OrderedHitTriplet &trip = hitTriplets.at(it);
459 
461  tracker->idToDet((*(trip.inner())).geographicalId())->surface().toGlobal((*(trip.inner())).localPosition());
462 
463  GlobalPoint middle =
464  tracker->idToDet((*(trip.middle())).geographicalId())->surface().toGlobal((*(trip.middle())).localPosition());
465 
467  tracker->idToDet((*(trip.outer())).geographicalId())->surface().toGlobal((*(trip.outer())).localPosition());
468 
469  if (seedVerbosity_ > 1)
470  std::cout << "Processing triplet " << it << ": " << inner << " + " << middle << " + " << outer << std::endl;
471 
472  if ((outer.y() - inner.y()) * outer.y() < 0) {
474  trip = OrderedHitTriplet(trip.outer(), trip.middle(), trip.inner());
475 
476  if (seedVerbosity_ > 1) {
477  std::cout << "The seed was going away from CMS! swapped in <-> out" << std::endl;
478  std::cout << "Processing swapped triplet " << it << ": " << inner << " + " << middle << " + " << outer
479  << std::endl;
480  }
481  }
482 
483  // First use FastHelix out of the box
484  std::pair<GlobalVector, int> pq = pqFromHelixFit(inner, middle, outer);
485  GlobalVector gv = pq.first;
486  float ch = pq.second;
487  float Mom = sqrt(gv.x() * gv.x() + gv.y() * gv.y() + gv.z() * gv.z());
488 
489  if (Mom > 10000 || edm::isNotFinite(Mom)) {
490  if (seedVerbosity_ > 1)
491  std::cout << "Processing triplet " << it << ": fail for momentum." << std::endl;
492  continue;
493  }
494 
495  if (gv.perp() < region_.ptMin()) {
496  if (seedVerbosity_ > 1)
497  std::cout << "Processing triplet " << it << ": fail for pt = " << gv.perp() << " < ptMin = " << region_.ptMin()
498  << std::endl;
499  continue;
500  }
501 
502  const Propagator *propagator = nullptr;
503  if ((outer.y() - inner.y()) > 0) {
504  if (seedVerbosity_ > 1)
505  std::cout << "Processing triplet " << it << ": downgoing." << std::endl;
507  } else {
508  gv = -1 * gv;
509  ch = -1. * ch;
511  if (seedVerbosity_ > 1)
512  std::cout << "Processing triplet " << it << ": upgoing." << std::endl;
513  }
514 
515  if (seedVerbosity_ > 1) {
516  if ((gv.z() * (outer.z() - inner.z()) > 0) && (fabs(outer.z() - inner.z()) > 5) && (fabs(gv.z()) > .01)) {
517  std::cout << "ORRORE: outer.z()-inner.z() = " << (outer.z() - inner.z()) << ", gv.z() = " << gv.z()
518  << std::endl;
519  }
520  }
521 
522  GlobalTrajectoryParameters Gtp(outer, gv, int(ch), &(*magfield));
524  CosmicSeed.rescaleError(100);
525  if (seedVerbosity_ > 2) {
526  std::cout << "Processing triplet " << it << ". start from " << std::endl;
527  std::cout << " X = " << outer << ", P = " << gv << std::endl;
528  std::cout << " Cartesian error (X,P) = \n" << CosmicSeed.cartesianError().matrix() << std::endl;
529  }
530 
532  OrderedHitTriplet seedHits(trip.outer(), trip.middle(), trip.inner());
533  TSOS propagated, updated;
534  bool fail = false;
535  for (size_t ih = 0; ih < 3; ++ih) {
536  if ((ih == 2) && seedOnMiddle_) {
537  if (seedVerbosity_ > 2)
538  std::cout << "Stopping at middle hit, as requested." << std::endl;
539  break;
540  }
541  if (seedVerbosity_ > 2)
542  std::cout << "Processing triplet " << it << ", hit " << ih << "." << std::endl;
543  if (ih == 0) {
544  propagated = propagator->propagate(CosmicSeed, tracker->idToDet((*seedHits[ih]).geographicalId())->surface());
545  } else {
546  propagated = propagator->propagate(updated, tracker->idToDet((*seedHits[ih]).geographicalId())->surface());
547  }
548  if (!propagated.isValid()) {
549  if (seedVerbosity_ > 1)
550  std::cout << "Processing triplet " << it << ", hit " << ih << ": failed propagation." << std::endl;
551  fail = true;
552  break;
553  } else {
554  if (seedVerbosity_ > 2)
555  std::cout << "Processing triplet " << it << ", hit " << ih << ": propagated state = " << propagated;
556  }
557  SeedingHitSet::ConstRecHitPointer tthp = seedHits[ih];
558  auto newtth = static_cast<SeedingHitSet::RecHitPointer>(cloner(*tthp, propagated));
559  updated = theUpdator->update(propagated, *newtth);
560  hits.push_back(newtth);
561  if (!updated.isValid()) {
562  if (seedVerbosity_ > 1)
563  std::cout << "Processing triplet " << it << ", hit " << ih << ": failed update." << std::endl;
564  fail = true;
565  break;
566  } else {
567  if (seedVerbosity_ > 2)
568  std::cout << "Processing triplet " << it << ", hit " << ih << ": updated state = " << updated;
569  }
570  }
571  if (!fail && updated.isValid() && (updated.globalMomentum().perp() < region_.ptMin())) {
572  if (seedVerbosity_ > 1)
573  std::cout << "Processing triplet " << it << ": failed for final pt " << updated.globalMomentum().perp() << " < "
574  << region_.ptMin() << std::endl;
575  fail = true;
576  }
577  if (!fail && updated.isValid() && (updated.globalMomentum().mag() < pMin_)) {
578  if (seedVerbosity_ > 1)
579  std::cout << "Processing triplet " << it << ": failed for final p " << updated.globalMomentum().perp() << " < "
580  << pMin_ << std::endl;
581  fail = true;
582  }
583  if (!fail) {
584  if (rescaleError_ != 1.0) {
585  if (seedVerbosity_ > 2) {
586  std::cout << "Processing triplet " << it << ", rescale error by " << rescaleError_
587  << ": state BEFORE rescaling " << updated;
588  std::cout << " Cartesian error (X,P) before rescaling= \n"
589  << updated.cartesianError().matrix() << std::endl;
590  }
591  updated.rescaleError(rescaleError_);
592  }
593  if (seedVerbosity_ > 0) {
594  std::cout << "Processed triplet " << it << ": success (saved as #" << output.size() << ") : " << inner << " + "
595  << middle << " + " << outer << std::endl;
596  std::cout << " pt = " << updated.globalMomentum().perp() << " eta = " << updated.globalMomentum().eta()
597  << " phi = " << updated.globalMomentum().phi() << " ch = " << updated.charge() << std::endl;
598  if (seedVerbosity_ > 1) {
599  std::cout << " State:" << updated;
600  } else {
601  std::cout << " X = " << updated.globalPosition() << ", P = " << updated.globalMomentum() << std::endl;
602  }
603  std::cout << " Cartesian error (X,P) = \n" << updated.cartesianError().matrix() << std::endl;
604  }
605 
607  updated, (*(seedOnMiddle_ ? trip.middle() : trip.inner())).geographicalId().rawId());
608  output.push_back(TrajectorySeed(PTraj, hits, ((outer.y() - inner.y() > 0) ? alongMomentum : oppositeToMomentum)));
609  if ((maxSeeds_ > 0) && (output.size() > size_t(maxSeeds_))) {
610  output.clear();
611  edm::LogError("TooManySeeds") << "Found too many seeds, bailing out.\n";
612  return false;
613  }
614  }
615  }
616  return true;
617 }
GlobalTrackingRegion region_
T perp() const
Definition: PV3DBase.h:69
const TrackerGeometry * tracker
T z() const
Definition: PV3DBase.h:61
constexpr bool isNotFinite(T x)
Definition: isFinite.h:9
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
OrderedHitTriplets hitTriplets
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
std::pair< GlobalVector, int > pqFromHelixFit(const GlobalPoint &inner, const GlobalPoint &middle, const GlobalPoint &outer) const
Log< level::Error, false > LogError
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
BaseTrackerRecHit const * ConstRecHitPointer
Definition: SeedingHitSet.h:14
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
Definition: KFUpdator.cc:177
MiddleRecHit middle() const
void swap(edm::DataFrameContainer &lhs, edm::DataFrameContainer &rhs)
float ptMin() const
minimal pt of interest
T sqrt(T t)
Definition: SSEVec.h:19
PropagatorWithMaterial * thePropagatorOp
const MagneticField * magfield
const TrackerGeomDet * idToDet(DetId) const override
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
PropagatorWithMaterial * thePropagatorAl
TrajectoryStateOnSurface TSOS
Definition: TestHits.cc:19
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
OuterRecHit outer() const
InnerRecHit inner() const
unsigned int size() const override

◆ triplets()

bool SimpleCosmicBONSeeder::triplets ( const edm::Event e)

ctfseeding SeedinHits and their iterators

Transient Tracking RecHits (not anymore....)

Checks on the cluster charge and on noisy modules

Now actually filling in the charges for all the clusters

Definition at line 170 of file SimpleCosmicBONSeeder.cc.

References checkCharge(), checkCharge_, checkMaxHitsPerModule_, checkNoisyModules(), gather_cfg::cout, MillePedeFileConverter_cfg::e, goodHitsPerSeed_, goodTriplet(), helixVerbosity_, GlobalTrackingRegion::hits(), hitTriplets, heavyIonCSV_trainingSettings::idx, MagneticField::inTesla(), hgcalTopologyTester_cfi::layers, eostools::ls(), magfield, maxTriplets_, negativeYOnly, positiveYOnly, pqFromHelixFit(), TrackingRegion::ptMin(), region_, seedingLayerToken_, OrderedHitTriplets::size(), jetUpdater_cfi::sort, tripletsVerbosity_, PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by produce().

170  {
171  hitTriplets.clear();
172  hitTriplets.reserve(0);
174  e.getByToken(seedingLayerToken_, hlayers);
175  const SeedingLayerSetsHits &layers = *hlayers;
176  if (layers.numberOfLayersInSet() != 3)
177  throw cms::Exception("CtfSpecialSeedGenerator")
178  << "You are using " << layers.numberOfLayersInSet() << " layers in set instead of 3 ";
179 
180  double minRho = region_.ptMin() / (0.003 * magfield->inTesla(GlobalPoint(0, 0, 0)).z());
181 
182  for (SeedingLayerSetsHits::LayerSetIndex layerIndex = 0; layerIndex < layers.size(); ++layerIndex) {
185  auto innerHits = region_.hits(ls[0]);
186  auto middleHits = region_.hits(ls[1]);
187  auto outerHits = region_.hits(ls[2]);
188 
189  if (tripletsVerbosity_ > 0) {
190  std::cout << "GenericTripletGenerator iLss = " << seedingLayersToString(ls) << " (" << layerIndex
191  << "): # = " << innerHits.size() << "/" << middleHits.size() << "/" << outerHits.size() << std::endl;
192  }
193 
196  std::vector<TTRH> innerTTRHs, middleTTRHs, outerTTRHs;
197 
199  std::vector<bool> innerOk(innerHits.size(), true);
200  std::vector<bool> middleOk(middleHits.size(), true);
201  std::vector<bool> outerOk(outerHits.size(), true);
202 
203  size_t sizBefore = hitTriplets.size();
205  int idx = 0;
206  for (auto iOuterHit = outerHits.begin(); iOuterHit != outerHits.end(); ++idx, ++iOuterHit) {
207  outerTTRHs.push_back(&(**iOuterHit));
208  if (checkCharge_ && !checkCharge(outerTTRHs.back()->hit()))
209  outerOk[idx] = false;
210  }
211  idx = 0;
212  for (auto iMiddleHit = middleHits.begin(); iMiddleHit != middleHits.end(); ++idx, ++iMiddleHit) {
213  middleTTRHs.push_back(&(**iMiddleHit));
214  if (checkCharge_ && !checkCharge(middleTTRHs.back()->hit()))
215  middleOk[idx] = false;
216  }
217  idx = 0;
218  for (auto iInnerHit = innerHits.begin(); iInnerHit != innerHits.end(); ++idx, ++iInnerHit) {
219  innerTTRHs.push_back(&(**iInnerHit));
220  if (checkCharge_ && !checkCharge(innerTTRHs.back()->hit()))
221  innerOk[idx] = false;
222  }
224  checkNoisyModules(innerTTRHs, innerOk);
225  checkNoisyModules(middleTTRHs, middleOk);
226  checkNoisyModules(outerTTRHs, outerOk);
227  }
228 
229  for (auto iOuterHit = outerHits.begin(); iOuterHit != outerHits.end(); iOuterHit++) {
230  idx = iOuterHit - outerHits.begin();
231  TTRH &outerTTRH = outerTTRHs[idx];
232  GlobalPoint outerpos = outerTTRH->globalPosition(); // this caches by itself
233  bool outerok = outerOk[idx];
234  if (outerok < goodHitsPerSeed_ - 2) {
235  if (tripletsVerbosity_ > 2)
236  std::cout << "Skipping at first hit: " << (outerok) << " < " << (goodHitsPerSeed_ - 2) << std::endl;
237  continue;
238  }
239 
240  for (auto iMiddleHit = middleHits.begin(); iMiddleHit != middleHits.end(); iMiddleHit++) {
241  idx = iMiddleHit - middleHits.begin();
242  TTRH &middleTTRH = middleTTRHs[idx];
243  GlobalPoint middlepos = middleTTRH->globalPosition(); // this caches by itself
244  bool middleok = middleOk[idx];
245  if (outerok + middleok < goodHitsPerSeed_ - 1) {
246  if (tripletsVerbosity_ > 2)
247  std::cout << "Skipping at second hit: " << (outerok + middleok) << " < " << (goodHitsPerSeed_ - 1)
248  << std::endl;
249  continue;
250  }
251 
252  for (auto iInnerHit = innerHits.begin(); iInnerHit != innerHits.end(); iInnerHit++) {
253  idx = iInnerHit - innerHits.begin();
254  TTRH &innerTTRH = innerTTRHs[idx];
255  GlobalPoint innerpos = innerTTRH->globalPosition(); // this caches by itself
256  bool innerok = innerOk[idx];
257  if (outerok + middleok + innerok < goodHitsPerSeed_) {
258  if (tripletsVerbosity_ > 2)
259  std::cout << "Skipping at third hit: " << (outerok + middleok + innerok) << " < " << (goodHitsPerSeed_)
260  << std::endl;
261  continue;
262  }
263 
264  //***top-bottom
265  if (positiveYOnly &&
266  (innerpos.y() < 0 || middlepos.y() < 0 || outerpos.y() < 0 || outerpos.y() < innerpos.y()))
267  continue;
268  if (negativeYOnly &&
269  (innerpos.y() > 0 || middlepos.y() > 0 || outerpos.y() > 0 || outerpos.y() > innerpos.y()))
270  continue;
271  //***
272 
273  if (tripletsVerbosity_ > 2)
274  std::cout << "Trying seed with: " << innerpos << " + " << middlepos << " + " << outerpos << std::endl;
275  if (goodTriplet(innerpos, middlepos, outerpos, minRho)) {
276  OrderedHitTriplet oht(&(**iInnerHit), &(**iMiddleHit), &(**iOuterHit));
277  hitTriplets.push_back(oht);
278  if ((maxTriplets_ > 0) && (hitTriplets.size() > size_t(maxTriplets_))) {
279  hitTriplets.clear(); // clear
280  //OrderedHitTriplets().swap(hitTriplets); // really clear
281  edm::LogError("TooManyTriplets") << "Found too many triplets, bailing out.\n";
282  return false;
283  }
284  if (tripletsVerbosity_ > 3) {
285  std::cout << " accepted seed #" << (hitTriplets.size() - 1) << " w/: " << innerpos << " + " << middlepos
286  << " + " << outerpos << std::endl;
287  }
288  if (tripletsVerbosity_ == 2) {
289  std::cout << " good seed #" << (hitTriplets.size() - 1) << " w/: " << innerpos << " + " << middlepos
290  << " + " << outerpos << std::endl;
291  }
292  if (tripletsVerbosity_ > 3 && (helixVerbosity_ > 0)) { // debug the momentum here too
293  pqFromHelixFit(innerpos, middlepos, outerpos);
294  }
295  }
296  }
297  }
298  }
299  if ((tripletsVerbosity_ > 0) && (hitTriplets.size() > sizBefore)) {
300  std::cout << " iLss = " << seedingLayersToString(ls) << " (" << layerIndex
301  << "): # = " << innerHits.size() << "/" << middleHits.size() << "/" << outerHits.size() << ": Found "
302  << (hitTriplets.size() - sizBefore) << " seeds [running total: " << hitTriplets.size() << "]"
303  << std::endl;
304  }
305  }
306  std::sort(hitTriplets.begin(), hitTriplets.end(), HigherInnerHit());
307  return true;
308 }
GlobalTrackingRegion region_
bool checkCharge(const TrackingRecHit *hit) const
T z() const
Definition: PV3DBase.h:61
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
const edm::EDGetTokenT< SeedingLayerSetsHits > seedingLayerToken_
unsigned short LayerSetIndex
OrderedHitTriplets hitTriplets
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
std::pair< GlobalVector, int > pqFromHelixFit(const GlobalPoint &inner, const GlobalPoint &middle, const GlobalPoint &outer) const
Log< level::Error, false > LogError
T y() const
Definition: PV3DBase.h:60
BaseTrackerRecHit const * ConstRecHitPointer
Definition: SeedingHitSet.h:14
TrackingRegion::Hits hits(const SeedingLayerSetsHits::SeedingLayer &layer) const override
get hits from layer compatible with region constraints
float ptMin() const
minimal pt of interest
void checkNoisyModules(const std::vector< SeedingHitSet::ConstRecHitPointer > &hits, std::vector< bool > &oks) const
bool goodTriplet(const GlobalPoint &inner, const GlobalPoint &middle, const GlobalPoint &outer, const double &minRho) const
const MagneticField * magfield
def ls(path, rec=False)
Definition: eostools.py:349
unsigned int size() const override

Member Data Documentation

◆ chargeThresholds_

std::vector<int32_t> SimpleCosmicBONSeeder::chargeThresholds_
private

Definition at line 92 of file SimpleCosmicBONSeeder.h.

Referenced by checkCharge(), and SimpleCosmicBONSeeder().

◆ check_

ClusterChecker SimpleCosmicBONSeeder::check_
private

Definition at line 84 of file SimpleCosmicBONSeeder.h.

Referenced by produce().

◆ checkCharge_

bool SimpleCosmicBONSeeder::checkCharge_
private

Definition at line 90 of file SimpleCosmicBONSeeder.h.

Referenced by SimpleCosmicBONSeeder(), and triplets().

◆ checkMaxHitsPerModule_

bool SimpleCosmicBONSeeder::checkMaxHitsPerModule_
private

Definition at line 93 of file SimpleCosmicBONSeeder.h.

Referenced by SimpleCosmicBONSeeder(), and triplets().

◆ cloner

TkClonerImpl SimpleCosmicBONSeeder::cloner
private

Definition at line 79 of file SimpleCosmicBONSeeder.h.

Referenced by init(), and seeds().

◆ goodHitsPerSeed_

int SimpleCosmicBONSeeder::goodHitsPerSeed_
private

Definition at line 89 of file SimpleCosmicBONSeeder.h.

Referenced by SimpleCosmicBONSeeder(), and triplets().

◆ helixVerbosity_

uint32_t SimpleCosmicBONSeeder::helixVerbosity_
private

Definition at line 75 of file SimpleCosmicBONSeeder.h.

Referenced by pqFromHelixFit(), and triplets().

◆ hitTriplets

OrderedHitTriplets SimpleCosmicBONSeeder::hitTriplets
private

Definition at line 87 of file SimpleCosmicBONSeeder.h.

Referenced by produce(), seeds(), and triplets().

◆ magfield

const MagneticField* SimpleCosmicBONSeeder::magfield
private

Definition at line 77 of file SimpleCosmicBONSeeder.h.

Referenced by init(), pqFromHelixFit(), produce(), seeds(), and triplets().

◆ magfieldToken_

const edm::ESGetToken<MagneticField, IdealMagneticFieldRecord> SimpleCosmicBONSeeder::magfieldToken_
private

Definition at line 65 of file SimpleCosmicBONSeeder.h.

Referenced by produce().

◆ matchedRecHitUsesAnd_

bool SimpleCosmicBONSeeder::matchedRecHitUsesAnd_
private

Definition at line 91 of file SimpleCosmicBONSeeder.h.

Referenced by checkCharge(), and SimpleCosmicBONSeeder().

◆ maxHitsPerModule_

std::vector<int32_t> SimpleCosmicBONSeeder::maxHitsPerModule_
private

Definition at line 94 of file SimpleCosmicBONSeeder.h.

Referenced by checkNoisyModules(), and SimpleCosmicBONSeeder().

◆ maxSeeds_

int32_t SimpleCosmicBONSeeder::maxSeeds_
private

Definition at line 85 of file SimpleCosmicBONSeeder.h.

Referenced by seeds().

◆ maxTriplets_

int32_t SimpleCosmicBONSeeder::maxTriplets_
private

Definition at line 85 of file SimpleCosmicBONSeeder.h.

Referenced by triplets().

◆ negativeYOnly

bool SimpleCosmicBONSeeder::negativeYOnly
private

Definition at line 101 of file SimpleCosmicBONSeeder.h.

Referenced by SimpleCosmicBONSeeder(), and triplets().

◆ pMin_

double SimpleCosmicBONSeeder::pMin_
private

Definition at line 69 of file SimpleCosmicBONSeeder.h.

Referenced by seeds(), and SimpleCosmicBONSeeder().

◆ positiveYOnly

bool SimpleCosmicBONSeeder::positiveYOnly
private

Definition at line 100 of file SimpleCosmicBONSeeder.h.

Referenced by SimpleCosmicBONSeeder(), and triplets().

◆ region_

GlobalTrackingRegion SimpleCosmicBONSeeder::region_
private

Definition at line 68 of file SimpleCosmicBONSeeder.h.

Referenced by seeds(), SimpleCosmicBONSeeder(), and triplets().

◆ rescaleError_

double SimpleCosmicBONSeeder::rescaleError_
private

Definition at line 73 of file SimpleCosmicBONSeeder.h.

Referenced by seeds().

◆ seedingLayerToken_

const edm::EDGetTokenT<SeedingLayerSetsHits> SimpleCosmicBONSeeder::seedingLayerToken_
private

Definition at line 64 of file SimpleCosmicBONSeeder.h.

Referenced by triplets().

◆ seedOnMiddle_

bool SimpleCosmicBONSeeder::seedOnMiddle_
private

Definition at line 72 of file SimpleCosmicBONSeeder.h.

Referenced by seeds().

◆ seedVerbosity_

uint32_t SimpleCosmicBONSeeder::seedVerbosity_
private

Definition at line 75 of file SimpleCosmicBONSeeder.h.

Referenced by seeds().

◆ thePropagatorAl

PropagatorWithMaterial* SimpleCosmicBONSeeder::thePropagatorAl
private

Definition at line 81 of file SimpleCosmicBONSeeder.h.

Referenced by done(), init(), and seeds().

◆ thePropagatorOp

PropagatorWithMaterial* SimpleCosmicBONSeeder::thePropagatorOp
private

Definition at line 82 of file SimpleCosmicBONSeeder.h.

Referenced by done(), init(), and seeds().

◆ theUpdator

KFUpdator* SimpleCosmicBONSeeder::theUpdator
private

Definition at line 80 of file SimpleCosmicBONSeeder.h.

Referenced by done(), init(), and seeds().

◆ tracker

const TrackerGeometry* SimpleCosmicBONSeeder::tracker
private

Definition at line 78 of file SimpleCosmicBONSeeder.h.

Referenced by init(), and seeds().

◆ trackerToken_

const edm::ESGetToken<TrackerGeometry, TrackerDigiGeometryRecord> SimpleCosmicBONSeeder::trackerToken_
private

Definition at line 66 of file SimpleCosmicBONSeeder.h.

Referenced by init().

◆ tripletsVerbosity_

uint32_t SimpleCosmicBONSeeder::tripletsVerbosity_
private

Definition at line 75 of file SimpleCosmicBONSeeder.h.

Referenced by checkCharge(), checkNoisyModules(), goodTriplet(), and triplets().

◆ ttrhBuilderToken_

const edm::ESGetToken<TransientTrackingRecHitBuilder, TransientRecHitRecord> SimpleCosmicBONSeeder::ttrhBuilderToken_
private

Definition at line 67 of file SimpleCosmicBONSeeder.h.

Referenced by init().

◆ writeTriplets_

bool SimpleCosmicBONSeeder::writeTriplets_
private

Definition at line 70 of file SimpleCosmicBONSeeder.h.

Referenced by produce(), and SimpleCosmicBONSeeder().