CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
FastTSGFromPropagation.cc
Go to the documentation of this file.
2 
18 
21 // #include "RecoTracker/MeasurementDet/interface/TkStripMeasurementDet.h"
25 
28 
32 
42 
44 
45 using namespace std;
46 
48 }
49 
51  theCategory("FastSimulation|Muons|FastTSGFromPropagation"),
52  theTkLayerMeasurements(), theTracker(), theNavigation(), theService(service), theUpdator(), theEstimator(), theSigmaZ(0.0), theConfig (iConfig),
53  theSimTrackCollectionToken_(iC.consumes<edm::SimTrackContainer>(theConfig.getParameter<edm::InputTag>("SimTrackCollectionLabel"))),
54  recHitCombinationsToken_(iC.consumes<FastTrackerRecHitCombinationCollection>(theConfig.getParameter<edm::InputTag>("HitProducer"))),
55  beamSpot_(iC.consumes<reco::BeamSpot>(iConfig.getParameter<edm::InputTag>("beamSpot"))),
56  theMeasurementTrackerEventToken_(iC.consumes<MeasurementTrackerEvent>(iConfig.getParameter<edm::InputTag>("MeasurementTrackerEvent"))) {
57 }
58 
60  LogTrace(theCategory) << " FastTSGFromPropagation dtor called ";
61 }
62 
64  const TrackerTopology *tTopo, std::vector<TrajectorySeed> & result) {
65 
66  if ( theResetMethod == "discrete" ) getRescalingFactor(staMuon);
67 
68  TrajectoryStateOnSurface staState = outerTkState(staMuon);
69 
70  if ( !staState.isValid() ) {
71  LogTrace(theCategory) << "Error: initial state from L2 muon is invalid.";
72  return;
73  }
74 
75  LogTrace(theCategory) << "begin of trackerSeed:\n staState pos: "<<staState.globalPosition()
76  << " mom: "<<staState.globalMomentum()
77  <<"pos eta: "<<staState.globalPosition().eta()
78  <<"mom eta: "<<staState.globalMomentum().eta();
79 
80 
81  std::vector<const DetLayer*> nls = theNavigation->compatibleLayers(*(staState.freeState()), oppositeToMomentum);
82 
83  LogTrace(theCategory) << " compatible layers: "<<nls.size();
84 
85  if ( nls.empty() ) return;
86 
87  int ndesLayer = 0;
88 
89  bool usePredictedState = false;
90 
91  if ( theUpdateStateFlag ) { //use updated states
92  std::vector<TrajectoryMeasurement> alltm;
93 
94  for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
95  inl != nls.end(); inl++, ndesLayer++ ) {
96  if ( (*inl == 0) ) break;
97 // if ( (inl != nls.end()-1 ) && ( (*inl)->subDetector() == GeomDetEnumerators::TEC ) && ( (*(inl+1))->subDetector() == GeomDetEnumerators::TOB ) ) continue;
98  alltm = findMeasurements_new(*inl, staState);
99  if ( (!alltm.empty()) ) {
100  LogTrace(theCategory) << "final compatible layer: "<<ndesLayer;
101  break;
102  }
103  }
104 
105  if ( alltm.empty() ) {
106  LogTrace(theCategory) << " NO Measurements Found: eta: "<<staState.globalPosition().eta() <<"pt "<<staState.globalMomentum().perp();
107  usePredictedState = true;
108  } else {
109  LogTrace(theCategory) << " Measurements for seeds: "<<alltm.size();
110  std::stable_sort(alltm.begin(),alltm.end(),increasingEstimate());
111  if ( alltm.size() > 5 ) alltm.erase(alltm.begin() + 5, alltm.end());
112 
113  const edm::SimTrackContainer* simTracks = &(*theSimTracks);
114  TrajectorySeedHitCandidate theSeedHits;
115  std::vector<TrajectorySeedHitCandidate> outerHits;
116 
117  //std::vector<TrajectorySeed> tmpTS;
118  bool isMatch = false;
119  for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
120  const TrajectoryStateOnSurface seedState = itm->predictedState();
121  double preY = seedState.globalPosition().y();
122 
123  // Check SimTrack
124  TrackingRecHit* aTrackingRecHit;
125  FreeTrajectoryState simtrack_trackerstate;
126  for( unsigned icomb = 0;icomb < recHitCombinations->size();++icomb){
127  const auto & recHitCombination = (*recHitCombinations)[icomb];
128  if(recHitCombination.size() ==0)
129  continue;
130  int32_t simTrackId = recHitCombination.back()->simTrackId(0);
131  const SimTrack & simtrack = (*simTracks)[simTrackId];
132 
134  simtrack.trackerSurfacePosition().y(),
135  simtrack.trackerSurfacePosition().z());
136  GlobalVector momentum(simtrack.trackerSurfaceMomentum().x(),
137  simtrack.trackerSurfaceMomentum().y(),
138  simtrack.trackerSurfaceMomentum().z());
139  int charge = (int)simtrack.charge();
140  GlobalTrajectoryParameters glb_parameters(position, momentum, charge, &*theService->magneticField().product());
141  simtrack_trackerstate = FreeTrajectoryState(glb_parameters);
142 
143  unsigned int outerId = 0;
144  for( const auto & recHitRef : recHitCombination) {
145  theSeedHits = TrajectorySeedHitCandidate(recHitRef.get(), theGeometry, tTopo);
146  unsigned int id = theSeedHits.hit()->geographicalId().rawId();
147  if( preY < 0 ) {
148  if( id > outerId ) outerId = id;
149  }
150  else {
151  if( id > outerId ) outerId = id;
152  }
153  }
154  for( const auto & recHitRef : recHitCombination ) {
155  theSeedHits = TrajectorySeedHitCandidate(recHitRef.get(), theGeometry, tTopo);
156  if( itm->recHit()->hit()->geographicalId().rawId() == theSeedHits.hit()->geographicalId().rawId() ) {
157  aTrackingRecHit = theSeedHits.hit()->clone();
158  TransientTrackingRecHit::ConstRecHitPointer recHit = theTTRHBuilder->build(aTrackingRecHit);
159  if( !recHit ) continue;
160  TrajectoryStateOnSurface updatedTSOS = updator()->update(seedState, *(recHit));
161  if( updatedTSOS.isValid() && passSelection(updatedTSOS) ) {
163  container.push_back(recHit->hit()->clone());
165  TrajectorySeed ts = createSeed(updatedTSOS, container, recHit->geographicalId());
166  // check direction
167  const TrajectorySeed* aSeed = &ts;
168  PTrajectoryStateOnDet PTSOD = aSeed->startingState();
169 
170  const GeomDet *g = theGeometry->idToDet(PTSOD.detId());
171  TrajectoryStateOnSurface tsos = trajectoryStateTransform::transientState(PTSOD, &(g->surface()), &*theService->magneticField().product());
172  if( tsos.globalMomentum().basicVector()*seedState.globalMomentum().basicVector() < 0. ) continue;
173  result.push_back(ts);
174  isMatch = true;
175  }
176  }
177  }
178  }
179  }
180  if( !isMatch ) {
181  // if there is no hits w.r.t. TM, find outermost hit
182  for (std::vector<TrajectoryMeasurement>::const_iterator itm = alltm.begin(); itm != alltm.end(); itm++) {
183  const TrajectoryStateOnSurface seedState = itm->predictedState();
184  double preY = seedState.globalPosition().y();
185 
186  // Check SimTrack
187  TrackingRecHit* aTrackingRecHit;
188  FreeTrajectoryState simtrack_trackerstate;
189 
190  for( unsigned icomb = 0;icomb < recHitCombinations->size();++icomb){
191  const auto & recHitCombination = (*recHitCombinations)[icomb];
192  if(recHitCombination.size() ==0)
193  continue;
194  int32_t simTrackId = recHitCombination.back()->simTrackId(0);
195  const SimTrack & simtrack = (*simTracks)[simTrackId];
196 
198  simtrack.trackerSurfacePosition().y(),
199  simtrack.trackerSurfacePosition().z());
200  GlobalVector momentum(simtrack.trackerSurfaceMomentum().x(),
201  simtrack.trackerSurfaceMomentum().y(),
202  simtrack.trackerSurfaceMomentum().z());
203  int charge = (int)simtrack.charge();
204  GlobalTrajectoryParameters glb_parameters(position, momentum, charge, &*theService->magneticField().product());
205  simtrack_trackerstate = FreeTrajectoryState(glb_parameters);
206 
207  unsigned int outerId = 0;
208  for( const auto & recHitRef : recHitCombination ) {
209  theSeedHits = TrajectorySeedHitCandidate(recHitRef.get(), theGeometry, tTopo);
210  unsigned int id = theSeedHits.hit()->geographicalId().rawId();
211  if( preY < 0 ) {
212  if( id > outerId ) outerId = id;
213  }
214  else {
215  if( id > outerId ) outerId = id;
216  }
217  }
218  for( const auto & recHitRef : recHitCombination ) {
219  theSeedHits = TrajectorySeedHitCandidate(recHitRef.get(), theGeometry, tTopo);
220  if( outerId == theSeedHits.hit()->geographicalId().rawId() ) {
221  aTrackingRecHit = theSeedHits.hit()->clone();
222  TransientTrackingRecHit::ConstRecHitPointer recHit = theTTRHBuilder->build(aTrackingRecHit);
223  if( !recHit ) continue;
224  TrajectoryStateOnSurface updatedTSOS = updator()->update(seedState, *(recHit));
225  if( updatedTSOS.isValid() && passSelection(updatedTSOS) ) {
227  container.push_back(recHit->hit()->clone());
229  TrajectorySeed ts = createSeed(updatedTSOS, container, recHit->geographicalId());
230  // check direction
231  const TrajectorySeed* aSeed = &ts;
232  PTrajectoryStateOnDet PTSOD = aSeed->startingState();
233 
234  const GeomDet *g = theGeometry->idToDet(PTSOD.detId());
235  TrajectoryStateOnSurface tsos = trajectoryStateTransform::transientState(PTSOD, &(g->surface()), &*theService->magneticField().product());
236  if( tsos.globalMomentum().basicVector()*seedState.globalMomentum().basicVector() < 0. ) continue;
237  result.push_back(ts);
238  }
239  }
240  }
241  }
242  }
243  }
244 
245  /*
246  for( unsigned ir = 0; ir < tmpTS.size(); ir++ ) {
247  const BasicTrajectorySeed* aSeed = &((tmpTS)[ir]);
248  PTrajectoryStateOnDet PTSOD = aSeed->startingState();
249 
250  DetId seedDetId(PTSOD.detId());
251  const GeomDet * g = theGeometry->idToDet(seedDetId);
252  TrajectoryStateOnSurface tsos = trajectoryStateTransform::transientState(PTSOD, &(g->surface()), &*theService->magneticField().product());
253  cout << "tsos3 = " << tsos.globalMomentum() << endl;
254  if( _index == ir ) {
255  cout << "tsos4 = " << tsos.globalMomentum() << endl;
256  result.push_back(tmpTS[ir]);
257  }
258  }
259  */
260  LogTrace(theCategory) << "result: "<<result.size();
261  return;
262  }
263  }
264 
265  if ( !theUpdateStateFlag || usePredictedState ) { //use predicted states
266  LogTrace(theCategory) << "use predicted state: ";
267  for (std::vector<const DetLayer*>::const_iterator inl = nls.begin();
268  inl != nls.end(); inl++ ) {
269 
270  if ( !result.empty() || *inl == 0 ) {
271  break;
272  }
273  std::vector<DetLayer::DetWithState> compatDets = (*inl)->compatibleDets(staState, *propagator(), *estimator());
274  LogTrace(theCategory) << " compatDets "<<compatDets.size();
275  if ( compatDets.empty() ) continue;
276  TrajectorySeed ts = createSeed(compatDets.front().second, compatDets.front().first->geographicalId());
277  result.push_back(ts);
278 
279  }
280  LogTrace(theCategory) << "result: "<<result.size();
281  return;
282  }
283  return;
284 }
285 
287 
288  theMaxChi2 = theConfig.getParameter<double>("MaxChi2");
289 
290  theFixedErrorRescaling = theConfig.getParameter<double>("ErrorRescaling");
291 
292  theFlexErrorRescaling = 1.0;
293 
295 
296  if (theResetMethod != "discrete" && theResetMethod != "fixed" && theResetMethod != "matrix" ) {
297  edm::LogError("FastTSGFromPropagation")
298  <<"Wrong error rescaling method: "<<theResetMethod <<"\n"
299  <<"Possible choices are: discrete, fixed, matrix.\n"
300  <<"Use discrete method" <<std::endl;
301  theResetMethod = "discrete";
302  }
303 
305 
306  theCacheId_MT = 0;
307 
308  theCacheId_TG = 0;
309 
311 
312  theService = service;
313 
314  theUseVertexStateFlag = theConfig.getParameter<bool>("UseVertexState");
315 
316  theUpdateStateFlag = theConfig.getParameter<bool>("UpdateState");
317 
318  theSelectStateFlag = theConfig.getParameter<bool>("SelectState");
319 
320  theUpdator.reset(new KFUpdator());
321 
322  theSigmaZ = theConfig.getParameter<double>("SigmaZ");
323 
324  edm::ParameterSet errorMatrixPset = theConfig.getParameter<edm::ParameterSet>("errorMatrixPset");
325  if ( theResetMethod == "matrix" && !errorMatrixPset.empty()){
326  theAdjustAtIp = errorMatrixPset.getParameter<bool>("atIP");
327  theErrorMatrixAdjuster.reset(new MuonErrorMatrix(errorMatrixPset));
328  } else {
329  theAdjustAtIp =false;
330  theErrorMatrixAdjuster.reset();
331  }
332 
333  theService->eventSetup().get<TrackerRecoGeometryRecord>().get(theTracker);
335 
337  theService->eventSetup().get<TrackerDigiGeometryRecord>().get(geometry);
338  theGeometry = &(*geometry);
339 
340  theService->eventSetup().get<TransientRecHitRecord>().get("WithTrackAngle", theTTRHBuilder);
341 
342 }
343 
345 
347 
348  // retrieve the MC truth (SimTracks)
351 
352  unsigned long long newCacheId_MT = theService->eventSetup().get<CkfComponentsRecord>().cacheIdentifier();
353 
354  if ( theUpdateStateFlag && newCacheId_MT != theCacheId_MT ) {
355  LogTrace(theCategory) << "Measurment Tracker Geometry changed!";
356  theCacheId_MT = newCacheId_MT;
357  theService->eventSetup().get<CkfComponentsRecord>().get(theMeasTracker);
358  }
359 
360  if ( theUpdateStateFlag ) {
363  }
364 
365  bool trackerGeomChanged = false;
366 
367  unsigned long long newCacheId_TG = theService->eventSetup().get<TrackerRecoGeometryRecord>().cacheIdentifier();
368 
369  if ( newCacheId_TG != theCacheId_TG ) {
370  LogTrace(theCategory) << "Tracker Reco Geometry changed!";
371  theCacheId_TG = newCacheId_TG;
372  theService->eventSetup().get<TrackerRecoGeometryRecord>().get(theTracker);
373  trackerGeomChanged = true;
374  }
375 
376  if ( trackerGeomChanged && (&*theTracker) ) {
378  }
379 }
380 
382 
383  TrajectoryStateOnSurface innerTS;
384 
385  if ( staMuon.first && staMuon.first->isValid() ) {
386  if (staMuon.first->direction() == alongMomentum) {
387  innerTS = staMuon.first->firstMeasurement().updatedState();
388  }
389  else if (staMuon.first->direction() == oppositeToMomentum) {
390  innerTS = staMuon.first->lastMeasurement().updatedState();
391  }
392  } else {
393  innerTS = trajectoryStateTransform::innerStateOnSurface(*(staMuon.second),*theService->trackingGeometry(), &*theService->magneticField());
394  }
395  //rescale the error
396  adjust(innerTS);
397 
398  return innerTS;
399 
400 }
401 
403 
405 
406  if ( theUseVertexStateFlag && staMuon.second->pt() > 1.0 ) {
407  FreeTrajectoryState iniState = trajectoryStateTransform::initialFreeState(*(staMuon.second), &*theService->magneticField());
408  //rescale the error at IP
409  adjust(iniState);
410 
411  StateOnTrackerBound fromInside(&*(theService->propagator("PropagatorWithMaterial")));
412  result = fromInside(iniState);
413  } else {
414  StateOnTrackerBound fromOutside(&*propagator());
415  result = fromOutside(innerState(staMuon));
416  }
417  return result;
418 }
419 
421 
423  return createSeed(tsos, container, id);
424 
425 }
426 
428 
430  return TrajectorySeed(seedTSOS,container,oppositeToMomentum);
431 
432 }
433 
434 
435 void FastTSGFromPropagation::validMeasurements(std::vector<TrajectoryMeasurement>& tms) const {
436 
437  std::vector<TrajectoryMeasurement>::iterator tmsend = std::remove_if(tms.begin(), tms.end(), isInvalid());
438  tms.erase(tmsend, tms.end());
439  return;
440 
441 }
442 
443 std::vector<TrajectoryMeasurement> FastTSGFromPropagation::findMeasurements_new(const DetLayer* nl, const TrajectoryStateOnSurface& staState) const {
444 
445  std::vector<TrajectoryMeasurement> result;
446 
447  std::vector<DetLayer::DetWithState> compatDets = nl->compatibleDets(staState, *propagator(), *estimator());
448  if ( compatDets.empty() ) return result;
449 
450  for (std::vector<DetLayer::DetWithState>::const_iterator idws = compatDets.begin(); idws != compatDets.end(); ++idws) {
451  if ( idws->second.isValid() && (idws->first) ) {
452  std::vector<TrajectoryMeasurement> tmptm =
453  theMeasTrackerEvent->idToDet(idws->first->geographicalId()).fastMeasurements(idws->second, idws->second, *propagator(), *estimator());
454  //validMeasurements(tmptm);
455 // if ( tmptm.size() > 2 ) {
456 // std::stable_sort(tmptm.begin(),tmptm.end(),increasingEstimate());
457 // result.insert(result.end(),tmptm.begin(), tmptm.begin()+2);
458 // } else {
459  result.insert(result.end(),tmptm.begin(), tmptm.end());
460 // }
461  }
462  }
463 
464  return result;
465 
466 }
467 
468 std::vector<TrajectoryMeasurement> FastTSGFromPropagation::findMeasurements(const DetLayer* nl, const TrajectoryStateOnSurface& staState) const {
469 
470  std::vector<TrajectoryMeasurement> result = tkLayerMeasurements()->measurements((*nl), staState, *propagator(), *estimator());
471  validMeasurements(result);
472  return result;
473 }
474 
476  if ( !theSelectStateFlag ) return true;
477  else {
478  if ( theBeamSpot.isValid() ) {
479  return ( ( fabs(zDis(tsos) - theBeamSpot->z0() ) < theSigmaZ) );
480 
481  } else {
482  return ( ( fabs(zDis(tsos)) < theSigmaZ) );
483 // double theDxyCut = 100;
484 // return ( (zDis(tsos) < theSigmaZ) && (dxyDis(tsos) < theDxyCut) );
485  }
486  }
487 
488 }
489 
491  return fabs(( - tsos.globalPosition().x() * tsos.globalMomentum().y() + tsos.globalPosition().y() * tsos.globalMomentum().x() )/tsos.globalMomentum().perp());
492 }
493 
495  return tsos.globalPosition().z() - tsos.globalPosition().perp() * tsos.globalMomentum().z()/tsos.globalMomentum().perp();
496 }
497 
499  float pt = (staMuon.second)->pt();
500  if ( pt < 13.0 ) theFlexErrorRescaling = 3;
501  else if ( pt < 30.0 ) theFlexErrorRescaling = 5;
502  else theFlexErrorRescaling = 10;
503  return;
504 }
505 
506 
508 
509  //rescale the error
510  if ( theResetMethod == "discreate" ) {
512  return;
513  }
514 
515  //rescale the error
516  if ( theResetMethod == "fixed" || !theErrorMatrixAdjuster) {
518  return;
519  }
520 
522  CurvilinearTrajectoryError sfMat = theErrorMatrixAdjuster->get(state.momentum());//FIXME with position
523  MuonErrorMatrix::multiply(oMat, sfMat);
524 
525  state = FreeTrajectoryState(state.parameters(),
526  oMat);
527 }
528 
530 
531  //rescale the error
532  if ( theResetMethod == "discreate" ) {
534  return;
535  }
536 
537  if ( theResetMethod == "fixed" || !theErrorMatrixAdjuster) {
539  return;
540  }
541 
543  CurvilinearTrajectoryError sfMat = theErrorMatrixAdjuster->get(state.globalMomentum());//FIXME with position
544  MuonErrorMatrix::multiply(oMat, sfMat);
545 
546  state = TrajectoryStateOnSurface(state.weight(),
547  state.globalParameters(),
548  oMat,
549  state.surface(),
550  state.surfaceSide());
551 }
552 
554  unsigned int detid,
555  PTrajectoryStateOnDet& pts) const
556 {
557  const AlgebraicSymMatrix55& m = ts.localError().matrix();
558  int dim = 5;
559  float localErrors[15];
560  int k = 0;
561  for (int i=0; i<dim; ++i) {
562  for (int j=0; j<=i; ++j) {
563  localErrors[k++] = m(i,j);
564  }
565  }
566  int surfaceSide = static_cast<int>(ts.surfaceSide());
568  localErrors, detid,
569  surfaceSide);
570 }
std::vector< TrajectoryMeasurement > findMeasurements(const DetLayer *, const TrajectoryStateOnSurface &) const
look for measurements on the first compatible layer
edm::Handle< MeasurementTrackerEvent > theMeasTrackerEvent
edm::ESHandle< MeasurementTracker > theMeasTracker
std::unique_ptr< const TrajectoryStateUpdator > theUpdator
const math::XYZVectorD & trackerSurfacePosition() const
Definition: SimTrack.h:36
T getParameter(std::string const &) const
std::vector< TrajectoryMeasurement > measurements(const DetLayer &layer, const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
int i
Definition: DBlmapReader.cc:9
FastTSGFromPropagation(const edm::ParameterSet &pset, edm::ConsumesCollector &iC)
constructor
edm::Handle< reco::BeamSpot > theBeamSpot
virtual FastTrackerRecHit * clone() const
T perp() const
Definition: PV3DBase.h:72
void adjust(FreeTrajectoryState &) const
adjust the error matrix of the FTS
unsigned long long theCacheId_MT
std::pair< const Trajectory *, reco::TrackRef > TrackCand
const LocalTrajectoryParameters & localParameters() const
const LayerMeasurements * tkLayerMeasurements() const
const GlobalTrajectoryParameters & parameters() const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
edm::EDGetTokenT< edm::SimTrackContainer > theSimTrackCollectionToken_
edm::Handle< edm::SimTrackContainer > theSimTracks
const CurvilinearTrajectoryError & curvilinearError() const
virtual ~FastTSGFromPropagation()
destructor
edm::ESHandle< GeometricSearchTracker > theTracker
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
T y() const
Definition: PV3DBase.h:63
GlobalPoint globalPosition() const
void validMeasurements(std::vector< TrajectoryMeasurement > &) const
select valid measurements
const MuonServiceProxy * theService
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
#define nullptr
float charge() const
charge
Definition: CoreSimTrack.cc:18
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:40
const CurvilinearTrajectoryError & curvilinearError() const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
virtual std::vector< DetWithState > compatibleDets(const TrajectoryStateOnSurface &startingState, const Propagator &prop, const MeasurementEstimator &est) const
const Chi2MeasurementEstimator * estimator() const
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
void getRescalingFactor(const TrackCand &staMuon)
static const double pts[33]
Definition: Constants.h:30
edm::EDGetTokenT< MeasurementTrackerEvent > theMeasurementTrackerEventToken_
void push_back(D *&d)
Definition: OwnVector.h:280
virtual TrajectoryStateOnSurface update(const TrajectoryStateOnSurface &, const TrackingRecHit &) const =0
int iEvent
Definition: GenABIO.cc:230
const edm::ParameterSet theConfig
const SurfaceType & surface() const
bool passSelection(const TrajectoryStateOnSurface &) const
check some quantity and beam-spot compatibility and decide to continue
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
SurfaceSide surfaceSide() const
Position relative to material, defined relative to momentum vector.
FreeTrajectoryState const * freeState(bool withErrors=true) const
T z() const
Definition: PV3DBase.h:64
tuple result
Definition: query.py:137
int j
Definition: DBlmapReader.cc:9
std::vector< TrajectoryMeasurement > findMeasurements_new(const DetLayer *, const TrajectoryStateOnSurface &) const
look for measurements on the first compatible layer (faster way)
unsigned int detId() const
TrajectoryStateOnSurface outerTkState(const TrackCand &) const
const AlgebraicSymMatrix55 & matrix() const
static void multiply(CurvilinearTrajectoryError &initial_error, const CurvilinearTrajectoryError &scale_error)
multiply term by term the two matrix
TrajectoryStateOnSurface innerState(const TrackCand &) const
LayerMeasurements theTkLayerMeasurements
const LocalTrajectoryError & localError() const
bool isValid() const
Definition: HandleBase.h:75
GlobalVector momentum() const
#define LogTrace(id)
Definition: DetId.h:18
void rescaleError(double factor)
const TrackerGeometry * theGeometry
void init(const MuonServiceProxy *)
initialize
double zDis(const TrajectoryStateOnSurface &tsos) const
TrajectoryStateOnSurface transientState(const PTrajectoryStateOnDet &ts, const Surface *surface, const MagneticField *field)
const TrajectoryStateUpdator * updator() const
const GlobalTrajectoryParameters & globalParameters() const
std::unique_ptr< const DirectTrackerNavigation > theNavigation
const math::XYZTLorentzVectorD & trackerSurfaceMomentum() const
Definition: SimTrack.h:38
edm::ESHandle< Propagator > propagator() const
TrajectorySeed createSeed(const TrajectoryStateOnSurface &, const DetId &) const
create a hitless seed from a trajectory state
void stateOnDet(const TrajectoryStateOnSurface &ts, unsigned int detid, PTrajectoryStateOnDet &pts) const
A mere copy (without memory leak) of an existing tracking method.
edm::Handle< FastTrackerRecHitCombinationCollection > recHitCombinations
T eta() const
Definition: PV3DBase.h:76
ESHandle< TrackerGeometry > geometry
void setRecHitCombinationIndex(edm::OwnVector< T > &recHits, int32_t icomb)
GlobalVector globalMomentum() const
edm::EDGetTokenT< reco::BeamSpot > beamSpot_
static int position[264][3]
Definition: ReadPGInfo.cc:509
std::vector< FastTrackerRecHitCombination > FastTrackerRecHitCombinationCollection
std::unique_ptr< const Chi2MeasurementEstimator > theEstimator
double dxyDis(const TrajectoryStateOnSurface &tsos) const
edm::EDGetTokenT< FastTrackerRecHitCombinationCollection > recHitCombinationsToken_
const FastTrackerRecHit * hit() const
The Hit itself.
DetId geographicalId() const
void trackerSeeds(const TrackCand &, const TrackingRegion &, const TrackerTopology *tTopo, std::vector< TrajectorySeed > &)
generate seed(s) for a track
T x() const
Definition: PV3DBase.h:62
const BasicVectorType & basicVector() const
Definition: PV3DBase.h:56
FreeTrajectoryState initialFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
edm::ESHandle< TransientTrackingRecHitBuilder > theTTRHBuilder
std::vector< SimTrack > SimTrackContainer
void setEvent(const edm::Event &)
set an event
virtual const TrackerGeomDet * idToDet(DetId) const
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)
unsigned long long theCacheId_TG
std::unique_ptr< MuonErrorMatrix > theErrorMatrixAdjuster