#ifndef PNDMVDRIEMANNVERTEXFINDERTASK_H_ #define PNDMVDRIEMANNVERTEXFINDERTASK_H_ #include #include "FairTask.h" //#include "PndSdsHit.h" #include "TH1F.h" #include "PndTrackCand.h" #include "PndMCTrack.h" #include "TString.h" #include "stdio.h" class PndMvdRiemannVertexFinderTask : public FairTask { public: PndMvdRiemannVertexFinderTask(); virtual ~PndMvdRiemannVertexFinderTask(); PndMvdRiemannVertexFinderTask(const PndMvdRiemannVertexFinderTask& o) : delta(o.delta), wrongV(o.wrongV), eff(o.eff), ghosts(o.ghosts), fHitBranch(o.fHitBranch), fHitBranch2(o.fHitBranch2), fTrackBranch(o.fTrackBranch), fIdealTrackCandBranch(o.fIdealTrackCandBranch), fMCTrackBranch(o.fMCTrackBranch), fEventNr(o.fEventNr), fVerbose(o.fVerbose), fVertexCut(o.fVertexCut), fHitArray(o.fHitArray), fHitArray2(o.fHitArray2), fTrackCandArray(o.fTrackCandArray), fTrackArray(o.fTrackArray), fIdealTrackCandArray(o.fIdealTrackCandArray), fMCTrackArray(o.fMCTrackArray), fVertex(o.fVertex), fMCVertex(o.fMCVertex) {}; PndMvdRiemannVertexFinderTask& operator=(const PndMvdRiemannVertexFinderTask& o) { delta=o.delta; wrongV=o.wrongV; eff=o.eff; ghosts=o.ghosts; fHitBranch=o.fHitBranch; fHitBranch2=o.fHitBranch2; fTrackBranch=o.fTrackBranch; fIdealTrackCandBranch=o.fIdealTrackCandBranch; fMCTrackBranch=o.fMCTrackBranch; fEventNr=o.fEventNr; fVerbose=o.fVerbose; fVertexCut=o.fVertexCut; fHitArray=o.fHitArray; fHitArray2=o.fHitArray2; fTrackCandArray=o.fTrackCandArray; fTrackArray=o.fTrackArray; fIdealTrackCandArray=o.fIdealTrackCandArray; fMCTrackArray=o.fMCTrackArray; fVertex=o.fVertex; fMCVertex=o.fMCVertex; return *this; }; /** Virtual method Init **/ virtual void SetParContainers(); virtual InitStatus Init(); virtual InitStatus ReInit(); /** Virtual method Exec **/ virtual void Exec(Option_t* opt); virtual void FinishEvent(); //void PrintResult(); // not implemented void SetVerbose(Int_t verbose){ fVerbose = verbose;}; void SetVertexCut(double cut){ fVertexCut =cut;}; TH1F* delta; TH1F* wrongV; std::pair eff; std::pair ghosts; private: TString fHitBranch; TString fHitBranch2; TString fTrackBranch; TString fIdealTrackCandBranch; TString fMCTrackBranch; int fEventNr; int fVerbose; double fVertexCut; TClonesArray* fHitArray; TClonesArray* fHitArray2; TClonesArray* fTrackCandArray; // TClonesArray* fRiemannTrackArray; TClonesArray* fTrackArray; TClonesArray* fIdealTrackCandArray; TClonesArray* fMCTrackArray; TClonesArray* fVertex; TClonesArray* fMCVertex; bool CheckRecoTrack(PndTrackCand *cand,PndMCTrack* myTrack); bool CheckVertex(std::vector Combination, std::vector< std::pair > PairCand); bool CheckTwoCands(int first, int second); int FoundCandInMCCands(int candN); void refit(std::vector& CheckedCand); void FindVertex(std::vector CheckedCand,std::vector< std::pair >& PairCand,std::vector< std::pair >& TrueMCCand, std::vector< std::pair >& FalseMCCand,std::vector< std::pair >& MCCand, int& MaxIndex); void CalcEfficiency(std::vector< std::pair > TrueMCCand, std::vector< std::pair > FalseMCCand,std::vector< std::pair > MCCand); void Register(); void Reset(); void ProduceHits(); ClassDef(PndMvdRiemannVertexFinderTask,1); }; #endif /*PndMvdRiemannVertexFinderTask_H_*/