PandaRoot
PndTrackingQATaskTimebased.h
Go to the documentation of this file.
1 // -------------------------------------------------------------------------
2 // ----- PndTrackingQATaskTimebased header file -----
3 // ----- Created 18/01/10 by T.Stockmanns -----
4 // -------------------------------------------------------------------------
5 
12 #ifndef PndTrackingQATaskTimebased_H
13 #define PndTrackingQATaskTimebased_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 PndTrackingQATaskTimebased : public FairTask {
34  public:
36  PndTrackingQATaskTimebased(TString trackBranchName, TString idealBranchName, Bool_t pndTrackData = kTRUE);
37 
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  // changes the definition of primary and secondary
71  // a primary track is then defined as a track with dPCA (distance from point of closest approach to IP) in the xy-projection < a specified distance
72  // currently the dPCA is calculated in the xy-projection, where the particle track is assumed to be a circle.
73  void SetSecondaryDefinitionPCAXY(double dPCA)
74  {
75  fSecondaryDefinitionPCAXY = kTRUE;
76  fdPCA = dPCA;
77  }
78 
79  private:
80  double fSumTime;
81 
82  // virtual void FillMapTrackQualifikation();
83  const TString fHypoName[5] = {"Electron", "Muon", "Pion", "Kaon", "Proton"};
84 
93  virtual void FillQualyHisto(std::map<Int_t, Int_t> trackQualifikation, Int_t nGhosts, Int_t nClones);
94  virtual void FillQualyHistoTimeBased(std::map<FairLink, Int_t> trackQualifikation, Int_t nGhosts);
95  virtual void FillMCStatus(std::map<Int_t, Int_t> trackMCStatus);
96  virtual void FillMCStatusTimeBased(std::map<FairLink, Int_t> trackMCStatus);
97  virtual void FillEfficiencies(std::map<Int_t, std::map<TString, std::pair<Double_t, Int_t>>> efficiencies);
98  virtual void FillEfficienciesTimeBased(std::map<FairLink, std::map<TString, std::pair<Double_t, Int_t>>> efficiencies);
99  virtual void MapToHist(std::map<Int_t, Double_t>, TH1 *);
100  virtual void MapToHistTimeBased(std::map<FairLink, Double_t>, TH1 *);
101 
102  virtual void SetQualyHisto(TH1 *histo, Bool_t relative, Int_t base = 1);
103 
104  virtual Int_t GetSumOfAllValidMCHits(FairMultiLinkedData *trackData);
105 
106  void AssociateRecoTracksToMCTracks();
107 
108  PndTrackingQualityMCInfo GetMCInfoFromIdealTrack(PndTrack *idealtrack);
109  Int_t GetMCInfoIdFromIdealTrackId(int idealtrackid) { return fMCInfoIdIdealId[idealtrackid]; }
110 
111  void InitializeHistograms();
112  void LabelQualyHistogram(TH1 *);
113  void ColorHistogram();
114  std::vector<TString> fBranchNames;
115  TString fMCInfoBranchName, fRecoInfoBranchName;
116 
117  std::map<TString, FairMultiLinkedData> fMapLinkData;
118  // std::map<TString, Double_t> fPossibleTrackParameter;
119  std::map<TString, TH2 *> fMapEfficiencies;
120 
121  std::map<int, int> fMCInfoIdIdealId;
122  std::map<FairLink, int> fTimeBasedMCInfoIdIdealId;
123 
124  Int_t fNGhosts;
125 
126  Double_t clonesTimeBasedTotal;
127  Int_t fTotClonesTimeBased;
128 
129  TClonesArray *fTrack;
130  TClonesArray *fMCTrack;
131  TClonesArray *fSttHitArray;
132  TClonesArray *fMCTrackInfo;
133  TClonesArray *fRecoTrackInfo;
134  TClonesArray *fIdealTrack;
135  TClonesArray *fSttTubeArray;
136 
137  FairRootManager *ioman;
138 
139  std::map<Int_t, Int_t> fMapTrackQualifikation;
140 
141  TString fTrackBranchName;
142  TString fIdealTrackBranchName;
143  Bool_t fPndTrackOrTrackCand; // kTRUE if track and kFALSE if track cand
144  PndGeoSttPar *fSttParameters;
145 
146  TString fPossibleTrackFunctorName;
147 
148  bool fRunTimeBased; // Set to kTRUE/true to run time based, kFALSE/false is default and makes the task run event based
149 
150  std::map<FairLink, Int_t> fTimeBasedMapTrackMCStatusForCloneCalc;
151 
152  PndTrackFunctor *fPossibleTrackFunctor;
153 
154  RhoTuple *fTuple;
155  TH1 *fIdealTracksPerEvent;
156  TH1 *fIdealPHisto;
157  TH1 *fIdealPtHisto;
158  TH1 *fIdealPlHisto;
159  TH1 *fIdealPrimTracksPerEvent;
160  TH1 *fIdealSecTracksPerEvent;
161  TH1 *fPHisto;
162  TH1 *fPRelHisto;
163  TH1 *fPtHisto;
164  TH1 *fPtRelHisto;
165  TH1 *fPlHisto;
166  TH1 *fPlRelHisto;
167  TH1 *fQualyHisto;
168  THStack *fQualyStack;
169  TH1 *fQualyHisto_mc;
170  TH1 *fQualyHisto_neg;
171  TH1 *fQualyHisto_pos;
172  TH1 *fQualyHisto_all;
173  TH1 *fQualyHisto_rel_all;
174  TH1 *fQualyHisto_rel_possible;
175 
176  TH1 *fEventPurityHisto;
177 
178  Int_t fEventNr;
179  bool fSecondaryDefinitionPCAXY;
180  double fdPCA;
181 
182  void Register();
183 
184  void Reset();
185 
186  ClassDef(PndTrackingQATaskTimebased, 1);
187 };
188 
189 #endif
void SetOutputMCInfoBranchName(TString name)
void SetTrackBranchName(TString name, Bool_t pndTrackData=kTRUE)
Sets the branch name of the track data which should be analyzed.
virtual ~PndTrackingQATaskTimebased()
void SetRunTimeBased(bool runTimeBased)
void AddHitsBranchName(TString name)
Adds branch names of detector data which should be taken into account in the analysis.
PndTrackingQATaskTimebased(TString trackBranchName, TString idealBranchName, Bool_t pndTrackData=kTRUE)
virtual void Exec(Option_t *opt)
virtual void SetParContainers()
void SetOutputRecoInfoBranchName(TString name)
virtual InitStatus Init()