Skip to content

Commit 9b559f2

Browse files
author
Chiara De Martin
committed
add one process function to analyse derived data with EP from central framework and no ZDC spectator plane
1 parent d5db87a commit 9b559f2

File tree

1 file changed

+275
-6
lines changed

1 file changed

+275
-6
lines changed

PWGLF/TableProducer/Strangeness/cascadeflow.cxx

Lines changed: 275 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,9 @@ using std::array;
4040

4141
using DauTracks = soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs>;
4242
using CollEventPlane = soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraFT0CQVs, aod::StraFT0CQVsEv, aod::StraTPCQVs>::iterator;
43+
using CollEventPlaneCentralFW = soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraFT0CQVs, aod::StraTPCQVs>::iterator;
4344
using CollEventAndSpecPlane = soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraFT0CQVs, aod::StraFT0CQVsEv, aod::StraTPCQVs, aod::StraZDCSP>::iterator;
44-
using CollEventPlaneCentralFW = soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraFT0CQVs, aod::StraTPCQVs, aod::StraZDCSP>::iterator;
45+
using CollEventAndSpecPlaneCentralFW = soa::Join<aod::StraCollisions, aod::StraCents, aod::StraEvSels, aod::StraFT0CQVs, aod::StraTPCQVs, aod::StraZDCSP>::iterator;
4546
using MCCollisionsStra = soa::Join<aod::StraMCCollisions, aod::StraMCCollMults>;
4647
using CascCandidates = soa::Join<aod::CascCollRefs, aod::CascCores, aod::CascExtras, aod::CascBBs>;
4748
using CascMCCandidates = soa::Join<aod::CascCollRefs, aod::CascCores, aod::CascExtras, aod::CascBBs, aod::CascCoreMCLabels>;
@@ -1009,7 +1010,7 @@ struct cascadeFlow {
10091010
histos.get<TH1>(HIST("massXi_ProtonAcc"))->Fill(casc.mXi());
10101011
}
10111012
}
1012-
if (fillingConfigs.isFillTHNOmega) {
1013+
if (fillingConfigs.isFillTHNOmega) {
10131014
if (fillingConfigs.isFillTHN_V2)
10141015
histos.get<THn>(HIST("hOmegaV2"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mOmega(), BDTresponse[1], v2CEP);
10151016
if (fillingConfigs.isFillTHN_Pz)
@@ -1054,23 +1055,290 @@ struct cascadeFlow {
10541055
}
10551056
}
10561057

1057-
void processAnalyseDataEPCentralFW(CollEventPlaneCentralFW const& coll, CascCandidates const& Cascades, DauTracks const&)
1058+
void processAnalyseDataEP2CentralFW(CollEventPlaneCentralFW const& coll, CascCandidates const& Cascades, DauTracks const&)
10581059
{
10591060

10601061
if (!AcceptEvent(coll, 1)) {
10611062
return;
10621063
}
1063-
1064+
10641065
// select only events used for the calibration of the event plane
10651066
if (isGoodEventEP) {
10661067
if (abs(coll.qvecFT0CRe()) > 990 || abs(coll.qvecFT0CIm()) > 990 || abs(coll.qvecBNegRe()) > 990 || abs(coll.qvecBNegIm()) > 990 || abs(coll.qvecBPosRe()) > 990 || abs(coll.qvecBPosIm()) > 990) {
10671068
return;
10681069
}
10691070
}
1071+
1072+
// event has FT0C event plane
1073+
bool hasEventPlane = 0;
1074+
if (abs(coll.qvecFT0CRe()) < 990 && abs(coll.qvecFT0CIm()) < 990)
1075+
hasEventPlane = 1;
10701076

1071-
// event has event plane
1077+
histos.fill(HIST("hNEvents"), 9.5);
1078+
histos.fill(HIST("hEventNchCorrelationAfterEP"), coll.multNTracksPVeta1(), coll.multNTracksGlobal());
1079+
histos.fill(HIST("hEventPVcontributorsVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksPVeta1());
1080+
histos.fill(HIST("hEventGlobalTracksVsCentralityAfterEP"), coll.centFT0C(), coll.multNTracksGlobal());
1081+
1082+
histos.fill(HIST("hEventCentrality"), coll.centFT0C());
1083+
histos.fill(HIST("hEventVertexZ"), coll.posZ());
1084+
1085+
ROOT::Math::XYZVector eventplaneVecT0C{coll.qvecFT0CRe(), coll.qvecFT0CIm(), 0};
1086+
ROOT::Math::XYZVector eventplaneVecTPCA{coll.qvecBPosRe(), coll.qvecBPosIm(), 0};
1087+
ROOT::Math::XYZVector eventplaneVecTPCC{coll.qvecBNegRe(), coll.qvecBNegIm(), 0};
1088+
1089+
const float PsiT0C = std::atan2(coll.qvecFT0CIm(), coll.qvecFT0CRe()) * 0.5f;
1090+
histos.fill(HIST("hPsiT0C"), PsiT0C);
1091+
histos.fill(HIST("hPsiT0CvsCentFT0C"), coll.centFT0C(), PsiT0C);
1092+
1093+
resolution.fill(HIST("QVectorsT0CTPCA"), eventplaneVecT0C.Dot(eventplaneVecTPCA), coll.centFT0C());
1094+
resolution.fill(HIST("QVectorsT0CTPCC"), eventplaneVecT0C.Dot(eventplaneVecTPCC), coll.centFT0C());
1095+
resolution.fill(HIST("QVectorsTPCAC"), eventplaneVecTPCA.Dot(eventplaneVecTPCC), coll.centFT0C());
1096+
resolution.fill(HIST("QVectorsNormT0CTPCA"), eventplaneVecT0C.Dot(eventplaneVecTPCA) / (coll.qTPCR() * coll.sumAmplFT0C()), coll.centFT0C());
1097+
resolution.fill(HIST("QVectorsNormT0CTPCC"), eventplaneVecT0C.Dot(eventplaneVecTPCC) / (coll.qTPCL() * coll.sumAmplFT0C()), coll.centFT0C());
1098+
resolution.fill(HIST("QVectorsNormTPCAC"), eventplaneVecTPCA.Dot(eventplaneVecTPCC) / (coll.qTPCR() * coll.qTPCL()), coll.centFT0C());
1099+
1100+
std::vector<float> bdtScore[2];
1101+
for (auto& casc : Cascades) {
1102+
1103+
/// Add some minimal cuts for single track variables (min number of TPC clusters)
1104+
auto negExtra = casc.negTrackExtra_as<DauTracks>();
1105+
auto posExtra = casc.posTrackExtra_as<DauTracks>();
1106+
auto bachExtra = casc.bachTrackExtra_as<DauTracks>();
1107+
1108+
int counter = 0;
1109+
IsCascAccepted(casc, negExtra, posExtra, bachExtra, counter);
1110+
histos.fill(HIST("hCascade"), counter);
1111+
1112+
// ML selections
1113+
bool isSelectedCasc[2]{false, false};
1114+
1115+
std::vector<float> inputFeaturesCasc{casc.cascradius(),
1116+
casc.v0radius(),
1117+
casc.casccosPA(coll.posX(), coll.posY(), coll.posZ()),
1118+
casc.v0cosPA(coll.posX(), coll.posY(), coll.posZ()),
1119+
casc.dcapostopv(),
1120+
casc.dcanegtopv(),
1121+
casc.dcabachtopv(),
1122+
casc.dcacascdaughters(),
1123+
casc.dcaV0daughters(),
1124+
casc.dcav0topv(coll.posX(), coll.posY(), coll.posZ()),
1125+
casc.bachBaryonCosPA(),
1126+
casc.bachBaryonDCAxyToPV()};
1127+
1128+
float massCasc[2]{casc.mXi(), casc.mOmega()};
1129+
1130+
// pt cut
1131+
if (casc.pt() < CandidateConfigs.MinPt || casc.pt() > CandidateConfigs.MaxPt) {
1132+
continue;
1133+
}
1134+
1135+
cascadev2::hMassBeforeSelVsPt[0]->Fill(massCasc[0], casc.pt());
1136+
cascadev2::hMassBeforeSelVsPt[1]->Fill(massCasc[1], casc.pt());
1137+
1138+
if (isApplyML) {
1139+
// Retrieve model output and selection outcome
1140+
isSelectedCasc[0] = mlResponseXi.isSelectedMl(inputFeaturesCasc, casc.pt(), bdtScore[0]);
1141+
isSelectedCasc[1] = mlResponseOmega.isSelectedMl(inputFeaturesCasc, casc.pt(), bdtScore[1]);
1142+
1143+
for (int iS{0}; iS < 2; ++iS) {
1144+
// Fill BDT score histograms before selection
1145+
cascadev2::hSignalScoreBeforeSel[iS]->Fill(bdtScore[0][1]);
1146+
cascadev2::hBkgScoreBeforeSel[iS]->Fill(bdtScore[1][0]);
1147+
1148+
// Fill histograms for selected candidates
1149+
if (isSelectedCasc[iS]) {
1150+
cascadev2::hSignalScoreAfterSel[iS]->Fill(bdtScore[0][1]);
1151+
cascadev2::hBkgScoreAfterSel[iS]->Fill(bdtScore[1][0]);
1152+
cascadev2::hMassAfterSelVsPt[iS]->Fill(massCasc[iS], casc.pt());
1153+
}
1154+
}
1155+
} else {
1156+
isSelectedCasc[0] = true;
1157+
isSelectedCasc[1] = true;
1158+
}
1159+
1160+
ROOT::Math::XYZVector cascQvec{std::cos(2 * casc.phi()), std::sin(2 * casc.phi()), 0};
1161+
auto v2CSP = cascQvec.Dot(eventplaneVecT0C); // not normalised by amplitude
1162+
auto cascminuspsiT0C = GetPhiInRange(casc.phi() - PsiT0C);
1163+
auto v2CEP = TMath::Cos(2.0 * cascminuspsiT0C);
1164+
ROOT::Math::XYZVector cascUvec{std::cos(casc.phi()), std::sin(casc.phi()), 0};
1165+
1166+
// polarization variables
1167+
double masses[2]{o2::constants::physics::MassXiMinus, o2::constants::physics::MassOmegaMinus};
1168+
ROOT::Math::PxPyPzMVector cascadeVector[2], lambdaVector, protonVector;
1169+
float cosThetaStarLambda[2], cosThetaStarProton;
1170+
lambdaVector.SetCoordinates(casc.pxlambda(), casc.pylambda(), casc.pzlambda(), o2::constants::physics::MassLambda);
1171+
ROOT::Math::Boost lambdaBoost{lambdaVector.BoostToCM()};
1172+
if (casc.sign() > 0) {
1173+
protonVector.SetCoordinates(casc.pxneg(), casc.pyneg(), casc.pzneg(), o2::constants::physics::MassProton);
1174+
} else {
1175+
protonVector.SetCoordinates(casc.pxpos(), casc.pypos(), casc.pzpos(), o2::constants::physics::MassProton);
1176+
}
1177+
auto boostedProton{lambdaBoost(protonVector)};
1178+
cosThetaStarProton = boostedProton.Pz() / boostedProton.P();
1179+
for (int i{0}; i < 2; ++i) {
1180+
cascadeVector[i].SetCoordinates(casc.px(), casc.py(), casc.pz(), masses[i]);
1181+
ROOT::Math::Boost cascadeBoost{cascadeVector[i].BoostToCM()};
1182+
auto boostedLambda{cascadeBoost(lambdaVector)};
1183+
cosThetaStarLambda[i] = boostedLambda.Pz() / boostedLambda.P();
1184+
}
1185+
1186+
double ptLambda = sqrt(pow(casc.pxlambda(), 2) + pow(casc.pylambda(), 2));
1187+
auto etaLambda = RecoDecay::eta(std::array{casc.pxlambda(), casc.pylambda(), casc.pzlambda()});
1188+
1189+
// acceptance values if requested
1190+
double MeanCos2ThetaLambdaFromXi = 1;
1191+
double MeanCos2ThetaLambdaFromOmega = 1;
1192+
double MeanCos2ThetaProtonFromLambda = 1;
1193+
if (applyAcceptanceCorrection) {
1194+
if (ptLambda < CandidateConfigs.MinPtLambda || ptLambda > CandidateConfigs.MaxPtLambda) {
1195+
continue;
1196+
}
1197+
if (std::abs(casc.eta()) > CandidateConfigs.etaCasc)
1198+
continue;
1199+
if (std::abs(etaLambda) > CandidateConfigs.etaLambdaMax)
1200+
continue;
1201+
int bin2DXi = hAcceptanceXi->FindBin(casc.pt(), casc.eta());
1202+
int bin2DOmega = hAcceptanceOmega->FindBin(casc.pt(), casc.eta());
1203+
int bin2DLambda = hAcceptanceLambda->FindBin(ptLambda, etaLambda);
1204+
MeanCos2ThetaLambdaFromXi = hAcceptanceXi->GetBinContent(bin2DXi);
1205+
MeanCos2ThetaLambdaFromOmega = hAcceptanceOmega->GetBinContent(bin2DOmega);
1206+
MeanCos2ThetaProtonFromLambda = hAcceptanceLambda->GetBinContent(bin2DLambda);
1207+
}
1208+
1209+
int ChargeIndex = 0;
1210+
if (casc.sign() > 0)
1211+
ChargeIndex = 1;
1212+
double Pzs2Xi = cosThetaStarLambda[0] * std::sin(2 * (casc.phi() - PsiT0C)) / cascadev2::AlphaXi[ChargeIndex] / MeanCos2ThetaLambdaFromXi;
1213+
double Pzs2Omega = cosThetaStarLambda[1] * std::sin(2 * (casc.phi() - PsiT0C)) / cascadev2::AlphaOmega[ChargeIndex] / MeanCos2ThetaLambdaFromOmega;
1214+
double Cos2ThetaXi = cosThetaStarLambda[0] * cosThetaStarLambda[0];
1215+
double Cos2ThetaOmega = cosThetaStarLambda[1] * cosThetaStarLambda[1];
1216+
double Pzs2LambdaFromCasc = cosThetaStarProton * std::sin(2 * (casc.phi() - PsiT0C)) / cascadev2::AlphaLambda[ChargeIndex] / MeanCos2ThetaProtonFromLambda;
1217+
double Cos2ThetaLambda = cosThetaStarProton * cosThetaStarProton;
1218+
1219+
double CosThetaXiWithAlpha = cosThetaStarLambda[0] / cascadev2::AlphaXi[ChargeIndex];
1220+
double CosThetaOmegaWithAlpha = cosThetaStarLambda[1] / cascadev2::AlphaOmega[ChargeIndex];
1221+
double CosThetaProtonWithAlpha = cosThetaStarProton / cascadev2::AlphaLambda[ChargeIndex];
1222+
1223+
histos.fill(HIST("hv2CEPvsFT0C"), coll.centFT0C(), v2CEP);
1224+
histos.fill(HIST("hv2CEPvsv2CSP"), v2CSP, v2CEP);
1225+
histos.fill(HIST("hCascadePhi"), casc.phi());
1226+
histos.fill(HIST("hcascminuspsiT0C"), cascminuspsiT0C);
1227+
1228+
double values[4]{casc.mXi(), casc.pt(), v2CSP, coll.centFT0C()};
1229+
if (isSelectedCasc[0]) {
1230+
cascadev2::hSparseV2C[0]->Fill(values);
1231+
}
1232+
if (isSelectedCasc[1]) {
1233+
values[0] = casc.mOmega();
1234+
cascadev2::hSparseV2C[0]->Fill(values);
1235+
}
1236+
1237+
float BDTresponse[2]{0.f, 0.f};
1238+
if (isApplyML) {
1239+
BDTresponse[0] = bdtScore[0][1];
1240+
BDTresponse[1] = bdtScore[1][1];
1241+
}
1242+
1243+
if (std::abs(casc.eta()) < CandidateConfigs.etaCasc) {
1244+
if (fillingConfigs.isFillTHNXi) {
1245+
if (fillingConfigs.isFillTHN_V2)
1246+
histos.get<THn>(HIST("hXiV2"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mXi(), BDTresponse[0], v2CEP);
1247+
if (fillingConfigs.isFillTHN_Pz)
1248+
histos.get<THn>(HIST("hXiPzs2"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mXi(), BDTresponse[0], Pzs2Xi);
1249+
if (casc.mLambda() > CandidateConfigs.MinLambdaMass && casc.mLambda() < CandidateConfigs.MaxLambdaMass) {
1250+
if (fillingConfigs.isFillTHN_PzFromLambda)
1251+
histos.get<THn>(HIST("hXiPzs2FromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mXi(), BDTresponse[0], Pzs2LambdaFromCasc);
1252+
}
1253+
if (fillingConfigs.isFillTHN_Acc)
1254+
histos.get<THn>(HIST("hXiCos2Theta"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mXi(), BDTresponse[0], Cos2ThetaXi);
1255+
if (fillingConfigs.isFillTHN_AccFromLambdaVsCasc)
1256+
histos.get<THn>(HIST("hXiCos2ThetaFromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mXi(), BDTresponse[0], Cos2ThetaLambda);
1257+
if (casc.mXi() > CandidateConfigs.MinXiMass && casc.mXi() < CandidateConfigs.MaxXiMass) {
1258+
if (fillingConfigs.isFillTHN_AccFromLambdaVsLambda)
1259+
histos.get<THn>(HIST("hXiCos2ThetaFromLambdaL"))->Fill(coll.centFT0C(), ChargeIndex, etaLambda, ptLambda, casc.mLambda(), BDTresponse[0], Cos2ThetaLambda);
1260+
histos.get<TH1>(HIST("massXi_ProtonAcc"))->Fill(casc.mXi());
1261+
}
1262+
}
1263+
if (fillingConfigs.isFillTHNXi_PzVsPsi) {
1264+
if (fillingConfigs.isFillTHN_Pz)
1265+
histos.get<THn>(HIST("hXiPzVsPsi"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mXi(), BDTresponse[0], CosThetaXiWithAlpha, 2 * cascminuspsiT0C);
1266+
if (fillingConfigs.isFillTHN_PzFromLambda)
1267+
histos.get<THn>(HIST("hXiPzVsPsiFromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mXi(), BDTresponse[0], CosThetaProtonWithAlpha, 2 * cascminuspsiT0C);
1268+
if (casc.mLambda() > CandidateConfigs.MinLambdaMass && casc.mLambda() < CandidateConfigs.MaxLambdaMass) {
1269+
if (fillingConfigs.isFillTHN_Acc)
1270+
histos.get<THn>(HIST("hXiCos2ThetaVsPsi"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mXi(), BDTresponse[0], Cos2ThetaXi, 2 * cascminuspsiT0C);
1271+
}
1272+
if (fillingConfigs.isFillTHN_AccFromLambdaVsCasc)
1273+
histos.get<THn>(HIST("hXiCos2ThetaVsPsiFromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mXi(), BDTresponse[0], Cos2ThetaLambda, 2 * cascminuspsiT0C);
1274+
if (casc.mXi() > CandidateConfigs.MinXiMass && casc.mXi() < CandidateConfigs.MaxXiMass) {
1275+
if (fillingConfigs.isFillTHN_AccFromLambdaVsLambda)
1276+
histos.get<THn>(HIST("hXiCos2ThetaVsPsiFromLambdaL"))->Fill(coll.centFT0C(), ChargeIndex, etaLambda, ptLambda, casc.mLambda(), BDTresponse[0], Cos2ThetaLambda, 2 * cascminuspsiT0C);
1277+
histos.get<TH1>(HIST("massXi_ProtonAcc"))->Fill(casc.mXi());
1278+
}
1279+
}
1280+
if (fillingConfigs.isFillTHNOmega) {
1281+
if (fillingConfigs.isFillTHN_V2)
1282+
histos.get<THn>(HIST("hOmegaV2"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mOmega(), BDTresponse[1], v2CEP);
1283+
if (fillingConfigs.isFillTHN_Pz)
1284+
histos.get<THn>(HIST("hOmegaPzs2"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mOmega(), BDTresponse[1], Pzs2Omega);
1285+
if (casc.mLambda() > CandidateConfigs.MinLambdaMass && casc.mLambda() < CandidateConfigs.MaxLambdaMass) {
1286+
if (fillingConfigs.isFillTHN_PzFromLambda)
1287+
histos.get<THn>(HIST("hOmegaPzs2FromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mOmega(), BDTresponse[1], Pzs2LambdaFromCasc);
1288+
}
1289+
if (fillingConfigs.isFillTHN_Acc)
1290+
histos.get<THn>(HIST("hOmegaCos2Theta"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mOmega(), BDTresponse[1], Cos2ThetaOmega);
1291+
if (fillingConfigs.isFillTHN_AccFromLambdaVsCasc)
1292+
histos.get<THn>(HIST("hOmegaCos2ThetaFromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mOmega(), BDTresponse[1], Cos2ThetaLambda);
1293+
if (casc.mOmega() > CandidateConfigs.MinOmegaMass && casc.mOmega() < CandidateConfigs.MaxOmegaMass) {
1294+
if (fillingConfigs.isFillTHN_AccFromLambdaVsLambda)
1295+
histos.get<THn>(HIST("hOmegaCos2ThetaFromLambdaL"))->Fill(coll.centFT0C(), ChargeIndex, etaLambda, ptLambda, casc.mLambda(), BDTresponse[1], Cos2ThetaLambda);
1296+
histos.get<TH1>(HIST("massOmega_ProtonAcc"))->Fill(casc.mOmega());
1297+
}
1298+
}
1299+
if (fillingConfigs.isFillTHNOmega_PzVsPsi) {
1300+
if (fillingConfigs.isFillTHN_Pz)
1301+
histos.get<THn>(HIST("hOmegaPzVsPsi"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mOmega(), BDTresponse[1], CosThetaOmegaWithAlpha, 2 * cascminuspsiT0C);
1302+
if (fillingConfigs.isFillTHN_PzFromLambda)
1303+
histos.get<THn>(HIST("hOmegaPzVsPsiFromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.pt(), casc.mOmega(), BDTresponse[1], CosThetaProtonWithAlpha, 2 * cascminuspsiT0C);
1304+
if (casc.mLambda() > CandidateConfigs.MinLambdaMass && casc.mLambda() < CandidateConfigs.MaxLambdaMass) {
1305+
if (fillingConfigs.isFillTHN_Acc)
1306+
histos.get<THn>(HIST("hOmegaCos2ThetaVsPsi"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mOmega(), BDTresponse[1], Cos2ThetaOmega, 2 * cascminuspsiT0C);
1307+
}
1308+
if (fillingConfigs.isFillTHN_AccFromLambdaVsCasc)
1309+
histos.get<THn>(HIST("hOmegaCos2ThetaVsPsiFromLambda"))->Fill(coll.centFT0C(), ChargeIndex, casc.eta(), casc.pt(), casc.mOmega(), BDTresponse[1], Cos2ThetaLambda, 2 * cascminuspsiT0C);
1310+
if (casc.mOmega() > CandidateConfigs.MinOmegaMass && casc.mOmega() < CandidateConfigs.MaxOmegaMass) {
1311+
if (fillingConfigs.isFillTHN_AccFromLambdaVsLambda)
1312+
histos.get<THn>(HIST("hOmegaCos2ThetaVsPsiFromLambdaL"))->Fill(coll.centFT0C(), ChargeIndex, etaLambda, ptLambda, casc.mLambda(), BDTresponse[1], Cos2ThetaLambda, 2 * cascminuspsiT0C);
1313+
histos.get<TH1>(HIST("massOmega_ProtonAcc"))->Fill(casc.mOmega());
1314+
}
1315+
}
1316+
}
1317+
1318+
if (isSelectedCasc[0] || isSelectedCasc[1]) {
1319+
if (fillingConfigs.isFillTree)
1320+
fillAnalysedTable(coll, hasEventPlane, 0, casc, v2CSP, v2CEP, 0, 0, PsiT0C, BDTresponse[0], BDTresponse[1], 0);
1321+
}
1322+
}
1323+
}
1324+
1325+
void processAnalyseDataEPCentralFW(CollEventAndSpecPlaneCentralFW const& coll, CascCandidates const& Cascades, DauTracks const&)
1326+
{
1327+
1328+
if (!AcceptEvent(coll, 1)) {
1329+
return;
1330+
}
1331+
1332+
// select only events used for the calibration of the event plane
1333+
if (isGoodEventEP) {
1334+
if (abs(coll.qvecFT0CRe()) > 990 || abs(coll.qvecFT0CIm()) > 990 || abs(coll.qvecBNegRe()) > 990 || abs(coll.qvecBNegIm()) > 990 || abs(coll.qvecBPosRe()) > 990 || abs(coll.qvecBPosIm()) > 990) {
1335+
return;
1336+
}
1337+
}
1338+
1339+
// event has FT0C event plane
10721340
bool hasEventPlane = 0;
1073-
if (abs(coll.qvecFT0CRe()) > 990 || abs(coll.qvecFT0CIm()) > 990 || abs(coll.qvecBNegRe()) > 990 || abs(coll.qvecBNegIm()) > 990 || abs(coll.qvecBPosRe()) > 990 || abs(coll.qvecBPosIm()) > 990)
1341+
if (abs(coll.qvecFT0CRe()) < 990 && abs(coll.qvecFT0CIm()) < 990)
10741342
hasEventPlane = 1;
10751343

10761344
// event has spectator plane
@@ -1432,6 +1700,7 @@ struct cascadeFlow {
14321700
PROCESS_SWITCH(cascadeFlow, processTrainingBackground, "Process to create the training dataset for the background", true);
14331701
PROCESS_SWITCH(cascadeFlow, processTrainingSignal, "Process to create the training dataset for the signal", false);
14341702
PROCESS_SWITCH(cascadeFlow, processAnalyseData, "Process to apply ML model to the data", false);
1703+
PROCESS_SWITCH(cascadeFlow, processAnalyseDataEP2CentralFW, "Process to apply ML model to the data - second order event plane calibration from central framework", false);
14351704
PROCESS_SWITCH(cascadeFlow, processAnalyseDataEPCentralFW, "Process to apply ML model to the data - event plane calibration from central framework", false);
14361705
PROCESS_SWITCH(cascadeFlow, processAnalyseMC, "Process to apply ML model to the MC", false);
14371706
PROCESS_SWITCH(cascadeFlow, processMCGen, "Process to store MC generated particles", false);

0 commit comments

Comments
 (0)