@@ -40,8 +40,9 @@ using std::array;
4040
4141using DauTracks = soa::Join<aod::DauTrackExtras, aod::DauTrackTPCPIDs>;
4242using 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;
4344using 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;
4546using MCCollisionsStra = soa::Join<aod::StraMCCollisions, aod::StraMCCollMults>;
4647using CascCandidates = soa::Join<aod::CascCollRefs, aod::CascCores, aod::CascExtras, aod::CascBBs>;
4748using 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