@@ -70,11 +70,13 @@ struct V0QA {
7070 Configurable<float > lifetimeLambdaMax{" lifetimeLambdaMax" , 30.0 , " Maximum lifetime of Lambda (cm)" };
7171 Configurable<float > yPartMax{" yPartMax" , 0.5 , " Maximum rapidity of particles" };
7272 Configurable<float > vertexZCut{" vertexZCut" , 10.0 , " Vertex Z cut" };
73+ Configurable<float > v0Fraction{" v0Fraction" , 0.5 , " Fraction of V0s to accept randomly" };
7374
7475 Filter jetCollisionFilter = nabs(aod::jcollision::posZ) < vertexZCut;
7576
7677 ConfigurableAxis binPtJet{" ptJet" , {100 ., 0 .0f , 50 .0f }, " " };
7778 ConfigurableAxis binPtV0{" ptV0" , {100 ., 0 .0f , 50 .0f }, " " };
79+ ConfigurableAxis binZV0{" zV0" , {100 ., 1e-3f , 1 + 1e-3f }, " " };
7880 ConfigurableAxis binEta{" binEta" , {100 , -1 .0f , 1 .0f }, " " };
7981 ConfigurableAxis binPhi{" binPhi" , {constants::math::PI * 10 / 2 , 0 .0f , constants::math::TwoPI}, " " };
8082
@@ -103,6 +105,7 @@ struct V0QA {
103105
104106 const AxisSpec axisJetPt{binPtJet, " Jet Pt (GeV/c)" };
105107 const AxisSpec axisV0Pt{binPtV0, " V0 Pt (GeV/c)" };
108+ const AxisSpec axisV0Z{binZV0, " z_{V0} = #it{p}_{T, V0} / #it{p}_{T, jet}" };
106109 const AxisSpec axisEta{binEta, " Eta" };
107110 const AxisSpec axisPhi{binPhi, " Phi" };
108111 const AxisSpec axisV0Radius{binV0Radius, " V0 Radius (cm)" };
@@ -225,6 +228,38 @@ struct V0QA {
225228 registry.add (" feeddown/JetsPtXiMinusPtLambdaPt" , " Jets Pt, #Xi^{-} Pt, #Lambda Pt" , HistType::kTHnSparseD , {axisJetPt, axisJetPt, axisV0Pt, axisV0Pt});
226229 registry.add (" feeddown/JetsPtXiPlusPtAntiLambdaPt" , " Jets Pt, #Xi^{+} Pt, #bar{#Lambda} Pt" , HistType::kTHnSparseD , {axisJetPt, axisJetPt, axisV0Pt, axisV0Pt});
227230 }
231+ if (doprocessTestWeightedJetFinder) {
232+ registry.add (" tests/weighted/JetPtEtaPhi" , " Jet Pt, Eta, Phi" , HistType::kTH3D , {axisJetPt, axisEta, axisPhi});
233+ registry.add (" tests/weighted/JetPtEtaV0Pt" , " Jet Pt, Eta, V0 Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
234+ registry.add (" tests/weighted/JetPtEtaV0Z" , " Jet Pt, Eta, V0 Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
235+ registry.add (" tests/weighted/JetPtEtaK0SPt" , " Jet Pt, Eta, K0S Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
236+ registry.add (" tests/weighted/JetPtEtaK0SZ" , " Jet Pt, Eta, K0S Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
237+ registry.add (" tests/weighted/JetPtEtaLambdaPt" , " Jet Pt, Eta, Lambda Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
238+ registry.add (" tests/weighted/JetPtEtaLambdaZ" , " Jet Pt, Eta, Lambda Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
239+ registry.add (" tests/weighted/JetPtEtaAntiLambdaPt" , " Jet Pt, Eta, AntiLambda Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
240+ registry.add (" tests/weighted/JetPtEtaAntiLambdaZ" , " Jet Pt, Eta, AntiLambda Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
241+ }
242+ if (doprocessTestSubtractedJetFinder) {
243+ registry.add (" tests/nosub/JetPtEtaPhi" , " Jet Pt, Eta, Phi" , HistType::kTH3D , {axisJetPt, axisEta, axisPhi});
244+ registry.add (" tests/nosub/JetPtEtaV0Pt" , " Jet Pt, Eta, V0 Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
245+ registry.add (" tests/nosub/JetPtEtaV0Z" , " Jet Pt, Eta, V0 Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
246+ registry.add (" tests/nosub/JetPtEtaK0SPt" , " Jet Pt, Eta, K0S Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
247+ registry.add (" tests/nosub/JetPtEtaK0SZ" , " Jet Pt, Eta, K0S Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
248+ registry.add (" tests/nosub/JetPtEtaLambdaPt" , " Jet Pt, Eta, Lambda Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
249+ registry.add (" tests/nosub/JetPtEtaLambdaZ" , " Jet Pt, Eta, Lambda Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
250+ registry.add (" tests/nosub/JetPtEtaAntiLambdaPt" , " Jet Pt, Eta, AntiLambda Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
251+ registry.add (" tests/nosub/JetPtEtaAntiLambdaZ" , " Jet Pt, Eta, AntiLambda Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
252+
253+ registry.add (" tests/sub/JetPtEtaPhi" , " Jet Pt, Eta, Phi" , HistType::kTH3D , {axisJetPt, axisEta, axisPhi});
254+ registry.add (" tests/sub/JetPtEtaV0Pt" , " Jet Pt, Eta, V0 Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
255+ registry.add (" tests/sub/JetPtEtaV0Z" , " Jet Pt, Eta, V0 Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
256+ registry.add (" tests/sub/JetPtEtaK0SPt" , " Jet Pt, Eta, K0S Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
257+ registry.add (" tests/sub/JetPtEtaK0SZ" , " Jet Pt, Eta, K0S Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
258+ registry.add (" tests/sub/JetPtEtaLambdaPt" , " Jet Pt, Eta, Lambda Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
259+ registry.add (" tests/sub/JetPtEtaLambdaZ" , " Jet Pt, Eta, Lambda Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
260+ registry.add (" tests/sub/JetPtEtaAntiLambdaPt" , " Jet Pt, Eta, AntiLambda Pt" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Pt});
261+ registry.add (" tests/sub/JetPtEtaAntiLambdaZ" , " Jet Pt, Eta, AntiLambda Z" , HistType::kTH3D , {axisJetPt, axisEta, axisV0Z});
262+ }
228263 if (doprocessV0TrackQA) {
229264 registry.add (" tracks/Pos" , " pos" , HistType::kTHnSparseD , {axisV0Pt, axisV0Pt, axisEta, axisPhi});
230265 registry.add (" tracks/Neg" , " neg" , HistType::kTHnSparseD , {axisV0Pt, axisV0Pt, axisEta, axisPhi});
@@ -1220,6 +1255,115 @@ struct V0QA {
12201255 }
12211256 PROCESS_SWITCH (V0QA, processFeeddownMatchedJets, " Jets feeddown" , false );
12221257
1258+ // Test the difference between excluding V0s from jet finding and subtracting V0s from jets afterwards
1259+ void processTestWeightedJetFinder (soa::Filtered<aod::JetCollisions>::iterator const & jcoll, soa::Join<aod::V0ChargedJets, aod::V0ChargedJetConstituents> const & jets, aod::CandidatesV0Data const &)
1260+ {
1261+ if (!jetderiveddatautilities::selectCollision (jcoll, eventSelectionBits))
1262+ return ;
1263+
1264+ for (const auto & jet : jets) {
1265+ registry.fill (HIST (" tests/weighted/JetPtEtaPhi" ), jet.pt (), jet.eta (), jet.phi ());
1266+
1267+ for (const auto & v0 : jet.template candidates_as <aod::CandidatesV0Data>()) {
1268+ if (v0.isRejectedCandidate ())
1269+ continue ;
1270+
1271+ double z = v0.pt () / jet.pt ();
1272+
1273+ registry.fill (HIST (" tests/weighted/JetPtEtaV0Pt" ), jet.pt (), jet.eta (), v0.pt ());
1274+ registry.fill (HIST (" tests/weighted/JetPtEtaV0Z" ), jet.pt (), jet.eta (), z);
1275+
1276+ if (v0.isK0SCandidate ()) {
1277+ registry.fill (HIST (" tests/weighted/JetPtEtaK0SPt" ), jet.pt (), jet.eta (), v0.pt ());
1278+ registry.fill (HIST (" tests/weighted/JetPtEtaK0SZ" ), jet.pt (), jet.eta (), z);
1279+ }
1280+ if (v0.isLambdaCandidate ()) {
1281+ registry.fill (HIST (" tests/weighted/JetPtEtaLambdaPt" ), jet.pt (), jet.eta (), v0.pt ());
1282+ registry.fill (HIST (" tests/weighted/JetPtEtaLambdaZ" ), jet.pt (), jet.eta (), z);
1283+ }
1284+ if (v0.isAntiLambdaCandidate ()) {
1285+ registry.fill (HIST (" tests/weighted/JetPtEtaAntiLambdaPt" ), jet.pt (), jet.eta (), v0.pt ());
1286+ registry.fill (HIST (" tests/weighted/JetPtEtaAntiLambdaZ" ), jet.pt (), jet.eta (), z);
1287+ }
1288+ }
1289+ }
1290+ }
1291+ PROCESS_SWITCH (V0QA, processTestWeightedJetFinder, " Test weighted jet finder" , false );
1292+
1293+ void processTestSubtractedJetFinder (soa::Filtered<aod::JetCollisions>::iterator const & jcoll, soa::Join<aod::V0ChargedJets, aod::V0ChargedJetConstituents> const & jets, aod::CandidatesV0Data const &)
1294+ {
1295+ if (!jetderiveddatautilities::selectCollision (jcoll, eventSelectionBits))
1296+ return ;
1297+
1298+ for (const auto & jet : jets) {
1299+ registry.fill (HIST (" tests/nosub/JetPtEtaPhi" ), jet.pt (), jet.eta (), jet.phi ());
1300+
1301+ std::vector<double > v0Pt;
1302+ std::vector<int > v0Type; // 0: K0S, 1: Lambda, 2: AntiLambda
1303+ double ptjetsub = jet.pt ();
1304+
1305+ for (const auto & v0 : jet.template candidates_as <aod::CandidatesV0Data>()) {
1306+ if (v0.isRejectedCandidate ())
1307+ continue ;
1308+
1309+ double z = v0.pt () / jet.pt ();
1310+
1311+ registry.fill (HIST (" tests/nosub/JetPtEtaV0Pt" ), jet.pt (), jet.eta (), v0.pt ());
1312+ registry.fill (HIST (" tests/nosub/JetPtEtaV0Z" ), jet.pt (), jet.eta (), z);
1313+
1314+ if (v0.isK0SCandidate ()) {
1315+ registry.fill (HIST (" tests/nosub/JetPtEtaK0SPt" ), jet.pt (), jet.eta (), v0.pt ());
1316+ registry.fill (HIST (" tests/nosub/JetPtEtaK0SZ" ), jet.pt (), jet.eta (), z);
1317+ }
1318+ if (v0.isLambdaCandidate ()) {
1319+ registry.fill (HIST (" tests/nosub/JetPtEtaLambdaPt" ), jet.pt (), jet.eta (), v0.pt ());
1320+ registry.fill (HIST (" tests/nosub/JetPtEtaLambdaZ" ), jet.pt (), jet.eta (), z);
1321+ }
1322+ if (v0.isAntiLambdaCandidate ()) {
1323+ registry.fill (HIST (" tests/nosub/JetPtEtaAntiLambdaPt" ), jet.pt (), jet.eta (), v0.pt ());
1324+ registry.fill (HIST (" tests/nosub/JetPtEtaAntiLambdaZ" ), jet.pt (), jet.eta (), z);
1325+ }
1326+
1327+ double r = gRandom ->Uniform ();
1328+ if (r < v0Fraction) { // Accepted
1329+ v0Pt.push_back (v0.pt ());
1330+ if (v0.isK0SCandidate ()) {
1331+ v0Type.push_back (0 );
1332+ } else if (v0.isLambdaCandidate ()) {
1333+ v0Type.push_back (1 );
1334+ } else if (v0.isAntiLambdaCandidate ()) {
1335+ v0Type.push_back (2 );
1336+ }
1337+ } else { // Subtracted
1338+ ptjetsub -= v0.pt ();
1339+ }
1340+ }
1341+
1342+ for (unsigned int i = 0 ; i < v0Pt.size (); ++i) {
1343+ registry.fill (HIST (" tests/sub/JetPtEtaPhi" ), ptjetsub, jet.eta (), jet.phi ());
1344+
1345+ int type = v0Type[i];
1346+ double pt = v0Pt[i];
1347+ double z = pt / ptjetsub;
1348+
1349+ registry.fill (HIST (" tests/sub/JetPtEtaV0Pt" ), ptjetsub, jet.eta (), pt);
1350+ registry.fill (HIST (" tests/sub/JetPtEtaV0Z" ), ptjetsub, jet.eta (), z);
1351+
1352+ if (type == 0 ) { // K0S
1353+ registry.fill (HIST (" tests/sub/JetPtEtaK0SPt" ), ptjetsub, jet.eta (), pt);
1354+ registry.fill (HIST (" tests/sub/JetPtEtaK0SZ" ), ptjetsub, jet.eta (), z);
1355+ } else if (type == 1 ) { // Lambda
1356+ registry.fill (HIST (" tests/sub/JetPtEtaLambdaPt" ), ptjetsub, jet.eta (), pt);
1357+ registry.fill (HIST (" tests/sub/JetPtEtaLambdaZ" ), ptjetsub, jet.eta (), z);
1358+ } else if (type == 2 ) { // AntiLambda
1359+ registry.fill (HIST (" tests/sub/JetPtEtaAntiLambdaPt" ), ptjetsub, jet.eta (), pt);
1360+ registry.fill (HIST (" tests/sub/JetPtEtaAntiLambdaZ" ), ptjetsub, jet.eta (), z);
1361+ }
1362+ }
1363+ }
1364+ }
1365+ PROCESS_SWITCH (V0QA, processTestSubtractedJetFinder, " Test subtracted jet finder" , false );
1366+
12231367 using DaughterJTracks = soa::Join<aod::JetTracks, aod::JTrackPIs>;
12241368 using DaughterTracks = soa::Join<aod::FullTracks, aod::TracksDCA, aod::TrackSelection, aod::TracksCov>;
12251369 void processV0TrackQA (aod::JetCollision const & /* jcoll*/ , aod::CandidatesV0Data const & v0s, DaughterJTracks const &, DaughterTracks const &)
0 commit comments