PandaRoot
PndTrackingQAMCInfo.h
Go to the documentation of this file.
1 
8 #pragma once
9 
11 #include "TVector3.h"
12 #include "TString.h"
13 #include "TObject.h"
14 
15 #include "TClonesArray.h"
16 
17 #include "FairLink.h"
18 
19 #include <map>
20 #include <functional>
21 
22 class PndTrackingQAMCInfo : public TObject {
23  public:
25  virtual ~PndTrackingQAMCInfo();
26 
27  void SetdPCA2d(Double_t val) { fdPCA2d = val; }
28  void SetCharge(int ch) { fCharge = ch; }
29  void SetIsPrimary(Bool_t val) { fIsPrimary = val; }
30  void SetVertex(TVector3 val) { fVertex = val; }
31  void SetMomentum(TVector3 val) { fMomentum = val; }
32  void SetPositionFirst(TVector3 pos) { fPosFirst = pos; }
33  void SetMomentumFirst(TVector3 mom) { fMomFirst = mom; }
34  void SetPositionLast(TVector3 pos) { fPosLast = pos; }
35  void SetMomentumLast(TVector3 mom) { fMomLast = mom; }
36  void SetPDGCode(int pdg) { fPDGCode = pdg; }
37  void SetMCTrackID(FairLink mctrackid) { fMCTrackID = mctrackid; }
38  void SetRecoTrackIDs(std::vector<FairLink> recotrkids) { fRecoTrackIDs = recotrkids; }
39  void AddRecoTrackID(FairLink recotrkid) { fRecoTrackIDs.push_back(recotrkid); }
40  void SetAssoRecoTrackID(FairLink asso) { fAssoRecoTrackID = asso; }
41  void SetQuality(int quality) { fQuality = quality; }
42  void SetMCQuality(int mcquality) { fMCQuality = mcquality; }
43  void SetIdealTrackLink(FairLink link) { fIdealTrackLink = link; }
44  void SetNofPoints(TString branchName, int points) { fMapBranchNameMCHits[TrackingQA::StringToBranchEnum(branchName.Data())] = points; }
45 
46  FairLink GetAssoRecoTrackID() const { return fAssoRecoTrackID; }
47  FairLink GetMCTrackID() const { return fMCTrackID; } //< Returns the corresponding MCTrack to an ideal track
48  Short_t GetNofRecoTracks(void) const { return fRecoTrackIDs.size(); } //< Returns the number of reco tracks associated to the ideal track
49  FairLink GetRecoTrackID(Int_t i = 0) const
50  { //< Returns the id of the ith reco track associated to the ideal track
51  if (i < GetNofRecoTracks())
52  return fRecoTrackIDs[i];
53  return FairLink();
54  }
55 
57 
58  Int_t GetNofSttParalPoints() { return fMapBranchNameMCHits[TrackingQA::branchEnum::STTHitParal]; }
59  Int_t GetNofSttSkewPoints() { return fMapBranchNameMCHits[TrackingQA::branchEnum::STTHitSkew]; }
60 
61  Int_t GetNofMCPoints(TString branchName) { return GetNofMCPoints(TrackingQA::StringToBranchEnum(branchName)); }
62 
64  {
65  if (branch == TrackingQA::branchEnum::STTHit) {
66  return GetNofSttPoints();
67  } else {
68  if (fMapBranchNameMCHits.count(branch) > 0)
69  return fMapBranchNameMCHits[branch];
70  else
71  return 0;
72  }
73  }
74 
75  Int_t GetNofMCPoints() const
76  {
77  int nPoints = 0;
78  for (auto val : fMapBranchNameMCHits) {
79  nPoints += val.second;
80  }
81  return nPoints;
82  }
83 
84  TVector3 GetPositionFirst() const { return fPosFirst; }
85  TVector3 GetMomentumFirst() const { return fMomFirst; }
86  TVector3 GetPositionLast() const { return fPosLast; }
87  TVector3 GetMomentumLast() const { return fMomLast; }
88  Double_t GetdPCA2d() const { return fdPCA2d; }
89 
90  Int_t GetCharge() const { return fCharge; }
91  Bool_t GetIsPrimary() const { return fIsPrimary; }
92  TVector3 GetVertex() const { return fVertex; }
93  TVector3 GetStartMomentum() const { return fMomentum; }
94  Int_t GetPDGCode() const { return fPDGCode; }
95  Int_t GetQuality() const { return fQuality; }
96  Int_t GetMCQuality() const { return fMCQuality; }
97  FairLink GetIdealTrackLink() const { return fIdealTrackLink; }
98  std::map<TrackingQA::branchEnum, Int_t> GetMCHits() const { return fMapBranchNameMCHits; }
99 
100  void FindBestRecoTrack(TClonesArray *recoInfo);
101  void FindBestRecoTrack(TClonesArray *recoInfo, std::function<bool(FairLink &, FairLink &)> function);
102 
103  friend std::ostream &operator<<(std::ostream &os, const PndTrackingQAMCInfo &mcInfo)
104  {
105  os << "MCTrack: " << mcInfo.GetMCTrackID() << " MCQuality: " << mcInfo.GetMCQuality() << std::endl;
106  for (auto hits : mcInfo.fMapBranchNameMCHits) {
107  os << "MCInfo " << TrackingQA::BranchEnumToString(hits.first) << " : " << hits.second << std::endl;
108  }
109  os << "RecoTrackIDs: ";
110  for (auto trackID : mcInfo.fRecoTrackIDs)
111  os << trackID << " ";
112  os << std::endl;
113  os << "AssociatedTrackID: " << mcInfo.fAssoRecoTrackID << " Quality: " << mcInfo.GetQuality() << std::endl;
114  return os;
115  }
116 
117  protected:
118  void SetBestRecoTrack(TClonesArray *recoInfo);
119  void SetRecoTrackIsClone(TClonesArray *recoInfo);
120 
121  private:
122  std::map<TrackingQA::branchEnum, Int_t> fMapBranchNameMCHits; // branchID, MCHits
123 
124  FairLink fMCTrackID;
125  std::vector<FairLink> fRecoTrackIDs;
126  TVector3 fPosFirst, fMomFirst;
127  TVector3 fPosLast, fMomLast;
128 
129  Int_t fCharge = -10; //< Charge from MCTrack
130  Bool_t fIsPrimary = kFALSE;
131  TVector3 fVertex = {-10000., -10000., -10000.}; //< Vertex position from MCTrack
132  TVector3 fMomentum; //< Momentum at vertex position from MCTrack
133  Int_t fPDGCode = 0; //< PDG code from MCTrack
134  Double_t fdPCA2d = 0.; //< Distance of closest approach of track circle to primary vertex in xy plane
135 
136  Int_t fQuality = 0;
137  Int_t fMCQuality = 0;
138  FairLink fAssoRecoTrackID; //< Id of the reco track with the highest efficiency (or highest purity if two tracks with identical eff. exist)
139  FairLink fIdealTrackLink;
140  ClassDef(PndTrackingQAMCInfo, 3);
141 };
void SetNofPoints(TString branchName, int points)
TVector3 GetStartMomentum() const
void AddRecoTrackID(FairLink recotrkid)
virtual ~PndTrackingQAMCInfo()
Int_t GetNofMCPoints(TrackingQA::branchEnum branch)
Int_t GetNofMCPoints() const
TVector3 GetVertex() const
void SetMomentumFirst(TVector3 mom)
void SetMomentum(TVector3 val)
unsigned int i
Definition: P4_F32vec4.h:21
void SetMCQuality(int mcquality)
Int_t GetNofMCPoints(TString branchName)
std::map< TrackingQA::branchEnum, Int_t > GetMCHits() const
void SetVertex(TVector3 val)
Double_t GetdPCA2d() const
FairLink GetMCTrackID() const
void SetIdealTrackLink(FairLink link)
void SetIsPrimary(Bool_t val)
Int_t GetMCQuality() const
TVector3 GetPositionFirst() const
Bool_t GetIsPrimary() const
void SetRecoTrackIsClone(TClonesArray *recoInfo)
void SetPositionLast(TVector3 pos)
Short_t GetNofRecoTracks(void) const
void SetMCTrackID(FairLink mctrackid)
FairLink GetIdealTrackLink() const
TVector3 GetPositionLast() const
void SetMomentumLast(TVector3 mom)
void SetBestRecoTrack(TClonesArray *recoInfo)
void SetQuality(int quality)
void FindBestRecoTrack(TClonesArray *recoInfo)
void SetdPCA2d(Double_t val)
void SetAssoRecoTrackID(FairLink asso)
branchEnum StringToBranchEnum(TString branchString)
FairLink GetAssoRecoTrackID() const
friend std::ostream & operator<<(std::ostream &os, const PndTrackingQAMCInfo &mcInfo)
void SetPositionFirst(TVector3 pos)
void SetRecoTrackIDs(std::vector< FairLink > recotrkids)
FairLink GetRecoTrackID(Int_t i=0) const
TVector3 GetMomentumFirst() const
TString BranchEnumToString(branchEnum branch)
TVector3 GetMomentumLast() const