CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
DynamicTruncation.cc
Go to the documentation of this file.
1 
29 
30 #define MAX_THR 1e7
31 
32 using namespace edm;
33 using namespace std;
34 using namespace reco;
35 
36 
37 
39  propagator = theService.propagator("SmartPropagatorAny");
40  propagatorPF = theService.propagator("SmartPropagatorAny");
41  propagatorCompatibleDet = theService.propagator("SmartPropagatorAny");
42  theG = theService.trackingGeometry();
43  theService.eventSetup().get<TransientRecHitRecord>().get("MuonRecHitBuilder",theMuonRecHitBuilder);
44  theService.eventSetup().get<TrackingComponentsRecord>().get("KFUpdator",updatorHandle);
45  theService.eventSetup().get<MuonGeometryRecord>().get(cscGeom);
46  theService.eventSetup().get<MuonRecoGeometryRecord>().get(navMuon);
47  theService.eventSetup().get<IdealMagneticFieldRecord>().get(magfield);
48  navigation = new DirectMuonNavigation(theService.detLayerGeometry());
49  getSegs = new ChamberSegmentUtility();
50  thrManager = new ThrParameters(&theService.eventSetup());
51  useDBforThr = thrManager->isValidThdDB();
52  if (useDBforThr) dytThresholds = thrManager->getInitialThresholds();
53  doUpdateOfKFStates = true;
54 }
55 
57  delete navigation;
58  delete thrManager;
59  delete getSegs;
60 }
61 
63  TrajectoryStateOnSurface temp = updatorHandle->update(tsos, *rechit);
64  if (temp.isValid()) tsos = updatorHandle->update(tsos, *rechit);
65 }
66 
68  ConstRecHitContainer tmprecHits;
69  vector<const TrackingRecHit*> DTrh = bestDTSeg.recHits();
70  for (vector<const TrackingRecHit*>::iterator it = DTrh.begin(); it != DTrh.end(); it++) {
71  tmprecHits.push_back(theMuonRecHitBuilder->build(*it));
72  }
73  sort(tmprecHits);
74  for (ConstRecHitContainer::const_iterator it = tmprecHits.begin(); it != tmprecHits.end(); ++it) {
75  DTLayerId layid((*it)->det()->geographicalId());
76  TrajectoryStateOnSurface temp = propagator->propagate(tsos, theG->idToDet(layid)->surface());
77  if (temp.isValid()) tsos = updatorHandle->update(temp, **it);
78  }
79 }
80 
82  ConstRecHitContainer tmprecHits;
83  vector<CSCRecHit2D> CSCrh = bestCSCSeg.specificRecHits();
84  for (vector<CSCRecHit2D>::iterator it = CSCrh.begin(); it != CSCrh.end(); ++it) {
85  tmprecHits.push_back(theMuonRecHitBuilder->build(&*it));
86  }
87  sort(tmprecHits);
88  for (ConstRecHitContainer::const_iterator it = tmprecHits.begin(); it != tmprecHits.end(); ++it) {
89  const CSCLayer* cscLayer = cscGeom->layer((*it)->det()->geographicalId());
90  TrajectoryStateOnSurface temp = propagator->propagate(tsos, cscLayer->surface());
91  if (temp.isValid()) tsos = updatorHandle->update(temp, **it);
92  }
93 }
94 
95 
99 void DynamicTruncation::setSelector(int selector) {
100  if (selector < 0 || selector > 2) throw cms::Exception("NotAvailable") << "DYT selector: wrong option!" << endl;
101  //if (selector == 0) cout << "[DYT disabled]\n";
102  //if (selector == 1) cout << "[use all compatible stations]\n";
103  //if (selector == 2) cout << "[stop at second consecutive incompatible station]\n";
104  DYTselector = selector;
105 
106 }
107 
108 void DynamicTruncation::setUseAPE(bool useAPE_) {
109  useAPE = useAPE_;
110 }
111 
113  doUpdateOfKFStates = upState;
114 }
115 
116 void DynamicTruncation::setThr(const vector<int>& thr) {
117  if (thr.size() == 2) {
118  for (unsigned int i = 0; i < thr.size(); i++)
119  if (thr[i] >= 0) Thrs.push_back(thr[i]);
120  else Thrs.push_back(MAX_THR);
121  return;
122  }
123  throw cms::Exception("NotAvailable") << "WARNING: wrong size for the threshold vector!\nExpected size: 2\n Found size: " << thr.size();
124 }
128 
129 
130 
131 //===> filter
133  result.clear();
134  prelFitMeas.clear();
135 
136  // Get APE maps
137  dtApeMap = thrManager->GetDTApeMap();
138  cscApeMap = thrManager->GetCSCApeMap();
139 
140  // Get Last tracker TSOS (updated)
141  vector<TrajectoryMeasurement> muonMeasurements = traj.measurements();
142  TrajectoryMeasurement lastTKm = muonMeasurements.front();
143  for (vector<TrajectoryMeasurement>::const_iterator imT = muonMeasurements.begin(); imT != muonMeasurements.end(); imT++ ) {
144  if ( !(*imT).recHit()->isValid() ) continue;
145  const TransientTrackingRecHit* hit = &(*(*imT).recHit());
146  if (hit->geographicalId().det() == DetId::Tracker) {
147  result.push_back((*imT).recHit());
148  if (!(*imT).forwardPredictedState().isValid()) continue;
149  if ((*imT).forwardPredictedState().globalPosition().mag() >
150  lastTKm.forwardPredictedState().globalPosition().mag()) lastTKm = *imT;
151  }
152  }
153  currentState = lastTKm.forwardPredictedState();
154  update(currentState, lastTKm.recHit());
155 
156  prelFitState = lastTKm.forwardPredictedState();
157  update(prelFitState, lastTKm.recHit());
158  prelFitMeas = result;
159 
160  // Run the DYT
161  filteringAlgo();
162 
163  return result;
164 }
165 
166 
167 //===> filteringAlgo
169  map<int, vector<DetId> > compatibleIds;
170  map<int, vector<DTRecSegment4D> > dtSegMap;
171  map<int, vector<CSCSegment> > cscSegMap;
172  int incompConLay = 0;
173  nStationsUsed = 0;
174 
175  // Get list of compatible layers
176  compatibleDets(currentState, compatibleIds);
177 
178  // Fill segment maps
179  fillSegmentMaps(compatibleIds, dtSegMap, cscSegMap);
180 
181  // Do a preliminary fit
182  if (useDBforThr) preliminaryFit(compatibleIds, dtSegMap, cscSegMap);
183 
184  // Loop on compatible layers
185  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
186  int stLayer = stationfromDet(it->second.front());
187  DTRecSegment4D bestDTSeg;
188  CSCSegment bestCSCSeg;
189  double bestDTEstimator = MAX_THR;
190  double bestCSCEstimator = MAX_THR;
191  vector<DTRecSegment4D> dtSegs = dtSegMap[it->first];
192  vector<CSCSegment> cscSegs = cscSegMap[it->first];
193 
194  // DT case: find the most compatible segment
195  TrajectoryStateOnSurface tsosDTlayer;
196  testDTstation(currentState, dtSegs, bestDTEstimator, bestDTSeg, tsosDTlayer);
197 
198  // CSC case: find the most compatible segment
199  TrajectoryStateOnSurface tsosCSClayer;
200  testCSCstation(currentState, cscSegs, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
201 
202  // Decide whether to keep the layer or not
203  bool chosenLayer = chooseLayers(incompConLay, bestDTEstimator, bestDTSeg, tsosDTlayer, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
204  fillDYTInfos(stLayer, chosenLayer, incompConLay, bestDTEstimator, bestCSCEstimator, bestDTSeg, bestCSCSeg);
205  }
206  //cout << "Number of used stations = " << nStationsUsed << endl;
207 }
208 
209 
210 //===> stationfromDet
212  if (det.subdetId() == MuonSubdetId::CSC) {
213  CSCDetId ch(det);
214  return ch.station();
215  }
216  if (det.subdetId() == MuonSubdetId::DT) {
217  DTChamberId ch(det);
218  return ch.station();
219  }
220  return 0;
221 }
222 
223 
224 //===> fillDYTInfos
225 void DynamicTruncation::fillDYTInfos(int const &st, bool const &chosenLayer, int &incompConLay,
226  double const &bestDTEstimator, double const &bestCSCEstimator,
227  DTRecSegment4D const &bestDTSeg, CSCSegment const &bestCSCSeg) {
228  if (chosenLayer) {
229  nStationsUsed++;
230  incompConLay = 0;
231  if (bestDTEstimator <= bestCSCEstimator) {
232  estimatorMap[st] = bestDTEstimator;
233  DetId id(bestDTSeg.chamberId());
234  idChamberMap[st] = id;
235  } else {
236  DetId id(bestCSCSeg.cscDetId());
237  idChamberMap[st] = id;
238  estimatorMap[st] = bestCSCEstimator;
239  }
240  usedStationMap[st] = true;
241  } else {
242  incompConLay++;
243  estimatorMap[st] = -1;
244  usedStationMap[st] = false;
245  }
246 }
247 
248 
249 //===> compatibleDets
250 void DynamicTruncation::compatibleDets(TrajectoryStateOnSurface &tsos, map<int, vector<DetId> > &detMap) {
251  MuonPatternRecoDumper dumper;
252  MeasurementEstimator *theEstimator = new Chi2MeasurementEstimator(1000, 1000);
253  vector<const DetLayer *> navLayers;
254  navLayers = navigation->compatibleLayers(*(currentState.freeState()), alongMomentum);
255  unsigned int ilayerCorrected = 0;
256  for ( unsigned int ilayer=0; ilayer<navLayers.size(); ilayer++ ) {
257  // Skip RPC layers
258  if (navLayers[ilayer]->subDetector() != GeomDetEnumerators::DT &&
259  navLayers[ilayer]->subDetector() != GeomDetEnumerators::CSC) continue;
260  ilayerCorrected++;
261  vector<DetLayer::DetWithState> comps = navLayers[ilayer]->compatibleDets(currentState, *propagatorCompatibleDet, *theEstimator);
262  //cout << comps.size() << " compatible Dets with " << navLayers[ilayer]->subDetector() << " Layer " << ilayer << " "
263  //<< dumper.dumpLayer(navLayers[ilayer]);
264  if (comps.size() > 0) {
265  for ( unsigned int icomp=0; icomp<comps.size(); icomp++ ) {
266  DetId id(comps[icomp].first->geographicalId().rawId());
267  detMap[ilayerCorrected].push_back(id);
268  }
269  }
270  }
271  if (theEstimator) delete theEstimator;
272 }
273 
274 
275 //===> fillSegmentMaps
276 void DynamicTruncation::fillSegmentMaps( map<int, vector<DetId> > &compatibleIds,
277  map<int, vector<DTRecSegment4D> > &dtSegMap,
278  map<int, vector<CSCSegment> > &cscSegMap) {
279  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
280  vector<DetId> ids = compatibleIds[it->first];
281  for (unsigned j = 0; j < ids.size(); j++) {
282  if (ids[j].subdetId() == MuonSubdetId::CSC) {
283  CSCDetId ch(ids[j]);
284  vector<CSCSegment> tmp = getSegs->getCSCSegmentsInChamber(ch);
285  for (unsigned int k = 0; k < tmp.size(); k++) cscSegMap[it->first].push_back(tmp[k]);
286  }
287  if (ids[j].subdetId() == MuonSubdetId::DT) {
288  DTChamberId ch(ids[j]);
289  vector<DTRecSegment4D> tmp = getSegs->getDTSegmentsInChamber(ch);
290  for (unsigned int k = 0; k < tmp.size(); k++) dtSegMap[it->first].push_back(tmp[k]);
291  }
292  }
293  }
294 }
295 
296 
297 //===> testDTstation
298 void DynamicTruncation::testDTstation(TrajectoryStateOnSurface &startingState, vector<DTRecSegment4D> const &segments,
299  double &bestEstimator, DTRecSegment4D &bestSeg, TrajectoryStateOnSurface &tsosdt) {
300  if (segments.size() == 0) return;
301  for (unsigned int iSeg = 0; iSeg < segments.size(); iSeg++) {
302  DTChamberId chamber(segments[iSeg].chamberId());
303  if (!propagator->propagate(startingState, theG->idToDet(chamber)->surface()).isValid()) continue;
304  tsosdt = propagator->propagate(startingState, theG->idToDet(chamber)->surface());
305  //if (!tsosdt.isValid()) continue;
306  LocalError apeLoc;
307  if (useAPE) apeLoc = ErrorFrameTransformer().transform(dtApeMap.find(chamber)->second, theG->idToDet(chamber)->surface());
308  StateSegmentMatcher estim(tsosdt, segments[iSeg], apeLoc);
309  double estimator = estim.value();
310  //cout << "estimator DT = " << estimator << endl;
311  if (estimator >= bestEstimator) continue;
312  bestEstimator = estimator;
313  bestSeg = segments[iSeg];
314  }
315 }
316 
317 
318 //===> testCSCstation
319 void DynamicTruncation::testCSCstation(TrajectoryStateOnSurface &startingState, vector<CSCSegment> const &segments,
320  double &bestEstimator, CSCSegment &bestSeg, TrajectoryStateOnSurface &tsoscsc) {
321  if (segments.size() == 0) return;
322  for (unsigned int iSeg = 0; iSeg < segments.size(); iSeg++) {
323  CSCDetId chamber(segments[iSeg].cscDetId());
324  if (!propagator->propagate(startingState, theG->idToDet(chamber)->surface()).isValid()) continue;
325  tsoscsc = propagator->propagate(startingState, theG->idToDet(chamber)->surface());
326  //if (!tsoscsc.isValid()) continue;
327  LocalError apeLoc;
328  if (useAPE) apeLoc = ErrorFrameTransformer().transform(cscApeMap.find(chamber)->second, theG->idToDet(chamber)->surface());
329  StateSegmentMatcher estim(tsoscsc, segments[iSeg], apeLoc);
330  double estimator = estim.value();
331  //cout << "estimator CSC = " << estimator << endl;
332  if (estimator >= bestEstimator) continue;
333  bestEstimator = estimator;
334  bestSeg = segments[iSeg];
335  }
336 }
337 
338 
339 //===> useSegment
341  result.push_back(theMuonRecHitBuilder->build(&bestDTSeg));
342  if (doUpdateOfKFStates) updateWithDThits(currentState, bestDTSeg);
343  else currentState = tsosDT;
344 }
345 
346 
347 //===> useSegment
348 void DynamicTruncation::useSegment(CSCSegment const &bestCSCSeg, TrajectoryStateOnSurface const &tsosCSC) {
349  result.push_back(theMuonRecHitBuilder->build(&bestCSCSeg));
350  if (doUpdateOfKFStates) updateWithCSChits(currentState, bestCSCSeg);
351  else currentState = tsosCSC;
352 }
353 
354 
355 //===> preliminaryFit
356 void DynamicTruncation::preliminaryFit(map<int, vector<DetId> > compatibleIds, map<int, vector<DTRecSegment4D> > dtSegMap,
357  map<int, vector<CSCSegment> > cscSegMap) {
358  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
359  DTRecSegment4D bestDTSeg;
360  CSCSegment bestCSCSeg;
361  double bestDTEstimator = MAX_THR;
362  double bestCSCEstimator = MAX_THR;
363  double initThr = MAX_THR;
364  vector<DTRecSegment4D> dtSegs = dtSegMap[it->first];
365  vector<CSCSegment> cscSegs = cscSegMap[it->first];
366 
367  // DT case: find the most compatible segment
368  TrajectoryStateOnSurface tsosDTlayer;
369  testDTstation(prelFitState, dtSegs, bestDTEstimator, bestDTSeg, tsosDTlayer);
370 
371  // CSC case: find the most compatible segment
372  TrajectoryStateOnSurface tsosCSClayer;
373  testCSCstation(prelFitState, cscSegs, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
374 
375  // Decide whether to keep the layer or not
376  if (bestDTEstimator == MAX_THR && bestCSCEstimator == MAX_THR) continue;
377  if (bestDTEstimator <= bestCSCEstimator) {
378  getThresholdFromCFG(initThr, DetId(bestDTSeg.chamberId()));
379  if (bestDTEstimator >= initThr) continue;
380  prelFitMeas.push_back(theMuonRecHitBuilder->build(&bestDTSeg));
381  prelFitState = updatorHandle->update(tsosDTlayer, *theMuonRecHitBuilder->build(&bestDTSeg));
382  } else {
383  getThresholdFromCFG(initThr, DetId(bestCSCSeg.cscDetId()));
384  if (bestCSCEstimator >= initThr) continue;
385  prelFitMeas.push_back(theMuonRecHitBuilder->build(&bestCSCSeg));
386  prelFitState = updatorHandle->update(tsosCSClayer, *theMuonRecHitBuilder->build(&bestCSCSeg));
387  }
388  }
389  if (!prelFitMeas.empty()) prelFitMeas.pop_back();
390  for (auto imrh = prelFitMeas.rbegin(); imrh != prelFitMeas.rend(); ++imrh) {
391  DetId id = (*imrh)->geographicalId();
392  TrajectoryStateOnSurface tmp = propagatorPF->propagate(prelFitState, theG->idToDet(id)->surface());
393  if (tmp.isValid()) prelFitState = tmp;
394  }
395  muonPTest = prelFitState.globalMomentum().perp();
396  muonETAest = prelFitState.globalMomentum().eta();
397 }
398 
399 
400 //===> chooseLayers
401 bool DynamicTruncation::chooseLayers(int &incompLayers, double const &bestDTEstimator, DTRecSegment4D const &bestDTSeg, TrajectoryStateOnSurface const &tsosDT,
402  double const &bestCSCEstimator, CSCSegment const &bestCSCSeg, TrajectoryStateOnSurface const &tsosCSC) {
403  double initThr = MAX_THR;
404  if (bestDTEstimator == MAX_THR && bestCSCEstimator == MAX_THR) return false;
405  if (bestDTEstimator <= bestCSCEstimator) {
406  // Get threshold for the chamber
407  if (useDBforThr) getThresholdFromDB(initThr, DetId(bestDTSeg.chamberId()));
408  else getThresholdFromCFG(initThr, DetId(bestDTSeg.chamberId()));
409  if (DYTselector == 0 || (DYTselector == 1 && bestDTEstimator < initThr) ||
410  (DYTselector == 2 && incompLayers < 2 && bestDTEstimator < initThr)) {
411  useSegment(bestDTSeg, tsosDT);
412  return true;
413  }
414  } else {
415  // Get threshold for the chamber
416  if (useDBforThr) getThresholdFromDB(initThr, DetId(bestCSCSeg.cscDetId()));
417  else getThresholdFromCFG(initThr, DetId(bestCSCSeg.cscDetId()));
418  if (DYTselector == 0 || (DYTselector == 1 && bestCSCEstimator < initThr) ||
419  (DYTselector == 2 && incompLayers < 2 && bestCSCEstimator < initThr)) {
420  useSegment(bestCSCSeg, tsosCSC);
421  return true;
422  }
423  }
424  return false;
425 }
426 
427 
428 //===> getThresholdFromDB
429 void DynamicTruncation::getThresholdFromDB(double& thr, DetId const& id) {
430  vector<DYTThrObject::DytThrStruct> thrvector = dytThresholds->thrsVec;
431  for (vector<DYTThrObject::DytThrStruct>::const_iterator it = thrvector.begin(); it != thrvector.end(); it++) {
433  if (obj.id == id) {
434  thr = obj.thr;
435  break;
436  }
437  }
438  correctThrByPtAndEta(thr);
439 }
440 
441 
442 //===> correctThrByPtAndEta
444 
446  // This section will be implemented //
447  // after the release of APEs //
449 
450 }
451 
452 
453 //===> getThresholdFromCFG
454 void DynamicTruncation::getThresholdFromCFG(double& thr, DetId const& id) {
455  if (id.subdetId() == MuonSubdetId::DT) {
456  thr = Thrs[0];
457  }
458  if (id.subdetId() == MuonSubdetId::CSC) {
459  thr = Thrs[1];
460  }
461 }
462 
463 
464 //===> sort
466  unsigned int i=0;
467  unsigned int j=0;
468  ConstRecHitContainer::size_type n = recHits.size();
469  for(i=1; i<n; ++i)
470  for(j=n-1; j>=i; --j)
471  if(recHits[j-1]->globalPosition().mag() > recHits[j]->globalPosition().mag()) swap (recHits[j-1],recHits[j]);
472 }
static GlobalError transform(const LocalError &le, const Surface &surf)
int i
Definition: DBlmapReader.cc:9
virtual std::vector< const TrackingRecHit * > recHits() const
Access to component RecHits (if any)
void compatibleDets(TrajectoryStateOnSurface &, std::map< int, std::vector< DetId > > &)
T perp() const
Definition: PV3DBase.h:72
CSCDetId cscDetId() const
Definition: CSCSegment.h:69
ConstRecHitPointer const & recHit() const
void sort(ConstRecHitContainer &)
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
tuple magfield
Definition: HLT_ES_cff.py:2311
void fillSegmentMaps(std::map< int, std::vector< DetId > > &, std::map< int, std::vector< DTRecSegment4D > > &, std::map< int, std::vector< CSCSegment > > &)
void useSegment(DTRecSegment4D const &, TrajectoryStateOnSurface const &)
GlobalPoint globalPosition() const
void getThresholdFromDB(double &, DetId const &)
virtual DTChamberId chamberId() const
The (specific) DetId of the chamber on which the segment resides.
void updateWithCSChits(TrajectoryStateOnSurface &, CSCSegment const &)
void testDTstation(TrajectoryStateOnSurface &, std::vector< DTRecSegment4D > const &, double &, DTRecSegment4D &, TrajectoryStateOnSurface &)
uint16_t size_type
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:40
void swap(Association< C > &lhs, Association< C > &rhs)
Definition: Association.h:116
DataContainer const & measurements() const
Definition: Trajectory.h:203
void correctThrByPtAndEta(double &)
static const int CSC
Definition: MuonSubdetId.h:13
const SurfaceType & surface() const
T mag() const
Definition: PV3DBase.h:67
TransientTrackingRecHit::ConstRecHitContainer ConstRecHitContainer
void update(const LocalTrajectoryParameters &p, const SurfaceType &aSurface, const MagneticField *field, SurfaceSide side=SurfaceSideDefinition::atCenterOfSurface)
tuple result
Definition: query.py:137
int j
Definition: DBlmapReader.cc:9
void testCSCstation(TrajectoryStateOnSurface &, std::vector< CSCSegment > const &, double &, CSCSegment &, TrajectoryStateOnSurface &)
const bool isValidThdDB()
Definition: ThrParameters.h:25
TransientTrackingRecHit::ConstRecHitContainer filter(const Trajectory &)
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
const std::vector< CSCRecHit2D > & specificRecHits() const
Definition: CSCSegment.h:65
#define MAX_THR
TrajectoryStateOnSurface const & forwardPredictedState() const
Access to forward predicted state (from fitter or builder)
std::vector< ConstRecHitPointer > ConstRecHitContainer
void preliminaryFit(std::map< int, std::vector< DetId > >, std::map< int, std::vector< DTRecSegment4D > >, std::map< int, std::vector< CSCSegment > >)
Definition: DetId.h:18
DynamicTruncation(const edm::Event &, const MuonServiceProxy &)
void update(TrajectoryStateOnSurface &, ConstRecHitPointer)
void fillDYTInfos(int const &, bool const &, int &, double const &, double const &, DTRecSegment4D const &, CSCSegment const &)
TransientTrackingRecHit::ConstRecHitPointer ConstRecHitPointer
std::vector< std::vector< double > > tmp
Definition: MVATrainer.cc:100
GlobalVector globalMomentum() const
#define update(a, b)
int station() const
Definition: CSCDetId.h:99
static const int DT
Definition: MuonSubdetId.h:12
bool chooseLayers(int &, double const &, DTRecSegment4D const &, TrajectoryStateOnSurface const &, double const &, CSCSegment const &, TrajectoryStateOnSurface const &)
int stationfromDet(DetId const &)
DetId geographicalId() const
int station() const
Return the station number.
Definition: DTChamberId.h:51
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
T first(std::pair< T, U > const &p)
void updateWithDThits(TrajectoryStateOnSurface &, DTRecSegment4D const &)
void setThr(const std::vector< int > &)
void getThresholdFromCFG(double &, DetId const &)