@@ -65,9 +65,16 @@ struct HfTaskCharmHadronsFemtoDream {
6565 NegativeCharge = -1
6666 };
6767
68+ enum PairSign {
69+ PairNotDefined = 0 ,
70+ LikeSignPair = 1 ,
71+ UnLikeSignPair = 2
72+ };
73+
6874 constexpr static int OriginRecPrompt = 1 ;
6975 constexpr static int OriginRecFD = 2 ;
7076
77+ Produces<o2::aod::FDResultsHF> rowFemtoResultPairs;
7178 Produces<o2::aod::FDHfCharm> rowFemtoResultCharm;
7279 Produces<o2::aod::FDHfTrk> rowFemtoResultTrk;
7380 Produces<o2::aod::FDHfColl> rowFemtoResultColl;
@@ -131,7 +138,7 @@ struct HfTaskCharmHadronsFemtoDream {
131138 using FilteredCharmMcCands = soa::Filtered<soa::Join<aod::FDHfCand, aod::FDHfCandMC>>;
132139 using FilteredCharmMcCand = FilteredCharmMcCands::iterator;
133140
134- using FilteredColisions = soa::Filtered<soa::Join<FDCollisions, FDColMasks>>;
141+ using FilteredColisions = soa::Filtered<soa::Join<FDCollisions, FDColMasks, aod::Collisions >>;
135142 using FilteredColision = FilteredColisions::iterator;
136143
137144 using FilteredMcColisions = soa::Filtered<soa::Join<aod::FDCollisions, FDColMasks, aod::FDMCCollLabels>>;
@@ -294,7 +301,7 @@ struct HfTaskCharmHadronsFemtoDream {
294301 void doSameEvent (PartitionType& sliceTrk1, CandType& sliceCharmHad, TableTracks const & parts, Collision const & col)
295302 {
296303 fillCollision (col);
297-
304+ processType = 1 ; // for same event
298305 for (auto const & [p1, p2] : combinations (CombinationsFullIndexPolicy (sliceTrk1, sliceCharmHad))) {
299306
300307 if (p1.trackId () == p2.prong0Id () || p1.trackId () == p2.prong1Id () || p1.trackId () == p2.prong2Id ())
@@ -318,6 +325,12 @@ struct HfTaskCharmHadronsFemtoDream {
318325 } else {
319326 chargeTrack = NegativeCharge;
320327 }
328+ int pairSign = 0 ;
329+ if (chargeTrack == p2.charge ()) {
330+ pairSign = LikeSignPair;
331+ } else {
332+ pairSign = UnLikeSignPair;
333+ }
321334
322335 float kstar = FemtoDreamMath::getkstar (p1, massOne, p2, massTwo);
323336 if (kstar > highkstarCut) {
@@ -343,47 +356,32 @@ struct HfTaskCharmHadronsFemtoDream {
343356 originType = p2.originMcRec ();
344357 }
345358
346- rowFemtoResultCharm (
347- col.globalIndex (),
348- p2.timeStamp (),
359+ rowFemtoResultPairs (
349360 invMass,
350361 p2.pt (),
351- p2.eta (),
352- p2.phi (),
353- p2.charge (),
362+ p1.pt (),
354363 p2.bdtBkg (),
355364 p2.bdtPrompt (),
356365 p2.bdtFD (),
366+ kstar,
367+ FemtoDreamMath::getkT (p1, massOne, p2, massTwo),
368+ FemtoDreamMath::getmT (p1, massOne, p2, massTwo),
369+ col.multNtr (),
370+ col.multV0M (),
371+ p2.charge (),
372+ pairSign,
373+ processType,
357374 charmHadMc,
358375 originType);
359376
360- rowFemtoResultTrk (
361- col.globalIndex (),
362- p2.timeStamp (),
363- p1.pt (),
364- p1.eta (),
365- p1.phi (),
366- chargeTrack,
367- p1.tpcNClsFound (),
368- p1.tpcNClsFindable (),
369- p1.tpcNClsCrossedRows (),
370- p1.tpcNSigmaPr (),
371- p1.tofNSigmaPr ());
372-
373- rowFemtoResultColl (
374- col.globalIndex (),
375- p2.timeStamp (),
376- col.posZ (),
377- col.multNtr ());
378-
379377 sameEventCont.setPair <isMc, true >(p1, p2, col.multNtr (), col.multV0M (), use4D, extendedPlots, smearingByOrigin);
380378 }
381379 }
382380
383381 template <bool isMc, typename CollisionType, typename PartType, typename PartitionType1, typename PartitionType2, typename BinningType>
384382 void doMixedEvent (CollisionType const & cols, PartType const & parts, PartitionType1& part1, PartitionType2& part2, BinningType policy)
385383 {
386-
384+ processType = 2 ; // for mixed event
387385 // Mixed events that contain the pair of interest
388386 Partition<CollisionType> partitionMaskedCol1 = (aod::femtodreamcollision::bitmaskTrackOne & bitMask) == bitMask;
389387 partitionMaskedCol1.bindTable (cols);
@@ -427,8 +425,44 @@ struct HfTaskCharmHadronsFemtoDream {
427425 if (p2.pt () < charmHadMinPt || p2.pt () > charmHadMaxPt) {
428426 continue ;
429427 }
428+ float chargeTrack = 0 .;
429+ if ((p1.cut () & 2 ) == 2 ) {
430+ chargeTrack = PositiveCharge;
431+ } else {
432+ chargeTrack = NegativeCharge;
433+ }
434+
435+ int pairSign = 0 ;
436+ if (chargeTrack == p2.charge ()) {
437+ pairSign = LikeSignPair;
438+ } else {
439+ pairSign = UnLikeSignPair;
440+ }
441+
442+ int charmHadMc = 0 ;
443+ int originType = 0 ;
444+ if constexpr (isMc) {
445+ charmHadMc = p2.flagMc ();
446+ originType = p2.originMcRec ();
447+ }
448+ rowFemtoResultPairs (
449+ invMass,
450+ p2.pt (),
451+ p1.pt (),
452+ p2.bdtBkg (),
453+ p2.bdtPrompt (),
454+ p2.bdtFD (),
455+ kstar,
456+ FemtoDreamMath::getkT (p1, massOne, p2, massTwo),
457+ FemtoDreamMath::getmT (p1, massOne, p2, massTwo),
458+ collision1.multNtr (),
459+ collision1.multV0M (),
460+ p2.charge (),
461+ pairSign,
462+ processType,
463+ charmHadMc,
464+ originType);
430465
431- // if constexpr (!isMc) mixedEventCont.setPair<isMc, true>(p1, p2, collision1.multNtr(), collision1.multV0M(), use4D, extendedPlots, smearingByOrigin);
432466 mixedEventCont.setPair <isMc, true >(p1, p2, collision1.multNtr (), collision1.multV0M (), use4D, extendedPlots, smearingByOrigin);
433467 }
434468 }
@@ -441,15 +475,59 @@ struct HfTaskCharmHadronsFemtoDream {
441475 eventHisto.fillQA (col);
442476 auto sliceTrk1 = partitionTrk1->sliceByCached (aod::femtodreamparticle::fdCollisionId, col.globalIndex (), cache);
443477 auto sliceCharmHad = partitionCharmHadron->sliceByCached (aod::femtodreamparticle::fdCollisionId, col.globalIndex (), cache);
478+ auto bc = col.template bc_as <aod::BCsWithTimestamps>();
479+ int64_t timeStamp = bc.timestamp ();
480+
444481 // / Filling QA histograms of the all tracks and all charm hadrons before pairing
445482 for (auto const & part : sliceTrk1) {
446483 allTrackHisto.fillQA <false , true >(part, static_cast <aod::femtodreamparticle::MomentumType>(confTempFitVarMomentum.value ), col.multNtr (), col.multV0M ());
484+
485+ float chargeTrack = 0 .;
486+ if ((part.cut () & 2 ) == 2 ) {
487+ chargeTrack = PositiveCharge;
488+ } else {
489+ chargeTrack = NegativeCharge;
490+ }
491+
492+ rowFemtoResultTrk (
493+ col.globalIndex (),
494+ timeStamp,
495+ part.pt (),
496+ part.eta (),
497+ part.phi (),
498+ part.trackId (),
499+ chargeTrack,
500+ part.tpcNClsFound (),
501+ part.tpcNClsFindable (),
502+ part.tpcNClsCrossedRows (),
503+ part.tpcNSigmaPr (),
504+ part.tofNSigmaPr ());
447505 }
448506 for (auto const & part : sliceCharmHad) {
449507 float invMass = getCharmHadronMass (part);
450508 registryCharmHadronQa.fill (HIST (" CharmHadronQA/hPtVsMass" ), part.pt (), invMass);
509+ rowFemtoResultCharm (
510+ col.globalIndex (),
511+ timeStamp,
512+ invMass,
513+ part.pt (),
514+ part.eta (),
515+ part.phi (),
516+ part.prong0Id (),
517+ part.prong1Id (),
518+ part.prong2Id (),
519+ part.charge (),
520+ part.bdtBkg (),
521+ part.bdtPrompt (),
522+ part.bdtFD ());
451523 }
452524
525+ rowFemtoResultColl (
526+ col.globalIndex (),
527+ timeStamp,
528+ col.posZ (),
529+ col.multNtr ());
530+
453531 if ((col.bitmaskTrackOne () & bitMask) != bitMask || (col.bitmaskTrackTwo () & bitMask) != bitMask) {
454532 return ;
455533 }
0 commit comments