Skip to content

Commit a9caa8b

Browse files
Merge branch 'AliceO2Group:master' into master
2 parents 9e6a154 + f43b7d8 commit a9caa8b

31 files changed

Lines changed: 2608 additions & 1850 deletions

Common/Tasks/qVectorsCorrection.cxx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,10 +202,8 @@ struct qVectorsCorrection {
202202
{
203203
histosQA.fill(HIST("histCentFull"), qVec.cent());
204204
if (cfgAddEvtSel && (!qVec.sel8() ||
205-
!qVec.selection_bit(aod::evsel::kNoTimeFrameBorder) ||
206-
!qVec.selection_bit(aod::evsel::kNoTimeFrameBorder) ||
207-
!qVec.selection_bit(aod::evsel::kNoITSROFrameBorder) ||
208-
!qVec.selection_bit(aod::evsel::kNoITSROFrameBorder))) {
205+
!qVec.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV) ||
206+
!qVec.selection_bit(aod::evsel::kNoSameBunchPileup))) {
209207
return;
210208
}
211209
fillHistosQvec(qVec);

DPG/Tasks/AOTTrack/PID/qaPIDTOFEvTime.cxx

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -195,13 +195,19 @@ struct tofPidCollisionTimeQa {
195195
makeEfficiency("effTOFT0ACEvTime", "Efficiency of the TOF+T0AC Event Time");
196196
makeEfficiency("effT0AEvTime", "Efficiency of the T0A Event Time");
197197
makeEfficiency("effT0CEvTime", "Efficiency of the T0C Event Time");
198+
199+
if (!doprocessMC) {
200+
return;
201+
}
202+
histos.add("MC/t", "", HistType::kTH1F, {{1000, -1000, 1000, "MC time"}});
198203
}
199204

200-
using Trks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TOFSignal, aod::TOFEvTime, aod::pidEvTimeFlags, aod::pidTOFbeta, aod::pidTOFmass, aod::EvTimeTOFOnly, aod::TrackSelection>;
205+
using Trks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TOFSignal, aod::TOFEvTime, aod::EvTimeTOFOnly, aod::pidEvTimeFlags,
206+
aod::pidTOFbeta, aod::pidTOFmass, aod::EvTimeTOFOnly, aod::TrackSelection>;
201207
using EvTimeCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::FT0sCorrected>;
202208
// Define slice per collision
203209
Preslice<Trks> perCollision = aod::track::collisionId;
204-
void process(Trks const& tracks, EvTimeCollisions const&)
210+
void processData(Trks const& tracks, EvTimeCollisions const&)
205211
{
206212
static int ncolls = 0;
207213
int lastCollisionId = -1; // Last collision ID analysed
@@ -211,7 +217,6 @@ struct tofPidCollisionTimeQa {
211217
} else if (t.collisionId() == lastCollisionId) { // Event was already processed
212218
continue;
213219
}
214-
// Create new table for the tracks in a collision
215220
lastCollisionId = t.collisionId(); /// Cache last collision ID
216221
auto collision = t.collision_as<EvTimeCollisions>();
217222

@@ -402,9 +407,35 @@ struct tofPidCollisionTimeQa {
402407
static_cast<TEfficiency*>(listEfficiency->FindObject("effTOFT0ACEvTime"))->Fill(t.isEvTimeTOF() && collision.has_foundFT0() && collision.t0ACorrectedValid(), nTracksWithTOF);
403408
}
404409
}
410+
PROCESS_SWITCH(tofPidCollisionTimeQa, processData, "Process data", true);
411+
412+
using TrksMC = soa::Join<Trks, aod::McTrackLabels>;
413+
using EvTimeCollisionsMC = soa::Join<EvTimeCollisions, aod::McCollisionLabels>;
414+
void processMC(TrksMC const& tracks,
415+
EvTimeCollisionsMC const&,
416+
aod::McParticles const&,
417+
aod::BCs const&,
418+
aod::McCollisions const&)
419+
{
420+
// static int ncolls = 0;
421+
int lastCollisionId = -1; // Last collision ID analysed
422+
423+
for (auto& t : tracks) {
424+
if (!t.has_collision()) { // Track was not assigned to a collision
425+
continue;
426+
} else if (t.collisionId() == lastCollisionId) { // Event was already processed
427+
continue;
428+
}
429+
lastCollisionId = t.collisionId(); /// Cache last collision ID
430+
const auto& collision = t.collision_as<EvTimeCollisionsMC>();
431+
if (!collision.has_mcCollision()) {
432+
continue;
433+
}
434+
const auto& collisionMC = collision.mcCollision_as<aod::McCollisions>();
435+
histos.fill(HIST("MC/t"), collisionMC.t());
436+
}
437+
}
438+
PROCESS_SWITCH(tofPidCollisionTimeQa, processMC, "Process MC", true);
405439
};
406440

407-
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
408-
{
409-
return WorkflowSpec{adaptAnalysisTask<tofPidCollisionTimeQa>(cfgc)};
410-
}
441+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) { return WorkflowSpec{adaptAnalysisTask<tofPidCollisionTimeQa>(cfgc)}; }

EventFiltering/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@ o2physics_add_dpl_workflow(cf-filter-qa
6262
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
6363
COMPONENT_NAME Analysis)
6464

65+
o2physics_add_dpl_workflow(cf-filter-ppphi
66+
SOURCES PWGCF/CFFilterPPPhi.cxx
67+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore
68+
COMPONENT_NAME Analysis)
69+
6570
o2physics_add_dpl_workflow(je-filter
6671
SOURCES PWGJE/jetFilter.cxx
6772
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2Physics::PWGJECore FastJet::FastJet FastJet::Contrib

EventFiltering/PWGCF/CFFilterPPPhi.cxx

Lines changed: 555 additions & 0 deletions
Large diffs are not rendered by default.

PWGCF/Flow/Tasks/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ o2physics_add_dpl_workflow(flow-pt-efficiency
1616

1717
o2physics_add_dpl_workflow(flow-pbpb-task
1818
SOURCES FlowPbPbTask.cxx
19-
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::GFWCore
19+
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::AnalysisCore O2Physics::AnalysisCCDB O2Physics::GFWCore
2020
COMPONENT_NAME Analysis)
2121

2222
o2physics_add_dpl_workflow(flow-gfw-pbpb

PWGCF/Flow/Tasks/FlowPbPbTask.cxx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "Common/DataModel/TrackSelectionTables.h"
2828
#include "Common/DataModel/Centrality.h"
2929
#include "Common/DataModel/Multiplicity.h"
30+
#include "Common/CCDB/ctpRateFetcher.h"
3031

3132
#include "GFWPowerArray.h"
3233
#include "GFW.h"
@@ -56,6 +57,8 @@ struct FlowPbPbTask {
5657
O2_DEFINE_CONFIGURABLE(cfgCutTPCclu, float, 70.0f, "minimum TPC clusters")
5758
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalEventCut, bool, false, "Use additional event cut on mult correlations")
5859
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalTrackCut, bool, false, "Use additional track cut on phi")
60+
O2_DEFINE_CONFIGURABLE(cfgUseInteractionRateCut, bool, false, "Use events with low interaction rate")
61+
O2_DEFINE_CONFIGURABLE(cfgCutIR, float, 50.0, "maximum interaction rate (kHz)")
5962
O2_DEFINE_CONFIGURABLE(cfgUseNch, bool, false, "Use Nch for flow observables")
6063
O2_DEFINE_CONFIGURABLE(cfgNbootstrap, int, 10, "Number of subsamples")
6164
O2_DEFINE_CONFIGURABLE(cfgOutputNUAWeights, bool, false, "Fill and output NUA weights")
@@ -112,6 +115,12 @@ struct FlowPbPbTask {
112115
// Count the total number of enum
113116
kCount_ExtraProfile
114117
};
118+
int mRunNumber{-1};
119+
uint64_t mSOR{0};
120+
double mMinSeconds{-1.};
121+
std::unordered_map<int, TH2*> gHadronicRate;
122+
ctpRateFetcher mRateFetcher;
123+
TH2* gCurrentHadronicRate;
115124

116125
using aodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::Mults>>;
117126
using aodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA>>;
@@ -517,6 +526,23 @@ struct FlowPbPbTask {
517526
return true;
518527
}
519528

529+
void initHadronicRate(aod::BCsWithTimestamps::iterator const& bc)
530+
{
531+
if (mRunNumber == bc.runNumber()) {
532+
return;
533+
}
534+
mRunNumber = bc.runNumber();
535+
if (gHadronicRate.find(mRunNumber) == gHadronicRate.end()) {
536+
auto runDuration = ccdb->getRunDuration(mRunNumber);
537+
mSOR = runDuration.first;
538+
mMinSeconds = std::floor(mSOR * 1.e-3); /// round tsSOR to the highest integer lower than tsSOR
539+
double maxSec = std::ceil(runDuration.second * 1.e-3); /// round tsEOR to the lowest integer higher than tsEOR
540+
const AxisSpec axisSeconds{static_cast<int>((maxSec - mMinSeconds) / 20.f), 0, maxSec - mMinSeconds, "Seconds since SOR"};
541+
gHadronicRate[mRunNumber] = registry.add<TH2>(Form("HadronicRate/%i", mRunNumber), ";Time since SOR (s);Hadronic rate (kHz)", kTH2D, {axisSeconds, {510, 0., 51.}}).get();
542+
}
543+
gCurrentHadronicRate = gHadronicRate[mRunNumber];
544+
}
545+
520546
void process(aodCollisions::iterator const& collision, aod::BCsWithTimestamps const&, aodTracks const& tracks)
521547
{
522548
registry.fill(HIST("hEventCount"), 0.5);
@@ -545,6 +571,12 @@ struct FlowPbPbTask {
545571
registry.fill(HIST("hCent"), collision.centFT0C());
546572
fGFW->Clear();
547573
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
574+
initHadronicRate(bc);
575+
double hadronicRate = mRateFetcher.fetch(ccdb.service, bc.timestamp(), mRunNumber, "ZNC hadronic") * 1.e-3; //
576+
double seconds = bc.timestamp() * 1.e-3 - mMinSeconds;
577+
if (cfgUseInteractionRateCut && hadronicRate > cfgCutIR) // cut on hadronic rate
578+
return;
579+
gCurrentHadronicRate->Fill(seconds, hadronicRate);
548580
loadCorrections(bc.timestamp());
549581
registry.fill(HIST("hEventCount"), 4.5);
550582

PWGCF/TableProducer/filterCorrelations.cxx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ struct FilterCF {
5959
O2_DEFINE_CONFIGURABLE(cfgCutMCPt, float, 0.5f, "Minimal pT for particles")
6060
O2_DEFINE_CONFIGURABLE(cfgCutMCEta, float, 0.8f, "Eta range for particles")
6161
O2_DEFINE_CONFIGURABLE(cfgVerbosity, int, 1, "Verbosity level (0 = major, 1 = per collision)")
62-
O2_DEFINE_CONFIGURABLE(cfgTrigger, int, 7, "Trigger choice: (0 = none, 7 = sel7, 8 = sel8)")
62+
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)")
6363
O2_DEFINE_CONFIGURABLE(cfgCollisionFlags, uint16_t, aod::collision::CollisionFlagsRun2::Run2VertexerTracks, "Request collision flags if non-zero (0 = off, 1 = Run2VertexerTracks)")
6464
O2_DEFINE_CONFIGURABLE(cfgTransientTables, bool, false, "Output transient tables for collision and track IDs")
6565
O2_DEFINE_CONFIGURABLE(cfgTrackSelection, int, 0, "Type of track selection (0 = Run 2/3 without systematics | 1 = Run 3 with systematics)")
@@ -98,6 +98,12 @@ struct FilterCF {
9898
return collision.alias_bit(kINT7) && collision.sel7();
9999
} else if (cfgTrigger == 8) {
100100
return collision.sel8();
101+
} else if (cfgTrigger == 9) { // relevant only for Pb-Pb
102+
return collision.sel8() && collision.selection_bit(aod::evsel::kNoSameBunchPileup) && collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV);
103+
} else if (cfgTrigger == 10) { // TVX trigger only (sel8 selection before April, 2024)
104+
return collision.selection_bit(aod::evsel::kIsTriggerTVX);
105+
} else if (cfgTrigger == 11) { // sel8 selection for MC
106+
return collision.selection_bit(aod::evsel::kIsTriggerTVX) && collision.selection_bit(aod::evsel::kNoTimeFrameBorder);
101107
}
102108
return false;
103109
}

PWGCF/Tasks/correlations.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ struct CorrelationTask {
7272
O2_DEFINE_CONFIGURABLE(cfgTwoTrackCutMinRadius, float, 0.8f, "Two track cut: radius in m from which two track cuts are applied");
7373
O2_DEFINE_CONFIGURABLE(cfgLocalEfficiency, int, 0, "0 = OFF and 1 = ON for local efficiency");
7474
O2_DEFINE_CONFIGURABLE(cfgCentBinsForMC, int, 0, "0 = OFF and 1 = ON for data like multiplicity/centrality bins for MC steps");
75-
75+
O2_DEFINE_CONFIGURABLE(cfgTrackBitMask, uint8_t, 0, "BitMask for track selection systematics; refer to the enum TrackSelectionCuts in filtering task");
7676
// Suggested values: Photon: 0.004; K0 and Lambda: 0.005
7777
Configurable<LabeledArray<float>> cfgPairCut{"cfgPairCut", {cfgPairCutDefaults[0], 5, {"Photon", "K0", "Lambda", "Phi", "Rho"}}, "Pair cuts on various particles"};
7878

@@ -107,7 +107,7 @@ struct CorrelationTask {
107107

108108
// Track filters
109109
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPt) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t) true));
110-
Filter cfTrackFilter = (nabs(aod::cftrack::eta) < cfgCutEta) && (aod::cftrack::pt > cfgCutPt);
110+
Filter cfTrackFilter = (nabs(aod::cftrack::eta) < cfgCutEta) && (aod::cftrack::pt > cfgCutPt) && ((aod::track::trackType & (uint8_t)cfgTrackBitMask) == (uint8_t)cfgTrackBitMask);
111111

112112
// MC filters
113113
Filter cfMCCollisionFilter = nabs(aod::mccollision::posZ) < cfgCutVertex;

PWGDQ/Core/MixingLibrary.cxx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ void o2::aod::dqmixing::SetUpMixing(MixingHandler* mh, const char* mixingVarible
7676
std::vector<float> fZLimsHashing = {-10.0f, -7.5f, -5.0f, -2.5f, 0.0f, 2.5f, 5.0f, 7.5f, 10.0f};
7777
mh->AddMixingVariable(VarManager::kVtxZ, fZLimsHashing.size(), fZLimsHashing);
7878
}
79+
if (!nameStr.compare("Vtx4")) {
80+
std::vector<float> fZLimsHashing = {-10.0f, -9.0f, -8.0f, -7.0f, -6.0f, -5.0f, -4.0f, -3.0f, -2.0f, -1.0f, 0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f};
81+
mh->AddMixingVariable(VarManager::kVtxZ, fZLimsHashing.size(), fZLimsHashing);
82+
}
7983
if (!nameStr.compare("Psi2A1")) {
8084
std::vector<float> fPsi2A = {-TMath::Pi() / 2., 0.0f, TMath::Pi() / 2.};
8185
mh->AddMixingVariable(VarManager::kPsi2A, fPsi2A.size(), fPsi2A);

PWGDQ/TableProducer/tableMakerMC.cxx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ struct TableMakerMC {
227227
bool enableBarrelHistos = (context.mOptions.get<bool>("processFull") || context.mOptions.get<bool>("processFullWithCov") ||
228228
context.mOptions.get<bool>("processBarrelOnly") || context.mOptions.get<bool>("processBarrelOnlyWithDalitzBits") ||
229229
context.mOptions.get<bool>("processBarrelOnlyWithCent") || context.mOptions.get<bool>("processBarrelOnlyWithCov") ||
230+
context.mOptions.get<bool>("processBarrelOnlyWithCovWithCentAndMults") ||
230231
context.mOptions.get<bool>("processBarrelOnlyWithMults") || context.mOptions.get<bool>("processAmbiguousBarrelOnly"));
231232
bool enableMuonHistos = (context.mOptions.get<bool>("processFull") || context.mOptions.get<bool>("processFullWithCov") ||
232233
context.mOptions.get<bool>("processMuonOnlyWithCent") || context.mOptions.get<bool>("processMuonOnlyWithCov") ||
@@ -434,7 +435,7 @@ struct TableMakerMC {
434435

435436
event(tag, bc.runNumber(), collision.posX(), collision.posY(), collision.posZ(), collision.numContrib(), collision.collisionTime(), collision.collisionTimeRes());
436437
if constexpr ((TEventFillMap & VarManager::ObjTypes::CollisionMult) > 0 && (TEventFillMap & VarManager::ObjTypes::CollisionCent) > 0) {
437-
eventExtended(collision.bc().globalBC(), collision.bc().triggerMask(), 0, triggerAliases, VarManager::fgValues[VarManager::kCentVZERO],
438+
eventExtended(bc.globalBC(), bc.triggerMask(), bc.timestamp(), triggerAliases, VarManager::fgValues[VarManager::kCentVZERO],
438439
collision.multTPC(), collision.multFV0A(), collision.multFV0C(), collision.multFT0A(), collision.multFT0C(),
439440
collision.multFDDA(), collision.multFDDC(), collision.multZNA(), collision.multZNC(), collision.multTracklets(), collision.multNTracksPV(),
440441
collision.centFT0C());
@@ -1561,6 +1562,14 @@ struct TableMakerMC {
15611562
fullSkimming<gkEventFillMapWithMults, gkTrackFillMapWithCov, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
15621563
}
15631564

1565+
// Produce barrel only tables, with centrality, multiplicity and cov matrix -------------------------------------------------------------------
1566+
void processBarrelOnlyWithCovWithCentAndMults(MyEventsWithCentAndMults const& collisions, aod::BCsWithTimestamps const& bcs,
1567+
soa::Filtered<MyBarrelTracksWithCov> const& tracksBarrel,
1568+
aod::McCollisions const& mcEvents, aod::McParticles_001 const& mcTracks)
1569+
{
1570+
fullSkimming<gkEventFillMapWithCentAndMults, gkTrackFillMapWithCov, 0u>(collisions, bcs, tracksBarrel, nullptr, mcEvents, mcTracks, nullptr, nullptr);
1571+
}
1572+
15641573
// Produce barrel only tables, with cov matrix and dalitz bits-----------------------------------------------------------------------
15651574
void processBarrelOnlyWithDalitzBits(MyEvents const& collisions, aod::BCsWithTimestamps const& bcs,
15661575
soa::Filtered<MyBarrelTracksWithDalitzBits> const& tracksBarrel,
@@ -1658,6 +1667,7 @@ struct TableMakerMC {
16581667
PROCESS_SWITCH(TableMakerMC, processBarrelOnlyWithCent, "Produce barrel skims, w/ centrality", false);
16591668
PROCESS_SWITCH(TableMakerMC, processBarrelOnlyWithCentAndMults, "Produce barrel skims, w/ centrality and mults", false);
16601669
PROCESS_SWITCH(TableMakerMC, processBarrelOnlyWithCov, "Produce barrel skims, with track covariance matrix", false);
1670+
PROCESS_SWITCH(TableMakerMC, processBarrelOnlyWithCovWithCentAndMults, "Produce barrel skims, w/ centrality and mults, with track covariance matrix", false);
16611671
PROCESS_SWITCH(TableMakerMC, processBarrelOnlyWithDalitzBits, "Produce barrel skims, and dalitz bits", false);
16621672
PROCESS_SWITCH(TableMakerMC, processMuonOnly, "Produce muon skims", false);
16631673
PROCESS_SWITCH(TableMakerMC, processMuonOnlyWithCov, "Produce muon skims, with muon covariance matrix", false);

0 commit comments

Comments
 (0)