/home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/ds/include/RAT/DS/EV.hh Source File

Ratpac-two: /home/docs/checkouts/readthedocs.org/user_builds/ratpac/checkouts/latest/src/ds/include/RAT/DS/EV.hh Source File
Ratpac-two
EV.hh
1 
11 #ifndef __RAT_DS_EV__
12 #define __RAT_DS_EV__
13 
14 // Clang 5.0 headers confuse rootcint...
15 #ifdef __MAKECINT__
16 #define __signed signed
17 #endif
18 
19 #include <TObject.h>
20 #include <TTimeStamp.h>
21 
22 #include <RAT/DS/Digit.hh>
23 #include <RAT/DS/DigitPMT.hh>
24 #include <RAT/DS/FitResult.hh>
25 #include <RAT/DS/LAPPD.hh>
26 #include <RAT/DS/PMT.hh>
27 #include <limits>
28 #include <vector>
29 
30 namespace RAT {
31 namespace DS {
32 
33 class EV : public TObject {
34  public:
35  EV() : TObject() {}
36  virtual ~EV() {}
37 
39  virtual Int_t GetID() const { return id; }
40  virtual void SetID(Int_t _id) { id = _id; }
41 
43  virtual TTimeStamp GetUTC() const { return utc; }
44  virtual void SetUTC(const TTimeStamp &_utc) { utc = _utc; }
45 
47  virtual uint64_t GetTriggerWord() const { return trigger_word; }
48  virtual void SetTriggerWord(const uint64_t &_trigger_word) { trigger_word = _trigger_word; }
49 
51  virtual PMT *GetOrCreatePMT(Int_t id) {
52  pmt[id].SetID(id);
53  return &pmt[id];
54  }
55  virtual const PMT *GetPMT(Int_t id) const {
56  auto it = pmt.find(id);
57  if (it != pmt.end()) {
58  return &it->second;
59  }
60  return nullptr;
61  }
62 
63  const std::vector<Int_t> GetAllPMTIDs() const {
64  std::vector<Int_t> result;
65  for (auto const &kv : pmt) {
66  result.push_back(kv.first);
67  }
68  return result;
69  }
70  virtual Int_t GetPMTCount() const { return pmt.size(); }
71  virtual void PrunePMT() { pmt.clear(); }
72 
74  virtual DigitPMT *GetOrCreateDigitPMT(Int_t id) {
75  digitpmt[id].SetID(id);
76  return &digitpmt[id];
77  }
78  virtual const DigitPMT *GetDigitPMT(Int_t id) const {
79  auto it = digitpmt.find(id);
80  if (it != digitpmt.end()) {
81  return &it->second;
82  }
83  return nullptr;
84  }
85  const std::vector<Int_t> GetAllDigitPMTIDs() const {
86  std::vector<Int_t> result;
87  for (auto const &kv : digitpmt) {
88  result.push_back(kv.first);
89  }
90  return result;
91  }
92  virtual size_t EraseDigitPMT(Int_t id) {
93  size_t n_erased = digitpmt.erase(id);
94  return n_erased;
95  }
96  virtual Int_t GetDigitPMTCount() const { return digitpmt.size(); }
97  virtual void PruneDigitPMT() { digitpmt.clear(); }
98 
99  const std::vector<Int_t> GetAllCleanedDigitPMTIDs() const {
100  std::vector<Int_t> result;
101  for (std::pair<Int_t, DigitPMT> kv : digitpmt) {
102  DigitPMT::HCMask hit_cleaning_mask = kv.second.GetHitCleaningMask();
103  if (hit_cleaning_mask == 0) {
104  result.push_back(kv.first);
105  }
106  }
107  return result;
108  }
109 
110  // TODO: Implemetation for PMT class
111  const std::vector<Int_t> GetAllCleanedPMTIDs() const {
112  throw std::logic_error("EV::GetAllCleanedPMTIDs is not yet implemented.");
113  }
114 
116  virtual Int_t Nhits() const { return GetPMTCount(); }
117  virtual Int_t NhitsCleaned() const { return GetAllCleanedPMTIDs().size(); }
118 
120  virtual Int_t DigitNhits() const {
121  int result = 0;
122  for (std::pair<Int_t, DigitPMT> kv : digitpmt) {
123  if (kv.second.GetNCrossings() > 0) {
124  result++;
125  }
126  }
127  return result;
128  }
129  virtual Int_t DigitNhitsCleaned() const {
130  int result = 0;
131  for (std::pair<Int_t, DigitPMT> kv : digitpmt) {
132  DigitPMT::HCMask hit_cleaning_mask = kv.second.GetHitCleaningMask();
133  if (kv.second.GetNCrossings() > 0 && hit_cleaning_mask == 0) {
134  result++;
135  }
136  }
137  return result;
138  }
139 
141  virtual LAPPD *GetLAPPD(Int_t i) { return &lappd[i]; }
142  virtual Int_t GetLAPPDCount() const { return lappd.size(); }
143  virtual LAPPD *AddNewLAPPD() {
144  lappd.resize(lappd.size() + 1);
145  return &lappd.back();
146  }
147  virtual void PruneLAPPD() { lappd.resize(0); }
148 
150  Double_t GetDeltaT() const { return deltat; }
151  void SetDeltaT(Double_t _deltat) { deltat = _deltat; }
152 
153  void SetCalibratedTriggerTime(Double_t _calibratedTriggerTime) { calibratedTriggerTime = _calibratedTriggerTime; }
154  Double_t GetCalibratedTriggerTime() const { return calibratedTriggerTime; }
155 
157  Double_t GetTotalCharge() const { return qTotal; }
158  void SetTotalCharge(Double_t _qTotal) { qTotal = _qTotal; }
159 
161  virtual std::vector<FitResult *> GetFitResults() { return fitResults; }
162  virtual void AddFitResult(FitResult *fit) { fitResults.push_back(fit); }
163  virtual void PruneFitResults() { fitResults.resize(0); }
164 
166  virtual std::vector<Classifier *> GetClassifierResults() { return classifierResults; }
167  virtual void AddClassifierResult(Classifier *clf) { classifierResults.push_back(clf); }
168  virtual void PruneClassifierResults() { classifierResults.resize(0); }
169 
171  virtual void SetDigitizer(const Digit &dig) { digitizer.push_back(dig); }
172 
174  virtual Digit &GetDigitizer() { return digitizer.at(0); };
175 
177  virtual bool DigitizerExists() const { return !digitizer.empty(); }
178 
179  // Prune digitizer information
180  virtual void PruneDigitizer() { digitizer.resize(0); }
181 
183  virtual uint64_t GetEventCleaningWord() const { return eventCleaningWord; }
184  virtual void SetEventCleaningWord(uint64_t _eventCleaningWord) { eventCleaningWord = _eventCleaningWord; }
185  virtual void SetEventCleaningBit(uint8_t bit_position, bool value = true) {
186  if (bit_position >= std::numeric_limits<uint64_t>::digits) {
187  warn << "Tried to set bit out of event cleaning bit mask range, ignoring." << newline;
188  return;
189  }
190  eventCleaningWord = (eventCleaningWord & ~(1ULL << bit_position)) | (value << bit_position);
191  }
192  virtual bool GetEventCleaningBit(uint8_t bit_position) const {
193  if (bit_position >= std::numeric_limits<uint64_t>::digits) {
194  warn << "Tried to get bit out of event cleaning bit mask range, ignoring." << newline;
195  return false;
196  }
197  return (eventCleaningWord >> bit_position) & 0x1;
198  }
199 
200  ClassDef(EV, 6);
201 
202  protected:
203  Int_t id;
204  Double_t qTotal;
205  Double_t calibratedTriggerTime;
206  Double_t deltat;
207  TTimeStamp utc;
208  uint64_t trigger_word;
209  std::map<Int_t, PMT> pmt;
210  std::map<Int_t, DigitPMT> digitpmt;
211  std::vector<LAPPD> lappd;
212  std::vector<FitResult *> fitResults;
213  std::vector<Classifier *> classifierResults;
214  std::vector<Digit> digitizer;
215  uint64_t eventCleaningWord = 0;
216 };
217 
218 } // namespace DS
219 } // namespace RAT
220 
221 #endif
Definition: Classifier.hh:14
Definition: DigitPMT.hh:23
Definition: Digit.hh:22
Definition: EV.hh:33
virtual Digit & GetDigitizer()
Get CAEN digitizer information for this event.
Definition: EV.hh:174
virtual uint64_t GetTriggerWord() const
Definition: EV.hh:47
virtual TTimeStamp GetUTC() const
Definition: EV.hh:43
virtual LAPPD * GetLAPPD(Int_t i)
Definition: EV.hh:141
virtual Int_t GetID() const
Definition: EV.hh:39
virtual PMT * GetOrCreatePMT(Int_t id)
Definition: EV.hh:51
virtual Int_t DigitNhits() const
Definition: EV.hh:120
std::vector< Digit > digitizer
The digitizer information.
Definition: EV.hh:214
virtual uint64_t GetEventCleaningWord() const
Definition: EV.hh:183
virtual Int_t Nhits() const
Definition: EV.hh:116
virtual std::vector< FitResult * > GetFitResults()
Definition: EV.hh:161
Double_t GetTotalCharge() const
Definition: EV.hh:157
virtual void SetDigitizer(const Digit &dig)
Set CAEN digitizer information for this event.
Definition: EV.hh:171
virtual DigitPMT * GetOrCreateDigitPMT(Int_t id)
Definition: EV.hh:74
virtual bool DigitizerExists() const
Check if the digitizer exists.
Definition: EV.hh:177
Double_t GetDeltaT() const
Definition: EV.hh:150
virtual std::vector< Classifier * > GetClassifierResults()
Definition: EV.hh:166
Definition: FitResult.hh:15
Definition: LAPPD.hh:18
Definition: PMT.hh:16
Definition: CCCrossSecMessenger.hh:29