1717// HF decays. Work in progress: use at your own risk!
1818//
1919
20- #include < cmath>
21- #include < array>
22- #include < cstdlib>
23- #include < map>
24- #include < iterator>
25- #include < utility>
20+ #include " PWGHF/Utils/utilsAnalysis.h"
21+ #include " PWGLF/DataModel/LFParticleIdentification.h"
22+ #include " PWGLF/DataModel/LFStrangenessTables.h"
2623
27- #include " Framework/runDataProcessing.h"
28- #include " Framework/RunningWorkflowInfo.h"
29- #include " Framework/AnalysisTask.h"
30- #include " Framework/AnalysisDataModel.h"
31- #include " Framework/ASoAHelpers.h"
32- #include " DCAFitter/DCAFitterN.h"
33- #include " ReconstructionDataFormats/Track.h"
24+ #include " ALICE3/DataModel/A3DecayFinderTables.h"
25+ #include " ALICE3/DataModel/OTFPIDTrk.h"
26+ #include " ALICE3/DataModel/OTFRICH.h"
27+ #include " ALICE3/DataModel/OTFTOF.h"
28+ #include " ALICE3/DataModel/RICH.h"
3429#include " Common/Core/RecoDecay.h"
35- #include " Common/Core/trackUtilities.h"
36- #include " PWGLF/DataModel/LFStrangenessTables.h"
37- #include " PWGLF/DataModel/LFParticleIdentification.h"
3830#include " Common/Core/TrackSelection.h"
31+ #include " Common/Core/trackUtilities.h"
3932#include " Common/DataModel/TrackSelectionTables.h"
40- #include " DetectorsBase/Propagator.h"
41- #include " DetectorsBase/GeometryManager.h"
42- #include " DataFormatsParameters/GRPObject.h"
43- #include " DataFormatsParameters/GRPMagField.h"
33+
4434#include " CCDB/BasicCCDBManager.h"
35+ #include " DCAFitter/DCAFitterN.h"
4536#include " DataFormatsCalibration/MeanVertexObject.h"
46- #include " ALICE3/DataModel/OTFTOF.h"
47- #include " ALICE3/DataModel/OTFPIDTrk.h"
48- #include " ALICE3/DataModel/OTFRICH.h"
49- #include " ALICE3/DataModel/RICH.h"
50- #include " ALICE3/DataModel/A3DecayFinderTables.h"
51- #include " PWGHF/Utils/utilsAnalysis.h"
37+ #include " DataFormatsParameters/GRPMagField.h"
38+ #include " DataFormatsParameters/GRPObject.h"
39+ #include " DetectorsBase/GeometryManager.h"
40+ #include " DetectorsBase/Propagator.h"
41+ #include " Framework/ASoAHelpers.h"
42+ #include " Framework/AnalysisDataModel.h"
43+ #include " Framework/AnalysisTask.h"
44+ #include " Framework/RunningWorkflowInfo.h"
45+ #include " Framework/runDataProcessing.h"
46+ #include " ReconstructionDataFormats/Track.h"
47+
48+ #include < array>
49+ #include < cmath>
50+ #include < cstdlib>
51+ #include < iterator>
52+ #include < map>
53+ #include < utility>
5254
5355using namespace o2 ;
5456using namespace o2 ::analysis;
@@ -68,13 +70,13 @@ using Alice3TracksWPid = soa::Join<aod::Tracks, aod::TracksCov, aod::Alice3Decay
6870struct alice3decayFinder {
6971 SliceCache cache;
7072
71- Produces<aod::Alice3D0Meson> candidateD0meson; // contains D0 and D0bar selected candidates (separated, i.e. each row with a single mass hypothesis)
72- Produces<aod::Alice3D0Sel> selectionOutcome; // flags for isSelD0 and isSelD0bar
73- Produces<aod::Alice3D0MCTruth> mcTruthOutcome; // contains MC truth info (is true D0, true D0bar, or bkg)
74- Produces<aod::Alice3Cand3Ps> candidate3Prong; // contains Lc selected candidates
75- Produces<aod::Alice3McRecFlags> mcRecFlags; // contains MC truth info (is true Lc, or bkg)
76- Produces<aod::Alice3PidLcs> pidInfoLcDaugs; // contains PID info for Lc candidates
77- Produces<aod::Alice3McGenFlags> mcGenFlags; // contains MC gen info for 3-prong candidates
73+ Produces<aod::Alice3D0Meson> candidateD0meson; // contains D0 and D0bar selected candidates (separated, i.e. each row with a single mass hypothesis)
74+ Produces<aod::Alice3D0Sel> selectionOutcome; // flags for isSelD0 and isSelD0bar
75+ Produces<aod::Alice3D0MCTruth> mcTruthOutcome; // contains MC truth info (is true D0, true D0bar, or bkg)
76+ Produces<aod::Alice3Cand3Ps> candidate3Prong; // contains Lc selected candidates
77+ Produces<aod::Alice3McRecFlags> mcRecFlags; // contains MC truth info (is true Lc, or bkg)
78+ Produces<aod::Alice3PidLcs> pidInfoLcDaugs; // contains PID info for Lc candidates
79+ Produces<aod::Alice3McGenFlags> mcGenFlags; // contains MC gen info for 3-prong candidates
7880
7981 Configurable<bool > fillSwapHypo{" fillSwapHypo" , true , " swap prong 0 and prong 2 in 3-prong case" };
8082 // Vertexing
@@ -171,8 +173,8 @@ struct alice3decayFinder {
171173 // partitions for D mesons
172174 Partition<Alice3TracksWPid> tracksPiPlusFromD =
173175 ((aod::a3DecayMap::decayMap & trackSelectionPiPlusFromD) == trackSelectionPiPlusFromD) &&
174- aod::track::signed1Pt > 0 .0f &&
175- nabs (aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs (aod::track::signed1Pt);
176+ aod::track::signed1Pt > 0 .0f &&
177+ nabs (aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs (aod::track::signed1Pt);
176178 Partition<Alice3TracksWPid> tracksPiMinusFromD =
177179 ((aod::a3DecayMap::decayMap & trackSelectionPiMinusFromD) == trackSelectionPiMinusFromD) && aod::track::signed1Pt < 0 .0f && nabs(aod::track::dcaXY) > piFromD_dcaXYconstant + piFromD_dcaXYpTdep* nabs (aod::track::signed1Pt);
178180 Partition<Alice3TracksWPid> tracksKaPlusFromD =
@@ -215,36 +217,36 @@ struct alice3decayFinder {
215217 float normalizedDecayLength;
216218 int mcTruth; // 0 = bkg, 1 = D0, 2 = D0bar
217219 } dmeson;
218-
220+
219221 struct {
220222 float dcaDau;
221223 float mass;
222224 float pt;
223225 float phi;
224226 float eta;
225- std::array<float , 3 > Pdaug0; // proton track
226- std::array<float , 3 > Pdaug1; // kaon track
227- std::array<float , 3 > Pdaug2; // pion track
228- std::array<float , 3 > primaryVertex; // primary vertex coordinates
227+ std::array<float , 3 > Pdaug0; // proton track
228+ std::array<float , 3 > Pdaug1; // kaon track
229+ std::array<float , 3 > Pdaug2; // pion track
230+ std::array<float , 3 > primaryVertex; // primary vertex coordinates
229231 std::array<float , 3 > secondaryVertex; // secondary vertex coordinates
230- float impactParameterY0; // impact parameters
231- float errorImpactParameterY0; // impact parameters error
232- float impactParameterY1; // impact parameters
233- float errorImpactParameterY1; // impact parameters error
234- float impactParameterY2; // impact parameters
235- float errorImpactParameterY2; // impact parameters error
236- float impactParameterZ0; // impact parameters
237- float errorImpactParameterZ0; // impact parameters error
238- float impactParameterZ1; // impact parameters
239- float errorImpactParameterZ1; // impact parameters error
240- float impactParameterZ2; // impact parameters
241- float errorImpactParameterZ2; // impact parameters error
242- float errorDecayLength; // normalized 3D decay length
243- float errorDecayLengthXY; // normalized 3D decay length
244- float chi2PCA; // normalized 3D decay length
245- int flagMc; // 0 = bkg, pdg code for signal
246- int origin; // 1 = prompt, 2 = non-prompt
247- float ptBMotherRec; // pT of the B hadron mother (reconstructed)
232+ float impactParameterY0; // impact parameters
233+ float errorImpactParameterY0; // impact parameters error
234+ float impactParameterY1; // impact parameters
235+ float errorImpactParameterY1; // impact parameters error
236+ float impactParameterY2; // impact parameters
237+ float errorImpactParameterY2; // impact parameters error
238+ float impactParameterZ0; // impact parameters
239+ float errorImpactParameterZ0; // impact parameters error
240+ float impactParameterZ1; // impact parameters
241+ float errorImpactParameterZ1; // impact parameters error
242+ float impactParameterZ2; // impact parameters
243+ float errorImpactParameterZ2; // impact parameters error
244+ float errorDecayLength; // normalized 3D decay length
245+ float errorDecayLengthXY; // normalized 3D decay length
246+ float chi2PCA; // normalized 3D decay length
247+ int flagMc; // 0 = bkg, pdg code for signal
248+ int origin; // 1 = prompt, 2 = non-prompt
249+ float ptBMotherRec; // pT of the B hadron mother (reconstructed)
248250 } cand3prong;
249251
250252 template <typename TTrackType>
@@ -338,7 +340,7 @@ struct alice3decayFinder {
338340 return false ;
339341 }
340342 // }-{}-{}-{}-{}-{}-{}-{}-{}-{}
341-
343+
342344 auto covMatrixPCA = fitter3.calcPCACovMatrixFlat ();
343345 cand3prong.chi2PCA = fitter3.getChi2AtPCACandidate ();
344346 cand3prong.dcaDau = TMath::Sqrt (fitter3.getChi2AtPCACandidate ());
@@ -353,7 +355,7 @@ struct alice3decayFinder {
353355 trackParVar0 = fitter3.getTrack (0 );
354356 trackParVar1 = fitter3.getTrack (1 );
355357 trackParVar2 = fitter3.getTrack (2 );
356-
358+
357359 std::array<float , 3 > P0{};
358360 std::array<float , 3 > P1{};
359361 std::array<float , 3 > P2{};
@@ -396,8 +398,8 @@ struct alice3decayFinder {
396398
397399 // return mass
398400 cand3prong.mass = RecoDecay::m (array{array{P0[0 ], P0[1 ], P0[2 ]},
399- array{P1[0 ], P1[1 ], P1[2 ]},
400- array{P2[0 ], P2[1 ], P2[2 ]}},
401+ array{P1[0 ], P1[1 ], P1[2 ]},
402+ array{P2[0 ], P2[1 ], P2[2 ]}},
401403 daughtersMasses3Prong);
402404
403405 cand3prong.pt = std::hypot (P0[0 ] + P1[0 ] + P2[0 ], P0[1 ] + P1[1 ] + P2[1 ]);
@@ -423,7 +425,7 @@ struct alice3decayFinder {
423425 } else {
424426 cand3prong.flagMc = motherPart.pdgCode () > 0 ? charmHadFlag : -charmHadFlag; // Particle
425427 }
426-
428+
427429 cand3prong.origin = 0 ;
428430 if (indexRec > 0 ) {
429431 LOG (info) << " indexRec: " << indexRec;
@@ -589,7 +591,6 @@ struct alice3decayFinder {
589591 histos.add (" h2dDCAxyVsPtPrMinusFrom3P" , " h2dDCAxyVsPtPrMinusFrom3P" , kTH2F , {axisPt, axisDCA});
590592 histos.add (" hDcaXYProngs" , " DCAxy of 3-prong candidate daughters;#it{p}_{T} (GeV/#it{c};#it{d}_{xy}) (#mum);entries" , {HistType::kTH2F , {{100 , 0 ., 20 .}, {200 , -500 ., 500 .}}});
591593 histos.add (" hDcaZProngs" , " DCAz of 3-prong candidate daughters;#it{p}_{T} (GeV/#it{c};#it{d}_{z}) (#mum);entries" , {HistType::kTH2F , {{100 , 0 ., 20 .}, {200 , -500 ., 500 .}}});
592-
593594 }
594595 }
595596
@@ -661,7 +662,7 @@ struct alice3decayFinder {
661662 if (mcParticle.pdgCode () > 0 ) {
662663 LOG (info) << " [P] Origin: " << origin << " PDG: " << charmHadFlag << " " << mcParticle.pdgCode ();
663664 histos.fill (HIST (" h2dGen3Prong" ), mcParticle.pt (), mcParticle.eta ());
664- } else {
665+ } else {
665666 histos.fill (HIST (" h2dGen3ProngBar" ), mcParticle.pt (), mcParticle.eta ());
666667 LOG (info) << " [AP] Origin: " << origin << " PDG: " << -charmHadFlag << " " << mcParticle.pdgCode ();
667668 }
@@ -985,7 +986,7 @@ struct alice3decayFinder {
985986 }
986987 // *+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
987988
988- template <typename TProng>
989+ template <typename TProng>
989990 void fillPidTable (TProng const & prong0, TProng const & prong1, TProng const & prong2)
990991 {
991992 if (motherPdgCode == o2::constants::physics::Pdg::kLambdaCPlus ) {
@@ -998,7 +999,7 @@ struct alice3decayFinder {
998999 }
9991000
10001001 // *+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*+-+*
1001- template <bool FillSwapHypo, typename TProng>
1002+ template <bool FillSwapHypo, typename TProng>
10021003 void fill3ProngTable (aod::Collision const & collision, TProng const & prongs0, TProng const & prongs1, TProng const & prongs2, aod::McParticles const & mcParticles)
10031004 {
10041005 // LOG(info) << "Filling 3-prong candidates with nprongs0: " << prongs0.size() << ", nprongs1: " << prongs1.size() << ", nprongs2: " << prongs2.size();
@@ -1042,8 +1043,7 @@ struct alice3decayFinder {
10421043 std::sqrt (cand3prong.errorImpactParameterZ1 ),
10431044 std::sqrt (cand3prong.errorImpactParameterZ2 ),
10441045 false , // is swapped hypothesis
1045- candPx, candPy, candPz
1046- );
1046+ candPx, candPy, candPz);
10471047 mcRecFlags (cand3prong.origin , cand3prong.ptBMotherRec , cand3prong.flagMc ); // placeholder for prompt/non-prompt
10481048 fillPidTable (prong0, prong1, prong2);
10491049
@@ -1070,8 +1070,7 @@ struct alice3decayFinder {
10701070 std::sqrt (cand3prong.errorImpactParameterZ1 ),
10711071 std::sqrt (cand3prong.errorImpactParameterZ0 ),
10721072 true , // is swapped hypothesis
1073- candPx, candPy, candPz
1074- );
1073+ candPx, candPy, candPz);
10751074 mcRecFlags (cand3prong.origin , cand3prong.ptBMotherRec , cand3prong.flagMc ); // placeholder for prompt/non-prompt
10761075 fillPidTable (prong2, prong1, prong0);
10771076 }
0 commit comments