Skip to content

Commit 3ca859e

Browse files
author
Ionut Cristian Arsene
committed
Adding time frame wise VarManager quantities and histograms
1 parent aa6dd14 commit 3ca859e

File tree

4 files changed

+74
-70
lines changed

4 files changed

+74
-70
lines changed

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,14 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
3333
groupStr.ToLower();
3434
TString subGroupStr = subGroupName;
3535
subGroupStr.ToLower();
36+
if (groupStr.Contains("timeframe")) {
37+
hm->AddHistogram(histClass, "TF_NCollisions", "Number of collisions per TF", false, 1000, 0.0, 5000.0, VarManager::kTFNCollisions);
38+
hm->AddHistogram(histClass, "TF_NMCCollisions", "Number of MC collisions per TF", false, 1000, 0.0, 5000.0, VarManager::kTFNMCCollisions);
39+
hm->AddHistogram(histClass, "TF_NBCs", "Number of BCs per TF", false, 1000, 0.0, 50000.0, VarManager::kTFNBCs);
40+
hm->AddHistogram(histClass, "TF_NTracks", "Number of tracks per TF", false, 1000, 0.0, 200000.0, VarManager::kTFNTracks);
41+
hm->AddHistogram(histClass, "TF_NMuons", "Number of muons per TF", false, 1000, 0.0, 5000.0, VarManager::kTFNMuons);
42+
hm->AddHistogram(histClass, "TF_NMFTs", "Number of MFT tracks per TF", false, 1000, 0.0, 200000.0, VarManager::kTFNMFTs);
43+
}
3644
if (!groupStr.CompareTo("event")) {
3745
if (!subGroupStr.Contains("generator")) {
3846
hm->AddHistogram(histClass, "VtxZ", "Vtx Z", false, 60, -15.0, 15.0, VarManager::kVtxZ);

PWGDQ/Core/VarManager.cxx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,18 @@ void VarManager::SetDefaultVarNames()
369369

370370
fgVariableNames[kRunNo] = "Run number";
371371
fgVariableUnits[kRunNo] = "";
372+
fgVariableNames[kTFNBCs] = "Number of bunch crossings per TF";
373+
fgVariableUnits[kTFNBCs] = "";
374+
fgVariableNames[kTFNCollisions] = "Number of collisions per TF";
375+
fgVariableUnits[kTFNCollisions] = "";
376+
fgVariableNames[kTFNMCCollisions] = "Number of MC collisions per TF";
377+
fgVariableUnits[kTFNMCCollisions] = "";
378+
fgVariableNames[kTFNTracks] = "Number of tracks per TF";
379+
fgVariableUnits[kTFNTracks] = "";
380+
fgVariableNames[kTFNMuons] = "Number of muons per TF";
381+
fgVariableUnits[kTFNMuons] = "";
382+
fgVariableNames[kTFNMFTs] = "Number of MFT tracks per TF";
383+
fgVariableUnits[kTFNMFTs] = "";
372384
fgVariableNames[kBC] = "Bunch crossing";
373385
fgVariableUnits[kBC] = "";
374386
fgVariableNames[kTimeFromSOR] = "time since SOR";
@@ -1402,6 +1414,12 @@ void VarManager::SetDefaultVarNames()
14021414
// Set the variables short names map. This is needed for dynamic configuration via JSON files
14031415
fgVarNamesMap["kNothing"] = kNothing;
14041416
fgVarNamesMap["kRunNo"] = kRunNo;
1417+
fgVarNamesMap["kTFNBCs"] = kTFNBCs;
1418+
fgVarNamesMap["kTFNCollisions"] = kTFNCollisions;
1419+
fgVarNamesMap["kTFNMCCollisions"] = kTFNMCCollisions;
1420+
fgVarNamesMap["kTFNTracks"] = kTFNTracks;
1421+
fgVarNamesMap["kTFNMuons"] = kTFNMuons;
1422+
fgVarNamesMap["kTFNMFTs"] = kTFNMFTs;
14051423
fgVarNamesMap["kNRunWiseVariables"] = kNRunWiseVariables;
14061424
fgVarNamesMap["kTimestamp"] = kTimestamp;
14071425
fgVarNamesMap["kTimeFromSOR"] = kTimeFromSOR;

PWGDQ/Core/VarManager.h

Lines changed: 47 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -188,8 +188,17 @@ class VarManager : public TObject
188188
kRunNo = 0,
189189
kNRunWiseVariables,
190190

191+
// Timeframe wise variables
192+
kTFNBCs = kNRunWiseVariables,
193+
kTFNCollisions,
194+
kTFNMCCollisions,
195+
kTFNTracks,
196+
kTFNMuons,
197+
kTFNMFTs,
198+
kNTFWiseVariables,
199+
191200
// Event wise variables
192-
kTimestamp,
201+
kTimestamp = kNTFWiseVariables,
193202
kTimeFromSOR, // Time since Start of Run (SOR) in minutes
194203
kCollisionTime,
195204
kCollisionTimeRes,
@@ -442,7 +451,6 @@ class VarManager : public TObject
442451
kTwoR2SP2, // Scalar product resolution of event2 for ME technique
443452
kTwoR2EP1, // Event plane resolution of event2 for ME technique
444453
kTwoR2EP2, // Event plane resolution of event2 for ME technique
445-
kNEventWiseVariables,
446454

447455
// Variables for event mixing with cumulant
448456
kV22m,
@@ -453,9 +461,10 @@ class VarManager : public TObject
453461
kV24ME,
454462
kWV22ME,
455463
kWV24ME,
464+
kNEventWiseVariables,
456465

457466
// Basic track/muon/pair wise variables
458-
kX,
467+
kX = kNEventWiseVariables,
459468
kY,
460469
kZ,
461470
kPt,
@@ -571,7 +580,7 @@ class VarManager : public TObject
571580
kNBarrelTrackVariables,
572581

573582
// Muon track variables
574-
kMuonNClusters,
583+
kMuonNClusters = kNBarrelTrackVariables,
575584
kMuonPDca,
576585
kMuonRAtAbsorberEnd,
577586
kMCHBitMap,
@@ -1163,8 +1172,8 @@ class VarManager : public TObject
11631172
static void FillBC(T const& bc, float* values = nullptr);
11641173
template <uint32_t fillMap, typename T>
11651174
static void FillEvent(T const& event, float* values = nullptr);
1166-
template <uint32_t fillMap, typename TEvent, typename TAssoc, typename TTracks>
1167-
static void FillEventTrackEstimators(TEvent const& collision, TAssoc const& groupedTrackIndices, TTracks const& tracks, float* values = nullptr);
1175+
template <typename T>
1176+
static void FillTimeFrame(T const& tfTable, float* values = nullptr);
11681177
template <typename T>
11691178
static void FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values = nullptr);
11701179
template <typename T>
@@ -1364,7 +1373,7 @@ class VarManager : public TObject
13641373
VarManager& operator=(const VarManager& c);
13651374
VarManager(const VarManager& c);
13661375

1367-
ClassDef(VarManager, 4);
1376+
ClassDef(VarManager, 5);
13681377
};
13691378

13701379
template <typename T, typename C>
@@ -1633,6 +1642,32 @@ void VarManager::FillGlobalMuonRefitCov(T1 const& muontrack, T2 const& mfttrack,
16331642
}
16341643
}
16351644

1645+
template <typename T>
1646+
void VarManager::FillTimeFrame(T const& tf, float* values)
1647+
{
1648+
if (!values) {
1649+
values = fgValues;
1650+
}
1651+
if constexpr (T::template contains<o2::aod::BCs>()) {
1652+
values[kTFNBCs] = tf.size();
1653+
}
1654+
if constexpr (T::template contains<o2::aod::Collisions>()) {
1655+
values[kTFNCollisions] = tf.size();
1656+
}
1657+
if constexpr (T::template contains<o2::aod::McCollisions>()) {
1658+
values[kTFNMCCollisions] = tf.size();
1659+
}
1660+
if constexpr (T::template contains<o2::aod::Tracks>()) {
1661+
values[kTFNTracks] = tf.size();
1662+
}
1663+
if constexpr (T::template contains<o2::aod::FwdTracks>()) {
1664+
values[kTFNMuons] = tf.size();
1665+
}
1666+
if constexpr (T::template contains<o2::aod::MFTTracks>()) {
1667+
values[kTFNMFTs] = tf.size();
1668+
}
1669+
}
1670+
16361671
template <typename T>
16371672
void VarManager::FillBC(T const& bc, float* values)
16381673
{
@@ -2138,56 +2173,6 @@ void VarManager::FillEvent(T const& event, float* values)
21382173
// FillEventDerived(values);
21392174
}
21402175

2141-
template <uint32_t fillMap, typename TEvent, typename TAssoc, typename TTracks>
2142-
void VarManager::FillEventTrackEstimators(TEvent const& collision, TAssoc const& assocs, TTracks const& /*tracks*/, float* values)
2143-
{
2144-
// Compute median Z for the large dcaZ tracks in the TPC
2145-
// This is for studies of the pileup impact on the TPC
2146-
2147-
if (!values) {
2148-
values = fgValues;
2149-
}
2150-
2151-
if constexpr ((fillMap & Track) > 0 && (fillMap & TrackDCA) > 0) {
2152-
2153-
std::vector<float> tracksP;
2154-
std::vector<float> tracksM;
2155-
2156-
for (const auto& assoc : assocs) {
2157-
auto track = assoc.template track_as<TTracks>();
2158-
// compute the dca of this track wrt the collision
2159-
auto trackPar = getTrackPar(track);
2160-
std::array<float, 2> dca{1e10f, 1e10f};
2161-
trackPar.propagateParamToDCA({collision.posX(), collision.posY(), collision.posZ()}, fgMagField, &dca);
2162-
2163-
// if it is a displaced track longitudinally, add it to the track vector
2164-
if (abs(dca[0]) < 3.0 && abs(dca[1]) > 4.0) {
2165-
if (track.tgl() > 0.1) {
2166-
tracksP.push_back(track.z());
2167-
}
2168-
if (track.tgl() < -0.1) {
2169-
tracksM.push_back(track.z());
2170-
}
2171-
}
2172-
} // end loop over associations
2173-
2174-
// compute the number of pileup contributors and the median z for pileup
2175-
if (tracksP.size() > 0) {
2176-
std::sort(tracksP.begin(), tracksP.end());
2177-
auto midP = tracksP.size() / 2;
2178-
values[kNTPCpileupContribA] = tracksP.size();
2179-
values[kNTPCpileupZA] = (tracksP.size() % 2 ? (tracksP[midP] + tracksP[midP - 1]) / 2 : tracksP[midP]);
2180-
}
2181-
2182-
if (tracksM.size() > 0) {
2183-
std::sort(tracksM.begin(), tracksM.end());
2184-
values[kNTPCpileupContribC] = tracksM.size();
2185-
auto midM = tracksM.size() / 2;
2186-
values[kNTPCpileupZC] = (tracksM.size() % 2 ? (tracksM[midM] + tracksM[midM - 1]) / 2 : tracksM[midM]);
2187-
}
2188-
}
2189-
}
2190-
21912176
template <typename T>
21922177
void VarManager::FillEventFlowResoFactor(T const& hs_sp, T const& hs_ep, float* values)
21932178
{
@@ -2280,25 +2265,17 @@ void VarManager::FillTwoEvents(T const& ev1, T const& ev2, float* values)
22802265
if (!values) {
22812266
values = fgValues;
22822267
}
2283-
2268+
//if constexpr (T::template contains<o2::aod::Collision>()) {
22842269
values[kTwoEvPosZ1] = ev1.posZ();
22852270
values[kTwoEvPosZ2] = ev2.posZ();
22862271
values[kTwoEvPosR1] = std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY());
2287-
values[kTwoEvPosR2] = std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY());
2288-
values[kTwoEvPVcontrib1] = ev1.numContrib();
2289-
values[kTwoEvPVcontrib2] = ev2.numContrib();
2290-
if (ev1.numContrib() < ev2.numContrib()) {
2291-
values[kTwoEvPosZ1] = ev2.posZ();
2292-
values[kTwoEvPosZ2] = ev1.posZ();
2293-
values[kTwoEvPVcontrib1] = ev2.numContrib();
2294-
values[kTwoEvPVcontrib2] = ev1.numContrib();
2295-
values[kTwoEvPosR1] = std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY());
2296-
;
2297-
values[kTwoEvPosR2] = std::sqrt(ev1.posX() * ev1.posX() + ev1.posY() * ev1.posY());
2298-
}
2272+
values[kTwoEvPosR2] = std::sqrt(ev2.posX() * ev2.posX() + ev2.posY() * ev2.posY());
22992273
values[kTwoEvDeltaZ] = ev1.posZ() - ev2.posZ();
23002274
values[kTwoEvDeltaX] = ev1.posX() - ev2.posX();
23012275
values[kTwoEvDeltaY] = ev1.posY() - ev2.posY();
2276+
//}
2277+
values[kTwoEvPVcontrib1] = ev1.numContrib();
2278+
values[kTwoEvPVcontrib2] = ev2.numContrib();
23022279
values[kTwoEvDeltaR] = std::sqrt(values[kTwoEvDeltaX] * values[kTwoEvDeltaX] + values[kTwoEvDeltaY] * values[kTwoEvDeltaY]);
23032280
}
23042281

PWGDQ/TableProducer/tableMaker_withAssoc.cxx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -804,6 +804,7 @@ struct TableMaker {
804804
// NOTE: So far, collisions are filtered based on the user specified analysis cuts AND the filterPP or Zorro event filter.
805805
// The collision-track associations which point to an event that is not selected for writing are discarded!
806806

807+
VarManager::FillTimeFrame(collisions);
807808
fCollIndexMap.clear();
808809
int multTPC = -1.0;
809810
float multFV0A = -1.0;

0 commit comments

Comments
 (0)