Skip to content

Commit

Permalink
Merge branch 'AliceO2Group:master' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
abylinkin authored Mar 17, 2024
2 parents cfbc80f + feb3f31 commit 7983d52
Show file tree
Hide file tree
Showing 114 changed files with 4,366 additions and 3,951 deletions.
5 changes: 5 additions & 0 deletions Common/DataModel/Multiplicity.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ DECLARE_SOA_COLUMN(MultNTracksTPCOnly, multNTracksTPCOnly, int); //!
DECLARE_SOA_COLUMN(MultNTracksITSTPC, multNTracksITSTPC, int); //!
DECLARE_SOA_COLUMN(MultAllTracksTPCOnly, multAllTracksTPCOnly, int); //!
DECLARE_SOA_COLUMN(MultAllTracksITSTPC, multAllTracksITSTPC, int); //!
DECLARE_SOA_COLUMN(MultNTracksGlobal, multNTracksGlobal, int); //!

DECLARE_SOA_COLUMN(BCNumber, bcNumber, int); //!

Expand Down Expand Up @@ -107,6 +108,10 @@ DECLARE_SOA_TABLE(MultsExtra, "AOD", "MULTEXTRA", //!
mult::MultNTracksITSOnly, mult::MultNTracksTPCOnly, mult::MultNTracksITSTPC,
mult::MultAllTracksTPCOnly, mult::MultAllTracksITSTPC,
mult::BCNumber);

// for QA purposes
DECLARE_SOA_TABLE(MultsGlobal, "AOD", "MULTGLOBAL", //! counters that use Track Selection (optional)
mult::MultNTracksGlobal);
DECLARE_SOA_TABLE(MultSelections, "AOD", "MULTSELECTIONS", //!
evsel::Selection); // for derived data / QA studies
using MultExtra = MultsExtra::iterator;
Expand Down
1 change: 1 addition & 0 deletions Common/TableProducer/mcCollsExtra.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ struct mcCollisionExtra {
if (biggestNContribs < collision.numContrib()) {
biggestNContribs = collision.numContrib();
bestCollisionIndex = collision.globalIndex();
bestCollisionCentFT0C = collision.centFT0C();
}
}
mcCollsExtra(collisions.size(), bestCollisionIndex, bestCollisionCentFT0C);
Expand Down
19 changes: 19 additions & 0 deletions Common/TableProducer/multiplicityTable.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "iostream"
#include "Framework/ASoAHelpers.h"
#include "Framework/O2DatabasePDGPlugin.h"
#include "Common/DataModel/TrackSelectionTables.h"

using namespace o2;
using namespace o2::framework;
Expand Down Expand Up @@ -64,6 +65,7 @@ struct MultiplicityTableTaskIndexed {
Produces<aod::MultSelections> multSelections;
Produces<aod::MultZeqs> tableMultZeq;
Produces<aod::MultsExtraMC> tableExtraMc;
Produces<aod::MultsGlobal> multsGlobal;

// For vertex-Z corrections in calibration
Service<o2::ccdb::BasicCCDBManager> ccdb;
Expand Down Expand Up @@ -549,8 +551,25 @@ struct MultiplicityTableTaskIndexed {
tableExtraMc(multFT0A, multFT0C, multBarrelEta05, multBarrelEta08, multBarrelEta10);
}

void processGlobalTrackingCounters(aod::Collision const& collisions,
soa::Join<Run3Tracks, aod::TrackSelection,
aod::TrackSelectionExtension> const& tracks)
{
// counter from Igor
int nGlobalTracks = 0;
for (auto& track : tracks) {
if (fabs(track.eta()) < 0.8 && track.tpcNClsFound() >= 80 && track.tpcNClsCrossedRows() >= 100) {
if (track.isGlobalTrack()) {
nGlobalTracks++;
}
}
}
multsGlobal(nGlobalTracks);
}

PROCESS_SWITCH(MultiplicityTableTaskIndexed, processRun2, "Produce Run 2 multiplicity tables", false);
PROCESS_SWITCH(MultiplicityTableTaskIndexed, processRun3, "Produce Run 3 multiplicity tables", true);
PROCESS_SWITCH(MultiplicityTableTaskIndexed, processGlobalTrackingCounters, "Produce Run 3 global counters", false);
PROCESS_SWITCH(MultiplicityTableTaskIndexed, processMC, "Produce MC multiplicity tables", false);
};

Expand Down
138 changes: 94 additions & 44 deletions DPG/Tasks/AOTEvent/eventSelectionQa.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
// granted to it by virtue of its status as an Intergovernmental Organization
// or submit itself to any jurisdiction.

#include "map"

#include "Framework/runDataProcessing.h"
#include "Framework/AnalysisTask.h"
#include "Framework/AnalysisDataModel.h"
Expand Down Expand Up @@ -38,7 +40,6 @@ struct EventSelectionQaTask {
Configurable<int> nOrbitsConf{"nOrbits", 10000, "number of orbits"};
Configurable<int> refBC{"refBC", 1238, "reference bc"};
Configurable<bool> isLowFlux{"isLowFlux", 1, "1 - low flux (pp, pPb), 0 - high flux (PbPb)"};
Configurable<bool> flagMonitorBcInTF{"flagMonitorBcInTF", 1, "0 - no, 1 - yes"};

uint64_t minGlobalBC = 0;
Service<o2::ccdb::BasicCCDBManager> ccdb;
Expand Down Expand Up @@ -263,12 +264,6 @@ struct EventSelectionQaTask {
histos.add("hMultT0MVsNcontribAcc", "", kTH2F, {axisMultT0M, axisNcontrib}); // before ITS RO Frame border cut
histos.add("hMultT0MVsNcontribCut", "", kTH2F, {axisMultT0M, axisNcontrib}); // after ITS RO Frame border cut

if (flagMonitorBcInTF) {
AxisSpec axisBCinTF{128 * nBCsPerOrbit + 1 + 10, -0.5, 128 * nBCsPerOrbit + 0.5 + 10, "bc in TF"};
histos.add("hNcontribVsBcInTF", ";bc in TF; n vertex contributors", kTH1F, {axisBCinTF});
histos.add("hNcontribAfterCutsVsBcInTF", ";bc in TF; n vertex contributors", kTH1F, {axisBCinTF});
}

// MC histograms
histos.add("hGlobalBcColMC", "", kTH1F, {axisGlobalBCs});
histos.add("hBcColMC", "", kTH1F, {axisBCs});
Expand Down Expand Up @@ -405,18 +400,11 @@ struct EventSelectionQaTask {
auto trackletsGrouped = tracklets->sliceByCached(aod::track::collisionId, col.globalIndex(), cache);
int nTracklets = trackletsGrouped.size();

float multT0A = 0;
float multT0C = 0;
float multFDA = 0;
float multFDC = 0;
if (bc.has_ft0()) {
for (auto amplitude : bc.ft0().amplitudeA()) {
multT0A += amplitude;
}
for (auto amplitude : bc.ft0().amplitudeC()) {
multT0C += amplitude;
}
}
float multT0A = bc.has_ft0() ? bc.ft0().sumAmpA() : -999.f;
float multT0C = bc.has_ft0() ? bc.ft0().sumAmpC() : -999.f;

if (bc.has_fdd()) {
for (auto amplitude : bc.fdd().chargeA()) {
multFDA += amplitude;
Expand Down Expand Up @@ -545,37 +533,105 @@ struct EventSelectionQaTask {
tsSOR = grpecs->getTimeStart(); // ms
tsEOR = grpecs->getTimeEnd(); // ms

// Temporary workaround for 22q (due to ZDC bc shifts)
// o2::ccdb::CcdbApi ccdb_api;
// ccdb_api.init("http://alice-ccdb.cern.ch");
// std::map<string, string> metadataRCT, headers;
// headers = ccdb_api.retrieveHeaders(Form("RCT/Info/RunInformation/%i", runNumber), metadataRCT, -1);
// tsSOR = atol(headers["SOR"].c_str());
// tsEOR = atol(headers["EOR"].c_str());
// uint32_t nOrbitsPerTF = 128;
LOGP(info, "nOrbitsPerTF={} tsSOR={} ms tsEOR={} ms", nOrbitsPerTF, tsSOR, tsEOR);

// calculate SOR and EOR orbits
int64_t orbitSOR = (tsSOR * 1000 - tsOrbitReset) / o2::constants::lhc::LHCOrbitMUS;
int64_t orbitEOR = (tsEOR * 1000 - tsOrbitReset) / o2::constants::lhc::LHCOrbitMUS;

// temporary map of TF start orbit shifts (affected all runs < LHC22o)
std::map<int, int> mapOrbitShift;
mapOrbitShift[517619] = 109;
mapOrbitShift[517620] = 109;
mapOrbitShift[517623] = 109;
mapOrbitShift[517677] = 127;
mapOrbitShift[517678] = 127;
mapOrbitShift[517679] = 127;
mapOrbitShift[517685] = 127;
mapOrbitShift[517690] = 127;
mapOrbitShift[517693] = 127;
mapOrbitShift[517737] = 127;
mapOrbitShift[517748] = 127;
mapOrbitShift[517751] = 127;
mapOrbitShift[517753] = 127;
mapOrbitShift[517758] = 127;
mapOrbitShift[517767] = 127;
mapOrbitShift[518541] = 40;
mapOrbitShift[518543] = 92;
mapOrbitShift[518546] = 124;
mapOrbitShift[518547] = 47;
mapOrbitShift[519041] = 59;
mapOrbitShift[519043] = 59;
mapOrbitShift[519045] = 59;
mapOrbitShift[519497] = 86;
mapOrbitShift[519498] = 86;
mapOrbitShift[519499] = 86;
mapOrbitShift[519502] = 86;
mapOrbitShift[519503] = 86;
mapOrbitShift[519504] = 86;
mapOrbitShift[519506] = 86;
mapOrbitShift[519507] = 86;
mapOrbitShift[519903] = 62;
mapOrbitShift[519904] = 62;
mapOrbitShift[519905] = 62;
mapOrbitShift[519906] = 62;
mapOrbitShift[520259] = 76;
mapOrbitShift[520294] = 76;
mapOrbitShift[520471] = 46;
mapOrbitShift[520472] = 46;
mapOrbitShift[520473] = 46;
mapOrbitShift[523142] = 127;
mapOrbitShift[523148] = 127;
mapOrbitShift[523182] = 127;
mapOrbitShift[523186] = 127;
mapOrbitShift[523298] = 28;
mapOrbitShift[523306] = 28;
mapOrbitShift[523308] = 28;
mapOrbitShift[523309] = 28;
mapOrbitShift[523397] = 110;
mapOrbitShift[523399] = 110;
mapOrbitShift[523401] = 110;
mapOrbitShift[523441] = 117;
mapOrbitShift[523541] = 103;
mapOrbitShift[523559] = 103;
mapOrbitShift[523669] = 39;
mapOrbitShift[523671] = 39;
mapOrbitShift[523677] = 39;
mapOrbitShift[523728] = 113;
mapOrbitShift[523731] = 113;
mapOrbitShift[523779] = 41;
mapOrbitShift[523783] = 41;
mapOrbitShift[523786] = 41;
mapOrbitShift[523788] = 41;
mapOrbitShift[523789] = 41;
mapOrbitShift[523792] = 41;
mapOrbitShift[523797] = 41;
mapOrbitShift[523821] = 36;
mapOrbitShift[523897] = 38;

int orbitShift = 0;
if (auto search = mapOrbitShift.find(runNumber); search != mapOrbitShift.end()) {
orbitShift = search->second;
}

// adjust to the nearest TF edge
orbitSOR = orbitSOR / nOrbitsPerTF * nOrbitsPerTF; // was with - 1;
orbitEOR = orbitEOR / nOrbitsPerTF * nOrbitsPerTF; // was with - 1;
orbitSOR = orbitSOR / nOrbitsPerTF * nOrbitsPerTF + orbitShift;
orbitEOR = orbitEOR / nOrbitsPerTF * nOrbitsPerTF + orbitShift;

// set nOrbits and minOrbit used for orbit-axis binning
nOrbits = orbitEOR - orbitSOR;
minOrbit = orbitSOR;

// first bc of the first orbit (should coincide with TF start)
bcSOR = orbitSOR * nBCsPerOrbit;

// duration of TF in bcs
nBCsPerTF = nOrbitsPerTF * nBCsPerOrbit;
}

// create orbit-axis histograms on the fly with binning based on info from GRP if GRP is available
// otherwise default minOrbit and nOrbits will be used
const AxisSpec axisOrbits{nOrbits / static_cast<int>(nOrbitsPerTF) /*128*/, 0., static_cast<double>(nOrbits), ""};
const AxisSpec axisOrbits{static_cast<int>(nOrbits / nOrbitsPerTF), 0., static_cast<double>(nOrbits), ""};
histos.add("hOrbitAll", "", kTH1F, {axisOrbits});
histos.add("hOrbitCol", "", kTH1F, {axisOrbits});
histos.add("hOrbitAcc", "", kTH1F, {axisOrbits});
Expand All @@ -586,6 +642,10 @@ struct EventSelectionQaTask {
histos.add("hOrbitZDC", "", kTH1F, {axisOrbits});
histos.add("hOrbitColMC", "", kTH1F, {axisOrbits});

const AxisSpec axisBCinTF{static_cast<int>(nBCsPerTF), 0, static_cast<double>(nBCsPerTF), "bc in TF"};
histos.add("hNcontribVsBcInTF", ";bc in TF; n vertex contributors", kTH1F, {axisBCinTF});
histos.add("hNcontribAfterCutsVsBcInTF", ";bc in TF; n vertex contributors", kTH1F, {axisBCinTF});

double minSec = floor(tsSOR / 1000.);
double maxSec = ceil(tsEOR / 1000.);
const AxisSpec axisSeconds{static_cast<int>(maxSec - minSec), minSec, maxSec, "seconds"};
Expand Down Expand Up @@ -992,12 +1052,9 @@ struct EventSelectionQaTask {

histos.fill(HIST("hNcontribCol"), nContributors);

// monitor nContributors vs bc in timeframe:
if (flagMonitorBcInTF) {
int64_t bcInTF = (globalBC - bcSOR) % nBCsPerTF;
histos.fill(HIST("hNcontribVsBcInTF"), bcInTF, nContributors);
histos.fill(HIST("hNcontribAfterCutsVsBcInTF"), bcInTF, nContributorsAfterEtaTPCCuts);
}
int64_t bcInTF = (globalBC - bcSOR) % nBCsPerTF;
histos.fill(HIST("hNcontribVsBcInTF"), bcInTF, nContributors);
histos.fill(HIST("hNcontribAfterCutsVsBcInTF"), bcInTF, nContributorsAfterEtaTPCCuts);

const auto& foundBC = col.foundBC_as<BCsRun3>();

Expand All @@ -1021,16 +1078,9 @@ struct EventSelectionQaTask {
histos.fill(HIST("hTimeZACcol"), znDif, znSum);

// FT0
float multT0A = 0;
float multT0C = 0;
if (foundBC.has_ft0()) {
for (auto amplitude : foundBC.ft0().amplitudeA()) {
multT0A += amplitude;
}
for (auto amplitude : foundBC.ft0().amplitudeC()) {
multT0C += amplitude;
}
}
float multT0A = foundBC.has_ft0() ? foundBC.ft0().sumAmpA() : -999.f;
float multT0C = foundBC.has_ft0() ? foundBC.ft0().sumAmpC() : -999.f;

// FV0
float multV0A = 0;
if (foundBC.has_fv0a()) {
Expand Down
Loading

0 comments on commit 7983d52

Please sign in to comment.