@@ -160,6 +160,18 @@ DECLARE_SOA_TABLE(LambdaTracksExt, "AOD", "LAMBDATRACKSEXT",
160160
161161using LambdaTrackExt = LambdaTracksExt::iterator;
162162
163+ namespace kaontrackext
164+ {
165+ DECLARE_SOA_COLUMN (KaonSharingLambdaDau, kaonSharingLambdaDau, bool );
166+ DECLARE_SOA_COLUMN (KaonSharingLambdaDauIds, kaonSharingLambdaDauIds, std::vector<int64_t >);
167+ DECLARE_SOA_COLUMN (TrueKaonFlag, trueKaonFlag, bool );
168+ } // namespace kaontrackext
169+ DECLARE_SOA_TABLE (KaonTracksExt, " AOD" , " KAONTRACKSEXT" ,
170+ kaontrackext::KaonSharingLambdaDau,
171+ kaontrackext::KaonSharingLambdaDauIds,
172+ kaontrackext::TrueKaonFlag);
173+ using KaonTrackExt = KaonTracksExt::iterator;
174+
163175namespace lambdamcgentrack
164176{
165177DECLARE_SOA_INDEX_COLUMN (LambdaMcGenCollision, lambdaMcGenCollision);
@@ -1186,12 +1198,15 @@ struct LambdaTableProducer {
11861198};
11871199
11881200struct LambdaTracksExtProducer {
1189-
1201+ // Tables
11901202 Produces<aod::LambdaTracksExt> lambdaTrackExtTable;
1203+ Produces<aod::KaonTracksExt> kaonTrackExtTable;
11911204
11921205 // Configurables
11931206 Configurable<bool > cAcceptAllLambda{" cAcceptAllLambda" , false , " Accept all Lambda" };
11941207 Configurable<bool > cRejAllLambdaShaDau{" cRejAllLambdaShaDau" , true , " Reject all Lambda sharing daughters" };
1208+ Configurable<bool > cAcceptAllKaon{" cAcceptAllKaon" , false , " Accept all Kaons" };
1209+ Configurable<bool > cRejAllKaonShaLaDau{" cRejAllKaonShaLaDau" , true , " Reject all Kaons sharing Lambda daughters" };
11951210
11961211 // Histogram Registry.
11971212 HistogramRegistry histos{" histos" , {}, OutputObjHandlingPolicy::AnalysisObject};
@@ -1200,9 +1215,6 @@ struct LambdaTracksExtProducer {
12001215 {
12011216 // Axis Specifications
12021217 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)" );
12061218 const AxisSpec axisDEta (320 , -1.6 , 1.6 , " #Delta#eta" );
12071219 const AxisSpec axisDPhi (640 , -PIHalf, 3 . * PIHalf, " #Delta#varphi" );
12081220
@@ -1211,26 +1223,20 @@ struct LambdaTracksExtProducer {
12111223 histos.add (" h1i_totantilambda_mult" , " Multiplicity" , kTH1I , {axisMult});
12121224 histos.add (" h1i_lambda_mult" , " Multiplicity" , kTH1I , {axisMult});
12131225 histos.add (" h1i_antilambda_mult" , " Multiplicity" , kTH1I , {axisMult});
1226+
1227+ histos.add (" h1i_totkaplus_mult" , " Multiplicity" , kTH1I , {axisMult});
1228+ histos.add (" h1i_totkaminus_mult" , " Multiplicity" , kTH1I , {axisMult});
1229+ histos.add (" h1i_kaplus_mult" , " Multiplicity" , kTH1I , {axisMult});
1230+ histos.add (" h1i_kaminus_mult" , " Multiplicity" , kTH1I , {axisMult});
1231+
12141232 histos.add (" h2d_n2_etaphi_LaP_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12151233 histos.add (" h2d_n2_etaphi_LaP_LaP" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12161234 histos.add (" h2d_n2_etaphi_LaM_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12171235
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- }
1236+ histos.add (" h2d_n2_etaphi_KaP_LaP" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
1237+ histos.add (" h2d_n2_etaphi_KaP_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
1238+ histos.add (" h2d_n2_etaphi_KaM_LaP" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
1239+ histos.add (" h2d_n2_etaphi_KaM_LaM" , " #rho_{2}^{SharePair}" , kTH2D , {axisDEta, axisDPhi});
12341240 }
12351241
12361242 void processDummy (aod::LambdaCollisions::iterator const &) {}
@@ -1273,13 +1279,7 @@ struct LambdaTracksExtProducer {
12731279 }
12741280 }
12751281
1276- // fill QA histograms
1277- if (lambdaSharingDauFlag) {
1278- fillHistos<kLambdaShareDau >(lambda);
1279- } else {
1280- fillHistos<kUniqueLambda >(lambda);
1281- }
1282-
1282+ // Accept/Reject
12831283 if (cAcceptAllLambda) { // Accept all lambda
12841284 trueLambdaFlag = true ;
12851285 } else if (cRejAllLambdaShaDau && !lambdaSharingDauFlag) { // Reject all lambda sharing daughter
@@ -1295,7 +1295,7 @@ struct LambdaTracksExtProducer {
12951295 }
12961296 }
12971297
1298- // fill LambdaTrackExt table
1298+ // Fill LambdaTrackExt table
12991299 lambdaTrackExtTable (lambdaSharingDauFlag, vSharedDauLambdaIndex, trueLambdaFlag);
13001300 }
13011301
@@ -1318,6 +1318,78 @@ struct LambdaTracksExtProducer {
13181318 }
13191319
13201320 PROCESS_SWITCH (LambdaTracksExtProducer, processLambdaTrackExt, " Process for lambda track extension" , false );
1321+
1322+ void processKaonTrackExt (aod::LambdaCollisions::iterator const &, aod::LambdaTracks const & lambdaTracks, aod::KaonTracks const & kaonTracks)
1323+ {
1324+ int nTotKaonPlus = 0 , nTotKaonMinus = 0 , nSelKaonPlus = 0 , nSelKaonMinus = 0 ;
1325+
1326+ for (auto const & kaonTrack : kaonTracks) {
1327+ bool kaonSharingLambdaDauFlag = false , trueKaonFlag = false ;
1328+ std::vector<int64_t > vKaonShareDauLambdaIndex;
1329+
1330+ if (kaonTrack.partType () == kKaonPlus ) {
1331+ ++nTotKaonPlus;
1332+ } else if (kaonTrack.partType () == kKaonMinus ) {
1333+ ++nTotKaonMinus;
1334+ }
1335+
1336+ for (auto const & lambdaTrack : lambdaTracks) {
1337+ if (kaonTrack.kaonTrackId () == lambdaTrack.posTrackId () || kaonTrack.kaonTrackId () == lambdaTrack.negTrackId ()) {
1338+ vKaonShareDauLambdaIndex.push_back (kaonTrack.kaonTrackId ());
1339+ kaonSharingLambdaDauFlag = true ;
1340+
1341+ // Fill Deta-Dphi Histogram
1342+ if (kaonTrack.partType () == kKaonPlus && lambdaTrack.partType () == kLambda ) {
1343+ histos.fill (HIST (" h2d_n2_etaphi_KaPLaP" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1344+ } else if (kaonTrack.partType () == kKaonPlus && lambdaTrack.partType () == kAntiLambda ) {
1345+ histos.fill (HIST (" h2d_n2_etaphi_KaPLaM" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1346+ } else if (kaonTrack.partType () == kKaonMinus && lambdaTrack.partType () == kLambda ) {
1347+ histos.fill (HIST (" h2d_n2_etaphi_KaMLaP" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1348+ } else if (kaonTrack.partType () == kKaonMinus && lambdaTrack.partType () == kAntiLambda ) {
1349+ histos.fill (HIST (" h2d_n2_etaphi_KaMLaM" ), kaonTrack.eta () - lambdaTrack.eta (), RecoDecay::constrainAngle (kaonTrack.phi () - lambdaTrack.phi ()), -PIHalf);
1350+ }
1351+ }
1352+ }
1353+
1354+ // Accept / Reject
1355+ if (cAcceptAllKaon) {
1356+ trueKaonFlag = true ;
1357+ } else if (cRejAllKaonShaLaDau && !kaonSharingLambdaDauFlag) {
1358+ trueKaonFlag = true ;
1359+ }
1360+
1361+ // Multiplicity of selected kaons
1362+ if (trueKaonFlag) {
1363+ if (kaonTrack.partType () == kKaonPlus ) {
1364+ ++nSelKaonPlus;
1365+ } else if (kaonTrack.partType () == kKaonMinus ) {
1366+ ++nSelKaonMinus;
1367+ }
1368+ }
1369+
1370+ // Fill LambdaTrackExt table
1371+ kaonTrackExtTable (kaonSharingLambdaDauFlag, vKaonShareDauLambdaIndex, trueKaonFlag);
1372+ }
1373+
1374+ // Fill multiplicity histograms
1375+ if (nTotKaonPlus != 0 ) {
1376+ histos.fill (HIST (" h1i_totkaplus_mult" ), nTotKaonPlus);
1377+ }
1378+
1379+ if (nTotKaonMinus != 0 ) {
1380+ histos.fill (HIST (" h1i_totkaminus_mult" ), nTotKaonMinus);
1381+ }
1382+
1383+ if (nSelKaonPlus != 0 ) {
1384+ histos.fill (HIST (" h1i_kaplus_mult" ), nSelKaonPlus);
1385+ }
1386+
1387+ if (nSelKaonMinus != 0 ) {
1388+ histos.fill (HIST (" h1i_kaminus_mult" ), nSelKaonMinus);
1389+ }
1390+ }
1391+
1392+ PROCESS_SWITCH (LambdaTracksExtProducer, processKaonTrackExt, " Process for kaon track extension" , false );
13211393};
13221394
13231395struct LambdaR2Correlation {
@@ -1386,8 +1458,6 @@ struct LambdaR2Correlation {
13861458 histos.add (" Event/Reco/h1f_collision_posz" , " V_{Z} Distribution" , kTH1F , {axisPosZ});
13871459 histos.add (" Event/Reco/h1f_ft0m_mult_percentile" , " FT0M (%)" , kTH1F , {axisCent});
13881460 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});
13911461
13921462 // Efficiency Histograms
13931463 // Single Particle Efficiencies
@@ -1483,9 +1553,6 @@ struct LambdaR2Correlation {
14831553 int ntrk = 0 ;
14841554
14851555 for (auto const & track : tracks) {
1486- // count tracks
1487- ++ntrk;
1488-
14891556 // Efficiency Plots
14901557 histos.fill (HIST (SubDirRecGen[rec_gen]) + HIST (" Efficiency/h2f_n1_centpt_" ) + HIST (SubDirHist[part]), cent, track.pt ());
14911558 histos.fill (HIST (SubDirRecGen[rec_gen]) + HIST (" Efficiency/h3f_n1_centptrap_" ) + HIST (SubDirHist[part]), cent, track.pt (), track.rap ());
@@ -1499,15 +1566,6 @@ struct LambdaR2Correlation {
14991566 // Rho1 for N1RapPhi
15001567 histos.fill (HIST (SubDirRecGen[rec_gen]) + HIST (" h3f_n1_rapphi_" ) + HIST (SubDirHist[part]), cent, track.rap (), track.phi (), track.corrFact ());
15011568 }
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- }
15111569 }
15121570
15131571 template <ParticlePairType partpair, RecGenType rec_gen, bool same, typename T1 , typename T2 >
@@ -1526,13 +1584,13 @@ struct LambdaR2Correlation {
15261584
15271585 using LambdaCollisions = aod::LambdaCollisions;
15281586 using LambdaTracks = soa::Join<aod::LambdaTracks, aod::LambdaTracksExt>;
1529- using KaonTracks = aod::KaonTracks;
1587+ using KaonTracks = soa::Join< aod::KaonTracks, aod::KaonTracksExt> ;
15301588
15311589 SliceCache cache;
15321590 Partition<LambdaTracks> partLambdaTracks = (aod::lambdatrack::partType == (int8_t )kLambda ) && (aod::lambdatrackext::trueLambdaFlag == true );
15331591 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 );
1592+ Partition<KaonTracks> partKaonPlusTracks = (aod::kaontrack::partType == (int8_t )kKaonPlus ) && (aod::kaontrackext::trueKaonFlag == true ) ;
1593+ Partition<KaonTracks> partKaonMinusTracks = (aod::kaontrack::partType == (int8_t )kKaonMinus ) && (aod::kaontrackext::trueKaonFlag == true ) ;
15361594
15371595 void processDummy (aod::LambdaCollisions::iterator const &) {}
15381596
0 commit comments