Skip to content

Commit f27fffd

Browse files
authored
Merge branch 'AliceO2Group:master' into dev4
2 parents ec30e76 + 424e128 commit f27fffd

17 files changed

Lines changed: 1593 additions & 806 deletions

File tree

‎CODEOWNERS‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
/PWGMM/Lumi @alibuild @omvazque @mpuccio @skundu692 @aalkin @jgcn @gbencedi @abmodak
7676
/PWGMM/UE @alibuild @omvazque @mpuccio @skundu692 @aalkin @aortizve @jgcn
7777

78-
/PWGUD @alibuild @amatyja @rolavick
78+
/PWGUD @alibuild @amatyja @ekryshen
7979
/PWGJE @alibuild @nzardosh @fjonasALICE @jaimenorman @mhemmer-cern
8080
/Tools/PIDML @alibuild @saganatt
8181
/Tools/ML @alibuild @fcatalan92 @fmazzasc @ChSonnabend
@@ -86,4 +86,4 @@
8686
/Tutorials/PWGJE @alibuild @nzardosh @fjonasALICE @jaimenorman
8787
/Tutorials/PWGLF @alibuild @alcaliva @lbariogl @BongHwi @lbarnby @ercolessi @iravasen @njacazio @romainschotter @skundu692 @lhusova
8888
/Tutorials/PWGMM @alibuild @aalkin @ddobrigk
89-
/Tutorials/PWGUD @alibuild @pbuehler @amatyja
89+
/Tutorials/PWGUD @alibuild @amatyja @ekryshen

‎PWGCF/Core/AnalysisConfigurableCuts.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class SimpleInclusiveCut : public TNamed
151151
SimpleInclusiveCut& operator=(const SimpleInclusiveCut&);
152152

153153
private:
154-
ClassDef(SimpleInclusiveCut, 1);
154+
ClassDefOverride(SimpleInclusiveCut, 1);
155155
};
156156

157157
} // namespace analysis

‎PWGCF/EbyEFluctuations/Tasks/radialFlowDecorr.cxx‎

Lines changed: 40 additions & 399 deletions
Large diffs are not rendered by default.

‎PWGCF/GenericFramework/Core/FlowPtContainer.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,6 @@ class FlowPtContainer : public TNamed
233233
void getSubevents(int k, int n, std::vector<int>& current, std::vector<std::vector<int>>& subevents);
234234
static constexpr std::array<float, 9> FactorialArray = {1., 1., 2., 6., 24., 120., 720., 5040., 40320.};
235235
static constexpr std::array<int, 9> SignArray = {1, -1, 1, -1, 1, -1, 1, -1, 1};
236-
ClassDef(FlowPtContainer, 2);
236+
ClassDefOverride(FlowPtContainer, 2);
237237
};
238238
#endif // PWGCF_GENERICFRAMEWORK_CORE_FLOWPTCONTAINER_H_

‎PWGCF/MultiparticleCorrelations/Tasks/multiparticleCorrelationsMei.cxx‎

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,10 @@ enum EMiscHistograms {
134134
eMiscHistograms_N
135135
};
136136

137-
enum EExternalHistograms {
137+
enum EWeightsHistograms {
138138
ePhi = 0,
139139
ePt,
140-
eExternalHistograms_N
140+
eWeightsHistograms_N
141141
};
142142

143143
enum EObservables {
@@ -159,7 +159,7 @@ static constexpr std::array<const char*, eMultiplicityTables_N> MultiplicityTabl
159159
"multFT0M",
160160
"multNTracksPV"};
161161

162-
static constexpr std::array<const char*, eExternalHistograms_N> WeightsNames = {
162+
static constexpr std::array<const char*, eWeightsHistograms_N> WeightsNames = {
163163
"ePhi",
164164
"ePt"};
165165

@@ -187,7 +187,7 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
187187

188188
// *) external root files
189189
Configurable<bool> cfExternalFileSwitch{"cfExternalFileSwitch", false, "choose to include external root files or not"};
190-
Configurable<std::string> cfFileWithWeights{"cfFileWithWeights", "/alice-ccdb.cern.ch/Users/m/mei/O2challenge-", "path to external ROOT file which holds all particle weights"};
190+
Configurable<std::string> cfFileWithWeights{"cfFileWithWeights", "/alice-ccdb.cern.ch/Users/m/mei/thesis-", "path to external ROOT file which holds all particle weights"};
191191

192192
// *) binnings
193193
Configurable<bool> cfALICECentBinSwitch{"cfALICECentBinSwitch", true, "switch on or off to use ALICE default binning"};
@@ -219,6 +219,7 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
219219
// *) misc
220220
Configurable<double> sigmaInel{"sigmaInel", 7.71, "inelastic cross section in mb"};
221221
Configurable<bool> qualityAssuranceSwitch{"qualityAssuranceSwitch", false, "quality assurance switch"};
222+
Configurable<bool> runMessageSwitch{"runMessageSwitch", false, "run message switch"};
222223

223224
// *) Define and initialize all data members to be called in the main process* functions:
224225
// **) Task configuration:
@@ -247,7 +248,7 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
247248
// *) External histograms:
248249
struct ExternalHistograms {
249250
TList* fExternalHistogramsList = nullptr;
250-
std::array<std::array<TH1F*, eCuts_N>, eExternalHistograms_N> fWeights{}; //! [type][before, after cuts]
251+
std::array<std::array<TH1F*, eCuts_N>, eWeightsHistograms_N> fWeights{}; //! [type][before, after cuts]
251252
} ex;
252253

253254
struct Observables {
@@ -275,7 +276,7 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
275276
}
276277

277278
template <typename T1>
278-
void updateQVectorsTable(std::vector<std::vector<TComplex>>& QVectorsTable, T1 phi, T1 weight = T1(1))
279+
void updateQVectorsTable(std::vector<std::vector<TComplex>>& QVectorsTable, T1 const& phi, T1 weight = T1(1))
279280
{
280281
const int maxHarmonic = QVectorsTable.size();
281282
const int maxPower = QVectorsTable.empty() ? 0 : QVectorsTable[0].size();
@@ -526,9 +527,9 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
526527

527528
// templates
528529
template <typename T1>
529-
float chooseCent(T1 const& collision)
530+
float chooseCent(T1 const& collision, int const& whichEstimator)
530531
{
531-
switch (centralityEstimator) {
532+
switch (whichEstimator) {
532533
case eFT0C:
533534
return static_cast<float>(collision.centFT0C());
534535
case eFT0M:
@@ -544,9 +545,9 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
544545
}
545546

546547
template <typename T1>
547-
float chooseMult(T1 const& collision)
548+
float chooseMult(T1 const& collision, int const& whichTable)
548549
{
549-
switch (multiplicityTables) {
550+
switch (whichTable) {
550551
case eMultTPC:
551552
return static_cast<float>(collision.multTPC());
552553
case eMultFV0M:
@@ -598,8 +599,8 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
598599
if constexpr (rs == eRec || rs == eRecAndSim) {
599600
// Fill reconstructed-level event histograms
600601
if (rm == eReal) {
601-
auto thisCent = chooseCent(collision);
602-
auto thisRefMult = chooseMult(collision);
602+
auto thisCent = chooseCent(collision, centralityEstimator);
603+
auto thisRefMult = chooseMult(collision, multiplicityTables);
603604
int multiplicityRec = static_cast<int>(tracks.size());
604605
if constexpr (cuts == eBefore) {
605606
ec.fEventHist[eHistMultiplicity][eRec][eBefore]->Fill(multiplicityRec);
@@ -772,10 +773,13 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
772773

773774
void loadWeights(int runNumber)
774775
{
775-
for (int i = 0; i < eExternalHistograms_N; ++i) {
776+
for (int i = 0; i < eWeightsHistograms_N; ++i) {
776777
for (int j = 0; j < eCuts_N; ++j) {
777-
ex.fWeights[i][j] =
778-
getHistogramWithWeights(cfFileWithWeights.value.c_str(), Form("%d", runNumber), Form("[%s][%s]", WeightsNames[i], CutsNames[j]));
778+
ex.fWeights[i][j] = getHistogramWithWeights(cfFileWithWeights.value.c_str(), Form("%d", runNumber), Form("[%s][%s]", WeightsNames[i], CutsNames[j]));
779+
if (!ex.fWeights[i][j]) {
780+
LOGF(info, "[%s][%s] not found", WeightsNames[i], CutsNames[j]);
781+
continue;
782+
}
779783
ex.fExternalHistogramsList->Add(ex.fWeights[i][j]);
780784
}
781785
}
@@ -784,7 +788,7 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
784788
template <ERecSim rs, typename T1>
785789
void qaFill(T1 const& collision)
786790
{
787-
auto thisCent = chooseCent(collision);
791+
auto thisCent = chooseCent(collision, centralityEstimator);
788792
if constexpr (rs == eRecAndSim || rs == eSim) {
789793
if (!collision.has_mcCollision()) {
790794
return;
@@ -807,7 +811,10 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
807811
if (tc.fDryRun) {
808812
return;
809813
}
810-
int thisRunNumber = collision.bc().runNumber();
814+
const int thisRunNumber = collision.bc().runNumber();
815+
if (runMessageSwitch) {
816+
LOGF(info, "Successfully running, run number is %d", thisRunNumber);
817+
}
811818

812819
if (isFirstCollision) {
813820
// Get run number
@@ -848,27 +855,30 @@ struct MultiparticleCorrelationsMei // this name is used in lower-case format to
848855
auto track = tracks.iteratorAt(0); // set the type and scope from one instance
849856
for (int64_t i = 0; i < tracks.size(); i++) {
850857
track = tracks.iteratorAt(i);
851-
const float thisPhi = track.phi();
852-
const float thisPt = track.pt();
853-
float wPhiBefore = 1.f;
854-
float wPhiAfter = 1.f;
855-
float wPtBefore = 1.f;
856-
float wPtAfter = 1.f;
857-
if (cfExternalFileSwitch && ex.fWeights[ePhi][eBefore]) {
858-
wPhiBefore = ex.fWeights[ePhi][eBefore]->GetBinContent(ex.fWeights[ePhi][eBefore]->FindBin(thisPhi));
859-
wPhiAfter = ex.fWeights[ePhi][eAfter]->GetBinContent(ex.fWeights[ePhi][eAfter]->FindBin(thisPhi));
860-
wPtBefore = ex.fWeights[ePt][eBefore]->GetBinContent(ex.fWeights[ePt][eBefore]->FindBin(thisPt));
861-
wPtAfter = ex.fWeights[ePt][eAfter]->GetBinContent(ex.fWeights[ePt][eAfter]->FindBin(thisPt));
858+
float thisPhi = track.phi();
859+
float thisPt = track.pt();
860+
std::array<float, 2> thisPhiAndPt = {thisPhi, thisPt};
861+
std::array<std::array<float, 2>, 2> thisWeights = {{{1.f, 1.f}, {1.f, 1.f}}}; // {{wPhiBefore, wPhiAfter},{wPtBefore, wPtAfter}}
862+
863+
// eWeightsHistograms_N
864+
if (cfExternalFileSwitch) {
865+
for (int k = 0; k < eWeightsHistograms_N; ++k) {
866+
for (int j = 0; j < eCuts_N; ++j) {
867+
if (ex.fWeights[k][j]) {
868+
thisWeights[k][j] = ex.fWeights[k][j]->GetBinContent(ex.fWeights[k][j]->FindBin(thisPhiAndPt[k]));
869+
}
870+
}
871+
}
862872
}
863873

864874
particleHistFill<rs, eReal, eBefore>(track);
865875
particleHistFill<rs, eMC, eBefore>(track);
866-
updateQVectorsTable(qVectorsTableBeforeCutsReal, thisPhi, wPhiBefore * wPtBefore);
876+
updateQVectorsTable(qVectorsTableBeforeCutsReal, thisPhi, thisWeights[ePhi][eBefore] * thisWeights[ePt][eBefore]);
867877

868878
if (cfMasterCutSwitch) {
869879
if (passesEventCutsReal && particleCuts<rs, eReal>(track)) {
870880
particleHistFill<rs, eReal, eAfter>(track);
871-
updateQVectorsTable(qVectorsTableAfterCutsReal, thisPhi, wPhiAfter * wPtAfter);
881+
updateQVectorsTable(qVectorsTableAfterCutsReal, thisPhi, thisWeights[ePhi][eAfter] * thisWeights[ePt][eAfter]);
872882
}
873883
if (passesEventCutsMC && particleCuts<rs, eMC>(track)) {
874884
particleHistFill<rs, eMC, eAfter>(track);

‎PWGCF/TableProducer/CMakeLists.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
o2physics_add_dpl_workflow(filter-correlations
1313
SOURCES filterCorrelations.cxx
14-
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::PWGCFCore
14+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::PWGCFCore O2Physics::EventFilteringUtils
1515
COMPONENT_NAME Analysis)
1616

1717
o2physics_add_dpl_workflow(filter-correlations-2prong

‎PWGCF/TableProducer/filterCorrelations.cxx‎

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "Common/CCDB/EventSelectionParams.h"
1616
#include "Common/CCDB/TriggerAliases.h"
1717
#include "Common/Core/TableHelper.h"
18+
#include "Common/Core/Zorro.h"
1819
#include "Common/DataModel/Centrality.h"
1920
#include "Common/DataModel/EventSelection.h"
2021
#include "Common/DataModel/Multiplicity.h"
@@ -92,7 +93,7 @@ struct FilterCF {
9293
O2_DEFINE_CONFIGURABLE(cfgCutMCPt, float, 0.5f, "Minimal pT for particles");
9394
O2_DEFINE_CONFIGURABLE(cfgCutMCEta, float, 0.8f, "Eta range for particles");
9495
O2_DEFINE_CONFIGURABLE(cfgVerbosity, int, 1, "Verbosity level (0 = major, 1 = per collision)");
95-
O2_DEFINE_CONFIGURABLE(cfgTrigger, int, 7, "Trigger choice: (0 = none, 7 = sel7, 8 = sel8, 9 = sel8 + kNoSameBunchPileup + kIsGoodZvtxFT0vsPV, 10 = sel8 before April, 2024, 11 = sel8 for MC, 12 = sel8 with low occupancy cut, 13 = sel8 + kNoSameBunchPileup + kIsGoodITSLayersAll -- for OO/NeNe) ");
96+
O2_DEFINE_CONFIGURABLE(cfgTrigger, int, 7, "Trigger choice: (0 = none, 7 = sel7, 8 = sel8, 9 = sel8 + kNoSameBunchPileup + kIsGoodZvtxFT0vsPV, 10 = sel8 before April, 2024, 11 = sel8 for MC, 12 = sel8 with low occupancy cut, 13 = sel8 + kNoSameBunchPileup + kIsGoodITSLayersAll -- for OO/NeNe, 14 = fHighTrackMult (pp), 15 = fHighMultFv0 (pp), 16 = fHighTrackMult || fHighMultFv0 (pp))");
9697
O2_DEFINE_CONFIGURABLE(cfgMinOcc, int, 0, "minimum occupancy selection");
9798
O2_DEFINE_CONFIGURABLE(cfgMaxOcc, int, 3000, "maximum occupancy selection");
9899
O2_DEFINE_CONFIGURABLE(cfgCollisionFlags, uint16_t, aod::collision::CollisionFlagsRun2::Run2VertexerTracks, "Request collision flags if non-zero (0 = off, 1 = Run2VertexerTracks)");
@@ -135,6 +136,9 @@ struct FilterCF {
135136

136137
HistogramRegistry registrytrackQA{"TrackQA", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
137138

139+
Zorro zorro;
140+
int zorroRun = 0;
141+
138142
Produces<aod::CFCollisions> outputCollisions;
139143
Produces<aod::CFCollisionsExtra> outputCollisionsExtra;
140144
Produces<aod::CFTracks> outputTracks;
@@ -194,12 +198,13 @@ struct FilterCF {
194198
return;
195199
}
196200
localMultiplicityEfficiency.reset(dynamic_cast<THn*>(efficiency->Clone()));
197-
} else {
198-
ccdb->setURL("http://alice-ccdb.cern.ch");
199-
ccdb->setCaching(true);
200-
ccdb->setLocalObjectValidityChecking();
201201
}
202202
}
203+
if ((cfgTrigger >= 14 && cfgTrigger <= 16) || (!cfgEfficiencyMultiplicity.value.empty() && cfgLocalEfficiency == 0)) { // o2-linter: disable=magic-number (documented legacy trigger-selection code)
204+
ccdb->setURL("http://alice-ccdb.cern.ch");
205+
ccdb->setCaching(true);
206+
ccdb->setLocalObjectValidityChecking();
207+
}
203208
if (doprocessTrackQA) {
204209
registrytrackQA.add("zvtx", "Z Vertex position; posz (cm); Events", HistType::kTH1F, {{100, -12, 12}});
205210
registrytrackQA.add("eta", "eta distribution; eta; arb. units", HistType::kTH1F, {{100, -2, 2}});
@@ -249,6 +254,26 @@ struct FilterCF {
249254
if (cfgTrigger == 13) { // relevant for pO/OO/NeNe, recommended by Physics Board on 27.01.2026; o2-linter: disable=magic-number (documented legacy trigger-selection code)
250255
return isMultSelected && collision.sel8() && collision.selection_bit(aod::evsel::kNoSameBunchPileup) && collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV);
251256
}
257+
258+
// Zorro-based trigger selection
259+
if (cfgTrigger >= 14 && cfgTrigger <= 16) { // o2-linter: disable=magic-number (documented legacy trigger-selection code)
260+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
261+
if (zorroRun != bc.runNumber()) {
262+
std::string zorroMask;
263+
if (cfgTrigger == 14) { // High-multiplicity pp trigger based on tracks (PWGMM/multFilter.cxx); o2-linter: disable=magic-number (documented legacy trigger-selection code)
264+
zorroMask = "fHighTrackMult";
265+
}
266+
if (cfgTrigger == 15) { // High-multiplicity pp trigger based on FV0 amplitude (PWGMM/multFilter.cxx); o2-linter: disable=magic-number (documented legacy trigger-selection code)
267+
zorroMask = "fHighMultFv0";
268+
}
269+
if (cfgTrigger == 16) { // High-multiplicity pp trigger based on tracks or FV0 amplitude (PWGMM/multFilter.cxx); o2-linter: disable=magic-number (documented legacy trigger-selection code)
270+
zorroMask = "fHighTrackMult,fHighMultFv0";
271+
}
272+
zorro.initCCDB(ccdb.service, bc.runNumber(), bc.timestamp(), zorroMask);
273+
zorroRun = bc.runNumber();
274+
}
275+
return isMultSelected && zorro.isSelected(bc.globalBC(), 0); // Set BC threshold to zero to not admit nearby low-multiplicity collisions
276+
}
252277
return false;
253278
}
254279

@@ -488,7 +513,7 @@ struct FilterCF {
488513
}
489514
PROCESS_SWITCH(FilterCF, processDataMults, "Process data with multiplicity sets", false);
490515

491-
void processTrackQA(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CFMultiplicities>>::iterator const& collision, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA>> const& tracks)
516+
void processTrackQA(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CFMultiplicities>>::iterator const& collision, aod::BCsWithTimestamps const&, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA>> const& tracks)
492517
{
493518
if (!keepCollision(collision)) {
494519
return;

‎PWGCF/TwoParticleCorrelations/Core/EventSelectionFilterAndAnalysis.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class EventSelectionFilterAndAnalysis : public SelectionFilterAndAnalysis
119119
CutBrick<float>* mZVertex; //! the z vertex selection cuts
120120
PileUpRejBrick* mPileUpRejection; //! the pile-up rejection criteria
121121

122-
ClassDef(EventSelectionFilterAndAnalysis, 1)
122+
ClassDefOverride(EventSelectionFilterAndAnalysis, 1)
123123
};
124124

125125
/// \brief Stores the different multiplicities needed for proper collision filtering

‎PWGCF/TwoParticleCorrelations/Core/PIDSelectionFilterAndAnalysis.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ class PIDSelectionFilterAndAnalysis : public SelectionFilterAndAnalysis
145145
std::vector<CutBrick<float>*> mCloseNsigmasTOF;
146146
std::vector<CutBrick<float>*> mBayesProbability;
147147

148-
ClassDef(PIDSelectionFilterAndAnalysis, 1);
148+
ClassDefOverride(PIDSelectionFilterAndAnalysis, 1);
149149
};
150150

151151
/// \brief Fills the filter cuts mask

‎PWGCF/TwoParticleCorrelations/Core/SkimmingConfigurableCuts.h‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class CutBrick : public TNamed
9898
BrickStatus mState = kPASSIVE;
9999
BrickMode mMode = kUNSELECTED;
100100

101-
ClassDef(CutBrick, 1);
101+
ClassDefOverride(CutBrick, 1);
102102
};
103103

104104
/// \class CutBrickLimit
@@ -452,7 +452,7 @@ class CutWithVariations : public CutBrick<TValueToFilter>
452452
bool mAllowSeveralDefaults; ///< true if allows to store several cut default values
453453
TList mDefaultBricks; ///< the list with the cut default values bricks
454454
TList mVariationBricks; ///< the list with the cut variation values bricks
455-
ClassDef(CutWithVariations, 1);
455+
ClassDefOverride(CutWithVariations, 1);
456456
};
457457

458458
/// \class SpecialCutBrick
@@ -503,7 +503,7 @@ class SpecialCutBrick : public TNamed
503503
BrickStatus mState = kPASSIVE;
504504
BrickMode mMode = kUNSELECTED;
505505

506-
ClassDef(SpecialCutBrick, 1);
506+
ClassDefOverride(SpecialCutBrick, 1);
507507
};
508508

509509
class TrackSelectionBrick : public SpecialCutBrick
@@ -626,7 +626,7 @@ class TrackSelectionBrick : public SpecialCutBrick
626626
// vector of ITS requirements (minNRequiredHits in specific requiredLayers)
627627
std::vector<std::pair<int8_t, std::set<uint8_t>>> mRequiredITSHits{};
628628

629-
ClassDef(TrackSelectionBrick, 1);
629+
ClassDefOverride(TrackSelectionBrick, 1);
630630
};
631631

632632
} // namespace PWGCF

0 commit comments

Comments
 (0)