FairRoot/PandaRoot
PndRecoMultiKalmanTask.cxx
Go to the documentation of this file.
1 //-----------------------------------------------------------
2 // File and Version Information:
3 // $Id$
4 //
5 // Description:
6 // Implementation of class PndRecoMultiKalmanTask
7 // see PndRecoMultiKalmanTask.h for details
8 //
9 // Environment:
10 // Software developed for the PANDA Detector at FAIR.
11 //
12 // Author List:
13 // Sebastian Neubert TUM (original author)
14 // Stefano Spataro, UNI Torino
15 //
16 //-----------------------------------------------------------
17 
18 // Panda Headers ----------------------
19 
20 // This Class' Header ------------------
21 #include "PndRecoMultiKalmanTask.h"
22 
23 // C/C++ Headers ----------------------
24 #include <iostream>
25 #include <cmath>
26 
27 // Collaborating Class Headers --------
28 #include "TClonesArray.h"
29 #include "PndTrack.h"
30 #include "FairRootManager.h"
31 #include "FairGeanePro.h"
32 #include "FairRunAna.h"
33 #include "FairRuntimeDb.h"
34 
36  : PndPersistencyTask(name, iVerbose), fTrackInBranchName(""),
37  fTrackOutBranchName(""), fMvdBranchName(""), fCentralTrackerBranchName(""),
38  fFitter(), fPersistence(kTRUE),
39  fUseGeane(kTRUE), fIdealHyp(kFALSE),
40  fPropagateToIP(kFALSE), fPropagateDistance(2.f), fPerpPlane(kFALSE),fTrackRep(0),
41  fNumIt(1), fBusyCut(20)
42 {
43  fFitWithHypo = fithypo;
44  fFitTrackArrayElectron = new TClonesArray("PndTrack");
45  fFitTrackArrayMuon = new TClonesArray("PndTrack");
46  fFitTrackArrayPion = new TClonesArray("PndTrack");
47  fFitTrackArrayKaon = new TClonesArray("PndTrack");
48  fFitTrackArrayProton = new TClonesArray("PndTrack");
49  fFitter = new PndRecoKalmanFit();
50  SetPersistency(kTRUE);
51 }
52 
53 
55 {
56 }
57 
58 InitStatus
60 {
61 
71  if (!fFitter->Init()) return kFATAL;
72 
73  //Get ROOT Manager
74  FairRootManager* ioman= FairRootManager::Instance();
75 
76  if(ioman==0)
77  {
78  Error("PndRecoMultiKalmanTask::Init","RootManager not instantiated!");
79  return kERROR;
80  }
81 
82  // Get input collection
83  fTrackArray=(TClonesArray*) ioman->GetObject(fTrackInBranchName);
84  if(fTrackArray==0)
85  {
86  Error("PndRecoMultiKalmanTask::Init","track-array not found!");
87  return kERROR;
88  }
89  unsigned int nfits = 0;
90  fHypoFlag[0] = false;
91  fHypoFlag[1] = false;
92  fHypoFlag[2] = false;
93  fHypoFlag[3] = false;
94  fHypoFlag[4] = false;
95  std::cout<<fFitWithHypo<<std::endl;
96  if (fFitWithHypo.Contains("electron")) {
97  nfits++;
98  fHypoFlag[0] = true;
99  ioman->Register(fTrackOutBranchName+"Electron","Gen", fFitTrackArrayElectron, GetPersistency());
100  }
101  if (fFitWithHypo.Contains("muon")) {
102  nfits++;
103  fHypoFlag[1] = true;
104  ioman->Register(fTrackOutBranchName+"Muon", "Gen", fFitTrackArrayMuon, GetPersistency());
105  }
106  if (fFitWithHypo.Contains("pion")) {
107  nfits++;
108  fHypoFlag[2] = true;
109  ioman->Register(fTrackOutBranchName+"Pion", "Gen", fFitTrackArrayPion, GetPersistency());
110  }
111  if (fFitWithHypo.Contains("kaon")) {
112  nfits++;
113  fHypoFlag[3] = true;
114  ioman->Register(fTrackOutBranchName+"Kaon", "Gen", fFitTrackArrayKaon, GetPersistency());
115  }
116  if (fFitWithHypo.Contains("proton")) {
117  nfits++;
118  fHypoFlag[4] = true;
119  ioman->Register(fTrackOutBranchName+"Proton", "Gen", fFitTrackArrayProton, GetPersistency());
120  }
121  if (nfits == 0) {
122  std::cout<<" -I- PndRecoMultiKalmanTask::Init: No hypotheses given, running kalman filter with all 5 hypothesis" << std::endl;
123  fHypoFlag[0] = true;
124  fHypoFlag[1] = true;
125  fHypoFlag[2] = true;
126  fHypoFlag[3] = true;
127  fHypoFlag[4] = true;
128  ioman->Register(fTrackOutBranchName+"Electron","Gen", fFitTrackArrayElectron, GetPersistency());
129  ioman->Register(fTrackOutBranchName+"Muon", "Gen", fFitTrackArrayMuon, GetPersistency());
130  ioman->Register(fTrackOutBranchName+"Pion", "Gen", fFitTrackArrayPion, GetPersistency());
131  ioman->Register(fTrackOutBranchName+"Kaon", "Gen", fFitTrackArrayKaon, GetPersistency());
132  ioman->Register(fTrackOutBranchName+"Proton", "Gen", fFitTrackArrayProton, GetPersistency());
133  }
134  return kSUCCESS;
135 }
136 
138 {
139  FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
140  fSttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
141  fFtsParameters = (PndGeoFtsPar*) rtdb->getContainer("PndGeoFtsPar");
142 }
143 
145 {
146  if (fVerbose>0) std::cout<<"PndRecoMultiKalmanTask::Exec"<<std::endl;
147 
148  fFitTrackArrayElectron->Clear();
149  fFitTrackArrayMuon->Clear();
150  fFitTrackArrayPion->Clear();
151  fFitTrackArrayKaon->Clear();
152  fFitTrackArrayProton->Clear();
153 
154  Int_t ntracks=fTrackArray->GetEntriesFast();
155 
156  // Detailed output
157  if (fVerbose>1) std::cout << " -I- PndRecoMultiKalmanTask: contains " << ntracks << " Tracks."<< std::endl;
158 
159  // Cut too busy events TODO
160  if(ntracks>fBusyCut)
161  {
162  std::cout<<" -I- PndRecoMultiKalmanTask::Exec: ntracks=" << ntracks << " Evil Event! skipping" << std::endl;
163  return;
164  }
165 
166 
167  for(Int_t itr=0; itr<ntracks; ++itr)
168  {
169  if (fVerbose>1) std::cout<<"starting track"<<itr<<std::endl;
170  PndTrack *prefitTrack = (PndTrack*)fTrackArray->At(itr);
171  Int_t fCharge= prefitTrack->GetParamFirst().GetQ();
172 
173  if (fHypoFlag[0]) { // Electron
174  Int_t PDGCode = -11*fCharge;
175  PndTrack *fitTrack = new PndTrack();
176  fitTrack = fFitter->Fit(prefitTrack, PDGCode);
177 
178  TClonesArray& trkRef = *fFitTrackArrayElectron;
179  Int_t size = trkRef.GetEntriesFast();
180  new(trkRef[size]) PndTrack(fitTrack->GetParamFirst(), fitTrack->GetParamLast(), fitTrack->GetTrackCand(),
181  fitTrack->GetFlag(), fitTrack->GetChi2(), fitTrack->GetNDF(), fitTrack->GetPidHypo(), itr, kLheTrack);//PndTrack* pndTrack = //[R.K.03/2017] unused variable
182  } // end of electron
183 
184  if (fHypoFlag[1]) { // Muon
185  Int_t PDGCode = -13*fCharge;
186  PndTrack *fitTrack = new PndTrack();
187  fitTrack = fFitter->Fit(prefitTrack, PDGCode);
188 
189  TClonesArray& trkRef = *fFitTrackArrayMuon;
190  Int_t size = trkRef.GetEntriesFast();
191  new(trkRef[size]) PndTrack(fitTrack->GetParamFirst(), fitTrack->GetParamLast(), fitTrack->GetTrackCand(),
192  fitTrack->GetFlag(), fitTrack->GetChi2(), fitTrack->GetNDF(), fitTrack->GetPidHypo(), itr, kLheTrack);//PndTrack* pndTrack = //[R.K.03/2017] unused variable
193  } // end of Muon
194 
195  if (fHypoFlag[2]) { // Pion
196  Int_t PDGCode = 211*fCharge;
197  PndTrack *fitTrack = new PndTrack();
198  fitTrack = fFitter->Fit(prefitTrack, PDGCode);
199 
200  TClonesArray& trkRef = *fFitTrackArrayPion;
201  Int_t size = trkRef.GetEntriesFast();
202  new(trkRef[size]) PndTrack(fitTrack->GetParamFirst(), fitTrack->GetParamLast(), fitTrack->GetTrackCand(),
203  fitTrack->GetFlag(), fitTrack->GetChi2(), fitTrack->GetNDF(), fitTrack->GetPidHypo(), itr, kLheTrack);//PndTrack* pndTrack = //[R.K.03/2017] unused variable
204  } // end of Pion
205 
206  if (fHypoFlag[3]) { // Kaon
207  Int_t PDGCode = 321*fCharge;
208  PndTrack *fitTrack = new PndTrack();
209  fitTrack = fFitter->Fit(prefitTrack, PDGCode);
210 
211  TClonesArray& trkRef = *fFitTrackArrayKaon;
212  Int_t size = trkRef.GetEntriesFast();
213  new(trkRef[size]) PndTrack(fitTrack->GetParamFirst(), fitTrack->GetParamLast(), fitTrack->GetTrackCand(),
214  fitTrack->GetFlag(), fitTrack->GetChi2(), fitTrack->GetNDF(), fitTrack->GetPidHypo(), itr, kLheTrack);//PndTrack* pndTrack = //[R.K.03/2017] unused variable
215  } // end of Kaon
216 
217  if (fHypoFlag[4]) { // Proton
218  Int_t PDGCode = 2212*fCharge;
219  PndTrack *fitTrack = new PndTrack();
220  fitTrack = fFitter->Fit(prefitTrack, PDGCode);
221 
222  TClonesArray& trkRef = *fFitTrackArrayProton;
223  Int_t size = trkRef.GetEntriesFast();
224  new(trkRef[size]) PndTrack(fitTrack->GetParamFirst(), fitTrack->GetParamLast(), fitTrack->GetTrackCand(),
225  fitTrack->GetFlag(), fitTrack->GetChi2(), fitTrack->GetNDF(), fitTrack->GetPidHypo(), itr, kLheTrack);//PndTrack* pndTrack = //[R.K.03/2017] unused variable
226  } // end of Proton
227 
228  } // end of track loop
229 
230  if (fVerbose>0) std::cout<<"Fitting done"<<std::endl;
231 
232  return;
233 }
234 
236 
Float_t fPropagateDistance
Flag to propagate the parameters to the interaction point (kTRUE)
int fVerbose
Definition: poormantracks.C:24
TClonesArray * fFitTrackArrayProton
Output TCA for track.
void SetPropagateToIP(Bool_t opt=kTRUE)
void SetTrackRep(Int_t num)
Bool_t fUseGeane
Persistence.
Int_t GetFlag() const
Definition: PndTrack.h:33
void SetPersistency(Bool_t val=kTRUE)
PndGeoSttPar * fSttParameters
Flag to check which hypotheses to fit with.
Bool_t fPropagateToIP
Flag to use MC particle hypothesis.
void SetPropagateDistance(Float_t opt=-1.f)
PndRecoMultiKalmanTask(const char *name="Genfit", Int_t iVerbose=0, TString fithypo="electron;muon;pion;kaon;proton")
void SetMvdBranchName(const TString &name)
TClonesArray * fFitTrackArrayKaon
Output TCA for track.
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
Int_t GetNDF() const
Definition: PndTrack.h:35
void SetPerpPlane(Bool_t opt=kTRUE)
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
Bool_t fHypoFlag[5]
Flag to set on smoothing.
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
TFile * f
Definition: bump_analys.C:12
TString fCentralTrackerBranchName
Name of the TCA for MVD.
TString fTrackOutBranchName
Name of the input TCA.
void SetGeane(Bool_t opt=kTRUE)
Int_t fNumIt
(0) GeaneTrackRep, 1 RKTrackRep
TString name
TClonesArray * fFitTrackArrayMuon
Output TCA for track.
TClonesArray * fFitTrackArrayElectron
Short_t fTrackRep
Flag to use as initial plane the one perpendicular to the track (kFALSE)
void SetVerbose(Int_t verb)
TString fTrackInBranchName
Output TCA for track.
void SetCentralTrackerBranchName(const TString &name)
Double_t GetChi2() const
Definition: PndTrack.h:34
Int_t GetPidHypo() const
Definition: PndTrack.h:32
ClassImp(PndAnaContFact)
PndTrack * Fit(PndTrack *tBefore, Int_t PDG)
Int_t iVerbose
void SetNumIterations(Int_t num)
Bool_t fPerpPlane
Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.
virtual void Exec(Option_t *opt)
Int_t fBusyCut
Number of iterations.
TClonesArray * fFitTrackArrayPion
Output TCA for track.
TString fMvdBranchName
Name of the output TCA.
TString fFitWithHypo
Name of the TCA for central tracker.
PndGeoFtsPar * fFtsParameters
STT params.
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49