PandaRoot
PndPidCorrelatorMod.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 #ifndef PID_CORRELATORMOD_H
14 #define PID_CORRELATORMOD_H
15 
16 // **************************************************************************
17 // Author: Stefano Spataro e-mail: spataro@to.infn.it
18 //
19 // pid correlator
20 //
21 // Created: 03-07-09
22 // Modified:
23 //
24 // **************************************************************************
25 
26 #include "TNtuple.h"
27 #include "TString.h"
28 #include "TClonesArray.h"
29 #include <map>
30 
31 #include "FairTask.h"
32 #include "FairField.h"
33 #include "FairTrackParH.h"
34 #include "FairGeanePro.h"
35 #include "FairGeane.h"
36 
37 #include "PndTrack.h"
38 #include "PndGeoHandling.h"
39 #include "PndRecoKalmanFit.h"
40 #include "PndPidCorrPar.h"
41 #include "PndPidCandidate.h"
42 #include "PndEmcXClMoments.h"
43 #include "PndEmcGeoPar.h"
44 #include "PndEmcErrorMatrix.h"
46 #include "PndEmcErrorMatrixPar.h"
47 #include "PndGeoSttPar.h"
48 #include "PndGeoFtsPar.h"
49 #include "TStopwatch.h"
50 
51 using std::map;
52 using std::vector;
53 
54 class TGeant3;
55 class PndPidCorrelatorMod : public FairTask {
56 
57 protected:
58 
59  TClonesArray* fMcTrack;
60  TClonesArray* fTrack;
61  TClonesArray* fTrackID;
62  TClonesArray* fTrack2;
63  TClonesArray* fTrackID2;
64  TClonesArray* fPidChargedCand;
65  TClonesArray* fPidNeutralCand;
66  TClonesArray* fMdtTrack;
67 
68  TClonesArray* fMvdHitsStrip;
69  TClonesArray* fMvdHitsPixel;
70  TClonesArray* fTofHit;
71  TClonesArray* fTofPoint;
72  TClonesArray* fFtofHit;
73  TClonesArray* fFtofPoint;
74  TClonesArray* fEmcCluster;
75  TClonesArray* fEmcBump;
76  TClonesArray* fEmcDigi;
77  TClonesArray* fMdtPoint;
78  TClonesArray* fMdtHit;
79  TClonesArray* fMdtTrk;
80  TClonesArray* fDrcPoint;
81  TClonesArray* fDrcHit;
82  TClonesArray* fDskParticle;
83  TClonesArray* fSttHit;
84  TClonesArray* fFtsHit;
85 
93 
94  Short_t fDebugMode; // Fill ntuples for debug
95  Short_t fMvdMode; // MVD Mode: 0 no MVD, 1 MvdPoint, (2) MvdHit
96  Short_t fSttMode; // STT Mode: 0 no STT, 1 SttPoint, (2) SttHit
97  Short_t fFtsMode; // FTS Mode: 0 no FTS, 1 FtsPoint, (2) FtsHit
98  Short_t fTofMode; // TOF Mode: 0 no TOF, 1 -empty-, (2) TofHit
99  Short_t fFtofMode; // FTOF Mode:0 no FTOF,1 -empty-, (2) FTofHit
100  Short_t fEmcMode; // EMC Mode: 0 no EMC, 1 -empty-, (2) EmcCluster, 3 EmcBumps
101  Short_t fMdtMode; // MDT Mode: 0 no MDT, 1 -empty-, (2) MdtHit
102  Short_t fDrcMode; // DRC Mode: 0 no DRC, 1 -empty-, (2) DrcHit
103  Short_t fDskMode; // DSK Mode: 0 no DSK, 1 -empty-, (2) DskParticle
104 
105  Int_t fVerbose;
106  Int_t fEmcClstCount; // Number of EMC clusters
107  Int_t fFscClstCount; // Number of FSC clusters
108 
109  Double_t fMvdELoss; // Energy Loss in MVD
110  Double_t fMvdPath; // MVD path crossed by the particle
111  Int_t fMvdHitCount; // Number of mvd hits
112 
113  map<Int_t, vector<Int_t> >mapMdtBarrel; // map of MDT barrel hits
114  map<Int_t, vector<Int_t> >mapMdtEndcap; // map of MDT endcap+muon filter hits
115  map<Int_t, vector<Int_t> >mapMdtForward; // map of MDT forward hits
116  Float_t mdtLayerPos[3][20]; // position of MDT layers
117  Float_t mdtIronThickness[3][20]; // thickness of iron layers
118 
119  map<Int_t, Bool_t> fClusterList; // List of clusters correlated to tracks
120  map<Int_t, Double_t> fClusterQ; // List of emc quaity correlated to clusters
121  TString fTrackBranch; // options to choose PndTrack branches
122  TString fTrackIDBranch; // options to choose PndTrackID branches
123  TString fTrackBranch2; // options to choose 2nd PndTrack branches
124  TString fTrackIDBranch2; // options to choose 2nd PndTrackID branches
125  TString fTrackOutBranch; // options to choose output branch
126  Bool_t fSimulation; // Switch simulation diagnostic
127  Bool_t fGeanePro; // Use GEANE propagation
128  Bool_t fMdtRefit; // Use MDT Kalman refit propagation
129  Bool_t fIdeal; // Ideal Correlation
130  Bool_t fCorrErrorProp; // Error propagation in correlation
131  Bool_t fMixMode; // Mix mode flag
132  Int_t fEventCounter; // Event number
133  Int_t fPidHyp; // particle hypothesis for propagation
134  Bool_t fIdealHyp; // Flag to use MC particle hypothesis
135  Bool_t fFast; // 0: normal; 1: no correlation/extrapolation/neutral
136  Bool_t fFlagCut; // kFALSE -> all the tracks; (kTRUE) -> store tracks only if flag>0
137  Bool_t fBackPropagate; // kFALSE -> do not propagate to IP; (kTRUE) -> propagate to IP
140  FairGeanePro* fGeanePropagator;
141  TFile *r; // File for debug ntuples
142  TNtuple *tofCorr; // Debug ntuple for tof correlation
143  TNtuple *ftofCorr; // Debug ntuple for ftof correlation
144  TNtuple *emcCorr; // Debug ntuple for emc correlation
145  TNtuple *fscCorr; // Debug ntuple for fsc correlation
146  TNtuple *mdtCorr; // Debug ntuple for mdt correlation
147  TNtuple *drcCorr; // Debug ntuple for drc correlation
148  TNtuple *dskCorr; // Debug ntuple for dsk correlation
149 
150  TString sDir; // Ntuple output directory
151  TString sFile; // Ntuple output file
152 
155 
158  PndTrack* AddMdtTrack(PndTrack* track);
159 
160  Bool_t GetTrackInfo(PndTrack* track, PndPidCandidate* pid);
161  Bool_t GetMvdInfo (PndTrack* track, PndPidCandidate* pid);
162  Bool_t GetSttInfo (PndTrack* track, PndPidCandidate* pid);
163  Bool_t GetFtsInfo (PndTrack* track, PndPidCandidate* pid);
164  Bool_t GetGemInfo (PndTrack* track, PndPidCandidate* pid);
165  Bool_t GetTofInfo (FairTrackParH* helix, PndPidCandidate* pid);
166  Bool_t GetFtofInfo (FairTrackParH* helix, PndPidCandidate* pid);
167  Bool_t GetEmcInfo (FairTrackParH* helix, PndPidCandidate* pid);
168  Bool_t GetFscInfo (FairTrackParH* helix, PndPidCandidate* pid);
169  Bool_t GetMdtInfo (PndTrack* track, PndPidCandidate* pid);
170  Bool_t GetDrcInfo (FairTrackParH* helix, PndPidCandidate* pid);
171  Bool_t GetDskInfo (FairTrackParH* helix, PndPidCandidate* pid);
172  Bool_t GetMdt2Info (FairTrackParH* helix, PndPidCandidate* pid);
173  Bool_t GetFMdtInfo (FairTrackParP* helix, PndPidCandidate* pid);
174 
175  Bool_t MdtMapping(); // Mapping of MDT hits
176  Bool_t MdtGeometry(); // Mapping of MDT geometry
177 
178 public:
179 
180  virtual void Exec(Option_t * option);
181  virtual InitStatus Init(); //
182 
183  void Register();
184  void Reset();
185  void ResetEmcQ();
186 
187  PndPidCorrelatorMod(const char *name, const char *title="Pnd Task");
189  virtual ~PndPidCorrelatorMod();
190 
191  void SetOption(Option_t *option=" ") {fOption = option; fOption.ToLower();}
192  void SetDebugMode(Bool_t debug) { fDebugMode = debug; };
193  void SetDebugFilename(TString filename) { sFile = filename; };
194  void SetMdtRefit(Bool_t mdt) { fMdtRefit = mdt; };
195  void SetMixMode(Bool_t mix) { fMixMode = mix; };
196  void SetInputBranch(TString branch) { fTrackBranch = branch; };
197  void SetInputBranch2(TString branch) { fTrackBranch2 = branch; };
198  void SetInputIDBranch(TString branch) { fTrackIDBranch = branch; };
199  void SetInputIDBranch2(TString branch) { fTrackIDBranch2 = branch; };
200  void SetOutputBranch(TString branch) { fTrackOutBranch = branch; };
201  void SetSimulation(Bool_t sim) { fSimulation = sim; };
202  void SetIdeal(Bool_t id) { fIdeal = id; };
203  void SetFast(Bool_t fast) { fFast = fast; };
204  void SetCorrErrProp(Bool_t err) { fCorrErrorProp = err; };
205  void SetGeanePro(Bool_t gea = kTRUE) { fGeanePro = gea; };
206  void SetPidHyp(Int_t pid) { fPidHyp = pid; };
207  void SetIdealHyp(Bool_t opt = kTRUE) { fIdealHyp = opt; }
208  void SetFlagCut(Bool_t opt = kTRUE) { fFlagCut = opt; };
209  void SetBackPropagate(Bool_t opt =kTRUE){ fBackPropagate = opt; };
210  void SetVerbose(Int_t verbose) { fVerbose = verbose; };
211 
212  void SetMvdMode(Short_t mode) { fMvdMode = mode; }; // MVD Mode: 0 no MVD
213  void SetSttMode(Short_t mode) { fSttMode = mode; }; // STT Mode: 0 no STT
214  void SetFtsMode(Short_t mode) { fFtsMode = mode; }; // FTS Mode: 0 no FTS
215  void SetTofMode(Short_t mode) { fTofMode = mode; }; // TOF Mode: 0 no TOF
216  void SetFtofMode(Short_t mode){ fFtofMode = mode; }; // FTOF Mode:0 no FTOF
217  void SetEmcMode(Short_t mode) { fEmcMode = mode; }; // EMC Mode: 0 no EMC
218  void SetMdtMode(Short_t mode) { fMdtMode = mode; }; // MDT Mode: 0 no MDT
219  void SetDrcMode(Short_t mode) { fDrcMode = mode; }; // DRC Mode: 0 no DRC
220  void SetDskMode(Short_t mode) { fDskMode = mode; }; // DSK Mode: 0 no DSK
221 
223  virtual void SetParContainers();
224  virtual void Finish();
225 
226  TStopwatch fTimer;
227 
228 private:
229  int stoptime;
230 
231 ClassDef(PndPidCorrelatorMod,2) // PndPidCorrelatorMod
232 
233 };
234 
235 #endif
TClonesArray * fFtofHit
PndTofPoint TCA.
void SetSttMode(Short_t mode)
map< Int_t, Bool_t > fClusterList
TClonesArray * fMvdHitsStrip
PndTrack TCA for MDT refit.
TClonesArray * fDrcHit
PndDrcBarPoint TCA.
void SetInputBranch2(TString branch)
TClonesArray * fTrack
PndMCTrack TCA.
TClonesArray * fSttHit
PndDskParticle TCA //need to change to PndDskHit in future.
TClonesArray * fEmcCluster
PndFtofPoint TCA.
Bool_t GetMdtInfo(PndTrack *track, PndPidCandidate *pid)
void SetDskMode(Short_t mode)
void SetOption(Option_t *option=" ")
PndEmcErrorMatrix * fEmcErrorMatrix
EMC error matrix parameters.
virtual InitStatus Init()
void SetIdealHyp(Bool_t opt=kTRUE)
Bool_t GetFMdtInfo(FairTrackParP *helix, PndPidCandidate *pid)
void SetSimulation(Bool_t sim)
Float_t mdtLayerPos[3][20]
TClonesArray * fTrack2
PndTrackID TCA.
virtual void SetParContainers()
Bool_t GetSttInfo(PndTrack *track, PndPidCandidate *pid)
PndGeoHandling * fGeoH
Bool_t GetFtofInfo(FairTrackParH *helix, PndPidCandidate *pid)
Bool_t GetTofInfo(FairTrackParH *helix, PndPidCandidate *pid)
virtual void Finish()
TClonesArray * fMvdHitsPixel
PndSdsHit TCA for strip.
TClonesArray * fTrackID
PndTrack TCA.
Bool_t GetFscInfo(FairTrackParH *helix, PndPidCandidate *pid)
PndTrack * AddMdtTrack(PndTrack *track)
PndEmcErrorMatrixPar * fEmcErrorMatrixPar
EMC geometry parameters.
void SetMdtMode(Short_t mode)
PndPidCorrPar * fCorrPar
PndFtsHit TCA.
virtual ~PndPidCorrelatorMod()
void SetDrcMode(Short_t mode)
PndPidCandidate * AddChargedCandidate(PndPidCandidate *cand)
TFile * r
Geane propagator.
void SetVerbose(Int_t verbose)
void SetMixMode(Bool_t mix)
void SetFast(Bool_t fast)
void SetFtsMode(Short_t mode)
PndRecoKalmanFit * fFitter
Object to retrieve MVD geometry.
FairGeanePro * fGeanePropagator
Refitter for MDT tracks.
void ConstructChargedCandidate()
Class to access the naming information of the MVD.
void SetGeanePro(Bool_t gea=kTRUE)
void SetDebugFilename(TString filename)
PndPidCandidate * AddNeutralCandidate(PndPidCandidate *cand)
Float_t mdtIronThickness[3][20]
PndEmcAbsClusterCalibrator * fEmcCalibrator
FTS geometry parameters.
void SetFtofMode(Short_t mode)
void SetEmcMode(Short_t mode)
void ConstructNeutralCandidate()
TClonesArray * fMdtTrk
PndMdtHit TCA.
map< Int_t, vector< Int_t > > mapMdtForward
void SetMvdMode(Short_t mode)
map< Int_t, Double_t > fClusterQ
virtual void Exec(Option_t *option)
TClonesArray * fMdtPoint
PndEmcDigi TCA.
TClonesArray * fEmcDigi
PndEmcBump TCA.
Bool_t GetEmcInfo(FairTrackParH *helix, PndPidCandidate *pid)
void SetFlagCut(Bool_t opt=kTRUE)
TClonesArray * fFtofPoint
PndFtofHit TCA.
Bool_t GetDrcInfo(FairTrackParH *helix, PndPidCandidate *pid)
void SetInputIDBranch2(TString branch)
Bool_t GetFtsInfo(PndTrack *track, PndPidCandidate *pid)
map< Int_t, vector< Int_t > > mapMdtEndcap
TClonesArray * fTofPoint
PndTofHit TCA.
Bool_t GetDskInfo(FairTrackParH *helix, PndPidCandidate *pid)
map< Int_t, vector< Int_t > > mapMdtBarrel
TClonesArray * fDrcPoint
PndMdtTrk TCA.
TClonesArray * fFtsHit
PndSttHit TCA.
void SetTofMode(Short_t mode)
Bool_t GetMdt2Info(FairTrackParH *helix, PndPidCandidate *pid)
void SetPidHyp(Int_t pid)
void SetCorrErrProp(Bool_t err)
void SetInputBranch(TString branch)
TClonesArray * fTrackID2
2nd PndTrack TCA
TClonesArray * fEmcBump
PndEmcCluster TCA.
PndGeoFtsPar * fFtsParameters
STT geometry parameters.
TClonesArray * fPidNeutralCand
PndPidCandidate TCA for charged particles.
TClonesArray * fTofHit
PndSdsHit TCA for pixel.
TClonesArray * fMdtHit
PndMdtPoint TCA.
TClonesArray * fDskParticle
PndDrcHit TCA.
Bool_t GetGemInfo(PndTrack *track, PndPidCandidate *pid)
void SetIdeal(Bool_t id)
Calculate Error Matrix for the given EmcCluster with parametrization defined by the given parameter P...
void SetInputIDBranch(TString branch)
Bool_t GetTrackInfo(PndTrack *track, PndPidCandidate *pid)
PndGeoSttPar * fSttParameters
EMC error matrix.
void SetBackPropagate(Bool_t opt=kTRUE)
void SetOutputBranch(TString branch)
PndEmcGeoPar * fEmcGeoPar
Correlation parameters.
void SetMdtRefit(Bool_t mdt)
TClonesArray * fPidChargedCand
2nd PndTrackID TCA
void SetDebugMode(Bool_t debug)
TClonesArray * fMdtTrack
PndPidCandidate TCA for neutral particles.
Bool_t GetMvdInfo(PndTrack *track, PndPidCandidate *pid)