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 
30 
31 #define MAX_THR 1e7
32 
33 using namespace edm;
34 using namespace std;
35 using namespace reco;
36 
37 
38 
40  propagator = theService.propagator("SmartPropagatorAny");
41  propagatorPF = theService.propagator("SmartPropagatorAny");
42  propagatorCompatibleDet = theService.propagator("SmartPropagatorAny");
43  theG = theService.trackingGeometry();
44  theService.eventSetup().get<TransientRecHitRecord>().get("MuonRecHitBuilder",theMuonRecHitBuilder);
45  theService.eventSetup().get<TrackingComponentsRecord>().get("KFUpdator",updatorHandle);
46  theService.eventSetup().get<MuonGeometryRecord>().get(cscGeom);
47  theService.eventSetup().get<MuonRecoGeometryRecord>().get(navMuon);
48  theService.eventSetup().get<IdealMagneticFieldRecord>().get(magfield);
49  navigation = new DirectMuonNavigation(theService.detLayerGeometry());
50  getSegs = new ChamberSegmentUtility();
51  thrManager = new ThrParameters(&theService.eventSetup());
52  useDBforThr = thrManager->isValidThdDB();
53  if (useDBforThr) dytThresholds = thrManager->getInitialThresholds();
54  doUpdateOfKFStates = true;
55 }
56 
58  delete navigation;
59  delete thrManager;
60  delete getSegs;
61 }
62 
64  TrajectoryStateOnSurface temp = updatorHandle->update(tsos, *rechit);
65  if (temp.isValid()) tsos = updatorHandle->update(tsos, *rechit);
66 }
67 
69  ConstRecHitContainer tmprecHits;
70  vector<const TrackingRecHit*> DTrh = bestDTSeg.recHits();
71  for (vector<const TrackingRecHit*>::iterator it = DTrh.begin(); it != DTrh.end(); it++) {
72  tmprecHits.push_back(theMuonRecHitBuilder->build(*it));
73  }
74  sort(tmprecHits);
75  for (ConstRecHitContainer::const_iterator it = tmprecHits.begin(); it != tmprecHits.end(); ++it) {
76  DTLayerId layid((*it)->det()->geographicalId());
77  TrajectoryStateOnSurface temp = propagator->propagate(tsos, theG->idToDet(layid)->surface());
78  if (temp.isValid()) tsos = updatorHandle->update(temp, **it);
79  }
80 }
81 
83  ConstRecHitContainer tmprecHits;
84  vector<CSCRecHit2D> CSCrh = bestCSCSeg.specificRecHits();
85  for (vector<CSCRecHit2D>::iterator it = CSCrh.begin(); it != CSCrh.end(); ++it) {
86  tmprecHits.push_back(theMuonRecHitBuilder->build(&*it));
87  }
88  sort(tmprecHits);
89  for (ConstRecHitContainer::const_iterator it = tmprecHits.begin(); it != tmprecHits.end(); ++it) {
90  const CSCLayer* cscLayer = cscGeom->layer((*it)->det()->geographicalId());
91  TrajectoryStateOnSurface temp = propagator->propagate(tsos, cscLayer->surface());
92  if (temp.isValid()) tsos = updatorHandle->update(temp, **it);
93  }
94 }
95 
96 
100 void DynamicTruncation::setSelector(int selector) {
101  if (selector < 0 || selector > 2) throw cms::Exception("NotAvailable") << "DYT selector: wrong option!" << endl;
102  //if (selector == 0) cout << "[DYT disabled]\n";
103  //if (selector == 1) cout << "[use all compatible stations]\n";
104  //if (selector == 2) cout << "[stop at second consecutive incompatible station]\n";
105  DYTselector = selector;
106 
107 }
108 
109 void DynamicTruncation::setUseAPE(bool useAPE_) {
110  useAPE = useAPE_;
111 }
112 
114  doUpdateOfKFStates = upState;
115 }
116 
117 void DynamicTruncation::setThr(const vector<int>& thr) {
118  if (thr.size() == 2) {
119  for (unsigned int i = 0; i < thr.size(); i++)
120  if (thr[i] >= 0) Thrs.push_back(thr[i]);
121  else Thrs.push_back(MAX_THR);
122  return;
123  }
124  throw cms::Exception("NotAvailable") << "WARNING: wrong size for the threshold vector!\nExpected size: 2\n Found size: " << thr.size();
125 }
129 
130 
131 
132 //===> filter
134  result.clear();
135  prelFitMeas.clear();
136 
137  // Get APE maps
138  dtApeMap = thrManager->GetDTApeMap();
139  cscApeMap = thrManager->GetCSCApeMap();
140 
141  // Get Last tracker TSOS (updated)
142  vector<TrajectoryMeasurement> muonMeasurements = traj.measurements();
143  TrajectoryMeasurement lastTKm = muonMeasurements.front();
144  for (vector<TrajectoryMeasurement>::const_iterator imT = muonMeasurements.begin(); imT != muonMeasurements.end(); imT++ ) {
145  if ( !(*imT).recHit()->isValid() ) continue;
146  const TransientTrackingRecHit* hit = &(*(*imT).recHit());
147  if (hit->geographicalId().det() == DetId::Tracker) {
148  result.push_back((*imT).recHit());
149  if (!(*imT).forwardPredictedState().isValid()) continue;
150  if ((*imT).forwardPredictedState().globalPosition().mag() >
151  lastTKm.forwardPredictedState().globalPosition().mag()) lastTKm = *imT;
152  }
153  }
154  currentState = lastTKm.forwardPredictedState();
155  update(currentState, lastTKm.recHit());
156 
157  prelFitState = lastTKm.forwardPredictedState();
158  update(prelFitState, lastTKm.recHit());
159  prelFitMeas = result;
160 
161  // Run the DYT
162  filteringAlgo();
163 
164  return result;
165 }
166 
167 
168 //===> filteringAlgo
170  map<int, vector<DetId> > compatibleIds;
171  map<int, vector<DTRecSegment4D> > dtSegMap;
172  map<int, vector<CSCSegment> > cscSegMap;
173  int incompConLay = 0;
174  nStationsUsed = 0;
175 
176  // Get list of compatible layers
177  compatibleDets(currentState, compatibleIds);
178 
179  // Fill segment maps
180  fillSegmentMaps(compatibleIds, dtSegMap, cscSegMap);
181 
182  // Do a preliminary fit
183  if (useDBforThr) preliminaryFit(compatibleIds, dtSegMap, cscSegMap);
184 
185  // Loop on compatible layers
186  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
187  int stLayer = stationfromDet(it->second.front());
188  DTRecSegment4D bestDTSeg;
189  CSCSegment bestCSCSeg;
190  double bestDTEstimator = MAX_THR;
191  double bestCSCEstimator = MAX_THR;
192  vector<DTRecSegment4D> dtSegs = dtSegMap[it->first];
193  vector<CSCSegment> cscSegs = cscSegMap[it->first];
194 
195  // DT case: find the most compatible segment
196  TrajectoryStateOnSurface tsosDTlayer;
197  testDTstation(currentState, dtSegs, bestDTEstimator, bestDTSeg, tsosDTlayer);
198 
199  // CSC case: find the most compatible segment
200  TrajectoryStateOnSurface tsosCSClayer;
201  testCSCstation(currentState, cscSegs, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
202 
203  // Decide whether to keep the layer or not
204  bool chosenLayer = chooseLayers(incompConLay, bestDTEstimator, bestDTSeg, tsosDTlayer, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
205  fillDYTInfos(stLayer, chosenLayer, incompConLay, bestDTEstimator, bestCSCEstimator, bestDTSeg, bestCSCSeg);
206  }
207  //cout << "Number of used stations = " << nStationsUsed << endl;
208 }
209 
210 
211 //===> stationfromDet
213  if (det.subdetId() == MuonSubdetId::CSC) {
214  CSCDetId ch(det);
215  return ch.station();
216  }
217  if (det.subdetId() == MuonSubdetId::DT) {
218  DTChamberId ch(det);
219  return ch.station();
220  }
221  return 0;
222 }
223 
224 
225 //===> fillDYTInfos
226 void DynamicTruncation::fillDYTInfos(int const &st, bool const &chosenLayer, int &incompConLay,
227  double const &bestDTEstimator, double const &bestCSCEstimator,
228  DTRecSegment4D const &bestDTSeg, CSCSegment const &bestCSCSeg) {
229  if (chosenLayer) {
230  nStationsUsed++;
231  incompConLay = 0;
232  if (bestDTEstimator <= bestCSCEstimator) {
233  estimatorMap[st] = bestDTEstimator;
234  DetId id(bestDTSeg.chamberId());
235  idChamberMap[st] = id;
236  } else {
237  DetId id(bestCSCSeg.cscDetId());
238  idChamberMap[st] = id;
239  estimatorMap[st] = bestCSCEstimator;
240  }
241  usedStationMap[st] = true;
242  } else {
243  incompConLay++;
244  estimatorMap[st] = -1;
245  usedStationMap[st] = false;
246  }
247 }
248 
249 
250 //===> compatibleDets
251 void DynamicTruncation::compatibleDets(TrajectoryStateOnSurface &tsos, map<int, vector<DetId> > &detMap) {
252  MuonPatternRecoDumper dumper;
253  MeasurementEstimator *theEstimator = new Chi2MeasurementEstimator(1000, 1000);
254  vector<const DetLayer *> navLayers;
255  navLayers = navigation->compatibleLayers(*(currentState.freeState()), alongMomentum);
256  unsigned int ilayerCorrected = 0;
257  for ( unsigned int ilayer=0; ilayer<navLayers.size(); ilayer++ ) {
258  // Skip RPC layers
259  if (navLayers[ilayer]->subDetector() != GeomDetEnumerators::DT &&
260  navLayers[ilayer]->subDetector() != GeomDetEnumerators::CSC) continue;
261  ilayerCorrected++;
262  vector<DetLayer::DetWithState> comps = navLayers[ilayer]->compatibleDets(currentState, *propagatorCompatibleDet, *theEstimator);
263  //cout << comps.size() << " compatible Dets with " << navLayers[ilayer]->subDetector() << " Layer " << ilayer << " "
264  //<< dumper.dumpLayer(navLayers[ilayer]);
265  if (comps.size() > 0) {
266  for ( unsigned int icomp=0; icomp<comps.size(); icomp++ ) {
267  DetId id(comps[icomp].first->geographicalId().rawId());
268  detMap[ilayerCorrected].push_back(id);
269  }
270  }
271  }
272  if (theEstimator) delete theEstimator;
273 }
274 
275 
276 //===> fillSegmentMaps
277 void DynamicTruncation::fillSegmentMaps( map<int, vector<DetId> > &compatibleIds,
278  map<int, vector<DTRecSegment4D> > &dtSegMap,
279  map<int, vector<CSCSegment> > &cscSegMap) {
280  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
281  vector<DetId> ids = compatibleIds[it->first];
282  for (unsigned j = 0; j < ids.size(); j++) {
283  if (ids[j].subdetId() == MuonSubdetId::CSC) {
284  CSCDetId ch(ids[j]);
285  vector<CSCSegment> tmp = getSegs->getCSCSegmentsInChamber(ch);
286  for (unsigned int k = 0; k < tmp.size(); k++) cscSegMap[it->first].push_back(tmp[k]);
287  }
288  if (ids[j].subdetId() == MuonSubdetId::DT) {
289  DTChamberId ch(ids[j]);
290  vector<DTRecSegment4D> tmp = getSegs->getDTSegmentsInChamber(ch);
291  for (unsigned int k = 0; k < tmp.size(); k++) dtSegMap[it->first].push_back(tmp[k]);
292  }
293  }
294  }
295 }
296 
297 
298 //===> testDTstation
299 void DynamicTruncation::testDTstation(TrajectoryStateOnSurface &startingState, vector<DTRecSegment4D> const &segments,
300  double &bestEstimator, DTRecSegment4D &bestSeg, TrajectoryStateOnSurface &tsosdt) {
301  if (segments.size() == 0) return;
302  for (unsigned int iSeg = 0; iSeg < segments.size(); iSeg++) {
303  DTChamberId chamber(segments[iSeg].chamberId());
304  if (!propagator->propagate(startingState, theG->idToDet(chamber)->surface()).isValid()) continue;
305  tsosdt = propagator->propagate(startingState, theG->idToDet(chamber)->surface());
306  //if (!tsosdt.isValid()) continue;
307  LocalError apeLoc;
308  if (useAPE) apeLoc = ErrorFrameTransformer().transform(dtApeMap.find(chamber)->second, theG->idToDet(chamber)->surface());
309  StateSegmentMatcher estim(tsosdt, segments[iSeg], apeLoc);
310  double estimator = estim.value();
311  //cout << "estimator DT = " << estimator << endl;
312  if (estimator >= bestEstimator) continue;
313  bestEstimator = estimator;
314  bestSeg = segments[iSeg];
315  }
316 }
317 
318 
319 //===> testCSCstation
320 void DynamicTruncation::testCSCstation(TrajectoryStateOnSurface &startingState, vector<CSCSegment> const &segments,
321  double &bestEstimator, CSCSegment &bestSeg, TrajectoryStateOnSurface &tsoscsc) {
322  if (segments.size() == 0) return;
323  for (unsigned int iSeg = 0; iSeg < segments.size(); iSeg++) {
324  CSCDetId chamber(segments[iSeg].cscDetId());
325  if (!propagator->propagate(startingState, theG->idToDet(chamber)->surface()).isValid()) continue;
326  tsoscsc = propagator->propagate(startingState, theG->idToDet(chamber)->surface());
327  //if (!tsoscsc.isValid()) continue;
328  LocalError apeLoc;
329  if (useAPE) apeLoc = ErrorFrameTransformer().transform(cscApeMap.find(chamber)->second, theG->idToDet(chamber)->surface());
330  StateSegmentMatcher estim(tsoscsc, segments[iSeg], apeLoc);
331  double estimator = estim.value();
332  //cout << "estimator CSC = " << estimator << endl;
333  if (estimator >= bestEstimator) continue;
334  bestEstimator = estimator;
335  bestSeg = segments[iSeg];
336  }
337 }
338 
339 
340 //===> useSegment
342  result.push_back(theMuonRecHitBuilder->build(&bestDTSeg));
343  if (doUpdateOfKFStates) updateWithDThits(currentState, bestDTSeg);
344  else currentState = tsosDT;
345 }
346 
347 
348 //===> useSegment
349 void DynamicTruncation::useSegment(CSCSegment const &bestCSCSeg, TrajectoryStateOnSurface const &tsosCSC) {
350  result.push_back(theMuonRecHitBuilder->build(&bestCSCSeg));
351  if (doUpdateOfKFStates) updateWithCSChits(currentState, bestCSCSeg);
352  else currentState = tsosCSC;
353 }
354 
355 
356 //===> preliminaryFit
357 void DynamicTruncation::preliminaryFit(map<int, vector<DetId> > compatibleIds, map<int, vector<DTRecSegment4D> > dtSegMap,
358  map<int, vector<CSCSegment> > cscSegMap) {
359  for (map<int, vector<DetId> >::iterator it=compatibleIds.begin(); it!=compatibleIds.end(); ++it) {
360  DTRecSegment4D bestDTSeg;
361  CSCSegment bestCSCSeg;
362  double bestDTEstimator = MAX_THR;
363  double bestCSCEstimator = MAX_THR;
364  double initThr = MAX_THR;
365  vector<DTRecSegment4D> dtSegs = dtSegMap[it->first];
366  vector<CSCSegment> cscSegs = cscSegMap[it->first];
367 
368  // DT case: find the most compatible segment
369  TrajectoryStateOnSurface tsosDTlayer;
370  testDTstation(prelFitState, dtSegs, bestDTEstimator, bestDTSeg, tsosDTlayer);
371 
372  // CSC case: find the most compatible segment
373  TrajectoryStateOnSurface tsosCSClayer;
374  testCSCstation(prelFitState, cscSegs, bestCSCEstimator, bestCSCSeg, tsosCSClayer);
375 
376  // Decide whether to keep the layer or not
377  if (bestDTEstimator == MAX_THR && bestCSCEstimator == MAX_THR) continue;
378  if (bestDTEstimator <= bestCSCEstimator) {
379  getThresholdFromCFG(initThr, DetId(bestDTSeg.chamberId()));
380  if (bestDTEstimator >= initThr) continue;
381  prelFitMeas.push_back(theMuonRecHitBuilder->build(&bestDTSeg));
382  prelFitState = updatorHandle->update(tsosDTlayer, *theMuonRecHitBuilder->build(&bestDTSeg));
383  } else {
384  getThresholdFromCFG(initThr, DetId(bestCSCSeg.cscDetId()));
385  if (bestCSCEstimator >= initThr) continue;
386  prelFitMeas.push_back(theMuonRecHitBuilder->build(&bestCSCSeg));
387  prelFitState = updatorHandle->update(tsosCSClayer, *theMuonRecHitBuilder->build(&bestCSCSeg));
388  }
389  }
390  if (!prelFitMeas.empty()) prelFitMeas.pop_back();
391  for (auto imrh = prelFitMeas.rbegin(); imrh != prelFitMeas.rend(); ++imrh) {
392  DetId id = (*imrh)->geographicalId();
393  TrajectoryStateOnSurface tmp = propagatorPF->propagate(prelFitState, theG->idToDet(id)->surface());
394  if (tmp.isValid()) prelFitState = tmp;
395  }
396  muonPTest = prelFitState.globalMomentum().perp();
397  muonETAest = prelFitState.globalMomentum().eta();
398 }
399 
400 
401 //===> chooseLayers
402 bool DynamicTruncation::chooseLayers(int &incompLayers, double const &bestDTEstimator, DTRecSegment4D const &bestDTSeg, TrajectoryStateOnSurface const &tsosDT,
403  double const &bestCSCEstimator, CSCSegment const &bestCSCSeg, TrajectoryStateOnSurface const &tsosCSC) {
404  double initThr = MAX_THR;
405  if (bestDTEstimator == MAX_THR && bestCSCEstimator == MAX_THR) return false;
406  if (bestDTEstimator <= bestCSCEstimator) {
407  // Get threshold for the chamber
408  if (useDBforThr) getThresholdFromDB(initThr, DetId(bestDTSeg.chamberId()));
409  else getThresholdFromCFG(initThr, DetId(bestDTSeg.chamberId()));
410  if (DYTselector == 0 || (DYTselector == 1 && bestDTEstimator < initThr) ||
411  (DYTselector == 2 && incompLayers < 2 && bestDTEstimator < initThr)) {
412  useSegment(bestDTSeg, tsosDT);
413  return true;
414  }
415  } else {
416  // Get threshold for the chamber
417  if (useDBforThr) getThresholdFromDB(initThr, DetId(bestCSCSeg.cscDetId()));
418  else getThresholdFromCFG(initThr, DetId(bestCSCSeg.cscDetId()));
419  if (DYTselector == 0 || (DYTselector == 1 && bestCSCEstimator < initThr) ||
420  (DYTselector == 2 && incompLayers < 2 && bestCSCEstimator < initThr)) {
421  useSegment(bestCSCSeg, tsosCSC);
422  return true;
423  }
424  }
425  return false;
426 }
427 
428 
429 //===> getThresholdFromDB
430 void DynamicTruncation::getThresholdFromDB(double& thr, DetId const& id) {
431  vector<DYTThrObject::DytThrStruct> thrvector = dytThresholds->thrsVec;
432  for (vector<DYTThrObject::DytThrStruct>::const_iterator it = thrvector.begin(); it != thrvector.end(); it++) {
434  if (obj.id == id) {
435  thr = obj.thr;
436  break;
437  }
438  }
439  correctThrByPtAndEta(thr);
440 }
441 
442 
443 //===> correctThrByPtAndEta
445 
447  // This section will be implemented //
448  // after the release of APEs //
450 
451 }
452 
453 
454 //===> getThresholdFromCFG
455 void DynamicTruncation::getThresholdFromCFG(double& thr, DetId const& id) {
456  if (id.subdetId() == MuonSubdetId::DT) {
457  thr = Thrs[0];
458  }
459  if (id.subdetId() == MuonSubdetId::CSC) {
460  thr = Thrs[1];
461  }
462 }
463 
464 
465 //===> sort
467  unsigned int i=0;
468  unsigned int j=0;
469  ConstRecHitContainer::size_type n = recHits.size();
470  for(i=1; i<n; ++i)
471  for(j=n-1; j>=i; --j)
472  if(recHits[j-1]->globalPosition().mag() > recHits[j]->globalPosition().mag()) swap (recHits[j-1],recHits[j]);
473 }
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 &)