CMS 3D CMS Logo

ConvBremSeedProducer.cc
Go to the documentation of this file.
3 
4 #include "TMath.h"
5 
13 
19 
30 
46 
48 
49 using namespace edm;
50 using namespace std;
51 using namespace reco;
52 
54  : conf_(iConfig), fieldMap_(nullptr), layerMap_(56, static_cast<const DetLayer*>(nullptr)), negLayerOffset_(27) {
55  produces<ConvBremSeedCollection>();
56 }
57 
59 
61  LogDebug("ConvBremSeedProducerProducer") << "START event: " << iEvent.id().event() << " in run " << iEvent.id().run();
62 
63  float pfmass = 0.0005;
64 
66 
69  iEvent.getByLabel(conf_.getParameter<InputTag>("PFClusters"), PfC);
70  const PFClusterCollection& PPP = *(PfC.product());
71 
74  iEvent.getByLabel(conf_.getParameter<InputTag>("pixelRecHits"), pixelHits);
75 
78  iEvent.getByLabel(conf_.getParameter<InputTag>("rphirecHits"), rphirecHits);
80  iEvent.getByLabel(conf_.getParameter<InputTag>("stereorecHits"), stereorecHits);
82  iEvent.getByLabel(conf_.getParameter<InputTag>("matchedrecHits"), matchedrecHits);
83 
84  //GSFPFRECTRACKS
85  Handle<GsfPFRecTrackCollection> thePfRecTrackCollection;
86  iEvent.getByLabel(conf_.getParameter<InputTag>("PFRecTrackLabel"), thePfRecTrackCollection);
87  const GsfPFRecTrackCollection PfRTkColl = *(thePfRecTrackCollection.product());
88 
90  auto output = std::make_unique<ConvBremSeedCollection>();
91 
93  vector<pair<TrajectorySeed, pair<GlobalVector, float> > > unclean;
94  //TRIPLET OF MODULES TO BE USED FOR SEEDING
95  vector<vector<long int> > tripl;
96  //LAYER MAP
98 
100 
101  for (unsigned int ipft = 0; ipft < PfRTkColl.size(); ipft++) {
102  GsfPFRecTrackRef pft(thePfRecTrackCollection, ipft);
103  LogDebug("ConvBremSeedProducerProducer") << "NEW GsfPFRecTRACK ";
104  float eta_br = 0;
105  unclean.clear();
106  tripl.clear();
107  vector<int> gc;
108  auto const& gsfRecHits = *pft->gsfTrackRef();
109  float pfoutenergy = sqrt((pfmass * pfmass) + pft->gsfTrackRef()->outerMomentum().Mag2());
110  XYZTLorentzVector mom = XYZTLorentzVector(pft->gsfTrackRef()->outerMomentum().x(),
111  pft->gsfTrackRef()->outerMomentum().y(),
112  pft->gsfTrackRef()->outerMomentum().z(),
113  pfoutenergy);
114  XYZTLorentzVector pos = XYZTLorentzVector(pft->gsfTrackRef()->outerPosition().x(),
115  pft->gsfTrackRef()->outerPosition().y(),
116  pft->gsfTrackRef()->outerPosition().z(),
117  0.);
118  BaseParticlePropagator theOutParticle =
119  BaseParticlePropagator(RawParticle(mom, pos, pft->gsfTrackRef()->charge()), 0, 0, B_.z());
120 
122  gc.push_back(GoodCluster(theOutParticle, PPP, 0.5));
123 
124  vector<PFBrem> brem = (*pft).PFRecBrem();
125  vector<PFBrem>::iterator ib = brem.begin();
126  vector<PFBrem>::iterator ib_end = brem.end();
127  LogDebug("ConvBremSeedProducerProducer") << "NUMBER OF BREMS " << brem.size();
128 
130  for (; ib != ib_end; ++ib) {
131  XYZTLorentzVector mom = pft->trajectoryPoint(ib->indTrajPoint()).momentum();
132  XYZTLorentzVector pos = XYZTLorentzVector(pft->trajectoryPoint(ib->indTrajPoint()).position().x(),
133  pft->trajectoryPoint(ib->indTrajPoint()).position().y(),
134  pft->trajectoryPoint(ib->indTrajPoint()).position().z(),
135  0);
136 
138  if (pos.Rho() > 80)
139  continue;
140  if ((pos.Rho() > 5) && (fabs(ib->SigmaDeltaP() / ib->DeltaP()) > 3))
141  continue;
142  if (fabs(ib->DeltaP()) < 3)
143  continue;
144  eta_br = mom.eta();
145  vector<vector<long int> > Idd;
146 
147  BaseParticlePropagator p(RawParticle(mom, pos, 0.), 0, 0, B_.z());
148  gc.push_back(GoodCluster(p, PPP, 0.2));
149 
150  ParticlePropagator PP(p, fieldMap_, nullptr);
151 
153  list<TrackerLayer>::const_iterator cyliter = geometry_->cylinderBegin();
154  for (; cyliter != geometry_->cylinderEnd(); ++cyliter) {
156  if (!(cyliter->sensitive()))
157  continue;
158  PP.setPropagationConditions(*cyliter);
159  PP.propagate();
160  if (PP.getSuccess() == 0)
161  continue;
162 
165  AnalyticalPropagator alongProp(&mf, anyDirection);
167  const DetLayer* tkLayer = detLayer(*cyliter, PP.particle().Z());
168  if (&(*tkLayer) == nullptr)
169  continue;
170  TrajectoryStateOnSurface trajState = makeTrajectoryState(tkLayer, PP, &mf);
171 
172  std::vector<DetWithState> compat = tkLayer->compatibleDets(trajState, alongProp, est);
173  vector<long int> temp;
174  if (compat.empty())
175  continue;
176 
177  for (std::vector<DetWithState>::const_iterator i = compat.begin(); i != compat.end(); i++) {
178  long int detid = i->first->geographicalId().rawId();
179 
181  StDetMatch DetMatch = (rphirecHits.product())->find((detid));
182  MatDetMatch MDetMatch = (matchedrecHits.product())->find((detid));
183 
184  long int DetID = (DetMatch != rphirecHits->end()) ? detid : 0;
185 
186  if ((MDetMatch != matchedrecHits->end()) && !MDetMatch->empty()) {
187  long int pii = MDetMatch->begin()->monoId();
188  StDetMatch CDetMatch = (rphirecHits.product())->find((pii));
189  DetID = (CDetMatch != rphirecHits->end()) ? pii : 0;
190  }
191 
192  temp.push_back(DetID);
193 
194  } else {
195  PiDetMatch DetMatch = (pixelHits.product())->find((detid));
196  long int DetID = (DetMatch != pixelHits->end()) ? detid : 0;
197  temp.push_back(DetID);
198  }
199  }
200 
201  Idd.push_back(temp);
202 
203  } //END TRACKER LAYER LOOP
204  if (Idd.size() < 2)
205  continue;
206 
208  for (unsigned int i = 0; i < Idd.size() - 2; i++) {
209  for (unsigned int i1 = 0; i1 < Idd[i].size(); i1++) {
210  for (unsigned int i2 = 0; i2 < Idd[i + 1].size(); i2++) {
211  for (unsigned int i3 = 0; i3 < Idd[i + 2].size(); i3++) {
212  if ((Idd[i][i1] != 0) && (Idd[i + 1][i2] != 0) && (Idd[i + 2][i3] != 0)) {
213  vector<long int> tmp;
214  tmp.push_back(Idd[i][i1]);
215  tmp.push_back(Idd[i + 1][i2]);
216  tmp.push_back(Idd[i + 2][i3]);
217 
218  bool newTrip = true;
219  for (unsigned int iv = 0; iv < tripl.size(); iv++) {
220  if ((tripl[iv][0] == tmp[0]) && (tripl[iv][1] == tmp[1]) && (tripl[iv][2] == tmp[2]))
221  newTrip = false;
222  }
223  if (newTrip) {
224  tripl.push_back(tmp);
225  }
226  }
227  }
228  }
229  }
230  }
231  } //END BREM LOOP
232 
233  float sineta_brem = sinh(eta_br);
234 
235  //OUTPUT COLLECTION
237  iSetup.get<IdealMagneticFieldRecord>().get(bfield);
238  float nomField = bfield->nominalValue();
239 
241  OwnVector<TrackingRecHit> loc_hits;
242  for (unsigned int i = 0; i < tripl.size(); i++) {
243  StDetMatch DetMatch1 = (rphirecHits.product())->find(tripl[i][0]);
244  StDetMatch DetMatch2 = (rphirecHits.product())->find(tripl[i][1]);
245  StDetMatch DetMatch3 = (rphirecHits.product())->find(tripl[i][2]);
246  if ((DetMatch1 == rphirecHits->end()) || (DetMatch2 == rphirecHits->end()) || (DetMatch3 == rphirecHits->end()))
247  continue;
248  StDetSet DetSet1 = *DetMatch1;
249  StDetSet DetSet2 = *DetMatch2;
250  StDetSet DetSet3 = *DetMatch3;
251 
252  for (StDetSet::const_iterator it1 = DetSet1.begin(); it1 != DetSet1.end(); ++it1) {
253  GlobalPoint gp1 = tracker_->idToDet(tripl[i][0])->surface().toGlobal(it1->localPosition());
254 
255  bool tak1 = isGsfTrack(gsfRecHits, &(*it1));
256 
257  for (StDetSet::const_iterator it2 = DetSet2.begin(); it2 != DetSet2.end(); ++it2) {
258  GlobalPoint gp2 = tracker_->idToDet(tripl[i][1])->surface().toGlobal(it2->localPosition());
259  bool tak2 = isGsfTrack(gsfRecHits, &(*it2));
260 
261  for (StDetSet::const_iterator it3 = DetSet3.begin(); it3 != DetSet3.end(); ++it3) {
262  // ips++;
263  GlobalPoint gp3 = tracker_->idToDet(tripl[i][2])->surface().toGlobal(it3->localPosition());
264  bool tak3 = isGsfTrack(gsfRecHits, &(*it3));
265 
266  FastHelix helix(gp3, gp2, gp1, nomField, &*bfield);
267  GlobalVector gv = helix.stateAtVertex().momentum();
268  GlobalVector gv_corr(gv.x(), gv.y(), gv.perp() * sineta_brem);
269  float ene = sqrt(gv_corr.mag2() + (pfmass * pfmass));
270 
271  GlobalPoint gp = helix.stateAtVertex().position();
272  float ch = helix.stateAtVertex().charge();
273 
274  XYZTLorentzVector mom = XYZTLorentzVector(gv.x(), gv.y(), gv_corr.z(), ene);
275  XYZTLorentzVector pos = XYZTLorentzVector(gp.x(), gp.y(), gp.z(), 0.);
276  BaseParticlePropagator theOutParticle(RawParticle(mom, pos, ch), 0, 0, B_.z());
277  int bgc = GoodCluster(theOutParticle, PPP, 0.3, true);
278 
279  if (gv.perp() < 0.5)
280  continue;
281 
282  if (tak1 + tak2 + tak3 > 2)
283  continue;
284 
285  if (bgc == -1)
286  continue;
287  bool clTak = false;
288  for (unsigned int igcc = 0; igcc < gc.size(); igcc++) {
289  if (clTak)
290  continue;
291  if (bgc == gc[igcc])
292  clTak = true;
293  }
294  if (clTak)
295  continue;
296 
297  GlobalTrajectoryParameters Gtp(gp1, gv, int(ch), &(*magfield_));
298  glob_hits.clear();
299  loc_hits.clear();
300  glob_hits.push_back(hitBuilder_->build(it1->clone()));
301  glob_hits.push_back(hitBuilder_->build(it2->clone()));
302  glob_hits.push_back(hitBuilder_->build(it3->clone()));
303 
305 
308 
309  for (int ih = 0; ih < 3; ih++) {
311  (ih == 0) ? propagator_->propagate(CSeed, tracker_->idToDet(tripl[i][ih])->surface())
312  : propagator_->propagate(updatedState, tracker_->idToDet(tripl[i][ih])->surface());
313 
314  if (!state.isValid()) {
315  ih = 3;
316  continue;
317  }
318 
319  updatedState = kfUpdator_->update(state, *glob_hits[ih]);
320  loc_hits.push_back(glob_hits[ih]->hit()->clone());
321  if (ih == 2) {
322  PTrajectoryStateOnDet const& PTraj =
323  trajectoryStateTransform::persistentState(updatedState, tripl[i][2]);
324  // output->push_back(Trajectoryseed(PTraj,loc_hits,alongMomentum));
325  unclean.push_back(make_pair(TrajectorySeed(PTraj, loc_hits, alongMomentum), make_pair(gv_corr, ch)));
326  }
327  // }
328  }
329  }
330  }
331  }
332  }
333  vector<bool> inPhot = sharedHits(unclean);
334  for (unsigned int iu = 0; iu < unclean.size(); iu++) {
335  if (inPhot[iu])
336  output->push_back(ConvBremSeed(unclean[iu].first, pft));
337  }
338 
339  } //END GSF TRACK COLLECTION LOOP
340  LogDebug("ConvBremSeedProducerProducer") << "END";
341  iEvent.put(std::move(output));
342 }
343 
346  iSetup.get<TrackerRecoGeometryRecord>().get(track);
347  geomSearchTracker_ = track.product();
348 
349  ESHandle<TrackerInteractionGeometry> theTrackerInteractionGeometry;
350  iSetup.get<TrackerInteractionGeometryRecord>().get(theTrackerInteractionGeometry);
351  geometry_ = theTrackerInteractionGeometry.product();
352 
354  iSetup.get<TrackerDigiGeometryRecord>().get(tracker);
355  tracker_ = tracker.product();
356 
358  iSetup.get<IdealMagneticFieldRecord>().get(magfield);
359  magfield_ = magfield.product();
360  B_ = magfield_->inTesla(GlobalPoint(0, 0, 0));
361 
363  iSetup.get<MagneticFieldMapRecord>().get(fieldMap);
364  fieldMap_ = fieldMap.product();
365 
367  iSetup.get<TransientRecHitRecord>().get(conf_.getParameter<string>("TTRHBuilder"), hitBuilder);
368  hitBuilder_ = hitBuilder.product();
369 
370  propagator_ = new PropagatorWithMaterial(alongMomentum, 0.0005, &(*magfield));
371  kfUpdator_ = new KFUpdator();
372 }
373 
375  delete propagator_;
376  delete kfUpdator_;
377 }
378 
380  // These are the BoundSurface&, the BoundDisk* and the BoundCylinder* for that layer
381  // const BoundSurface& theSurface = layer.surface();
382  // BoundDisk* theDisk = layer.disk(); // non zero for endcaps
383  // BoundCylinder* theCylinder = layer.cylinder(); // non zero for barrel
384  // int theLayer = layer.layerNumber(); // 1->3 PixB, 4->5 PixD,
385  // // 6->9 TIB, 10->12 TID,
386  // // 13->18 TOB, 19->27 TEC
387 
390 
391  const std::vector<const BarrelDetLayer*>& barrelLayers = geomSearchTracker_->barrelLayers();
392  LogDebug("FastTracker") << "Barrel DetLayer dump: ";
393  for (auto bl = barrelLayers.begin(); bl != barrelLayers.end(); ++bl) {
394  LogDebug("FastTracker") << "radius " << (**bl).specificSurface().radius();
395  }
396 
397  const std::vector<const ForwardDetLayer*>& posForwardLayers = geomSearchTracker_->posForwardLayers();
398  LogDebug("FastTracker") << "Positive Forward DetLayer dump: ";
399  for (auto fl = posForwardLayers.begin(); fl != posForwardLayers.end(); ++fl) {
400  LogDebug("FastTracker") << "Z pos " << (**fl).surface().position().z() << " radii "
401  << (**fl).specificSurface().innerRadius() << ", " << (**fl).specificSurface().outerRadius();
402  }
403 
404  const float rTolerance = 1.5;
405  const float zTolerance = 3.;
406 
407  LogDebug("FastTracker") << "Dump of TrackerInteractionGeometry cylinders:";
408  for (std::list<TrackerLayer>::const_iterator i = geometry_->cylinderBegin(); i != geometry_->cylinderEnd(); ++i) {
409  const BoundCylinder* cyl = i->cylinder();
410  const BoundDisk* disk = i->disk();
411 
412  LogDebug("FastTracker") << "Famos Layer no " << i->layerNumber() << " is sensitive? " << i->sensitive() << " pos "
413  << i->surface().position();
414  if (!i->sensitive())
415  continue;
416 
417  if (cyl != nullptr) {
418  LogDebug("FastTracker") << " cylinder radius " << cyl->radius();
419  bool found = false;
420 
421  for (auto bl = barrelLayers.begin(); bl != barrelLayers.end(); ++bl) {
422  if (fabs(cyl->radius() - (**bl).specificSurface().radius()) < rTolerance) {
423  layerMap_[i->layerNumber()] = *bl;
424  found = true;
425  LogDebug("FastTracker") << "Corresponding DetLayer found with radius " << (**bl).specificSurface().radius();
426 
427  break;
428  }
429  }
430  if (!found) {
431  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
432  }
433  } else {
434  LogDebug("FastTracker") << " disk radii " << disk->innerRadius() << ", " << disk->outerRadius();
435 
436  bool found = false;
437 
438  for (auto fl = posForwardLayers.begin(); fl != posForwardLayers.end(); ++fl) {
439  if (fabs(disk->position().z() - (**fl).surface().position().z()) < zTolerance) {
440  layerMap_[i->layerNumber()] = *fl;
441  found = true;
442  LogDebug("FastTracker") << "Corresponding DetLayer found with Z pos " << (**fl).surface().position().z()
443  << " and radii " << (**fl).specificSurface().innerRadius() << ", "
444  << (**fl).specificSurface().outerRadius();
445  break;
446  }
447  }
448  if (!found) {
449  LogError("FastTracker") << "FAILED to find a corresponding DetLayer!";
450  }
451  }
452  }
453 }
454 const DetLayer* ConvBremSeedProducer::detLayer(const TrackerLayer& layer, float zpos) const {
455  if (zpos > 0 || !layer.forward())
456  return layerMap_[layer.layerNumber()];
457  else
458  return layerMap_[layer.layerNumber() + negLayerOffset_];
459 }
460 
462  const ParticlePropagator& pp,
463  const MagneticField* field) const {
464  GlobalPoint pos(pp.particle().X(), pp.particle().Y(), pp.particle().Z());
465  GlobalVector mom(pp.particle().Px(), pp.particle().Py(), pp.particle().Pz());
466 
467  auto plane = layer->surface().tangentPlane(pos);
468 
470  *plane);
471 }
473  bool istaken = false;
474  for (auto const& hit : tkv.recHits()) {
475  if (istaken || !hit->isValid())
476  continue;
477  istaken = hit->sharesInput(h, TrackingRecHit::all);
478  }
479  return istaken;
480 }
481 vector<bool> ConvBremSeedProducer::sharedHits(const vector<pair<TrajectorySeed, pair<GlobalVector, float> > >& unclean) {
482  vector<bool> goodseed;
483  goodseed.clear();
484  if (unclean.size() < 2) {
485  for (unsigned int i = 0; i < unclean.size(); i++)
486  goodseed.push_back(true);
487  } else {
488  for (unsigned int i = 0; i < unclean.size(); i++)
489  goodseed.push_back(true);
490 
491  for (unsigned int iu = 0; iu < unclean.size() - 1; iu++) {
492  if (!goodseed[iu])
493  continue;
494  for (unsigned int iu2 = iu + 1; iu2 < unclean.size(); iu2++) {
495  if (!goodseed[iu])
496  continue;
497  if (!goodseed[iu2])
498  continue;
499  // if (unclean[iu].second.second *unclean[iu2].second.second >0)continue;
500 
501  TrajectorySeed::const_iterator sh = unclean[iu].first.recHits().first;
502  TrajectorySeed::const_iterator sh_end = unclean[iu].first.recHits().second;
503 
504  unsigned int shar = 0;
505  for (; sh != sh_end; ++sh) {
506  TrajectorySeed::const_iterator sh2 = unclean[iu2].first.recHits().first;
507  TrajectorySeed::const_iterator sh2_end = unclean[iu2].first.recHits().second;
508  for (; sh2 != sh2_end; ++sh2) {
509  if ((*sh).sharesInput(&(*sh2), TrackingRecHit::all))
510 
511  shar++;
512  }
513  }
514  if (shar >= 2) {
515  if (unclean[iu].second.first.perp() < unclean[iu2].second.first.perp())
516  goodseed[iu] = false;
517  else
518  goodseed[iu2] = false;
519  }
520  }
521  }
522  }
523  return goodseed;
524 }
525 
527  const PFClusterCollection& pfc,
528  float minep,
529  bool sec) {
530  BaseParticlePropagator bpg = ubpg;
531  bpg.propagateToEcalEntrance(false);
532  float dr = 1000;
533  float de = 1000;
534  float df = 1000;
535  int ibest = -1;
536 
537  if (bpg.getSuccess() != 0) {
538  for (unsigned int i = 0; i < pfc.size(); i++) {
539  float tmp_ep = pfc[i].energy() / bpg.particle().momentum().e();
540  float tmp_phi = fabs(pfc[i].position().phi() - bpg.particle().vertex().phi());
541  if (tmp_phi > TMath::TwoPi())
542  tmp_phi -= TMath::TwoPi();
543  float tmp_eta = fabs(pfc[i].position().eta() - bpg.particle().vertex().eta());
544  float tmp_dr = sqrt(pow(tmp_phi, 2) + pow(tmp_eta, 2));
545  bool isBet = (tmp_dr < dr);
546  if (sec)
547  isBet = (tmp_phi < df);
548  if ((isBet) && (tmp_ep > minep) && (tmp_ep < 10)) {
549  dr = tmp_dr;
550  de = tmp_eta;
551  df = tmp_phi;
552  ibest = i;
553  }
554  }
555  bool isBad = (dr > 0.1);
556  if (sec)
557  isBad = ((df > 0.25) || (de > 0.5));
558 
559  if (isBad)
560  ibest = -1;
561  }
562  return ibest;
563 }
#define LogDebug(id)
RunNumber_t run() const
Definition: EventID.h:38
const double TwoPi
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
const MagneticField * magfield_
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:40
const GeometricSearchTracker * geomSearchTracker_
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
const TransientTrackingRecHitBuilder * hitBuilder_
ConvBremSeedProducer(const edm::ParameterSet &)
const_iterator end(bool update=false) const
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
virtual ConstReferenceCountingPointer< TangentPlane > tangentPlane(const GlobalPoint &) const =0
T perp() const
Definition: PV3DBase.h:69
SiStripMatchedRecHit2DCollection::const_iterator MatDetMatch
std::vector< ForwardDetLayer const * > const & posForwardLayers() const
unsigned int layerNumber() const
Returns the layer number.
Definition: TrackerLayer.h:78
int nominalValue() const
The nominal field value for this map in kGauss.
Definition: MagneticField.h:49
bool forward() const
Is the layer forward ?
Definition: TrackerLayer.h:66
ROOT::Math::SMatrixIdentity AlgebraicMatrixID
virtual SubDetector subDetector() const =0
The type of detector (PixelBarrel, PixelEndcap, TIB, TOB, TID, TEC, CSC, DT, RPCBarrel, RPCEndcap)
edm::ParameterSet conf_
#define nullptr
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
const PropagatorWithMaterial * propagator_
T y() const
Definition: PV3DBase.h:60
std::list< TrackerLayer >::const_iterator cylinderEnd() const
Returns the last pointer in the cylinder list.
int getSuccess() const
Has propagation been performed and was barrel or endcap reached ?
TrajectoryStateOnSurface makeTrajectoryState(const DetLayer *layer, const ParticlePropagator &pp, const MagneticField *field) const
data_type const * const_iterator
Definition: DetSetNew.h:31
RawParticle const & particle() const
The particle being propagated.
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:19
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
SiPixelRecHitCollection::const_iterator PiDetMatch
const KFUpdator * kfUpdator_
const TrackerInteractionGeometry * geometry_
const MagneticFieldMap * fieldMap_
U second(std::pair< T, U > const &p)
bool isGsfTrack(const reco::Track &, const TrackingRecHit *)
int TrackCharge
Definition: TrackCharge.h:4
void push_back(D *&d)
Definition: OwnVector.h:326
TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const override
Definition: KFUpdator.cc:177
int iEvent
Definition: GenABIO.cc:224
const XYZTLorentzVector & momentum() const
the momentum fourvector
Definition: RawParticle.h:321
math::XYZVector B_
B field.
std::vector< GsfPFRecTrack > GsfPFRecTrackCollection
collection of GsfPFRecTrack objects
void produce(edm::Event &, const edm::EventSetup &) override
recHitContainer::const_iterator const_iterator
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
double Y() const
y of vertex
Definition: RawParticle.h:287
void clear()
Definition: OwnVector.h:481
double Py() const
y of the momentum
Definition: RawParticle.h:300
double Z() const
z of vertex
Definition: RawParticle.h:288
auto recHits() const
Access to reconstructed hits on the track.
Definition: Track.h:85
void setPropagationConditions(const TrackerLayer &, bool firstLoop=true)
virtual const BoundSurface & surface() const =0
The surface of the GeometricSearchDet.
double Pz() const
z of the momentum
Definition: RawParticle.h:303
double charge() const
get the MEASURED charge
Definition: RawParticle.h:294
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:488
virtual GlobalVector inTesla(const GlobalPoint &gp) const =0
Field value ad specified global point, in Tesla.
bool propagateToEcalEntrance(bool first=true)
virtual RecHitPointer build(const TrackingRecHit *p) const =0
build a tracking rechit from an existing rechit
std::vector< const DetLayer * > layerMap_
std::vector< ConstRecHitPointer > ConstRecHitContainer
const XYZTLorentzVector & vertex() const
the vertex fourvector
Definition: RawParticle.h:320
std::vector< bool > sharedHits(const std::vector< std::pair< TrajectorySeed, std::pair< GlobalVector, float > > > &)
T const * product() const
Definition: Handle.h:69
const DetLayer * detLayer(const TrackerLayer &layer, float zpos) const
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
std::list< TrackerLayer >::const_iterator cylinderBegin() const
Returns the first pointer in the cylinder list.
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
double X() const
x of vertex
Definition: RawParticle.h:286
void endRun(const edm::Run &, const edm::EventSetup &) override
double getMagneticField() const
Get the magnetic field.
edm::EventID id() const
Definition: EventBase.h:59
fixed size matrix
HLT enums.
iterator end()
Definition: DetSetNew.h:56
static int position[264][3]
Definition: ReadPGInfo.cc:289
T get() const
Definition: EventSetup.h:73
double Px() const
x of the momentum
Definition: RawParticle.h:297
SiStripRecHit2DCollection::const_iterator StDetMatch
const TrackerGeomDet * idToDet(DetId) const override
std::vector< PFCluster > PFClusterCollection
collection of PFCluster objects
Definition: PFClusterFwd.h:9
GlobalTrajectoryParameters stateAtVertex() const
Definition: FastHelix.h:59
int GoodCluster(const BaseParticlePropagator &bpg, const reco::PFClusterCollection &pfc, float minep, bool sec=false)
const TrackerGeometry * tracker_
tmp
align.sh
Definition: createJobs.py:716
T x() const
Definition: PV3DBase.h:59
T const * product() const
Definition: ESHandle.h:86
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
def move(src, dest)
Definition: eostools.py:511
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)
Definition: Run.h:45
math::XYZTLorentzVector XYZTLorentzVector
Definition: RawParticle.h:25
std::vector< BarrelDetLayer const * > const & barrelLayers() const
ib
Definition: cuy.py:662
iterator begin()
Definition: DetSetNew.h:54