Skip to content

Commit bb6cd78

Browse files
committed
Add MC association test mode
1 parent 035d372 commit bb6cd78

File tree

1 file changed

+88
-16
lines changed

1 file changed

+88
-16
lines changed

PWGLF/TableProducer/Strangeness/strangenesstofpid.cxx

Lines changed: 88 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ using TracksWithAllExtras = soa::Join<aod::TracksIU, aod::TracksExtra, aod::pidT
7272
// For derived data analysis
7373
using dauTracks = soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs, aod::DauTrackTOFPIDs>;
7474
using V0DerivedDatas = soa::Join<aod::V0Cores, aod::V0Extras, aod::V0CollRefs>;
75+
using V0DerivedDatasMC = soa::Join<aod::V0Cores, aod::V0Extras, aod::V0CollRefs, aod::V0CoreMCLabels>;
7576
using CascDerivedDatas = soa::Join<aod::CascCores, aod::CascExtras, aod::CascCollRefs>;
77+
using CascDerivedDatasMC = soa::Join<aod::CascCores, aod::CascExtras, aod::CascCollRefs, aod::CascCoreMCLabels>;
7678

7779
struct 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

13711443
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)