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