Skip to content

Commit 51e9a9d

Browse files
[PWGHF,PWGCF] Filling the candidate and track table before pairing and add option for deuteron (#12459)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent cc75bcc commit 51e9a9d

File tree

3 files changed

+143
-42
lines changed

3 files changed

+143
-42
lines changed

PWGCF/DataModel/FemtoDerived.h

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,26 +313,46 @@ DECLARE_SOA_TABLE(FDHfCand, "AOD", "FDHFCAND", //! Table to store the derived da
313313
fdhf::Phi<fdhf::Prong0Pt, fdhf::Prong0Phi, fdhf::Prong0Eta, fdhf::Prong1Pt, fdhf::Prong1Phi, fdhf::Prong1Eta, fdhf::Prong2Pt, fdhf::Prong2Phi, fdhf::Prong2Eta>,
314314
fdhf::Pt<fdhf::Prong0Pt, fdhf::Prong0Phi, fdhf::Prong0Eta, fdhf::Prong1Pt, fdhf::Prong1Phi, fdhf::Prong1Eta, fdhf::Prong2Pt, fdhf::Prong2Phi, fdhf::Prong2Eta>);
315315

316+
DECLARE_SOA_TABLE(FDHfPairs, "AOD", "FDHFPAIRS", //! table to store results for HF femtoscopy
317+
fdhf::CharmM,
318+
fdhf::CharmPt,
319+
fdhf::TrkPt,
320+
fdhf::BDTBkg,
321+
fdhf::BDTPrompt,
322+
fdhf::BDTFD,
323+
fdhf::Kstar,
324+
fdhf::KT,
325+
fdhf::MT,
326+
fdhf::Mult,
327+
fdhf::MultPercentile,
328+
fdhf::Charge,
329+
fdhf::PairSign,
330+
fdhf::ProcessType,
331+
fdhf::FlagMc,
332+
fdhf::OriginMcRec);
333+
316334
DECLARE_SOA_TABLE(FDHfCharm, "AOD", "FDHFCHARM", //! table to store results for HF femtoscopy
317335
fdhf::GIndexCol,
318336
fdhf::TimeStamp,
319337
fdhf::CharmM,
320338
fdhf::CharmPt,
321339
fdhf::CharmEta,
322340
fdhf::CharmPhi,
341+
fdhf::Prong0Id,
342+
fdhf::Prong1Id,
343+
fdhf::Prong2Id,
323344
fdhf::Charge,
324345
fdhf::BDTBkg,
325346
fdhf::BDTPrompt,
326-
fdhf::BDTFD,
327-
fdhf::FlagMc,
328-
fdhf::OriginMcRec);
347+
fdhf::BDTFD);
329348

330349
DECLARE_SOA_TABLE(FDHfTrk, "AOD", "FDHFTRK", //! table to store results for HF femtoscopy
331350
fdhf::GIndexCol,
332351
fdhf::TimeStamp,
333352
fdhf::TrkPt,
334353
fdhf::TrkEta,
335354
fdhf::TrkPhi,
355+
fdhf::TrackId,
336356
femtodreamparticle::Sign,
337357
femtodreamparticle::TPCNClsFound,
338358
track::TPCNClsFindable,

PWGHF/HFC/TableProducer/femtoDreamProducer.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ struct HfFemtoDreamProducer {
135135
Configurable<std::vector<float>> trkDCAxyMax{FemtoDreamTrackSelection::getSelectionName(femtoDreamTrackSelection::kDCAxyMax, "trk"), std::vector<float>{0.1f, 3.5f}, FemtoDreamTrackSelection::getSelectionHelper(femtoDreamTrackSelection::kDCAxyMax, "Track selection: ")};
136136
Configurable<std::vector<float>> trkDCAzMax{FemtoDreamTrackSelection::getSelectionName(femtoDreamTrackSelection::kDCAzMax, "trk"), std::vector<float>{0.2f, 3.5f}, FemtoDreamTrackSelection::getSelectionHelper(femtoDreamTrackSelection::kDCAzMax, "Track selection: ")};
137137
Configurable<std::vector<float>> trkEta{FemtoDreamTrackSelection::getSelectionName(femtoDreamTrackSelection::kEtaMax, "trk"), std::vector<float>{0.8f, 0.7f, 0.9f}, FemtoDreamTrackSelection::getSelectionHelper(femtoDreamTrackSelection::kEtaMax, "Track selection: ")};
138-
Configurable<std::vector<int>> trkPIDspecies{"trkPIDspecies", std::vector<int>{o2::track::PID::Pion, o2::track::PID::Kaon, o2::track::PID::Proton}, "Trk sel: Particles species for PID"};
138+
Configurable<std::vector<int>> trkPIDspecies{"trkPIDspecies", std::vector<int>{o2::track::PID::Pion, o2::track::PID::Kaon, o2::track::PID::Proton, o2::track::PID::Deuteron}, "Trk sel: Particles species for PID"};
139139
Configurable<std::vector<float>> trkPIDnSigmaMax{FemtoDreamTrackSelection::getSelectionName(femtoDreamTrackSelection::kPIDnSigmaMax, "trk"), std::vector<float>{3.5f, 3.f, 2.5f}, FemtoDreamTrackSelection::getSelectionHelper(femtoDreamTrackSelection::kPIDnSigmaMax, "Track selection: ")};
140140
Configurable<float> trkPIDnSigmaOffsetTPC{"trkPIDnSigmaOffsetTPC", 0., "Offset for TPC nSigma because of bad calibration"};
141141
Configurable<float> trkPIDnSigmaOffsetTOF{"trkPIDnSigmaOffsetTOF", 0., "Offset for TOF nSigma because of bad calibration"};

PWGHF/HFC/Tasks/taskCharmHadronsFemtoDream.cxx

Lines changed: 119 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,17 @@ 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;
76+
constexpr static int CutBitChargePositive = 2;
7077

78+
Produces<o2::aod::FDHfPairs> rowFemtoResultPairs;
7179
Produces<o2::aod::FDHfCharm> rowFemtoResultCharm;
7280
Produces<o2::aod::FDHfTrk> rowFemtoResultTrk;
7381
Produces<o2::aod::FDHfColl> rowFemtoResultColl;
@@ -131,7 +139,7 @@ struct HfTaskCharmHadronsFemtoDream {
131139
using FilteredCharmMcCands = soa::Filtered<soa::Join<aod::FDHfCand, aod::FDHfCandMC>>;
132140
using FilteredCharmMcCand = FilteredCharmMcCands::iterator;
133141

134-
using FilteredColisions = soa::Filtered<soa::Join<FDCollisions, FDColMasks>>;
142+
using FilteredColisions = soa::Filtered<soa::Join<FDCollisions, FDColMasks, aod::Collisions>>;
135143
using FilteredColision = FilteredColisions::iterator;
136144

137145
using FilteredMcColisions = soa::Filtered<soa::Join<aod::FDCollisions, FDColMasks, aod::FDMCCollLabels>>;
@@ -294,7 +302,7 @@ struct HfTaskCharmHadronsFemtoDream {
294302
void doSameEvent(PartitionType& sliceTrk1, CandType& sliceCharmHad, TableTracks const& parts, Collision const& col)
295303
{
296304
fillCollision(col);
297-
305+
processType = 1; // for same event
298306
for (auto const& [p1, p2] : combinations(CombinationsFullIndexPolicy(sliceTrk1, sliceCharmHad))) {
299307

300308
if (p1.trackId() == p2.prong0Id() || p1.trackId() == p2.prong1Id() || p1.trackId() == p2.prong2Id())
@@ -310,15 +318,6 @@ struct HfTaskCharmHadronsFemtoDream {
310318
continue;
311319
}
312320

313-
constexpr int CutBitChargePositive = 2;
314-
// proton track charge
315-
float chargeTrack = 0.;
316-
if ((p1.cut() & CutBitChargePositive) == CutBitChargePositive) {
317-
chargeTrack = PositiveCharge;
318-
} else {
319-
chargeTrack = NegativeCharge;
320-
}
321-
322321
float kstar = FemtoDreamMath::getkstar(p1, massOne, p2, massTwo);
323322
if (kstar > highkstarCut) {
324323
continue;
@@ -333,6 +332,21 @@ struct HfTaskCharmHadronsFemtoDream {
333332
if (p2.pt() < charmHadMinPt || p2.pt() > charmHadMaxPt) {
334333
continue;
335334
}
335+
336+
// proton track charge
337+
float chargeTrack = 0.;
338+
if ((p1.cut() & CutBitChargePositive) == CutBitChargePositive) {
339+
chargeTrack = PositiveCharge;
340+
} else {
341+
chargeTrack = NegativeCharge;
342+
}
343+
int pairSign = 0;
344+
if (chargeTrack == p2.charge()) {
345+
pairSign = LikeSignPair;
346+
} else {
347+
pairSign = UnLikeSignPair;
348+
}
349+
336350
/// Filling QA histograms of the selected tracks
337351
selectedTrackHisto.fillQA<isMc, true>(p1, static_cast<aod::femtodreamparticle::MomentumType>(confTempFitVarMomentum.value), col.multNtr(), col.multV0M());
338352

@@ -343,47 +357,32 @@ struct HfTaskCharmHadronsFemtoDream {
343357
originType = p2.originMcRec();
344358
}
345359

346-
rowFemtoResultCharm(
347-
col.globalIndex(),
348-
p2.timeStamp(),
360+
rowFemtoResultPairs(
349361
invMass,
350362
p2.pt(),
351-
p2.eta(),
352-
p2.phi(),
353-
p2.charge(),
363+
p1.pt(),
354364
p2.bdtBkg(),
355365
p2.bdtPrompt(),
356366
p2.bdtFD(),
367+
kstar,
368+
FemtoDreamMath::getkT(p1, massOne, p2, massTwo),
369+
FemtoDreamMath::getmT(p1, massOne, p2, massTwo),
370+
col.multNtr(),
371+
col.multV0M(),
372+
p2.charge(),
373+
pairSign,
374+
processType,
357375
charmHadMc,
358376
originType);
359377

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-
379378
sameEventCont.setPair<isMc, true>(p1, p2, col.multNtr(), col.multV0M(), use4D, extendedPlots, smearingByOrigin);
380379
}
381380
}
382381

383382
template <bool isMc, typename CollisionType, typename PartType, typename PartitionType1, typename PartitionType2, typename BinningType>
384383
void doMixedEvent(CollisionType const& cols, PartType const& parts, PartitionType1& part1, PartitionType2& part2, BinningType policy)
385384
{
386-
385+
processType = 2; // for mixed event
387386
// Mixed events that contain the pair of interest
388387
Partition<CollisionType> partitionMaskedCol1 = (aod::femtodreamcollision::bitmaskTrackOne & bitMask) == bitMask;
389388
partitionMaskedCol1.bindTable(cols);
@@ -427,8 +426,45 @@ struct HfTaskCharmHadronsFemtoDream {
427426
if (p2.pt() < charmHadMinPt || p2.pt() > charmHadMaxPt) {
428427
continue;
429428
}
429+
// proton track charge
430+
float chargeTrack = 0.;
431+
if ((p1.cut() & CutBitChargePositive) == CutBitChargePositive) {
432+
chargeTrack = PositiveCharge;
433+
} else {
434+
chargeTrack = NegativeCharge;
435+
}
436+
int pairSign = 0;
437+
if (chargeTrack == p2.charge()) {
438+
pairSign = LikeSignPair;
439+
} else {
440+
pairSign = UnLikeSignPair;
441+
}
442+
443+
int charmHadMc = 0;
444+
int originType = 0;
445+
if constexpr (isMc) {
446+
charmHadMc = p2.flagMc();
447+
originType = p2.originMcRec();
448+
}
449+
450+
rowFemtoResultPairs(
451+
invMass,
452+
p2.pt(),
453+
p1.pt(),
454+
p2.bdtBkg(),
455+
p2.bdtPrompt(),
456+
p2.bdtFD(),
457+
kstar,
458+
FemtoDreamMath::getkT(p1, massOne, p2, massTwo),
459+
FemtoDreamMath::getmT(p1, massOne, p2, massTwo),
460+
collision1.multNtr(),
461+
collision1.multV0M(),
462+
p2.charge(),
463+
pairSign,
464+
processType,
465+
charmHadMc,
466+
originType);
430467

431-
// if constexpr (!isMc) mixedEventCont.setPair<isMc, true>(p1, p2, collision1.multNtr(), collision1.multV0M(), use4D, extendedPlots, smearingByOrigin);
432468
mixedEventCont.setPair<isMc, true>(p1, p2, collision1.multNtr(), collision1.multV0M(), use4D, extendedPlots, smearingByOrigin);
433469
}
434470
}
@@ -441,15 +477,60 @@ struct HfTaskCharmHadronsFemtoDream {
441477
eventHisto.fillQA(col);
442478
auto sliceTrk1 = partitionTrk1->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
443479
auto sliceCharmHad = partitionCharmHadron->sliceByCached(aod::femtodreamparticle::fdCollisionId, col.globalIndex(), cache);
480+
auto bc = col.template bc_as<aod::BCsWithTimestamps>();
481+
int64_t timeStamp = bc.timestamp();
482+
444483
/// Filling QA histograms of the all tracks and all charm hadrons before pairing
445484
for (auto const& part : sliceTrk1) {
446485
allTrackHisto.fillQA<false, true>(part, static_cast<aod::femtodreamparticle::MomentumType>(confTempFitVarMomentum.value), col.multNtr(), col.multV0M());
486+
487+
// proton track charge
488+
float chargeTrack = 0.;
489+
if ((part.cut() & CutBitChargePositive) == CutBitChargePositive) {
490+
chargeTrack = PositiveCharge;
491+
} else {
492+
chargeTrack = NegativeCharge;
493+
}
494+
495+
rowFemtoResultTrk(
496+
col.globalIndex(),
497+
timeStamp,
498+
part.pt(),
499+
part.eta(),
500+
part.phi(),
501+
part.trackId(),
502+
chargeTrack,
503+
part.tpcNClsFound(),
504+
part.tpcNClsFindable(),
505+
part.tpcNClsCrossedRows(),
506+
part.tpcNSigmaPr(),
507+
part.tofNSigmaPr());
447508
}
448509
for (auto const& part : sliceCharmHad) {
449510
float invMass = getCharmHadronMass(part);
450511
registryCharmHadronQa.fill(HIST("CharmHadronQA/hPtVsMass"), part.pt(), invMass);
512+
rowFemtoResultCharm(
513+
col.globalIndex(),
514+
timeStamp,
515+
invMass,
516+
part.pt(),
517+
part.eta(),
518+
part.phi(),
519+
part.prong0Id(),
520+
part.prong1Id(),
521+
part.prong2Id(),
522+
part.charge(),
523+
part.bdtBkg(),
524+
part.bdtPrompt(),
525+
part.bdtFD());
451526
}
452527

528+
rowFemtoResultColl(
529+
col.globalIndex(),
530+
timeStamp,
531+
col.posZ(),
532+
col.multNtr());
533+
453534
if ((col.bitmaskTrackOne() & bitMask) != bitMask || (col.bitmaskTrackTwo() & bitMask) != bitMask) {
454535
return;
455536
}

0 commit comments

Comments
 (0)