PandaRoot
PndTrackingQATask.h
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndTrackingQATask header file -----
3 // ----- Created 18/01/10 by T.Stockmanns -----
4 // -------------------------------------------------------------------------
5 
12 #ifndef PndTrackingQATask_H
13 #define PndTrackingQATask_H
14 
15 // framework includes
16 #include "FairTask.h"
17 #include "PndDetectorList.h"
18 #include "PndTrack.h"
19 #include "PndTrackCand.h"
21 #include "PndGeoSttPar.h"
22 #include "TH2.h"
23 #include "THStack.h"
24 #include "RhoTuple.h"
25 #include "PndTrackFunctor.h"
26 
27 #include "PndTrackingCloneInfo.h"
28 #include <vector>
29 #include <map>
30 
31 class TClonesArray;
32 
33 class PndTrackingQATask : public FairTask {
34  public:
36  PndTrackingQATask(TString trackBranchName, TString idealBranchName, Bool_t pndTrackData = kTRUE);
37 
39  virtual ~PndTrackingQATask();
40 
42  virtual void SetParContainers();
43  virtual InitStatus Init();
44 
46  virtual void Exec(Option_t *opt);
47 
48  virtual void Finish();
49 
50  void SetIdealTrackBranchName(TString name) { fIdealTrackBranchName = name; };
51 
53  void SetTrackBranchName(TString name, Bool_t pndTrackData = kTRUE)
54  {
55  fPndTrackOrTrackCand = pndTrackData;
56  fTrackBranchName = name;
57  } // alternatively PndTrackCandData can be analysed. Therefore pndTrackData has to be set to kFALSE
58 
60  void AddHitsBranchName(TString name) { fBranchNames.push_back(name); }
61 
62  void SetOutputMCInfoBranchName(TString name) { fMCInfoBranchName = name; }
63  void SetOutputRecoInfoBranchName(TString name) { fRecoInfoBranchName = name; }
64 
65  void SetFunctorName(TString name) { fPossibleTrackFunctorName = name; }
66  void SetFunctor();
67 
68  void SetRunTimeBased(bool runTimeBased) { fRunTimeBased = runTimeBased; }
69 
70  private:
71  double fSumTime;
72 
73  // virtual void FillMapTrackQualifikation();
74  const TString fHypoName[5] = {"Electron", "Muon", "Pion", "Kaon", "Proton"};
75 
84  virtual void FillQualyHisto(std::map<Int_t, Int_t> trackQualifikation, Int_t nGhosts, Int_t nClones);
85  virtual void FillQualyHistoTimeBased(std::map<FairLink, Int_t> trackQualifikation, Int_t nGhosts);
86  virtual void FillMCStatus(std::map<Int_t, Int_t> trackMCStatus);
87  virtual void FillMCStatusTimeBased(std::map<FairLink, Int_t> trackMCStatus);
88  virtual void FillEfficiencies(std::map<Int_t, std::map<TString, std::pair<Double_t, Int_t>>> efficiencies);
89  virtual void FillEfficienciesTimeBased(std::map<FairLink, std::map<TString, std::pair<Double_t, Int_t>>> efficiencies);
90  virtual void MapToHist(std::map<Int_t, Double_t>, TH1 *);
91  virtual void MapToHistTimeBased(std::map<FairLink, Double_t>, TH1 *);
92 
93  virtual void SetQualyHisto(TH1 *histo, Bool_t relative, Int_t base = 1);
94 
95  virtual Int_t GetSumOfAllValidMCHits(FairMultiLinkedData *trackData);
96 
97  void AssociateRecoTracksToMCTracks();
98 
99  PndTrackingQualityMCInfo GetMCInfoFromIdealTrack(PndTrack *idealtrack);
100  Int_t GetMCInfoIdFromIdealTrackId(int idealtrackid) { return fMCInfoIdIdealId[idealtrackid]; }
101 
102  void InitializeHistograms();
103  void LabelQualyHistogram(TH1 *);
104  void ColorHistogram();
105  std::vector<TString> fBranchNames;
106  TString fMCInfoBranchName, fRecoInfoBranchName;
107 
108  std::map<TString, FairMultiLinkedData> fMapLinkData;
109  // std::map<TString, Double_t> fPossibleTrackParameter;
110  std::map<TString, TH2 *> fMapEfficiencies;
111 
112  std::map<int, int> fMCInfoIdIdealId;
113  std::map<FairLink, int> fTimeBasedMCInfoIdIdealId;
114 
115  Int_t fNGhosts;
116 
117  Double_t clonesTimeBasedTotal;
118  Int_t fTotClonesTimeBased;
119 
120  TClonesArray *fTrack;
121  TClonesArray *fMCTrack;
122  TClonesArray *fSttHitArray;
123  TClonesArray *fMCTrackInfo;
124  TClonesArray *fRecoTrackInfo;
125  TClonesArray *fIdealTrack;
126  TClonesArray *fSttTubeArray;
127 
128  FairRootManager *ioman;
129 
130  std::map<Int_t, Int_t> fMapTrackQualifikation;
131 
132  TString fTrackBranchName;
133  TString fIdealTrackBranchName;
134  Bool_t fPndTrackOrTrackCand; // kTRUE if track and kFALSE if track cand
135  PndGeoSttPar *fSttParameters;
136 
137  TString fPossibleTrackFunctorName;
138 
139  bool fRunTimeBased; // Set to kTRUE/true to run time based, kFALSE/false is default and makes the task run event based
140 
141  std::map<FairLink, Int_t> fTimeBasedMapTrackMCStatusForCloneCalc;
142 
143  PndTrackFunctor *fPossibleTrackFunctor;
144 
145  RhoTuple *fTuple;
146  TH1 *fIdealTracksPerEvent;
147  TH1 *fIdealPHisto;
148  TH1 *fIdealPtHisto;
149  TH1 *fIdealPlHisto;
150  TH1 *fIdealPrimTracksPerEvent;
151  TH1 *fIdealSecTracksPerEvent;
152  TH1 *fPHisto;
153  TH1 *fPRelHisto;
154  TH1 *fPtHisto;
155  TH1 *fPtRelHisto;
156  TH1 *fPlHisto;
157  TH1 *fPlRelHisto;
158  TH1 *fQualyHisto;
159  THStack *fQualyStack;
160  TH1 *fQualyHisto_mc;
161  TH1 *fQualyHisto_neg;
162  TH1 *fQualyHisto_pos;
163  TH1 *fQualyHisto_all;
164  TH1 *fQualyHisto_rel_all;
165  TH1 *fQualyHisto_rel_possible;
166 
167  TH1 *fEventPurityHisto;
168 
169  Int_t fEventNr;
170 
171  void Register();
172 
173  void Reset();
174 
175  ClassDef(PndTrackingQATask, 1);
176 };
177 
178 #endif
void SetTrackBranchName(TString name, Bool_t pndTrackData=kTRUE)
Sets the branch name of the track data which should be analyzed.
virtual void Finish()
virtual void Exec(Option_t *opt)
void SetOutputRecoInfoBranchName(TString name)
PndTrackingQATask(TString trackBranchName, TString idealBranchName, Bool_t pndTrackData=kTRUE)
virtual ~PndTrackingQATask()
void SetIdealTrackBranchName(TString name)
void SetFunctorName(TString name)
void SetRunTimeBased(bool runTimeBased)
virtual InitStatus Init()
void SetOutputMCInfoBranchName(TString name)
void AddHitsBranchName(TString name)
Adds branch names of detector data which should be taken into account in the analysis.
virtual void SetParContainers()