Skip to content

Commit ef56480

Browse files
[PWGJE] jetFinderQA: fix processOccupancyQA(), add centrality FT0M vs FT0C, add debug QC with jetmult cut for jetjet sim
1 parent 2f1a4db commit ef56480

File tree

1 file changed

+189
-5
lines changed

1 file changed

+189
-5
lines changed

PWGJE/Tasks/jetFinderQA.cxx

Lines changed: 189 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,15 @@ struct JetFinderQATask {
8383
Configurable<float> intRateMax{"intRateMax", 50000.0, "maximum value of interaction rate axis"};
8484
Configurable<float> kappa{"kappa", 1.0, "angularity kappa"};
8585
Configurable<float> alpha{"alpha", 1.0, "angularity alpha"};
86+
Configurable<bool> checkCentFT0M{"checkCentFT0M", false, "0: centFT0C as default, 1: use centFT0M estimator"};
87+
88+
// Configurable<int> qcCutOnJetMultVsPt{"qcCutOnJetMultVsPt", false, "debug configurable for LHC26a7 10% test production with strange high mult jet pupulation"};
89+
Configurable<double> multCutCheck_proportionalFactor{"multCut_proportionalFactor", 0.5, "debug cut value for LHC26a7 10% test production with strange high mult jet pupulation"};
90+
Configurable<double> multCutCheck_abscissaAtOrigin{"multCut_abscissaAtOrigin", 5, "debug cut value LHC26a7 10% test production with strange high mult jet pupulation"};
91+
Configurable<int> multCutCheck_analyseMBGapEvents{"multCutCheck_analyseMBGapEvents", 0, "flag to choose to reject min. bias gap events; -1: MBGap only, 0: skip MBGap events, 1: analyse all events"};
92+
Configurable<bool> doMultCutCheck{"doMultCutCheck", false, "decide to apply multCutCheck or not"};
93+
Configurable<bool> multCutCheck_applyRCTSelections{"multCutCheck_applyRCTSelections", true, "decide to apply RCT selections"};
94+
8695

8796
std::vector<bool> filledJetR_Both;
8897
std::vector<bool> filledJetR_Low;
@@ -373,7 +382,7 @@ struct JetFinderQATask {
373382
registry.add("h_xsecErrSumWeighted", "Summed Cross section error per collision in pb with weights; Summed Cross section error per collision in pb with weights; entries", {HistType::kTH1F, {{1, 0., 1.}}});
374383
}
375384

376-
AxisSpec occupancyAxis = {142, -1.5, 14000.5, "occupancy"};
385+
AxisSpec occupancyAxis = {140, -0.5, 13999.5, "occupancy"};
377386
AxisSpec nTracksAxis = {16001, -1., 16000, "n tracks"};
378387

379388
if (doprocessOccupancyQA) {
@@ -384,10 +393,61 @@ struct JetFinderQATask {
384393
registry.add("h2_occupancy_ntracksselptetacuts_presel", "occupancy vs N_{tracks}; occupancy; N_{tracks}", {HistType::kTH2I, {occupancyAxis, nTracksAxis}});
385394
registry.add("h2_occupancy_ntracksselptetacuts_postsel", "occupancy vs N_{tracks}; occupancy; N_{tracks}", {HistType::kTH2I, {occupancyAxis, nTracksAxis}});
386395
}
396+
397+
if (doprocessQcMultCutCheck){
398+
std::vector<double> centralityBinning{0., 10., 50., 70., 100};
399+
AxisSpec centAxis = {centralityBinning, "centrality (%)"};
400+
bool doSumw2 = true;
401+
402+
AxisSpec centralityAxis = {1200, -10., 110., "Centrality"};
403+
AxisSpec trackPtAxis = {200, -0.5, 199.5, "#it{p}_{T} (GeV/#it{c})"};
404+
AxisSpec trackEtaAxis = {nBinsEta, -1.0, 1.0, "#eta"};
405+
AxisSpec phiAxis = {160, -1.0, 7.0, "#varphi"};
406+
AxisSpec jetPtAxis = {200, 0., 200., "#it{p}_{T} (GeV/#it{c})"};
407+
AxisSpec jetPtAxisRhoAreaSub = {400, -200., 200., "#it{p}_{T} (GeV/#it{c})"};
408+
AxisSpec jetEtaAxis = {nBinsEta, -1.0, 1.0, "#eta"};
409+
410+
registry.add("h_collisions", "event status;event status;entries", {HistType::kTH1F, {{4, 0.0, 4.0}}});
411+
registry.add("h2_centrality_collisions", "centrality vs collisions; centrality; collisions", {HistType::kTH2F, {centAxis, {4, 0.0, 4.0}}});
412+
// registry.add("h2_mccollision_pthardfromweight_pthardfromhepmcxsection", "ptHard from weight vs ptHard from HepMCXSections; ptHard_weight; ptHard_hepmcxsections", {HistType::kTH2F, {{200, 0.0, 200.0}, {200, 0.0, 200.0}}});
413+
414+
registry.add("h_collisions_weighted", "event status;event status;entries", {HistType::kTH1F, {{4, 0.0, 4.0}}}, doSumw2);
415+
registry.add("h2_centrality_collisions_weighted", "centrality vs collisions; centrality; collisions", {HistType::kTH2F, {centAxis, {4, 0.0, 4.0}}}, doSumw2);
416+
// registry.add("h2_mccollision_pthardfromweight_pthardfromhepmcxsection_weighted", "ptHard from weight vs ptHard from HepMCXSections; ptHard_weight; ptHard_hepmcxsections", {HistType::kTH2F, {{200, 0.0, 200.0}, {200, 0.0, 200.0}}}, doSumw2);
417+
418+
registry.add("h_collisions_zvertex", "position of collision ;#it{Z} (cm)", {HistType::kTH1F, {{300, -15.0, 15.0}}}, doSumw2);
419+
registry.add("h_collisions_ntracks", "N_{tracks};", {HistType::kTH1F, {{10000, 0.0, 10000.0}}}, doSumw2);
420+
registry.add("h_collisions_njets", "N_{jets};", {HistType::kTH1F, {{10000, 0.0, 10000.0}}}, doSumw2);
421+
422+
registry.add("h2_centrality_ntracks", "; centrality; N_{tracks};", {HistType::kTH2F, {{1100, 0., 110.0}, {10000, 0.0, 10000.0}}});
423+
registry.add("h2_centrality_njets", "; centrality; N_{jets};", {HistType::kTH2F, {{1100, 0., 110.0}, {10000, 0.0, 10000.0}}});
424+
registry.add("h2_ntracks_rho", "; N_{tracks}; #it{rho} (GeV/area);", {HistType::kTH2F, {{10000, 0.0, 10000.0}, {400, 0.0, 400.0}}});
425+
registry.add("h2_centrality_rho", "; centrality; #it{rho} (GeV/area);", {HistType::kTH2F, {{1100, 0., 110.}, {400, 0., 400.0}}});
426+
427+
registry.add("h2_centrality_track_pt", "centrality vs track pT; centrality; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {centAxis, {200, 0., 200.}}});
428+
registry.add("h2_centrality_track_eta", "centrality vs track #eta; centrality; #eta_{track}", {HistType::kTH2F, {centAxis, {100, -1.0, 1.0}}});
429+
registry.add("h2_track_pt_track_sigmapt", "#sigma(#it{p}_{T})/#it{p}_{T}; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {{100, 0., 10.}, {100000, 0.0, 10.0}}});
430+
registry.add("h2_track_pt_high_track_sigmapt", "#sigma(#it{p}_{T})/#it{p}_{T}; #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {{90, 10., 100.}, {100000, 0.0, 10.0}}});
431+
registry.add("h2_track_pt_track_sigma1overpt", "#sigma(1/#it{p}_{T}); #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {{100, 0., 10.}, {10000, 0.0, 1.0}}});
432+
registry.add("h2_track_pt_high_track_sigma1overpt", "#sigma(1/#it{p}_{T}); #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {{90, 10., 100.}, {10000, 0.0, 1.0}}});
433+
434+
registry.add("h_jet_pt", "jet pT;#it{p}_{T,jet} (GeV/#it{c}); counts", {HistType::kTH1F, {jetPtAxis}}, doSumw2);
435+
registry.add("h_jet_eta", "jet eta;#eta; counts", {HistType::kTH1F, {jetEtaAxis}}, doSumw2);
436+
registry.add("h_jet_phi", "jet phi;#phi; counts", {HistType::kTH1F, {phiAxis}}, doSumw2);
437+
registry.add("h2_centrality_jet_pt", "centrality vs. jet pT;centrality; #it{p}_{T,jet} (GeV/#it{c}); counts", {HistType::kTH2F, {centralityAxis, jetPtAxis}}, doSumw2);
438+
registry.add("h2_centrality_jet_eta", "centrality vs. jet eta;centrality; #eta; counts", {HistType::kTH2F, {centralityAxis, jetEtaAxis}}, doSumw2);
439+
registry.add("h2_centrality_jet_phi", "centrality vs. jet phi;centrality; #varphi; counts", {HistType::kTH2F, {centralityAxis, phiAxis}}, doSumw2);
440+
registry.add("h2_jet_pt_jet_area", "jet #it{p}_{T,jet} vs. Area_{jet}; #it{p}_{T,jet} (GeV/#it{c}); Area_{jet}", {HistType::kTH2F, {jetPtAxis, {150, 0., 1.5}}}, doSumw2);
441+
registry.add("h2_jet_pt_jet_ntracks", "jet #it{p}_{T,jet} vs. N_{jet tracks}; #it{p}_{T,jet} (GeV/#it{c}); N_{jet, tracks}", {HistType::kTH2F, {jetPtAxis, {200, -0.5, 199.5}}}, doSumw2);
442+
registry.add("h2_jet_pt_track_pt", "jet #it{p}_{T,jet} vs. #it{p}_{T,track}; #it{p}_{T,jet} (GeV/#it{c}); #it{p}_{T,track} (GeV/#it{c})", {HistType::kTH2F, {jetPtAxis, trackPtAxis}}, doSumw2);
443+
registry.add("h3_jet_pt_jet_eta_jet_phi", "jet pt vs. eta vs. phi", {HistType::kTH3F, {jetPtAxis, jetEtaAxis, phiAxis}}, doSumw2);
444+
}
387445
}
388446

389447
Filter trackCuts = (aod::jtrack::pt >= trackPtMin && aod::jtrack::pt < trackPtMax && aod::jtrack::eta > trackEtaMin && aod::jtrack::eta < trackEtaMax);
390-
Filter eventCuts = (nabs(aod::jcollision::posZ) < vertexZCut && aod::jcollision::centFT0M >= centralityMin && aod::jcollision::centFT0M < centralityMax);
448+
Filter eventCuts = (nabs(aod::jcollision::posZ) < vertexZCut &&
449+
((checkCentFT0M ? aod::jcollision::centFT0M : aod::jcollision::centFT0C) >= centralityMin) &&
450+
((checkCentFT0M ? aod::jcollision::centFT0M : aod::jcollision::centFT0C) < centralityMax));
391451
PresliceUnsorted<soa::Filtered<aod::JetCollisionsMCD>> CollisionsPerMCPCollision = aod::jmccollisionlb::mcCollisionId;
392452
PresliceUnsorted<soa::Join<aod::JetMcCollisions, aod::JMcCollisionPIs>> McCollisionsPerMCPCollision = aod::jmccollision::mcCollisionId;
393453

@@ -810,6 +870,71 @@ struct JetFinderQATask {
810870
registry.fill(HIST("h2_centrality_rhorandomconerandomtrackdirectionwithouttwoleadingjets"), collision.centFT0M(), randomConePtWithoutTwoLeadJet - M_PI * randomConeR * randomConeR * collision.rho());
811871
}
812872

873+
874+
enum JCollisionSubGeneratorId {
875+
none = -1,
876+
mbGap = 0
877+
};
878+
879+
enum mbGapSelectionRequirement {
880+
mbGapOnly = -1,
881+
mbGapSkip = 0,
882+
mbGapAndSignal = 1
883+
};
884+
885+
template <typename TColl>
886+
bool applyCollisionCuts_multCutCheck(TColl const& collision, bool fillHistograms = false, bool isWeighted = false, float eventWeight = 1.0)
887+
{
888+
float centrality = -1.0;
889+
checkCentFT0M ? centrality = collision.centFT0M() : centrality = collision.centFT0C();
890+
891+
if (fillHistograms) {
892+
registry.fill(HIST("h_collisions"), 0.5);
893+
registry.fill(HIST("h2_centrality_collisions"), centrality, 0.5, eventWeight);
894+
if (isWeighted)
895+
registry.fill(HIST("h_collisions_weighted"), 0.5, eventWeight);
896+
}
897+
898+
bool skipMBGapEvents = false; // decided later with multCutCheck_analyseMBGapEvents
899+
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits, skipMBGapEvents, multCutCheck_applyRCTSelections)) {
900+
return false;
901+
}
902+
if (fillHistograms) {
903+
registry.fill(HIST("h_collisions"), 1.5);
904+
registry.fill(HIST("h2_centrality_collisions"), centrality, 1.5, eventWeight);
905+
if (isWeighted)
906+
registry.fill(HIST("h_collisions_weighted"), 1.5, eventWeight);
907+
}
908+
909+
if (centrality < centralityMin || centralityMax < centrality) {
910+
return false;
911+
}
912+
if (fillHistograms) {
913+
registry.fill(HIST("h_collisions"), 2.5);
914+
registry.fill(HIST("h2_centrality_collisions"), centrality, 2.5, eventWeight);
915+
if (isWeighted)
916+
registry.fill(HIST("h_collisions_weighted"), 2.5, eventWeight);
917+
}
918+
919+
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
920+
return false;
921+
}
922+
if (fillHistograms) {
923+
registry.fill(HIST("h_collisions"), 3.5);
924+
registry.fill(HIST("h2_centrality_collisions"), centrality, 3.5, eventWeight);
925+
if (isWeighted)
926+
registry.fill(HIST("h_collisions_weighted"), 3.5, eventWeight);
927+
}
928+
929+
if (multCutCheck_analyseMBGapEvents == mbGapSelectionRequirement::mbGapOnly && collision.getSubGeneratorId() != JCollisionSubGeneratorId::mbGap){
930+
return false;
931+
} else if (multCutCheck_analyseMBGapEvents == mbGapSelectionRequirement::mbGapSkip && collision.getSubGeneratorId() == JCollisionSubGeneratorId::mbGap) {
932+
return false;
933+
}
934+
935+
return true;
936+
}
937+
813938
void processJetsData(soa::Filtered<aod::JetCollisions>::iterator const& collision, soa::Join<aod::ChargedJets, aod::ChargedJetConstituents> const& jets, aod::JetTracks const&)
814939
{
815940
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
@@ -1357,12 +1482,71 @@ struct JetFinderQATask {
13571482
registry.fill(HIST("h2_occupancy_ntrackssel_presel"), occupancy, nTracksAllAcceptanceAndSelected);
13581483
registry.fill(HIST("h2_occupancy_ntracksselptetacuts_presel"), occupancy, nTracksInAcceptanceAndSelected);
13591484
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
1360-
registry.fill(HIST("h2_occupancy_ntracksall_postsel"), occupancy, nTracksAll);
1361-
registry.fill(HIST("h2_occupancy_ntrackssel_postsel"), occupancy, nTracksAllAcceptanceAndSelected);
1362-
registry.fill(HIST("h2_occupancy_ntracksselptetacuts_postsel"), occupancy, nTracksInAcceptanceAndSelected);
1485+
return;
13631486
}
1487+
registry.fill(HIST("h2_occupancy_ntracksall_postsel"), occupancy, nTracksAll);
1488+
registry.fill(HIST("h2_occupancy_ntrackssel_postsel"), occupancy, nTracksAllAcceptanceAndSelected);
1489+
registry.fill(HIST("h2_occupancy_ntracksselptetacuts_postsel"), occupancy, nTracksInAcceptanceAndSelected);
1490+
13641491
}
13651492
PROCESS_SWITCH(JetFinderQATask, processOccupancyQA, "occupancy QA on jet derived data", false);
1493+
1494+
void processQcMultCutCheck(soa::Filtered<soa::Join<aod::JetCollisions, aod::BkgChargedRhos>>::iterator const& collision,
1495+
soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents> const& mcdjets,
1496+
soa::Filtered<soa::Join<aod::JetTracks, aod::JTrackExtras, aod::JTrackPIs>> const& tracks)
1497+
{
1498+
bool fillHistograms = true;
1499+
bool isWeighted = true;
1500+
float eventWeight = collision.weight();
1501+
if (!applyCollisionCuts_multCutCheck(collision, fillHistograms, isWeighted, eventWeight)) {
1502+
return;
1503+
}
1504+
registry.fill(HIST("h_collisions_zvertex"), collision.posZ(), eventWeight);
1505+
1506+
bool hasJetAboveMultCut = false;
1507+
for (auto const& mcdjet: mcdjets) {
1508+
if (mcdjet.tracksIds().size() > multCutCheck_proportionalFactor*mcdjet.pt() + multCutCheck_abscissaAtOrigin) {
1509+
hasJetAboveMultCut = true;
1510+
}
1511+
}
1512+
if (doMultCutCheck && hasJetAboveMultCut == false) {
1513+
return;
1514+
}
1515+
1516+
1517+
registry.fill(HIST("h_collisions_ntracks"), tracks.size(), eventWeight);
1518+
registry.fill(HIST("h2_centrality_ntracks"), collision.centFT0M(), tracks.size(), eventWeight);
1519+
registry.fill(HIST("h_collisions_njets"), mcdjets.size(), eventWeight);
1520+
registry.fill(HIST("h2_centrality_njets"), collision.centFT0M(), mcdjets.size(), eventWeight);
1521+
registry.fill(HIST("h2_ntracks_rho"), tracks.size(), collision.rho(), eventWeight);
1522+
registry.fill(HIST("h2_centrality_rho"), collision.centFT0M(), collision.rho(), eventWeight);
1523+
1524+
for (auto const& track: tracks) {
1525+
registry.fill(HIST("h2_centrality_track_pt"), collision.centFT0M(), track.pt(), eventWeight);
1526+
registry.fill(HIST("h2_centrality_track_eta"), collision.centFT0M(), track.eta(), eventWeight);
1527+
registry.fill(HIST("h2_track_pt_track_sigma1overpt"), track.pt(), track.sigma1Pt(), eventWeight);
1528+
registry.fill(HIST("h2_track_pt_track_sigmapt"), track.pt(), track.sigma1Pt() * track.pt(), eventWeight);
1529+
registry.fill(HIST("h2_track_pt_high_track_sigma1overpt"), track.pt(), track.sigma1Pt(), eventWeight);
1530+
registry.fill(HIST("h2_track_pt_high_track_sigmapt"), track.pt(), track.sigma1Pt() * track.pt(), eventWeight);
1531+
}
1532+
1533+
for (auto const& mcdjet: mcdjets) {
1534+
registry.fill(HIST("h_jet_pt"), mcdjet.pt(), eventWeight);
1535+
registry.fill(HIST("h_jet_eta"), mcdjet.eta(), eventWeight);
1536+
registry.fill(HIST("h_jet_phi"), mcdjet.phi(), eventWeight);
1537+
registry.fill(HIST("h2_centrality_jet_pt"), collision.centFT0M(), mcdjet.pt(), eventWeight);
1538+
registry.fill(HIST("h2_centrality_jet_eta"), collision.centFT0M(), mcdjet.eta(), eventWeight);
1539+
registry.fill(HIST("h2_centrality_jet_phi"), collision.centFT0M(), mcdjet.phi(), eventWeight);
1540+
registry.fill(HIST("h3_jet_pt_jet_eta_jet_phi"), mcdjet.pt(), mcdjet.eta(), mcdjet.phi(), eventWeight);
1541+
1542+
registry.fill(HIST("h2_jet_pt_jet_area"), mcdjet.pt(), mcdjet.area(), eventWeight);
1543+
registry.fill(HIST("h2_jet_pt_jet_ntracks"), mcdjet.pt(), mcdjet.tracksIds().size(), eventWeight);
1544+
for (const auto& constituent : mcdjet.template tracks_as<soa::Filtered<soa::Join<aod::JetTracks, aod::JTrackExtras, aod::JTrackPIs>>>()) {
1545+
registry.fill(HIST("h2_jet_pt_track_pt"), mcdjet.pt(), constituent.pt(), eventWeight);
1546+
}
1547+
}
1548+
}
1549+
PROCESS_SWITCH(JetFinderQATask, processQcMultCutCheck, "processing QC on collision, track and jet quantities after cut on collision based on jet quantities;", false);
13661550
};
13671551

13681552
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)