FairRoot/PandaRoot
PndRecoMultiKalmanTask2.cxx
Go to the documentation of this file.
1 //-----------------------------------------------------------
2 // File and Version Information:
3 // $Id$
4 //
5 // Description:
6 // Implementation of class PndRecoMultiKalmanTask2
7 // see PndRecoMultiKalmanTask2.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 ------------------
22 #include <iostream>
23 #include <cmath>
24 
25 // Collaborating Class Headers --------
26 #include "TClonesArray.h"
27 #include "PndTrack.h"
28 #include "FairRootManager.h"
29 #include "FairGeanePro.h"
30 #include "FairRunAna.h"
31 #include "FairRuntimeDb.h"
32 
34  : PndPersistencyTask(name, iVerbose)
35 {
36  fTrackInBranchName = "LheTrack";
37  fTrackOutBranchName = "LheGenTrack";
38  fMvdBranchName = "";
40  fFitTrackArrayElectron = new TClonesArray("PndTrack");
41  fFitTrackArrayMuon = new TClonesArray("PndTrack");
42  fFitTrackArrayPion = new TClonesArray("PndTrack");
43  fFitTrackArrayKaon = new TClonesArray("PndTrack");
44  fFitTrackArrayProton = new TClonesArray("PndTrack");
45  fUseGeane = kTRUE;
46  fNumIt = 1;
47  fFitter = new PndRecoKalmanFit2();
48  SetPersistency(kTRUE);
49 }
50 
51 
53 {
54 }
55 
56 InitStatus
58 {
59 
63  if (!fFitter->Init()) return kFATAL;
64 
65  //Get ROOT Manager
66  FairRootManager* ioman= FairRootManager::Instance();
67 
68  if(ioman==0)
69  {
70  Error("PndRecoMultiKalmanTask2::Init","RootManager not instantiated!");
71  return kERROR;
72  }
73 
74  // Get input collection
75  fTrackArray=(TClonesArray*) ioman->GetObject(fTrackInBranchName);
76  if(fTrackArray==0)
77  {
78  Error("PndRecoMultiKalmanTask2::Init","track-array not found!");
79  return kERROR;
80  }
81 
82  ioman->Register(fTrackOutBranchName+"Electron","Gen", fFitTrackArrayElectron, GetPersistency());
83  ioman->Register(fTrackOutBranchName+"Muon", "Gen", fFitTrackArrayMuon, GetPersistency());
84  ioman->Register(fTrackOutBranchName+"Pion", "Gen", fFitTrackArrayPion, GetPersistency());
85  ioman->Register(fTrackOutBranchName+"Kaon", "Gen", fFitTrackArrayKaon, GetPersistency());
86  ioman->Register(fTrackOutBranchName+"Proton", "Gen", fFitTrackArrayProton, GetPersistency());
87  return kSUCCESS;
88 }
89 
91 {
92  FairRuntimeDb* rtdb = FairRunAna::Instance()->GetRuntimeDb();
93  fSttParameters = (PndGeoSttPar*) rtdb->getContainer("PndGeoSttPar");
94 }
95 
97 {
98  if (fVerbose>0) std::cout<<"PndRecoMultiKalmanTask2::Exec"<<std::endl;
99 
100  fFitTrackArrayElectron->Clear();
101  fFitTrackArrayMuon->Clear();
102  fFitTrackArrayPion->Clear();
103  fFitTrackArrayKaon->Clear();
104  fFitTrackArrayProton->Clear();
105 
106  Int_t ntracks=fTrackArray->GetEntriesFast();
107 
108  // Detailed output
109  if (fVerbose>1) std::cout << " -I- PndRecoMultiKalmanTask2: contains " << ntracks << " Tracks."<< std::endl;
110 
111  // Cut too busy events TODO
112  if(ntracks>20)
113  {
114  std::cout<<" -I- PndRecoMultiKalmanTask2::Exec: ntracks=" << ntracks << " Evil Event! skipping" << std::endl;
115  return;
116  }
117 
118 
119  for (Int_t itr = 0; itr < ntracks; ++itr) {
120  if (fVerbose > 1)
121  std::cout << "starting track" << itr << std::endl;
122  PndTrack *prefitTrack = (PndTrack*) fTrackArray->At(itr);
123  Int_t fCharge = prefitTrack->GetParamFirst().GetQ();
124 
125  { // Electron
126  Int_t PDGCode = -11 * fCharge;
127  PndTrack *fitTrack = fFitter->Fit(prefitTrack, PDGCode);
128 
129  TClonesArray& trkRef = *fFitTrackArrayElectron;
130  Int_t size = trkRef.GetEntriesFast();
131  /*PndTrack* pndTrack =*/ new (trkRef[size]) PndTrack( //[R.K. 9/2018] unused
132  fitTrack->GetParamFirst(), fitTrack->GetParamLast(),
133  fitTrack->GetTrackCand(), fitTrack->GetFlag(),
134  fitTrack->GetChi2(), fitTrack->GetNDF(),
135  fitTrack->GetPidHypo(), itr, kLheTrack);
136  delete(fitTrack);
137  } // end of electron
138 
139  { // Muon
140  Int_t PDGCode = -13 * fCharge;
141  PndTrack *fitTrack = fFitter->Fit(prefitTrack, PDGCode);
142 
143  TClonesArray& trkRef = *fFitTrackArrayMuon;
144  Int_t size = trkRef.GetEntriesFast();
145  /*PndTrack* pndTrack =*/ new (trkRef[size]) PndTrack( //[R.K. 9/2018] unused
146  fitTrack->GetParamFirst(), fitTrack->GetParamLast(),
147  fitTrack->GetTrackCand(), fitTrack->GetFlag(),
148  fitTrack->GetChi2(), fitTrack->GetNDF(),
149  fitTrack->GetPidHypo(), itr, kLheTrack);
150  delete(fitTrack);
151  } // end of Muon
152 
153  { // Pion
154  Int_t PDGCode = 211 * fCharge;
155  PndTrack *fitTrack = fFitter->Fit(prefitTrack, PDGCode);
156 
157  TClonesArray& trkRef = *fFitTrackArrayPion;
158  Int_t size = trkRef.GetEntriesFast();
159  /*PndTrack* pndTrack =*/ new (trkRef[size]) PndTrack( //[R.K. 9/2018] unused
160  fitTrack->GetParamFirst(), fitTrack->GetParamLast(),
161  fitTrack->GetTrackCand(), fitTrack->GetFlag(),
162  fitTrack->GetChi2(), fitTrack->GetNDF(),
163  fitTrack->GetPidHypo(), itr, kLheTrack);
164  delete(fitTrack);
165  } // end of Pion
166 
167  { // Kaon
168  Int_t PDGCode = 321 * fCharge;
169  PndTrack *fitTrack = fFitter->Fit(prefitTrack, PDGCode);
170 
171  TClonesArray& trkRef = *fFitTrackArrayKaon;
172  Int_t size = trkRef.GetEntriesFast();
173  /*PndTrack* pndTrack =*/ new (trkRef[size]) PndTrack( //[R.K. 9/2018] unused
174  fitTrack->GetParamFirst(), fitTrack->GetParamLast(),
175  fitTrack->GetTrackCand(), fitTrack->GetFlag(),
176  fitTrack->GetChi2(), fitTrack->GetNDF(),
177  fitTrack->GetPidHypo(), itr, kLheTrack);
178  delete(fitTrack);
179  } // end of Kaon
180 
181  { // Proton
182  Int_t PDGCode = 2212 * fCharge;
183  PndTrack *fitTrack = fFitter->Fit(prefitTrack, PDGCode);
184 
185  TClonesArray& trkRef = *fFitTrackArrayProton;
186  Int_t size = trkRef.GetEntriesFast();
187  /*PndTrack* pndTrack =*/ new (trkRef[size]) PndTrack( //[R.K. 9/2018] unused
188  fitTrack->GetParamFirst(), fitTrack->GetParamLast(),
189  fitTrack->GetTrackCand(), fitTrack->GetFlag(),
190  fitTrack->GetChi2(), fitTrack->GetNDF(),
191  fitTrack->GetPidHypo(), itr, kLheTrack);
192  delete(fitTrack);
193  } // end of Proton
194 
195  } // end of track loop
196 
197  if (fVerbose > 0)
198  std::cout << "Fitting done" << std::endl;
199 
200  return;
201 }
202 
int fVerbose
Definition: poormantracks.C:24
void SetNumIterations(Int_t num)
TClonesArray * fFitTrackArrayPion
Output TCA for track.
PndGeoSttPar * fSttParameters
Number of iterations.
TString fTrackOutBranchName
Name of the input TCA.
Int_t GetFlag() const
Definition: PndTrack.h:33
void SetMvdBranchName(const TString &name)
TClonesArray * fFitTrackArrayProton
Output TCA for track.
void SetPersistency(Bool_t val=kTRUE)
TString fTrackInBranchName
Output TCA for track.
TString fCentralTrackerBranchName
Name of the TCA for MVD.
PndTrackCand GetTrackCand()
Definition: PndTrack.h:47
PndRecoKalmanFit2 * fFitter
Name of the TCA for central tracker.
Int_t GetNDF() const
Definition: PndTrack.h:35
PndTrack * Fit(PndTrack *tBefore, Int_t PDG)
FairTrackParP GetParamLast()
Definition: PndTrack.h:50
FairRuntimeDb * rtdb
Definition: hit_dirc.C:66
void SetCentralTrackerBranchName(const TString &name)
TString name
Double_t GetChi2() const
Definition: PndTrack.h:34
Int_t fNumIt
Flag to set on smoothing.
TString fMvdBranchName
Name of the output TCA.
Int_t GetPidHypo() const
Definition: PndTrack.h:32
ClassImp(PndAnaContFact)
Int_t iVerbose
TClonesArray * fFitTrackArrayKaon
Output TCA for track.
PndRecoMultiKalmanTask2(const char *name="Genfit", Int_t iVerbose=0)
FairTrackParP GetParamFirst()
Definition: PndTrack.h:49
TClonesArray * fFitTrackArrayMuon
Output TCA for track.
virtual void Exec(Option_t *opt)