Skip to content

Commit 637ffb3

Browse files
mfasDashahor02
authored andcommitted
[EMCAL-729] Add compression of trigger bits
Reduction from 32 bit to 16 bit filtering the most relevant triggers for EMCAL. For the moment 2 triggers are propagated - Physics trigger - Calib trigger In case other triggers will be included in the compressed output, they need to be appended. In addition the unit test is adapted (proper reference, check for compressed and uncompressed bits)
1 parent e076a97 commit 637ffb3

5 files changed

Lines changed: 60 additions & 14 deletions

File tree

DataFormats/Detectors/EMCAL/include/DataFormatsEMCAL/TriggerRecord.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,27 @@ class TriggerRecord
4343

4444
void setBCData(const BCData& data) { mBCData = data; }
4545
void setTriggerBits(uint32_t triggerbits) { mTriggerBits = triggerbits; }
46+
void setTriggerBitsCompressed(uint16_t triggerbits);
4647
void setDataRange(int firstentry, int nentries) { mDataRange.set(firstentry, nentries); }
4748
void setIndexFirstObject(int firstentry) { mDataRange.setFirstEntry(firstentry); }
4849
void setNumberOfObjects(int nentries) { mDataRange.setEntries(nentries); }
4950

5051
const BCData& getBCData() const { return mBCData; }
5152
BCData& getBCData() { return mBCData; }
5253
uint32_t getTriggerBits() const { return mTriggerBits; }
54+
uint16_t getTriggerBitsCompressed() const;
5355
int getNumberOfObjects() const { return mDataRange.getEntries(); }
5456
int getFirstEntry() const { return mDataRange.getFirstEntry(); }
5557

5658
void printStream(std::ostream& stream) const;
5759

5860
private:
61+
/// \enum TriggerBitsCoded_t
62+
/// \brief Position of trigger classes in compressed format
63+
enum TriggerBitsCoded_t {
64+
PHYSTRIGGER, ///< Physics trigger
65+
CALIBTRIGGER ///< Calib trigger
66+
};
5967
BCData mBCData; /// Bunch crossing data of the trigger
6068
DataRange mDataRange; /// Index of the triggering event (event index and first entry in the container)
6169
uint32_t mTriggerBits; /// Trigger bits as from the Raw Data Header

DataFormats/Detectors/EMCAL/src/TriggerRecord.cxx

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,37 @@
1212
#include <bitset>
1313
#include <iostream>
1414
#include "DataFormatsEMCAL/TriggerRecord.h"
15+
#include "CommonConstants/Triggers.h"
1516

1617
namespace o2
1718
{
1819

1920
namespace emcal
2021
{
2122

23+
uint16_t TriggerRecord::getTriggerBitsCompressed() const
24+
{
25+
uint16_t result(0);
26+
if (mTriggerBits & o2::trigger::PhT) {
27+
result |= 1 << TriggerBitsCoded_t::PHYSTRIGGER;
28+
}
29+
if (mTriggerBits & o2::trigger::Cal) {
30+
result |= 1 << TriggerBitsCoded_t::CALIBTRIGGER;
31+
}
32+
return result;
33+
}
34+
35+
void TriggerRecord::setTriggerBitsCompressed(uint16_t triggerbits)
36+
{
37+
mTriggerBits = 0;
38+
if (triggerbits & (1 << TriggerBitsCoded_t::PHYSTRIGGER)) {
39+
mTriggerBits |= o2::trigger::PhT;
40+
}
41+
if (triggerbits & (1 << TriggerBitsCoded_t::CALIBTRIGGER)) {
42+
mTriggerBits |= o2::trigger::Cal;
43+
}
44+
}
45+
2246
void TriggerRecord::printStream(std::ostream& stream) const
2347
{
2448
stream << "Data for bc " << getBCData().bc << ", orbit " << getBCData().orbit << ", Triggers " << std::bitset<sizeof(mTriggerBits) * 8>(mTriggerBits) << ", starting from entry " << getFirstEntry() << " with " << getNumberOfObjects() << " objects";

Detectors/CTF/test/test_ctf_io_emcal.cxx

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ BOOST_AUTO_TEST_CASE(CTFTest)
4545
cells.emplace_back(tower, en, timeCell, (ChannelType_t)stat);
4646
tower += 1 + gRandom->Integer(100);
4747
}
48-
uint32_t trigBits = gRandom->Integer(0xffff); // we store only 16 bits
48+
uint32_t trigBits = gRandom->Integer(0xFFFFFFFF); // will be converted internally to uint16_t by the coder
4949
triggers.emplace_back(ir, trigBits, start, cells.size() - start);
5050
}
5151

@@ -95,8 +95,8 @@ BOOST_AUTO_TEST_CASE(CTFTest)
9595
sw.Stop();
9696
LOG(info) << "Decompressed in " << sw.CpuTime() << " s";
9797

98-
BOOST_CHECK(triggersD.size() == triggers.size());
99-
BOOST_CHECK(cellsD.size() == cells.size());
98+
BOOST_CHECK_EQUAL(triggersD.size(), triggers.size());
99+
BOOST_CHECK_EQUAL(cellsD.size(), cells.size());
100100
LOG(info) << " BOOST_CHECK triggersD.size() " << triggersD.size() << " triggers.size() " << triggers.size()
101101
<< " BOOST_CHECK(cellsD.size() " << cellsD.size() << " cells.size()) " << cells.size();
102102

@@ -106,18 +106,29 @@ BOOST_AUTO_TEST_CASE(CTFTest)
106106
LOG(debug) << " Orig.TriggerRecord " << i << " " << dor.getBCData() << " " << dor.getFirstEntry() << " " << dor.getNumberOfObjects();
107107
LOG(debug) << " Deco.TriggerRecord " << i << " " << ddc.getBCData() << " " << ddc.getFirstEntry() << " " << ddc.getNumberOfObjects();
108108

109-
BOOST_CHECK(dor.getBCData() == ddc.getBCData());
110-
BOOST_CHECK(dor.getNumberOfObjects() == ddc.getNumberOfObjects());
111-
BOOST_CHECK(dor.getFirstEntry() == ddc.getFirstEntry());
112-
BOOST_CHECK(dor.getTriggerBits() == ddc.getTriggerBits());
109+
BOOST_CHECK_EQUAL(dor.getBCData(), ddc.getBCData());
110+
BOOST_CHECK_EQUAL(dor.getNumberOfObjects(), ddc.getNumberOfObjects());
111+
BOOST_CHECK_EQUAL(dor.getFirstEntry(), ddc.getFirstEntry());
112+
BOOST_CHECK_EQUAL(dor.getTriggerBitsCompressed(), ddc.getTriggerBitsCompressed()); // Need to be compared to the filtered trigger bit set
113+
// Check for the function getTriggerBits
114+
// As the compessed version has trigger bits discarded,
115+
// reference must be constructed again from compressed
116+
// trigger bits. Otherwise the reconstructed object is
117+
// compared to the uncompressed version and the test will
118+
// obviously fail due to the bits which are removed.
119+
// Therefore a copy is needed to modify the trigger bits
120+
// storing only the compressed one
121+
auto triggerbittest = triggers[i];
122+
triggerbittest.setTriggerBitsCompressed(triggerbittest.getTriggerBitsCompressed());
123+
BOOST_CHECK_EQUAL(triggerbittest.getTriggerBits(), ddc.getTriggerBits());
113124
}
114125

115126
for (size_t i = 0; i < cells.size(); i++) {
116127
const auto& cor = cells[i];
117128
const auto& cdc = cellsD[i];
118-
BOOST_CHECK(cor.getPackedTowerID() == cdc.getPackedTowerID());
119-
BOOST_CHECK(cor.getPackedTime() == cdc.getPackedTime());
120-
BOOST_CHECK(cor.getPackedEnergy() == cdc.getPackedEnergy());
121-
BOOST_CHECK(cor.getPackedCellStatus() == cdc.getPackedCellStatus());
129+
BOOST_CHECK_EQUAL(cor.getPackedTowerID(), cdc.getPackedTowerID());
130+
BOOST_CHECK_EQUAL(cor.getPackedTime(), cdc.getPackedTime());
131+
BOOST_CHECK_EQUAL(cor.getPackedEnergy(), cdc.getPackedEnergy());
132+
BOOST_CHECK_EQUAL(cor.getPackedCellStatus(), cdc.getPackedCellStatus());
122133
}
123134
}

Detectors/EMCAL/reconstruction/include/EMCALReconstruction/CTFCoder.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ void CTFCoder::decode(const CTF::base& ec, VTRG& trigVec, VCELL& cellVec)
141141
o2::InteractionRecord ir(header.firstBC, header.firstOrbit);
142142

143143
Cell cell;
144+
TriggerRecord trg;
144145
for (uint32_t itrig = 0; itrig < header.nTriggers; itrig++) {
145146
// restore TrigRecord
146147
if (orbitInc[itrig]) { // non-0 increment => new orbit
@@ -156,8 +157,10 @@ void CTFCoder::decode(const CTF::base& ec, VTRG& trigVec, VCELL& cellVec)
156157
cellVec.emplace_back(cell);
157158
cellCount++;
158159
}
159-
uint32_t trigBits = trigger[itrig];
160-
trigVec.emplace_back(ir, trigBits, firstEntry, entries[itrig]);
160+
trg.setBCData(ir);
161+
trg.setDataRange(firstEntry, entries[itrig]);
162+
trg.setTriggerBitsCompressed(trigger[itrig]);
163+
trigVec.emplace_back(trg);
161164
}
162165
assert(cellCount == header.nCells);
163166
}

Detectors/EMCAL/reconstruction/include/EMCALReconstruction/CTFHelper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ class CTFHelper
135135
{
136136
public:
137137
using _Iter<Iter_trigger, TriggerRecord, uint16_t>::_Iter;
138-
value_type operator*() const { return uint16_t(mData[mIndex].getTriggerBits() & 0xffff); }
138+
value_type operator*() const { return mData[mIndex].getTriggerBitsCompressed(); }
139139
};
140140

141141
//_______________________________________________

0 commit comments

Comments
 (0)