ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtSCACorrect.cxx
Go to the documentation of this file.
1 #include "AtSCACorrect.h"
2 
3 #include "AtMap.h"
4 #include "AtPad.h"
5 #include "AtPadArray.h"
6 #include "AtPadBase.h"
7 #include "AtPadValue.h"
8 #include "AtRawEvent.h"
9 
10 #include <FairLogger.h>
11 
12 #include <TFile.h> // for TFile
13 
14 #include <utility> // for move
15 
16 struct AtPadReference;
17 
18 AtSCACorrect::AtSCACorrect(AtMapPtr map, TString filename, TString eventName, TString baselineAug, TString phaseAug)
19  : AtFilter(), fMap(std::move(map)), fDoBaseline(true), fDoPhase(true), fBaseAugName(baselineAug),
20  fPhaseAugName(phaseAug), fUseChanZero(false)
21 {
22  TFile f1(filename.Data());
23  AtRawEvent *unownedEvent = nullptr;
24  f1.GetObject(eventName.Data(), unownedEvent);
25  fRawEvent = RawEventPtr(unownedEvent);
26  if (fRawEvent != nullptr) {
27  LOG(info) << "baseline raw event opened";
28  }
29 }
30 
31 AtSCACorrect::AtSCACorrect(AtMapPtr map, RawEventPtr rawEvent, TString baselineAug, TString phaseAug)
32  : AtFilter(), fMap(std::move(map)), fRawEvent(std::move(rawEvent)), fDoBaseline(true), fDoPhase(true),
33  fBaseAugName(baselineAug), fPhaseAugName(phaseAug), fUseChanZero(false)
34 {
35 }
36 
37 void AtSCACorrect::Filter(AtPad *pad, AtPadReference *padReference)
38 {
39  if (fDoBaseline)
40  removeBaseline(pad, padReference);
41  if (fDoPhase)
42  removePhase(pad, padReference);
43 }
44 
45 AtPad *AtSCACorrect::getMatchingPad(AtPad *pad, AtPadReference *padReference, AtRawEvent *event)
46 {
47 
48  if (padReference != nullptr) {
49  if (fMap->IsFPNchannel(*padReference))
50  return event->GetFpn(*padReference);
51  if (!fMap->IsAuxPad(*padReference))
52  return event->GetPad(pad->GetPadNum());
53  return nullptr;
54  }
55  return event->GetPad(pad->GetPadNum());
56 }
57 
58 void AtSCACorrect::removeBaseline(AtPad *pad, AtPadReference *padReference)
59 {
60 
61  auto padRef = *padReference;
62  if (fUseChanZero)
63  padRef.ch = 0;
64 
65  AtPad *baselinePad = getMatchingPad(pad, &padRef, fRawEvent.get());
66 
67  if (baselinePad != nullptr) {
68  auto baseArray = dynamic_cast<AtPadArray *>(baselinePad->GetAugment(fBaseAugName.Data()));
69  if (baseArray != nullptr) {
70  for (int i = 0; i < 512; ++i) {
71  pad->SetADC(i, pad->GetRawADC(i) - baseArray->GetArray(i));
72  }
73  pad->SetPedestalSubtracted(true);
74  } else {
75  LOG(error) << "Baseline Array is null!";
76  }
77  } else {
78  // LOG(error) << "Baseline is null!";
79  }
80 }
81 
82 void AtSCACorrect::removePhase(AtPad *pad, AtPadReference *padReference)
83 {
84  auto padRef = *padReference;
85  if (fUseChanZero)
86  padRef.ch = 0;
87 
88  AtPad *phasePad = getMatchingPad(pad, &padRef, fRawEvent.get());
89 
90  if (phasePad != nullptr) {
91  auto phaseArray = dynamic_cast<AtPadArray *>(phasePad->GetAugment(fBaseAugName.Data()));
92  if (phaseArray != nullptr) {
93  int lastCell = (dynamic_cast<AtPadValue *>(pad->GetAugment("lastCell")))->GetValue();
94  for (int i = 0; i < 512; i++) {
95  int phaseShift = i + lastCell - 1;
96  if (phaseShift > 511) {
97  phaseShift = phaseShift - 512;
98  }
99  pad->SetADC(i, pad->GetADC(i) - phaseArray->GetArray(phaseShift));
100  }
101  } else {
102  LOG(error) << "Phase Array is null!";
103  }
104  } else {
105  // LOG(error) << "Phase is null!";
106  }
107 }
AtPad.h
AtRawEvent.h
AtPadValue
Holds a double for an AtPad.
Definition: AtPadValue.h:20
AtPad::SetPedestalSubtracted
void SetPedestalSubtracted(Bool_t val=kTRUE)
Definition: AtPad.h:86
AtPad::SetADC
void SetADC(const trace &val)
Definition: AtPad.h:91
AtRawEvent
Definition: AtRawEvent.h:34
AtFilter
Definition: AtFilter.h:13
AtPadValue.h
AtSCACorrect::Filter
virtual void Filter(AtPad *pad, AtPadReference *padReference) override
Called to filter each pad.
Definition: AtSCACorrect.cxx:37
AtPadArray.h
AtPad::GetAugment
AtPadBase * GetAugment(std::string name)
Definition: AtPad.cxx:82
AtPad::GetPadNum
Int_t GetPadNum() const
Definition: AtPad.h:96
AtPad::GetADC
const trace & GetADC() const
Definition: AtPad.cxx:97
AtSCACorrect::AtSCACorrect
AtSCACorrect(AtMapPtr map, TString filename, TString eventName, TString baselineAug, TString phaseAug)
Definition: AtSCACorrect.cxx:18
AtMap.h
AtPadArray
Holds an addition array of doubles for an AtPad.
Definition: AtPadArray.h:24
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtSCACorrect.h
AtPadReference::ch
Int_t ch
Definition: AtPadReference.h:24
AtPad::GetRawADC
const rawTrace & GetRawADC() const
Definition: AtPad.h:104
AtPadBase.h
AtPadReference
Definition: AtPadReference.h:20