MarlinPandora  03.00.00
 All Classes Functions Variables
TrackCreator.h
1 
9 #ifndef TRACK_CREATOR_H
10 #define TRACK_CREATOR_H 1
11 
12 #include "lcio.h"
13 
14 #include "IMPL/LCCollectionVec.h"
15 #include "IMPL/LCFlagImpl.h"
16 
17 #include "EVENT/LCEvent.h"
18 #include "EVENT/Track.h"
19 
20 #include "Api/PandoraApi.h"
21 #include "Objects/Helix.h"
22 
23 typedef std::vector<Track *> TrackVector;
24 typedef std::set<const Track *> TrackList;
25 typedef std::map<Track *, int> TrackToPidMap;
26 
27 inline LCCollectionVec *newTrkCol(const std::string &name, LCEvent *evt , bool isSubset)
28 {
29  LCCollectionVec* col = new LCCollectionVec( LCIO::TRACK ) ;
30 
31  LCFlagImpl hitFlag(0) ;
32  hitFlag.setBit( LCIO::TRBIT_HITS ) ;
33  col->setFlag( hitFlag.getFlag() ) ;
34  evt->addCollection( col , name ) ;
35  col->setSubset( isSubset ) ;
36 
37  return col ;
38 }
39 
40 //------------------------------------------------------------------------------------------------------------------------------------------
41 
46 {
47 public:
48  typedef std::vector<double> DoubleVector;
49  typedef std::vector<std::string> StringVector;
50 
54  class Settings
55  {
56  public:
60  Settings();
61 
62  StringVector m_trackCollections;
63  StringVector m_kinkVertexCollections;
64  StringVector m_prongVertexCollections;
65  StringVector m_splitVertexCollections;
66  StringVector m_v0VertexCollections;
67 
70 
74 
75  float m_d0TrackCut;
76  float m_z0TrackCut;
77 
82 
86 
94 
98 
103  };
104 
111  TrackCreator(const Settings &settings, const pandora::Pandora *const pPandora);
112 
116  ~TrackCreator();
117 
123  pandora::StatusCode CreateTrackAssociations(const EVENT::LCEvent *const pLCEvent);
124 
130  pandora::StatusCode CreateTracks(EVENT::LCEvent *pLCEvent);
131 
137  const TrackVector &GetTrackVector() const;
138 
142  void Reset();
143 
144 private:
150  pandora::StatusCode ExtractKinks(const EVENT::LCEvent *const pLCEvent);
151 
157  pandora::StatusCode ExtractProngsAndSplits(const EVENT::LCEvent *const pLCEvent);
158 
164  pandora::StatusCode ExtractV0s(const EVENT::LCEvent *const pLCEvent);
165 
171  bool IsConflictingRelationship(const EVENT::TrackVec &trackVec) const;
172 
180  bool IsV0(const EVENT::Track *const pTrack) const;
181 
189  bool IsParent(const EVENT::Track *const pTrack) const;
190 
198  bool IsDaughter(const EVENT::Track *const pTrack) const;
199 
206  void GetTrackStates(const EVENT::Track *const pTrack, PandoraApi::Track::Parameters &trackParameters) const;
207 
214  void CopyTrackState(const TrackState *const pTrackState, pandora::InputTrackState &inputTrackState) const;
215 
221  float CalculateTrackTimeAtCalorimeter(const EVENT::Track *const pTrack) const;
222 
229  void TrackReachesECAL(const EVENT::Track *const pTrack, PandoraApi::Track::Parameters &trackParameters) const;
230 
239  void DefineTrackPfoUsage(const EVENT::Track *const pTrack, PandoraApi::Track::Parameters &trackParameters) const;
240 
249  bool PassesQualityCuts(const EVENT::Track *const pTrack, const PandoraApi::Track::Parameters &trackParameters) const;
250 
258  int GetNTpcHits(const EVENT::Track *const pTrack) const;
259 
267  int GetNFtdHits(const EVENT::Track *const pTrack) const;
268 
269  const Settings m_settings;
270  const pandora::Pandora *m_pPandora;
271 
272  const float m_bField;
273 
274  const float m_tpcInnerR;
275  const float m_tpcOuterR;
276  const unsigned int m_tpcMaxRow;
277  const float m_tpcZmax;
278  float m_cosTpc;
279 
280  DoubleVector m_ftdInnerRadii;
281  DoubleVector m_ftdOuterRadii;
282  DoubleVector m_ftdZPositions;
283  unsigned int m_nFtdLayers;
284  float m_tanLambdaFtd;
285 
286  const int m_eCalBarrelInnerSymmetry;
287  const float m_eCalBarrelInnerPhi0;
288  const float m_eCalBarrelInnerR;
289  const float m_eCalEndCapInnerZ;
290 
291  float m_minEtdZPosition;
292  float m_minSetRadius;
293 
294  TrackVector m_trackVector;
295  TrackList m_v0TrackList;
296  TrackList m_parentTrackList;
297  TrackList m_daughterTrackList;
298  TrackToPidMap m_trackToPidMap;
299 };
300 
301 //------------------------------------------------------------------------------------------------------------------------------------------
302 
303 inline const TrackVector &TrackCreator::GetTrackVector() const
304 {
305  return m_trackVector;
306 }
307 
308 //------------------------------------------------------------------------------------------------------------------------------------------
309 
310 inline void TrackCreator::Reset()
311 {
312  m_trackVector.clear();
313  m_v0TrackList.clear();
314  m_parentTrackList.clear();
315  m_daughterTrackList.clear();
316  m_trackToPidMap.clear();
317 }
318 
319 //------------------------------------------------------------------------------------------------------------------------------------------
320 
321 inline bool TrackCreator::IsV0(const Track *const pTrack) const
322 {
323  return (m_v0TrackList.end() != m_v0TrackList.find(pTrack));
324 }
325 
326 //------------------------------------------------------------------------------------------------------------------------------------------
327 
328 inline bool TrackCreator::IsParent(const Track *const pTrack) const
329 {
330  return (m_parentTrackList.end() != m_parentTrackList.find(pTrack));
331 }
332 
333 //------------------------------------------------------------------------------------------------------------------------------------------
334 
335 inline bool TrackCreator::IsDaughter(const Track *const pTrack) const
336 {
337  return (m_daughterTrackList.end() != m_daughterTrackList.find(pTrack));
338 }
339 
340 #endif // #ifndef TRACK_CREATOR_H
float m_d0UnmatchedVertexTrackCut
d0 cut used to determine whether unmatched vertex track can form pfo
Definition: TrackCreator.h:83
float m_z0UnmatchedVertexTrackCut
z0 cut used to determine whether unmatched vertex track can form pfo
Definition: TrackCreator.h:84
TrackCreator(const Settings &settings, const pandora::Pandora *const pPandora)
Constructor.
Definition: TrackCreator.cc:32
int m_usingNonVertexTracks
Whether can form pfos from tracks that don't start at vertex.
Definition: TrackCreator.h:78
TrackCreator class.
Definition: TrackCreator.h:45
Settings()
Default constructor.
Definition: TrackCreator.cc:892
float m_d0TrackCut
Track d0 cut used to determine whether track can be used to form pfo.
Definition: TrackCreator.h:75
const TrackVector & GetTrackVector() const
Get the track vector.
Definition: TrackCreator.h:303
Settings class.
Definition: TrackCreator.h:54
StringVector m_v0VertexCollections
The v0 vertex collections.
Definition: TrackCreator.h:66
StringVector m_splitVertexCollections
The split vertex collections.
Definition: TrackCreator.h:65
StringVector m_prongSplitVertexCollections
Concatenated list of prong and split vertex collections.
Definition: TrackCreator.h:68
void Reset()
Reset the track creator.
Definition: TrackCreator.h:310
StringVector m_trackCollections
The reconstructed track collections.
Definition: TrackCreator.h:62
float m_minTrackECalDistanceFromIp
Sanity check on separation between ip and track projected ecal position.
Definition: TrackCreator.h:95
float m_unmatchedVertexTrackMaxEnergy
Maximum energy for unmatched vertex track.
Definition: TrackCreator.h:81
float m_maxTrackSigmaPOverP
Track fraction momentum error cut.
Definition: TrackCreator.h:96
int m_reachesECalMinFtdLayer
Min layer in Ftd for tracks to be considered to have reached decal.
Definition: TrackCreator.h:90
int m_usingUnmatchedVertexTracks
Whether can form pfos from unmatched tracks that start at vertex.
Definition: TrackCreator.h:80
int m_reachesECalNFtdHits
Minimum number of ftd hits to consider track as reaching ecal.
Definition: TrackCreator.h:88
int m_reachesECalNTpcHits
Minimum number of tpc hits to consider track as reaching ecal.
Definition: TrackCreator.h:87
float m_reachesECalTpcOuterDistance
Max distance from track to tpc r max to id whether track reaches ecal.
Definition: TrackCreator.h:89
float m_zCutForNonVertexTracks
Non vtx track z cut to determine whether track can be used to form pfo.
Definition: TrackCreator.h:85
int m_minFtdTrackHits
Track quality cut: the minimum number of FTD track hits for FTD only tracks.
Definition: TrackCreator.h:72
int m_usingUnmatchedNonVertexTracks
Whether can form pfos from unmatched tracks that don't start at vertex.
Definition: TrackCreator.h:79
int m_minFtdHitsForTpcHitFraction
Minimum number of FTD hits to ignore TPC hit fraction.
Definition: TrackCreator.h:102
float m_minMomentumForTrackHitChecks
Min track momentum required to perform final quality checks on number of hits.
Definition: TrackCreator.h:97
float m_reachesECalFtdZMaxDistance
Max distance from track hit to ftd z position to identify ftd hits.
Definition: TrackCreator.h:92
float m_maxTpcInnerRDistance
Track cut on distance from tpc inner r to id whether track can form pfo.
Definition: TrackCreator.h:100
float m_reachesECalTpcZMaxDistance
Max distance from track to tpc z max to id whether track reaches ecal.
Definition: TrackCreator.h:91
float m_minTpcHitFractionOfExpected
Minimum fraction of TPC hits compared to expected.
Definition: TrackCreator.h:101
int m_minTrackHits
Track quality cut: the minimum number of track hits.
Definition: TrackCreator.h:71
int m_shouldFormTrackRelationships
Whether to form pandora track relationships using v0 and kink info.
Definition: TrackCreator.h:69
StringVector m_prongVertexCollections
The prong vertex collections.
Definition: TrackCreator.h:64
float m_z0TrackCut
Track z0 cut used to determine whether track can be used to form pfo.
Definition: TrackCreator.h:76
float m_tpcMembraneMaxZ
Tpc membrane max z coordinate.
Definition: TrackCreator.h:99
pandora::StatusCode CreateTrackAssociations(const EVENT::LCEvent *const pLCEvent)
Create associations between tracks, V0s, kinks, etc.
Definition: TrackCreator.cc:131
pandora::StatusCode CreateTracks(EVENT::LCEvent *pLCEvent)
Create tracks, insert user code here.
Definition: TrackCreator.cc:421
~TrackCreator()
Destructor.
Definition: TrackCreator.cc:125
int m_maxTrackHits
Track quality cut: the maximum number of track hits.
Definition: TrackCreator.h:73
float m_curvatureToMomentumFactor
Constant relating track curvature in b field to momentum.
Definition: TrackCreator.h:93
StringVector m_kinkVertexCollections
The kink vertex collections.
Definition: TrackCreator.h:63