PandaRoot
PndTrackingQATaskTimebased.h
Go to the documentation of this file.
1 //****************************************************************************
2 //* This file is part of PandaRoot. *
3 //* *
4 //* PandaRoot is distributed under the terms of the *
5 //* GNU General Public License (GPL) version 3, *
6 //* copied verbatim in the file "LICENSE". *
7 //* *
8 //* Copyright (C) 2006 - 2024 FAIR GmbH and copyright holders of PandaRoot *
9 //* The copyright holders are listed in the file "COPYRIGHTHOLDERS". *
10 //* The authors are listed in the file "AUTHORS". *
11 //****************************************************************************
12 
13 // -------------------------------------------------------------------------
14 // ----- PndTrackingQATaskTimebased header file -----
15 // ----- Created 18/01/10 by T.Stockmanns -----
16 // -------------------------------------------------------------------------
17 
24 #ifndef PndTrackingQATaskTimebased_H
25 #define PndTrackingQATaskTimebased_H
26 
27 // framework includes
28 #include "FairTask.h"
29 #include "PndDetectorList.h"
30 #include "PndTrack.h"
31 #include "PndTrackCand.h"
33 #include "PndGeoSttPar.h"
34 #include "TH2.h"
35 #include "THStack.h"
36 #include "RhoTuple.h"
37 #include "PndTrackFunctor.h"
38 
39 #include "PndTrackingCloneInfo.h"
40 #include <vector>
41 #include <map>
42 
43 class TClonesArray;
44 
45 class PndTrackingQATaskTimebased : public FairTask {
46  public:
48  PndTrackingQATaskTimebased(TString trackBranchName, TString idealBranchName, Bool_t pndTrackData = kTRUE);
49 
52 
54  virtual void SetParContainers();
55  virtual InitStatus Init();
56 
58  virtual void Exec(Option_t *opt);
59 
60  virtual void Finish();
61 
62  void SetIdealTrackBranchName(TString name) { fIdealTrackBranchName = name; };
63 
65  void SetTrackBranchName(TString name, Bool_t pndTrackData = kTRUE)
66  {
67  fPndTrackOrTrackCand = pndTrackData;
68  fTrackBranchName = name;
69  } // alternatively PndTrackCandData can be analysed. Therefore pndTrackData has to be set to kFALSE
70 
72  void AddHitsBranchName(TString name) { fBranchNames.push_back(name); }
73 
74  void SetOutputMCInfoBranchName(TString name) { fMCInfoBranchName = name; }
75  void SetOutputRecoInfoBranchName(TString name) { fRecoInfoBranchName = name; }
76 
77  void SetFunctorName(TString name) { fPossibleTrackFunctorName = name; }
78  void SetFunctor();
79 
80  void SetRunTimeBased(bool runTimeBased) { fRunTimeBased = runTimeBased; }
81 
82  // changes the definition of primary and secondary
83  // 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
84  // currently the dPCA is calculated in the xy-projection, where the particle track is assumed to be a circle.
85  void SetSecondaryDefinitionPCAXY(double dPCA)
86  {
87  fSecondaryDefinitionPCAXY = kTRUE;
88  fdPCA = dPCA;
89  }
90 
91  private:
92  double fSumTime;
93 
94  // virtual void FillMapTrackQualifikation();
95  const TString fHypoName[5] = {"Electron", "Muon", "Pion", "Kaon", "Proton"};
96 
105  virtual void FillQualyHisto(std::map<Int_t, Int_t> trackQualifikation, Int_t nGhosts, Int_t nClones);
106  virtual void FillQualyHistoTimeBased(std::map<FairLink, Int_t> trackQualifikation, Int_t nGhosts);
107  virtual void FillMCStatus(std::map<Int_t, Int_t> trackMCStatus);
108  virtual void FillMCStatusTimeBased(std::map<FairLink, Int_t> trackMCStatus);
109  virtual void FillEfficiencies(std::map<Int_t, std::map<TString, std::pair<Double_t, Int_t>>> efficiencies);
110  virtual void FillEfficienciesTimeBased(std::map<FairLink, std::map<TString, std::pair<Double_t, Int_t>>> efficiencies);
111  virtual void MapToHist(std::map<Int_t, Double_t>, TH1 *);
112  virtual void MapToHistTimeBased(std::map<FairLink, Double_t>, TH1 *);
113 
114  virtual void SetQualyHisto(TH1 *histo, Bool_t relative, Int_t base = 1);
115 
116  virtual Int_t GetSumOfAllValidMCHits(FairMultiLinkedData *trackData);
117 
118  void AssociateRecoTracksToMCTracks();
119 
120  PndTrackingQualityMCInfo GetMCInfoFromIdealTrack(PndTrack *idealtrack);
121  Int_t GetMCInfoIdFromIdealTrackId(int idealtrackid) { return fMCInfoIdIdealId[idealtrackid]; }
122 
123  void InitializeHistograms();
124  void LabelQualyHistogram(TH1 *);
125  void ColorHistogram();
126  std::vector<TString> fBranchNames;
127  TString fMCInfoBranchName, fRecoInfoBranchName;
128 
129  std::map<TString, FairMultiLinkedData> fMapLinkData;
130  // std::map<TString, Double_t> fPossibleTrackParameter;
131  std::map<TString, TH2 *> fMapEfficiencies;
132 
133  std::map<int, int> fMCInfoIdIdealId;
134  std::map<FairLink, int> fTimeBasedMCInfoIdIdealId;
135 
136  Int_t fNGhosts;
137 
138  Double_t clonesTimeBasedTotal;
139  Int_t fTotClonesTimeBased;
140 
141  TClonesArray *fTrack;
142  TClonesArray *fMCTrack;
143  TClonesArray *fSttHitArray;
144  TClonesArray *fMCTrackInfo;
145  TClonesArray *fRecoTrackInfo;
146  TClonesArray *fIdealTrack;
147  TClonesArray *fSttTubeArray;
148 
149  FairRootManager *ioman;
150 
151  std::map<Int_t, Int_t> fMapTrackQualifikation;
152 
153  TString fTrackBranchName;
154  TString fIdealTrackBranchName;
155  Bool_t fPndTrackOrTrackCand; // kTRUE if track and kFALSE if track cand
156  PndGeoSttPar *fSttParameters;
157 
158  TString fPossibleTrackFunctorName;
159 
160  bool fRunTimeBased; // Set to kTRUE/true to run time based, kFALSE/false is default and makes the task run event based
161 
162  std::map<FairLink, Int_t> fTimeBasedMapTrackMCStatusForCloneCalc;
163 
164  PndTrackFunctor *fPossibleTrackFunctor;
165 
166  RhoTuple *fTuple;
167  TH1 *fIdealTracksPerEvent;
168  TH1 *fIdealPHisto;
169  TH1 *fIdealPtHisto;
170  TH1 *fIdealPlHisto;
171  TH1 *fIdealPrimTracksPerEvent;
172  TH1 *fIdealSecTracksPerEvent;
173  TH1 *fPHisto;
174  TH1 *fPRelHisto;
175  TH1 *fPtHisto;
176  TH1 *fPtRelHisto;
177  TH1 *fPlHisto;
178  TH1 *fPlRelHisto;
179  TH1 *fQualyHisto;
180  THStack *fQualyStack;
181  TH1 *fQualyHisto_mc;
182  TH1 *fQualyHisto_neg;
183  TH1 *fQualyHisto_pos;
184  TH1 *fQualyHisto_all;
185  TH1 *fQualyHisto_rel_all;
186  TH1 *fQualyHisto_rel_possible;
187 
188  TH1 *fEventPurityHisto;
189 
190  Int_t fEventNr;
191  bool fSecondaryDefinitionPCAXY;
192  double fdPCA;
193 
194  void Register();
195 
196  void Reset();
197 
198  ClassDef(PndTrackingQATaskTimebased, 1);
199 };
200 
201 #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()