Skip to content

Commit f19ba10

Browse files
committed
Add ZDC and FIT time tables and kIsBBZPA && kIsBBZPC selections to centrality study
1 parent 9ffa18c commit f19ba10

3 files changed

Lines changed: 157 additions & 58 deletions

File tree

Common/DataModel/Multiplicity.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ DECLARE_SOA_COLUMN(FT0TriggerMask, ft0TriggerMask, uint8_t); //!
104104
DECLARE_SOA_COLUMN(MultFV0AOuter, multFV0AOuter, float); //! FV0 without innermost ring
105105
DECLARE_SOA_COLUMN(MultFT0AOuter, multFT0AOuter, float); //! FT0A without innermost ring
106106

107+
// Timing information
108+
DECLARE_SOA_COLUMN(TimeZNA, timeZNA, float); //!
109+
DECLARE_SOA_COLUMN(TimeZNC, timeZNC, float); //!
110+
DECLARE_SOA_COLUMN(TimeZPA, timeZPA, float); //!
111+
DECLARE_SOA_COLUMN(TimeZPC, timeZPC, float); //!
112+
DECLARE_SOA_COLUMN(TimeT0A, timeT0A, float); //!
113+
DECLARE_SOA_COLUMN(TimeT0C, timeT0C, float); //!
114+
DECLARE_SOA_COLUMN(TimeFDA, timeFDA, float); //!
115+
DECLARE_SOA_COLUMN(TimeFDC, timeFDC, float); //!
116+
107117
} // namespace mult
108118
DECLARE_SOA_TABLE(FV0Mults, "AOD", "FV0MULT", //! Multiplicity with the FV0 detector
109119
mult::MultFV0A, mult::MultFV0C,
@@ -318,6 +328,16 @@ DECLARE_SOA_TABLE_VERSIONED(MultBcSel_001, "AOD", "MULTBCSEL", 1, //! BC selecti
318328
mult::MultTVX,
319329
mult::MultFV0OrA);
320330

331+
DECLARE_SOA_TABLE(TimeBCs, "AOD", "TIMEBC", //!
332+
mult::TimeT0A,
333+
mult::TimeT0C,
334+
mult::TimeFDA,
335+
mult::TimeFDC,
336+
mult::TimeZNA,
337+
mult::TimeZNC,
338+
mult::TimeZPA,
339+
mult::TimeZPC)
340+
321341
using MultBCs = MultBCs_001;
322342
using MultBcSel = MultBcSel_001;
323343
using MultBC = MultBCs::iterator;

Common/TableProducer/multiplicityExtraTable.cxx

Lines changed: 80 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@
88
// In applying this license CERN does not waive the privileges and immunities
99
// granted to it by virtue of its status as an Intergovernmental Organization
1010
// or submit itself to any jurisdiction.
11+
12+
///
13+
/// \file multiplicityExtraTable.cxx
14+
/// \brief This tasks produces BC based multiplicity tables
15+
/// \author David Dobrigkeit Chinellato and Jesper Karlsson Gumprecht
16+
///
17+
1118
#include "Common/DataModel/EventSelection.h"
1219
#include "Common/DataModel/Multiplicity.h"
1320

@@ -43,6 +50,7 @@ struct MultiplicityExtraTable {
4350
Produces<aod::MultBCs> multBC;
4451
Produces<aod::MultBcSel> multBcSel;
4552
Produces<aod::MultNeighs> multNeigh;
53+
Produces<aod::TimeBCs> timeBC;
4654

4755
Produces<aod::Mults2BC> mult2bc;
4856
Produces<aod::BC2Mults> bc2mult;
@@ -59,17 +67,19 @@ struct MultiplicityExtraTable {
5967

6068
float tru(float value)
6169
{
62-
if (bcTableFloatPrecision < 1e-4)
70+
static constexpr float PrecisionThreshold = 1e-4;
71+
if (bcTableFloatPrecision < PrecisionThreshold) {
6372
return value; // make sure nothing bad happens in case zero (best precision)
73+
}
6474
return bcTableFloatPrecision * std::round(value / bcTableFloatPrecision) + 0.5f * bcTableFloatPrecision;
6575
};
6676

6777
// needed for downscale
6878
unsigned int randomSeed = 0;
6979

7080
o2::ccdb::CcdbApi ccdbApi;
71-
Service<o2::ccdb::BasicCCDBManager> ccdb;
72-
BCPattern CollidingBunch;
81+
Service<o2::ccdb::BasicCCDBManager> ccdb{};
82+
BCPattern collidingBunch;
7383

7484
int newRunNumber = -999;
7585
int oldRunNumber = -999;
@@ -116,7 +126,7 @@ struct MultiplicityExtraTable {
116126
float multFT0C = 0.f;
117127
if (bc.has_ft0()) {
118128
auto ft0 = bc.ft0();
119-
for (auto amplitude : ft0.amplitudeC()) {
129+
for (const auto amplitude : ft0.amplitudeC()) {
120130
multFT0C += amplitude;
121131
}
122132
} else {
@@ -148,7 +158,7 @@ struct MultiplicityExtraTable {
148158
continue; // don't keep if low mult or downsampled out
149159
}
150160

151-
bool Tvx = false;
161+
bool tvx = false;
152162
bool isFV0OrA = false;
153163
float multFT0C = 0.f;
154164
float multFT0A = 0.f;
@@ -166,6 +176,16 @@ struct MultiplicityExtraTable {
166176
float multZPA = -1.f;
167177
float multZPC = -1.f;
168178

179+
// FT0 and ZDC time
180+
float timeFT0A = -1e+3;
181+
float timeFT0C = -1e+3;
182+
float timeFDDA = -1e+3;
183+
float timeFDDC = -1e+3;
184+
float timeZNA = -1e+3;
185+
float timeZNC = -1e+3;
186+
float timeZPA = -1e+3;
187+
float timeZPC = -1e+3;
188+
169189
float posZFT0 = -1e+3;
170190
bool posZFT0valid = false;
171191

@@ -185,32 +205,37 @@ struct MultiplicityExtraTable {
185205
LOG(info) << " newRunNumber " << newRunNumber << " time stamp " << ts;
186206
oldRunNumber = newRunNumber;
187207
auto grplhcif = ccdb->getForTimeStamp<o2::parameters::GRPLHCIFData>("GLO/Config/GRPLHCIF", ts);
188-
CollidingBunch = grplhcif->getBunchFilling().getBCPattern();
208+
collidingBunch = grplhcif->getBunchFilling().getBCPattern();
189209
} // new run number
190210

191-
bool collidingBC = CollidingBunch.test(localBC);
211+
bool collidingBC = collidingBunch.test(localBC);
192212

193213
if (bc.has_ft0()) {
194214
const auto& ft0 = bc.ft0();
195215
std::bitset<8> triggers = ft0.triggerMask();
196-
Tvx = triggers[o2::fit::Triggers::bitVertex];
216+
tvx = triggers[o2::fit::Triggers::bitVertex];
197217
multFT0TriggerBits = static_cast<uint8_t>(triggers.to_ulong());
198218

199219
// calculate T0 charge
200220
for (size_t ii = 0; ii < ft0.amplitudeA().size(); ++ii) {
201221
multFT0A += ft0.amplitudeA()[ii];
202-
if (ft0.channelA()[ii] > 31) {
222+
static constexpr int MaxChannelIdInnerRingFT0A = 31;
223+
if (ft0.channelA()[ii] > MaxChannelIdInnerRingFT0A) {
203224
multFT0AOuter += ft0.amplitudeA()[ii];
204225
}
205226
}
206-
for (auto amplitude : ft0.amplitudeC()) {
227+
for (const auto amplitude : ft0.amplitudeC()) {
207228
multFT0C += amplitude;
208229
}
209230
posZFT0 = ft0.posZ();
210231
posZFT0valid = ft0.isValidTime();
232+
timeFT0A = ft0.timeC();
233+
timeFT0C = ft0.timeA();
211234
} else {
212235
multFT0A = -999.0f;
213236
multFT0C = -999.0f;
237+
timeFT0A = -999.0f;
238+
timeFT0C = -999.0f;
214239
}
215240
if (bc.has_fv0a()) {
216241
auto fv0 = bc.fv0a();
@@ -221,7 +246,8 @@ struct MultiplicityExtraTable {
221246
auto amplitude = fv0.amplitude()[ii];
222247
auto channel = fv0.channel()[ii];
223248
multFV0A += amplitude;
224-
if (channel > 7) {
249+
static constexpr int MaxChannelIdInnerRingFV0 = 7;
250+
if (channel > MaxChannelIdInnerRingFV0) {
225251
multFV0AOuter += amplitude;
226252
}
227253
}
@@ -235,15 +261,20 @@ struct MultiplicityExtraTable {
235261
std::bitset<8> fFDDTriggers = fdd.triggerMask();
236262
multFDDTriggerBits = static_cast<uint8_t>(fFDDTriggers.to_ulong());
237263

238-
for (auto amplitude : fdd.chargeA()) {
264+
for (const auto amplitude : fdd.chargeA()) {
239265
multFDDA += amplitude;
240266
}
241-
for (auto amplitude : fdd.chargeC()) {
267+
for (const auto amplitude : fdd.chargeC()) {
242268
multFDDC += amplitude;
243269
}
270+
271+
timeFDDA = fdd.timeA();
272+
timeFDDC = fdd.timeC();
244273
} else {
245274
multFDDA = -999.0f;
246275
multFDDC = -999.0f;
276+
timeFDDA = -999.0f;
277+
timeFDDC = -999.0f;
247278
}
248279

249280
if (bc.has_zdc()) {
@@ -253,13 +284,19 @@ struct MultiplicityExtraTable {
253284
multZEM2 = bc.zdc().amplitudeZEM2();
254285
multZPA = bc.zdc().amplitudeZPA();
255286
multZPC = bc.zdc().amplitudeZPC();
287+
timeZPA = bc.zdc().timeZPA();
288+
timeZPC = bc.zdc().timeZPC();
256289
} else {
257290
multZNA = -999.f;
258291
multZNC = -999.f;
259292
multZEM1 = -999.f;
260293
multZEM2 = -999.f;
261294
multZPA = -999.f;
262295
multZPC = -999.f;
296+
timeZNA = -999.f;
297+
timeZNC = -999.f;
298+
timeZPA = -999.f;
299+
timeZPC = -999.f;
263300
}
264301

265302
bc2mult(bc2multArray[bc.globalIndex()]);
@@ -290,8 +327,18 @@ struct MultiplicityExtraTable {
290327
multFDDTriggerBits,
291328
multBCTriggerMask,
292329
collidingBC,
293-
Tvx,
330+
tvx,
294331
isFV0OrA);
332+
333+
timeBC(
334+
timeFT0A,
335+
timeFT0C,
336+
timeFDDA,
337+
timeFDDC,
338+
timeZNA,
339+
timeZNC,
340+
timeZPA,
341+
timeZPC);
295342
}
296343
}
297344

@@ -307,16 +354,24 @@ struct MultiplicityExtraTable {
307354
float deltaPrevious = 1e+6, deltaPrePrevious = 1e+6;
308355
float deltaNext = 1e+6, deltaNeNext = 1e+6;
309356
for (const auto& collision : collisions) {
310-
int ii = collision.globalIndex();
311-
312-
if (ii - 1 >= 0)
313-
deltaPrevious = timeArray[ii] - timeArray[ii - 1];
314-
if (ii - 2 >= 0)
315-
deltaPrePrevious = timeArray[ii] - timeArray[ii - 2];
316-
if (ii + 1 < collisions.size())
317-
deltaNext = timeArray[ii + 1] - timeArray[ii];
318-
if (ii + 2 < collisions.size())
319-
deltaNeNext = timeArray[ii + 2] - timeArray[ii];
357+
const int thisCollision = collision.globalIndex();
358+
const int prevCollision = thisCollision - 1;
359+
const int prevPrevCollision = thisCollision - 2;
360+
const int nextCollision = thisCollision + 1;
361+
const int nextNextCollision = thisCollision + 2;
362+
363+
if (prevCollision >= 0) {
364+
deltaPrevious = timeArray[thisCollision] - timeArray[prevCollision];
365+
}
366+
if (prevPrevCollision >= 0) {
367+
deltaPrePrevious = timeArray[thisCollision] - timeArray[prevPrevCollision];
368+
}
369+
if (nextCollision < collisions.size()) {
370+
deltaNext = timeArray[nextCollision] - timeArray[thisCollision];
371+
}
372+
if (nextNextCollision < collisions.size()) {
373+
deltaNeNext = timeArray[nextNextCollision] - timeArray[thisCollision];
374+
}
320375

321376
multNeigh(deltaPrePrevious, deltaPrevious, deltaNext, deltaNeNext);
322377
}
@@ -342,5 +397,5 @@ struct MultiplicityExtraTable {
342397

343398
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
344399
{
345-
return WorkflowSpec{adaptAnalysisTask<MultiplicityExtraTable>(cfgc, TaskName{"multiplicity-extra-table"})};
400+
return WorkflowSpec{adaptAnalysisTask<MultiplicityExtraTable>(cfgc)};
346401
}

0 commit comments

Comments
 (0)