CMS 3D CMS Logo

TSGForOI.cc
Go to the documentation of this file.
1 
10 
11 #include <memory>
12 
13 using namespace edm;
14 using namespace std;
15 
17  : src_(consumes<reco::TrackCollection>(iConfig.getParameter<edm::InputTag>("src"))),
18  estimatorToken_(esConsumes(edm::ESInputTag("", (iConfig.getParameter<std::string>("estimator"))))),
19  magfieldToken_(esConsumes()),
20  tmpTkGeometryToken_(esConsumes()),
21  geometryToken_(esConsumes()),
22  tTopoToken_(esConsumes()),
23  smartOppositeToken_(esConsumes(edm::ESInputTag("", "hltESPSmartPropagatorAnyOpposite"))),
24  shpOppositeToken_(esConsumes(edm::ESInputTag("", "hltESPSteppingHelixPropagatorOpposite"))),
25  numOfMaxSeedsParam_(iConfig.getParameter<uint32_t>("maxSeeds")),
26  numOfLayersToTry_(iConfig.getParameter<int32_t>("layersToTry")),
27  numOfHitsToTry_(iConfig.getParameter<int32_t>("hitsToTry")),
28  fixedErrorRescalingForHits_(iConfig.getParameter<double>("fixedErrorRescaleFactorForHits")),
29  fixedErrorRescalingForHitless_(iConfig.getParameter<double>("fixedErrorRescaleFactorForHitless")),
30  adjustErrorsDynamicallyForHits_(iConfig.getParameter<bool>("adjustErrorsDynamicallyForHits")),
31  adjustErrorsDynamicallyForHitless_(iConfig.getParameter<bool>("adjustErrorsDynamicallyForHitless")),
32  minEtaForTEC_(iConfig.getParameter<double>("minEtaForTEC")),
33  maxEtaForTOB_(iConfig.getParameter<double>("maxEtaForTOB")),
34  useHitLessSeeds_(iConfig.getParameter<bool>("UseHitLessSeeds")),
35  useStereoLayersInTEC_(iConfig.getParameter<bool>("UseStereoLayersInTEC")),
36  updator_(new KFUpdator()),
37  measurementTrackerTag_(
38  consumes<MeasurementTrackerEvent>(iConfig.getParameter<edm::InputTag>("MeasurementTrackerEvent"))),
39  pT1_(iConfig.getParameter<double>("pT1")),
40  pT2_(iConfig.getParameter<double>("pT2")),
41  pT3_(iConfig.getParameter<double>("pT3")),
42  eta1_(iConfig.getParameter<double>("eta1")),
43  eta2_(iConfig.getParameter<double>("eta2")),
44  SF1_(iConfig.getParameter<double>("SF1")),
45  SF2_(iConfig.getParameter<double>("SF2")),
46  SF3_(iConfig.getParameter<double>("SF3")),
47  SF4_(iConfig.getParameter<double>("SF4")),
48  SF5_(iConfig.getParameter<double>("SF5")),
49  tsosDiff_(iConfig.getParameter<double>("tsosDiff")),
50  propagatorName_(iConfig.getParameter<std::string>("propagatorName")),
51  theCategory(string("Muon|RecoMuon|TSGForOI")),
52  propagatorAlongToken_(esConsumes(edm::ESInputTag("", propagatorName_))),
53  propagatorOppositeToken_(esConsumes(edm::ESInputTag("", propagatorName_))) {
54  produces<std::vector<TrajectorySeed> >();
55 }
56 
58 
61  unsigned int numOfMaxSeeds = numOfMaxSeedsParam_;
62  unsigned int numSeedsMade = 0;
63  bool analysedL2 = false;
64  unsigned int layerCount = 0;
65 
68 
70  edm::Handle<MeasurementTrackerEvent> measurementTrackerH;
74  edm::ESHandle<Propagator> propagatorOppositeH = iSetup.getHandle(propagatorOppositeToken_);
77 
78  iEvent.getByToken(measurementTrackerTag_, measurementTrackerH);
79 
82  iEvent.getByToken(src_, l2TrackCol);
83 
84  // The product:
85  std::unique_ptr<std::vector<TrajectorySeed> > result(new std::vector<TrajectorySeed>());
86 
87  // Get vector of Detector layers once:
88  std::vector<BarrelDetLayer const*> const& tob = measurementTrackerH->geometricSearchTracker()->tobLayers();
89  std::vector<ForwardDetLayer const*> const& tecPositive =
90  tmpTkGeometryH->isThere(GeomDetEnumerators::P2OTEC)
91  ? measurementTrackerH->geometricSearchTracker()->posTidLayers()
92  : measurementTrackerH->geometricSearchTracker()->posTecLayers();
93  std::vector<ForwardDetLayer const*> const& tecNegative =
94  tmpTkGeometryH->isThere(GeomDetEnumerators::P2OTEC)
95  ? measurementTrackerH->geometricSearchTracker()->negTidLayers()
96  : measurementTrackerH->geometricSearchTracker()->negTecLayers();
97  const TrackerTopology* tTopo = &iSetup.getData(tTopoToken_);
98 
99  // Get the suitable propagators:
100  std::unique_ptr<Propagator> propagatorAlong = SetPropagationDirection(*propagatorAlongH, alongMomentum);
101  std::unique_ptr<Propagator> propagatorOpposite = SetPropagationDirection(*propagatorOppositeH, oppositeToMomentum);
102 
105 
106  // Loop over the L2's and make seeds for all of them:
107  LogTrace(theCategory) << "TSGForOI::produce: Number of L2's: " << l2TrackCol->size();
108  for (unsigned int l2TrackColIndex(0); l2TrackColIndex != l2TrackCol->size(); ++l2TrackColIndex) {
109  const reco::TrackRef l2(l2TrackCol, l2TrackColIndex);
110  std::unique_ptr<std::vector<TrajectorySeed> > out(new std::vector<TrajectorySeed>());
111  LogTrace("TSGForOI") << "TSGForOI::produce: L2 muon pT, eta, phi --> " << l2->pt() << " , " << l2->eta() << " , "
112  << l2->phi() << endl;
113 
115  dummyPlane->move(fts.position() - dummyPlane->position());
116  TrajectoryStateOnSurface tsosAtIP = TrajectoryStateOnSurface(fts, *dummyPlane);
117  LogTrace("TSGForOI") << "TSGForOI::produce: Created TSOSatIP: " << tsosAtIP << std::endl;
118 
119  // get the TSOS on the innermost layer of the L2.
120  TrajectoryStateOnSurface tsosAtMuonSystem =
121  trajectoryStateTransform::innerStateOnSurface(*l2, *geometryH, magfieldH.product());
122  LogTrace("TSGForOI") << "TSGForOI::produce: Created TSOSatMuonSystem: " << tsosAtMuonSystem << endl;
123 
124  LogTrace("TSGForOI") << "TSGForOI::produce: Check the error of the L2 parameter and use hit seeds if big errors"
125  << endl;
126  StateOnTrackerBound fromInside(propagatorAlong.get());
127  TrajectoryStateOnSurface outerTkStateInside = fromInside(fts);
128 
129  StateOnTrackerBound fromOutside(&*SmartOpposite);
130  TrajectoryStateOnSurface outerTkStateOutside = fromOutside(tsosAtMuonSystem);
131 
132  // for now only checking if the two positions (using updated and not-updated) agree withing certain extent,
133  // will probably have to design something fancier for the future.
134  auto dist = 0.0;
135  bool useBoth = false;
136  if (outerTkStateInside.isValid() && outerTkStateOutside.isValid()) {
137  dist = match_Chi2(outerTkStateInside, outerTkStateOutside);
138  }
139  if (dist > tsosDiff_) {
140  useBoth = true;
141  }
142 
143  numSeedsMade = 0;
144  analysedL2 = false;
145 
146  // if both TSOSs agree, use only the one at vertex, as it uses more information. If they do not agree, search for seed based on both
147 
148  // BARREL
149  if (std::abs(l2->eta()) < maxEtaForTOB_) {
150  layerCount = 0;
151  for (auto it = tob.rbegin(); it != tob.rend(); ++it) { //This goes from outermost to innermost layer
152  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TOB layer " << layerCount << endl;
153  findSeedsOnLayer(tTopo,
154  **it,
155  tsosAtIP,
156  *(propagatorAlong.get()),
157  *(propagatorOpposite.get()),
158  l2,
159  estimatorH,
160  measurementTrackerH,
161  numSeedsMade,
162  numOfMaxSeeds,
163  layerCount,
164  analysedL2,
165  out);
166  }
167  if (useBoth) {
168  numSeedsMade = 0;
169  for (auto it = tob.rbegin(); it != tob.rend(); ++it) { //This goes from outermost to innermost layer
170  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TOB layer " << layerCount << endl;
171  findSeedsOnLayer(tTopo,
172  **it,
173  tsosAtMuonSystem,
174  *(propagatorOpposite.get()),
175  *(propagatorOpposite.get()),
176  l2,
177  estimatorH,
178  measurementTrackerH,
179  numSeedsMade,
180  numOfMaxSeeds,
181  layerCount,
182  analysedL2,
183  out);
184  }
185  }
186  }
187  // Reset Number of seeds if in overlap region:
188 
189  if (std::abs(l2->eta()) > minEtaForTEC_ && std::abs(l2->eta()) < maxEtaForTOB_) {
190  numSeedsMade = 0;
191  }
192 
193  // ENDCAP+
194  if (l2->eta() > minEtaForTEC_) {
195  layerCount = 0;
196  for (auto it = tecPositive.rbegin(); it != tecPositive.rend(); ++it) {
197  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TEC+ layer " << layerCount << endl;
198  findSeedsOnLayer(tTopo,
199  **it,
200  tsosAtIP,
201  *(propagatorAlong.get()),
202  *(propagatorOpposite.get()),
203  l2,
204  estimatorH,
205  measurementTrackerH,
206  numSeedsMade,
207  numOfMaxSeeds,
208  layerCount,
209  analysedL2,
210  out);
211  }
212  if (useBoth) {
213  numSeedsMade = 0;
214  for (auto it = tecPositive.rbegin(); it != tecPositive.rend(); ++it) {
215  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TEC+ layer " << layerCount << endl;
216  findSeedsOnLayer(tTopo,
217  **it,
218  tsosAtMuonSystem,
219  *(propagatorOpposite.get()),
220  *(propagatorOpposite.get()),
221  l2,
222  estimatorH,
223  measurementTrackerH,
224  numSeedsMade,
225  numOfMaxSeeds,
226  layerCount,
227  analysedL2,
228  out);
229  }
230  }
231  }
232 
233  // ENDCAP-
234  if (l2->eta() < -minEtaForTEC_) {
235  layerCount = 0;
236  for (auto it = tecNegative.rbegin(); it != tecNegative.rend(); ++it) {
237  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TEC- layer " << layerCount << endl;
238  findSeedsOnLayer(tTopo,
239  **it,
240  tsosAtIP,
241  *(propagatorAlong.get()),
242  *(propagatorOpposite.get()),
243  l2,
244  estimatorH,
245  measurementTrackerH,
246  numSeedsMade,
247  numOfMaxSeeds,
248  layerCount,
249  analysedL2,
250  out);
251  }
252  if (useBoth) {
253  numSeedsMade = 0;
254  for (auto it = tecNegative.rbegin(); it != tecNegative.rend(); ++it) {
255  LogTrace("TSGForOI") << "TSGForOI::produce: looping in TEC- layer " << layerCount << endl;
256  findSeedsOnLayer(tTopo,
257  **it,
258  tsosAtMuonSystem,
259  *(propagatorOpposite.get()),
260  *(propagatorOpposite.get()),
261  l2,
262  estimatorH,
263  measurementTrackerH,
264  numSeedsMade,
265  numOfMaxSeeds,
266  layerCount,
267  analysedL2,
268  out);
269  }
270  }
271  }
272 
273  for (std::vector<TrajectorySeed>::iterator it = out->begin(); it != out->end(); ++it) {
274  result->push_back(*it);
275  }
276  } //L2Collection
277  edm::LogInfo(theCategory) << "TSGForOI::produce: number of seeds made: " << result->size();
278 
279  iEvent.put(std::move(result));
280 }
281 
283  const GeometricSearchDet& layer,
284  const TrajectoryStateOnSurface& tsosAtIP,
287  const reco::TrackRef l2,
289  edm::Handle<MeasurementTrackerEvent>& measurementTrackerH,
290  unsigned int& numSeedsMade,
291  unsigned int& numOfMaxSeeds,
292  unsigned int& layerCount,
293  bool& analysedL2,
294  std::unique_ptr<std::vector<TrajectorySeed> >& out) const {
295  if (numSeedsMade > numOfMaxSeeds)
296  return;
297  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: numSeedsMade = " << numSeedsMade
298  << " , layerCount = " << layerCount << endl;
299 
300  double errorSFHits = 1.0;
301  double errorSFHitless = 1.0;
303  errorSFHits = fixedErrorRescalingForHits_;
304  else
305  errorSFHits = calculateSFFromL2(l2);
307  errorSFHitless = fixedErrorRescalingForHitless_;
308 
309  // Hitless: TO Be discarded from here at some point.
310  if (useHitLessSeeds_) {
311  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: Start hitless" << endl;
312  std::vector<GeometricSearchDet::DetWithState> dets;
313  layer.compatibleDetsV(tsosAtIP, propagatorAlong, *estimatorH, dets);
314  if (!dets.empty()) {
315  auto const& detOnLayer = dets.front().first;
316  auto const& tsosOnLayer = dets.front().second;
317  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: tsosOnLayer " << tsosOnLayer << endl;
318  if (!tsosOnLayer.isValid()) {
319  edm::LogInfo(theCategory) << "ERROR!: Hitless TSOS is not valid!";
320  } else {
321  // calculate SF from L2 (only once -- if needed)
322  if (!analysedL2 && adjustErrorsDynamicallyForHitless_) {
323  errorSFHitless = calculateSFFromL2(l2);
324  analysedL2 = true;
325  }
326 
327  dets.front().second.rescaleError(errorSFHitless);
328  PTrajectoryStateOnDet const& ptsod =
329  trajectoryStateTransform::persistentState(tsosOnLayer, detOnLayer->geographicalId().rawId());
331  out->push_back(TrajectorySeed(ptsod, rHC, oppositeToMomentum));
332  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: TSOD (Hitless) done " << endl;
333  numSeedsMade++;
334  }
335  }
336  }
337 
338  // Hits:
339  if (layerCount > numOfLayersToTry_)
340  return;
341  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: Start Hits" << endl;
342  if (makeSeedsFromHits(tTopo,
343  layer,
344  tsosAtIP,
345  *out,
347  *measurementTrackerH,
348  estimatorH,
349  numSeedsMade,
350  errorSFHits,
351  l2->eta()))
352  ++layerCount;
353 }
354 
356  double theSF = 1.0;
357  // L2 direction vs pT blowup - as was previously done:
358  // Split into 4 pT ranges: <pT1_, pT1_<pT2_, pT2_<pT3_, <pT4_: 13,30,70
359  // Split into 2 eta ranges for the middle two pT ranges: 1.0,1.4
360  double abseta = std::abs(track->eta());
361  if (track->pt() <= pT1_)
362  theSF = SF1_;
363  if (track->pt() > pT1_ && track->pt() <= pT2_) {
364  if (abseta <= eta1_)
365  theSF = SF3_;
366  if (abseta > eta1_ && abseta <= eta2_)
367  theSF = SF2_;
368  if (abseta > eta2_)
369  theSF = SF3_;
370  }
371  if (track->pt() > pT2_ && track->pt() <= pT3_) {
372  if (abseta <= eta1_)
373  theSF = SF5_;
374  if (abseta > eta1_ && abseta <= eta2_)
375  theSF = SF4_;
376  if (abseta > eta2_)
377  theSF = SF5_;
378  }
379  if (track->pt() > pT3_)
380  theSF = SF5_;
381 
382  LogTrace(theCategory) << "TSGForOI::calculateSFFromL2: SF has been calculated as: " << theSF;
383  return theSF;
384 }
385 
387  const GeometricSearchDet& layer,
388  const TrajectoryStateOnSurface& tsosAtIP,
389  std::vector<TrajectorySeed>& out,
393  unsigned int& numSeedsMade,
394  const double errorSF,
395  const double l2Eta) const {
396  // Error Rescaling:
397  TrajectoryStateOnSurface onLayer(tsosAtIP);
398  onLayer.rescaleError(errorSF);
399 
400  std::vector<GeometricSearchDet::DetWithState> dets;
401  layer.compatibleDetsV(onLayer, propagatorAlong, *estimatorH, dets);
402 
403  // Find Measurements on each DetWithState:
404  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: find measurements on each detWithState " << dets.size() << endl;
405  std::vector<TrajectoryMeasurement> meas;
406  for (std::vector<GeometricSearchDet::DetWithState>::iterator it = dets.begin(); it != dets.end(); ++it) {
407  MeasurementDetWithData det = measurementTracker.idToDet(it->first->geographicalId());
408  if (det.isNull()) {
409  continue;
410  }
411  if (!it->second.isValid())
412  continue; //Skip if TSOS is not valid
413 
414  std::vector<TrajectoryMeasurement> mymeas =
415  det.fastMeasurements(it->second, onLayer, propagatorAlong, *estimatorH); //Second TSOS is not used
416  for (std::vector<TrajectoryMeasurement>::const_iterator it2 = mymeas.begin(), ed2 = mymeas.end(); it2 != ed2;
417  ++it2) {
418  if (it2->recHit()->isValid())
419  meas.push_back(*it2); //Only save those which are valid
420  }
421  }
422 
423  // Update TSOS using TMs after sorting, then create Trajectory Seed and put into vector:
424  LogTrace("TSGForOI")
425  << "TSGForOI::findSeedsOnLayer: Update TSOS using TMs after sorting, then create Trajectory Seed, number of TM = "
426  << meas.size() << endl;
427  unsigned int found = 0;
428  std::sort(meas.begin(), meas.end(), TrajMeasLessEstim());
429  for (std::vector<TrajectoryMeasurement>::const_iterator it = meas.begin(); it != meas.end(); ++it) {
430  TrajectoryStateOnSurface updatedTSOS = updator_->update(it->forwardPredictedState(), *it->recHit());
431  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: TSOS for TM " << found << endl;
432  if (not updatedTSOS.isValid())
433  continue;
434 
435  // CHECK if is StereoLayer:
436  if (useStereoLayersInTEC_ && (fabs(l2Eta) > 0.8 && fabs(l2Eta) < 1.6)) {
437  DetId detid = ((*it).recHit()->hit())->geographicalId();
438  if (detid.subdetId() == StripSubdetector::TEC) {
439  if (!tTopo->tecIsStereo(detid.rawId()))
440  break; // try another layer
441  }
442  }
443 
445  seedHits.push_back(*it->recHit()->hit());
446  PTrajectoryStateOnDet const& pstate =
447  trajectoryStateTransform::persistentState(updatedTSOS, it->recHit()->geographicalId().rawId());
448  LogTrace("TSGForOI") << "TSGForOI::findSeedsOnLayer: number of seedHits: " << seedHits.size() << endl;
449  TrajectorySeed seed(pstate, std::move(seedHits), oppositeToMomentum);
450  out.push_back(seed);
451  found++;
452  numSeedsMade++;
453  if (found == numOfHitsToTry_)
454  break;
455  }
456  return found;
457 }
458 //
461 
463  if (!tsos1.isValid() || !tsos2.isValid())
464  return -1.;
465 
467  AlgebraicSymMatrix55 m(tsos1.localError().matrix() + tsos2.localError().matrix());
468 
469  bool ierr = !m.Invert();
470 
471  if (ierr) {
472  edm::LogInfo("TSGForOI") << "Error inverting covariance matrix";
473  return -1;
474  }
475 
476  double est = ROOT::Math::Similarity(v, m);
477 
478  return est;
479 }
480 
483  desc.add<edm::InputTag>("src", edm::InputTag("hltL2Muons", "UpdatedAtVtx"));
484  desc.add<int>("layersToTry", 1);
485  desc.add<double>("fixedErrorRescaleFactorForHitless", 2.0);
486  desc.add<int>("hitsToTry", 1);
487  desc.add<bool>("adjustErrorsDynamicallyForHits", false);
488  desc.add<bool>("adjustErrorsDynamicallyForHitless", false);
489  desc.add<edm::InputTag>("MeasurementTrackerEvent", edm::InputTag("hltSiStripClusters"));
490  desc.add<bool>("UseHitLessSeeds", true);
491  desc.add<bool>("UseStereoLayersInTEC", false);
492  desc.add<std::string>("estimator", "hltESPChi2MeasurementEstimator100");
493  desc.add<double>("maxEtaForTOB", 1.2);
494  desc.add<double>("minEtaForTEC", 0.8);
495  desc.addUntracked<bool>("debug", true);
496  desc.add<double>("fixedErrorRescaleFactorForHits", 2.0);
497  desc.add<unsigned int>("maxSeeds", 1);
498  desc.add<double>("pT1", 13.0);
499  desc.add<double>("pT2", 30.0);
500  desc.add<double>("pT3", 70.0);
501  desc.add<double>("eta1", 1.0);
502  desc.add<double>("eta2", 1.4);
503  desc.add<double>("SF1", 3.0);
504  desc.add<double>("SF2", 4.0);
505  desc.add<double>("SF3", 5.0);
506  desc.add<double>("SF4", 7.0);
507  desc.add<double>("SF5", 10.0);
508  desc.add<double>("tsosDiff", 0.03);
509  desc.add<std::string>("propagatorName", "PropagatorWithMaterial");
510  descriptions.add("TSGForOI", desc);
511 }
512 
static constexpr auto TEC
ESGetTokenH3DDVariant esConsumes(std::string const &Record, edm::ConsumesCollector &)
Definition: DeDxTools.cc:283
const LocalTrajectoryError & localError() const
int makeSeedsFromHits(const TrackerTopology *tTopo, const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsosAtIP, std::vector< TrajectorySeed > &out, const Propagator &propagatorAlong, const MeasurementTrackerEvent &measurementTracker, edm::ESHandle< Chi2MeasurementEstimatorBase > &estimator_, unsigned int &numSeedsMade, const double errorSF, const double l2Eta) const
Function to find hits on layers and create seeds from updated TSOS.
Definition: TSGForOI.cc:386
std::vector< TrajectoryMeasurement > fastMeasurements(const TrajectoryStateOnSurface &stateOnThisDet, const TrajectoryStateOnSurface &tsos2, const Propagator &prop, const MeasurementEstimator &est) const
const double tsosDiff_
Distance of TSOSs to trigger using hits or not.
Definition: TSGForOI.h:95
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorOppositeToken_
Definition: TSGForOI.h:101
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
PTrajectoryStateOnDet persistentState(const TrajectoryStateOnSurface &ts, unsigned int detid)
void produce(edm::StreamID sid, edm::Event &iEvent, const edm::EventSetup &iSetup) const override
Definition: TSGForOI.cc:59
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: TSGForOI.cc:481
const LocalTrajectoryParameters & localParameters() const
const edm::ESGetToken< Chi2MeasurementEstimatorBase, TrackingComponentsRecord > estimatorToken_
Estimator used to find dets and TrajectoryMeasurements.
Definition: TSGForOI.h:45
const double SF3_
Definition: TSGForOI.h:92
std::unique_ptr< T, impl::DeviceDeleter > unique_ptr
const double maxEtaForTOB_
Maximum eta value to activate searching in the TOB.
Definition: TSGForOI.h:75
void findSeedsOnLayer(const TrackerTopology *tTopo, const GeometricSearchDet &layer, const TrajectoryStateOnSurface &tsosAtIP, const Propagator &propagatorAlong, const Propagator &propagatorOpposite, const reco::TrackRef l2, edm::ESHandle< Chi2MeasurementEstimatorBase > &estimator_, edm::Handle< MeasurementTrackerEvent > &measurementTrackerH, unsigned int &numSeedsMade, unsigned int &numOfMaxSeeds, unsigned int &layerCount, bool &analysedL2, std::unique_ptr< std::vector< TrajectorySeed > > &out) const
Function to find seeds on a given layer.
Definition: TSGForOI.cc:282
#define LogTrace(id)
constexpr std::array< uint8_t, layerIndexSize > layer
static PlanePointer build(Args &&... args)
Definition: Plane.h:33
GlobalPoint position() const
~TSGForOI() override
Definition: TSGForOI.cc:57
std::unique_ptr< Propagator > SetPropagationDirection(Propagator const &iprop, PropagationDirection dir)
void push_back(D *&d)
Definition: OwnVector.h:326
const double minEtaForTEC_
Minimum eta value to activate searching in the TEC.
Definition: TSGForOI.h:72
int iEvent
Definition: GenABIO.cc:224
T const * product() const
Definition: ESHandle.h:86
const double fixedErrorRescalingForHits_
How much to rescale errors from the L2 (fixed error vs pT, eta)
Definition: TSGForOI.h:64
const std::unique_ptr< TrajectoryStateUpdator > updator_
KFUpdator defined in constructor.
Definition: TSGForOI.h:85
const edm::ESGetToken< Propagator, TrackingComponentsRecord > smartOppositeToken_
Definition: TSGForOI.h:51
bool isThere(GeomDetEnumerators::SubDetector subdet) const
const edm::ESGetToken< TrackerTopology, TrackerTopologyRcd > tTopoToken_
Definition: TSGForOI.h:50
const double eta2_
Definition: TSGForOI.h:91
AlgebraicVector5 vector() const
const bool useHitLessSeeds_
Definition: TSGForOI.h:79
size_type size() const
Definition: OwnVector.h:300
const unsigned int numOfLayersToTry_
How many layers to try.
Definition: TSGForOI.h:58
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
const double SF1_
Definition: TSGForOI.h:92
ROOT::Math::SVector< double, 5 > AlgebraicVector5
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const bool useStereoLayersInTEC_
Switch ON to use Stereo layers instead of using every layer in TEC.
Definition: TSGForOI.h:82
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
bool getData(T &iHolder) const
Definition: EventSetup.h:122
const double SF5_
Definition: TSGForOI.h:92
ESHandle< T > getHandle(const ESGetToken< T, R > &iToken) const
Definition: EventSetup.h:151
Create L3MuonTrajectorySeeds from L2 Muons updated at vertex in an outside in manner.
Definition: TSGForOI.h:33
const bool adjustErrorsDynamicallyForHitless_
Definition: TSGForOI.h:69
double match_Chi2(const TrajectoryStateOnSurface &tsos1, const TrajectoryStateOnSurface &tsos2) const
Definition: TSGForOI.cc:462
const double pT1_
pT, eta ranges and scale factor values
Definition: TSGForOI.h:90
Log< level::Info, false > LogInfo
const double SF4_
Definition: TSGForOI.h:92
Definition: DetId.h:17
const double pT2_
Definition: TSGForOI.h:90
const double eta1_
Definition: TSGForOI.h:91
const double pT3_
Definition: TSGForOI.h:90
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
double calculateSFFromL2(const reco::TrackRef track) const
Function used to calculate the dynamic error SF by analysing the L2.
Definition: TSGForOI.cc:355
ROOT::Math::SMatrix< double, 5, 5, ROOT::Math::MatRepSym< double, 5 > > AlgebraicSymMatrix55
void add(std::string const &label, ParameterSetDescription const &psetDescription)
const edm::EDGetTokenT< reco::TrackCollection > src_
Labels for input collections.
Definition: TSGForOI.h:42
bool tecIsStereo(const DetId &id) const
const edm::ESGetToken< MagneticField, IdealMagneticFieldRecord > magfieldToken_
Definition: TSGForOI.h:47
const edm::ESGetToken< TrackerGeometry, TrackerDigiGeometryRecord > tmpTkGeometryToken_
Definition: TSGForOI.h:48
const bool adjustErrorsDynamicallyForHits_
Whether or not to use an automatically calculated scale-factor value.
Definition: TSGForOI.h:68
fixed size matrix
HLT enums.
const AlgebraicSymMatrix55 & matrix() const
TSGForOI(const edm::ParameterSet &iConfig)
Definition: TSGForOI.cc:16
const edm::EDGetTokenT< MeasurementTrackerEvent > measurementTrackerTag_
Definition: TSGForOI.h:87
const edm::ESGetToken< Propagator, TrackingComponentsRecord > propagatorAlongToken_
Definition: TSGForOI.h:100
const unsigned int numOfMaxSeedsParam_
Maximum number of seeds for each L2.
Definition: TSGForOI.h:55
const std::string theCategory
Definition: TSGForOI.h:99
const double SF2_
Definition: TSGForOI.h:92
FreeTrajectoryState initialFreeState(const reco::Track &tk, const MagneticField *field, bool withErr=true)
const edm::ESGetToken< GlobalTrackingGeometry, GlobalTrackingGeometryRecord > geometryToken_
Definition: TSGForOI.h:49
def move(src, dest)
Definition: eostools.py:511
const unsigned int numOfHitsToTry_
How many hits to try per layer.
Definition: TSGForOI.h:61
const edm::ESGetToken< Propagator, TrackingComponentsRecord > shpOppositeToken_
Definition: TSGForOI.h:52
TrajectoryStateOnSurface innerStateOnSurface(const reco::Track &tk, const TrackingGeometry &geom, const MagneticField *field, bool withErr=true)
const double fixedErrorRescalingForHitless_
Definition: TSGForOI.h:65