Skip to content

Commit 51f9b0d

Browse files
author
Prottay Das
committed
updated code with bc timestamp and zdc energy information
1 parent cc33590 commit 51f9b0d

3 files changed

Lines changed: 152 additions & 35 deletions

File tree

PWGLF/DataModel/ZDCCalTables.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,42 @@ DECLARE_SOA_TABLE(ZDCCalTables, "AOD", "ZDCCALTABLE",
4848
zdccaltable::QyA,
4949
zdccaltable::QyC);
5050
using ZDCCalTable = ZDCCalTables::iterator;
51+
52+
// Extra optional linked table.
53+
// This table does NOT duplicate cent, vx, vy, vz, run number, trigger, etc.
54+
// It only stores the ZDC energies and links back to ZDCCalTables.
55+
namespace zdcenergytable
56+
{
57+
DECLARE_SOA_INDEX_COLUMN(ZDCCalTable, zdcCalTable);
58+
59+
DECLARE_SOA_COLUMN(ZNACommon, znaCommon, float);
60+
DECLARE_SOA_COLUMN(ZNCCommon, zncCommon, float);
61+
62+
DECLARE_SOA_COLUMN(ZNA0, zna0, float);
63+
DECLARE_SOA_COLUMN(ZNA1, zna1, float);
64+
DECLARE_SOA_COLUMN(ZNA2, zna2, float);
65+
DECLARE_SOA_COLUMN(ZNA3, zna3, float);
66+
67+
DECLARE_SOA_COLUMN(ZNC0, znc0, float);
68+
DECLARE_SOA_COLUMN(ZNC1, znc1, float);
69+
DECLARE_SOA_COLUMN(ZNC2, znc2, float);
70+
DECLARE_SOA_COLUMN(ZNC3, znc3, float);
71+
} // namespace zdcenergytable
72+
73+
DECLARE_SOA_TABLE(ZDCEnergyTables, "AOD", "ZDCENERGY",
74+
zdcenergytable::ZDCCalTableId,
75+
zdcenergytable::ZNACommon,
76+
zdcenergytable::ZNCCommon,
77+
zdcenergytable::ZNA0,
78+
zdcenergytable::ZNA1,
79+
zdcenergytable::ZNA2,
80+
zdcenergytable::ZNA3,
81+
zdcenergytable::ZNC0,
82+
zdcenergytable::ZNC1,
83+
zdcenergytable::ZNC2,
84+
zdcenergytable::ZNC3);
85+
86+
using ZDCEnergyTable = ZDCEnergyTables::iterator;
87+
5188
} // namespace o2::aod
5289
#endif // PWGLF_DATAMODEL_ZDCCALTABLES_H_

PWGLF/TableProducer/Common/spvector.cxx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
#include <cstdint>
5454
#include <iostream>
5555
#include <string>
56+
#include <unordered_map>
5657
#include <vector>
5758

5859
using namespace o2;
@@ -114,6 +115,9 @@ struct spvector {
114115
Configurable<int> CentfineNbins{"CentfineNbins", 16, "Number of bins in cent fine histograms"};
115116
Configurable<float> lfinebinCent{"lfinebinCent", 0.0, "lower bin value in cent fine histograms"};
116117
Configurable<float> hfinebinCent{"hfinebinCent", 80.0, "higher bin value in cent fine histograms"};
118+
Configurable<int> TimefineNbins{"TimefineNbins", 120, "Number of bins in Time fine histograms"};
119+
Configurable<float> lfinebinTime{"lfinebinTime", 0, "lower bin value in Time fine histograms"};
120+
Configurable<float> hfinebinTime{"hfinebinTime", 120, "higher bin value in Time fine histograms"};
117121
} configbins;
118122

119123
Configurable<bool> useShift{"useShift", false, "shift histograms"};
@@ -217,6 +221,7 @@ struct spvector {
217221
AxisSpec vxfineAxis = {configbins.VxfineNbins, configbins.lfinebinVx, configbins.hfinebinVx, "vxfine"};
218222
AxisSpec vyfineAxis = {configbins.VyfineNbins, configbins.lfinebinVy, configbins.hfinebinVy, "vyfine"};
219223
AxisSpec centfineAxis = {configbins.CentfineNbins, configbins.lfinebinCent, configbins.hfinebinCent, "V0M (%) fine"};
224+
AxisSpec timefineAxis = {configbins.TimefineNbins, configbins.lfinebinTime, configbins.hfinebinTime, "timefine"};
220225
AxisSpec shiftAxis = {10, 0, 10, "shift"};
221226
AxisSpec basisAxis = {2, 0, 2, "basis"};
222227
AxisSpec VxyAxis = {2, 0, 2, "Vxy"};
@@ -255,6 +260,11 @@ struct spvector {
255260
histos.add("hvzQyZDCA", "hvzQyZDCA", kTH2F, {{vzfineAxis}, {qxZDCAxis}});
256261
histos.add("hvzQxZDCC", "hvzQxZDCC", kTH2F, {{vzfineAxis}, {qxZDCAxis}});
257262
histos.add("hvzQyZDCC", "hvzQyZDCC", kTH2F, {{vzfineAxis}, {qxZDCAxis}});
263+
264+
histos.add("htimeQxZDCA", "htimeQxZDCA", kTH2F, {{timefineAxis}, {qxZDCAxis}});
265+
histos.add("htimeQyZDCA", "htimeQyZDCA", kTH2F, {{timefineAxis}, {qxZDCAxis}});
266+
histos.add("htimeQxZDCC", "htimeQxZDCC", kTH2F, {{timefineAxis}, {qxZDCAxis}});
267+
histos.add("htimeQyZDCC", "htimeQyZDCC", kTH2F, {{timefineAxis}, {qxZDCAxis}});
258268
}
259269

260270
histos.add("PsiZDCC", "PsiZDCC", kTH2F, {centfineAxis, phiAxis});
@@ -424,6 +434,17 @@ struct spvector {
424434

425435
histos.fill(HIST("hEvtSelInfo"), 1.5);
426436

437+
const uint64_t timestampzdc = bc.timestamp(); // in milliseconds
438+
439+
// Convert timestamp to hours from run start (approximate)
440+
// Store first timestamp of run to calculate relative time
441+
static std::unordered_map<int, uint64_t> runStartTime;
442+
if (runStartTime.find(currentRunNumber) == runStartTime.end()) {
443+
runStartTime[currentRunNumber] = timestampzdc;
444+
}
445+
446+
double timeInMinutes = (timestampzdc - runStartTime[currentRunNumber]) / 60000.0; // ms -> minutes
447+
427448
auto zdc = bc.zdc();
428449
auto zncEnergy = zdc.energySectorZNC();
429450
auto znaEnergy = zdc.energySectorZNA();
@@ -750,6 +771,11 @@ struct spvector {
750771
histos.fill(HIST("hvzQyZDCA"), vz, qyZDCA);
751772
histos.fill(HIST("hvzQxZDCC"), vz, qxZDCC);
752773
histos.fill(HIST("hvzQyZDCC"), vz, qyZDCC);
774+
775+
histos.fill(HIST("htimeQxZDCA"), timeInMinutes, qxZDCA);
776+
histos.fill(HIST("htimeQyZDCA"), timeInMinutes, qyZDCA);
777+
histos.fill(HIST("htimeQxZDCC"), timeInMinutes, qxZDCC);
778+
histos.fill(HIST("htimeQyZDCC"), timeInMinutes, qyZDCC);
753779
}
754780

755781
histos.fill(HIST("hpCosPsiAPsiC"), centrality, (TMath::Cos(psiZDCA - psiZDCC)));

PWGLF/TableProducer/Common/zdcvector.cxx

Lines changed: 89 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ using BCsRun3 = soa::Join<aod::BCsWithTimestamps, aod::Run3MatchedToBCSparse>;
5858
struct zdcvector {
5959

6060
Produces<aod::ZDCCalTables> zdccaltable;
61+
Produces<aod::ZDCEnergyTables> zdcenergytable;
6162

6263
// Configurables.
6364
struct : ConfigurableGroup {
@@ -98,6 +99,9 @@ struct zdcvector {
9899
Configurable<bool> cfgEvtRCTFlagCheckerLimitAcceptAsBad{"cfgEvtRCTFlagCheckerLimitAcceptAsBad", false, "Evt sel: RCT flag checker treat Limited Acceptance As Bad"};
99100
} rctCut;
100101

102+
Configurable<bool> storeZdcEnergy{"storeZdcEnergy", true, "Store ZDC tower/common energies in a linked extra table"};
103+
int32_t zdcCalTableRow = 0;
104+
101105
RCTFlagsChecker rctChecker;
102106

103107
void init(o2::framework::InitContext&)
@@ -176,78 +180,122 @@ struct zdcvector {
176180
auto sumA = 0.0;
177181
auto sumC = 0.0;
178182

183+
// default values for events without ZDC
184+
float znaEnergycommon = 0.f;
185+
float zncEnergycommon = 0.f;
186+
187+
float zna0 = 0.f;
188+
float zna1 = 0.f;
189+
float zna2 = 0.f;
190+
float zna3 = 0.f;
191+
192+
float znc0 = 0.f;
193+
float znc1 = 0.f;
194+
float znc2 = 0.f;
195+
float znc3 = 0.f;
196+
179197
auto bc = collision.foundBC_as<BCsRun3>();
180198

199+
// Helper to keep your early-return structure unchanged.
200+
// Every time ZDCCalTables is filled, the optional linked energy table is also filled.
201+
auto fillTables = [&](bool trigger,
202+
float qxA,
203+
float qxC,
204+
float qyA,
205+
float qyC) {
206+
zdccaltable(trigger,
207+
currentRunNumber,
208+
centrality,
209+
vx,
210+
vy,
211+
vz,
212+
qxA,
213+
qxC,
214+
qyA,
215+
qyC);
216+
217+
LOG(info) << "values are:" << trigger << " " << znaEnergycommon << " " << zna0;
218+
if (storeZdcEnergy) {
219+
zdcenergytable(zdcCalTableRow,
220+
znaEnergycommon,
221+
zncEnergycommon,
222+
zna0,
223+
zna1,
224+
zna2,
225+
zna3,
226+
znc0,
227+
znc1,
228+
znc2,
229+
znc3);
230+
}
231+
232+
++zdcCalTableRow;
233+
};
234+
181235
if (!bc.has_zdc()) {
182236
triggerevent = false;
183-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
237+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
238+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
184239
return;
185240
}
186241

187-
// -------- define time since run start --------
188-
/*uint64_t ts = bc.timestamp();
189-
if (currentRunNumber != runForStartTime) {
190-
runStartTime = ts;
191-
runForStartTime = currentRunNumber;
192-
}
193-
double tsec = 1.e-3 * static_cast<double>(ts - runStartTime);
194-
*/
195242
histos.fill(HIST("hEvtSelInfo"), 1.5);
196243

197244
auto zdc = bc.zdc();
198245
auto zncEnergy = zdc.energySectorZNC();
199246
auto znaEnergy = zdc.energySectorZNA();
200-
auto zncEnergycommon = zdc.energyCommonZNC();
201-
auto znaEnergycommon = zdc.energyCommonZNA();
247+
zncEnergycommon = zdc.energyCommonZNC();
248+
znaEnergycommon = zdc.energyCommonZNA();
202249
auto beamEne = 5.36 * 0.5;
250+
zna0 = znaEnergy[0];
251+
zna1 = znaEnergy[1];
252+
zna2 = znaEnergy[2];
253+
zna3 = znaEnergy[3];
254+
255+
znc0 = zncEnergy[0];
256+
znc1 = zncEnergy[1];
257+
znc2 = zncEnergy[2];
258+
znc3 = zncEnergy[3];
203259

204260
if (znaEnergycommon <= 0.0 || zncEnergycommon <= 0.0) {
205261
triggerevent = false;
206-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
207-
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, znaEnergycommon, zncEnergycommon, znaEnergy[0], znaEnergy[1], znaEnergy[2], znaEnergy[3], zncEnergy[0], zncEnergy[1], zncEnergy[2], zncEnergy[3]);
262+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
263+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
208264
return;
209265
}
210266

211267
histos.fill(HIST("hEvtSelInfo"), 2.5);
212268

213269
if (znaEnergy[0] <= 0.0 || znaEnergy[1] <= 0.0 || znaEnergy[2] <= 0.0 || znaEnergy[3] <= 0.0) {
214270
triggerevent = false;
215-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
216-
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, znaEnergycommon, zncEnergycommon, znaEnergy[0], znaEnergy[1], znaEnergy[2], znaEnergy[3], zncEnergy[0], zncEnergy[1], zncEnergy[2], zncEnergy[3]);
271+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
272+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
217273
return;
218274
}
219275
histos.fill(HIST("hEvtSelInfo"), 3.5);
220276

221277
if (zncEnergy[0] <= 0.0 || zncEnergy[1] <= 0.0 || zncEnergy[2] <= 0.0 || zncEnergy[3] <= 0.0) {
222278
triggerevent = false;
223-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
224-
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, znaEnergycommon, zncEnergycommon, znaEnergy[0], znaEnergy[1], znaEnergy[2], znaEnergy[3], zncEnergy[0], zncEnergy[1], zncEnergy[2], zncEnergy[3]);
279+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
280+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
225281
return;
226282
}
227283

228284
histos.fill(HIST("hEvtSelInfo"), 4.5);
229285

230286
if (rctCut.requireRCTFlagChecker && !rctChecker(collision)) {
231287
triggerevent = false;
232-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
233-
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, znaEnergycommon, zncEnergycommon, znaEnergy[0], znaEnergy[1], znaEnergy[2], znaEnergy[3], zncEnergy[0], zncEnergy[1], zncEnergy[2], zncEnergy[3]);
288+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
289+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
234290
return;
235291
}
236292

237293
histos.fill(HIST("hEvtSelInfo"), 5.5);
238-
/*histos.fill(HIST("hZNA0"), centrality, znaEnergy[0]);
239-
histos.fill(HIST("hZNA1"), centrality, znaEnergy[1]);
240-
histos.fill(HIST("hZNA2"), centrality, znaEnergy[2]);
241-
histos.fill(HIST("hZNA3"), centrality, znaEnergy[3]);
242-
histos.fill(HIST("hZNC0"), centrality, zncEnergy[0]);
243-
histos.fill(HIST("hZNC1"), centrality, zncEnergy[1]);
244-
histos.fill(HIST("hZNC2"), centrality, zncEnergy[2]);
245-
histos.fill(HIST("hZNC3"), centrality, zncEnergy[3]);*/
246294

247295
if (additionalEvSel && (!collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV))) {
248296
triggerevent = false;
249-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
250-
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, znaEnergycommon, zncEnergycommon, znaEnergy[0], znaEnergy[1], znaEnergy[2], znaEnergy[3], zncEnergy[0], zncEnergy[1], zncEnergy[2], zncEnergy[3]);
297+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
298+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
251299
return;
252300
}
253301

@@ -284,7 +332,8 @@ struct zdcvector {
284332

285333
if (znaEnergy[iChA] <= 0.0) {
286334
triggerevent = false;
287-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
335+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
336+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
288337
return;
289338
} else {
290339
double ampl = gainequal * znaEnergy[iChA];
@@ -300,8 +349,8 @@ struct zdcvector {
300349
} else {
301350
if (zncEnergy[iChA - 4] <= 0.0) {
302351
triggerevent = false;
303-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
304-
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, znaEnergycommon, zncEnergycommon, znaEnergy[0], znaEnergy[1], znaEnergy[2], znaEnergy[3], zncEnergy[0], zncEnergy[1], zncEnergy[2], zncEnergy[3]);
352+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
353+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
305354
return;
306355
} else {
307356
double ampl = gainequal * zncEnergy[iChA - 4];
@@ -345,8 +394,8 @@ struct zdcvector {
345394
qyZDCA = 0.0;
346395
qyZDCC = 0.0;
347396
triggerevent = false;
348-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
349-
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, znaEnergycommon, zncEnergycommon, znaEnergy[0], znaEnergy[1], znaEnergy[2], znaEnergy[3], zncEnergy[0], zncEnergy[1], zncEnergy[2], zncEnergy[3]);
397+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
398+
fillTables(triggerevent, 0.f, 0.f, 0.f, 0.f);
350399
return;
351400
}
352401

@@ -370,7 +419,12 @@ struct zdcvector {
370419

371420
lastRunNumber = currentRunNumber;
372421
}
373-
zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, qxZDCA, qxZDCC, qyZDCA, qyZDCC);
422+
// zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, qxZDCA, qxZDCC, qyZDCA, qyZDCC);
423+
fillTables(triggerevent,
424+
qxZDCA,
425+
qxZDCC,
426+
qyZDCA,
427+
qyZDCC);
374428
}
375429
};
376430

0 commit comments

Comments
 (0)