@@ -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
13681552WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments