88// In applying this license CERN does not waive the privileges and immunities
99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
11-
12- // / \file LFResonanceInitializer .cxx
13- // / \brief Initializes variables for the resonance candidate producers
11+ // /
12+ // / \file resonanceMergeDF .cxx
13+ // / \brief Merges multiple dataframes into a single dataframe
1414// /
1515// /
1616// / In typical dataframes (DF), we usually observe a range of 200 to 300 collisions.
2424// /
2525// / ///
2626// / \author Bong-Hwi Lim <[email protected] >27- // / Nasir Mehdi Malik
27+ // / Nasir Mehdi Malik <[email protected] >28+ // / Min-jae Kim <[email protected] >2829#include < vector>
2930
3031#include " Common/DataModel/PIDResponse.h"
@@ -58,7 +59,7 @@ using namespace o2::soa;
5859
5960// / Initializer for the resonance candidate producers
6061
61- struct reso2dfmerged {
62+ struct ResonanceMergeDF {
6263 // SliceCache cache;
6364 Configurable<int > nDF{" nDF" , 1 , " no of combination of collision" };
6465 Configurable<bool > cpidCut{" cpidCut" , 0 , " pid cut" };
@@ -75,17 +76,16 @@ struct reso2dfmerged {
7576
7677 HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
7778
78- using resoCols = aod::ResoCollisions;
79- using resoTracks = aod::ResoTracks;
80-
8179 void init (InitContext const &)
8280 {
8381
8482 const AxisSpec axisCent (110 , 0 , 110 , " FT0 (%)" );
8583 histos.add (" Event/h1d_ft0_mult_percentile" , " FT0 (%)" , kTH1F , {axisCent});
84+ histos.add (" Event/h1d_ft0_mult_percentile_CASC" , " FT0 (%)" , kTH1F , {axisCent});
8685 }
8786 Produces<aod::ResoCollisionDFs> resoCollisionsdf;
8887 Produces<aod::ResoTrackDFs> reso2trksdf;
88+ Produces<aod::ResoCascadeDFs> reso2cascadesdf;
8989 int df = 0 ;
9090
9191 std::vector<std::tuple<float , float , float , float , float , float , int >> vecOfTuples;
@@ -97,7 +97,7 @@ struct reso2dfmerged {
9797 float , float , bool , bool ,
9898 bool , bool , bool , bool , float , float , float >>>
9999 vecOfVecOfTuples;
100- void processTrackDataDF (resoCols:: iterator const & collision, resoTracks const & tracks)
100+ void processTrackDataDF (aod::ResoCollisions:: iterator const & collision, aod::ResoTracks const & tracks)
101101 {
102102
103103 int nCollisions = nDF;
@@ -110,7 +110,7 @@ struct reso2dfmerged {
110110 float , float , bool , bool ,
111111 bool , bool , bool , bool , float , float , float >>
112112 innerVector;
113- for (auto & track : tracks) {
113+ for (const auto & track : tracks) {
114114 if (cpidCut) {
115115 if (!track.hasTOF ()) {
116116 if (std::abs (track.tpcNSigmaPr ()) > nsigmaPr && std::abs (track.tpcNSigmaKa ()) > nsigmaKa)
@@ -175,6 +175,7 @@ struct reso2dfmerged {
175175 vecOfVecOfTuples.push_back (innerVector);
176176 innerVector.clear ();
177177 df++;
178+ LOGF (info, " collisions: df = %i" , df);
178179 if (df < nCollisions)
179180 return ;
180181 df = 0 ;
@@ -231,10 +232,9 @@ struct reso2dfmerged {
231232 vecOfVecOfTuples.clear (); //
232233 }
233234
234- PROCESS_SWITCH (reso2dfmerged , processTrackDataDF, " Process for data merged DF" , true );
235+ PROCESS_SWITCH (ResonanceMergeDF , processTrackDataDF, " Process for data merged DF" , true );
235236
236- void processLambdaStarCandidate (resoCols::iterator const & collision, resoTracks const &
237- tracks)
237+ void processLambdaStarCandidate (aod::ResoCollisions::iterator const & collision, aod::ResoTracks const & tracks)
238238 {
239239
240240 if (doprocessTrackDataDF)
@@ -244,7 +244,7 @@ struct reso2dfmerged {
244244
245245 resoCollisionsdf (0 , collision.posX (), collision.posY (), collision.posZ (), collision.cent (), collision.spherocity (), collision.evtPl (), 0 ., 0 ., 0 ., 0 ., 0 , collision.trackOccupancyInTimeRange ());
246246
247- for (auto & track : tracks) {
247+ for (const auto & track : tracks) {
248248 if (isPrimary && !track.isPrimaryTrack ())
249249 continue ;
250250 if (isGlobal && !track.isGlobalTrack ())
@@ -308,10 +308,69 @@ struct reso2dfmerged {
308308 track.tpcChi2NCl ());
309309 }
310310 }
311- PROCESS_SWITCH (reso2dfmerged, processLambdaStarCandidate, " Process for lambda star candidate" , false );
311+ PROCESS_SWITCH (ResonanceMergeDF, processLambdaStarCandidate, " Process for lambda star candidate" , false );
312+
313+ void processCascadesCandidate (aod::ResoCollisions::iterator const & collision, aod::ResoCascades const & resocasctracks)
314+ {
315+ histos.fill (HIST (" Event/h1d_ft0_mult_percentile_CASC" ), collision.cent ());
316+
317+ resoCollisionsdf (0 , collision.posX (), collision.posY (), collision.posZ (), collision.cent (), collision.spherocity (), collision.evtPl (), 0 ., 0 ., 0 ., 0 ., 0 , collision.trackOccupancyInTimeRange ());
318+
319+ for (const auto & track : resocasctracks) {
320+ reso2cascadesdf (resoCollisionsdf.lastIndex (),
321+ // casc.globalIndex(),
322+ track.pt (),
323+ track.px (),
324+ track.py (),
325+ track.pz (),
326+ track.eta (),
327+ track.phi (),
328+ const_cast <int *>(track.cascadeIndices ()),
329+ track.daughterTPCNSigmaPosPi (),
330+ track.daughterTPCNSigmaPosKa (),
331+ track.daughterTPCNSigmaPosPr (),
332+ track.daughterTPCNSigmaNegPi (),
333+ track.daughterTPCNSigmaNegKa (),
334+ track.daughterTPCNSigmaNegPr (),
335+ track.daughterTPCNSigmaBachPi (),
336+ track.daughterTPCNSigmaBachKa (),
337+ track.daughterTPCNSigmaBachPr (),
338+ track.daughterTOFNSigmaPosPi (),
339+ track.daughterTOFNSigmaPosKa (),
340+ track.daughterTOFNSigmaPosPr (),
341+ track.daughterTOFNSigmaNegPi (),
342+ track.daughterTOFNSigmaNegKa (),
343+ track.daughterTOFNSigmaNegPr (),
344+ track.daughterTOFNSigmaBachPi (),
345+ track.daughterTOFNSigmaBachKa (),
346+ track.daughterTOFNSigmaBachPr (),
347+ track.v0CosPA (),
348+ track.cascCosPA (),
349+ track.daughDCA (),
350+ track.cascDaughDCA (),
351+ track.dcapostopv (),
352+ track.dcanegtopv (),
353+ track.dcabachtopv (),
354+ track.dcav0topv (),
355+ track.dcaXYCascToPV (),
356+ track.dcaZCascToPV (),
357+ track.sign (),
358+ track.mLambda (),
359+ track.mXi (),
360+ track.transRadius (), track.cascTransRadius (), track.decayVtxX (), track.decayVtxY (), track.decayVtxZ ());
361+ }
362+ }
363+
364+ PROCESS_SWITCH (ResonanceMergeDF, processCascadesCandidate, " Process for Cascade candidate" , true );
365+
366+ void processXiStarCandidate (aod::ResoCollisions::iterator const & /* collision*/ , aod::ResoTracks const & /* tracks*/ )
367+ {
368+ // TODO: Implement Xi star candidate processing
369+ }
370+ PROCESS_SWITCH (ResonanceMergeDF, processXiStarCandidate, " Process for Xi star candidate" , false );
312371};
313372
314373WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
315374{
316- return WorkflowSpec{adaptAnalysisTask<reso2dfmerged >(cfgc)};
375+ return WorkflowSpec{adaptAnalysisTask<ResonanceMergeDF >(cfgc)};
317376}
0 commit comments