28 #include "TClonesArray.h"
29 #include "TParticlePDG.h"
33 #include "FairRootManager.h"
34 #include "FairGeanePro.h"
35 #include "FairRunAna.h"
36 #include "FairRuntimeDb.h"
40 fTrackOutBranchName(
""), fMvdBranchName(
""), fCentralTrackerBranchName(
""),
41 fFitter(), fDafFitter(), fPersistence(kTRUE),
42 fUseGeane(kTRUE), fIdealHyp(kFALSE), fDaf(kFALSE),
43 fPropagateToIP(kFALSE), fPropagateDistance(2.
f), fPerpPlane(kFALSE),fTrackRep(0),
44 fNumIt(1), fPDGHyp(211), fBusyCut(20)
64 std::cout <<
" -I- PndRecoKalmanTask:Init :: Using GeaneTrackRep" << std::endl;
67 std::cout <<
" -I- PndRecoKalmanTask:Init :: Using RKTrackRep" << std::endl;
70 Error(
"PndRecoKalmanTask::Init",
"Not existing Track Representation!!");
100 FairRootManager* ioman= FairRootManager::Instance();
104 Error(
"PndRecoKalmanTask::Init",
"RootManager not instantiated!");
112 Error(
"PndRecoKalmanTask::Init",
"track-array not found!");
117 pdg =
new TDatabasePDG();
128 Error(
"PndRecoKalmanTask::Init",
"MCTrack array not found! It is not possible to run ideal particle hypothesis");
160 FairRuntimeDb*
rtdb = FairRunAna::Instance()->GetRuntimeDb();
161 rtdb->getContainer(
"PndGeoSttPar");
162 rtdb->getContainer(
"PndGeoFtsPar");
167 std::cout <<
"PndRecoKalmanTask::Exec" << std::endl;
175 std::cout <<
" -I- PndRecoKalmanTask: contains " << ntracks
176 <<
" Tracks." << std::endl;
180 std::cout <<
" -I- PndRecoKalmanTask::Exec: ntracks=" << ntracks
181 <<
" Evil Event! skipping" << std::endl;
185 for (Int_t itr = 0; itr < ntracks; ++itr) {
187 std::cout <<
"starting track" << itr << std::endl;
190 Int_t size = trkRef.GetEntriesFast();
197 if (prefitTrack->GetSortedMCTracks().size() > 0) {
198 FairLink mcTrackId = prefitTrack->GetSortedMCTracks().at(0);
199 if (mcTrackId.GetType() == FairRootManager::Instance()->GetBranchId(
"MCTrack")) {
202 PDGCode = 211 * fCharge;
203 std::cout <<
"-I- PndRecoKalmanTask::Exec: MCTrack #"
205 <<
" is not existing!! Trying with pion hyp"
210 if (PDGCode >= 100000000) {
211 PDGCode = 211 * fCharge;
213 <<
"-I- PndRecoKalmanTask::Exec: Track is an ion (PDGCode>100000000)! Trying with pion hyp"
215 }
else if ((((TParticlePDG*)
pdg->GetParticle(PDGCode))->Charge())
217 PDGCode = 211 * fCharge;
219 <<
"-E- PndRecoKalmanTask::Exec: Track MC charge is 0!!!! Trying with pion hyp"
224 PDGCode = 211 * fCharge;
226 <<
"-E- PndRecoKalmanTask::Exec: No MCTrack index in PndTrackID!! Trying with pion hyp"
231 PDGCode = 211 * fCharge;
233 <<
"-E- PndRecoKalmanTask::Exec: No Correlated MCTrack id in PndTrackID!! Trying with pion hyp"
246 fitTrack =
fFitter->
Fit(prefitTrack, PDGCode);
248 fitTrack = prefitTrack;
251 <<
"-I- PndRecoKalmanTask::Exec: Kalman cannot run on this track because of the bad MonteCarlo PDG code"
265 std::cout <<
"Fitting done" << std::endl;
273 if(h.BeginsWith(
"e") || h.BeginsWith(
"E")) {
275 }
else if(h.BeginsWith(
"m") || h.BeginsWith(
"M")) {
277 }
else if(h.BeginsWith(
"pi") || h.BeginsWith(
"Pi") || h.BeginsWith(
"PI")) {
279 }
else if(h.BeginsWith(
"K") || h.BeginsWith(
"K")) {
281 }
else if(h.BeginsWith(
"p") || h.BeginsWith(
"P") || h.BeginsWith(
"antip")) {
284 std::cout <<
"-I- PndRecoKalmanTask::SetParticleHypo: Not recognised PID set -> Using default PION hypothesis" << std::endl;
309 std::cout <<
"-I- PndRecoKalmanTask::SetParticleHypo: Not recognised PID set -> Using default PION hypothesis" << std::endl;
PndRecoKalmanTask(const char *name="Genfit", Int_t iVerbose=0)
TString fTrackInBranchName
Output TCA for track.
void SetMvdBranchName(const TString &name)
TClonesArray * fTrackArray
void SetTrackRep(Int_t num)
void SetPropagateToIP(Bool_t opt=kTRUE)
void SetTrackRep(Int_t num)
Short_t fTrackRep
Flag to use as initial plane the one perpendicular to the track (kFALSE)
virtual void Exec(Option_t *opt)
void SetPersistency(Bool_t val=kTRUE)
virtual InitStatus Init()
void SetParticleHypo(TString s)
TString fCentralTrackerBranchName
Name of the TCA for MVD.
void SetPropagateDistance(Float_t opt=-1.f)
void SetMvdBranchName(const TString &name)
Bool_t fIdealHyp
Flag to set on smoothing (not used)
void SetPerpPlane(Bool_t opt=kTRUE)
Int_t fPDGHyp
Number of iterations.
Bool_t fPerpPlane
Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.
Bool_t fPropagateToIP
Flag to use Deterministic Annealing.
PndTrackCand GetTrackCand()
Int_t fNumIt
(0) GeaneTrackRep, 1 RKTrackRep
PndRecoKalmanFit * fFitter
Name of the TCA for central tracker.
void SetPerpPlane(Bool_t opt=kTRUE)
FairTrackParP GetParamLast()
TClonesArray * fFitTrackArray
Input TCA for PndMCTrack.
PndRecoDafFit * fDafFitter
Bool_t fDaf
Flag to use MC particle hypothesis.
void SetGeane(Bool_t opt=kTRUE)
TString fMvdBranchName
Name of the output TCA.
PndTrack * Fit(PndTrack *tBefore, Int_t PDG)
void SetVerbose(Int_t verb)
void SetCentralTrackerBranchName(const TString &name)
TString fTrackOutBranchName
Name of the input TCA.
void SetVerbose(Int_t verb)
void SetCentralTrackerBranchName(const TString &name)
PndTrack * Fit(PndTrack *tBefore, Int_t PDG)
void SetNumIterations(Int_t num)
void SetGeane(Bool_t opt=kTRUE)
Float_t fPropagateDistance
Flag to propagate the parameters to the interaction point (kTRUE)
TClonesArray * fMCTrackArray
Input TCA for PndTrack.
Int_t fBusyCut
Hypothesis.
FairTrackParP GetParamFirst()
void SetPropagateToIP(Bool_t opt=kTRUE)
Bool_t fUseGeane
Persistence.