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 //----------------------------------------------------------------------------------------------------
21 
22 void
24 {
26  mhMap_.clear();
27 }
28 
29 //----------------------------------------------------------------------------------------------------
30 
31 void
33 {
34  if ( excludeSingleEdgeHits_ && recHit.getToT() <= 0. )
35  return;
36  // store hit parameters
37  hitVectorMap_[recHit.getOOTIndex()].emplace_back( recHit );
38 }
39 
40 //----------------------------------------------------------------------------------------------------
41 
42 int
44 {
45  int numberOfTracks = 0;
46  DimensionParameters param;
47 
48  auto getX = []( const CTPPSDiamondRecHit& hit ){ return hit.getX(); };
49  auto getXWidth = []( const CTPPSDiamondRecHit& hit ){ return hit.getXWidth(); };
50  auto setX = []( CTPPSDiamondLocalTrack& track, float x ){ track.setPosition( math::XYZPoint( x, 0., 0. ) ); };
51  auto setXSigma = []( CTPPSDiamondLocalTrack& track, float sigma ){ track.setPositionSigma( math::XYZPoint( sigma, 0., 0. ) ); };
52 
53  for ( const auto& hitBatch: hitVectorMap_ ) {
54  // separate the tracking for each bunch crossing
55  const auto& oot = hitBatch.first;
56  const auto& hits = hitBatch.second;
57 
58  auto hitRange = getHitSpatialRange( hits );
59 
60  TrackVector xPartTracks;
61 
62  // produce tracks in x dimension
63  param.rangeBegin = hitRange.xBegin;
64  param.rangeEnd = hitRange.xEnd;
65  producePartialTracks( hits, param, getX, getXWidth, setX, setXSigma, xPartTracks );
66 
67  if ( xPartTracks.empty() )
68  continue;
69 
70  const float yRangeCenter = 0.5f*( hitRange.yBegin + hitRange.yEnd );
71  const float zRangeCenter = 0.5f*( hitRange.zBegin + hitRange.zEnd );
72  const float ySigma = 0.5f*( hitRange.yEnd - hitRange.yBegin );
73  const float zSigma = 0.5f*( hitRange.zEnd - hitRange.zBegin );
74 
75  for ( const auto& xTrack: xPartTracks ) {
76  math::XYZPoint position( xTrack.getX0(), yRangeCenter, zRangeCenter );
77  math::XYZPoint positionSigma( xTrack.getX0Sigma(), ySigma, zSigma );
78 
79  const int multipleHits = ( mhMap_.find(oot) != mhMap_.end() )
80  ? mhMap_[oot]
81  : 0;
82  CTPPSDiamondLocalTrack newTrack( position, positionSigma, 0.f, 0.f, oot, multipleHits );
83 
84  // find contributing hits
85  HitVector componentHits;
86  for ( const auto& hit : hits )
87  if ( newTrack.containsHit( hit, tolerance_ ) && ( !excludeSingleEdgeHits_ || hit.getToT() > 0. ) )
88  componentHits.emplace_back( hit );
89  // compute timing information
90  float mean_time = 0.f, time_sigma = 0.f;
91  bool valid_hits = timeEval( componentHits, mean_time, time_sigma );
92  newTrack.setValid( valid_hits );
93  newTrack.setT( mean_time );
94  newTrack.setTSigma( time_sigma );
95 
96  tracks.push_back( newTrack );
97  }
98  }
99 
100  return numberOfTracks;
101 }
102 
void push_back(const T &t)
Definition: DetSet.h:68
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)
Reconstructed hit in diamond detectors.
int getOOTIndex() const
int produceTracks(edm::DetSet< CTPPSDiamondLocalTrack > &tracks) override
Produce a collection of tracks for the current station, given its hits collection.
virtual void clear()
Reset internal state of a class instance.
bool timeEval(const HitVector &hits, float &meanTime, float &timeSigma) const
void setTSigma(float t_sigma)
bool containsHit(const CTPPSDiamondRecHit &recHit, float tolerance=0.1) const
double f[11][100]
CTPPSDiamondTrackRecognition(const edm::ParameterSet &iConfig)
void setPosition(const math::XYZPoint &pos0)
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
static int position[264][3]
Definition: ReadPGInfo.cc:509
void addHit(const CTPPSDiamondRecHit &recHit) override
Feed a new hit to the tracks recognition algorithm.
float getToT() const
void clear() override
Reset internal state of a class instance.
std::unordered_map< int, int > mhMap_
void setPositionSigma(const math::XYZPoint &pos0_sigma)