ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtFilterSubtraction.cxx
Go to the documentation of this file.
1 #include "AtFilterSubtraction.h"
2 // IWYU pragma: no_include <ext/alloc_traits.h>
3 #include "AtMap.h"
4 #include "AtPad.h"
5 #include "AtPadReference.h"
6 #include "AtRawEvent.h"
7 
8 #include <FairLogger.h>
9 
10 #include <utility>
11 
12 AtFilterSubtraction::AtFilterSubtraction(AtMapPtr map, Int_t numCoBos, Int_t numAget)
13  : fNumberCoBo(numCoBos), fMapping(std::move(map))
14 {
15  fBaseline.resize(fNumberCoBo);
16  for (auto &cobo : fBaseline)
17  cobo.resize(numAget);
18  fRawBaseline.resize(fNumberCoBo);
19  for (auto &cobo : fRawBaseline)
20  cobo.resize(numAget);
21  fAgetCount.resize(fNumberCoBo);
22  for (auto &cobo : fAgetCount)
23  cobo.resize(numAget);
24 }
25 
27 {
28  // Clear out all of the traces
29  for (auto &cobo : fBaseline)
30  for (auto &asad : cobo)
31  asad.fill(0);
32  for (auto &cobo : fRawBaseline)
33  for (auto &asad : cobo)
34  asad.fill(0);
35  for (auto &cobo : fAgetCount)
36  for (auto &asad : cobo)
37  asad = 0;
39 }
40 
42 {
43  Clear();
44 
45  for (const auto &pad : event->GetPads())
46  processPad(fMapping->GetPadRef(pad->GetPadNum()), *pad);
48  fEventNumber = event->GetEventID();
49 }
54 {
55  auto padRef = fMapping->GetPadRef(pad.GetPadNum());
56  if (padRef.ch != 0)
57  return false;
58 
59  for (int tb = 0; tb < 512; ++tb)
60  if (pad.GetADC(tb) > fThreshold)
61  return false;
62 
63  return true;
64 }
66 {
67  return ref.asad;
68 }
70 {
71  if (isValidPad(pad))
72  AddChToBaseline(ref, pad);
73 }
74 
76 {
77  int asad = getAsad(padRef);
78  fAgetCount[padRef.cobo][asad]++;
79  for (int tb = 0; tb < 512; ++tb) {
80  fBaseline[padRef.cobo][asad][tb] += pad.GetADC(tb);
81  fRawBaseline[padRef.cobo][asad][tb] += pad.GetRawADC(tb);
82  }
83 }
84 
86 {
87  for (int cobo = 0; cobo < fBaseline.size(); ++cobo)
88  for (int asad = 0; asad < fBaseline[cobo].size(); ++asad)
89  if (fAgetCount[cobo][asad] != 0)
90  for (int tb = 0; tb < 512; ++tb) {
91  fBaseline[cobo][asad].at(tb) /= fAgetCount[cobo].at(asad);
92  fRawBaseline[cobo][asad][tb] /= fAgetCount[cobo][asad];
93  }
94  else {
95  LOG(ERROR) << "No baseline for cobo " << cobo << " asad " << asad << " in event " << fEventNumber;
97  }
98 }
99 
101 {
102  // Get the pad reference
103  auto padRef = fMapping->GetPadRef(pad->GetPadNum());
104  auto cobo = padRef.cobo;
105  auto asad = getAsad(padRef);
106 
107  auto &adc = pad->GetADC();
108  auto &adcRaw = pad->GetRawADC();
109 
110  for (int tb = 0; tb < 512; ++tb) {
111  // pad->SetRawADC(tb, adcRaw[tb] - fRawBaseline[cobo][asad][tb]);
112  if (pad->IsPedestalSubtracted())
113  pad->SetADC(tb, adc[tb] - fBaseline[cobo][asad][tb]);
114  }
115 }
116 
118 
120 {
121  bool isGoodEvent = (fNumberMissedAsads == 0);
122  if (fSetIsGood)
123  return isGoodEvent;
124  else
125  return true;
126 }
AtPad.h
AtRawEvent.h
AtPadReference::cobo
Int_t cobo
Definition: AtPadReference.h:21
AtFilterSubtraction::fAgetCount
vecAgetCount fAgetCount
Definition: AtFilterSubtraction.h:43
AtFilterSubtraction::getAsad
virtual int getAsad(const AtPadReference &ref)
Definition: AtFilterSubtraction.cxx:65
AtPadReference.h
AtFilterSubtraction::Clear
void Clear()
Definition: AtFilterSubtraction.cxx:26
AtPadReference::asad
Int_t asad
Definition: AtPadReference.h:22
AtFilterSubtraction::fMapping
AtMapPtr fMapping
Definition: AtFilterSubtraction.h:34
AtFilterSubtraction::InitEvent
virtual void InitEvent(AtRawEvent *event) override
Called once for each event at the start of the Exec phase.
Definition: AtFilterSubtraction.cxx:41
AtPad::SetADC
void SetADC(const trace &val)
Definition: AtPad.h:91
AtFilterSubtraction::fBaseline
vecDoubleCoBo fBaseline
Definition: AtFilterSubtraction.h:39
AtFilterSubtraction::fRawBaseline
vecIntCoBo fRawBaseline
Definition: AtFilterSubtraction.h:41
AtRawEvent
Definition: AtRawEvent.h:34
AtFilterSubtraction::IsGoodEvent
virtual bool IsGoodEvent() override
Called at the end of an event. Returns if filtering was successful.
Definition: AtFilterSubtraction.cxx:119
AtRawEvent::GetPads
const PadVector & GetPads() const
Definition: AtRawEvent.h:131
AtFilterSubtraction::AverageBaseline
void AverageBaseline()
Definition: AtFilterSubtraction.cxx:85
AtFilterSubtraction::AddChToBaseline
void AddChToBaseline(const AtPadReference &ref, const AtPad &pad)
Definition: AtFilterSubtraction.cxx:75
AtMapPtr
std::shared_ptr< AtMap > AtMapPtr
Definition: AtSpaceChargeTask.h:18
AtFilterSubtraction::processPad
void processPad(const AtPadReference &ref, const AtPad &pad)
Definition: AtFilterSubtraction.cxx:69
AtFilterSubtraction.h
AtFilterSubtraction::fEventNumber
Int_t fEventNumber
Definition: AtFilterSubtraction.h:32
AtFilterSubtraction::fNumberCoBo
const Int_t fNumberCoBo
Definition: AtFilterSubtraction.h:31
AtPad::GetPadNum
Int_t GetPadNum() const
Definition: AtPad.h:96
AtPad::GetADC
const trace & GetADC() const
Definition: AtPad.cxx:97
AtPad::IsPedestalSubtracted
Bool_t IsPedestalSubtracted() const
Definition: AtPad.h:94
AtFilterSubtraction::Init
virtual void Init() override
Called at the init stage of the AtFilterTask.
Definition: AtFilterSubtraction.cxx:117
AtMap.h
AtFilterSubtraction::fSetIsGood
Bool_t fSetIsGood
Definition: AtFilterSubtraction.h:36
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtFilterSubtraction::fThreshold
Double_t fThreshold
Definition: AtFilterSubtraction.h:33
AtPad::GetRawADC
const rawTrace & GetRawADC() const
Definition: AtPad.h:104
AtPadReference
Definition: AtPadReference.h:20
AtFilterSubtraction::Filter
virtual void Filter(AtPad *pad, AtPadReference *padReference) override
Called to filter each pad.
Definition: AtFilterSubtraction.cxx:100
AtFilterSubtraction::isValidPad
virtual bool isValidPad(const AtPad &pad)
Definition: AtFilterSubtraction.cxx:53
AtFilterSubtraction::AtFilterSubtraction
AtFilterSubtraction(AtMapPtr map, Int_t numCoBos=10, Int_t numAget=4)
Definition: AtFilterSubtraction.cxx:12
AtFilterSubtraction::fNumberMissedAsads
Int_t fNumberMissedAsads
Definition: AtFilterSubtraction.h:35