Skip to content

Commit 5819a48

Browse files
wpierozakwpierozak
authored andcommitted
Implemented SwTrigger bit in FDD recpoints, bumped RecPoints class version to 4
1 parent ad6ce10 commit 5819a48

4 files changed

Lines changed: 48 additions & 43 deletions

File tree

‎DataFormats/Detectors/FIT/FDD/include/DataFormatsFDD/FDDRecoConfig.h‎

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,11 @@ struct FDDRecoConfig : o2::conf::ConfigurableParamHelper<FDDRecoConfig> {
3232

3333
uint8_t TriggerBitsValidationMask = 0;
3434
uint8_t TriggerBitsValid = 0;
35-
bool areTriggerBitsGood(uint8_t flags) const
35+
bool areTriggerBitsGood(uint8_t flags) const
3636
{
3737
return (flags & TriggerBitsValidationMask) == TriggerBitsValid;
3838
}
3939

40-
4140
int16_t CollisionTimeAmpltudeUpper = 4096;
4241
int16_t CollisionTimeAmplitudeLower = 0;
4342
int16_t CollisionTimeTimeLower = -2050;
@@ -49,9 +48,9 @@ struct FDDRecoConfig : o2::conf::ConfigurableParamHelper<FDDRecoConfig> {
4948
{
5049
return (flags & CollisionTimeValidPmInputFlagMask) == CollisionTimeValidPmInputFlags;
5150
}
52-
53-
float SwTriggerTimeLowThreshold= -1.25;
54-
float SwTriggerTimeHighThreshold= 1.25;
51+
52+
float SwTriggerTimeLowThreshold = -1.25;
53+
float SwTriggerTimeHighThreshold = 1.25;
5554
float SwTriggerAmplitudeLowThreshold = 0.0;
5655
float SwTriggerAmplitudeHighThreshold = 4096.0;
5756
float SwTriggerTimeDiffMin = -1.25;

‎DataFormats/Detectors/FIT/FDD/include/DataFormatsFDD/RecPoint.h‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,17 @@ class RecPoint
5353
public:
5454
enum TimeTypeIndex : int { TimeA,
5555
TimeC };
56-
enum ETriggerBits { kSwTrigger = 7 };
56+
enum ETriggerBits { kSwVtxTrigger = 7 };
5757
RecPoint() = default;
5858
RecPoint(const std::array<int, 2>& collisiontime, int first, int ne,
59-
o2::InteractionRecord iRec, o2::fdd::Triggers triggers)
59+
o2::InteractionRecord iRec, o2::fdd::Triggers triggers, bool swVertexTrigger)
6060
: mCollisionTimePs(collisiontime)
6161
{
6262
mRef.setFirstEntry(first);
6363
mRef.setEntries(ne);
6464
mIntRecord = iRec;
6565
mTriggers = triggers;
66+
updateTriggers(swVertexTrigger);
6667
}
6768
~RecPoint() = default;
6869

@@ -87,12 +88,20 @@ class RecPoint
8788
bool operator==(const RecPoint&) const = default;
8889

8990
private:
91+
void updateTriggers(bool swVertexTrigger)
92+
{
93+
auto [triggerBits, technicalWords] = o2::fit::Triggers::parseDigitTriggerWord(mTriggers.getTriggersignals(), true);
94+
triggerBits |= (uint8_t(swVertexTrigger) << kSwVtxTrigger);
95+
mTriggers.setTriggers(triggerBits);
96+
mTechnicalWords = technicalWords;
97+
}
9098
o2::dataformats::RangeReference<int, int> mRef;
9199
o2::InteractionRecord mIntRecord;
92-
o2::fdd::Triggers mTriggers; // pattern of triggers in this BC
100+
o2::fdd::Triggers mTriggers; // pattern of triggers in this BC
101+
uint8_t mTechnicalWords{0};
93102
std::array<int, 2> mCollisionTimePs = {sDummyCollissionTime, sDummyCollissionTime}; // in picoseconds
94103

95-
ClassDefNV(RecPoint, 3);
104+
ClassDefNV(RecPoint, 4);
96105
};
97106
} // namespace fdd
98107
} // namespace o2

‎Detectors/FIT/FDD/reconstruction/include/FDDReconstruction/Reconstructor.h‎

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,41 +41,43 @@ class Reconstructor
4141
}
4242

4343
private:
44-
bool isInAmplitudeWindow(int16_t amplitude) {
44+
bool isInAmplitudeWindow(int16_t amplitude)
45+
{
4546
return amplitude >= FDDRecoConfig::Instance().ChannelAmplitudeLower && amplitude <= FDDRecoConfig::Instance().ChannelAmplitudeUpper;
4647
}
47-
bool isInTimeWindow(int16_t time) {
48+
bool isInTimeWindow(int16_t time)
49+
{
4850
return time >= FDDRecoConfig::Instance().ChannelTimeLower && time <= FDDRecoConfig::Instance().ChannelTimeUpper;
4951
}
50-
bool isChannelDataGood(uint8_t channelBits) {
52+
bool isChannelDataGood(uint8_t channelBits)
53+
{
5154
return FDDRecoConfig::Instance().isChannelDataGood(channelBits);
5255
}
5356

54-
bool isInCollisionTimeAmplitudeWindow(int16_t amplitude) {
57+
bool isInCollisionTimeAmplitudeWindow(int16_t amplitude)
58+
{
5559
return amplitude >= FDDRecoConfig::Instance().CollisionTimeAmplitudeLower && amplitude <= FDDRecoConfig::Instance().CollisionTimeAmpltudeUpper;
5660
}
57-
bool isInCollisionTimeTimeWindow(int16_t time) {
61+
bool isInCollisionTimeTimeWindow(int16_t time)
62+
{
5863
return time >= FDDRecoConfig::Instance().CollisionTimeTimeLower && time <= FDDRecoConfig::Instance().CollisionTimeTimeUpper;
5964
}
60-
bool isChannelDataGoodForCollisionTime(uint8_t channelBits) {
65+
bool isChannelDataGoodForCollisionTime(uint8_t channelBits)
66+
{
6167
return FDDRecoConfig::Instance().isChannelDataGoodForCollisionTime(channelBits);
6268
}
6369

64-
bool checkSwOrGateConditions(const ChannelData& channelData) {
65-
bool isAmplitudeInRange = channelData.mChargeADC >= FDDRecoConfig::Instance().SwTriggerAmplitudeLowThreshold
66-
&& channelData.mChargeADC <= FDDRecoConfig::Instance().SwTriggerAmplitudeHighThreshold;
67-
bool isInTimeWindow = std::abs(channelData.mTime) >= FDDRecoConfig::Instance().SwTriggerTimeLowThreshold
68-
&& std::abs(channeData.mTime) <= FDDRecoConfig::Instance().SwTriggerTimeHighThreshold;
70+
bool checkSwOrGateConditions(const ChannelData& channelData)
71+
{
72+
bool isAmplitudeInRange = channelData.mChargeADC >= FDDRecoConfig::Instance().SwTriggerAmplitudeLowThreshold && channelData.mChargeADC <= FDDRecoConfig::Instance().SwTriggerAmplitudeHighThreshold;
73+
bool isInTimeWindow = std::abs(channelData.mTime) >= FDDRecoConfig::Instance().SwTriggerTimeLowThreshold && std::abs(channelData.mTime) <= FDDRecoConfig::Instance().SwTriggerTimeHighThreshold;
6974
bool isCfdInAdcGate = channelData.getFlag(ChannelData::EEventDataBit::kIsCFDinADCgate);
7075
return isAmplitudeInRange && isInTimeWindow && isCfdInAdcGate;
7176
}
7277

7378
bool calculateSwTrigger(float meanTimeSideA, float meanTimeSideC, bool orGateSideA, bool orGateSideC)
7479
{
75-
return (meanTimeSideC - meanTimeSideA) >= FDDRecoConfig::SwTriggerTimeDiffMin
76-
&& (meanTimeSideC - meanTimeSideA) <= FDDRecoConfig::SwTriggerTimeDiffMax
77-
&& orGateSideA
78-
&& orGateSideC;
80+
return (meanTimeSideC - meanTimeSideA) >= FDDRecoConfig::Instance().SwTriggerTimeDiffMin && (meanTimeSideC - meanTimeSideA) <= FDDRecoConfig::Instance().SwTriggerTimeDiffMax && orGateSideA && orGateSideC;
7981
}
8082
static constexpr uint8_t sSideAMaxId = 7;
8183

‎Detectors/FIT/FDD/reconstruction/src/Reconstructor.cxx‎

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -47,36 +47,31 @@ void Reconstructor::process(o2::fdd::Digit const& digitBC, gsl::span<const o2::f
4747
bool swOrGateSideA = false;
4848
bool swOrGateSideC = false;
4949

50-
for (const auto& channelData: inChData) {
50+
for (const auto& channelData : inChData) {
5151
if (mDeadChannelMap && !mDeadChannelMap->isChannelAlive(channelData.mPMNumber)) {
5252
LOG(debug) << "Channel " << channelData.mPMNumber << " is dead - discarding data";
5353
continue;
5454
}
5555

56-
if (isInAmplitudeWindow(channelData.mChargeADC)
57-
&& isInTimeWindow(channelData.mTime)
58-
&& isChannelDataGood(channelData.mFEEBits))
59-
{
60-
outChData.emplace_back((int)inChData[ich].mPMNumber, (inChData[ich].mTime) * timePerTDC,
61-
(double)inChData[ich].mChargeADC, inChData[ich].mFEEBits);
56+
if (isInAmplitudeWindow(channelData.mChargeADC) && isInTimeWindow(channelData.mTime) && isChannelDataGood(channelData.mFEEBits)) {
57+
outChData.emplace_back((int)channelData.mPMNumber, (channelData.mTime) * timePerTDC,
58+
(double)channelData.mChargeADC, channelData.mFEEBits);
6259
storedEntries++;
6360
}
64-
61+
6562
if (FDDRecoConfig::Instance().SwTriggerEnabled) {
66-
if(channelData.mPMNumber <= sSideAMaxId) {
63+
if (channelData.mPMNumber <= sSideAMaxId) {
6764
swOrGateSideA |= checkSwOrGateConditions(channelData);
6865
} else {
6966
swOrGateSideC |= checkSwOrGateConditions(channelData);
7067
}
7168
}
7269

73-
if (!isInAmplitudeWindow(channelData.mChargeADC)
74-
|| !isInTimeWindow(channelData.mTime)
75-
|| !isChannelDataGood(channelData.mFEEBits)) {
76-
continue;
77-
}
78-
79-
if(channelData.mPMNumber <= sSideAMaxId) {
70+
if (!isInAmplitudeWindow(channelData.mChargeADC) || !isInTimeWindow(channelData.mTime) || !isChannelDataGood(channelData.mFEEBits)) {
71+
continue;
72+
}
73+
74+
if (channelData.mPMNumber <= sSideAMaxId) {
8075
timeSideA += channelData.mTime;
8176
entriesNumSideA++;
8277
} else {
@@ -92,13 +87,13 @@ void Reconstructor::process(o2::fdd::Digit const& digitBC, gsl::span<const o2::f
9287
bool swVertexTrg = FDDRecoConfig::Instance().SwTriggerEnabled ? calculateSwTrigger(meanTimeSideA, meanTimeSideC, swOrGateSideA, swOrGateSideC) : false;
9388

9489
std::array<int, 2> mCollisionTime = {o2::fdd::RecPoint::sDummyCollissionTime, o2::fdd::RecPoint::sDummyCollissionTime};
95-
if (entriesSideA > 0) {
90+
if (entriesNumSideA > 0) {
9691
mCollisionTime[o2::fdd::RecPoint::TimeA] = meanTimeSideA * nsToPs;
9792
}
98-
if (entriesSideC > 0) {
93+
if (entriesNumSideC > 0) {
9994
mCollisionTime[o2::fdd::RecPoint::TimeC] = meanTimeSideC * nsToPs;
10095
}
101-
RecPoints.emplace_back(mCollisionTime, firstEntry, nStored, digitBC.getIntRecord(), digitBC.mTriggers);
96+
RecPoints.emplace_back(mCollisionTime, firstEntry, nStored, digitBC.getIntRecord(), digitBC.mTriggers, swVertexTrg);
10297
}
10398
//________________________________________________________
10499
void Reconstructor::finish()

0 commit comments

Comments
 (0)