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