CbmRoot
Loading...
Searching...
No Matches
TaskManager.cxx
Go to the documentation of this file.
1/* Copyright (C) 2025-2025 Warsaw University of Technology, Warsaw
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Daniel Wielanek [committer] */
4#include "TaskManager.h"
5
6#include "RootManager.h"
7
8#include <RtypesCore.h>
9#include <TFile.h>
10
11#include <cstdlib>
12
13#include <Hal/DataManager.h>
14#include <Hal/IOManager.h>
15#include <Hal/Package.h>
16#include <Hal/Parameter.h>
17#include <Hal/Source.h>
18#include <Hal/Std.h>
19#include <Hal/Task.h>
20#include <Hal/TriggerTask.h>
21namespace Hal
22{
23 namespace Fair
24 {
26
27 InitStatus TaskManager::Init()
28 {
29 fManager->Init();
30 DataManager* mng = DataManager::Instance();
31 mng->SetManager(fManager);
32 for (auto task : fTriggers) {
33 Task::EInitFlag stat = task->Init();
34 switch (stat) {
35 case Task::EInitFlag::kERROR: {
36 fPassiveTriggers.push_back(task);
37 } break;
38 case Task::EInitFlag::kSUCCESS: {
39 fActiveTriggers.push_back(task);
40 } break;
41 case Task::EInitFlag::kFATAL: {
42 exit(0);
43 return kFATAL;
44 } break;
45 }
46 }
47 for (auto task : fTasks) {
48 Task::EInitFlag stat = task->Init();
49 switch (stat) {
50 case Task::EInitFlag::kERROR: {
51 fPassiveTasks.push_back(task);
52 } break;
53 case Task::EInitFlag::kSUCCESS: {
54 fActiveTasks.push_back(task);
55 } break;
56 case Task::EInitFlag::kFATAL: {
57 exit(0);
58 return kFATAL;
59 } break;
60 }
61 }
62 return kSUCCESS;
63 }
64
65 void TaskManager::Exec(Option_t* option)
66 {
68 for (auto trigger : fActiveTriggers) {
69 trigger->Exec(option);
70 if (!trigger->IsEventGood()) {
71 return;
72 }
73 }
74 for (auto task : fActiveTasks) {
75 task->Exec(option);
76 }
77 }
78
80 {
81 auto GoToDir = [](TString name) {
82 TDirectory* dir = (TDirectory*) gFile;
83 std::vector<TString> array = Hal::Std::ExplodeString(name, '/');
84 for (int i = 0; i < (int) array.size(); i++) {
85 TDirectory* newdir = (TDirectory*) dir->FindObject(array[i]);
86 if (!newdir) {
87 dir->mkdir(array[i]);
88 }
89 dir->cd(array[i]);
90 }
91 };
92 Package* metadata_new = new Package();
93 metadata_new->SetName("RunInfo");
94 metadata_new->AddObject(new ParameterString("Software ver", HAL_PHYSICALANALYSYS_VER));
95 metadata_new->AddObject(new ParameterString("Date", Hal::Std::GetDate(), 'f'));
96 metadata_new->AddObject(new ParameterString("Time", Hal::Std::GetTime(), 'f'));
97 metadata_new->AddObject(new ParameterUInt("Processed_events", fProcessedEvents, '+'));
98 metadata_new->AddObject(new ParameterString("Input file", DataManager::Instance()->GetSourceName(), 'f'));
99 TList* list = new TList();
100 list->SetName("Tasks");
101 for (auto task : fTasks) {
102 TString name = task->ClassName();
103 TString label = "Active";
104 for (auto probeTask : fPassiveTasks) {
105 if (probeTask == task) label = "Passive";
106 }
107 list->AddLast(new ParameterString(name, label));
108 }
109 metadata_new->AddObject(list);
110
111 GoToDir("HalInfo");
112 TDirectory* dir = (TDirectory*) gFile;
113 TDirectory* metadatata = (TDirectory*) dir->Get("HalInfo");
114 if (metadatata->Get("RunInfo")) {
115 delete metadata_new;
116 }
117 else {
118 metadata_new->Write("RunInfo");
119 }
120 gFile->cd();
121 for (auto task : fTasks) {
122 task->FinishTask();
123 }
124 }
125
127 } // namespace Fair
128} /* namespace Hal */
A manager for the input-output data of the CA tracking algorithm.
virtual InitStatus Init()
std::vector<::Hal::Task * > fActiveTasks
Definition TaskManager.h:38
virtual void Finish()
std::vector<::Hal::TriggerTask * > fActiveTriggers
Definition TaskManager.h:35
std::vector<::Hal::TriggerTask * > fTriggers
Definition TaskManager.h:34
virtual void Exec(Option_t *option)
std::vector<::Hal::Task * > fTasks
Definition TaskManager.h:37
std::vector<::Hal::TriggerTask * > fPassiveTriggers
Definition TaskManager.h:36
std::vector<::Hal::Task * > fPassiveTasks
Definition TaskManager.h:39