CMS 3D CMS Logo

DTTimingExtractor.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: MuonIdentification
4 // Class: DTTimingExtractor
5 //
11 //
12 // Original Author: Traczyk Piotr
13 // Created: Thu Oct 11 15:01:28 CEST 2007
14 //
15 //
16 
18 
19 // user include files
23 
26 
28 
30 
39 
43 
51 
56 
57 // system include files
58 #include <memory>
59 #include <vector>
60 #include <string>
61 #include <iostream>
62 
63 namespace edm {
64  class ParameterSet;
65  class EventSetup;
66  class InputTag;
67 } // namespace edm
68 
69 class MuonServiceProxy;
70 
71 //
72 // constructors and destructor
73 //
75  MuonSegmentMatcher* segMatcher,
77  : theHitsMin_(iConfig.getParameter<int>("HitsMin")),
78  thePruneCut_(iConfig.getParameter<double>("PruneCut")),
79  theTimeOffset_(iConfig.getParameter<double>("DTTimeOffset")),
80  theError_(iConfig.getParameter<double>("HitError")),
81  useSegmentT0_(iConfig.getParameter<bool>("UseSegmentT0")),
82  doWireCorr_(iConfig.getParameter<bool>("DoWireCorr")),
83  dropTheta_(iConfig.getParameter<bool>("DropTheta")),
84  requireBothProjections_(iConfig.getParameter<bool>("RequireBothProjections")),
85  debug(iConfig.getParameter<bool>("debug")) {
86  edm::ParameterSet serviceParameters = iConfig.getParameter<edm::ParameterSet>("ServiceParameters");
87  theService = std::make_unique<MuonServiceProxy>(serviceParameters, edm::ConsumesCollector(iC));
88  theMatcher = segMatcher;
89 }
90 
92 
93 //
94 // member functions
95 //
97  const std::vector<const DTRecSegment4D*>& segments,
98  reco::TrackRef muonTrack,
99  const edm::Event& iEvent,
100  const edm::EventSetup& iSetup) {
101  if (debug)
102  std::cout << " *** DT Timimng Extractor ***" << std::endl;
103 
104  theService->update(iSetup);
105 
106  const GlobalTrackingGeometry* theTrackingGeometry = &*theService->trackingGeometry();
107 
108  // get the DT geometry
109  edm::ESHandle<DTGeometry> theDTGeom;
110  iSetup.get<MuonGeometryRecord>().get(theDTGeom);
111 
112  // get the propagator
114  iSetup.get<TrackingComponentsRecord>().get("SteppingHelixPropagatorAny", propagator);
115  const Propagator* propag = propagator.product();
116 
117  math::XYZPoint pos = muonTrack->innerPosition();
118  math::XYZVector mom = muonTrack->innerMomentum();
119  GlobalPoint posp(pos.x(), pos.y(), pos.z());
120  GlobalVector momv(mom.x(), mom.y(), mom.z());
121  FreeTrajectoryState muonFTS(posp, momv, (TrackCharge)muonTrack->charge(), theService->magneticField().product());
122 
123  // create a collection on TimeMeasurements for the track
124  std::vector<TimeMeasurement> tms;
125  for (const auto& rechit : segments) {
126  // Create the ChamberId
127  DetId id = rechit->geographicalId();
128  DTChamberId chamberId(id.rawId());
129  int station = chamberId.station();
130  if (debug)
131  std::cout << "Matched DT segment in station " << station << std::endl;
132 
133  // use only segments with both phi and theta projections present (optional)
134  bool bothProjections = ((rechit->hasPhi()) && (rechit->hasZed()));
135  if (requireBothProjections_ && !bothProjections)
136  continue;
137 
138  // loop over (theta, phi) segments
139  for (int phi = 0; phi < 2; phi++) {
140  if (dropTheta_ && !phi)
141  continue;
142 
143  const DTRecSegment2D* segm;
144  if (phi) {
145  segm = dynamic_cast<const DTRecSegment2D*>(rechit->phiSegment());
146  if (debug)
147  std::cout << " *** Segment t0: " << segm->t0() << std::endl;
148  } else
149  segm = dynamic_cast<const DTRecSegment2D*>(rechit->zSegment());
150 
151  if (segm == nullptr)
152  continue;
153  if (segm->specificRecHits().empty())
154  continue;
155 
156  const GeomDet* geomDet = theTrackingGeometry->idToDet(segm->geographicalId());
157  const std::vector<DTRecHit1D>& hits1d(segm->specificRecHits());
158 
159  // store all the hits from the segment
160  for (const auto& hiti : hits1d) {
161  const GeomDet* dtcell = theTrackingGeometry->idToDet(hiti.geographicalId());
162  TimeMeasurement thisHit;
163 
164  std::pair<TrajectoryStateOnSurface, double> tsos;
165  tsos = propag->propagateWithPath(muonFTS, dtcell->surface());
166 
167  double dist;
168  double dist_straight = dtcell->toGlobal(hiti.localPosition()).mag();
169  if (tsos.first.isValid()) {
170  dist = tsos.second + posp.mag();
171  // std::cout << "Propagate distance: " << dist << " ( innermost: " << posp.mag() << ")" << std::endl;
172  } else {
173  dist = dist_straight;
174  // std::cout << "Geom distance: " << dist << std::endl;
175  }
176 
177  thisHit.driftCell = hiti.geographicalId();
178  if (hiti.lrSide() == DTEnums::Left)
179  thisHit.isLeft = true;
180  else
181  thisHit.isLeft = false;
182  thisHit.isPhi = phi;
183  thisHit.posInLayer = geomDet->toLocal(dtcell->toGlobal(hiti.localPosition())).x();
184  thisHit.distIP = dist;
185  thisHit.station = station;
186  if (useSegmentT0_ && segm->ist0Valid())
187  thisHit.timeCorr = segm->t0();
188  else
189  thisHit.timeCorr = 0.;
190  thisHit.timeCorr += theTimeOffset_;
191 
192  // signal propagation along the wire correction for unmached theta or phi segment hits
193  if (doWireCorr_ && !bothProjections && tsos.first.isValid()) {
194  const DTLayer* layer = theDTGeom->layer(hiti.wireId());
195  float propgL = layer->toLocal(tsos.first.globalPosition()).y();
196  float wirePropCorr = propgL / 24.4 * 0.00543; // signal propagation speed along the wire
197  if (thisHit.isLeft)
198  wirePropCorr = -wirePropCorr;
199  thisHit.posInLayer += wirePropCorr;
200  const DTSuperLayer* sl = layer->superLayer();
201  float tofCorr = sl->surface().position().mag() - tsos.first.globalPosition().mag();
202  tofCorr = (tofCorr / 29.979) * 0.00543;
203  if (thisHit.isLeft)
204  tofCorr = -tofCorr;
205  thisHit.posInLayer += tofCorr;
206  } else {
207  // non straight-line path correction
208  float slCorr = (dist_straight - dist) / 29.979 * 0.00543;
209  if (thisHit.isLeft)
210  slCorr = -slCorr;
211  thisHit.posInLayer += slCorr;
212  }
213 
214  if (debug)
215  std::cout << " dist: " << dist << " t0: " << thisHit.posInLayer << std::endl;
216 
217  tms.push_back(thisHit);
218  }
219  } // phi = (0,1)
220  } // rechit
221 
222  bool modified = false;
223  std::vector<double> dstnc, local_t0, hitWeightTimeVtx, hitWeightInvbeta, left;
224  double totalWeightInvbeta = 0;
225  double totalWeightTimeVtx = 0;
226 
227  // Now loop over the measurements, calculate 1/beta and time at vertex and cut away outliers
228  do {
229  modified = false;
230  dstnc.clear();
231  local_t0.clear();
232  hitWeightTimeVtx.clear();
233  hitWeightInvbeta.clear();
234  left.clear();
235 
236  std::vector<int> hit_idx;
237  totalWeightInvbeta = 0;
238  totalWeightTimeVtx = 0;
239 
240  // Rebuild segments
241  for (int sta = 1; sta < 5; sta++)
242  for (int phi = 0; phi < 2; phi++) {
243  std::vector<TimeMeasurement> seg;
244  std::vector<int> seg_idx;
245  int tmpos = 0;
246  for (auto& tm : tms) {
247  if ((tm.station == sta) && (tm.isPhi == phi)) {
248  seg.push_back(tm);
249  seg_idx.push_back(tmpos);
250  }
251  tmpos++;
252  }
253 
254  unsigned int segsize = seg.size();
255  if (segsize < theHitsMin_)
256  continue;
257 
258  double a = 0, b = 0;
259  std::vector<double> hitxl, hitxr, hityl, hityr;
260 
261  for (auto& tm : seg) {
262  DetId id = tm.driftCell;
263  const GeomDet* dtcell = theTrackingGeometry->idToDet(id);
264  DTChamberId chamberId(id.rawId());
265  const GeomDet* dtcham = theTrackingGeometry->idToDet(chamberId);
266 
267  double celly = dtcham->toLocal(dtcell->position()).z();
268 
269  if (tm.isLeft) {
270  hitxl.push_back(celly);
271  hityl.push_back(tm.posInLayer);
272  } else {
273  hitxr.push_back(celly);
274  hityr.push_back(tm.posInLayer);
275  }
276  }
277 
278  if (!fitT0(a, b, hitxl, hityl, hitxr, hityr)) {
279  if (debug)
280  std::cout << " t0 = zero, Left hits: " << hitxl.size() << " Right hits: " << hitxr.size() << std::endl;
281  continue;
282  }
283 
284  // a segment must have at least one left and one right hit
285  if ((hitxl.empty()) || (hityl.empty()))
286  continue;
287 
288  int segidx = 0;
289  for (const auto& tm : seg) {
290  DetId id = tm.driftCell;
291  const GeomDet* dtcell = theTrackingGeometry->idToDet(id);
292  DTChamberId chamberId(id.rawId());
293  const GeomDet* dtcham = theTrackingGeometry->idToDet(chamberId);
294 
295  double layerZ = dtcham->toLocal(dtcell->position()).z();
296  double segmLocalPos = b + layerZ * a;
297  double hitLocalPos = tm.posInLayer;
298  int hitSide = -tm.isLeft * 2 + 1;
299  double t0_segm = (-(hitSide * segmLocalPos) + (hitSide * hitLocalPos)) / 0.00543 + tm.timeCorr;
300 
301  if (debug)
302  std::cout << " Segm hit. dstnc: " << tm.distIP << " t0: " << t0_segm << std::endl;
303 
304  dstnc.push_back(tm.distIP);
305  local_t0.push_back(t0_segm);
306  left.push_back(hitSide);
307  hitWeightInvbeta.push_back(((double)seg.size() - 2.) * tm.distIP * tm.distIP /
308  ((double)seg.size() * 30. * 30. * theError_ * theError_));
309  hitWeightTimeVtx.push_back(((double)seg.size() - 2.) / ((double)seg.size() * theError_ * theError_));
310  hit_idx.push_back(seg_idx.at(segidx));
311  segidx++;
312  totalWeightInvbeta += ((double)seg.size() - 2.) * tm.distIP * tm.distIP /
313  ((double)seg.size() * 30. * 30. * theError_ * theError_);
314  totalWeightTimeVtx += ((double)seg.size() - 2.) / ((double)seg.size() * theError_ * theError_);
315  }
316  }
317 
318  if (totalWeightInvbeta == 0)
319  break;
320 
321  // calculate the value and error of 1/beta and timeVtx from the complete set of 1D hits
322  if (debug)
323  std::cout << " Points for global fit: " << dstnc.size() << std::endl;
324 
325  double invbeta = 0, invbetaErr = 0;
326  double timeVtx = 0, timeVtxErr = 0;
327 
328  for (unsigned int i = 0; i < dstnc.size(); i++) {
329  invbeta += (1. + local_t0.at(i) / dstnc.at(i) * 30.) * hitWeightInvbeta.at(i) / totalWeightInvbeta;
330  timeVtx += local_t0.at(i) * hitWeightTimeVtx.at(i) / totalWeightTimeVtx;
331  }
332 
333  double chimax = 0.;
334  std::vector<TimeMeasurement>::iterator tmmax;
335 
336  // Calculate the inv beta and time at vertex dispersion
337  double diff_ibeta, diff_tvtx;
338  for (unsigned int i = 0; i < dstnc.size(); i++) {
339  diff_ibeta = (1. + local_t0.at(i) / dstnc.at(i) * 30.) - invbeta;
340  diff_ibeta = diff_ibeta * diff_ibeta * hitWeightInvbeta.at(i);
341  diff_tvtx = local_t0.at(i) - timeVtx;
342  diff_tvtx = diff_tvtx * diff_tvtx * hitWeightTimeVtx.at(i);
343  invbetaErr += diff_ibeta;
344  timeVtxErr += diff_tvtx;
345 
346  // decide if we cut away time at vertex outliers or inverse beta outliers
347  // currently not configurable.
348  if (diff_tvtx > chimax) {
349  tmmax = tms.begin() + hit_idx.at(i);
350  chimax = diff_tvtx;
351  }
352  }
353 
354  // cut away the outliers
355  if (chimax > thePruneCut_) {
356  tms.erase(tmmax);
357  modified = true;
358  }
359 
360  if (debug) {
361  double cf = 1. / (dstnc.size() - 1);
362  invbetaErr = sqrt(invbetaErr / totalWeightInvbeta * cf);
363  timeVtxErr = sqrt(timeVtxErr / totalWeightTimeVtx * cf);
364  std::cout << " Measured 1/beta: " << invbeta << " +/- " << invbetaErr << std::endl;
365  std::cout << " Measured time: " << timeVtx << " +/- " << timeVtxErr << std::endl;
366  }
367 
368  } while (modified);
369 
370  for (unsigned int i = 0; i < dstnc.size(); i++) {
371  tmSequence.dstnc.push_back(dstnc.at(i));
372  tmSequence.local_t0.push_back(local_t0.at(i));
373  tmSequence.weightInvbeta.push_back(hitWeightInvbeta.at(i));
374  tmSequence.weightTimeVtx.push_back(hitWeightTimeVtx.at(i));
375  }
376 
377  tmSequence.totalWeightInvbeta = totalWeightInvbeta;
378  tmSequence.totalWeightTimeVtx = totalWeightTimeVtx;
379 }
380 
381 // ------------ method called to produce the data ------------
383  reco::TrackRef muonTrack,
384  const edm::Event& iEvent,
385  const edm::EventSetup& iSetup) {
386  // get the DT segments that were used to construct the muon
387  std::vector<const DTRecSegment4D*> range = theMatcher->matchDT(*muonTrack, iEvent);
388 
389  if (debug)
390  std::cout << " The muon track matches " << range.size() << " segments." << std::endl;
391  fillTiming(tmSequence, range, muonTrack, iEvent, iSetup);
392 }
393 
395  double& b,
396  const std::vector<double>& xl,
397  const std::vector<double>& yl,
398  const std::vector<double>& xr,
399  const std::vector<double>& yr) {
400  double sx = 0, sy = 0, sxy = 0, sxx = 0, ssx = 0, ssy = 0, s = 0, ss = 0;
401 
402  for (unsigned int i = 0; i < xl.size(); i++) {
403  sx += xl[i];
404  sy += yl[i];
405  sxy += xl[i] * yl[i];
406  sxx += xl[i] * xl[i];
407  s++;
408  ssx += xl[i];
409  ssy += yl[i];
410  ss++;
411  }
412 
413  for (unsigned int i = 0; i < xr.size(); i++) {
414  sx += xr[i];
415  sy += yr[i];
416  sxy += xr[i] * yr[i];
417  sxx += xr[i] * xr[i];
418  s++;
419  ssx -= xr[i];
420  ssy -= yr[i];
421  ss--;
422  }
423 
424  double delta = ss * ss * sxx + s * sx * sx + s * ssx * ssx - s * s * sxx - 2 * ss * sx * ssx;
425 
426  double t0_corr = 0.;
427 
428  if (delta) {
429  a = (ssy * s * ssx + sxy * ss * ss + sy * sx * s - sy * ss * ssx - ssy * sx * ss - sxy * s * s) / delta;
430  b = (ssx * sy * ssx + sxx * ssy * ss + sx * sxy * s - sxx * sy * s - ssx * sxy * ss - sx * ssy * ssx) / delta;
431  t0_corr = (ssx * s * sxy + sxx * ss * sy + sx * sx * ssy - sxx * s * ssy - sx * ss * sxy - ssx * sx * sy) / delta;
432  }
433 
434  // convert drift distance to time
435  t0_corr /= -0.00543;
436 
437  return t0_corr;
438 }
439 
440 //define this as a plug-in
441 //DEFINE_FWK_MODULE(DTTimingExtractor);
Vector3DBase
Definition: Vector3DBase.h:8
GeomDet::position
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
DTRecSegment2D::ist0Valid
bool ist0Valid() const
Definition: DTRecSegment2D.h:115
DTRecSegment2DCollection.h
TrackExtra.h
DTTimingExtractor::doWireCorr_
bool doWireCorr_
Definition: DTTimingExtractor.h:98
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
DDAxes::y
electrons_cff.bool
bool
Definition: electrons_cff.py:393
mps_fire.i
i
Definition: mps_fire.py:428
Muon.h
TrackExtraFwd.h
TrackCharge
int TrackCharge
Definition: TrackCharge.h:4
DTTimingExtractor::TimeMeasurement::driftCell
DetId driftCell
Definition: DTTimingExtractor.h:70
GeomDet
Definition: GeomDet.h:27
EDProducer.h
DTRecSegment2D::t0
double t0() const
Get the segment t0 (if recomputed, 0 is returned otherwise)
Definition: DTRecSegment2D.h:114
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
DTRecSegment2D.h
relativeConstraints.station
station
Definition: relativeConstraints.py:67
edm
HLT enums.
Definition: AlignableModifier.h:19
gather_cfg.cout
cout
Definition: gather_cfg.py:144
pos
Definition: PixelAliasList.h:18
HLT_FULL_cff.InputTag
InputTag
Definition: HLT_FULL_cff.py:89353
DTTimingExtractor::TimeMeasurement::station
int station
Definition: DTTimingExtractor.h:69
TrackingRecHitFwd.h
DTLayer::superLayer
const DTSuperLayer * superLayer() const
Definition: DTLayer.cc:43
DTSuperLayer
Definition: DTSuperLayer.h:24
MuonTransientTrackingRecHit.h
TrackingRecHit::geographicalId
DetId geographicalId() const
Definition: TrackingRecHit.h:120
DTTimingExtractor::DTTimingExtractor
DTTimingExtractor(const edm::ParameterSet &, MuonSegmentMatcher *segMatcher, edm::ConsumesCollector &)
Constructor.
Definition: DTTimingExtractor.cc:74
edm::Ref< TrackCollection >
TimeMeasurementSequence::local_t0
std::vector< double > local_t0
Definition: TimeMeasurementSequence.h:18
contentValuesCheck.ss
ss
Definition: contentValuesCheck.py:33
Propagator
Definition: Propagator.h:44
DetId
Definition: DetId.h:17
DTTimingExtractor::theError_
double theError_
Definition: DTTimingExtractor.h:96
DTTimingExtractor::TimeMeasurement::posInLayer
float posInLayer
Definition: DTTimingExtractor.h:66
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
MakerMacros.h
alignCSCRings.s
s
Definition: alignCSCRings.py:92
DTEnums::Left
Definition: DTEnums.h:15
debug
#define debug
Definition: HDRShower.cc:19
Track.h
TimeMeasurementSequence::totalWeightTimeVtx
double totalWeightTimeVtx
Definition: TimeMeasurementSequence.h:23
DTTimingExtractor::TimeMeasurement::isLeft
bool isLeft
Definition: DTTimingExtractor.h:64
edm::EventSetup::get
T get() const
Definition: EventSetup.h:80
TrackFwd.h
TrackCandidateProducer_cfi.propagator
propagator
Definition: TrackCandidateProducer_cfi.py:17
GlobalTrackingGeometry
Definition: GlobalTrackingGeometry.h:20
MuonFwd.h
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
DDAxes::z
DTTimingExtractor.h
edm::ESHandle< DTGeometry >
DTTimingExtractor::fillTiming
void fillTiming(TimeMeasurementSequence &tmSequence, const std::vector< const DTRecSegment4D * > &segments, reco::TrackRef muonTrack, const edm::Event &iEvent, const edm::EventSetup &iSetup)
Definition: DTTimingExtractor.cc:96
Point3DBase< float, GlobalTag >
GeomDet::toLocal
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
b
double b
Definition: hdecay.h:118
DTTimingExtractor::theHitsMin_
unsigned int theHitsMin_
Definition: DTTimingExtractor.h:93
GlobalTrackingGeometryRecord.h
DTLayer.h
DTGeometry.h
DTTimingExtractor::~DTTimingExtractor
~DTTimingExtractor()
Destructor.
Definition: DTTimingExtractor.cc:91
GeomDet::toGlobal
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
edm::ParameterSet
Definition: ParameterSet.h:47
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
DTGeometry::layer
const DTLayer * layer(const DTLayerId &id) const
Return a layer given its id.
Definition: DTGeometry.cc:96
a
double a
Definition: hdecay.h:119
DTTimingExtractor::theService
std::unique_ptr< MuonServiceProxy > theService
Definition: DTTimingExtractor.h:103
Event.h
DTRecSegment2D
Definition: DTRecSegment2D.h:45
ParameterSet
Definition: Functions.h:16
TimeMeasurementSequence::totalWeightInvbeta
double totalWeightInvbeta
Definition: TimeMeasurementSequence.h:22
dumpMFGeometry_cfg.delta
delta
Definition: dumpMFGeometry_cfg.py:25
math::XYZVector
XYZVectorD XYZVector
spatial vector with cartesian internal representation
Definition: Vector3D.h:31
createfilelist.int
int
Definition: createfilelist.py:10
iEvent
int iEvent
Definition: GenABIO.cc:224
TimeMeasurementSequence::weightTimeVtx
std::vector< double > weightTimeVtx
Definition: TimeMeasurementSequence.h:19
fftjetcommon_cfi.sy
sy
Definition: fftjetcommon_cfi.py:203
edm::EventSetup
Definition: EventSetup.h:57
MuonSegmentMatcher::matchDT
std::vector< const DTRecSegment4D * > matchDT(const reco::Track &muon, const edm::Event &event)
perform the matching
Definition: MuonSegmentMatcher.cc:61
TimeMeasurementSequence::weightInvbeta
std::vector< double > weightInvbeta
Definition: TimeMeasurementSequence.h:20
get
#define get
MuonSubdetId.h
DTLayer
Definition: DTLayer.h:25
DTTimingExtractor::TimeMeasurement
Definition: DTTimingExtractor.h:62
DTTimingExtractor::dropTheta_
bool dropTheta_
Definition: DTTimingExtractor.h:99
DDAxes::phi
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
GloballyPositioned::position
const PositionType & position() const
Definition: GloballyPositioned.h:36
mag
T mag() const
The vector magnitude. Equivalent to sqrt(vec.mag2())
Definition: Basic3DVectorLD.h:127
DTTimingExtractor::TimeMeasurement::distIP
float distIP
Definition: DTTimingExtractor.h:67
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
Frameworkfwd.h
TrackingComponentsRecord.h
GlobalTrackingGeometry::idToDet
const GeomDet * idToDet(DetId) const override
Definition: GlobalTrackingGeometry.cc:44
MuonServiceProxy.h
DTTimingExtractor::debug
bool debug
Definition: DTTimingExtractor.h:101
DTRecSegment2D::specificRecHits
std::vector< DTRecHit1D > specificRecHits() const
Access to specific components.
Definition: DTRecSegment2D.cc:104
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
Propagator::propagateWithPath
virtual std::pair< TrajectoryStateOnSurface, double > propagateWithPath(const FreeTrajectoryState &, const Surface &) const final
Definition: Propagator.cc:10
DTSLRecSegment2D.h
DTTimingExtractor::useSegmentT0_
bool useSegmentT0_
Definition: DTTimingExtractor.h:97
DTChamber.h
MuonServiceProxy::theTrackingGeometry
edm::ESHandle< GlobalTrackingGeometry > theTrackingGeometry
Definition: MuonServiceProxy.h:93
DTTimingExtractor::thePruneCut_
double thePruneCut_
Definition: DTTimingExtractor.h:94
ConsumesCollector.h
DTTimingExtractor::requireBothProjections_
bool requireBothProjections_
Definition: DTTimingExtractor.h:100
DTChamberId
Definition: DTChamberId.h:14
EventSetup
DTTimingExtractor::theMatcher
MuonSegmentMatcher * theMatcher
Definition: DTTimingExtractor.h:104
ParameterSet.h
DTTimingExtractor::TimeMeasurement::isPhi
bool isPhi
Definition: DTTimingExtractor.h:65
MuonServiceProxy
Definition: MuonServiceProxy.h:38
DTTimingExtractor::theTimeOffset_
double theTimeOffset_
Definition: DTTimingExtractor.h:95
MuonGeometryRecord.h
GlobalTrackingGeometry.h
edm::Event
Definition: Event.h:73
DTTimingExtractor::fitT0
double fitT0(double &a, double &b, const std::vector< double > &xl, const std::vector< double > &yl, const std::vector< double > &xr, const std::vector< double > &yr)
Definition: DTTimingExtractor.cc:394
MuonSegmentMatcher
Definition: MuonSegmentMatcher.h:29
TimeMeasurementSequence::dstnc
std::vector< double > dstnc
Definition: TimeMeasurementSequence.h:17
MuonGeometryRecord
Definition: MuonGeometryRecord.h:34
DTSuperLayer.h
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
DTChamberId::station
int station() const
Return the station number.
Definition: DTChamberId.h:42
DTRecSegment4DCollection.h
TimeMeasurementSequence
Definition: TimeMeasurementSequence.h:15
DTTimingExtractor::TimeMeasurement::timeCorr
float timeCorr
Definition: DTTimingExtractor.h:68
TrackingComponentsRecord
Definition: TrackingComponentsRecord.h:12
fftjetcommon_cfi.sx
sx
Definition: fftjetcommon_cfi.py:202