LDMX Software
hcal::HcalRawDecoder Class Reference

Public Member Functions

 HcalRawDecoder (const std::string &name, framework::Process &process)
 
void configure (framework::config::Parameters &) override
 Callback for the EventProcessor to configure itself from the given set of parameters.
 
void beforeNewRun (ldmx::RunHeader &rh) override
 add detector name if we are reading from file
 
void produce (framework::Event &event) override
 use read function to decode data, then translate EIDs into DetIDs
 
- Public Member Functions inherited from framework::Producer
 Producer (const std::string &name, Process &process)
 Class constructor.
 
virtual void process (Event &event) final
 Processing an event for a Producer is calling produce.
 
- Public Member Functions inherited from framework::EventProcessor
 DECLARE_FACTORY (EventProcessor, EventProcessor *, const std::string &, Process &)
 declare that we have a factory for this class
 
 EventProcessor (const std::string &name, Process &process)
 Class constructor.
 
virtual ~EventProcessor ()=default
 Class destructor.
 
virtual void onNewRun (const ldmx::RunHeader &run_header)
 Callback for the EventProcessor to take any necessary action when the run being processed changes.
 
virtual void onFileOpen (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a new event input ROOT file is opened.
 
virtual void onFileClose (EventFile &event_file)
 Callback for the EventProcessor to take any necessary action when a event input ROOT file is closed.
 
virtual void onProcessStart ()
 Callback for the EventProcessor to take any necessary action when the processing of events starts, such as creating histograms.
 
virtual void onProcessEnd ()
 Callback for the EventProcessor to take any necessary action when the processing of events finishes, such as calculating job-summary quantities.
 
template<class T >
const T & getCondition (const std::string &condition_name)
 Access a conditions object for the current event.
 
TDirectory * getHistoDirectory ()
 Access/create a directory in the histogram file for this event processor to create histograms and analysis tuples.
 
void setStorageHint (framework::StorageControl::Hint hint)
 Mark the current event as having the given storage control hint from this module_.
 
void setStorageHint (framework::StorageControl::Hint hint, const std::string &purposeString)
 Mark the current event as having the given storage control hint from this module and the given purpose string.
 
int getLogFrequency () const
 Get the current logging frequency from the process.
 
int getRunNumber () const
 Get the run number from the process.
 
std::string getName () const
 Get the processor name.
 
void createHistograms (const std::vector< framework::config::Parameters > &histos)
 Internal function which is used to create histograms passed from the python configuration @parma histos vector of Parameters that configure histograms to create.
 

Private Member Functions

template<typename ReaderType >
std::map< ldmx::HcalElectronicsID, std::vector< ldmx::HgcrocDigiCollection::Sample > > read (ReaderType &reader, PolarfireEventHeader &eh)
 Assume input reader behaves like a binary data input stream where we can "pop" individual 32-bit words with operator>> and we can check if the reader is done using operator bool()
 

Private Attributes

std::string input_file_
 input file of encoded data
 
std::vector< std::string > input_names_
 input object of encoded data
 
std::string input_pass_
 input pass of creating encoded data
 
std::string output_name_
 output object to put onto event bus
 
std::string detector_name_
 the detector name if we are reading from a file
 
int roc_version_
 version of HGC ROC we are decoding
 
bool translate_eid_
 are get translating electronic IDs?
 
bool read_from_file_
 is the input_name a file or an event object
 
packing::utility::Reader file_reader_
 the file reader (if we are doing that)
 

Additional Inherited Members

- Protected Member Functions inherited from framework::EventProcessor
void abortEvent ()
 Abort the event immediately.
 
- Protected Attributes inherited from framework::EventProcessor
HistogramPool histograms_
 helper object for making and filling histograms
 
NtupleManager & ntuple_ {NtupleManager::getInstance()}
 Manager for any ntuples.
 
logging::logger the_log_
 The logger for this EventProcessor.
 

Detailed Description

Definition at line 53 of file HcalRawDecoder.h.

Constructor & Destructor Documentation

◆ HcalRawDecoder()

hcal::HcalRawDecoder::HcalRawDecoder ( const std::string & name,
framework::Process & process )
inline

Definition at line 55 of file HcalRawDecoder.h.

Base class for a module which produces a data product.
virtual void process(Event &event) final
Processing an event for a Producer is calling produce.

Member Function Documentation

◆ beforeNewRun()

void hcal::HcalRawDecoder::beforeNewRun ( ldmx::RunHeader & rh)
overridevirtual

add detector name if we are reading from file

Reimplemented from framework::EventProcessor.

Definition at line 94 of file HcalRawDecoder.cxx.

94 {
95 // if we are reading from a file, we need to provide the detector name
96 if (read_from_file_) {
98 }
99}
std::string detector_name_
the detector name if we are reading from a file
bool read_from_file_
is the input_name a file or an event object
void setDetectorName(const std::string &det)
Set the name of the detector that was used in this run.
Definition RunHeader.h:102

References detector_name_, read_from_file_, and ldmx::RunHeader::setDetectorName().

◆ configure()

void hcal::HcalRawDecoder::configure ( framework::config::Parameters & parameters)
overridevirtual

Callback for the EventProcessor to configure itself from the given set of parameters.

The parameters a processor has access to are the member variables of the python class in the sequence that has class_name equal to the EventProcessor class name.

For an example, look at MyProcessor.

Parameters
parametersParameters for configuration.

Reimplemented from framework::EventProcessor.

Definition at line 80 of file HcalRawDecoder.cxx.

80 {
81 input_file_ = ps.get<std::string>("input_file");
82 input_names_ = ps.get<std::vector<std::string>>("input_names", {});
83 input_pass_ = ps.get<std::string>("input_pass");
84 output_name_ = ps.get<std::string>("output_name");
85 roc_version_ = ps.get<int>("roc_version");
86 translate_eid_ = ps.get<bool>("translate_eid");
87 read_from_file_ = ps.get<bool>("read_from_file");
88 detector_name_ = ps.get<std::string>("detector_name");
89 if (read_from_file_) {
91 }
92}
std::string output_name_
output object to put onto event bus
std::string input_file_
input file of encoded data
packing::utility::Reader file_reader_
the file reader (if we are doing that)
std::vector< std::string > input_names_
input object of encoded data
bool translate_eid_
are get translating electronic IDs?
int roc_version_
version of HGC ROC we are decoding
std::string input_pass_
input pass of creating encoded data
void open(const std::string &file_name)
Open a file with this reader.
Definition Reader.h:36

References detector_name_, file_reader_, framework::config::Parameters::get(), input_file_, input_names_, input_pass_, packing::utility::Reader::open(), output_name_, read_from_file_, roc_version_, and translate_eid_.

◆ produce()

void hcal::HcalRawDecoder::produce ( framework::Event & event)
overridevirtual

use read function to decode data, then translate EIDs into DetIDs

Translation

Now the HgcrocDigiCollection::Sample class handles the unpacking of individual samples; however, we still need to translate electronic IDs into detector IDs.

DO NOTHING skip hits_ where the EID aren't in the detector mapping no zero supp during test beam on the front-end, so channels that aren't connected to anything are still being readout.

no EID translation, just add the digis to the digi collection with their raw electronic ID TODO: remove this, we shouldn't be able to get past the decoding stage without translating the EID into a detector ID to avoid confusion in recon

Implements framework::Producer.

Definition at line 101 of file HcalRawDecoder.cxx.

101 {
103 std::vector<ldmx::HgcrocDigiCollection::Sample>>
104 eid_to_samples;
105 PolarfireEventHeader eh;
106 if (read_from_file_) {
107 if (!file_reader_ or file_reader_.eof()) return;
108 eid_to_samples = this->read(file_reader_, eh);
109 } else {
110 for (const auto& name : input_names_) {
111 hcal::utility::Reader bus_reader(
112 event.getCollection<uint8_t>(name, input_pass_));
113 auto single_pf_samples = this->read(bus_reader, eh);
114 for (const auto& [id, samples] : single_pf_samples) {
115 eid_to_samples[id] = samples;
116 }
117 }
118 }
119
120 eh.board(event, output_name_);
121
123 // assume all channels have same number of samples
124 digis.setNumSamplesPerDigi(eid_to_samples.begin()->second.size());
125 digis.setSampleOfInterestIndex(0); // TODO configurable
127 if (translate_eid_) {
135#ifdef DEBUG
136 std::cout << "Translating EIDs into DetIDs. Printing skipped EIDs..."
137 << std::endl;
138#endif
139 auto detmap{
141 for (auto const& [eid, digi] : eid_to_samples) {
142 // The electronics map returns an empty ID of the correct
143 // type when the electronics ID is not found.
144 // need to check if the electronics ID exists
145 // TODO: do we want to end processing if this happens?
146 if (detmap.exists(eid)) {
147 uint32_t did_raw = detmap.get(eid).raw();
148 digis.addDigi(did_raw, digi);
149 } else {
156#ifdef DEBUG
157 std::cout << "EID(" << eid.fiber() << "," << eid.elink() << ","
158 << eid.channel() << ") ";
159 for (auto& s : digi) std::cout << debug::hex(s.raw()) << " ";
160 std::cout << std::endl;
161#endif
162 }
163 }
164 } else {
172 for (auto const& [eid, digi] : eid_to_samples) {
173 digis.addDigi(eid.raw(), digi);
174 }
175 }
176
177#ifdef DEBUG
178 std::cout << "adding " << digis.getNumDigis() << " digis each with "
179 << digis.getNumSamplesPerDigi() << " samples to event bus"
180 << std::endl;
181#endif
182 event.add(output_name_, digis);
183 return;
184} // produce
const T & getCondition(const std::string &condition_name)
Access a conditions object for the current event.
const std::vector< ContentType > & getCollection(const std::string &collectionName, const std::string &passName) const
Get a collection (std::vector) of objects from the event bus.
Definition Event.h:409
static constexpr const char * CONDITIONS_OBJECT_NAME
The name of the EID <-> DetID map for the ECal.
std::map< ldmx::HcalElectronicsID, std::vector< ldmx::HgcrocDigiCollection::Sample > > read(ReaderType &reader, PolarfireEventHeader &eh)
Assume input reader behaves like a binary data input stream where we can "pop" individual 32-bit word...
Read out 32-bit words from a 8-bit buffer.
Identifies a location in the Hcal readout chain.
Represents a collection of the digi hits readout by an HGCROC.
unsigned int getNumSamplesPerDigi() const
Get number of samples per digi.
void setNumSamplesPerDigi(unsigned int n)
Set number of samples for each digi.
void setSampleOfInterestIndex(unsigned int n)
Set index of sample of interest.
void setVersion(int v)
Set the version of the ROC we have read.
void addDigi(unsigned int id, const std::vector< Sample > &digi)
Add samples to collection.
unsigned int getNumDigis() const
Get total number of digis.
bool eof()
check if file is done
Definition Reader.h:217

References ldmx::HgcrocDigiCollection::addDigi(), hcal::PolarfireEventHeader::board(), hcal::HcalDetectorMap::CONDITIONS_OBJECT_NAME, packing::utility::Reader::eof(), file_reader_, framework::Event::getCollection(), framework::EventProcessor::getCondition(), ldmx::HgcrocDigiCollection::getNumDigis(), ldmx::HgcrocDigiCollection::getNumSamplesPerDigi(), input_names_, input_pass_, output_name_, read(), read_from_file_, roc_version_, ldmx::HgcrocDigiCollection::setNumSamplesPerDigi(), ldmx::HgcrocDigiCollection::setSampleOfInterestIndex(), ldmx::HgcrocDigiCollection::setVersion(), and translate_eid_.

◆ read()

template<typename ReaderType >
std::map< ldmx::HcalElectronicsID, std::vector< ldmx::HgcrocDigiCollection::Sample > > hcal::HcalRawDecoder::read ( ReaderType & reader,
PolarfireEventHeader & eh )
inlineprivate

Assume input reader behaves like a binary data input stream where we can "pop" individual 32-bit words with operator>> and we can check if the reader is done using operator bool()

Note: Contains quite a lot of debug details and variables that aren't actually used but should be kept around. Could possibly be cleaned up at some point but for now, best to leave alone

Static parameters depending on ROC version

words for reading and decoding

Decode event header

For the time being, the number of sample lengths is fixed to make the firmware for DMA readout simpler. This means we readout the leftover dummy words to move the pointer on the reader.

extended event header in version 2

Re-sort the data from grouped by bunch to by channel

The readout chip streams the data off of it, so it doesn't have time to re-group the signals across multiple bunches (samples) by their channel ID. We need to do that here.

Decode Bunch Header We have a few words of header material before the actual data. This header material is assumed to be encoded as in Table 3 of the DAQ specs.

<name> (bits)

VERSION (4) | FPGA_ID (8) | NLINKS (6) | 00 | LEN (12) BX ID (12) | RREQ (10) | OR (10) RID ok (1) | CRC ok (1) | LEN3 (6) | RID ok (1) | CRC ok (1) | LEN2 (6) | RID ok (1) | CRC ok (1) | LEN1 (6) | RID ok (1) | CRC ok (1) | LEN0 (6) ... other listing of links ...

Decode Each Link in Sequence Now we should be decoding each link serially where each link was encoded as in Table 4 of the DAQ specs

ROC_ID (16) | CRC ok (1) | 0 (7) | RO Map (8) RO Map (32)

If minimum length of 2 is not written for this link, assume it went down and skip

Special "Header" Word from ROC

version 3: 0101 | BXID (12) | RREQ (6) | OR (3) | HE (3) | 0101

version 2: 10101010 | BXID (12) | WADD (9) | 1010

Common Mode Channels 10 | 0000000000 | Common Mode ADC 0 (10) | Common Mode ADC 1 (10)

DAQ Channels

The HGC ROC has some odd behavior in terms of reading out the different channels.

  • extra header word in row j = 0
  • common mode channel in row (j) number 19 or 1 (depending on the version)
  • calib channel in row j = 20 This introduces a special shift for the channel number to "align" with the range 0-35 per link.

    polarfire fpga = fpga readout roc = i_link / 2 // integer division channel = j - 1 - (j > common_mode_channel)*1 - (j > calib_channel)*1

Definition at line 77 of file HcalRawDecoder.h.

77 {
81 static const unsigned int common_mode_channel = roc_version_ == 2 ? 19 : 1;
82 static const unsigned int calib_channel = 20;
84 static uint32_t head1, head2, w;
85
86 // special header words not counted in event length
87 do {
88 reader >> head1;
89 } while (head1 != 0xbeef2021 and head1 != 0xbeef2022);
90
94 long int eventlen;
95 long int i_event{0};
96 /* whole event header word looks like
97 *
98 * VERSION (4) | FPGA ID (8) | NSAMPLES (4) | LEN (16)
99 */
100 reader >> head1;
101 i_event++;
102
103 eh.version_ = (head1 >> 28) & packing::utility::MASK<4>;
104 eh.fpga_ = (head1 >> 20) & packing::utility::MASK<8>;
105 eh.nsamples_ = (head1 >> 16) & packing::utility::MASK<4>;
106 eventlen = head1 & packing::utility::MASK<16>;
107 if (eh.version_ == 1u) {
108 // eventlen is 32-bit words in event
109 // do nothing here
110 } else if (eh.version_ == 2u) {
111 // eventlen is 64-bit words in event,
112 // need to multiply by 2 to get actual 32-bit event length
113 eventlen *= 2;
114 // and subtract off the special header word above
115 eventlen -= 1;
116 } else {
117 EXCEPTION_RAISE(
118 "VersMis",
119 "HcalRawDecoder only knows version 1 and 2 of DAQ format.");
120 }
121 // sample counters
122 int n_words{0};
123 std::vector<uint32_t> length_per_sample(eh.nsamples_, 0);
124 for (uint32_t i_sample{0}; i_sample < eh.nsamples_; i_sample++) {
125 if (i_sample % 2 == 0) {
126 n_words++;
127 reader >> w;
128 i_event++;
129 }
130 uint32_t shift_in_word = 16 * (i_sample % 2);
131 length_per_sample[i_sample] =
132 (w >> shift_in_word) & packing::utility::MASK<12>;
133 }
134
135 if (eh.version_ == 2) {
141 for (int i_word{n_words}; i_word < 8; i_word++) {
142 reader >> head1;
143 i_event++;
144 }
145
149 reader >> head1;
150 i_event++;
151 eh.spill_ = ((head1 >> 12) & 0xfff);
152 eh.bunch_ = (head1 & 0xfff);
153 reader >> head1;
154 i_event++;
155 eh.ticks_ = head1;
156 reader >> head1;
157 i_event++;
158 eh.number_ = head1;
159 reader >> head1;
160 i_event++;
161 eh.run_ = (head1 & 0xFFF);
162 eh.dd_ = (head1 >> 23) & 0x1F;
163 eh.mm_ = (head1 >> 28) & 0xF;
164 eh.hh_ = (head1 >> 18) & 0x1F;
165 eh.mm_ = (head1 >> 12) & 0x3F;
166 }
167
175 // fill map of **electronic** IDs to the digis that were read out
177 std::vector<ldmx::HgcrocDigiCollection::Sample>>
178 eid_to_samples;
179 std::size_t i_sample{0};
180 while (i_event < eventlen) {
181 reader >> head1 >> head2;
182 i_event += 2;
198 packing::utility::CRC fpga_crc;
199 fpga_crc << head1;
200
201 [[maybe_unused]] uint32_t hgcroc_version =
202 (head1 >> 28) & packing::utility::MASK<4>;
203 uint32_t fpga = (head1 >> 20) & packing::utility::MASK<8>;
204 uint32_t nlinks = (head1 >> 14) & packing::utility::MASK<6>;
205 [[maybe_unused]] uint32_t len = head1 & packing::utility::MASK<12>;
206
207 fpga_crc << head2;
208
209 [[maybe_unused]] uint32_t bx_id =
210 (head2 >> 20) & packing::utility::MASK<12>;
211 [[maybe_unused]] uint32_t rreq =
212 (head2 >> 10) & packing::utility::MASK<10>;
213 [[maybe_unused]] uint32_t orbit = head2 & packing::utility::MASK<10>;
214
215 std::vector<uint32_t> length_per_link(nlinks, 0);
216 for (uint32_t i_link{0}; i_link < nlinks; i_link++) {
217 if (i_link % 4 == 0) {
218 i_event++;
219 reader >> w;
220 fpga_crc << w;
221 }
222 uint32_t shift_in_word = 8 * (i_link % 4);
223 [[maybe_unused]] bool rid_ok =
224 ((w >> (shift_in_word + 7)) & packing::utility::MASK<1>) == 1;
225 [[maybe_unused]] bool cdc_ok =
226 ((w >> (shift_in_word + 6)) & packing::utility::MASK<1>) == 1;
227 length_per_link[i_link] =
228 (w >> shift_in_word) & packing::utility::MASK<6>;
229 }
230
239 eh.good_bxheader_.resize(nlinks);
240 eh.good_trailer_.resize(nlinks);
241 for (uint32_t i_link{0}; i_link < nlinks; i_link++) {
246 if (length_per_link.at(i_link) < 2) {
247 continue;
248 }
249 // move on from last word counting links or previous link
250 packing::utility::CRC link_crc;
251 i_event++;
252 reader >> w;
253 fpga_crc << w;
254 link_crc << w;
255 [[maybe_unused]] uint32_t roc_id =
256 (w >> 16) & packing::utility::MASK<16>;
257 [[maybe_unused]] bool crc_ok =
258 ((w >> 15) & packing::utility::MASK<1>) == 1;
259
260 // get readout map from the last 8 bits of this word
261 // and the entire next word
262 std::bitset<40> ro_map = w & packing::utility::MASK<8>;
263 ro_map <<= 32;
264 i_event++;
265 reader >> w;
266 fpga_crc << w;
267 link_crc << w;
268 ro_map |= w;
269 // loop through channels on this link,
270 // since some channels may have been suppressed because of low
271 // amplitude the channel ID is not the same as the index it
272 // is listed in.
273 int j{-1};
274 for (uint32_t i_word{2}; i_word < length_per_link.at(i_link);
275 i_word++) {
276 // skip zero-suppressed channel IDs
277 do {
278 j++;
279 } while (j < 40 and not ro_map.test(j));
280
281 // next word is this channel
282 i_event++;
283 reader >> w;
284 fpga_crc << w;
285
286 if (j == 0) {
295 link_crc << w;
296 // v2
297 eh.good_bxheader_[i_link] = ((w & 0xff000000) == 0xaa000000);
298 // v3
299 //
300 // Shadows a previous declaration but is never used so renamed here
301 [[maybe_unused]] uint32_t v3_bx_id =
302 (w >> 16) & packing::utility::MASK<12>;
303 [[maybe_unused]] uint32_t short_event =
304 (w >> 10) & packing::utility::MASK<6>;
305 [[maybe_unused]] uint32_t short_orbit =
306 (w >> 7) & packing::utility::MASK<3>;
307 [[maybe_unused]] uint32_t hamming_errs =
308 (w >> 4) & packing::utility::MASK<3>;
309 } else if (j == common_mode_channel) {
313 link_crc << w;
314 } else if (j == calib_channel) {
315 // calib channel
316 link_crc << w;
317 } else if (j == 39) {
318 // trailer on each link added by ROC
319 // ROC v2 - IDLE word
320 // ROC v3 - CRC checksum
321 if (roc_version_ == 2) {
322 bool good_idle = (w == 0xaccccccc);
323 eh.good_trailer_[i_link] = good_idle;
324 } else {
325 bool good_crc = (link_crc.get() == w);
326 eh.good_trailer_[i_link] = good_crc;
327 }
328 /*
329 if (roc_version_ > 2 and link_crc.get() != w) {
330 EXCEPTION_RAISE("BadCRC",
331 "Our calculated link checksum doesn't match the "
332 "one from raw data.");
333 }
334 */
335 } else {
337
338 link_crc << w;
354 ldmx::HcalElectronicsID eid(fpga, i_link,
355 j - 1 - 1 * (j > common_mode_channel) -
356 1 * (j > calib_channel));
357 // copy data into EID->sample map
358 eid_to_samples[eid].emplace_back(w);
359 } // type of channel
360 } // loop over channels (j in Table 4)
361 } // loop over links
362
363 // another CRC checksum from FPGA
364 i_event++;
365 reader >> w;
366 [[maybe_unused]] uint32_t crc = w;
367 /* TODO
368 * fix calculation of FPGA checksum
369 * I can't figure out why it isn't matching, but there
370 * is definitely a word here where the FPGA checksum would be.
371 if (fpga_crc.get() != crc) {
372 EXCEPTION_RAISE(
373 "BadCRC",
374 "Our calculated FPGA checksum doesn't match the one read in.");
375 }
376 */
377 // padding to reach 64-bit boundary in version 2
378 if (eh.version_ == 2u and length_per_sample.at(i_sample) % 2 == 1) {
379 i_event++;
380 reader >> head1;
381 }
382 i_sample++;
383 }
384
385 if (eh.version_ == 1u) {
386 // special footer words
387 reader >> head1 >> head2;
388 }
389
390 return eid_to_samples;
391 }
The HGC ROC and FPGA use a CRC checksum to double check that the data transfer has been done correctl...
Definition CRC.h:51
uint32_t get()
Get the calculate checksum from the calculator.
Definition CRC.h:111

References hcal::PolarfireEventHeader::bunch_, hcal::PolarfireEventHeader::dd_, hcal::PolarfireEventHeader::fpga_, packing::utility::CRC::get(), hcal::PolarfireEventHeader::good_bxheader_, hcal::PolarfireEventHeader::good_trailer_, hcal::PolarfireEventHeader::hh_, hcal::PolarfireEventHeader::mm_, hcal::PolarfireEventHeader::nsamples_, hcal::PolarfireEventHeader::number_, roc_version_, hcal::PolarfireEventHeader::run_, hcal::PolarfireEventHeader::spill_, hcal::PolarfireEventHeader::ticks_, and hcal::PolarfireEventHeader::version_.

Referenced by produce().

Member Data Documentation

◆ detector_name_

std::string hcal::HcalRawDecoder::detector_name_
private

the detector name if we are reading from a file

Definition at line 403 of file HcalRawDecoder.h.

Referenced by beforeNewRun(), and configure().

◆ file_reader_

packing::utility::Reader hcal::HcalRawDecoder::file_reader_
private

the file reader (if we are doing that)

Definition at line 413 of file HcalRawDecoder.h.

Referenced by configure(), and produce().

◆ input_file_

std::string hcal::HcalRawDecoder::input_file_
private

input file of encoded data

Definition at line 395 of file HcalRawDecoder.h.

Referenced by configure().

◆ input_names_

std::vector<std::string> hcal::HcalRawDecoder::input_names_
private

input object of encoded data

Definition at line 397 of file HcalRawDecoder.h.

Referenced by configure(), and produce().

◆ input_pass_

std::string hcal::HcalRawDecoder::input_pass_
private

input pass of creating encoded data

Definition at line 399 of file HcalRawDecoder.h.

Referenced by configure(), and produce().

◆ output_name_

std::string hcal::HcalRawDecoder::output_name_
private

output object to put onto event bus

Definition at line 401 of file HcalRawDecoder.h.

Referenced by configure(), and produce().

◆ read_from_file_

bool hcal::HcalRawDecoder::read_from_file_
private

is the input_name a file or an event object

Definition at line 409 of file HcalRawDecoder.h.

Referenced by beforeNewRun(), configure(), and produce().

◆ roc_version_

int hcal::HcalRawDecoder::roc_version_
private

version of HGC ROC we are decoding

Definition at line 405 of file HcalRawDecoder.h.

Referenced by configure(), produce(), and read().

◆ translate_eid_

bool hcal::HcalRawDecoder::translate_eid_
private

are get translating electronic IDs?

Definition at line 407 of file HcalRawDecoder.h.

Referenced by configure(), and produce().


The documentation for this class was generated from the following files: