-
Oleksii Lubynets authoredOleksii Lubynets authored
CbmKFParticleFinder.h 3.94 KiB
//-----------------------------------------------------------
//-----------------------------------------------------------
#ifndef CbmKFParticleFinder_HH
#define CbmKFParticleFinder_HH
#include "CbmStsTrack.h"
#include "FairTask.h"
#include "TString.h"
#include <vector>
class CbmKFParticleFinderPID;
class KFParticleTopoReconstructor;
class TClonesArray;
class KFParticleFinder;
class KFPTrackVector;
class CbmMCEventList;
class CbmMCDataArray;
class CbmVertex;
struct KFFieldVector {
float fField[10];
};
class CbmKFParticleFinder : public FairTask {
public:
// Constructors/Destructors ---------
CbmKFParticleFinder(const char* name = "CbmKFParticleFinder",
Int_t iVerbose = 0);
~CbmKFParticleFinder();
void UseMCPV() { fPVFindMode = 0; }
void ReconstructSinglePV() { fPVFindMode = 1; }
void RconstructMultiplePV() { fPVFindMode = 2; }
void UseReconstructedPV() { fPVFindMode = 3; }
void SetStsTrackBranchName(const TString& name) {
fStsTrackBranchName = name;
}
virtual InitStatus Init();
virtual void Exec(Option_t* opt);
virtual void Finish();
const KFParticleTopoReconstructor* GetTopoReconstructor() const {
return fTopoReconstructor;
}
void SetPIDInformation(CbmKFParticleFinderPID* pid) { fPID = pid; }
// set cuts
void SetPrimaryProbCut(float prob);
// Set SE analysis
void SetSuperEventAnalysis();
//KF Particle Finder cuts
void SetMaxDistanceBetweenParticlesCut(float cut);
void SetLCut(float cut);
void SetChiPrimaryCut2D(float cut);
void SetChi2Cut2D(float cut);
void SetLdLCut2D(float cut);
void SetLdLCutXiOmega(float cut);
void SetChi2TopoCutXiOmega(float cut);
void SetChi2CutXiOmega(float cut);
void SetChi2TopoCutResonances(float cut);
void SetChi2CutResonances(float cut);
void SetPtCutLMVM(float cut);
void SetPCutLMVM(float cut);
void SetPtCutJPsi(float cut);
void SetPtCutCharm(float cut);
void SetChiPrimaryCutCharm(float cut);
void SetLdLCutCharmManybodyDecays(float cut);
void SetChi2TopoCutCharmManybodyDecays(float cut);
void SetChi2CutCharmManybodyDecays(float cut);
void SetLdLCutCharm2D(float cut);
void SetChi2TopoCutCharm2D(float cut);
void SetChi2CutCharm2D(float cut);
//Add decay to the reconstruction list. By default, if list is empty - all decays are reconstructed.
void AddDecayToReconstructionList(int pdg);
private:
double InversedChi2Prob(double p, int ndf) const;
void FillKFPTrackVector(KFPTrackVector* tracks,
const std::vector<CbmStsTrack>& vRTracks,
const std::vector<KFFieldVector>& vField,
const std::vector<int>& pdg,
const std::vector<int>& trackId,
const std::vector<float>& vChiToPrimVtx,
bool atFirstPoint = 1) const;
const CbmKFParticleFinder& operator=(const CbmKFParticleFinder&);
CbmKFParticleFinder(const CbmKFParticleFinder&);
//direct access to the KF Particle Finder object
KFParticleFinder* GetKFParticleFinder();
//names of input branches
TString fStsTrackBranchName; //! Name of the input TCA with reco tracks
//input branches
TClonesArray* fTrackArray;
TClonesArray* fEvents;
CbmMCDataArray* fMCTrackArray; //mc tracks in timeslices
TClonesArray* fMCTrackArrayEvent; //mc tracks in event-by-event mode
CbmMCEventList* fEventList; //mc event list in timeslice
CbmVertex* fCbmPrimVertex; //mc primary vertex
//topology reconstructor
KFParticleTopoReconstructor* fTopoReconstructor;
// KFParticleTopoReconstructor* eventTopoReconstructor;
int fPVFindMode;
//PID information
CbmKFParticleFinderPID* fPID;
//for super event analysis
bool fSuperEventAnalysis;
std::vector<CbmStsTrack> fSETracks;
std::vector<KFFieldVector> fSEField;
std::vector<int> fSEpdg;
std::vector<int> fSETrackId;
std::vector<float> fSEChiPrim;
bool fTimeSliceMode;
ClassDef(CbmKFParticleFinder, 1);
};
#endif