CMS 3D CMS Logo

TotemTimingTrackRecognition.cc
Go to the documentation of this file.
1 /****************************************************************************
2  *
3  * This is a part of CTPPS offline software.
4  * Authors:
5  * Laurent Forthomme (laurent.forthomme@cern.ch)
6  * Nicola Minafra (nicola.minafra@cern.ch)
7  * Mateusz Szpyrka (mateusz.szpyrka@cern.ch)
8  *
9  ****************************************************************************/
10 
12 
13 //----------------------------------------------------------------------------------------------------
14 
17 
18 //----------------------------------------------------------------------------------------------------
19 
21  if (recHit.time() != static_cast<float>(TotemTimingRecHit::NO_T_AVAILABLE))
22  hitVectorMap_[0].emplace_back(recHit);
23 }
24 
25 //----------------------------------------------------------------------------------------------------
26 
28  int numberOfTracks = 0;
29  DimensionParameters param;
30 
31  auto getX = [](const TotemTimingRecHit& hit) { return hit.x(); };
32  auto getXWidth = [](const TotemTimingRecHit& hit) { return hit.xWidth(); };
33  auto setX = [](TotemTimingLocalTrack& track, float x) { track.setPosition(math::XYZPoint(x, 0., 0.)); };
34  auto setXSigma = [](TotemTimingLocalTrack& track, float sigma) {
35  track.setPositionSigma(math::XYZPoint(sigma, 0., 0.));
36  };
37  auto getY = [](const TotemTimingRecHit& hit) { return hit.y(); };
38  auto getYWidth = [](const TotemTimingRecHit& hit) { return hit.yWidth(); };
39  auto setY = [](TotemTimingLocalTrack& track, float y) { track.setPosition(math::XYZPoint(0., y, 0.)); };
40  auto setYSigma = [](TotemTimingLocalTrack& track, float sigma) {
41  track.setPositionSigma(math::XYZPoint(0., sigma, 0.));
42  };
43 
44  for (const auto& hitBatch : hitVectorMap_) {
45  const auto& hits = hitBatch.second;
46  const auto& hitRange = getHitSpatialRange(hits);
47 
48  TrackVector xPartTracks, yPartTracks;
49 
50  param.rangeBegin = hitRange.xBegin;
51  param.rangeEnd = hitRange.xEnd;
52  producePartialTracks(hits, param, getX, getXWidth, setX, setXSigma, xPartTracks);
53 
54  param.rangeBegin = hitRange.yBegin;
55  param.rangeEnd = hitRange.yEnd;
56  producePartialTracks(hits, param, getY, getYWidth, setY, setYSigma, yPartTracks);
57 
58  if (xPartTracks.empty() && yPartTracks.empty())
59  continue;
60 
61  unsigned int validHitsNumber = (unsigned int)threshold_ + 1;
62 
63  for (const auto& xTrack : xPartTracks) {
64  for (const auto& yTrack : yPartTracks) {
65  math::XYZPoint position(xTrack.x0(), yTrack.y0(), 0.5f * (hitRange.zBegin + hitRange.zEnd));
66  math::XYZPoint positionSigma(xTrack.x0Sigma(), yTrack.y0Sigma(), 0.5f * (hitRange.zEnd - hitRange.zBegin));
67 
68  TotemTimingLocalTrack newTrack(position, positionSigma, 0., 0.);
69 
70  HitVector componentHits;
71  for (const auto& hit : hits)
72  if (newTrack.containsHit(hit, tolerance_))
73  componentHits.emplace_back(hit);
74  if (componentHits.size() < validHitsNumber)
75  continue;
76 
77  float mean_time = 0.f, time_sigma = 0.f;
78  bool valid_hits = timeEval(componentHits, mean_time, time_sigma);
79  newTrack.setValid(valid_hits);
80  newTrack.setTime(mean_time);
81  newTrack.setTimeSigma(time_sigma);
82  // in a next iteration, we will be setting validity / numHits / numPlanes
83  tracks.push_back(newTrack);
84  }
85  }
86  }
87 
88  return numberOfTracks;
89 }
void producePartialTracks(const HitVector &hits, const DimensionParameters &param, float(*getHitCenter)(const TotemTimingRecHit &), float(*getHitRangeWidth)(const TotemTimingRecHit &), void(*setTrackCenter)(TotemTimingLocalTrack &, float), void(*setTrackSigma)(TotemTimingLocalTrack &, float), TrackVector &result)
TotemTimingTrackRecognition(const edm::ParameterSet &iConfig)
static constexpr int NO_T_AVAILABLE
void addHit(const TotemTimingRecHit &recHit) override
Add new hit to the set from which the tracks are reconstructed.
void setTimeSigma(float t_sigma)
HitVectorMap hitVectorMap_
RecHit vectors that should be processed separately while reconstructing tracks.
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
bool timeEval(const HitVector &hits, float &meanTime, float &timeSigma) const
static int position[264][3]
Definition: ReadPGInfo.cc:289
int produceTracks(edm::DetSet< TotemTimingLocalTrack > &tracks) override
Produces a collection of tracks for the current station, given its hits collection.
bool containsHit(const CTPPSTimingRecHit &recHit, float tolerance=0.1f, CheckDimension check=CheckDimension::all) const