ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtAuxFilterTask.cxx
Go to the documentation of this file.
1 #include "AtAuxFilterTask.h"
2 
3 #include "AtAuxPad.h"
4 #include "AtFilter.h"
5 #include "AtRawEvent.h"
6 
7 #include <FairLogger.h>
8 #include <FairRootManager.h>
9 #include <FairTask.h>
10 
11 #include <TClonesArray.h>
12 #include <TObject.h> // for TObject
13 #include <TString.h>
14 
15 #include <algorithm>
16 #include <ostream>
17 #include <utility>
18 
19 AtAuxFilterTask::AtAuxFilterTask(AtFilter *filter) : fFilter(filter), fInputEventBranchName("AtRawEvent") {}
20 
22 
23 void AtAuxFilterTask::AddAuxPad(std::string pad)
24 {
25  auxPads.emplace_back(pad);
26 }
27 
28 void AtAuxFilterTask::SetInputBranchName(TString branchName)
29 {
30  fInputEventBranchName = branchName;
31 }
32 
34 {
35  FairRootManager *ioManager = FairRootManager::Instance();
36 
37  if (ioManager == nullptr) {
38  LOG(ERROR) << "Cannot find RootManager!" << std::endl;
39  return kERROR;
40  }
41 
42  // Get the old data from the io manager
43  fInputEventArray = dynamic_cast<TClonesArray *>(ioManager->GetObject(fInputEventBranchName));
44  if (fInputEventArray == nullptr) {
45  LOG(ERROR) << "AtAuxFilterTask: Cannot find AtRawEvent array " << fInputEventBranchName;
46  return kERROR;
47  }
48 
49  fFilter->Init();
50 
51  return kSUCCESS;
52 }
53 
54 void AtAuxFilterTask::Exec(Option_t *opt)
55 {
56  if (fInputEventArray->GetEntriesFast() == 0)
57  return;
58 
59  auto *rawEvent = dynamic_cast<AtRawEvent *>(fInputEventArray->At(0));
60  if (!rawEvent->IsGood())
61  return;
62 
63  fFilter->InitEvent(rawEvent);
64 
65  for (auto &auxName : auxPads) {
66  auto unfilteredPad = rawEvent->GetAuxPad(auxName);
67  if (unfilteredPad == nullptr) {
68  LOG(error) << "AtRawEvent does not contain aux pad: " << auxName;
69  continue;
70  }
71 
72  auto itPair = rawEvent->AddAuxPad(auxName + "Filtered");
73 
74  auto pad = itPair.first;
75  pad->SetRawADC(unfilteredPad->GetRawADC());
76  if (unfilteredPad->IsPedestalSubtracted()) {
77  pad->SetADC(unfilteredPad->GetADC());
78  pad->SetPedestalSubtracted();
79  }
80  fFilter->Filter(pad);
81  }
82 
83  rawEvent->SetIsGood(fFilter->IsGoodEvent());
84 }
AtRawEvent.h
AtAuxFilterTask::AddAuxPad
void AddAuxPad(std::string pad)
Definition: AtAuxFilterTask.cxx:23
AtAuxFilterTask::SetInputBranchName
void SetInputBranchName(TString branchName)
Definition: AtAuxFilterTask.cxx:28
AtAuxPad.h
AtAuxFilterTask.h
AtRawEvent
Definition: AtRawEvent.h:34
AtAuxFilterTask::Exec
virtual void Exec(Option_t *opt) override
Definition: AtAuxFilterTask.cxx:54
AtAuxFilterTask::AtAuxFilterTask
AtAuxFilterTask(AtFilter *filter)
Definition: AtAuxFilterTask.cxx:19
AtFilter
Definition: AtFilter.h:13
AtFilter::InitEvent
virtual void InitEvent(AtRawEvent *inputEvent)=0
Called once for each event at the start of the Exec phase.
AtFilter.h
AtAuxFilterTask::~AtAuxFilterTask
~AtAuxFilterTask()
AtAuxFilterTask::Init
virtual InitStatus Init() override
Definition: AtAuxFilterTask.cxx:33
AtFilter::IsGoodEvent
virtual bool IsGoodEvent()=0
Called at the end of an event. Returns if filtering was successful.
AtFilter::Init
virtual void Init()=0
Called at the init stage of the AtFilterTask.
AtFilter::Filter
virtual void Filter(AtPad *pad, AtPadReference *padReference=nullptr)=0
Called to filter each pad.