ATTPCROOT  0.3.0-alpha
A ROOT-based framework for analyzing data from active target detectors
AtGRAWUnpacker.h
Go to the documentation of this file.
1 /* Unpacker for GRAW files using GETDecoder2 using unified unpacking task.
2  * GETDEcoder2 originally written by Genie Jhang. Adapted by Yassid Ayyad
3  *
4  * Designed to support unpacking of GADGETII data, but should also work for
5  * AT-TPC data. This replaced AtCore2.
6  * Current version: Adam Anthony
7  *
8  * Input is a text file with a different GRAW file on each line.
9  */
10 
11 #ifndef _ATGRAWUNPACKER_H_
12 #define _ATGRAWUNPACKER_H_
13 
14 #include "AtUnpacker.h"
15 
16 #include <Rtypes.h>
17 #include <TString.h>
18 
19 #include <memory>
20 #include <mutex>
21 #include <string>
22 #include <utility> // for pair
23 #include <vector>
24 
25 class GETLayeredFrame;
26 class GETBasicFrame;
27 class AtPedestal;
28 class AtRawEvent;
29 class GETDecoder2;
30 class TBuffer;
31 class TClass;
32 class TMemberInspector;
33 class AtPad;
34 struct AtPadReference;
35 
36 class AtGRAWUnpacker : public AtUnpacker {
37 protected:
38  using GETDecoder2Ptr = std::unique_ptr<GETDecoder2>;
39  using AtPedestalPtr = std::unique_ptr<AtPedestal>;
40  using CoboAndEvent = std::pair<int, int>;
41 
42  // Number of unique graw files (cobo or asad) to unpack.
43  // Each has its own GETDecoder2, and AtPedestal instance and we will spawn fNumFiles
44  // threads to unpack them in parallel
45  Int_t fNumFiles;
46  Int_t fNumEvents{-1};
47 
48  std::vector<GETDecoder2Ptr> fDecoder;
49  std::vector<AtPedestalPtr> fPedestal;
50  std::vector<Int_t> fCurrentEventID;
51 
52  Double_t fFPNSigmaThreshold = 5;
53  Bool_t fIsData = false;
54  Bool_t fIsNegativePolarity = true;
55  Bool_t fIsSaveLastCell = false;
57  Bool_t fIsSubtractFPN = true;
62  Bool_t fIsMutantOneRun{false};
63  Bool_t fCheckNumEvents{false};
64 
65  // String to identify which file in fInputFileName map to which fDecoder
66  std::string fFileIDString;
67  std::mutex fRawEventMutex;
68 
69  Int_t fTargetFrameID{}; // fDataEventID
70 
71 public:
72  AtGRAWUnpacker(mapPtr map, Int_t numGrawFiles = 4);
73  ~AtGRAWUnpacker() = default;
74 
75  // Getters
76  Double_t GetFPNSigmaThreshold() const { return fFPNSigmaThreshold; }
77  Bool_t GetIsPositivePolarity() const { return !fIsNegativePolarity; }
78  Bool_t GetIsSeparatedData() const { return fIsSeparatedData; }
79 
80  // Setters
81  void SetFPNSigmaThreshold(Double_t val) { fFPNSigmaThreshold = val; }
82  void SetIsPositivePolarity(Bool_t val) { fIsNegativePolarity = !val; }
83  void SetPseudoTopologyFrame(Int_t asadMask, Bool_t check);
84  void SetSaveLastCell(Bool_t val) { fIsSaveLastCell = val; }
85  void SetSubtractFPN(Bool_t val) { fIsSubtractFPN = val; }
86  void SetBaseLineSubtraction(Bool_t val) { fIsBaseLineSubtraction = val; }
87  void SetMutantOneRun(Bool_t val) { fIsMutantOneRun = val; }
89  // AtUnpacker interface
90  virtual void Init() override;
91  virtual void FillRawEvent(AtRawEvent &event) override; // Pass by ref to ensure it's a valid object
92  virtual bool IsLastEvent() override;
93  virtual void SetInputFileName(std::string fileName) override;
94  void SetInputFileName(std::string fileName, std::string fileIDString);
95 
96  virtual Long64_t GetNumEvents() override;
97 
98 private:
99  void processInputFile();
100 
101  Bool_t AddData(TString filename, Int_t fileIdx);
102 
103  void ProcessFile(Int_t fileIdx);
104  void ProcessBasicFile(Int_t fileIdx);
105  void ProcessLayeredFrame(GETLayeredFrame *layeredFrame);
106  void ProcessBasicFrame(GETBasicFrame *basicFrame);
107 
108  CoboAndEvent GetLastEvent(Int_t fileIdx);
109 
110  void doFPNSubtraction(GETBasicFrame &basicFrame, AtPedestal &pedestal, AtPad &pad, AtPadReference padRef);
111  void doBaselineSubtraction(AtPad &pad);
112  void saveFPN(GETBasicFrame &frame, AtPadReference PadRef, AtRawEvent *event);
113  void savePad(GETBasicFrame &frame, AtPadReference PadRef, AtRawEvent *event, Int_t fileIdx);
114  void fillPadAdc(GETBasicFrame &frame, AtPadReference PadRef, AtPad *pad);
115  void saveLastCell(AtPad &pad, Double_t lastCell);
116  void FindAndSetNumEvents();
117 
118  ClassDefOverride(AtGRAWUnpacker, 1)
119 };
120 
121 #endif //#ifndef _ATGRAWUNPACKER_H_
AtGRAWUnpacker::SetMutantOneRun
void SetMutantOneRun(Bool_t val)
Definition: AtGRAWUnpacker.h:87
AtGRAWUnpacker::GetIsPositivePolarity
Bool_t GetIsPositivePolarity() const
Definition: AtGRAWUnpacker.h:77
AtGRAWUnpacker::fNumEvents
Int_t fNumEvents
Definition: AtGRAWUnpacker.h:46
AtGRAWUnpacker::fDecoder
std::vector< GETDecoder2Ptr > fDecoder
Definition: AtGRAWUnpacker.h:48
AtGRAWUnpacker::SetSubtractFPN
void SetSubtractFPN(Bool_t val)
Definition: AtGRAWUnpacker.h:85
AtGRAWUnpacker::fCurrentEventID
std::vector< Int_t > fCurrentEventID
Definition: AtGRAWUnpacker.h:50
AtGRAWUnpacker::SetCheckNumEvents
void SetCheckNumEvents()
Definition: AtGRAWUnpacker.h:88
AtGRAWUnpacker::AtGRAWUnpacker
AtGRAWUnpacker(mapPtr map, Int_t numGrawFiles=4)
Definition: AtGRAWUnpacker.cxx:30
AtGRAWUnpacker::fIsSeparatedData
Bool_t fIsSeparatedData
Definition: AtGRAWUnpacker.h:56
AtGRAWUnpacker::SetIsPositivePolarity
void SetIsPositivePolarity(Bool_t val)
Definition: AtGRAWUnpacker.h:82
AtGRAWUnpacker::fFileIDString
std::string fFileIDString
Definition: AtGRAWUnpacker.h:66
AtGRAWUnpacker::fRawEventMutex
std::mutex fRawEventMutex
Definition: AtGRAWUnpacker.h:67
AtGRAWUnpacker::FillRawEvent
virtual void FillRawEvent(AtRawEvent &event) override
Definition: AtGRAWUnpacker.cxx:106
AtGRAWUnpacker::fNumFiles
Int_t fNumFiles
Definition: AtGRAWUnpacker.h:45
AtGRAWUnpacker::GetNumEvents
virtual Long64_t GetNumEvents() override
Definition: AtGRAWUnpacker.cxx:388
GETBasicFrame
Definition: GETBasicFrame.h:14
AtRawEvent
Definition: AtRawEvent.h:34
AtGRAWUnpacker::SetBaseLineSubtraction
void SetBaseLineSubtraction(Bool_t val)
Definition: AtGRAWUnpacker.h:86
AtGRAWUnpacker::fIsMutantOneRun
Bool_t fIsMutantOneRun
Definition: AtGRAWUnpacker.h:62
AtGRAWUnpacker::fTargetFrameID
Int_t fTargetFrameID
Definition: AtGRAWUnpacker.h:69
GETDecoder2
Definition: GETDecoder2.h:38
AtGRAWUnpacker::fPedestal
std::vector< AtPedestalPtr > fPedestal
Definition: AtGRAWUnpacker.h:49
AtPedestal
Definition: AtPedestal.h:27
AtGRAWUnpacker::fCheckNumEvents
Bool_t fCheckNumEvents
Definition: AtGRAWUnpacker.h:63
AtGRAWUnpacker::fIsSaveLastCell
Bool_t fIsSaveLastCell
Definition: AtGRAWUnpacker.h:55
AtGRAWUnpacker::SetSaveLastCell
void SetSaveLastCell(Bool_t val)
Definition: AtGRAWUnpacker.h:84
AtGRAWUnpacker::SetPseudoTopologyFrame
void SetPseudoTopologyFrame(Int_t asadMask, Bool_t check)
Definition: AtGRAWUnpacker.cxx:382
AtUnpacker.h
AtGRAWUnpacker::~AtGRAWUnpacker
~AtGRAWUnpacker()=default
AtGRAWUnpacker
Definition: AtGRAWUnpacker.h:36
AtGRAWUnpacker::AtPedestalPtr
std::unique_ptr< AtPedestal > AtPedestalPtr
Definition: AtGRAWUnpacker.h:39
AtGRAWUnpacker::fIsBaseLineSubtraction
Bool_t fIsBaseLineSubtraction
Definition: AtGRAWUnpacker.h:58
AtGRAWUnpacker::SetFPNSigmaThreshold
void SetFPNSigmaThreshold(Double_t val)
Definition: AtGRAWUnpacker.h:81
AtGRAWUnpacker::fIsNegativePolarity
Bool_t fIsNegativePolarity
Definition: AtGRAWUnpacker.h:54
AtGRAWUnpacker::fIsSubtractFPN
Bool_t fIsSubtractFPN
Definition: AtGRAWUnpacker.h:57
mapPtr
std::shared_ptr< AtMap > mapPtr
Definition: AtUnpacker.h:17
AtGRAWUnpacker::SetInputFileName
virtual void SetInputFileName(std::string fileName) override
Definition: AtGRAWUnpacker.cxx:213
AtPad
Container class for AtPadBase objects.
Definition: AtPad.h:38
AtGRAWUnpacker::CoboAndEvent
std::pair< int, int > CoboAndEvent
Definition: AtGRAWUnpacker.h:40
AtGRAWUnpacker::GETDecoder2Ptr
std::unique_ptr< GETDecoder2 > GETDecoder2Ptr
Definition: AtGRAWUnpacker.h:38
AtGRAWUnpacker::fFPNSigmaThreshold
Double_t fFPNSigmaThreshold
Definition: AtGRAWUnpacker.h:52
GETLayeredFrame
Definition: GETLayeredFrame.h:16
AtGRAWUnpacker::Init
virtual void Init() override
Definition: AtGRAWUnpacker.cxx:38
AtGRAWUnpacker::GetFPNSigmaThreshold
Double_t GetFPNSigmaThreshold() const
Definition: AtGRAWUnpacker.h:76
AtGRAWUnpacker::GetIsSeparatedData
Bool_t GetIsSeparatedData() const
Definition: AtGRAWUnpacker.h:78
AtGRAWUnpacker::IsLastEvent
virtual bool IsLastEvent() override
Definition: AtGRAWUnpacker.cxx:170
AtPadReference
Definition: AtPadReference.h:20
AtUnpacker
Definition: AtUnpacker.h:19
AtGRAWUnpacker::fIsData
Bool_t fIsData
Definition: AtGRAWUnpacker.h:53