9 #include "TClonesArray.h"
10 #include "TParticlePDG.h"
15 #include "FairRootManager.h"
17 #include "FairRuntimeDb.h"
39 fHitBranch(
"MVDHitsPixel"),
40 fHitBranch2(
"MVDHitsStrip"),
41 fTrackBranch(
"MVDRiemannTrackCand"),
42 fIdealTrackCandBranch(
"MVDIdealTrackCand"),
43 fMCTrackBranch(
"MCTrack"),
49 fTrackCandArray(NULL),
51 fIdealTrackCandArray(NULL),
75 InitStatus stat=kSUCCESS;
91 FairRootManager* ioman = FairRootManager::Instance();
95 std::cout <<
"-E- PndMvdRiemannVertexFinderTask::Init: "
96 <<
"RootManager not instantiated!" << std::endl;
103 std::cout <<
"-W- PndMvdRiemannVertexFinderTask::Init: " <<
"No hitArray!" << std::endl;
109 std::cout <<
"-W- PndMvdRiemannVertexFinderTask::Init: " <<
"No hitArray2!" << std::endl;
116 std::cout <<
"-W- PndMvdRiemannVertexFinderTask::Init: " <<
"No tracks!" << std::endl;
122 std::cout <<
"-W- PndMvdRiemannVertexFinderTask::Init: " <<
"No ideal tracks!" << std::endl;
129 std::cout <<
"-W- PndMvdRiemannVertexFinderTask::Init: " <<
"No MC tracks!" << std::endl;
135 delta =
new TH1F(
"delta",
"delta",1000,0,10);
136 wrongV=
new TH1F(
"wrong",
"wrong",1000,0,10);
138 fVertex =
new TClonesArray(
"PndSdsMCPoint");
139 ioman->Register(
"Vertex",
"MVD",
fVertex, kTRUE);
141 fMCVertex =
new TClonesArray(
"PndSdsMCPoint");
142 ioman->Register(
"MCVertex",
"MVD",
fMCVertex, kTRUE);
147 std::cout <<
"-I- PndMvdRiemannVertexFinderTask: Initialisation successfull" << std::endl;
156 Fatal(
"Exec",
"No trackCandArray");
157 std::vector<int> CheckedCand;
162 std::vector< std::pair <int,int> > PairCand;
163 std::vector< std::pair <int,int> > TrueMCCand;
164 std::vector< std::pair <int,int> > FalseMCCand;
165 std::vector< std::pair <int,int> > MCCand;
167 FindVertex(CheckedCand,PairCand,TrueMCCand,FalseMCCand,MCCand ,MaxIndex);
170 std::cout <<
"Done event : " <<
fEventNr++ << std::endl;
173 std::vector< std::pair <int,int> > FalseMCCand,std::vector< std::pair <int,int> > MCCand)
176 for(
unsigned int i=0;
i<MCCand.size();
i++){
177 int MCfirst=MCCand[
i].first;
178 int MCsecond=MCCand[
i].second;
179 for(
unsigned int j=0;j<TrueMCCand.size();j++){
180 int first=TrueMCCand[j].first;
181 int second=TrueMCCand[j].second;
182 if ((MCfirst==first && MCsecond==second) or (MCfirst==second && MCsecond==first)){
189 eff.second+=MCCand.size();
190 ghosts.first+=FalseMCCand.size();
191 ghosts.second+=MCCand.size();
198 std::vector< std::pair <int,int> >& FalseMCCand, std::vector< std::pair <int,int> >& MCCand ,
int& MaxIndex)
209 pair <int,int> Pair(i,j);
210 PairCand.push_back(Pair);
211 if (j>MaxIndex) MaxIndex=j;
230 pair <int,int> Pair2(c1,c2);
231 TrueMCCand.push_back(Pair2);
236 pair <int,int> Pair3(c1,c2);
237 FalseMCCand.push_back(Pair3);
253 pair <int,int> Pair(
i,j);
254 MCCand.push_back(Pair);
271 unsigned int detId,hitId;
273 for(
unsigned int j=0;j<Cand->
GetNHits();j++){
278 if ((
int)detId==FairRootManager::Instance()->GetBranchId(
fHitBranch))
280 else if ((
int)detId==FairRootManager::Instance()->GetBranchId(
fHitBranch2))
285 hit.
setXYZ(point->GetX(),point->GetY(),point->GetZ());
286 hit.
setDXYZ(point->GetDx(),point->GetDy(),point->GetDz());
295 CheckedCand.push_back(
i);
297 std::cout<<
"--------------------------------------------------"<<
fTrackCandArray->GetEntriesFast()<<std::endl;
317 for(
unsigned int j=0;j<TestCand->
GetNHits();j++){
321 if(d1==d2 && h1==h2){
326 if ((counter==FoundCand->
GetNHits() && !ZeroPos) or (counter==FoundCand->
GetNHits()-1 && ZeroPos)){
338 for(
unsigned int i=0;
i<PairCand.size();
i++){
339 int ind1=PairCand[
i].first,ind2=PairCand[
i].second;
341 for(
unsigned int j=0;j<Combination.size();j++){
342 if ((ind1==Combination[j]) or (ind2==Combination[j]))
362 for(
unsigned int j=0;j<cand2->
GetNHits();j++){
366 if(d1==d2 && h1==h2){
381 unsigned int detIDi, hitIDi;
382 unsigned int detIDj, hitIDj;
387 if ((
int)detIDi == FairRootManager::Instance()->GetBranchId(
fHitBranch))
389 else if ((
int)detIDi == FairRootManager::Instance()->GetBranchId(
fHitBranch2))
393 for(
unsigned int j=0;j<cand->
GetNHits();j++){
397 if ((
int)detIDj == FairRootManager::Instance()->GetBranchId(
fHitBranch))
399 else if ((
int)detIDj == FairRootManager::Instance()->GetBranchId(
fHitBranch2))
403 if ((pointI!=0) && (pointJ!=0) && (
i!=j)){
virtual InitStatus ReInit()
TVector3 GetPosition() const
void refit(std::vector< int > &CheckedCand)
TString fIdealTrackCandBranch
bool CheckRecoTrack(PndTrackCand *cand, PndMCTrack *myTrack)
TClonesArray * fTrackCandArray
PndTrackCandHit GetSortedHit(UInt_t i)
std::pair< double, double > eff
void FindVertex(std::vector< int > CheckedCand, std::vector< std::pair< int, int > > &PairCand, std::vector< std::pair< int, int > > &TrueMCCand, std::vector< std::pair< int, int > > &FalseMCCand, std::vector< std::pair< int, int > > &MCCand, int &MaxIndex)
virtual InitStatus Init()
std::pair< double, double > ghosts
virtual void FinishEvent()
virtual void SetParContainers()
void setDXYZ(double dx, double dy, double dz)
TVector3 fVertex(0., 0., 0.)
PndMvdRiemannVertexFinderTask()
TClonesArray * fMCTrackArray
void SetVertexCut(double cut)
TClonesArray * fIdealTrackCandArray
void setXYZ(double x, double y, double z)
bool CheckTwoCands(int first, int second)
void refit(bool withErrorCalc=true)
virtual ~PndMvdRiemannVertexFinderTask()
friend F32vec4 fabs(const F32vec4 &a)
void CalcEfficiency(std::vector< std::pair< int, int > > TrueMCCand, std::vector< std::pair< int, int > > FalseMCCand, std::vector< std::pair< int, int > > MCCand)
TClonesArray * fTrackArray
int calcIntersection(PndRiemannTrack &track, TVector3 &p1, TVector3 &p2)
int FoundCandInMCCands(int candN)
void szFit(bool withErrorCalc=true)
void addHit(PndRiemannHit &hit)
virtual void Exec(Option_t *opt)
TVector3 GetStartVertex() const
Int_t GetMotherID() const
bool CheckVertex(std::vector< int > Combination, std::vector< std::pair< int, int > > PairCand)
TClonesArray * fHitArray2