@@ -58,11 +58,13 @@ DECLARE_SOA_COLUMN(MiniCollTag, miniCollTag, uint8_t);
5858DECLARE_SOA_COLUMN (MiniCollMcCollisionId, miniCollMcCollisionId, int64_t );
5959DECLARE_SOA_COLUMN (MiniCollWeight, miniCollWeight, float );
6060DECLARE_SOA_COLUMN (MiniCollPtHard, miniCollPtHard, float );
61+ DECLARE_SOA_COLUMN (MiniCollCentrality, miniCollCentrality, float );
6162DECLARE_SOA_TABLE (MiniCollisions, " AOD" , " MINICOLL" ,
6263 MiniCollTag,
6364 MiniCollMcCollisionId,
6465 MiniCollWeight,
65- MiniCollPtHard);
66+ MiniCollPtHard,
67+ MiniCollCentrality);
6668
6769// MiniJets -> MiniCollisions
6870DECLARE_SOA_INDEX_COLUMN_CUSTOM (MiniCollision, miniCollision, " MINICOLLS" );
@@ -283,6 +285,9 @@ struct JetLundPlaneUnfolding {
283285 Configurable<float > jetEtaMax{" jetEtaMax" , 0 .5f , " max jet eta" };
284286 Configurable<float > jetR{" jetR" , 0 .4f , " jet radius (must match derived tables)" };
285287 Configurable<float > trackPtMin{" trackPtMin" , 0 .15f , " min constituent pT" };
288+ Configurable<float > centralityMin{" centralityMin" , 0 .f , " minimum FT0M centrality for subtracted data" };
289+ Configurable<float > centralityMax{" centralityMax" , 100 .f , " maximum FT0M centrality for subtracted data" };
290+ Configurable<int > reclusteringAlgorithm{" reclusteringAlgorithm" , 0 , " reclustering algorithm: 0 = C/A, 1 = generalized-kT p=0.5 (tau)" };
286291
287292 Configurable<int > nBinsJetPt{" nBinsJetPt" , 200 , " jet pT bins" };
288293 Configurable<float > jetPtMax{" jetPtMax" , 200 .f , " jet pT max" };
@@ -312,7 +317,7 @@ struct JetLundPlaneUnfolding {
312317 Produces<aod::MiniSplittingsAll> outMiniSplittingsAll;
313318 Produces<aod::MiniJetMatches> outMiniJetMatches;
314319
315- // FastJet reclustering setup (C/A)
320+ // FastJet reclustering setup
316321 JetFinder reclusterer;
317322 std::vector<fastjet::PseudoJet> jetReclustered;
318323
@@ -403,7 +408,13 @@ struct JetLundPlaneUnfolding {
403408
404409 // reclusterer config
405410 reclusterer.isReclustering = true ;
406- reclusterer.algorithm = fastjet::cambridge_algorithm;
411+ if (reclusteringAlgorithm.value == 0 ) {
412+ reclusterer.algorithm = fastjet::cambridge_algorithm;
413+ } else if (reclusteringAlgorithm.value == 1 ) {
414+ reclusterer.algorithm = fastjet::genkt_algorithm;
415+ reclusterer.fastjetExtraParam = 0.5 ;
416+ }
417+
407418 reclusterer.jetR = 1.0 ; // recluster radius for declustering tree
408419 reclusterer.recombScheme = fastjet::E_scheme;
409420 reclusterer.strategy = fastjet::Best;
@@ -422,6 +433,8 @@ struct JetLundPlaneUnfolding {
422433
423434 // Type aliases
424435 using RecoJets = soa::Join<aod::ChargedJets, aod::ChargedJetConstituents>;
436+ using SubtractedRecoJets = soa::Join<aod::ChargedEventWiseSubtractedJets,
437+ aod::ChargedEventWiseSubtractedJetConstituents>;
425438 using DetJetsMatched = soa::Join<aod::ChargedMCDetectorLevelJets,
426439 aod::ChargedMCDetectorLevelJetConstituents,
427440 aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets>;
@@ -537,15 +550,14 @@ struct JetLundPlaneUnfolding {
537550 }
538551
539552 // DATA / RECO PROCESSING
540- void processData (soa::Filtered<aod::JetCollisions>::iterator const &,
541- soa::Filtered<RecoJets> const & jets,
542- aod::JetTracks const & tracks)
553+ template <typename JetTableT, typename ConstituentTableT>
554+ void processDataImpl (JetTableT const & jets, ConstituentTableT const & tracks, float centrality)
543555 {
544556 registry.fill (HIST (" hEventCount" ), 0.5 );
545557
546558 int miniCollIdx = -1 ;
547559 if (writeMiniAOD.value ) {
548- outMiniCollisions (static_cast <uint8_t >(0 ), int64_t {-1 }, 1 .f , -1 .f );
560+ outMiniCollisions (static_cast <uint8_t >(0 ), int64_t {-1 }, 1 .f , -1 .f , centrality );
549561 miniCollIdx = outMiniCollisions.lastIndex ();
550562 }
551563 for (auto const & jet : jets) {
@@ -570,7 +582,27 @@ struct JetLundPlaneUnfolding {
570582 }
571583 }
572584 }
573- PROCESS_SWITCH (JetLundPlaneUnfolding, processData, " Reco/data Lund + jet spectra" , true );
585+
586+ void processData (soa::Filtered<aod::JetCollisions>::iterator const &,
587+ soa::Filtered<RecoJets> const & jets,
588+ aod::JetTracks const & tracks)
589+ {
590+ processDataImpl (jets, tracks, -1 .f );
591+ }
592+ PROCESS_SWITCH (JetLundPlaneUnfolding, processData, " Unsubtracted reco/data Lund + jet spectra" , true );
593+
594+ void processDataEventWiseSubCentrality (soa::Filtered<aod::JetCollisions>::iterator const & collision,
595+ soa::Filtered<SubtractedRecoJets> const & jets,
596+ aod::JetTracksSub const & tracks)
597+ {
598+ const float centrality = collision.centFT0M ();
599+ if (centrality < centralityMin.value || centrality >= centralityMax.value ) {
600+ return ;
601+ }
602+ processDataImpl (jets, tracks, centrality);
603+ }
604+ PROCESS_SWITCH (JetLundPlaneUnfolding, processDataEventWiseSubCentrality,
605+ " Event-wise constituent-subtracted reco/data Lund with FT0M centrality" , false );
574606
575607 // MC PROCESSING (det + part + response)
576608
@@ -651,7 +683,7 @@ struct JetLundPlaneUnfolding {
651683 int partMiniCollIdx = -1 ;
652684 auto collIt = partMiniCollByKey.find (partCollKey);
653685 if (collIt == partMiniCollByKey.end ()) {
654- outMiniCollisions (static_cast <uint8_t >(0 ), partMcInfo.mcCollisionId , partMcInfo.weight , partMcInfo.ptHard );
686+ outMiniCollisions (static_cast <uint8_t >(0 ), partMcInfo.mcCollisionId , partMcInfo.weight , partMcInfo.ptHard , - 1 . f );
655687 partMiniCollIdx = outMiniCollisions.lastIndex ();
656688 partMiniCollByKey.emplace (partCollKey, partMiniCollIdx);
657689 } else {
@@ -730,7 +762,7 @@ struct JetLundPlaneUnfolding {
730762 int detMiniCollIdx = -1 ;
731763 auto collIt = detMiniCollByKey.find (detCollKey);
732764 if (collIt == detMiniCollByKey.end ()) {
733- outMiniCollisions (static_cast <uint8_t >(0 ), detMcInfo.mcCollisionId , detMcInfo.weight , detMcInfo.ptHard );
765+ outMiniCollisions (static_cast <uint8_t >(0 ), detMcInfo.mcCollisionId , detMcInfo.weight , detMcInfo.ptHard , - 1 . f );
734766 detMiniCollIdx = outMiniCollisions.lastIndex ();
735767 detMiniCollByKey.emplace (detCollKey, detMiniCollIdx);
736768 } else {
0 commit comments