/
PndGFTrackToPndTrackConvertorTask.cxx
101 lines (77 loc) · 2.84 KB
/
PndGFTrackToPndTrackConvertorTask.cxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//-----------------------------------------------------------
// Task which coverts TClonesArray of GFTrack to TClonesArray of PndTrack
//-----------------------------------------------------------
// Panda Headers ----------------------
// This Class' Header ------------------
#include "PndGFTrackToPndTrackConvertorTask.h"
// C/C++ Headers ----------------------
#include <iostream>
#include <cmath>
// Collaborating Class Headers --------
#include "TClonesArray.h"
#include "FairRootManager.h"
#include "PndTrack.h"
#include "GFTrack.h"
#include "GFException.h"
#include "PndGenfitAdapters.h"
#include "FairRunAna.h"
#include "FairRuntimeDb.h"
PndGFTrackToPndTrackConvertorTask::PndGFTrackToPndTrackConvertorTask(const char* name, Int_t iVerbose)
: FairTask(name, iVerbose)
{
fTrackInBranchName = "TrackPostFitComplete";
fTrackOutBranchName = "PndTrackPostFitComplete";
fOutTrackArray = new TClonesArray("PndTrack");
}
PndGFTrackToPndTrackConvertorTask::~PndGFTrackToPndTrackConvertorTask()
{
}
InitStatus
PndGFTrackToPndTrackConvertorTask::Init()
{
//Get ROOT Manager
FairRootManager* ioman= FairRootManager::Instance();
if(ioman==0)
{
Error("PndGFTrackToPndTrackConvertorTask::Init","RootManager not instantiated!");
return kERROR;
}
// Get input collection
fInTrackArray=(TClonesArray*) ioman->GetObject(fTrackInBranchName);
if(fInTrackArray==0)
{
Error("PndGFTrackToPndTrackConvertorTask::Init","track-array not found!");
return kERROR;
}
ioman->Register(fTrackOutBranchName,"Gen", fOutTrackArray, kTRUE);
return kSUCCESS;
}
void PndGFTrackToPndTrackConvertorTask::Exec(Option_t* opt)
{
if (fVerbose>0) std::cout<<"PndGFTrackToPndTrackConvertorTask::Exec"<<std::endl;
fOutTrackArray->Delete();
Int_t ntracks=fInTrackArray->GetEntriesFast();
// Detailed output
if (fVerbose>1) std::cout << " -I- PndGFTrackToPndTrackConvertorTask: contains " << ntracks << " Tracks."<< std::endl;
for(Int_t itr=0;itr<ntracks;++itr)
{
if (fVerbose>1) std::cout<<"starting track"<<itr<<std::endl;
TClonesArray& trkRef = *fOutTrackArray;
Int_t size = trkRef.GetEntriesFast();
GFTrack *inTrack = (GFTrack*) fInTrackArray->At(itr);
try
{
PndTrack* outTrack = GenfitTrack2PndTrack(inTrack);
PndTrack* pndTrack = new(trkRef[size]) PndTrack(outTrack->GetParamFirst(), outTrack->GetParamLast(), outTrack->GetTrackCand(),
outTrack->GetFlag(), outTrack->GetChi2(), outTrack->GetNDF(), outTrack->GetPidHypo(), itr, FairRootManager::Instance()->GetBranchId(fTrackInBranchName));
}
catch(GFException& e)
{
std::cout << "*** PndGFTrackToPndTrackConvertorTask::Exec" << "\t" << "Genfit Exception: " << e.what() << std::endl;
continue;
//throw e;
}
}
return;
}
ClassImp(PndGFTrackToPndTrackConvertorTask);