Heavy ion Analysis Libriares
Loading...
Searching...
No Matches
SmearTask.cxx
1/*
2 * SmearTask.cxx
3 *
4 * Created on: 8 gru 2015
5 * Author: Daniel Wielanek
6 * E-mail: daniel.wielanek@gmail.com
7 * Warsaw University of Technology, Faculty of Physics
8 */
9
10#include "SmearTask.h"
11
12#include "ComplexEvent.h"
13#include "Cout.h"
14#include "CutCollection.h"
15#include "CutContainer.h"
16#include "DataFormatManager.h"
17#include "DataManager.h"
18#include "Event.h"
19#include "EventAna.h"
20#include "MemoryMapManager.h"
21#include "Package.h"
22#include "SmearedEvent.h"
23#include "SmearedTrack.h"
24#include "Std.h"
25
26
27namespace Hal {
28 SmearTask::SmearTask() :
29 TrackAna(),
30 fOutputFormatID(0),
31 fSave(kFALSE),
32 fEventAlgorithm(NULL),
33 fTrackAlgorithm(NULL),
34 fCurrentTrackSmeared(NULL),
35 fCurrentEventSmeared(NULL) {
36 DataFormatManager* formats = DataFormatManager::Instance();
37 fOutputFormatID = formats->RegisterFormat();
38 }
39
40 void SmearTask::CheckCutContainerCollections() {
41 if (fCutContainer->GetEventCollectionsNo() > 1) {
42 Cout::PrintInfo("Too many event collections, they will be removed! ", EInfo::kLowWarning);
43 for (int i = 1; i < fCutContainer->GetEventCollectionsNo(); i++)
44 fCutContainer->RemoveCollection(ECutUpdate::kEvent, i);
45 }
46 TrackAna::CheckCutContainerCollections();
47 }
48
49 Package* SmearTask::Report() const {
50 Package* pack = TrackAna::Report();
51 Package* pack2 = fEventAlgorithm->Report();
52 Package* pack3 = fTrackAlgorithm->Report();
53 pack->AddObject(pack2);
54 pack->AddObject(pack3);
55 return pack;
56 }
57
58 Task::EInitFlag SmearTask::Init() {
59 DataFormatManager* formats = DataFormatManager::Instance();
60 if (formats->FormatExist(GetTaskID())) {
61 const Event* temp = formats->GetFormat(GetTaskID());
62 if (temp->InheritsFrom("Hal::EventSmeared")) {
63 Cout::PrintInfo("Cannot set smeared algorithm in smearing task", EInfo::kCriticalError);
64 return Task::EInitFlag::kFATAL;
65 }
66 }
67 Task::EInitFlag stat = TrackAna::Init();
68 if (stat == Task::EInitFlag::kFATAL) return stat;
69 Event* event = fMemoryMap->GetTemporaryEvent();
70 fCurrentEventSmeared = new SmearedEvent(event);
71 fCurrentEventSmeared->ActivateSmearing();
72
73 DataManager* ioManager = DataManager::Instance();
74 Event* img = fCurrentEventSmeared->GetImgEvent();
75 ioManager->Register(Form("%s.", img->ClassName()), "HalEvents", img, kFALSE);
76
77 if (fEventAlgorithm == NULL) {
78 Cout::PrintInfo("No event smear algorithm, new will be added but do virtual", EInfo::kLowWarning);
79 fEventAlgorithm = new EventSmearVirtual();
80 }
81 if (fTrackAlgorithm == NULL) {
82 Cout::PrintInfo("No track smear algorithm, new will be added but do virtual", EInfo::kLowWarning);
83 fTrackAlgorithm = new TrackSmearVirtual();
84 }
85 if (fEventAlgorithm->Init() == Task::EInitFlag::kFATAL) {
86 Cout::PrintInfo("Failed to initialize EventSmear", EInfo::kError);
87 return Task::EInitFlag::kFATAL;
88 }
89 if (fTrackAlgorithm->Init() == Task::EInitFlag::kFATAL) {
90 Cout::PrintInfo("Failed to initialize TrackSmear", EInfo::kError);
91 return Task::EInitFlag::kFATAL;
92 }
93 return stat;
94 }
95
96 void SmearTask::SaveEvents() { fSave = kTRUE; }
97
98 void SmearTask::ProcessEvent() {
99 fEventAlgorithm->ModifyEvent((SmearedEvent*) fCurrentEventSmeared);
100 CutCollection* cont = fCutContainer->GetEventCollection(fCurrentEventCollectionID);
101 for (int i = 0; i < fMemoryMap->GetTemporaryTotalTracksNo(); i++) {
102 for (int j = 0; j < cont->GetNextNo(); j++) {
103 fCurrentTrackCollectionID = cont->GetNextAddr(j);
104 fCurrentTrack = fCurrentEventSmeared->GetTrack(i);
105 if (fCutContainer->PassTrack(fCurrentTrack, fCurrentTrackCollectionID)) {
106 fTrackAlgorithm->ModifyTrack((SmearedTrack*) fCurrentTrack);
107 }
108 }
109 }
110 }
111
112 void SmearTask::Exec(Option_t* /*opt*/) {
113 fProcessedEvents++;
114 fCurrentEvent = fMemoryMap->GetTemporaryEvent();
115 fMemoryMap->ManualUpdate(fCurrentEventSmeared);
116 for (fCurrentEventCollectionID = 0; fCurrentEventCollectionID < fEventCollectionsNo; fCurrentEventCollectionID++) {
117 if (fCutContainer->PassEvent(fCurrentEvent, fCurrentEventCollectionID)) { ProcessEvent(); }
118 }
119 }
120
121 SmearTask::~SmearTask() {
122 if (fEventAlgorithm) delete fEventAlgorithm;
123 if (fTrackAlgorithm) delete fTrackAlgorithm;
124 if (fCurrentEventSmeared) delete fCurrentEventSmeared;
125 if (fCurrentTrackSmeared) delete fCurrentTrackSmeared;
126 }
127} // namespace Hal
Int_t GetNextNo() const
Int_t GetNextAddr(Int_t index) const
const Event * GetFormat(Int_t task_id, EFormatDepth format_depth=EFormatDepth::kAll) const
Bool_t FormatExist(Int_t task_id, EFormatDepth format_depth=EFormatDepth::kAll) const
void Register(const char *name, const char *folderName, TNamed *obj, Bool_t toFile)
Track * GetTrack(Int_t i) const
Definition Event.h:208
Package * Report() const
Definition Package.cxx:129
void AddObject(TObject *object)
Definition Package.cxx:209