8 #include <FairLogger.h>
9 #include <FairRootManager.h>
11 #include <FairRuntimeDb.h>
14 #include <TClonesArray.h>
23 constexpr
auto cRED =
"\033[1;31m";
26 constexpr
auto cGREEN =
"\033[1;32m";
31 : fLogger(FairLogger::GetLogger()), fIsPersistence(kFALSE), fPatternEventArray(new TClonesArray(
"ATPatternEvent")),
32 fGenfitTrackArray(new TClonesArray(
"genfit::Track")), fGenfitTrackVector(new std::vector<
genfit::Track>())
40 fIsPersistence = value;
45 FairRootManager *ioMan = FairRootManager::Instance();
46 if (ioMan ==
nullptr) {
47 LOG(error) <<
"Cannot find RootManager!";
51 fPatternEventArray =
dynamic_cast<TClonesArray *
>(ioMan->GetObject(
"AtPatternEvent"));
52 if (fPatternEventArray ==
nullptr) {
53 LOG(error) <<
"Cannot find AtPatternEvent array!";
59 if (fFitterAlgorithm == 0) {
60 LOG(info) <<
"Using GENFIT2";
61 std::cout <<
cGREEN <<
" AtFitterTask::Init - Fit parameters. "
63 std::cout <<
" Magnetic Field : " << fMagneticField <<
" T\n";
64 std::cout <<
" PDG Code : " << fPDGCode <<
"\n";
65 std::cout <<
" Mass : " << fMass <<
" amu\n";
66 std::cout <<
" Atomic Number : " << fAtomicNumber <<
"\n";
67 std::cout <<
" Number of fit points : " << fNumFitPoints <<
"\n";
68 std::cout <<
" Maximum iterations : " << fMaxIterations <<
"\n";
69 std::cout <<
" Minimum iterations : " << fMinIterations <<
"\n";
70 std::cout <<
" Maximum brho : " << fMaxBrho <<
"\n";
71 std::cout <<
" Minimum brho : " << fMinBrho <<
"\n";
72 std::cout <<
" Energy loss file : " << fELossFile <<
"\n";
73 std::cout <<
" --------------------------------------------- " <<
cNORMAL <<
"\n";
75 fFitter =
new AtFITTER::AtGenfit(fMagneticField, fMinBrho, fMaxBrho, fELossFile, fMinIterations, fMaxIterations);
81 }
else if (fFitterAlgorithm == 1) {
82 LOG(error) <<
"Fitter algorithm not defined!";
84 }
else if (fFitterAlgorithm == 2) {
85 LOG(error) <<
"Fitter algorithm not defined!";
90 ioMan->RegisterAny(
"ATTPC", fGenfitTrackVector, fIsPersistence);
97 LOG(debug) <<
"SetParContainers of AtFitterTask";
99 FairRun *run = FairRun::Instance();
101 LOG(fatal) <<
"No analysis run!";
103 FairRuntimeDb *db = run->GetRuntimeDb();
105 LOG(fatal) <<
"No runtime database!";
107 fPar = (
AtDigiPar *)db->getContainer(
"AtDigiPar");
109 LOG(fatal) <<
"AtDigiPar not found!!";
114 if (fPatternEventArray->GetEntriesFast() == 0)
117 fGenfitTrackArray->Clear(
"C");
118 fGenfitTrackVector->clear();
122 std::cout <<
" Event Counter " << fEventCnt <<
"\n";
125 std::vector<AtTrack> &patternTrackCand = patternEvent.
GetTrackCand();
126 std::cout <<
" AtFitterTask:Exec - Number of candidate tracks : " << patternTrackCand.size() <<
"\n";
128 if (patternTrackCand.size() < 10) {
130 for (
auto track : patternTrackCand) {
132 genfit::Track *fitTrack = fFitter->
FitTracks(&track);
133 if (fitTrack !=
nullptr)
134 fGenfitTrackVector->push_back(*
static_cast<genfit::Track *
>(fitTrack));