1616#include " PWGLF/DataModel/LFStrangenessTables.h"
1717
1818#include " Common/CCDB/EventSelectionParams.h"
19+ #include " Common/CCDB/TriggerAliases.h"
1920#include " Common/Core/RecoDecay.h"
2021#include " Common/DataModel/Centrality.h"
2122#include " Common/DataModel/CollisionAssociationTables.h"
2223#include " Common/DataModel/EventSelection.h"
2324#include " Common/DataModel/Multiplicity.h"
24- #include " Common/DataModel/PIDResponseTOF.h"
2525#include " Common/DataModel/PIDResponseTPC.h"
2626#include " Common/DataModel/TrackSelectionTables.h"
2727
4646#include < TPDGCode.h>
4747#include < TString.h>
4848
49- #include < chrono>
5049#include < cmath>
5150#include < cstdint>
5251#include < string>
@@ -160,6 +159,18 @@ DECLARE_SOA_TABLE(LambdaTracksExt, "AOD", "LAMBDATRACKSEXT",
160159
161160using LambdaTrackExt = LambdaTracksExt::iterator;
162161
162+ namespace kaontrackext
163+ {
164+ DECLARE_SOA_COLUMN (KaonSharingLambdaDau, kaonSharingLambdaDau, bool );
165+ DECLARE_SOA_COLUMN (KaonSharingLambdaDauIds, kaonSharingLambdaDauIds, std::vector<int64_t >);
166+ DECLARE_SOA_COLUMN (TrueKaonFlag, trueKaonFlag, bool );
167+ } // namespace kaontrackext
168+ DECLARE_SOA_TABLE (KaonTracksExt, " AOD" , " KAONTRACKSEXT" ,
169+ kaontrackext::KaonSharingLambdaDau,
170+ kaontrackext::KaonSharingLambdaDauIds,
171+ kaontrackext::TrueKaonFlag);
172+ using KaonTrackExt = KaonTracksExt::iterator;
173+
163174namespace lambdamcgentrack
164175{
165176DECLARE_SOA_INDEX_COLUMN (LambdaMcGenCollision, lambdaMcGenCollision);
@@ -1186,12 +1197,15 @@ struct LambdaTableProducer {
11861197};
11871198
11881199struct LambdaTracksExtProducer {
1189-
1200+ // Tables
11901201 Produces<aod::LambdaTracksExt> lambdaTrackExtTable;
1202+ Produces<aod::KaonTracksExt> kaonTrackExtTable;
11911203
11921204 // Configurables
11931205 Configurable<bool > cAcceptAllLambda{" cAcceptAllLambda" , false , " Accept all Lambda" };
11941206 Configurable<bool > cRejAllLambdaShaDau{" cRejAllLambdaShaDau" , true , " Reject all Lambda sharing daughters" };
1207+ Configurable<bool > cAcceptAllKaon{" cAcceptAllKaon" , false , " Accept all Kaons" };
1208+ Configurable<bool > cRejAllKaonShaLaDau{" cRejAllKaonShaLaDau" , true , " Reject all Kaons sharing Lambda daughters" };
11951209
11961210 // Histogram Registry.
11971211 HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
@@ -1200,9 +1214,6 @@ struct LambdaTracksExtProducer {
12001214 {
12011215 // Axis Specifications
12021216 const AxisSpec axisMult (10 , 0 , 10 );
1203- const AxisSpec axisMass (100 , 1.06 , 1.16 , " Inv Mass (GeV/#it{c}^{2})" );
1204- const AxisSpec axisCPA (100 , 0.995 , 1.0 , " cos(#theta_{PA})" );
1205- const AxisSpec axisDcaDau (75 , 0 ., 1.5 , " Daug DCA (#sigma)" );
12061217 const AxisSpec axisDEta (320 , -1.6 , 1.6 , " #Delta#eta" );
12071218 const AxisSpec axisDPhi (640 , -PIHalf, 3 . * PIHalf, " #Delta#varphi" );
12081219
@@ -1211,26 +1222,20 @@ struct LambdaTracksExtProducer {
12111222 histos.add (" h1i_totantilambda_mult" , " Multiplicity" , kTH1I , {axisMult});
12121223 histos.add (" h1i_lambda_mult" , " Multiplicity" , kTH1I , {axisMult});
12131224 histos.add (" h1i_antilambda_mult" , " Multiplicity" , kTH1I , {axisMult});
1225+
1226+ histos.add (" h1i_totkaplus_mult" , " Multiplicity" , kTH1I , {axisMult});
1227+ histos.add (" h1i_totkaminus_mult" , " Multiplicity" , kTH1I , {axisMult});
1228+ histos.add (" h1i_kaplus_mult" , " Multiplicity" , kTH1I , {axisMult});
1229+ histos.add (" h1i_kaminus_mult" , " Multiplicity" , kTH1I , {axisMult});
1230+
12141231 histos.add (" h2d_n2_etaphi_LaP_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12151232 histos.add (" h2d_n2_etaphi_LaP_LaP" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12161233 histos.add (" h2d_n2_etaphi_LaM_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12171234
1218- // InvMass, DcaDau and CosPA
1219- histos.add (" Reco/h1f_lambda_invmass" , " M_{p#pi}" , kTH1F , {axisMass});
1220- histos.add (" Reco/h1f_antilambda_invmass" , " M_{p#pi}" , kTH1F , {axisMass});
1221- histos.addClone (" Reco/" , " SharingDau/" );
1222- }
1223-
1224- template <ShareDauLambda sd, typename T>
1225- void fillHistos (T const & track)
1226- {
1227- static constexpr std::string_view SubDir[] = {" Reco/" , " SharingDau/" };
1228-
1229- if (track.partType () == kLambda ) {
1230- histos.fill (HIST (SubDir[sd]) + HIST (" h1f_lambda_invmass" ), track.mass ());
1231- } else {
1232- histos.fill (HIST (SubDir[sd]) + HIST (" h1f_antilambda_invmass" ), track.mass ());
1233- }
1235+ histos.add (" h2d_n2_etaphi_KaP_LaP" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
1236+ histos.add (" h2d_n2_etaphi_KaP_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
1237+ histos.add (" h2d_n2_etaphi_KaM_LaP" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
1238+ histos.add (" h2d_n2_etaphi_KaM_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12341239 }
12351240
12361241 void processDummy (aod::LambdaCollisions::iterator const &) {}
@@ -1273,13 +1278,7 @@ struct LambdaTracksExtProducer {
12731278 }
12741279 }
12751280
1276- // fill QA histograms
1277- if (lambdaSharingDauFlag) {
1278- fillHistos<kLambdaShareDau >(lambda);
1279- } else {
1280- fillHistos<kUniqueLambda >(lambda);
1281- }
1282-
1281+ // Accept/Reject
12831282 if (cAcceptAllLambda) { // Accept all lambda
12841283 trueLambdaFlag = true ;
12851284 } else if (cRejAllLambdaShaDau && !lambdaSharingDauFlag) { // Reject all lambda sharing daughter
@@ -1295,7 +1294,7 @@ struct LambdaTracksExtProducer {
12951294 }
12961295 }
12971296
1298- // fill LambdaTrackExt table
1297+ // Fill LambdaTrackExt table
12991298 lambdaTrackExtTable (lambdaSharingDauFlag, vSharedDauLambdaIndex, trueLambdaFlag);
13001299 }
13011300
@@ -1318,6 +1317,78 @@ struct LambdaTracksExtProducer {
13181317 }
13191318
13201319 PROCESS_SWITCH (LambdaTracksExtProducer, processLambdaTrackExt, " Process for lambda track extension" , false );
1320+
1321+ void processKaonTrackExt (aod::LambdaCollisions::iterator const &, aod::LambdaTracks const & lambdaTracks, aod::KaonTracks const & kaonTracks)
1322+ {
1323+ int nTotKaonPlus = 0 , nTotKaonMinus = 0 , nSelKaonPlus = 0 , nSelKaonMinus = 0 ;
1324+
1325+ for (auto const & kaonTrack : kaonTracks) {
1326+ bool kaonSharingLambdaDauFlag = false , trueKaonFlag = false ;
1327+ std::vector<int64_t > vKaonShareDauLambdaIndex;
1328+
1329+ if (kaonTrack.partType () == kKaonPlus ) {
1330+ ++nTotKaonPlus;
1331+ } else if (kaonTrack.partType () == kKaonMinus ) {
1332+ ++nTotKaonMinus;
1333+ }
1334+
1335+ for (auto const & lambdaTrack : lambdaTracks) {
1336+ if (kaonTrack.kaonTrackId () == lambdaTrack.posTrackId () || kaonTrack.kaonTrackId () == lambdaTrack.negTrackId ()) {
1337+ vKaonShareDauLambdaIndex.push_back (kaonTrack.kaonTrackId ());
1338+ kaonSharingLambdaDauFlag = true ;
1339+
1340+ // Fill Deta-Dphi Histogram
1341+ if (kaonTrack.partType () == kKaonPlus && lambdaTrack.partType () == kLambda ) {
1342+ histos.fill (HIST (" h2d_n2_etaphi_KaPLaP" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1343+ } else if (kaonTrack.partType () == kKaonPlus && lambdaTrack.partType () == kAntiLambda ) {
1344+ histos.fill (HIST (" h2d_n2_etaphi_KaPLaM" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1345+ } else if (kaonTrack.partType () == kKaonMinus && lambdaTrack.partType () == kLambda ) {
1346+ histos.fill (HIST (" h2d_n2_etaphi_KaMLaP" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1347+ } else if (kaonTrack.partType () == kKaonMinus && lambdaTrack.partType () == kAntiLambda ) {
1348+ histos.fill (HIST (" h2d_n2_etaphi_KaMLaM" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1349+ }
1350+ }
1351+ }
1352+
1353+ // Accept / Reject
1354+ if (cAcceptAllKaon) {
1355+ trueKaonFlag = true ;
1356+ } else if (cRejAllKaonShaLaDau && !kaonSharingLambdaDauFlag) {
1357+ trueKaonFlag = true ;
1358+ }
1359+
1360+ // Multiplicity of selected kaons
1361+ if (trueKaonFlag) {
1362+ if (kaonTrack.partType () == kKaonPlus ) {
1363+ ++nSelKaonPlus;
1364+ } else if (kaonTrack.partType () == kKaonMinus ) {
1365+ ++nSelKaonMinus;
1366+ }
1367+ }
1368+
1369+ // Fill LambdaTrackExt table
1370+ kaonTrackExtTable (kaonSharingLambdaDauFlag, vKaonShareDauLambdaIndex, trueKaonFlag);
1371+ }
1372+
1373+ // Fill multiplicity histograms
1374+ if (nTotKaonPlus != 0 ) {
1375+ histos.fill (HIST (" h1i_totkaplus_mult" ), nTotKaonPlus);
1376+ }
1377+
1378+ if (nTotKaonMinus != 0 ) {
1379+ histos.fill (HIST (" h1i_totkaminus_mult" ), nTotKaonMinus);
1380+ }
1381+
1382+ if (nSelKaonPlus != 0 ) {
1383+ histos.fill (HIST (" h1i_kaplus_mult" ), nSelKaonPlus);
1384+ }
1385+
1386+ if (nSelKaonMinus != 0 ) {
1387+ histos.fill (HIST (" h1i_kaminus_mult" ), nSelKaonMinus);
1388+ }
1389+ }
1390+
1391+ PROCESS_SWITCH (LambdaTracksExtProducer, processKaonTrackExt, " Process for kaon track extension" , false );
13211392};
13221393
13231394struct LambdaR2Correlation {
@@ -1386,8 +1457,6 @@ struct LambdaR2Correlation {
13861457 histos.add (" Event/Reco/h1f_collision_posz" , " V_{Z} Distribution" , kTH1F , {axisPosZ});
13871458 histos.add (" Event/Reco/h1f_ft0m_mult_percentile" , " FT0M (%)" , kTH1F , {axisCent});
13881459 histos.add (" Event/Reco/h2f_Mult_vs_Centrality" , " N_{ch} vs FT0M(%)" , kTProfile , {axisCent});
1389- histos.add (" Event/Reco/h2f_lambda_mult" , " #Lambda - Multiplicity" , kTProfile , {axisCent});
1390- histos.add (" Event/Reco/h2f_antilambda_mult" , " #bar{#Lambda} - Multiplicity" , kTProfile , {axisCent});
13911460
13921461 // Efficiency Histograms
13931462 // Single Particle Efficiencies
@@ -1483,9 +1552,6 @@ struct LambdaR2Correlation {
14831552 int ntrk = 0 ;
14841553
14851554 for (auto const & track : tracks) {
1486- // count tracks
1487- ++ntrk;
1488-
14891555 // Efficiency Plots
14901556 histos.fill (HIST (SubDirRecGen[rec_gen]) + HIST (" Efficiency/h2f_n1_centpt_" ) + HIST (SubDirHist[part]), cent, track.pt ());
14911557 histos.fill (HIST (SubDirRecGen[rec_gen]) + HIST (" Efficiency/h3f_n1_centptrap_" ) + HIST (SubDirHist[part]), cent, track.pt (), track.rap ());
@@ -1499,15 +1565,6 @@ struct LambdaR2Correlation {
14991565 // Rho1 for N1RapPhi
15001566 histos.fill (HIST (SubDirRecGen[rec_gen]) + HIST (" h3f_n1_rapphi_" ) + HIST (SubDirHist[part]), cent, track.rap (), track.phi (), track.corrFact ());
15011567 }
1502-
1503- // fill multiplicity histograms
1504- if (ntrk != 0 ) {
1505- if (part == kLambda ) {
1506- histos.fill (HIST (" Event/" ) + HIST (SubDirRecGen[rec_gen]) + HIST (" h2f_lambda_mult" ), cent, ntrk);
1507- } else if (part == kAntiLambda ) {
1508- histos.fill (HIST (" Event/" ) + HIST (SubDirRecGen[rec_gen]) + HIST (" h2f_antilambda_mult" ), cent, ntrk);
1509- }
1510- }
15111568 }
15121569
15131570 template <ParticlePairType partpair, RecGenType rec_gen, bool same, typename T1 , typename T2 >
@@ -1531,8 +1588,8 @@ struct LambdaR2Correlation {
15311588 SliceCache cache;
15321589 Partition<LambdaTracks> partLambdaTracks = (aod::lambdatrack::partType == (int8_t )kLambda ) && (aod::lambdatrackext::trueLambdaFlag == true );
15331590 Partition<LambdaTracks> partAntiLambdaTracks = (aod::lambdatrack::partType == (int8_t )kAntiLambda ) && (aod::lambdatrackext::trueLambdaFlag == true );
1534- Partition<KaonTracks> partKaonPlusTracks = (aod::kaontrack::partType == (int8_t )kKaonPlus );
1535- Partition<KaonTracks> partKaonMinusTracks = (aod::kaontrack::partType == (int8_t )kKaonMinus );
1591+ Partition<KaonTracks> partKaonPlusTracks = (aod::kaontrack::partType == (int8_t )kKaonPlus /* && (aod::kaontrackext::trueKaonFlag == true) */ );
1592+ Partition<KaonTracks> partKaonMinusTracks = (aod::kaontrack::partType == (int8_t )kKaonMinus /* && (aod::kaontrackext::trueKaonFlag == true) */ );
15361593
15371594 void processDummy (aod::LambdaCollisions::iterator const &) {}
15381595
0 commit comments