@@ -42,69 +42,61 @@ void Reconstructor::process(o2::fdd::Digit const& digitBC, gsl::span<const o2::f
4242 int64_t timeSideC = 0 ;
4343 int64_t entriesNumSideA = 0 ;
4444 int64_t entriesNumSideC = 0 ;
45+ uint32_t storedEntries = 0 ;
46+
47+ bool swOrGateSideA = false ;
48+ bool swOrGateSideC = false ;
4549
4650 for (const auto & channelData: inChData) {
4751 if (mDeadChannelMap && !mDeadChannelMap ->isChannelAlive (channelData.mPMNumber )) {
4852 LOG (debug) << " Channel " << channelData.mPMNumber << " is dead - discarding data" ;
4953 continue ;
5054 }
51-
52- }
5355
54- for (int ich = 0 ; ich < nch; ich++) {
55- if (mDeadChannelMap && !mDeadChannelMap ->isChannelAlive (inChData[ich].mPMNumber )) {
56- LOG (debug) << " Channel " << ich << " is dead - discarding data" ;
57- continue ;
58- }
59- bool inTime = inChData[ich].getFlag (ChannelData::EEventDataBit::kIsEventInTVDC );
60- bool inAdcGate = inChData[ich].getFlag (ChannelData::EEventDataBit::kIsCFDinADCgate );
61- if (inAdcGate) {
56+ if (isInAmplitudeWindow (channelData.mChargeADC )
57+ && isInTimeWindow (channelData.mTime )
58+ && isChannelDataGood (channelData.mFEEBits ))
59+ {
6260 outChData.emplace_back ((int )inChData[ich].mPMNumber , (inChData[ich].mTime ) * timePerTDC,
6361 (double )inChData[ich].mChargeADC , inChData[ich].mFEEBits );
64- nStored ++;
62+ storedEntries ++;
6563 }
66-
67- float adc = inChData[ich]. mChargeADC ;
68- float time = (inChData[ich]. mTime ) * timePerTDC;
69-
70- float timeWeight = 1 ;
71- if (adc > FDDRecoConfig::Instance (). AmplitudeCutOnCollisionTimeWeights ) {
72- timeWeight = adc * adc;
64+
65+ if ( FDDRecoConfig::Instance (). SwTriggerEnabled ) {
66+ if (channelData. mPMNumber <= sSideAMaxId ) {
67+ swOrGateSideA |= checkSwOrGateConditions (channelData);
68+ } else {
69+ swOrGateSideC |= checkSwOrGateConditions (channelData);
70+ }
7371 }
74- if ((int )inChData[ich].mPMNumber < 8 ) {
75- nInTimeC += inTime;
76- timeFDC += time * timeWeight;
77- weightFDC += timeWeight;
72+
73+ if (!isInAmplitudeWindow (channelData.mChargeADC )
74+ || !isInTimeWindow (channelData.mTime )
75+ || !isChannelDataGood (channelData.mFEEBits )) {
76+ continue ;
77+ }
78+
79+ if (channelData.mPMNumber <= sSideAMaxId ) {
80+ timeSideA += channelData.mTime ;
81+ entriesNumSideA++;
7882 } else {
79- nInTimeA += inTime;
80- timeFDA += time * timeWeight;
81- weightFDA += timeWeight;
83+ timeSideC += channelData.mTime ;
84+ entriesNumSideC++;
8285 }
83-
84- atLeastOneVertexChannel = FDDRecoConfig::areChannelDataFlagsGood (inChData[ich].mFEEBits );
85- atLeastOneChannelInSwAmplitudeRange = (adc >= FDDRecoConfig::SwTriggerAmplitudeLowThreshold && adc <= FDDRecoConfig::SwTriggerAmplitudeHighThreshold);
8686 }
87- const int nsToPs = 1e3 ;
88- std::array<int , 2 > mCollisionTime = {o2::fdd::RecPoint::sDummyCollissionTime , o2::fdd::RecPoint::sDummyCollissionTime };
8987
90- float meanTimeSideA = round (timeFDA / weightFDA * nsToPs);
91- float meanTimeSideC = round (timeFDC / weightFDC * nsToPs);
92- float sideTimeDifference = fabs (meanTimeSideC - meanTimeSideA);
93- bool swTriggerBit = false ;
94- swTriggerBit = (
95- FDDRecoConfig::SwTriggerEnabled &&
96- (sideTimeDifference => FDDRecoConfig::SwTriggerTimeLowThreshold
97- && sideTimeDifference <= FDDRecoConfig::SwTriggerTimeHighThreshold
98- && atLeastOneVertexChannel
99- && atLeastOneChannelInSwAmplitudeRange
100- )
101- );
88+ constexpr float nsToPs = 1e3 ;
89+ float meanTimeSideA = std::round (float (timeSideA) * timePerTDC / float (entriesNumSideA));
90+ float meanTimeSideC = std::round (float (timeSideC) * timePerTDC / float (entriesNumSideC));
91+
92+ bool swVertexTrg = FDDRecoConfig::Instance ().SwTriggerEnabled ? calculateSwTrigger (meanTimeSideA, meanTimeSideC, swOrGateSideA, swOrGateSideC) : false ;
10293
103- if (nInTimeA > 0 && weightFDA > FDDRecoConfig::Instance ().AmplitudeCollisionTimeCutSideA ) {
104- mCollisionTime [o2::fdd::RecPoint::TimeA] = round (timeFDA / weightFDA * nsToPs);
94+ std::array<int , 2 > mCollisionTime = {o2::fdd::RecPoint::sDummyCollissionTime , o2::fdd::RecPoint::sDummyCollissionTime };
95+ if (entriesSideA > 0 ) {
96+ mCollisionTime [o2::fdd::RecPoint::TimeA] = meanTimeSideA * nsToPs;
10597 }
106- if (nInTimeC > 0 && weightFDC > FDDRecoConfig::Instance (). AmplitudeCollisionTimeCutSideC ) {
107- mCollisionTime [o2::fdd::RecPoint::TimeC] = round (timeFDC / weightFDC * nsToPs) ;
98+ if (entriesSideC > 0 ) {
99+ mCollisionTime [o2::fdd::RecPoint::TimeC] = meanTimeSideC * nsToPs;
108100 }
109101 RecPoints.emplace_back (mCollisionTime , firstEntry, nStored, digitBC.getIntRecord (), digitBC.mTriggers );
110102}
0 commit comments