/** * PndIdealTrackFinder.h * * \brief Ideal track finder for all types of tracking detectors * \detailed The PndIdealTrackFinder combines all hits in given branches into PndTrackCand and calculates the PndTrack based on MC information * \author Tobias Stockmanns * \date Apr 12, 2010 * */ #ifndef PndIdealTrackFinder_H_ #define PndIdealTrackFinder_H_ // framework includes #include "FairTask.h" #include "FairMCPoint.h" #include "PndTrackCand.h" #include "PndTrackFunctor.h" #include "TClonesArray.h" #include "TDatabasePDG.h" #include class PndIdealTrackFinder : public FairTask { public: PndIdealTrackFinder(); virtual ~PndIdealTrackFinder(); /** Virtual method Init **/ // virtual void SetParContainers(); virtual InitStatus Init(); virtual void AddBranchName(TString name){ fBranchNames.push_back(name);} ///< Search for tracks only in given branches. If no BranchName is given all tracking detectors are taken virtual void AddBranchName(TString name, TString mcName){ fBranchNames.push_back(name); fPointBranchMap[name] = mcName;} ///< Search for tracks only in given branches. If no BranchName is given all tracking detectors are taken virtual void SetOutputBranchName(TString name){ fOutBranchName = name; }; /** Virtual method Exec **/ virtual void Exec(Option_t* opt); // virtual void Finish(); // taken from sttmvdtracking/PndSttMvdGemTrackingIdeal.h void SetMomentumSmearing(Double_t sigmax = -1.,Double_t sigmay = -1.,Double_t sigmaz = -1.) { fMomSigma.SetXYZ(fabs(sigmax),fabs(sigmay),fabs(sigmaz)); fRelative=kFALSE; }; // in GeV void SetRelativeMomentumSmearing(Double_t dpop = -1.) { fDPoP=fabs(dpop); fRelative=kTRUE; }; // in GeV void SetVertexSmearing(Double_t sigmax = -1.,Double_t sigmay = -1.,Double_t sigmaz = -1.) { fVtxSigma.SetXYZ(fabs(sigmax),fabs(sigmay),fabs(sigmaz)); }; // in cm void SetTrackingEfficiency(Double_t eff = 1.) { fEfficiency=eff; }; void SetTrackSelector(TString selector){ ///< The track selector decides if a track is taken or discarded. You can set them via a string. Valid strings can be found in PndTrackFunctor.h fTrackSelector = PndTrackFunctor::make_PndTrackFunctor(selector.Data()); } void SetPersistence(Bool_t persistence) { fPersistence = persistence; } protected: virtual void CreateTrackCands(); virtual void CreateTracks(); virtual void FilterTrackCands(); virtual FairMCPoint* GetFairMCPoint(TString hitBranch, FairMultiLinkedData_Interface* links, FairMultiLinkedData& array); // taken from sttmvdtracking/PndSttMvdGemTrackingIdeal.h virtual void SmearVector(TVector3 &vec, const TVector3 &sigma); protected: TString fOutBranchName; TClonesArray* fTrackCand; TClonesArray* fTrack; TClonesArray* fMCTrack; PndTrackFunctor* fTrackSelector; std::map fBranchMap; std::vector fBranchNames; std::map fTrackCandMap; std::map fFirstPointMap; std::map fLastPointMap; std::map fPointBranchMap; TDatabasePDG *fPdg; //!