ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtGRAWUnpacker.cxx
Go to the documentation of this file.
1 #include "AtGRAWUnpacker.h"
2 
3 #include "AtMap.h"
4 #include "AtPad.h"
5 #include "AtPadBase.h" // for AtPadBase
6 #include "AtPadReference.h"
7 #include "AtPadValue.h"
8 #include "AtPedestal.h"
9 #include "AtRawEvent.h"
10 #include "AtTpcMap.h"
11 #include "AtTpcProtoMap.h"
12 
13 #include <FairLogger.h>
14 
15 #include <Rtypes.h>
16 
17 #include "GETBasicFrame.h"
18 #include "GETCoboFrame.h"
19 #include "GETDecoder2.h"
20 
21 #include <algorithm>
22 #include <array> // for array
23 #include <future>
24 #include <iostream>
25 #include <iterator> // for begin, end
26 #include <numeric> // for accumulate
27 #include <thread>
28 #include <utility>
29 
30 AtGRAWUnpacker::AtGRAWUnpacker(mapPtr map, Int_t numGrawFiles)
31  : AtUnpacker(map), fNumFiles(numGrawFiles), fCurrentEventID(fNumFiles, 0), fIsSeparatedData(fNumFiles > 1)
32 {
33  for (int i = 0; i < fNumFiles; ++i) {
34  fDecoder.push_back(std::make_unique<GETDecoder2>());
35  fPedestal.push_back(std::make_unique<AtPedestal>());
36  }
37 }
39 {
40  // Verify input file is there and matches constructor
41  processInputFile();
42 
43  // Because we added the files after creation, need to set the index of the first data file
44  // to unpack for each cobo/asad
45  fIsData = true;
46  for (auto &decoder : fDecoder)
47  fIsData &= decoder->SetData(0);
48  if (!fIsData)
49  LOG(error) << "Problem setting the data pointer to the first file in the list!";
50 
51  std::vector<int> iniFrameIDs;
52  LOG(info) << "Initial frame IDs";
53  for (int i = 0; i < fNumFiles; ++i) {
54  GETBasicFrame *basicFrame = fDecoder[i]->GetBasicFrame(-1);
55  iniFrameIDs.push_back(basicFrame->GetEventID());
56  LOG(info) << i << " " << iniFrameIDs.back();
57  }
58  fTargetFrameID = -1;
59  fDataEventID = *std::max_element(begin(iniFrameIDs), end(iniFrameIDs)) + fEventID;
60  fTargetFrameID = *std::max_element(begin(iniFrameIDs), end(iniFrameIDs)) + fEventID;
61 }
62 void AtGRAWUnpacker::FindAndSetNumEvents()
63 {
64  std::vector<int> eventCoboIDs;
65  std::vector<int> lastEvents;
66  std::vector<std::thread> file;
67  std::vector<std::future<CoboAndEvent>> futureValues;
68  if (fIsMutantOneRun) {
69  fNumEvents = GetLastEvent(0).second;
70  } else {
71  for (int i = 0; i < fNumFiles; ++i) {
72  std::promise<CoboAndEvent> p;
73  futureValues.push_back(p.get_future());
74  file.emplace_back(
75  [this](Int_t fileIdx, std::promise<CoboAndEvent> &&promise) {
76  promise.set_value(this->GetLastEvent(fileIdx));
77  },
78  i, std::move(p));
79  }
80 
81  for (auto &fileThread : file)
82  fileThread.join();
83 
84  for (auto &future : futureValues) {
85  CoboAndEvent value = future.get();
86  int coboNum = value.first;
87  int lastEvent = value.second;
88  if (std::find(begin(eventCoboIDs), end(eventCoboIDs), coboNum) != eventCoboIDs.end()) {
89  for (int r = 0; r < eventCoboIDs.size(); r++) {
90  if (eventCoboIDs[r] == coboNum) {
91  if (lastEvents[r] < lastEvent) {
92  lastEvents[r] = lastEvent;
93  }
94  }
95  }
96  } else {
97  eventCoboIDs.push_back(coboNum);
98  lastEvents.push_back(lastEvent);
99  }
100  }
101 
102  fNumEvents = *std::min_element(begin(lastEvents), end(lastEvents));
103  }
104 }
105 
107 {
108  fRawEvent = &event;
109 
110  if (!fIsData) {
111  LOG(error) << "Data was not set, settinge event bad and skipping.";
112  event.SetIsGood(false);
113  return;
114  }
115 
116  if (fIsSeparatedData) {
117  std::vector<std::thread> file;
118 
119  for (Int_t iFile = 0; iFile < fNumFiles; iFile++) {
120  file.emplace_back([this](Int_t fileIdx) { this->ProcessBasicFile(fileIdx); }, iFile);
121  // file[iFile] = std::thread([this](Int_t fileIdx) { this->ProcessBasicFile(fileIdx); }, iFile);
122  }
123 
124  for (auto &fileThread : file)
125  fileThread.join();
126 
127  // NB: Do not delete. To be refactored using functors
128  /* for (Int_t iFile = 0; iFile < fNumFiles; iFile++){
129  file[iFile] = std::thread([this](Int_t fileIdx) { this->ProcessFile(fileIdx); }, iFile);
130  }*/
131 
132  for (Int_t iFile = 0; iFile < fNumFiles; iFile++)
133  if (fCurrentEventID[0] != fCurrentEventID[iFile]) {
134  LOG(error) << "Event IDs don't match between files! fCurrentEventID[0]: " << fCurrentEventID[0]
135  << " fCurrentEventID[" << iFile << "]: " << fCurrentEventID[iFile] << std::endl;
136 
137  event.SetIsGood(kFALSE);
138  }
139 
140  event.SetEventID(fEventID);
141 
142  } else // not seperated data
143  {
144  if (dynamic_cast<AtTpcMap *>(fMap.get()) != nullptr) {
145  GETLayeredFrame *layeredFrame = fDecoder[0]->GetLayeredFrame(fDataEventID);
146  if (layeredFrame == nullptr)
147  event.SetIsGood(false);
148  else
149  ProcessLayeredFrame(layeredFrame);
150 
151  } else if (dynamic_cast<AtTpcProtoMap *>(fMap.get()) != nullptr) {
152  GETBasicFrame *frame = fDecoder[0]->GetBasicFrame(fDataEventID);
153  if (frame == nullptr)
154  event.SetIsGood(false);
155  else
156  ProcessBasicFrame(frame);
157 
158  } else {
159  LOG(ERROR) << "We are not setup to unpack unseperated data for the current detector type!";
160  event.SetIsGood(false);
161  }
162  }
163 
164  fEventID++;
165  fDataEventID++;
166  if (fTargetFrameID != -1)
167  fTargetFrameID++;
168 }
169 
171 {
172  if (fIsSeparatedData) {
173  bool isLastEvent = false;
174  for (int i = 0; i < fNumFiles; ++i)
175  isLastEvent |= fDecoder[i]->GetBasicFrame(fDataEventID) == nullptr;
176  return isLastEvent;
177  } else {
178  if (dynamic_cast<AtTpcMap *>(fMap.get()) != nullptr) {
179  GETLayeredFrame *frame = fDecoder[0]->GetLayeredFrame(fDataEventID);
180  return frame == nullptr;
181  } else if (dynamic_cast<AtTpcProtoMap *>(fMap.get()) != nullptr) {
182  GETBasicFrame *frame = fDecoder[0]->GetBasicFrame(fDataEventID);
183  return frame == nullptr;
184  }
185  }
186  return true;
187 }
188 
189 void AtGRAWUnpacker::processInputFile()
190 {
191  if (fNumFiles == 1) {
192  fDecoder[0]->AddData(fInputFileName);
193  LOG(info) << "Added file to unpacker: " << fInputFileName;
194  return;
195  }
196 
197  std::ifstream listFile(fInputFileName);
198  TString dataFileWithPath;
199  Int_t fileNum = 0;
200  for (int i = 0; i < fNumFiles; ++i) {
201  listFile.clear();
202  listFile.seekg(0);
203  while (dataFileWithPath.ReadLine(listFile)) {
204  if (dataFileWithPath.Contains(Form(fFileIDString.data(), i))) {
205  fDecoder[i]->AddData(dataFileWithPath);
206  LOG(info) << " Added file : " << dataFileWithPath << " - " << fFileIDString << " : " << i;
207  } else
208  LOG(debug) << "Skipping file: " << dataFileWithPath << " did not match the string " << fFileIDString;
209  }
210  }
211 }
212 
213 void AtGRAWUnpacker::SetInputFileName(std::string fileName)
214 {
215  LOG(warn) << "Did not specify a string containing \"%i\" to use to map the incoming files to the proper GETDecoder. "
216  "Using \"AsAd%i\" by default. To change call the function SetInputFileName(std::string fileName, "
217  "std::string fileIDString) instead.";
218  fInputFileName = std::move(fileName);
219  fFileIDString = "AsAd%i";
220 }
221 void AtGRAWUnpacker::SetInputFileName(std::string fileName, std::string fileIDString)
222 {
223  fInputFileName = std::move(fileName);
224  fFileIDString = std::move(fileIDString);
225 }
226 
227 Bool_t AtGRAWUnpacker::AddData(TString filename, Int_t fileIdx)
228 {
229  if (fileIdx > fNumFiles) {
230  LOG(error) << "Trying to add a file with index " << fileIdx
231  << " which is larger than the number of files we are unpacking (" << fNumFiles << ")!";
232  return false;
233  }
234  return fDecoder[fileIdx]->AddData(filename);
235 }
236 
237 void AtGRAWUnpacker::ProcessFile(Int_t fileIdx)
238 {
239 
240  GETCoboFrame *coboFrame = fDecoder[fileIdx]->GetCoboFrame(fTargetFrameID);
241 
242  if (coboFrame == nullptr) {
243  fRawEvent->SetIsGood(kFALSE);
244  std::cout << " Null frame! CoboIdx " << fileIdx << "\n";
245  return;
246  }
247 
248  fCurrentEventID[fileIdx] = coboFrame->GetEventID();
249  Int_t numFrames = coboFrame->GetNumFrames();
250 
251  for (Int_t iFrame = 0; iFrame < numFrames; iFrame++) {
252  GETBasicFrame *frame = coboFrame->GetFrame(iFrame);
253 
254  Int_t iCobo = frame->GetCoboID();
255  Int_t iAsad = frame->GetAsadID();
256 
257  for (Int_t iAget = 0; iAget < 4; iAget++) {
258  for (Int_t iCh = 0; iCh < 68; iCh++) {
259 
260  AtPadReference PadRef = {iCobo, iAsad, iAget, iCh};
261  auto PadRefNum = fMap->GetPadNum(PadRef);
262 
263  // If this is an FPN channel and we should save it
264  if (fMap->IsFPNchannel(PadRef)) {
265  if (fSaveFPN)
266  saveFPN(*frame, PadRef, fRawEvent);
267 
268  // If this is not an FPN channel add it to the event
269  } else if (PadRefNum != -1 && fMap->IsInhibited(PadRefNum) == AtMap::InhibitType::kNone) {
270  savePad(*frame, PadRef, fRawEvent, fileIdx);
271  } // End check this is a pad to unpack (not FPN)
272  } // End loop over channel
273  } // End loop over aget
274  } // End loop over frame
275 }
276 void AtGRAWUnpacker::ProcessBasicFile(Int_t fileIdx)
277 {
278 
279  GETBasicFrame *basicFrame = fDecoder[fileIdx]->GetBasicFrame(fTargetFrameID);
280 
281  if (basicFrame == nullptr) {
282  fRawEvent->SetIsGood(kFALSE);
283  LOG(error) << "Basic frame was null! Skipping event " << fEventID;
284  return;
285  }
286  LOG(debug) << "Looking for " << fTargetFrameID << " found " << basicFrame->GetEventID();
287 
288  fCurrentEventID[fileIdx] = basicFrame->GetEventID();
289  Int_t iCobo = basicFrame->GetCoboID();
290  Int_t iAsad = basicFrame->GetAsadID();
291 
292  for (Int_t iAget = 0; iAget < 4; iAget++) {
293  for (Int_t iCh = 0; iCh < 68; iCh++) {
294  AtPadReference PadRef = {iCobo, iAsad, iAget, iCh};
295 
296  // If this is an FPN channel and we should save it
297  if (fMap->IsFPNchannel(PadRef)) {
298  if (fSaveFPN)
299  saveFPN(*basicFrame, PadRef, fRawEvent);
300  continue;
301  }
302 
303  auto PadNum = fMap->GetPadNum(PadRef);
304  if (PadNum != -1 && fMap->IsInhibited(PadNum) == AtMap::InhibitType::kNone)
305  savePad(*basicFrame, PadRef, fRawEvent, fileIdx);
306 
307  } // End loop over channel
308  } // End loop over aget
309 }
310 
311 void AtGRAWUnpacker::savePad(GETBasicFrame &frame, AtPadReference PadRef, AtRawEvent *event, Int_t fileIdx)
312 {
313  auto PadRefNum = fMap->GetPadNum(PadRef);
314  auto PadCenterCoord = fMap->CalcPadCenter(PadRefNum);
315 
316  AtPad *pad = nullptr;
317  {
318  // Ensure the threads aren't both trying to create pads at the same time
319  std::lock_guard<std::mutex> lk(fRawEventMutex);
320  pad = fRawEvent->AddPad(PadRefNum);
321  }
322 
323  pad->SetPadCoord(PadCenterCoord);
324  pad->SetValidPad(true);
325  fillPadAdc(frame, PadRef, pad);
326 
327  if (fIsSubtractFPN)
328  doFPNSubtraction(frame, *fPedestal[fileIdx], *pad, fMap->GetNearestFPN(PadRef));
329  else if (fIsBaseLineSubtraction)
330  doBaselineSubtraction(*pad);
331 
332  if (fIsSaveLastCell) {
333  saveLastCell(*pad, frame.GetLastCell(PadRef.aget));
334  }
335 }
336 
337 void AtGRAWUnpacker::fillPadAdc(GETBasicFrame &frame, AtPadReference PadRef, AtPad *pad)
338 {
339  Int_t *rawadc = frame.GetSample(PadRef.aget, PadRef.ch);
340  for (Int_t iTb = 0; iTb < 512; iTb++)
341  pad->SetRawADC(iTb, rawadc[iTb]);
342 }
343 
344 void AtGRAWUnpacker::saveFPN(GETBasicFrame &frame, AtPadReference PadRef, AtRawEvent *event)
345 {
346  AtPad *pad = nullptr;
347  {
348  std::lock_guard<std::mutex> lk(fRawEventMutex);
349  pad = fRawEvent->AddFPN(PadRef);
350  }
351 
352  pad->SetValidPad(kTRUE);
353  fillPadAdc(frame, PadRef, pad);
354 
355  if (fIsSaveLastCell)
356  saveLastCell(*pad, frame.GetLastCell(PadRef.aget));
357 }
358 
359 void AtGRAWUnpacker::saveLastCell(AtPad &pad, Double_t lastCell)
360 {
361  auto lastCellPad = dynamic_cast<AtPadValue *>(pad.AddAugment("lastCell", std::make_unique<AtPadValue>()));
362  lastCellPad->SetValue(lastCell);
363 }
364 void AtGRAWUnpacker::doFPNSubtraction(GETBasicFrame &basicFrame, AtPedestal &pedestal, AtPad &pad,
365  AtPadReference fpnRef)
366 {
367  pedestal.SubtractPedestal(512, basicFrame.GetSample(fpnRef.aget, fpnRef.ch), pad.fRawAdc.data(), pad.fAdc.data(),
369  pad.SetPedestalSubtracted(true);
370 }
371 
372 void AtGRAWUnpacker::doBaselineSubtraction(AtPad &pad)
373 {
374  auto &rawadc = pad.GetRawADC();
375  Double_t baseline = std::accumulate(rawadc.begin() + 5, rawadc.begin() + 25, 0.0) / 20.;
376  for (Int_t iTb = 0; iTb < 512; iTb++) {
377  pad.SetADC(iTb, rawadc[iTb] - baseline);
378  }
379  pad.SetPedestalSubtracted(true);
380 }
381 
382 void AtGRAWUnpacker::SetPseudoTopologyFrame(Int_t asadMask, Bool_t check)
383 {
384  for (auto &decoder : fDecoder)
385  decoder->SetPseudoTopologyFrame(asadMask, check);
386 }
387 
389 {
390  if (fNumEvents == -1 && fCheckNumEvents)
391  FindAndSetNumEvents();
392  return fNumEvents;
393 }
394 
395 AtGRAWUnpacker::CoboAndEvent AtGRAWUnpacker::GetLastEvent(Int_t fileIdx)
396 {
397  GETBasicFrame *basicFrame = fDecoder[fileIdx]->GetBasicFrame(-1);
398  bool atEnd = false;
399  CoboAndEvent coboInfo;
400  coboInfo.first = basicFrame->GetCoboID();
401  coboInfo.second = basicFrame->GetEventID();
402  while (!atEnd) {
403  basicFrame = fDecoder[fileIdx]->GetBasicFrame(-1);
404  if (basicFrame != nullptr) {
405  coboInfo.second = basicFrame->GetEventID();
406  } else {
407  // std::cout << "End of file reached!" << std::endl;
408  // std::cout << "cobo " << coboInfo.first << " asad " << asad << " final event " << coboInfo.second <<
409  // std::endl;
410  atEnd = true;
411  }
412  }
413  return coboInfo;
414 }
415 
GETCoboFrame::GetEventID
Int_t GetEventID()
Definition: GETCoboFrame.cxx:19
AtUnpacker::fMap
mapPtr fMap
Definition: AtUnpacker.h:21
AtPad.h
AtPadReference::aget
Int_t aget
Definition: AtPadReference.h:23
AtGRAWUnpacker::fNumEvents
Int_t fNumEvents
Definition: AtGRAWUnpacker.h:46
AtRawEvent.h
AtPad::fAdc
trace fAdc
Definition: AtPad.h:52
AtPad::fRawAdc
rawTrace fRawAdc
Definition: AtPad.h:51
AtPedestal.h
AtGRAWUnpacker::fDecoder
std::vector< GETDecoder2Ptr > fDecoder
Definition: AtGRAWUnpacker.h:48
GETCoboFrame::GetNumFrames
Int_t GetNumFrames()
Definition: GETCoboFrame.cxx:30
AtGRAWUnpacker::fCurrentEventID
std::vector< Int_t > fCurrentEventID
Definition: AtGRAWUnpacker.h:50
AtGRAWUnpacker::AtGRAWUnpacker
AtGRAWUnpacker(mapPtr map, Int_t numGrawFiles=4)
Definition: AtGRAWUnpacker.cxx:30
AtPad::SetValidPad
void SetValidPad(Bool_t val=kTRUE)
Definition: AtPad.h:82
AtGRAWUnpacker::fIsSeparatedData
Bool_t fIsSeparatedData
Definition: AtGRAWUnpacker.h:56
AtPadReference.h
AtGRAWUnpacker::fFileIDString
std::string fFileIDString
Definition: AtGRAWUnpacker.h:66
AtPadValue
Holds a double for an AtPad.
Definition: AtPadValue.h:20
AtGRAWUnpacker::fRawEventMutex
std::mutex fRawEventMutex
Definition: AtGRAWUnpacker.h:67
AtPad::SetPadCoord
void SetPadCoord(const XYPoint &point)
Definition: AtPad.h:87
AtUnpacker::fRawEvent
AtRawEvent * fRawEvent
Definition: AtUnpacker.h:25
AtGRAWUnpacker::FillRawEvent
virtual void FillRawEvent(AtRawEvent &event) override
Definition: AtGRAWUnpacker.cxx:106
AtGRAWUnpacker::fNumFiles
Int_t fNumFiles
Definition: AtGRAWUnpacker.h:45
AtPad::SetRawADC
void SetRawADC(const rawTrace &val)
Definition: AtPad.h:89
AtGRAWUnpacker::GetNumEvents
virtual Long64_t GetNumEvents() override
Definition: AtGRAWUnpacker.cxx:388
AtPad::SetPedestalSubtracted
void SetPedestalSubtracted(Bool_t val=kTRUE)
Definition: AtPad.h:86
GETBasicFrameHeader::GetLastCell
UInt_t GetLastCell(Int_t asadID)
Definition: GETBasicFrameHeader.cxx:81
AtTpcProtoMap
Definition: AtTpcProtoMap.h:26
GETBasicFrameHeader::GetCoboID
UInt_t GetCoboID()
Definition: GETBasicFrameHeader.cxx:35
AtPad::SetADC
void SetADC(const trace &val)
Definition: AtPad.h:91
AtUnpacker::fDataEventID
Long64_t fDataEventID
Definition: AtUnpacker.h:24
AtBaseEvent::SetIsGood
void SetIsGood(Bool_t value)
Definition: AtBaseEvent.h:61
GETBasicFrame
Definition: GETBasicFrame.h:14
AtRawEvent
Definition: AtRawEvent.h:34
AtGRAWUnpacker::fIsMutantOneRun
Bool_t fIsMutantOneRun
Definition: AtGRAWUnpacker.h:62
AtPadValue.h
AtGRAWUnpacker::fTargetFrameID
Int_t fTargetFrameID
Definition: AtGRAWUnpacker.h:69
GETBasicFrame.h
AtGRAWUnpacker::fPedestal
std::vector< AtPedestalPtr > fPedestal
Definition: AtGRAWUnpacker.h:49
AtTpcMap
Definition: AtTpcMap.h:19
GETCoboFrame::GetFrame
GETBasicFrame * GetFrame(Int_t index)
Definition: GETCoboFrame.cxx:38
AtUnpacker::fInputFileName
std::string fInputFileName
Definition: AtUnpacker.h:22
GETCoboFrame.h
GETBasicFrameHeader::GetAsadID
UInt_t GetAsadID()
Definition: GETBasicFrameHeader.cxx:39
AtPedestal
Definition: AtPedestal.h:27
AtGRAWUnpacker.h
AtMap::InhibitType::kNone
@ kNone
GETDecoder2.h
AtGRAWUnpacker::fCheckNumEvents
Bool_t fCheckNumEvents
Definition: AtGRAWUnpacker.h:63
AtGRAWUnpacker::fIsSaveLastCell
Bool_t fIsSaveLastCell
Definition: AtGRAWUnpacker.h:55
AtGRAWUnpacker::SetPseudoTopologyFrame
void SetPseudoTopologyFrame(Int_t asadMask, Bool_t check)
Definition: AtGRAWUnpacker.cxx:382
AtGRAWUnpacker
Definition: AtGRAWUnpacker.h:36
AtPadValue::SetValue
void SetValue(Double_t val)
Definition: AtPadValue.h:31
AtGRAWUnpacker::fIsBaseLineSubtraction
Bool_t fIsBaseLineSubtraction
Definition: AtGRAWUnpacker.h:58
AtRawEvent::AddPad
AtPad * AddPad(Ts &&...params)
Create a new pad in this event.
Definition: AtRawEvent.h:82
AtUnpacker::fSaveFPN
Bool_t fSaveFPN
Definition: AtUnpacker.h:27
AtGRAWUnpacker::fIsSubtractFPN
Bool_t fIsSubtractFPN
Definition: AtGRAWUnpacker.h:57
GETBasicFrame::GetSample
Int_t * GetSample(Int_t agetIdx, Int_t chIdx)
Definition: GETBasicFrame.cxx:14
mapPtr
std::shared_ptr< AtMap > mapPtr
Definition: AtUnpacker.h:17
ClassImp
ClassImp(AtGRAWUnpacker)
AtMap.h
AtRawEvent::AddFPN
AtPad * AddFPN(const AtPadReference &ref)
Create a new FPN channel.
Definition: AtRawEvent.cxx:77
AtGRAWUnpacker::SetInputFileName
virtual void SetInputFileName(std::string fileName) override
Definition: AtGRAWUnpacker.cxx:213
AtUnpacker::fEventID
Long64_t fEventID
Definition: AtUnpacker.h:23
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtGRAWUnpacker::CoboAndEvent
std::pair< int, int > CoboAndEvent
Definition: AtGRAWUnpacker.h:40
AtGRAWUnpacker::fFPNSigmaThreshold
Double_t fFPNSigmaThreshold
Definition: AtGRAWUnpacker.h:52
GETLayeredFrame
Definition: GETLayeredFrame.h:16
AtGRAWUnpacker::Init
virtual void Init() override
Definition: AtGRAWUnpacker.cxx:38
AtTpcProtoMap.h
AtPadReference::ch
Int_t ch
Definition: AtPadReference.h:24
AtPad::GetRawADC
const rawTrace & GetRawADC() const
Definition: AtPad.h:104
AtGRAWUnpacker::IsLastEvent
virtual bool IsLastEvent() override
Definition: AtGRAWUnpacker.cxx:170
AtPadBase.h
AtPadReference
Definition: AtPadReference.h:20
AtUnpacker
Definition: AtUnpacker.h:19
AtPad::AddAugment
AtPadBase * AddAugment(std::string name, std::unique_ptr< AtPadBase > augment)
Definition: AtPad.cxx:63
GETCoboFrame
Definition: GETCoboFrame.h:14
AtGRAWUnpacker::fIsData
Bool_t fIsData
Definition: AtGRAWUnpacker.h:53
AtTpcMap.h
GETBasicFrameHeader::GetEventID
UInt_t GetEventID()
Definition: GETBasicFrameHeader.cxx:31
AtPedestal::SubtractPedestal
Bool_t SubtractPedestal(Int_t numTbs, Int_t *fpn, Int_t *rawADC, Double_t *dest, Double_t rmsCut=5, Bool_t signalNegativePolarity=kFALSE, Int_t startTb=3, Int_t averageTbs=10)
Definition: AtPedestal.cxx:25