CMS 3D CMS Logo

ConvBremSeedProducer.cc
Go to the documentation of this file.
49 
50 #include "TMath.h"
51 
52 #include <memory>
53 
55 public:
56  explicit ConvBremSeedProducer(const edm::ParameterSet&);
57 
58  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
59 
60 private:
61  void beginRun(const edm::Run&, const edm::EventSetup&) override;
62  void produce(edm::Event&, const edm::EventSetup&) override;
63  void endRun(const edm::Run&, const edm::EventSetup&) override;
64  void initializeLayerMap();
65  std::vector<const DetLayer*> theLayerMap;
67  const ParticlePropagator& pp,
68  const MagneticField* field) const;
69  const DetLayer* detLayer(const TrackerLayer& layer, float zpos) const;
70 
71  bool isGsfTrack(const reco::Track&, const TrackingRecHit*);
72 
73  int GoodCluster(const BaseParticlePropagator& bpg,
74  const reco::PFClusterCollection& pfc,
75  float minep,
76  bool sec = false);
77 
78  std::vector<bool> sharedHits(const std::vector<std::pair<TrajectorySeed, std::pair<GlobalVector, float> > >&);
79 
85 
94  std::vector<const DetLayer*> layerMap_;
98 
99  // Event setup tokens
107 };
108 
111 
113  // convBremSeeds
115  desc.add<edm::InputTag>("pixelRecHits", edm::InputTag("gsPixelRecHits"));
116  desc.add<edm::InputTag>("matchedrecHits", edm::InputTag("gsStripRecHits", "matchedRecHit"));
117  desc.add<std::string>("TTRHBuilder", "WithTrackAngle");
118  desc.add<edm::InputTag>("rphirecHits", edm::InputTag("gsStripRecHits", "rphiRecHit"));
119  desc.add<edm::InputTag>("PFClusters", edm::InputTag("particleFlowClusterECAL"));
120  desc.add<edm::InputTag>("PFRecTrackLabel", edm::InputTag("pfTrackElec"));
121 }
122 
123 using namespace edm;
124 using namespace std;
125 using namespace reco;
126 
128  : pfToken_(consumes<reco::PFClusterCollection>(iConfig.getParameter<InputTag>("PFClusters"))),
129  pixelHitsToken_(consumes<SiPixelRecHitCollection>(iConfig.getParameter<InputTag>("pixelRecHits"))),
130  rphirecHitsToken_(consumes<SiStripRecHit2DCollection>(iConfig.getParameter<InputTag>("rphirecHits"))),
131  matchedrecHitsToken_(
132  consumes<SiStripMatchedRecHit2DCollection>(iConfig.getParameter<InputTag>("matchedrecHits"))),
133  thePfRecTrackToken_(consumes<reco::GsfPFRecTrackCollection>(iConfig.getParameter<InputTag>("PFRecTrackLabel"))),
134  fieldMap_(nullptr),
135  layerMap_(56, static_cast<const DetLayer*>(nullptr)),
136  negLayerOffset_(27),
137  magFieldToken_(esConsumes()),
138  geomSearchTrackerToken_(esConsumes<edm::Transition::BeginRun>()),
139  geometryToken_(esConsumes<edm::Transition::BeginRun>()),
140  trackerToken_(esConsumes<edm::Transition::BeginRun>()),
141  magFieldToken_beginRun_(esConsumes<edm::Transition::BeginRun>()),
142  magFieldMapToken_(esConsumes<edm::Transition::BeginRun>()),
143  hitBuilderToken_(
144  esConsumes<edm::Transition::BeginRun>(edm::ESInputTag("", iConfig.getParameter<string>("TTRHBuilder")))) {
145  produces<ConvBremSeedCollection>();
146 }
147 
149  LogDebug("ConvBremSeedProducerProducer") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run();
150 
151  constexpr float pfmass = 0.0005;
152 
154 
156  const auto& PPP = iEvent.get(pfToken_);
157 
159  const auto& pixelHits = iEvent.getHandle(pixelHitsToken_);
160 
162  const auto& rphirecHits = iEvent.getHandle(rphirecHitsToken_);
163  const auto& matchedrecHits = iEvent.getHandle(matchedrecHitsToken_);
164 
165  //GSFPFRECTRACKS
166  const auto& thePfRecTrackCollection = iEvent.getHandle(thePfRecTrackToken_);
167  const auto& PfRTkColl = *thePfRecTrackCollection;
168 
170  auto output = std::make_unique<ConvBremSeedCollection>();
171 
173  vector<pair<TrajectorySeed, pair<GlobalVector, float> > > unclean;
174  //TRIPLET OF MODULES TO BE USED FOR SEEDING
175  vector<vector<long int> > tripl;
176  //LAYER MAP
178 
180 
181  for (unsigned int ipft = 0; ipft < PfRTkColl.size(); ipft++) {
182  GsfPFRecTrackRef pft(thePfRecTrackCollection, ipft);
183  LogDebug("ConvBremSeedProducerProducer") << "NEW GsfPFRecTRACK ";
184  float eta_br = 0;
185  unclean.clear();
186  tripl.clear();
187  vector<int> gc;
188  auto const& gsfRecHits = *pft->gsfTrackRef();
189  float pfoutenergy = sqrt((pfmass * pfmass) + pft->gsfTrackRef()->outerMomentum().Mag2());
190  XYZTLorentzVector mom = XYZTLorentzVector(pft->gsfTrackRef()->outerMomentum().x(),
191  pft->gsfTrackRef()->outerMomentum().y(),
192  pft->gsfTrackRef()->outerMomentum().z(),
193  pfoutenergy);
194  XYZTLorentzVector pos = XYZTLorentzVector(pft->gsfTrackRef()->outerPosition().x(),
195  pft->gsfTrackRef()->outerPosition().y(),
196  pft->gsfTrackRef()->outerPosition().z(),
197  0.);
198  BaseParticlePropagator theOutParticle =
199  BaseParticlePropagator(RawParticle(mom, pos, pft->gsfTrackRef()->charge()), 0, 0, B_.z());
200 
202  gc.push_back(GoodCluster(theOutParticle, PPP, 0.5));
203 
204  vector<PFBrem> brem = (*pft).PFRecBrem();
205  vector<PFBrem>::iterator ib = brem.begin();
206  vector<PFBrem>::iterator ib_end = brem.end();
207  LogDebug("ConvBremSeedProducerProducer") << "NUMBER OF BREMS " << brem.size();
208 
210  for (; ib != ib_end; ++ib) {
211  XYZTLorentzVector mom = pft->trajectoryPoint(ib->indTrajPoint()).momentum();
212  XYZTLorentzVector pos = XYZTLorentzVector(pft->trajectoryPoint(ib->indTrajPoint()).position().x(),
213  pft->trajectoryPoint(ib->indTrajPoint()).position().y(),
214  pft->trajectoryPoint(ib->indTrajPoint()).position().z(),
215  0);
216 
218  if (pos.Rho() > 80)
219  continue;
220  if ((pos.Rho() > 5) && (fabs(ib->SigmaDeltaP() / ib->DeltaP()) > 3))
221  continue;
222  if (fabs(ib->DeltaP()) < 3)
223  continue;
224  eta_br = mom.eta();
225  vector<vector<long int> > Idd;
226 
227  BaseParticlePropagator p(RawParticle(mom, pos, 0.), 0, 0, B_.z());
228  gc.push_back(GoodCluster(p, PPP, 0.2));
229 
230  ParticlePropagator PP(p, fieldMap_, nullptr);
231 
233  list<TrackerLayer>::const_iterator cyliter = geometry_->cylinderBegin();
234  for (; cyliter != geometry_->cylinderEnd(); ++cyliter) {
236  if (!(cyliter->sensitive()))
237  continue;
238  PP.setPropagationConditions(*cyliter);
239  PP.propagate();
240  if (PP.getSuccess() == 0)
241  continue;
242 
245  AnalyticalPropagator alongProp(&mf, anyDirection);
247  const DetLayer* tkLayer = detLayer(*cyliter, PP.particle().Z());
248  if (&(*tkLayer) == nullptr)
249  continue;
250  TrajectoryStateOnSurface trajState = makeTrajectoryState(tkLayer, PP, &mf);
251 
252  auto compat = tkLayer->compatibleDets(trajState, alongProp, est);
253  vector<long int> temp;
254  if (compat.empty())
255  continue;
256 
257  for (auto i = compat.begin(); i != compat.end(); i++) {
258  long int detid = i->first->geographicalId().rawId();
259 
261  auto DetMatch = (rphirecHits.product())->find((detid));
262  auto MDetMatch = (matchedrecHits.product())->find((detid));
263 
264  long int DetID = (DetMatch != rphirecHits->end()) ? detid : 0;
265 
266  if ((MDetMatch != matchedrecHits->end()) && !MDetMatch->empty()) {
267  long int pii = MDetMatch->begin()->monoId();
268  auto CDetMatch = (rphirecHits.product())->find((pii));
269  DetID = (CDetMatch != rphirecHits->end()) ? pii : 0;
270  }
271 
272  temp.push_back(DetID);
273 
274  } else {
275  auto DetMatch = (pixelHits.product())->find((detid));
276  long int DetID = (DetMatch != pixelHits->end()) ? detid : 0;
277  temp.push_back(DetID);
278  }
279  }
280 
281  Idd.push_back(temp);
282 
283  } //END TRACKER LAYER LOOP
284  if (Idd.size() < 2)
285  continue;
286 
288  for (unsigned int i = 0; i < Idd.size() - 2; i++) {
289  for (unsigned int i1 = 0; i1 < Idd[i].size(); i1++) {
290  for (unsigned int i2 = 0; i2 < Idd[i + 1].size(); i2++) {
291  for (unsigned int i3 = 0; i3 < Idd[i + 2].size(); i3++) {
292  if ((Idd[i][i1] != 0) && (Idd[i + 1][i2] != 0) && (Idd[i + 2][i3] != 0)) {
293  vector<long int> tmp;
294  tmp.push_back(Idd[i][i1]);
295  tmp.push_back(Idd[i + 1][i2]);
296  tmp.push_back(Idd[i + 2][i3]);
297 
298  bool newTrip = true;
299  for (unsigned int iv = 0; iv < tripl.size(); iv++) {
300  if ((tripl[iv][0] == tmp[0]) && (tripl[iv][1] == tmp[1]) && (tripl[iv][2] == tmp[2]))
301  newTrip = false;
302  }
303  if (newTrip) {
304  tripl.push_back(tmp);
305  }
306  }
307  }
308  }
309  }
310  }
311  } //END BREM LOOP
312 
313  float sineta_brem = sinh(eta_br);
314 
315  //OUTPUT COLLECTION
316  auto bfield = iSetup.getHandle(magFieldToken_);
317  float nomField = bfield->nominalValue();
318 
320  OwnVector<TrackingRecHit> loc_hits;
321  for (unsigned int i = 0; i < tripl.size(); i++) {
322  auto DetMatch1 = (rphirecHits.product())->find(tripl[i][0]);
323  auto DetMatch2 = (rphirecHits.product())->find(tripl[i][1]);
324  auto DetMatch3 = (rphirecHits.product())->find(tripl[i][2]);
325  if ((DetMatch1 == rphirecHits->end()) || (DetMatch2 == rphirecHits->end()) || (DetMatch3 == rphirecHits->end()))
326  continue;
327  auto DetSet1 = *DetMatch1;
328  auto DetSet2 = *DetMatch2;
329  auto DetSet3 = *DetMatch3;
330 
331  for (auto it1 = DetSet1.begin(); it1 != DetSet1.end(); ++it1) {
332  GlobalPoint gp1 = tracker_->idToDet(tripl[i][0])->surface().toGlobal(it1->localPosition());
333 
334  bool tak1 = isGsfTrack(gsfRecHits, &(*it1));
335 
336  for (auto it2 = DetSet2.begin(); it2 != DetSet2.end(); ++it2) {
337  GlobalPoint gp2 = tracker_->idToDet(tripl[i][1])->surface().toGlobal(it2->localPosition());
338  bool tak2 = isGsfTrack(gsfRecHits, &(*it2));
339 
340  for (auto it3 = DetSet3.begin(); it3 != DetSet3.end(); ++it3) {
341  // ips++;
342  GlobalPoint gp3 = tracker_->idToDet(tripl[i][2])->surface().toGlobal(it3->localPosition());
343  bool tak3 = isGsfTrack(gsfRecHits, &(*it3));
344 
345  FastHelix helix(gp3, gp2, gp1, nomField, &*bfield);
346  GlobalVector gv = helix.stateAtVertex().momentum();
347  GlobalVector gv_corr(gv.x(), gv.y(), gv.perp() * sineta_brem);
348  float ene = sqrt(gv_corr.mag2() + (pfmass * pfmass));
349 
350  GlobalPoint gp = helix.stateAtVertex().position();
351  float ch = helix.stateAtVertex().charge();
352 
353  XYZTLorentzVector mom = XYZTLorentzVector(gv.x(), gv.y(), gv_corr.z(), ene);
354  XYZTLorentzVector pos = XYZTLorentzVector(gp.x(), gp.y(), gp.z(), 0.);
355  BaseParticlePropagator theOutParticle(RawParticle(mom, pos, ch), 0, 0, B_.z());
356  int bgc = GoodCluster(theOutParticle, PPP, 0.3, true);
357 
358  if (gv.perp() < 0.5)
359  continue;
360 
361  if (tak1 + tak2 + tak3 > 2)
362  continue;
363 
364  if (bgc == -1)
365  continue;
366  bool clTak = false;
367  for (unsigned int igcc = 0; igcc < gc.size(); igcc++) {
368  if (clTak)
369  continue;
370  if (bgc == gc[igcc])
371  clTak = true;
372  }
373  if (clTak)
374  continue;
375 
376  GlobalTrajectoryParameters Gtp(gp1, gv, int(ch), &(*magfield_));
377  glob_hits.clear();
378  loc_hits.clear();
379  glob_hits.push_back(hitBuilder_->build(it1->clone()));
380  glob_hits.push_back(hitBuilder_->build(it2->clone()));
381  glob_hits.push_back(hitBuilder_->build(it3->clone()));
382 
384 
386  TrajectoryStateOnSurface updatedState;
387 
388  for (int ih = 0; ih < 3; ih++) {
390  (ih == 0) ? propagator_->propagate(CSeed, tracker_->idToDet(tripl[i][ih])->surface())
391  : propagator_->propagate(updatedState, tracker_->idToDet(tripl[i][ih])->surface());
392 
393  if (!state.isValid()) {
394  ih = 3;
395  continue;
396  }
397 
398  updatedState = kfUpdator_->update(state, *glob_hits[ih]);
399  loc_hits.push_back(glob_hits[ih]->hit()->clone());
400  if (ih == 2) {
401  PTrajectoryStateOnDet const& PTraj =
402  trajectoryStateTransform::persistentState(updatedState, tripl[i][2]);
403  // output->push_back(Trajectoryseed(PTraj,loc_hits,alongMomentum));
404  unclean.push_back(make_pair(TrajectorySeed(PTraj, loc_hits, alongMomentum), make_pair(gv_corr, ch)));
405  }
406  // }
407  }
408  }
409  }
410  }
411  }
412  vector<bool> inPhot = sharedHits(unclean);
413  for (unsigned int iu = 0; iu < unclean.size(); iu++) {
414  if (inPhot[iu])
415  output->push_back(ConvBremSeed(unclean[iu].first, pft));
416  }
417 
418  } //END GSF TRACK COLLECTION LOOP
419  LogDebug("ConvBremSeedProducerProducer") << "END";
420  iEvent.put(std::move(output));
421 }
422 
425 
426  geometry_ = &iSetup.getData(geometryToken_);
427 
428  tracker_ = &iSetup.getData(trackerToken_);
429 
431  B_ = magfield_->inTesla(GlobalPoint(0, 0, 0));
432 
434 
436 
438  kfUpdator_ = new KFUpdator();
439 }
440 
442  delete propagator_;
443  delete kfUpdator_;
444 }
445 
447  // These are the BoundSurface&, the BoundDisk* and the BoundCylinder* for that layer
448  // const BoundSurface& theSurface = layer.surface();
449  // BoundDisk* theDisk = layer.disk(); // non zero for endcaps
450  // BoundCylinder* theCylinder = layer.cylinder(); // non zero for barrel
451  // int theLayer = layer.layerNumber(); // 1->3 PixB, 4->5 PixD,
452  // // 6->9 TIB, 10->12 TID,
453  // // 13->18 TOB, 19->27 TEC
454 
457 
458  const std::vector<const BarrelDetLayer*>& barrelLayers = geomSearchTracker_->barrelLayers();
459  LogDebug("FastTracker") << "Barrel DetLayer dump: ";
460  for (auto bl = barrelLayers.begin(); bl != barrelLayers.end(); ++bl) {
461  LogDebug("FastTracker") << "radius " << (**bl).specificSurface().radius();
462  }
463 
464  const std::vector<const ForwardDetLayer*>& posForwardLayers = geomSearchTracker_->posForwardLayers();
465  LogDebug("FastTracker") << "Positive Forward DetLayer dump: ";
466  for (auto fl = posForwardLayers.begin(); fl != posForwardLayers.end(); ++fl) {
467  LogDebug("FastTracker") << "Z pos " << (**fl).surface().position().z() << " radii "
468  << (**fl).specificSurface().innerRadius() << ", " << (**fl).specificSurface().outerRadius();
469  }
470 
471  const float rTolerance = 1.5;
472  const float zTolerance = 3.;
473 
474  LogDebug("FastTracker") << "Dump of TrackerInteractionGeometry cylinders:";
475  for (std::list<TrackerLayer>::const_iterator i = geometry_->cylinderBegin(); i != geometry_->cylinderEnd(); ++i) {
476  const BoundCylinder* cyl = i->cylinder();
477  const BoundDisk* disk = i->disk();
478 
479  LogDebug("FastTracker") << "Famos Layer no " << i->layerNumber() << " is sensitive? " << i->sensitive() << " pos "
480  << i->surface().position();
481  if (!i->sensitive())
482  continue;
483 
484  if (cyl != nullptr) {
485  LogDebug("FastTracker") << " cylinder radius " << cyl->radius();
486  bool found = false;
487 
488  for (auto bl = barrelLayers.begin(); bl != barrelLayers.end(); ++bl) {
489  if (fabs(cyl->radius() - (**bl).specificSurface().radius()) < rTolerance) {
490  layerMap_[i->layerNumber()] = *bl;
491  found = true;
492  LogDebug("FastTracker") << "Corresponding DetLayer found with radius " << (**bl).specificSurface().radius();
493 
494  break;
495  }
496  }
497  if (!found) {
498  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
499  }
500  } else {
501  LogDebug("FastTracker") << " disk radii " << disk->innerRadius() << ", " << disk->outerRadius();
502 
503  bool found = false;
504 
505  for (auto fl = posForwardLayers.begin(); fl != posForwardLayers.end(); ++fl) {
506  if (fabs(disk->position().z() - (**fl).surface().position().z()) < zTolerance) {
507  layerMap_[i->layerNumber()] = *fl;
508  found = true;
509  LogDebug("FastTracker") << "Corresponding DetLayer found with Z pos " << (**fl).surface().position().z()
510  << " and radii " << (**fl).specificSurface().innerRadius() << ", "
511  << (**fl).specificSurface().outerRadius();
512  break;
513  }
514  }
515  if (!found) {
516  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
517  }
518  }
519  }
520 }
521 const DetLayer* ConvBremSeedProducer::detLayer(const TrackerLayer& layer, float zpos) const {
522  if (zpos > 0 || !layer.forward())
523  return layerMap_[layer.layerNumber()];
524  else
525  return layerMap_[layer.layerNumber() + negLayerOffset_];
526 }
527 
529  const ParticlePropagator& pp,
530  const MagneticField* field) const {
531  GlobalPoint pos(pp.particle().X(), pp.particle().Y(), pp.particle().Z());
532  GlobalVector mom(pp.particle().Px(), pp.particle().Py(), pp.particle().Pz());
533 
534  auto plane = layer->surface().tangentPlane(pos);
535 
536  return TrajectoryStateOnSurface(GlobalTrajectoryParameters(pos, mom, TrackCharge(pp.particle().charge()), field),
537  *plane);
538 }
540  bool istaken = false;
541  for (auto const& hit : tkv.recHits()) {
542  if (istaken || !hit->isValid())
543  continue;
544  istaken = hit->sharesInput(h, TrackingRecHit::all);
545  }
546  return istaken;
547 }
548 vector<bool> ConvBremSeedProducer::sharedHits(const vector<pair<TrajectorySeed, pair<GlobalVector, float> > >& unclean) {
549  vector<bool> goodseed;
550  goodseed.clear();
551  if (unclean.size() < 2) {
552  for (unsigned int i = 0; i < unclean.size(); i++)
553  goodseed.push_back(true);
554  } else {
555  for (unsigned int i = 0; i < unclean.size(); i++)
556  goodseed.push_back(true);
557 
558  for (unsigned int iu = 0; iu < unclean.size() - 1; iu++) {
559  if (!goodseed[iu])
560  continue;
561  for (unsigned int iu2 = iu + 1; iu2 < unclean.size(); iu2++) {
562  if (!goodseed[iu])
563  continue;
564  if (!goodseed[iu2])
565  continue;
566  // if (unclean[iu].second.second *unclean[iu2].second.second >0)continue;
567 
568  unsigned int shar = 0;
569  for (auto const& sh : unclean[iu].first.recHits()) {
570  for (auto const& sh2 : unclean[iu2].first.recHits()) {
571  if (sh.sharesInput(&sh2, TrackingRecHit::all))
572 
573  shar++;
574  }
575  }
576  if (shar >= 2) {
577  if (unclean[iu].second.first.perp() < unclean[iu2].second.first.perp())
578  goodseed[iu] = false;
579  else
580  goodseed[iu2] = false;
581  }
582  }
583  }
584  }
585  return goodseed;
586 }
587 
589  const PFClusterCollection& pfc,
590  float minep,
591  bool sec) {
592  BaseParticlePropagator bpg = ubpg;
593  bpg.propagateToEcalEntrance(false);
594  float dr = 1000;
595  float de = 1000;
596  float df = 1000;
597  int ibest = -1;
598 
599  if (bpg.getSuccess() != 0) {
600  for (unsigned int i = 0; i < pfc.size(); i++) {
601  float tmp_ep = pfc[i].energy() / bpg.particle().momentum().e();
602  float tmp_phi = fabs(pfc[i].position().phi() - bpg.particle().vertex().phi());
603  if (tmp_phi > TMath::TwoPi())
604  tmp_phi -= TMath::TwoPi();
605  float tmp_eta = fabs(pfc[i].position().eta() - bpg.particle().vertex().eta());
606  float tmp_dr = sqrt(pow(tmp_phi, 2) + pow(tmp_eta, 2));
607  bool isBet = (tmp_dr < dr);
608  if (sec)
609  isBet = (tmp_phi < df);
610  if ((isBet) && (tmp_ep > minep) && (tmp_ep < 10)) {
611  dr = tmp_dr;
612  de = tmp_eta;
613  df = tmp_phi;
614  ibest = i;
615  }
616  }
617  bool isBad = (dr > 0.1);
618  if (sec)
619  isBad = ((df > 0.25) || (de > 0.5));
620 
621  if (isBad)
622  ibest = -1;
623  }
624  return ibest;
625 }
const double TwoPi
const MagneticField * magfield_
const GeometricSearchTracker * geomSearchTracker_
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
const TransientTrackingRecHitBuilder * hitBuilder_
ConvBremSeedProducer(const edm::ParameterSet &)
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > trackerToken_
T perp() const
Definition: PV3DBase.h:69
GlobalTrajectoryParameters stateAtVertex() const
Definition: FastHelix.h:59
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_
TrajectoryStateOnSurface makeTrajectoryState(const DetLayer *layer, const ParticlePropagator &pp, const MagneticField *field) const
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
const edm::ESGetToken< TransientTrackingRecHitBuilder, TransientRecHitRecord > hitBuilderToken_
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
double Z() const
z of vertex
Definition: RawParticle.h:288
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
const edm::ESGetToken< TrackerInteractionGeometry, TrackerInteractionGeometryRecord > geometryToken_
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
const PropagatorWithMaterial * propagator_
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
const edm::EDGetTokenT< SiStripMatchedRecHit2DCollection > matchedrecHitsToken_
const XYZTLorentzVector & momentum() const
the momentum fourvector
Definition: RawParticle.h:321
Log< level::Error, false > LogError
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
const KFUpdator * kfUpdator_
const TrackerInteractionGeometry * geometry_
const MagneticFieldMap * fieldMap_
U second(std::pair< T, U > const &p)
bool isGsfTrack(const reco::Track &, const TrackingRecHit *)
auto recHits() const
Access to reconstructed hits on the track.
Definition: Track.h:85
int TrackCharge
Definition: TrackCharge.h:4
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
void push_back(D *&d)
Definition: OwnVector.h:326
int iEvent
Definition: GenABIO.cc:224
math::XYZVector B_
B field.
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
Definition: KFUpdator.cc:177
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
void produce(edm::Event &, const edm::EventSetup &) override
T sqrt(T t)
Definition: SSEVec.h:23
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
void clear()
Definition: OwnVector.h:481
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
const edm::EDGetTokenT< SiPixelRecHitCollection > pixelHitsToken_
void setPropagationConditions(const TrackerLayer &, bool firstLoop=true)
Transition
Definition: Transition.h:12
RawParticle const & particle() const
The particle being propagated.
std::list< TrackerLayer >::const_iterator cylinderEnd() const
Returns the last pointer in the cylinder list.
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
std::vector< ForwardDetLayer const * > const & posForwardLayers() const
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magFieldToken_beginRun_
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:130
const TrackerGeomDet * idToDet(DetId) const override
bool propagateToEcalEntrance(bool first=true)
std::vector< const DetLayer * > layerMap_
std::vector< ConstRecHitPointer > ConstRecHitContainer
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:79
std::vector< bool > sharedHits(const std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > > &)
const edm::EDGetTokenT< reco::PFClusterCollection > pfToken_
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
std::list< TrackerLayer >::const_iterator cylinderBegin() const
Returns the first pointer in the cylinder list.
int getSuccess() const
Has propagation been performed and was barrel or endcap reached ?
const edm::ESGetToken< MagneticFieldMap, MagneticFieldMapRecord > magFieldMapToken_
const edm::EDGetTokenT< SiStripRecHit2DCollection > rphirecHitsToken_
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
std::vector< BarrelDetLayer const * > const & barrelLayers() const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
TEveGeoShape * clone(const TEveElement *element, TEveElement *parent)
Definition: eve_macros.cc:135
void beginRun(const edm::Run &, const edm::EventSetup &) override
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
void endRun(const edm::Run &, const edm::EventSetup &) override
const DetLayer * detLayer(const TrackerLayer &layer, float zpos) const
fixed size matrix
HLT enums.
std::vector< const DetLayer * > theLayerMap
static int position[264][3]
Definition: ReadPGInfo.cc:289
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
Definition: PFClusterFwd.h:9
Definition: output.py:1
double getMagneticField() const
Get the magnetic field.
int GoodCluster(const BaseParticlePropagator &bpg, const reco::PFClusterCollection &pfc, float minep, bool sec=false)
const TrackerGeometry * tracker_
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
tmp
align.sh
Definition: createJobs.py:716
const edm::ESGetToken< GeometricSearchTracker, TrackerRecoGeometryRecord > geomSearchTrackerToken_
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:29
def move(src, dest)
Definition: eostools.py:511
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
const edm::EDGetTokenT< reco::GsfPFRecTrackCollection > thePfRecTrackToken_
Definition: Run.h:45
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25
ib
Definition: cuy.py:661
const XYZTLorentzVector & vertex() const
the vertex fourvector
Definition: RawParticle.h:320
#define LogDebug(id)