32 mOnDone = &ELinkDataShaper::onDoneLocDebug;
34 mOnDone = &ELinkDataShaper::onDoneRegDebug;
38 mOnDone = &ELinkDataShaper::onDoneLoc;
40 mOnDone = &ELinkDataShaper::onDoneReg;
43 mLocalToBCSelfTrig = mElectronicsDelay.
localToBC;
46 mLocalToBCSelfTrig -= electronicsDelay.
localToReg;
75bool ELinkDataShaper::checkLoc(
const ELinkDecoder& decoder)
78 return (decoder.
getId() == (mUniqueId & 0xF));
94 if (
ir == mExpectedFET) {
100EventType ELinkDataShaper::processCalibrationTrigger(
const InteractionRecord&
ir)
108void ELinkDataShaper::processHBTrigger(uint16_t localClock, uint8_t triggerWord)
117 mMaxBunches = localClock + 1;
120bool ELinkDataShaper::processTrigger(
const ELinkDecoder& decoder,
EventType& eventType, InteractionRecord&
ir)
125 auto localClock = decoder.getCounter();
136 if (decoder.getTriggerWord() == 0) {
138 eventType = processSelfTriggered(
ir);
146 if (decoder.getTriggerWord() & raw::sORB) {
148 processHBTrigger(localClock, decoder.getTriggerWord());
151 if (decoder.getTriggerWord() & raw::sCALIBRATE) {
153 eventType = processCalibrationTrigger(
ir);
160void ELinkDataShaper::addLoc(
const ELinkDecoder& decoder,
EventType eventType, InteractionRecord
ir, std::vector<ROBoard>&
data, std::vector<ROFRecord>& rofs)
163 auto firstEntry =
data.size();
164 data.push_back({decoder.getStatusWord(), decoder.getTriggerWord(), mUniqueId, decoder.getInputs()});
165 rofs.emplace_back(
ir, eventType, firstEntry, 1);
166 for (
int ich = 0; ich < 4; ++ich) {
167 if ((
data.back().firedChambers & (1 << ich))) {
168 data.back().patternsBP[ich] = decoder.getPattern(0, ich);
169 data.back().patternsNBP[ich] = decoder.getPattern(1, ich);
174void ELinkDataShaper::onDoneLoc(
const ELinkDecoder& decoder, std::vector<ROBoard>&
data, std::vector<ROFRecord>& rofs)
178 InteractionRecord
ir;
179 if (processTrigger(decoder, eventType,
ir) && checkLoc(decoder)) {
180 addLoc(decoder, eventType,
ir,
data, rofs);
184void ELinkDataShaper::onDoneLocDebug(
const ELinkDecoder& decoder, std::vector<ROBoard>&
data, std::vector<ROFRecord>& rofs)
188 InteractionRecord
ir;
189 processTrigger(decoder, eventType,
ir);
190 addLoc(decoder, eventType,
ir,
data, rofs);
193void ELinkDataShaper::onDoneRegDebug(
const ELinkDecoder& decoder, std::vector<ROBoard>&
data, std::vector<ROFRecord>& rofs)
197 InteractionRecord
ir;
198 processTrigger(decoder, eventType,
ir);
200 auto firstEntry =
data.size();
201 data.push_back({decoder.getStatusWord(), decoder.getTriggerWord(), mUniqueId, decoder.getInputs()});
202 rofs.emplace_back(
ir, eventType, firstEntry, 1);
Definition of the 32 Central Trigger System (CTS) Trigger Types defined in https://twiki....
Properly formats and sets the absolute timestamp of the raw data.
Header to collect LHC related constants.
ELinkDataShaper(bool isDebugMode, bool isLoc, uint8_t uniqueId, const ElectronicsDelay &electronicsDelay)
void set(uint32_t orbit, uint32_t trigger)
uint8_t getId() const
Gets the card ID.
constexpr int LHCMaxBunches
void applyElectronicsDelay(uint32_t &orbit, uint16_t &bc, int16_t delay, uint16_t maxBunches=constants::lhc::LHCMaxBunches)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
uint16_t bc
bunch crossing ID of interaction
int16_t localToReg
Delay between regional board and local board answers.
int16_t calibToFET
Delay between FET and calibration event.
int16_t localToBC
Delay between collision BC and local clock.
o2::InteractionRecord ir(0, 0)