Skip to content

Commit b3cb324

Browse files
Merge branch 'AliceO2Group:master' into master
2 parents 1a05feb + c44c99d commit b3cb324

82 files changed

Lines changed: 8963 additions & 2600 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Common/Tasks/centralityStudy.cxx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,9 @@ struct centralityStudy {
253253
histos.add("hFT0C_Collisions", "hFT0C_Collisions", kTH1D, {axisMultUltraFineFT0C});
254254
histos.add("hFT0M_Collisions", "hFT0M_Collisions", kTH1D, {axisMultUltraFineFT0M});
255255
histos.add("hFV0A_Collisions", "hFV0A_Collisions", kTH1D, {axisMultUltraFineFV0A});
256+
histos.add("hFT0AOuter_Collisions", "hFT0AOuter_Collisions", kTH1D, {axisMultUltraFineFT0A});
257+
histos.add("hFT0MOuterA_Collisions", "hFT0MOuterA_Collisions", kTH1D, {axisMultUltraFineFT0M});
258+
256259
histos.add("hNGlobalTracks", "hNGlobalTracks", kTH1D, {axisMultUltraFineGlobalTracks});
257260
histos.add("hNMFTTracks", "hNMFTTracks", kTH1D, {axisMultUltraFineMFTTracks});
258261
histos.add("hNPVContributors", "hNPVContributors", kTH1D, {axisMultUltraFinePVContributors});
@@ -272,6 +275,7 @@ struct centralityStudy {
272275
// 2d correlation of fit signals
273276
histos.add("hFT0AVsFT0C", "hFT0AVsFT0C", kTH2F, {axisMultFT0C, axisMultFT0A});
274277
histos.add("hFV0AVsFT0C", "hFV0AVsFT0C", kTH2F, {axisMultFT0C, axisMultFV0A});
278+
histos.add("hFT0AOuterVsFT0C", "hFT0AOuterVsFT0C", kTH2F, {axisMultFT0C, axisMultFT0A});
275279
histos.add("hFDDAVsFT0C", "hFDDAVsFT0C", kTH2F, {axisMultFT0C, axisMultFDDA});
276280
histos.add("hFDDCVsFT0C", "hFDDCVsFT0C", kTH2F, {axisMultFT0C, axisMultFDDC});
277281
}
@@ -514,6 +518,8 @@ struct centralityStudy {
514518

515519
histPointers.insert({histPath + "hFT0C_Collisions", histos.add((histPath + "hFT0C_Collisions").c_str(), "hFT0C_Collisions", {kTH1D, {{axisMultUltraFineFT0C}}})});
516520
histPointers.insert({histPath + "hFT0A_Collisions", histos.add((histPath + "hFT0A_Collisions").c_str(), "hFT0A_Collisions", {kTH1D, {{axisMultUltraFineFT0A}}})});
521+
histPointers.insert({histPath + "hFT0AOuter_Collisions", histos.add((histPath + "hFT0AOuter_Collisions").c_str(), "hFT0AOuter_Collisions", {kTH1D, {{axisMultUltraFineFT0C}}})});
522+
histPointers.insert({histPath + "hFT0MOuterA_Collisions", histos.add((histPath + "hFT0MOuterA_Collisions").c_str(), "hFT0MOuterA_Collisions", {kTH1D, {{axisMultUltraFineFT0A}}})});
517523
histPointers.insert({histPath + "hFT0M_Collisions", histos.add((histPath + "hFT0M_Collisions").c_str(), "hFT0M_Collisions", {kTH1D, {{axisMultUltraFineFT0M}}})});
518524
histPointers.insert({histPath + "hFV0A_Collisions", histos.add((histPath + "hFV0A_Collisions").c_str(), "hFV0A_Collisions", {kTH1D, {{axisMultUltraFineFV0A}}})});
519525
histPointers.insert({histPath + "hNGlobalTracks", histos.add((histPath + "hNGlobalTracks").c_str(), "hNGlobalTracks", {kTH1D, {{axisMultUltraFineGlobalTracks}}})});
@@ -548,6 +554,7 @@ struct centralityStudy {
548554
histPointers.insert({histPath + "hFV0AVsFT0C", histos.add((histPath + "hFV0AVsFT0C").c_str(), "hFV0AVsFT0C", {kTH2F, {{axisMultFT0C, axisMultFV0A}}})});
549555
histPointers.insert({histPath + "hFDDAVsFT0C", histos.add((histPath + "hFDDAVsFT0C").c_str(), "hFDDAVsFT0C", {kTH2F, {{axisMultFT0C, axisMultFDDA}}})});
550556
histPointers.insert({histPath + "hFDDCVsFT0C", histos.add((histPath + "hFDDCVsFT0C").c_str(), "hFDDCVsFT0C", {kTH2F, {{axisMultFT0C, axisMultFDDC}}})});
557+
histPointers.insert({histPath + "hFT0AOuterVsFT0C", histos.add((histPath + "hFT0AOuterVsFT0C").c_str(), "hFT0AOuterVsFT0C", {kTH2F, {{axisMultFT0C, axisMultFT0A}}})});
551558
}
552559

553560
if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) {
@@ -956,17 +963,29 @@ struct centralityStudy {
956963
if constexpr (requires { collision.has_multBC(); }) {
957964
if (collision.has_multBC()) {
958965
auto multbc = collision.template multBC_as<soa::Join<aod::MultBCs, aod::MultBcSel>>();
966+
histos.fill(HIST("hFT0AOuter_Collisions"), multbc.multFT0AOuter() * scale.factorFT0A);
967+
histos.fill(HIST("hFT0MOuterA_Collisions"), multbc.multFT0AOuter() + multbc.multFT0C() * scale.factorFT0M);
968+
if (studies.do2DPlots) {
969+
histos.fill(HIST("hFT0AOuterVsFT0C"), multbc.multFT0C() * scale.factorFT0C, multbc.multFT0AOuter() * scale.factorFT0A);
970+
}
971+
959972
const uint64_t bcTimestamp = multbc.timestamp();
960973
const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, ccdbSettings.irSource.value, ccdbSettings.irCrashOnNull) / 1000.; // kHz
961974
histos.fill(HIST("hInteractionRate"), interactionRate);
962975
if (doprocessCollisionsWithCentrality || ccdbSettings.fetchCentralityCalibration) {
963976
histos.fill(HIST("hInteractionRateVsCentrality"), centFT0C, interactionRate);
964-
}
965-
if (studies.doRunByRunHistograms) {
966-
getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(centFT0C, interactionRate);
977+
if (studies.doRunByRunHistograms) {
978+
getHist(TH2, histPath + "hInteractionRateVsCentrality")->Fill(centFT0C, interactionRate);
979+
}
967980
}
968981
if (studies.doRunByRunHistograms) {
969982
getHist(TH1, histPath + "hInteractionRate")->Fill(interactionRate);
983+
getHist(TH1, histPath + "hFT0AOuter_Collisions")->Fill(multbc.multFT0AOuter() * scale.factorFT0A);
984+
getHist(TH1, histPath + "hFT0MOuterA_Collisions")->Fill(multbc.multFT0AOuter() + multbc.multFT0C() * scale.factorFT0M);
985+
if (studies.do2DPlots) {
986+
getHist(TH2, histPath + "hFT0AOuterVsFT0C")->Fill(multbc.multFT0C() * scale.factorFT0C, multbc.multFT0AOuter() * scale.factorFT0A);
987+
}
988+
970989
if (studies.doTimeStudies) {
971990
const float hoursAfterStartOfRun = static_cast<float>(bcTimestamp - startOfRunTimestamp) / 3600000.0;
972991
getHist(TH2, histPath + "hFT0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0A());

Common/Tools/EventSelectionModule.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1505,7 +1505,7 @@ class EventSelectionModule
15051505
// TODO apply other cuts for sel8?
15061506
// TODO introduce array of sel[0]... sel[8] or similar?
15071507
bool sel8 = false;
1508-
if (lastRun < 568873) // o2-linter: disable=magic-number (pre-2026 data & MC: require all three bits: TVX, TF and ROF border cuts)
1508+
if (lastRun < 568873 || lastRun >= 572103) // o2-linter: disable=magic-number (pre-2026 and Pb-Pb 2026 (data & MC): require all three bits: TVX, TF and ROF border cuts)
15091509
sel8 = BITCHECK64(bcselEntry.selection, aod::evsel::kIsTriggerTVX) && BITCHECK64(bcselEntry.selection, aod::evsel::kNoTimeFrameBorder) && BITCHECK64(bcselEntry.selection, aod::evsel::kNoITSROFrameBorder);
15101510
else // for pp 2026: sel8 without kNoITSROFrameBorder bit, because the cross-ROF reconstruction for ITS will be On (the switch by a runNumber is a temporary solution)
15111511
sel8 = BITCHECK64(bcselEntry.selection, aod::evsel::kIsTriggerTVX) && BITCHECK64(bcselEntry.selection, aod::evsel::kNoTimeFrameBorder);

DPG/Tasks/AOTTrack/derivedDataCreatorD0Calibration.cxx

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ struct DerivedDataCreatorD0Calibration {
117117
std::string prefix = "ml";
118118
} cfgMl;
119119

120-
using TracksWCovExtraPid = soa::Join<aod::Tracks, aod::TrackToTmo, aod::TracksCov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa>;
121-
using TracksWCovExtraPidAndQa = soa::Join<aod::Tracks, aod::TrackToTmo, aod::TrackToTracksQA, aod::TracksCov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa>;
120+
using TracksWCovExtraPid = soa::Join<aod::Tracks, aod::TracksCov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa>;
121+
using TracksWCovExtraTmoPid = soa::Join<aod::Tracks, aod::TrackToTmo, aod::TracksCov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa>;
122+
using TracksWCovExtraTmoPidAndQa = soa::Join<aod::Tracks, aod::TrackToTmo, aod::TrackToTracksQA, aod::TracksCov, aod::TracksExtra, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTOFFullPi, aod::pidTPCFullKa, aod::pidTOFFullKa>;
122123
using CollisionsWEvSel = soa::Join<aod::Collisions, aod::CentFT0Cs, aod::EvSels>;
123124
using TrackMeanOccs = soa::Join<aod::TmoTrackIds, aod::TmoPrim, aod::TmoT0V0, aod::TmoRT0V0Prim, aod::TwmoPrim, aod::TwmoT0V0, aod::TwmoRT0V0Prim>;
124125

@@ -183,12 +184,12 @@ struct DerivedDataCreatorD0Calibration {
183184
}
184185

185186
// main function
186-
template <bool withTrackQa, typename TTrackQa, typename TTracks>
187+
template <bool withTrackQa, bool withTrackOcc, typename TTrackQa, typename TTracks, typename TTrackMeanOccs>
187188
void runDataCreation(CollisionsWEvSel const& collisions,
188189
aod::TrackAssoc const& trackIndices,
189190
TTracks const&,
190191
aod::BCsWithTimestamps const&,
191-
TrackMeanOccs const&,
192+
TTrackMeanOccs const&,
192193
TTrackQa const&)
193194
{
194195
std::map<int, int> selectedCollisions; // map with indices of selected collisions (key: original AOD Collision table index, value: D0 collision index)
@@ -514,18 +515,20 @@ struct DerivedDataCreatorD0Calibration {
514515
uint8_t twmoFT0CUnfm80{0u};
515516
uint8_t tmoRobustT0V0PrimUnfm80{0u};
516517
uint8_t twmoRobustT0V0PrimUnfm80{0u};
517-
if (trackPos.has_tmo()) {
518-
auto tmoFromTrack = trackPos.template tmo_as<TrackMeanOccs>(); // obtain track mean occupancies
519-
tmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoPrimUnfm80());
520-
tmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFV0AUnfm80());
521-
tmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0AUnfm80());
522-
tmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0CUnfm80());
523-
twmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoPrimUnfm80());
524-
twmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFV0AUnfm80());
525-
twmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0AUnfm80());
526-
twmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0CUnfm80());
527-
tmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoRobustT0V0PrimUnfm80());
528-
twmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoRobustT0V0PrimUnfm80());
518+
if constexpr (withTrackOcc) {
519+
if (trackPos.has_tmo()) {
520+
auto tmoFromTrack = trackPos.template tmo_as<TrackMeanOccs>(); // obtain track mean occupancies
521+
tmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoPrimUnfm80());
522+
tmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFV0AUnfm80());
523+
tmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0AUnfm80());
524+
tmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0CUnfm80());
525+
twmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoPrimUnfm80());
526+
twmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFV0AUnfm80());
527+
twmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0AUnfm80());
528+
twmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0CUnfm80());
529+
tmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoRobustT0V0PrimUnfm80());
530+
twmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoRobustT0V0PrimUnfm80());
531+
}
529532
}
530533
float tpcTime0{0.f};
531534
float tpcdEdxNorm{0.f};
@@ -679,18 +682,20 @@ struct DerivedDataCreatorD0Calibration {
679682
uint8_t twmoFT0CUnfm80{0u};
680683
uint8_t tmoRobustT0V0PrimUnfm80{0u};
681684
uint8_t twmoRobustT0V0PrimUnfm80{0u};
682-
if (trackNeg.has_tmo()) {
683-
auto tmoFromTrack = trackNeg.template tmo_as<TrackMeanOccs>(); // obtain track mean occupancies
684-
tmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoPrimUnfm80());
685-
tmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFV0AUnfm80());
686-
tmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0AUnfm80());
687-
tmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0CUnfm80());
688-
twmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoPrimUnfm80());
689-
twmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFV0AUnfm80());
690-
twmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0AUnfm80());
691-
twmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0CUnfm80());
692-
tmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoRobustT0V0PrimUnfm80());
693-
twmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoRobustT0V0PrimUnfm80());
685+
if constexpr (withTrackOcc) {
686+
if (trackNeg.has_tmo()) {
687+
auto tmoFromTrack = trackNeg.template tmo_as<TrackMeanOccs>(); // obtain track mean occupancies
688+
tmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoPrimUnfm80());
689+
tmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFV0AUnfm80());
690+
tmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0AUnfm80());
691+
tmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoFT0CUnfm80());
692+
twmoPrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoPrimUnfm80());
693+
twmoFV0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFV0AUnfm80());
694+
twmoFT0AUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0AUnfm80());
695+
twmoFT0CUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoFT0CUnfm80());
696+
tmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.tmoRobustT0V0PrimUnfm80());
697+
twmoRobustT0V0PrimUnfm80 = getCompressedOccupancy(tmoFromTrack.twmoRobustT0V0PrimUnfm80());
698+
}
694699
}
695700
float tpcTime0{0.f};
696701
float tpcdEdxNorm{0.f};
@@ -868,24 +873,33 @@ struct DerivedDataCreatorD0Calibration {
868873
// process functions
869874
void processWithTrackQa(CollisionsWEvSel const& collisions,
870875
aod::TrackAssoc const& trackIndices,
871-
TracksWCovExtraPidAndQa const& tracks,
876+
TracksWCovExtraTmoPidAndQa const& tracks,
872877
aod::BCsWithTimestamps const& bcs,
873878
TrackMeanOccs const& occ,
874879
aod::TracksQAVersion const& trackQa)
875880
{
876-
runDataCreation<true>(collisions, trackIndices, tracks, bcs, occ, trackQa);
881+
runDataCreation<true, true>(collisions, trackIndices, tracks, bcs, occ, trackQa);
877882
}
878883
PROCESS_SWITCH(DerivedDataCreatorD0Calibration, processWithTrackQa, "Process with trackQA enabled", false);
879884

880885
void processNoTrackQa(CollisionsWEvSel const& collisions,
881886
aod::TrackAssoc const& trackIndices,
882-
TracksWCovExtraPid const& tracks,
887+
TracksWCovExtraTmoPid const& tracks,
883888
aod::BCsWithTimestamps const& bcs,
884889
TrackMeanOccs const& occ)
885890
{
886-
runDataCreation<false>(collisions, trackIndices, tracks, bcs, occ, nullptr);
891+
runDataCreation<false, true>(collisions, trackIndices, tracks, bcs, occ, nullptr);
892+
}
893+
PROCESS_SWITCH(DerivedDataCreatorD0Calibration, processNoTrackQa, "Process without trackQA enabled", false);
894+
895+
void processNoTrackQaAndOcc(CollisionsWEvSel const& collisions,
896+
aod::TrackAssoc const& trackIndices,
897+
TracksWCovExtraPid const& tracks,
898+
aod::BCsWithTimestamps const& bcs)
899+
{
900+
runDataCreation<false, false>(collisions, trackIndices, tracks, bcs, nullptr, nullptr);
887901
}
888-
PROCESS_SWITCH(DerivedDataCreatorD0Calibration, processNoTrackQa, "Process without trackQA enabled", true);
902+
PROCESS_SWITCH(DerivedDataCreatorD0Calibration, processNoTrackQaAndOcc, "Process without trackQA and trackMeanOcc enabled", true);
889903
};
890904

891905
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

DPG/Tasks/AOTTrack/qaImpPar.cxx

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ struct QaImpactPar {
116116
Configurable<int> nCustomMinITShits{"n_customMinITShits", 0, "Minimum number of layers crossed by a track among those in \"customITShitmap\""};
117117
Configurable<bool> customForceITSTPCmatching{"custom_forceITSTPCmatching", false, "Consider or not only ITS-TPC macthed tracks when using custom ITS hitmap"};
118118
Configurable<float> downsamplingFraction{"downsamplingFraction", 1.1, "Fraction of tracks to be used to fill the output objects"};
119+
Configurable<int> eventGeneratorHF{"eventGeneratorHF", -1, "If positive, enable event selection using subGeneratorId information (HF). The value indicates which events to keep (0 = MB, 4 = charm triggered, 5 = beauty triggered)"};
119120

120121
/// Custom cut selection objects
121122
TrackSelection selector_ITShitmap;
@@ -201,6 +202,12 @@ struct QaImpactPar {
201202
const o2::aod::McCollisions&,
202203
o2::aod::BCsWithTimestamps const&)
203204
{
205+
/// SubgeneratorID check for HF MC
206+
/// Useful to select MB gap events in HF-dedicated MC productions
207+
if (eventGeneratorHF >= 0 && collision.mcCollision().getSubGeneratorId() != eventGeneratorHF) {
208+
return;
209+
}
210+
204211
/// here call the template processReco function
205212
auto bc = collision.bc_as<o2::aod::BCsWithTimestamps>();
206213
processReco<true, false>(collision, tracksUnfiltered, tracks, tracksIU, mcParticles, bc);
@@ -216,6 +223,12 @@ struct QaImpactPar {
216223
const o2::aod::McCollisions&,
217224
o2::aod::BCsWithTimestamps const&)
218225
{
226+
/// SubgeneratorID check for HF MC
227+
/// Useful to select MB gap events in HF-dedicated MC productions
228+
if (eventGeneratorHF >= 0 && collision.mcCollision().getSubGeneratorId() != eventGeneratorHF) {
229+
return;
230+
}
231+
219232
/// here call the template processReco function
220233
auto bc = collision.bc_as<o2::aod::BCsWithTimestamps>();
221234
processReco<true, true>(collision, tracksUnfiltered, tracks, tracksIU, mcParticles, bc);

0 commit comments

Comments
 (0)