CMS 3D CMS Logo

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