CMS 3D CMS Logo

CTPPSDiamondTrackRecognition.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  excludeSingleEdgeHits_(iConfig.getParameter<bool>("excludeSingleEdgeHits")) {}
18 
19 //----------------------------------------------------------------------------------------------------
20 
23  mhMap_.clear();
24 }
25 
26 //----------------------------------------------------------------------------------------------------
27 
29  if (excludeSingleEdgeHits_ && recHit.toT() <= 0.)
30  return;
31  // store hit parameters
32  hitVectorMap_[recHit.ootIndex()].emplace_back(recHit);
33 }
34 
35 //----------------------------------------------------------------------------------------------------
36 
38  int numberOfTracks = 0;
39  DimensionParameters param;
40 
41  auto getX = [](const CTPPSDiamondRecHit& hit) { return hit.x(); };
42  auto getXWidth = [](const CTPPSDiamondRecHit& hit) { return hit.xWidth(); };
43  auto setX = [](CTPPSDiamondLocalTrack& track, float x) { track.setPosition(math::XYZPoint(x, 0., 0.)); };
44  auto setXSigma = [](CTPPSDiamondLocalTrack& track, float sigma) {
45  track.setPositionSigma(math::XYZPoint(sigma, 0., 0.));
46  };
47 
48  for (const auto& hitBatch : hitVectorMap_) {
49  // separate the tracking for each bunch crossing
50  const auto& oot = hitBatch.first;
51  const auto& hits = hitBatch.second;
52 
53  auto hitRange = getHitSpatialRange(hits);
54 
55  TrackVector xPartTracks;
56 
57  // produce tracks in x dimension
58  param.rangeBegin = hitRange.xBegin;
59  param.rangeEnd = hitRange.xEnd;
60  producePartialTracks(hits, param, getX, getXWidth, setX, setXSigma, xPartTracks);
61 
62  if (xPartTracks.empty())
63  continue;
64 
65  const float yRangeCenter = 0.5f * (hitRange.yBegin + hitRange.yEnd);
66  const float zRangeCenter = 0.5f * (hitRange.zBegin + hitRange.zEnd);
67  const float ySigma = 0.5f * (hitRange.yEnd - hitRange.yBegin);
68  const float zSigma = 0.5f * (hitRange.zEnd - hitRange.zBegin);
69 
70  for (const auto& xTrack : xPartTracks) {
71  math::XYZPoint position(xTrack.x0(), yRangeCenter, zRangeCenter);
72  math::XYZPoint positionSigma(xTrack.x0Sigma(), ySigma, zSigma);
73 
74  const int multipleHits = (mhMap_.find(oot) != mhMap_.end()) ? mhMap_[oot] : 0;
75  CTPPSDiamondLocalTrack newTrack(position, positionSigma, 0.f, 0.f, oot, multipleHits);
76 
77  // find contributing hits
78  HitVector componentHits;
79  for (const auto& hit : hits)
80  if (newTrack.containsHit(hit, tolerance_) && (!excludeSingleEdgeHits_ || hit.toT() > 0.))
81  componentHits.emplace_back(hit);
82  // compute timing information
83  float mean_time = 0.f, time_sigma = 0.f;
84  bool valid_hits = timeEval(componentHits, mean_time, time_sigma);
85  newTrack.setValid(valid_hits);
86  newTrack.setTime(mean_time);
87  newTrack.setTimeSigma(time_sigma);
88 
89  tracks.push_back(newTrack);
90  }
91  }
92 
93  return numberOfTracks;
94 }
CTPPSTimingLocalTrack::setValid
void setValid(bool valid)
Definition: CTPPSTimingLocalTrack.h:60
CTPPSDiamondLocalTrack
Definition: CTPPSDiamondLocalTrack.h:20
PDWG_EXOHSCP_cff.tracks
tracks
Definition: PDWG_EXOHSCP_cff.py:28
electrons_cff.bool
bool
Definition: electrons_cff.py:393
HLT_FULL_cff.track
track
Definition: HLT_FULL_cff.py:11776
CTPPSDiamondTrackRecognition.h
hfClusterShapes_cfi.hits
hits
Definition: hfClusterShapes_cfi.py:5
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
edm::DetSet
Definition: DetSet.h:23
CTPPSDiamondTrackRecognition::CTPPSDiamondTrackRecognition
CTPPSDiamondTrackRecognition(const edm::ParameterSet &iConfig)
Definition: CTPPSDiamondTrackRecognition.cc:14
CTPPSDiamondRecHit
Reconstructed hit in diamond detectors.
Definition: CTPPSDiamondRecHit.h:16
CTPPSDiamondTrackRecognition::mhMap_
std::unordered_map< int, int > mhMap_
Definition: CTPPSDiamondTrackRecognition.h:44
CTPPSTimingTrackRecognition
Definition: CTPPSTimingTrackRecognition.h:30
DDAxes::x
CTPPSTimingTrackRecognition::clear
virtual void clear()
Reset internal state of a class instance.
Definition: CTPPSTimingTrackRecognition.h:56
CTPPSDiamondTrackRecognition::excludeSingleEdgeHits_
bool excludeSingleEdgeHits_
Definition: CTPPSDiamondTrackRecognition.h:45
CTPPSTimingLocalTrack::setTimeSigma
void setTimeSigma(float t_sigma)
Definition: CTPPSTimingLocalTrack.h:70
rpcPointValidation_cfi.recHit
recHit
Definition: rpcPointValidation_cfi.py:7
hit::x
double x
Definition: SiStripHitEffFromCalibTree.cc:89
CTPPSTimingLocalTrack::setTime
void setTime(float t)
Definition: CTPPSTimingLocalTrack.h:69
CTPPSTimingTrackRecognition< CTPPSDiamondLocalTrack, CTPPSDiamondRecHit >::HitVector
std::vector< CTPPSDiamondRecHit > HitVector
Definition: CTPPSTimingTrackRecognition.h:72
CTPPSDiamondTrackRecognition::addHit
void addHit(const CTPPSDiamondRecHit &recHit) override
Feed a new hit to the tracks recognition algorithm.
Definition: CTPPSDiamondTrackRecognition.cc:27
CTPPSDiamondTrackRecognition::clear
void clear() override
Reset internal state of a class instance.
Definition: CTPPSDiamondTrackRecognition.cc:20
CTPPSTimingTrackRecognition< CTPPSDiamondLocalTrack, CTPPSDiamondRecHit >::getHitSpatialRange
SpatialRange getHitSpatialRange(const HitVector &hits)
Definition: CTPPSTimingTrackRecognition.h:196
CTPPSTimingTrackRecognition< CTPPSDiamondLocalTrack, CTPPSDiamondRecHit >::tolerance_
const float tolerance_
Definition: CTPPSTimingTrackRecognition.h:68
CTPPSTimingTrackRecognition< CTPPSDiamondLocalTrack, CTPPSDiamondRecHit >::timeEval
bool timeEval(const HitVector &hits, float &meanTime, float &timeSigma) const
Definition: CTPPSTimingTrackRecognition.h:227
edm::ParameterSet
Definition: ParameterSet.h:47
math::XYZPoint
XYZPointD XYZPoint
point in space with cartesian internal representation
Definition: Point3D.h:12
CTPPSTimingTrackRecognition< CTPPSDiamondLocalTrack, CTPPSDiamondRecHit >::producePartialTracks
void producePartialTracks(const HitVector &hits, const DimensionParameters &param, float(*getHitCenter)(const CTPPSDiamondRecHit &), float(*getHitRangeWidth)(const CTPPSDiamondRecHit &), void(*setTrackCenter)(CTPPSDiamondLocalTrack &, float), void(*setTrackSigma)(CTPPSDiamondLocalTrack &, float), TrackVector &result)
Definition: CTPPSTimingTrackRecognition.h:117
position
static int position[264][3]
Definition: ReadPGInfo.cc:289
CTPPSTimingTrackRecognition< CTPPSDiamondLocalTrack, CTPPSDiamondRecHit >::TrackVector
std::vector< CTPPSDiamondLocalTrack > TrackVector
Definition: CTPPSTimingTrackRecognition.h:71
CTPPSDiamondLocalTrack::containsHit
bool containsHit(const CTPPSDiamondRecHit &recHit, float tolerance=0.1) const
Definition: CTPPSDiamondLocalTrack.cc:22
CTPPSDiamondTrackRecognition::produceTracks
int produceTracks(edm::DetSet< CTPPSDiamondLocalTrack > &tracks) override
Produce a collection of tracks for the current station, given its hits collection.
Definition: CTPPSDiamondTrackRecognition.cc:36
CTPPSTimingTrackRecognition< CTPPSDiamondLocalTrack, CTPPSDiamondRecHit >::hitVectorMap_
HitVectorMap hitVectorMap_
RecHit vectors that should be processed separately while reconstructing tracks.
Definition: CTPPSTimingTrackRecognition.h:76
hit
Definition: SiStripHitEffFromCalibTree.cc:88