99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
1111
12+ #include " Framework/AnalysisDataModel.h"
13+ #include " Common/CCDB/EventSelectionParams.h"
14+ #include " Common/DataModel/EventSelection.h"
15+ #include " CommonConstants/LHCConstants.h"
16+ #include " DataFormatsFIT/Triggers.h"
17+
1218#include " Framework/runDataProcessing.h"
1319#include " Framework/AnalysisTask.h"
1420#include " PWGUD/DataModel/UDTables.h"
@@ -29,10 +35,12 @@ struct SGCandProducer {
2935
3036 // data tables
3137 Produces<aod::SGCollisions> outputSGCollisions;
38+ // Produces<aod::ZDCCollisions> outputZDCCollisions;
3239 Produces<aod::UDCollisions> outputCollisions;
3340 Produces<aod::UDCollisionsSels> outputCollisionsSels;
3441 Produces<aod::UDCollsLabels> outputCollsLabels;
3542 Produces<aod::UDZdcs> outputZdcs;
43+ Produces<o2::aod::UDZdcsReduced> udZdcsReduced;
3644 Produces<aod::UDTracks> outputTracks;
3745 Produces<aod::UDTracksCov> outputTracksCov;
3846 Produces<aod::UDTracksDCA> outputTracksDCA;
@@ -51,7 +59,8 @@ struct SGCandProducer {
5159 // data inputs
5260 using CCs = soa::Join<aod::Collisions, aod::EvSels>;
5361 using CC = CCs::iterator;
54- using BCs = soa::Join<aod::BCsWithTimestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
62+ // using BCs = soa::Join<aod::BCsWithTimestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
63+ using BCs = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
5564 using BC = BCs::iterator;
5665 using TCs = soa::Join<aod::Tracks, /* aod::TracksCov,*/ aod::TracksExtra, aod::TracksDCA, aod::TrackSelection,
5766 aod::pidTPCFullEl, aod::pidTPCFullMu, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr,
@@ -105,7 +114,7 @@ struct SGCandProducer {
105114 track.tofNSigmaKa (),
106115 track.tofNSigmaPr ());
107116 outputTracksExtra (track.tpcInnerParam (),
108- track.itsClusterSizes (),
117+ track.itsClusterMap (),
109118 track.tpcNClsFindable (),
110119 track.tpcNClsFindableMinusFound (),
111120 track.tpcNClsFindableMinusCrossedRows (),
@@ -140,6 +149,7 @@ struct SGCandProducer {
140149
141150 // process function for real data
142151 void process (CC const & collision, BCs const & bcs, TCs& tracks, FWs& fwdtracks,
152+ // aod::Zdcs_000& zdcs, aod::FT0s& ft0s, aod::FV0As& fv0as, aod::FDDs& fdds)
143153 aod::Zdcs& zdcs, aod::FT0s& ft0s, aod::FV0As& fv0as, aod::FDDs& fdds)
144154 {
145155 LOGF (debug, " <SGCandProducer> collision %d" , collision.globalIndex ());
@@ -167,6 +177,9 @@ struct SGCandProducer {
167177 // fill FITInfo
168178 upchelpers::FITInfo fitInfo{};
169179 udhelpers::getFITinfo (fitInfo, bc.globalBC (), bcs, ft0s, fv0as, fdds);
180+ // upchelpers::ZDCInfo zdcInfo{};
181+ // udhelpers::getZDCinfo(zdcInfo, bc.globalBC(), bcs, zdcs);
182+ // udhelpers::getZDCinfo(zdcInfo, bc.globalBC(), zdcs);
170183
171184 // update SG candidates tables
172185 auto rtrwTOF = udhelpers::rPVtrwTOF<true >(tracks, collision.numContrib ());
@@ -196,16 +209,34 @@ struct SGCandProducer {
196209 }
197210
198211 // fill UDZdcs
199- if (bc.has_zdc ()) {
200- auto zdc = bc.zdc ();
201- auto enes = std::vector (zdc.energy ().begin (), zdc.energy ().end ());
202- auto chEs = std::vector (zdc.channelE ().begin (), zdc.channelE ().end ());
203- auto amps = std::vector (zdc.amplitude ().begin (), zdc.amplitude ().end ());
204- auto times = std::vector (zdc.time ().begin (), zdc.time ().end ());
205- auto chTs = std::vector (zdc.channelT ().begin (), zdc.channelT ().end ());
206- outputZdcs (outputCollisions.lastIndex (), enes, chEs, amps, times, chTs);
212+ // outputZDCCollisions(zdcInfo.timeZNA,zdcInfo.timeZNC,zdcInfo.multZNA,zdcInfo.multZNC);
213+ std::map<uint64_t , int32_t > mapGlobalBcWithZdc{};
214+ auto globalBC = bc.globalBC ();
215+ for (const auto & zdc : zdcs) {
216+ // auto globalBC = zdc.bc_as<o2::aod::BCs>().globalBC();
217+ // auto bc = zdc.bc_as<o2::aod::BCs>().globalBC();
218+ if (std::abs (zdc.timeZNA ()) > 2 .f && std::abs (zdc.timeZNC ()) > 2 .f )
219+ continue ;
220+ // mapGlobalBcWithZdc[bc.globalBC()] = zdc.globalIndex();
221+ mapGlobalBcWithZdc[globalBC] = zdc.globalIndex ();
222+ // mapGlobalBcWithZdc[bc] = zdc.globalIndex();
207223 }
208-
224+ int candID = 0 ;
225+ auto nZdcs = mapGlobalBcWithZdc.size ();
226+ if (nZdcs > 0 ) {
227+ // auto itZDC = mapGlobalBcWithZdc.find(bc.globalBC());
228+ auto itZDC = mapGlobalBcWithZdc.find (globalBC);
229+ // auto itZDC = mapGlobalBcWithZdc.find(bc);
230+ if (itZDC != mapGlobalBcWithZdc.end ()) {
231+ const auto & zdc = zdcs.iteratorAt (itZDC->second );
232+ float timeZNA = zdc.timeZNA ();
233+ float timeZNC = zdc.timeZNC ();
234+ float eComZNA = zdc.energyCommonZNA ();
235+ float eComZNC = zdc.energyCommonZNC ();
236+ udZdcsReduced (candID, timeZNA, timeZNC, eComZNA, eComZNC);
237+ }
238+ }
239+ candID++;
209240 // produce TPC signal histograms for 2-track events
210241 LOGF (debug, " SG candidate: number of PV tracks %d" , collision.numContrib ());
211242 if (collision.numContrib () == 2 ) {
0 commit comments