CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Private Member Functions | Private Attributes
DTTimingExtractor Class Reference

#include <RecoMuon/MuonIdentification/src/DTTimingExtractor.cc>

Classes

class  TimeMeasurement
 

Public Member Functions

 DTTimingExtractor (const edm::ParameterSet &, MuonSegmentMatcher *segMatcher, edm::ConsumesCollector &)
 Constructor. More...
 
void fillTiming (TimeMeasurementSequence &tmSequence, const std::vector< const DTRecSegment4D * > &segments, reco::TrackRef muonTrack, const edm::Event &iEvent, const edm::EventSetup &iSetup)
 
void fillTiming (TimeMeasurementSequence &tmSequence, reco::TrackRef muonTrack, const edm::Event &iEvent, const edm::EventSetup &iSetup)
 
 ~DTTimingExtractor ()
 Destructor. More...
 

Private Member Functions

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)
 

Private Attributes

bool debug
 
bool doWireCorr_
 
bool dropTheta_
 
edm::InputTag DTSegmentTags_
 
bool requireBothProjections_
 
double theError_
 
unsigned int theHitsMin_
 
MuonSegmentMatchertheMatcher
 
double thePruneCut_
 
std::unique_ptr< MuonServiceProxytheService
 
double theTimeOffset_
 
bool useSegmentT0_
 

Detailed Description

Extracts timing information associated to a muon track

Description: Produce timing information for a muon track using 1D DT hits from segments used to build the track

Definition at line 54 of file DTTimingExtractor.h.

Constructor & Destructor Documentation

◆ DTTimingExtractor()

DTTimingExtractor::DTTimingExtractor ( const edm::ParameterSet iConfig,
MuonSegmentMatcher segMatcher,
edm::ConsumesCollector iC 
)

Constructor.

Definition at line 74 of file DTTimingExtractor.cc.

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 }

References edm::ParameterSet::getParameter(), theMatcher, and theService.

◆ ~DTTimingExtractor()

DTTimingExtractor::~DTTimingExtractor ( )

Destructor.

Definition at line 91 of file DTTimingExtractor.cc.

91 {}

Member Function Documentation

◆ fillTiming() [1/2]

void DTTimingExtractor::fillTiming ( TimeMeasurementSequence tmSequence,
const std::vector< const DTRecSegment4D * > &  segments,
reco::TrackRef  muonTrack,
const edm::Event iEvent,
const edm::EventSetup iSetup 
)

Definition at line 96 of file DTTimingExtractor.cc.

100  {
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 }

References a, b, gather_cfg::cout, debug, DTTimingExtractor::TimeMeasurement::distIP, doWireCorr_, DTTimingExtractor::TimeMeasurement::driftCell, dropTheta_, TimeMeasurementSequence::dstnc, fitT0(), TrackingRecHit::geographicalId(), edm::EventSetup::get(), get, mps_fire::i, GlobalTrackingGeometry::idToDet(), if(), DTTimingExtractor::TimeMeasurement::isLeft, DTTimingExtractor::TimeMeasurement::isPhi, DTRecSegment2D::ist0Valid(), DTGeometry::layer(), phase1PixelTopology::layer, DTEnums::Left, TimeMeasurementSequence::local_t0, PV3DBase< T, PVType, FrameType >::mag(), mag(), phi, DTTimingExtractor::TimeMeasurement::posInLayer, GloballyPositioned< T >::position(), GeomDet::position(), Propagator::propagateWithPath(), TrackCandidateProducer_cfi::propagator, requireBothProjections_, DTRecSegment2D::specificRecHits(), mathSSE::sqrt(), DTChamberId::station(), relativeConstraints::station, DTTimingExtractor::TimeMeasurement::station, GeomDet::surface(), DTRecSegment2D::t0(), theError_, theHitsMin_, thePruneCut_, theService, theTimeOffset_, MuonServiceProxy::theTrackingGeometry, DTTimingExtractor::TimeMeasurement::timeCorr, GeomDet::toGlobal(), GeomDet::toLocal(), TimeMeasurementSequence::totalWeightInvbeta, TimeMeasurementSequence::totalWeightTimeVtx, useSegmentT0_, TimeMeasurementSequence::weightInvbeta, TimeMeasurementSequence::weightTimeVtx, PV3DBase< T, PVType, FrameType >::x(), y, and z.

Referenced by fillTiming().

◆ fillTiming() [2/2]

void DTTimingExtractor::fillTiming ( TimeMeasurementSequence tmSequence,
reco::TrackRef  muonTrack,
const edm::Event iEvent,
const edm::EventSetup iSetup 
)

Definition at line 382 of file DTTimingExtractor.cc.

385  {
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 }

References gather_cfg::cout, debug, fillTiming(), iEvent, MuonSegmentMatcher::matchDT(), FastTimerService_cff::range, and theMatcher.

◆ fitT0()

double DTTimingExtractor::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 
)
private

Definition at line 394 of file DTTimingExtractor.cc.

399  {
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 }

References a, b, dumpMFGeometry_cfg::delta, mps_fire::i, alignCSCRings::s, contentValuesCheck::ss, fftjetcommon_cfi::sx, and fftjetcommon_cfi::sy.

Referenced by fillTiming().

Member Data Documentation

◆ debug

bool DTTimingExtractor::debug
private

◆ doWireCorr_

bool DTTimingExtractor::doWireCorr_
private

Definition at line 98 of file DTTimingExtractor.h.

Referenced by fillTiming().

◆ dropTheta_

bool DTTimingExtractor::dropTheta_
private

Definition at line 99 of file DTTimingExtractor.h.

Referenced by fillTiming().

◆ DTSegmentTags_

edm::InputTag DTTimingExtractor::DTSegmentTags_
private

Definition at line 92 of file DTTimingExtractor.h.

◆ requireBothProjections_

bool DTTimingExtractor::requireBothProjections_
private

Definition at line 100 of file DTTimingExtractor.h.

Referenced by fillTiming().

◆ theError_

double DTTimingExtractor::theError_
private

Definition at line 96 of file DTTimingExtractor.h.

Referenced by fillTiming().

◆ theHitsMin_

unsigned int DTTimingExtractor::theHitsMin_
private

Definition at line 93 of file DTTimingExtractor.h.

Referenced by fillTiming().

◆ theMatcher

MuonSegmentMatcher* DTTimingExtractor::theMatcher
private

Definition at line 104 of file DTTimingExtractor.h.

Referenced by DTTimingExtractor(), and fillTiming().

◆ thePruneCut_

double DTTimingExtractor::thePruneCut_
private

Definition at line 94 of file DTTimingExtractor.h.

Referenced by fillTiming().

◆ theService

std::unique_ptr<MuonServiceProxy> DTTimingExtractor::theService
private

Definition at line 103 of file DTTimingExtractor.h.

Referenced by DTTimingExtractor(), and fillTiming().

◆ theTimeOffset_

double DTTimingExtractor::theTimeOffset_
private

Definition at line 95 of file DTTimingExtractor.h.

Referenced by fillTiming().

◆ useSegmentT0_

bool DTTimingExtractor::useSegmentT0_
private

Definition at line 97 of file DTTimingExtractor.h.

Referenced by fillTiming().

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
DTTimingExtractor::doWireCorr_
bool doWireCorr_
Definition: DTTimingExtractor.h:98
FastTimerService_cff.range
range
Definition: FastTimerService_cff.py:34
DDAxes::y
mps_fire.i
i
Definition: mps_fire.py:428
TrackCharge
int TrackCharge
Definition: TrackCharge.h:4
GeomDet
Definition: GeomDet.h:27
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
relativeConstraints.station
station
Definition: relativeConstraints.py:67
gather_cfg.cout
cout
Definition: gather_cfg.py:144
pos
Definition: PixelAliasList.h:18
if
if(0==first)
Definition: CAHitNtupletGeneratorKernelsImpl.h:58
DTSuperLayer
Definition: DTSuperLayer.h:24
TrackingRecHit::geographicalId
DetId geographicalId() const
Definition: TrackingRecHit.h:120
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
GeomDet::surface
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:37
alignCSCRings.s
s
Definition: alignCSCRings.py:92
DTEnums::Left
Definition: DTEnums.h:15
TimeMeasurementSequence::totalWeightTimeVtx
double totalWeightTimeVtx
Definition: TimeMeasurementSequence.h:23
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
TrackCandidateProducer_cfi.propagator
propagator
Definition: TrackCandidateProducer_cfi.py:17
GlobalTrackingGeometry
Definition: GlobalTrackingGeometry.h:20
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
DDAxes::z
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
phase1PixelTopology::layer
constexpr std::array< uint8_t, layerIndexSize > layer
Definition: phase1PixelTopology.h:99
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
DTRecSegment2D
Definition: DTRecSegment2D.h:45
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
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
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
DTLayer
Definition: DTLayer.h:25
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
FreeTrajectoryState
Definition: FreeTrajectoryState.h:27
GlobalTrackingGeometry::idToDet
const GeomDet * idToDet(DetId) const override
Definition: GlobalTrackingGeometry.cc:44
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
DTTimingExtractor::useSegmentT0_
bool useSegmentT0_
Definition: DTTimingExtractor.h:97
DTTimingExtractor::thePruneCut_
double thePruneCut_
Definition: DTTimingExtractor.h:94
DTTimingExtractor::requireBothProjections_
bool requireBothProjections_
Definition: DTTimingExtractor.h:100
DTChamberId
Definition: DTChamberId.h:14
DTTimingExtractor::theMatcher
MuonSegmentMatcher * theMatcher
Definition: DTTimingExtractor.h:104
DTTimingExtractor::theTimeOffset_
double theTimeOffset_
Definition: DTTimingExtractor.h:95
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
TimeMeasurementSequence::dstnc
std::vector< double > dstnc
Definition: TimeMeasurementSequence.h:17
MuonGeometryRecord
Definition: MuonGeometryRecord.h:34
edm::ConsumesCollector
Definition: ConsumesCollector.h:45
TrackingComponentsRecord
Definition: TrackingComponentsRecord.h:12
fftjetcommon_cfi.sx
sx
Definition: fftjetcommon_cfi.py:202