@@ -1743,8 +1743,11 @@ void AODProducerWorkflowDPL::init(InitContext& ic)
17431743 mMuonCl = 0xFFFFFFFF ;
17441744 mMuonClErr = 0xFFFFFFFF ;
17451745 mV0Time = 0xFFFFFFFF ;
1746+ mV0ChannelTime = 0xFFFFFFFF ;
17461747 mFDDTime = 0xFFFFFFFF ;
1748+ mFDDChannelTime = 0xFFFFFFFF ;
17471749 mT0Time = 0xFFFFFFFF ;
1750+ mT0ChannelTime = 0xFFFFFFFF ;
17481751 mV0Amplitude = 0xFFFFFFFF ;
17491752 mFDDAmplitude = 0xFFFFFFFF ;
17501753 mT0Amplitude = 0xFFFFFFFF ;
@@ -1829,8 +1832,11 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
18291832 auto trackedV0Cursor = createTableCursor<o2::aod::TrackedV0s>(pc);
18301833 auto tracked3BodyCurs = createTableCursor<o2::aod::Tracked3Bodys>(pc);
18311834 auto fddCursor = createTableCursor<o2::aod::FDDs>(pc);
1835+ auto fddExtraCursor = createTableCursor<o2::aod::FDDsExtra>(pc);
18321836 auto ft0Cursor = createTableCursor<o2::aod::FT0s>(pc);
1837+ auto ft0ExtraCursor = createTableCursor<o2::aod::FT0sExtra>(pc);
18331838 auto fv0aCursor = createTableCursor<o2::aod::FV0As>(pc);
1839+ auto fv0aExtraCursor = createTableCursor<o2::aod::FV0AsExtra>(pc);
18341840 auto fwdTracksCursor = createTableCursor<o2::aod::StoredFwdTracks>(pc);
18351841 auto fwdTracksCovCursor = createTableCursor<o2::aod::StoredFwdTracksCov>(pc);
18361842 auto fwdTrkClsCursor = createTableCursor<o2::aod::FwdTrkCls>(pc);
@@ -1897,16 +1903,18 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
18971903 tfNumber = mTFNumber ;
18981904 }
18991905
1900- std::vector<float > aAmplitudes;
1906+ std::vector<float > aAmplitudes, aTimes ;
19011907 std::vector<uint8_t > aChannels;
19021908 fv0aCursor.reserve (fv0RecPoints.size ());
19031909 for (auto & fv0RecPoint : fv0RecPoints) {
19041910 aAmplitudes.clear ();
19051911 aChannels.clear ();
1912+ aTimes.clear ();
19061913 const auto channelData = fv0RecPoint.getBunchChannelData (fv0ChData);
19071914 for (auto & channel : channelData) {
19081915 if (channel.charge > 0 ) {
19091916 aAmplitudes.push_back (truncateFloatFraction (channel.charge , mV0Amplitude ));
1917+ aTimes.push_back (truncateFloatFraction (channel.time * 1 .E -3 , mV0ChannelTime ));
19101918 aChannels.push_back (channel.channel );
19111919 }
19121920 }
@@ -1923,6 +1931,11 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
19231931 aChannels,
19241932 truncateFloatFraction (fv0RecPoint.getCollisionGlobalMeanTime () * 1E-3 , mV0Time ), // ps to ns
19251933 fv0RecPoint.getTrigger ().getTriggersignals ());
1934+
1935+ if (mEnableFITextra ) {
1936+ fv0aExtraCursor (bcID,
1937+ aTimes);
1938+ }
19261939 }
19271940
19281941 std::vector<float > zdcEnergy, zdcAmplitudes, zdcTime;
@@ -2026,25 +2039,17 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
20262039 [](const std::vector<int >& left, const std::vector<int >& right) { return (left[0 ] < right[0 ]); });
20272040
20282041 // vector of FDD amplitudes
2029- int16_t aFDDAmplitudesA[8 ] = {0u };
2030- int16_t aFDDAmplitudesC [8 ] = {0u };
2042+ int16_t aFDDAmplitudesA[8 ] = {0u }, aFDDAmplitudesC[ 8 ] = { 0u } ;
2043+ float aFDDTimesA [8 ] = {0 . f }, aFDDTimesC[ 8 ] = { 0 . f };
20312044 // filling FDD table
20322045 fddCursor.reserve (fddRecPoints.size ());
20332046 for (const auto & fddRecPoint : fddRecPoints) {
20342047 for (int i = 0 ; i < 8 ; i++) {
20352048 aFDDAmplitudesA[i] = 0 ;
20362049 aFDDAmplitudesC[i] = 0 ;
2050+ aFDDTimesA[i] = 0 .f ;
2051+ aFDDTimesC[i] = 0 .f ;
20372052 }
2038-
2039- const auto channelData = fddRecPoint.getBunchChannelData (fddChData);
2040- for (const auto & channel : channelData) {
2041- if (channel.mPMNumber < 8 ) {
2042- aFDDAmplitudesC[channel.mPMNumber ] = channel.mChargeADC ; // amplitude
2043- } else {
2044- aFDDAmplitudesA[channel.mPMNumber - 8 ] = channel.mChargeADC ; // amplitude
2045- }
2046- }
2047-
20482053 uint64_t globalBC = fddRecPoint.getInteractionRecord ().toLong ();
20492054 uint64_t bc = globalBC;
20502055 auto item = bcsMap.find (bc);
@@ -2054,21 +2059,39 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
20542059 } else {
20552060 LOG (fatal) << " Error: could not find a corresponding BC ID for a FDD rec. point; BC = " << bc;
20562061 }
2062+ const auto channelData = fddRecPoint.getBunchChannelData (fddChData);
2063+ for (const auto & channel : channelData) {
2064+ if (channel.mPMNumber < 8 ) {
2065+ aFDDAmplitudesC[channel.mPMNumber ] = channel.mChargeADC ; // amplitude
2066+ aFDDTimesC[channel.mPMNumber ] = truncateFloatFraction (channel.mTime * 1E-3 , mFDDChannelTime ); // time
2067+ } else {
2068+ aFDDAmplitudesA[channel.mPMNumber - 8 ] = channel.mChargeADC ; // amplitude
2069+ aFDDTimesA[channel.mPMNumber - 8 ] = truncateFloatFraction (channel.mTime * 1E-3 , mFDDChannelTime ); // time
2070+ }
2071+ }
2072+
20572073 fddCursor (bcID,
20582074 aFDDAmplitudesA,
20592075 aFDDAmplitudesC,
20602076 truncateFloatFraction (fddRecPoint.getCollisionTimeA () * 1E-3 , mFDDTime ), // ps to ns
20612077 truncateFloatFraction (fddRecPoint.getCollisionTimeC () * 1E-3 , mFDDTime ), // ps to ns
20622078 fddRecPoint.getTrigger ().getTriggersignals ());
2079+ if (mEnableFITextra ) {
2080+ fddExtraCursor (bcID,
2081+ aFDDTimesA,
2082+ aFDDTimesC);
2083+ }
20632084 }
20642085
20652086 // filling FT0 table
2066- std::vector<float > aAmplitudesA, aAmplitudesC;
2087+ std::vector<float > aAmplitudesA, aAmplitudesC, aTimesA, aTimesC ;
20672088 std::vector<uint8_t > aChannelsA, aChannelsC;
20682089 ft0Cursor.reserve (ft0RecPoints.size ());
20692090 for (auto & ft0RecPoint : ft0RecPoints) {
20702091 aAmplitudesA.clear ();
20712092 aAmplitudesC.clear ();
2093+ aTimesA.clear ();
2094+ aTimesC.clear ();
20722095 aChannelsA.clear ();
20732096 aChannelsC.clear ();
20742097 const auto channelData = ft0RecPoint.getBunchChannelData (ft0ChData);
@@ -2079,9 +2102,11 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
20792102 if (channel.ChId < nFT0ChannelsAside) {
20802103 aChannelsA.push_back (channel.ChId );
20812104 aAmplitudesA.push_back (truncateFloatFraction (channel.QTCAmpl , mT0Amplitude ));
2105+ aTimesA.push_back (truncateFloatFraction (channel.CFDTime * 1E-3 , mT0ChannelTime ));
20822106 } else {
20832107 aChannelsC.push_back (channel.ChId - nFT0ChannelsAside);
20842108 aAmplitudesC.push_back (truncateFloatFraction (channel.QTCAmpl , mT0Amplitude ));
2109+ aTimesC.push_back (truncateFloatFraction (channel.CFDTime * 1E-3 , mT0ChannelTime ));
20852110 }
20862111 }
20872112 }
@@ -2102,6 +2127,11 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc)
21022127 truncateFloatFraction (ft0RecPoint.getCollisionTimeA () * 1E-3 , mT0Time ), // ps to ns
21032128 truncateFloatFraction (ft0RecPoint.getCollisionTimeC () * 1E-3 , mT0Time ), // ps to ns
21042129 ft0RecPoint.getTrigger ().getTriggersignals ());
2130+ if (mEnableFITextra ) {
2131+ ft0ExtraCursor (bcID,
2132+ aTimesA,
2133+ aTimesC);
2134+ }
21052135 }
21062136
21072137 if (mUseMC ) {
@@ -3073,7 +3103,7 @@ void AODProducerWorkflowDPL::endOfStream(EndOfStreamContext& /*ec*/)
30733103 mStreamer .reset ();
30743104}
30753105
3076- DataProcessorSpec getAODProducerWorkflowSpec (GID::mask_t src, bool enableSV, bool enableStrangenessTracking, bool useMC, bool CTPConfigPerRun)
3106+ DataProcessorSpec getAODProducerWorkflowSpec (GID::mask_t src, bool enableSV, bool enableStrangenessTracking, bool useMC, bool CTPConfigPerRun, bool enableFITextra )
30773107{
30783108 auto dataRequest = std::make_shared<DataRequest>();
30793109 dataRequest->inputs .emplace_back (" ctpconfig" , " CTP" , " CTPCONFIG" , 0 , Lifetime::Condition, ccdbParamSpec (" CTP/Config/Config" , CTPConfigPerRun));
@@ -3133,8 +3163,11 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
31333163 OutputForTable<Collisions>::spec (),
31343164 OutputForTable<Decay3Bodys>::spec (),
31353165 OutputForTable<FDDs>::spec (),
3166+ OutputForTable<FDDsExtra>::spec (),
31363167 OutputForTable<FT0s>::spec (),
3168+ OutputForTable<FT0sExtra>::spec (),
31373169 OutputForTable<FV0As>::spec (),
3170+ OutputForTable<FV0AsExtra>::spec (),
31383171 OutputForTable<StoredFwdTracks>::spec (),
31393172 OutputForTable<StoredFwdTracksCov>::spec (),
31403173 OutputForTable<StoredMFTTracks>::spec (),
@@ -3184,7 +3217,7 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool enableSV, boo
31843217 " aod-producer-workflow" ,
31853218 dataRequest->inputs ,
31863219 outputs,
3187- AlgorithmSpec{adaptFromTask<AODProducerWorkflowDPL>(src, dataRequest, ggRequest, enableSV, useMC)},
3220+ AlgorithmSpec{adaptFromTask<AODProducerWorkflowDPL>(src, dataRequest, ggRequest, enableSV, useMC, enableFITextra )},
31883221 Options{
31893222 ConfigParamSpec{" run-number" , VariantType::Int64, -1L , {" The run-number. If left default we try to get it from DPL header." }},
31903223 ConfigParamSpec{" aod-timeframe-id" , VariantType::Int64, -1L , {" Set timeframe number" }},
0 commit comments