@@ -72,7 +72,9 @@ using TracksWithAllExtras = soa::Join<aod::TracksIU, aod::TracksExtra, aod::pidT
7272// For derived data analysis
7373using dauTracks = soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs, aod::DauTrackTOFPIDs>;
7474using V0DerivedDatas = soa::Join<aod::V0Cores, aod::V0Extras, aod::V0CollRefs>;
75+ using V0DerivedDatasMC = soa::Join<aod::V0Cores, aod::V0Extras, aod::V0CollRefs, aod::V0CoreMCLabels>;
7576using CascDerivedDatas = soa::Join<aod::CascCores, aod::CascExtras, aod::CascCollRefs>;
77+ using CascDerivedDatasMC = soa::Join<aod::CascCores, aod::CascExtras, aod::CascCollRefs, aod::CascCoreMCLabels>;
7678
7779struct strangenesstofpid {
7880 // TOF pid for strangeness (recalculated with topology)
@@ -679,7 +681,7 @@ struct strangenesstofpid {
679681
680682 // templatized process function for symmetric operation in derived and original AO2D
681683 template <class TCollision , typename TV0, typename TTrack>
682- void processV0Candidate (TCollision const & collision, TV0 const & v0, TTrack const & pTra, TTrack const & nTra)
684+ void processV0Candidate (TCollision const & collision, TV0 const & v0, TTrack const & pTra, TTrack const & nTra, int v0pdg )
683685 {
684686 // time of V0 segment
685687 float lengthV0 = std::hypot (v0.x () - collision.getX (), v0.y () - collision.getY (), v0.z () - collision.getZ ());
@@ -873,7 +875,7 @@ struct strangenesstofpid {
873875
874876 if (pTra.hasTOF ()) {
875877 if (v0.v0cosPA () > v0Group.qaCosPA && v0.dcaV0daughters () < v0Group.qaDCADau ) {
876- if (std::abs (v0.mLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma ) {
878+ if (std::abs (v0.mLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && ((v0pdg== 0 )||(v0pdg== 3122 )) ) {
877879 histos.fill (HIST (" h2dDeltaTimePositiveLambdaPr" ), v0.p (), v0.eta (), deltaTimePositiveLambdaPr);
878880 if (calculationMethod.value ==2 && std::abs (timePositivePr_Method0-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon && std::abs (timePositivePr_Method1-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon ){
879881 histos.fill (HIST (" hDeltaTimeMethodsVsP_posLaPr" ), positiveP, v0.positiveeta (), (timePositivePr_Method0 - timePositivePr_Method1)*positiveCosine);
@@ -882,7 +884,7 @@ struct strangenesstofpid {
882884 if (doQANSigma)
883885 histos.fill (HIST (" h2dNSigmaPositiveLambdaPr" ), v0.p (), nSigmaPositiveLambdaPr);
884886 }
885- if (std::abs (v0.mAntiLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma ) {
887+ if (std::abs (v0.mAntiLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma && ((v0pdg== 0 )||(v0pdg==- 3122 )) ) {
886888 histos.fill (HIST (" h2dDeltaTimePositiveLambdaPi" ), v0.p (), v0.eta (), deltaTimePositiveLambdaPi);
887889 if (calculationMethod.value ==2 && std::abs (timePositivePi_Method0-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon && std::abs (timePositivePi_Method1-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon ){
888890 histos.fill (HIST (" hDeltaTimeMethodsVsP_posLaPi" ), positiveP, v0.positiveeta (), (timePositivePi_Method0 - timePositivePi_Method1)*positiveCosine);
@@ -891,7 +893,7 @@ struct strangenesstofpid {
891893 if (doQANSigma)
892894 histos.fill (HIST (" h2dNSigmaPositiveLambdaPi" ), v0.p (), nSigmaPositiveLambdaPi);
893895 }
894- if (std::abs (v0.mK0Short () - 0.497 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma ) {
896+ if (std::abs (v0.mK0Short () - 0.497 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && ((v0pdg== 0 )||(v0pdg== 310 )) ) {
895897 histos.fill (HIST (" h2dDeltaTimePositiveK0ShortPi" ), v0.p (), v0.eta (), deltaTimePositiveK0ShortPi);
896898 if (calculationMethod.value ==2 && std::abs (timePositivePi_Method0-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon && std::abs (timePositivePi_Method1-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon ){
897899 histos.fill (HIST (" hDeltaTimeMethodsVsP_posK0Pi" ), positiveP, v0.positiveeta (), (timePositivePi_Method0 - timePositivePi_Method1)*positiveCosine);
@@ -905,7 +907,7 @@ struct strangenesstofpid {
905907
906908 if (nTra.hasTOF ()) {
907909 if (v0.v0cosPA () > v0Group.qaCosPA && v0.dcaV0daughters () < v0Group.qaDCADau ) {
908- if (std::abs (v0.mLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma ) {
910+ if (std::abs (v0.mLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && ((v0pdg== 0 )||(v0pdg== 3122 )) ) {
909911 histos.fill (HIST (" h2dDeltaTimeNegativeLambdaPi" ), v0.p (), v0.eta (), deltaTimeNegativeLambdaPi);
910912 if (calculationMethod.value ==2 && std::abs (timeNegativePi_Method0-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon && std::abs (timeNegativePi_Method1-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon ){
911913 histos.fill (HIST (" hDeltaTimeMethodsVsP_negLaPi" ), negativeP, v0.negativeeta (), (timeNegativePi_Method0 - timeNegativePi_Method1)*negativeCosine);
@@ -914,7 +916,7 @@ struct strangenesstofpid {
914916 if (doQANSigma)
915917 histos.fill (HIST (" h2dNSigmaNegativeLambdaPi" ), v0.p (), nSigmaNegativeLambdaPi);
916918 }
917- if (std::abs (v0.mAntiLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma ) {
919+ if (std::abs (v0.mAntiLambda () - 1.115683 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < v0Group.qaTPCNSigma && ((v0pdg== 0 )||(v0pdg==- 3122 )) ) {
918920 histos.fill (HIST (" h2dDeltaTimeNegativeLambdaPr" ), v0.p (), v0.eta (), deltaTimeNegativeLambdaPr);
919921 if (calculationMethod.value ==2 && std::abs (timeNegativePr_Method0-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon && std::abs (timeNegativePr_Method1-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon ){
920922 histos.fill (HIST (" hDeltaTimeMethodsVsP_negLaPr" ), negativeP, v0.negativeeta (), (timeNegativePr_Method0 - timeNegativePr_Method1)*negativeCosine);
@@ -923,7 +925,7 @@ struct strangenesstofpid {
923925 if (doQANSigma)
924926 histos.fill (HIST (" h2dNSigmaNegativeLambdaPr" ), v0.p (), nSigmaNegativeLambdaPr);
925927 }
926- if (std::abs (v0.mK0Short () - 0.497 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma ) {
928+ if (std::abs (v0.mK0Short () - 0.497 ) < v0Group.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < v0Group.qaTPCNSigma && ((v0pdg== 0 )||(v0pdg== 310 )) ) {
927929 histos.fill (HIST (" h2dDeltaTimeNegativeK0ShortPi" ), v0.p (), v0.eta (), deltaTimeNegativeK0ShortPi);
928930 if (calculationMethod.value ==2 && std::abs (timeNegativePi_Method0-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon && std::abs (timeNegativePi_Method1-o2::aod::v0data::kNoTOFValue )>o2::aod::v0data::kEpsilon ){
929931 histos.fill (HIST (" hDeltaTimeMethodsVsP_negK0Pi" ), negativeP, v0.negativeeta (), (timeNegativePi_Method0 - timeNegativePi_Method1)*negativeCosine);
@@ -940,7 +942,7 @@ struct strangenesstofpid {
940942 }
941943
942944 template <class TCollision , typename TCascade, typename TTrack>
943- void processCascadeCandidate (TCollision const & collision, TCascade const & cascade, TTrack const & pTra, TTrack const & nTra, TTrack const & bTra)
945+ void processCascadeCandidate (TCollision const & collision, TCascade const & cascade, TTrack const & pTra, TTrack const & nTra, TTrack const & bTra, int cascpdg )
944946 {
945947 // initialize from positions and momenta as needed
946948 o2::track::TrackPar posTrack = o2::track::TrackPar ({cascade.xlambda (), cascade.ylambda (), cascade.zlambda ()}, {cascade.pxpos (), cascade.pypos (), cascade.pzpos ()}, +1 );
@@ -1163,7 +1165,7 @@ struct strangenesstofpid {
11631165
11641166 if (cascade.dcaV0daughters () < cascadeGroup.qaV0DCADau && cascade.dcacascdaughters () < cascadeGroup.qaCascDCADau && cascade.v0cosPA (collision.getX (), collision.getY (), collision.getZ ()) > cascadeGroup.qaV0CosPA && cascade.casccosPA (collision.getX (), collision.getY (), collision.getZ ()) > cascadeGroup.qaCascCosPA ) {
11651167 if (cascade.sign () < 0 ) {
1166- if (std::abs (cascade.mXi () - 1.32171 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma ) {
1168+ if (std::abs (cascade.mXi () - 1.32171 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && ((cascpdg== 0 )||(cascpdg== 3312 )) ) {
11671169 histos.fill (HIST (" h2dposDeltaTimeAsXiPr" ), cascade.p (), cascade.eta (), posDeltaTimeAsXiPr);
11681170 histos.fill (HIST (" h2dnegDeltaTimeAsXiPi" ), cascade.p (), cascade.eta (), negDeltaTimeAsXiPi);
11691171 histos.fill (HIST (" h2dbachDeltaTimeAsXiPi" ), cascade.p (), cascade.eta (), bachDeltaTimeAsXiPi);
@@ -1187,7 +1189,7 @@ struct strangenesstofpid {
11871189 histos.fill (HIST (" h2dNSigmaXiPi" ), cascade.p (), nSigmaXiPi);
11881190 }
11891191 }
1190- if (std::abs (cascade.mOmega () - 1.67245 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaKa ()) < cascadeGroup.qaTPCNSigma ) {
1192+ if (std::abs (cascade.mOmega () - 1.67245 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaKa ()) < cascadeGroup.qaTPCNSigma && ((cascpdg== 0 )||(cascpdg== 3334 )) ) {
11911193 histos.fill (HIST (" h2dposDeltaTimeAsOmPr" ), cascade.p (), cascade.eta (), posDeltaTimeAsOmPr);
11921194 histos.fill (HIST (" h2dnegDeltaTimeAsOmPi" ), cascade.p (), cascade.eta (), negDeltaTimeAsOmPi);
11931195 histos.fill (HIST (" h2dbachDeltaTimeAsOmKa" ), cascade.p (), cascade.eta (), bachDeltaTimeAsOmKa);
@@ -1213,7 +1215,7 @@ struct strangenesstofpid {
12131215 }
12141216 }
12151217 } else {
1216- if (std::abs (cascade.mXi () - 1.32171 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma ) {
1218+ if (std::abs (cascade.mXi () - 1.32171 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && ((cascpdg== 0 )||(cascpdg==- 3312 )) ) {
12171219 histos.fill (HIST (" h2dposDeltaTimeAsXiPi" ), cascade.p (), cascade.eta (), posDeltaTimeAsXiPi);
12181220 histos.fill (HIST (" h2dnegDeltaTimeAsXiPr" ), cascade.p (), cascade.eta (), negDeltaTimeAsXiPr);
12191221 histos.fill (HIST (" h2dbachDeltaTimeAsXiPi" ), cascade.p (), cascade.eta (), bachDeltaTimeAsXiPi);
@@ -1237,7 +1239,7 @@ struct strangenesstofpid {
12371239 histos.fill (HIST (" h2dNSigmaXiPi" ), cascade.p (), nSigmaXiPi);
12381240 }
12391241 }
1240- if (std::abs (cascade.mOmega () - 1.67245 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaKa ()) < cascadeGroup.qaTPCNSigma ) {
1242+ if (std::abs (cascade.mOmega () - 1.67245 ) < cascadeGroup.qaMassWindow && fabs (pTra.tpcNSigmaPi ()) < cascadeGroup.qaTPCNSigma && fabs (nTra.tpcNSigmaPr ()) < cascadeGroup.qaTPCNSigma && fabs (bTra.tpcNSigmaKa ()) < cascadeGroup.qaTPCNSigma && ((cascpdg== 0 )||(cascpdg==- 3334 )) ) {
12411243 histos.fill (HIST (" h2dposDeltaTimeAsOmPi" ), cascade.p (), cascade.eta (), posDeltaTimeAsOmPi);
12421244 histos.fill (HIST (" h2dnegDeltaTimeAsOmPr" ), cascade.p (), cascade.eta (), negDeltaTimeAsOmPr);
12431245 histos.fill (HIST (" h2dbachDeltaTimeAsOmKa" ), cascade.p (), cascade.eta (), bachDeltaTimeAsOmKa);
@@ -1291,7 +1293,7 @@ struct strangenesstofpid {
12911293
12921294 auto pTra = V0.posTrack_as <TracksWithAllExtras>();
12931295 auto nTra = V0.negTrack_as <TracksWithAllExtras>();
1294- processV0Candidate (primaryVertex, V0, pTra, nTra);
1296+ processV0Candidate (primaryVertex, V0, pTra, nTra, 0 );
12951297 }
12961298 }
12971299
@@ -1310,7 +1312,7 @@ struct strangenesstofpid {
13101312 auto pTra = cascade.posTrack_as <TracksWithAllExtras>();
13111313 auto nTra = cascade.negTrack_as <TracksWithAllExtras>();
13121314 auto bTra = cascade.bachelor_as <TracksWithAllExtras>();
1313- processCascadeCandidate (primaryVertex, cascade, pTra, nTra, bTra);
1315+ processCascadeCandidate (primaryVertex, cascade, pTra, nTra, bTra, 0 );
13141316 }
13151317 }
13161318 }
@@ -1340,7 +1342,7 @@ struct strangenesstofpid {
13401342
13411343 auto pTra = V0.posTrackExtra_as <dauTracks>();
13421344 auto nTra = V0.negTrackExtra_as <dauTracks>();
1343- processV0Candidate (primaryVertex, V0, pTra, nTra);
1345+ processV0Candidate (primaryVertex, V0, pTra, nTra, 0 );
13441346 }
13451347 }
13461348
@@ -1359,13 +1361,83 @@ struct strangenesstofpid {
13591361 auto pTra = cascade.posTrackExtra_as <dauTracks>();
13601362 auto nTra = cascade.negTrackExtra_as <dauTracks>();
13611363 auto bTra = cascade.bachTrackExtra_as <dauTracks>();
1362- processCascadeCandidate (primaryVertex, cascade, pTra, nTra, bTra);
1364+ processCascadeCandidate (primaryVertex, cascade, pTra, nTra, bTra, 0 );
1365+ }
1366+ }
1367+ }
1368+
1369+ void processDerivedDataMCTest (soa::Join<aod::StraCollisions, aod::StraStamps> const & collisions, V0DerivedDatasMC const & V0s, CascDerivedDatasMC const & cascades, dauTracks const &, aod::V0MCCores const & v0mcs, aod::CascMCCores const & cascmcs)
1370+ {
1371+ // Fire up CCDB with first collision in record. If no collisions, bypass
1372+ if (useCustomRunNumber || collisions.size () < 1 ) {
1373+ initCCDB (manualRunNumber);
1374+ } else {
1375+ auto collision = collisions.begin ();
1376+ initCCDB (collision.runNumber ());
1377+ }
1378+
1379+ if (calculateV0s.value ) {
1380+ for (const auto & V0 : V0s) {
1381+ // for storing whatever is the relevant quantity for the PV
1382+ o2::dataformats::VertexBase primaryVertex;
1383+ if (V0.has_straCollision ()) {
1384+ auto const & collision = V0.straCollision_as <soa::Join<aod::StraCollisions, aod::StraStamps>>();
1385+ primaryVertex.setPos ({collision.posX (), collision.posY (), collision.posZ ()});
1386+ // cov: won't be used anyways, all fine
1387+ primaryVertex.setCov (1e-6 , 1e-6 , 1e-6 , 1e-6 , 1e-6 , 1e-6 );
1388+ } else {
1389+ primaryVertex.setPos ({mVtx ->getX (), mVtx ->getY (), mVtx ->getZ ()});
1390+ }
1391+
1392+ // check association
1393+ int v0pdg = 0 ;
1394+ if (V0.v0MCCoreId ()>-1 ){
1395+ auto v0mc = v0mcs.rawIteratorAt (V0.v0MCCoreId ());
1396+ v0pdg = v0mc.pdgCode ();
1397+ if (std::abs (v0pdg)!=3122 &&v0pdg!=310 ){
1398+ continue ; // only associated from this point on
1399+ }
1400+ }
1401+
1402+ auto pTra = V0.posTrackExtra_as <dauTracks>();
1403+ auto nTra = V0.negTrackExtra_as <dauTracks>();
1404+ processV0Candidate (primaryVertex, V0, pTra, nTra, v0pdg);
1405+ }
1406+ }
1407+
1408+ if (calculateCascades.value ) {
1409+ for (const auto & cascade : cascades) {
1410+ // for storing whatever is the relevant quantity for the PV
1411+ o2::dataformats::VertexBase primaryVertex;
1412+ if (cascade.has_straCollision ()) {
1413+ auto const & collision = cascade.straCollision_as <soa::Join<aod::StraCollisions, aod::StraStamps>>();
1414+ primaryVertex.setPos ({collision.posX (), collision.posY (), collision.posZ ()});
1415+ primaryVertex.setCov (1e-6 , 1e-6 , 1e-6 , 1e-6 , 1e-6 , 1e-6 );
1416+ } else {
1417+ primaryVertex.setPos ({mVtx ->getX (), mVtx ->getY (), mVtx ->getZ ()});
1418+ }
1419+
1420+ // check association
1421+ int cascpdg = 0 ;
1422+ if (cascade.cascMCCoreId ()>-1 ){
1423+ auto cascmc = cascmcs.rawIteratorAt (cascade.cascMCCoreId ());
1424+ cascpdg = cascmc.pdgCode ();
1425+ if (std::abs (cascpdg)!=3312 &&std::abs (cascpdg)!=3334 ){
1426+ continue ; // only associated from this point on
1427+ }
1428+ }
1429+
1430+ auto pTra = cascade.posTrackExtra_as <dauTracks>();
1431+ auto nTra = cascade.negTrackExtra_as <dauTracks>();
1432+ auto bTra = cascade.bachTrackExtra_as <dauTracks>();
1433+ processCascadeCandidate (primaryVertex, cascade, pTra, nTra, bTra, cascpdg);
13631434 }
13641435 }
13651436 }
13661437
13671438 PROCESS_SWITCH (strangenesstofpid, processStandardData, " Process standard data" , false );
13681439 PROCESS_SWITCH (strangenesstofpid, processDerivedData, " Process derived data" , true );
1440+ PROCESS_SWITCH (strangenesstofpid, processDerivedDataMCTest, " Process derived data / MC with assoc / not for analysis" , true );
13691441};
13701442
13711443WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments