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(),
42 fUseGeane(kTRUE), fIdealHyp(kFALSE), fDaf(kFALSE),
43 fPropagateToIP(kFALSE), fPropagateDistance(2.
f), fPerpPlane(kFALSE),
44 fNumIt(1), fPDGHyp(-13), fBusyCut(20)
62 std::cout <<
" -I- PndRecoKalmanTask2:Init :: Using RKTrackRep" << std::endl;
90 FairRootManager* ioman= FairRootManager::Instance();
94 Error(
"PndRecoKalmanTask2::Init",
"RootManager not instantiated!");
102 Error(
"PndRecoKalmanTask2::Init",
"track-array not found!");
107 pdg =
new TDatabasePDG();
118 Error(
"PndRecoKalmanTask2::Init",
"MCTrack array not found! It is not possible to run ideal particle hypothesis");
129 FairRuntimeDb*
rtdb = FairRunAna::Instance()->GetRuntimeDb();
130 rtdb->getContainer(
"PndGeoSttPar");
131 rtdb->getContainer(
"PndGeoFtsPar");
136 std::cout <<
"PndRecoKalmanTask2::Exec " << FairRootManager::Instance()->GetEntryNr() << std::endl;
144 std::cout <<
" -I- PndRecoKalmanTask2: contains " << ntracks
145 <<
" Tracks." << std::endl;
149 std::cout <<
" -I- PndRecoKalmanTask2::Exec: ntracks=" << ntracks
150 <<
" Evil Event! skipping" << std::endl;
154 for (Int_t itr = 0; itr < ntracks; ++itr) {
156 std::cout <<
"starting track" << itr << std::endl;
159 Int_t size = trkRef.GetEntriesFast();
165 std::vector<FairLink> mcTrackLinks = prefitTrack->GetSortedMCTracks();
167 if (mcTrackLinks.size() > 0) {
168 Int_t mcTrackId = mcTrackLinks[0].GetIndex();
169 if (mcTrackId != -1) {
173 PDGCode = 211 * fCharge;
174 std::cout <<
"-I- PndRecoKalmanTask2::Exec: MCTrack #"
176 <<
" is not existing!! Trying with pion hyp"
181 if (PDGCode >= 100000000) {
182 PDGCode = 211 * fCharge;
184 <<
"-I- PndRecoKalmanTask2::Exec: Track is an ion (PDGCode>100000000)! Trying with pion hyp"
186 }
else if ((((TParticlePDG*)
pdg->GetParticle(PDGCode))->Charge())
188 PDGCode = 211 * fCharge;
190 <<
"-E- PndRecoKalmanTask2::Exec: Track MC charge is 0!!!! Trying with pion hyp"
195 PDGCode = 211 * fCharge;
197 <<
"-E- PndRecoKalmanTask2::Exec: No MCTrack index in PndTrackID!! Trying with pion hyp"
202 PDGCode = 211 * fCharge;
204 <<
"-E- PndRecoKalmanTask2::Exec: No Correlated MCTrack id in PndTrackID!! Trying with pion hyp"
218 fitTrack = *fitTrackPointer;
221 fitTrackPointer = (
fFitter->
Fit(prefitTrack, PDGCode));
222 fitTrack = *fitTrackPointer;
225 fitTrack = *prefitTrack;
229 <<
"-I- PndRecoKalmanTask2::Exec: Kalman cannot run on this track because of the bad MonteCarlo PDG code"
244 std::cout <<
"Fitting done" << std::endl;
252 if(h.BeginsWith(
"e") || h.BeginsWith(
"E")){
254 }
else if(h.BeginsWith(
"m") || h.BeginsWith(
"M")){
256 }
else if(h.BeginsWith(
"pi") || h.BeginsWith(
"Pi") || h.BeginsWith(
"PI")){
258 }
else if(h.BeginsWith(
"K") || h.BeginsWith(
"K")){
260 }
else if(h.BeginsWith(
"p") || h.BeginsWith(
"P") || h.BeginsWith(
"antip")){
263 std::cout <<
"-I- PndRecoKalmanTask2::SetParticleHypo: Not recognised PID set -> Using default MUON hypothesis" << std::endl;
288 std::cout <<
"-I- PndRecoKalmanTask2::SetParticleHypo: Not recognised PID set -> Using default MUON hypothesis" << std::endl;
PndRecoDafFit2 * fDafFitter
Standard Kalman Filter class.
void SetGeane(Bool_t opt=kTRUE)
TString fTrackInBranchName
Output TCA for track.
void SetNumIterations(Int_t num)
TClonesArray * fMCTrackArray
Input TCA for PndTrack.
void SetParticleHypo(TString s)
Bool_t fPropagateToIP
Flag to use Deterministic Annealing.
PndTrack * Fit(PndTrack *tBefore, Int_t PDG)
void SetPropagateToIP(Bool_t opt=kTRUE)
TDatabasePDG * pdg
Deterministic Annealing class.
TString fTrackOutBranchName
Name of the input TCA.
Bool_t fPerpPlane
Distance in [cm] to back-propagate the parameters, negative number means no backpropagation.
void SetMvdBranchName(const TString &name)
void SetPersistency(Bool_t val=kTRUE)
TClonesArray * fTrackArray
Bool_t fUseGeane
Particle DB.
void SetVerbose(Int_t verb)
void SetMvdBranchName(const TString &name)
Float_t fPropagateDistance
Flag to propagate the parameters to the interaction point (kTRUE)
Int_t fBusyCut
Hypothesis.
Int_t fNumIt
Flag to use as initial plane the one perpendicular to the track (kFALSE)
void SetPropagateToIP(Bool_t opt=kTRUE)
TString fMvdBranchName
Name of the output TCA.
virtual InitStatus Init()
PndTrackCand GetTrackCand()
PndRecoKalmanFit2 * fFitter
Name of the TCA for central tracker.
Bool_t fIdealHyp
Flag to set on smoothing (not used)
PndTrack * Fit(PndTrack *tBefore, Int_t PDG)
PndRecoKalmanTask2(const char *name="Genfit", Int_t iVerbose=0)
FairTrackParP GetParamLast()
void SetCentralTrackerBranchName(const TString &name)
Int_t fPDGHyp
Number of iterations.
void SetVerbose(Int_t verb)
void SetPropagateDistance(Float_t opt=-1.f)
void SetGeane(Bool_t opt=kTRUE)
TClonesArray * fFitTrackArray
Input TCA for PndMCTrack.
virtual void Exec(Option_t *opt)
void SetPerpPlane(Bool_t opt=kTRUE)
void SetCentralTrackerBranchName(const TString &name)
void SetPropagateDistance(Float_t opt=-1.f)
TString fCentralTrackerBranchName
Name of the TCA for MVD.
Bool_t fDaf
Flag to use MC particle hypothesis.
FairTrackParP GetParamFirst()
void SetPerpPlane(Bool_t opt=kTRUE)