@@ -58,6 +58,7 @@ using BCsRun3 = soa::Join<aod::BCsWithTimestamps, aod::Run3MatchedToBCSparse>;
5858struct zdcvector {
5959
6060 Produces<aod::ZDCCalTables> zdccaltable;
61+ Produces<aod::ZDCEnergyTables> zdcenergytable;
6162
6263 // Configurables.
6364 struct : ConfigurableGroup {
@@ -98,6 +99,8 @@ 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+
101104 RCTFlagsChecker rctChecker;
102105
103106 void init (o2::framework::InitContext&)
@@ -137,8 +140,8 @@ struct zdcvector {
137140
138141 int currentRunNumber = -999 ;
139142 int lastRunNumber = -999 ;
140- TH2D* gainprofile;
141- TProfile* gainprofilevxy;
143+ TH2D* gainprofile = nullptr ;
144+ TProfile* gainprofilevxy = nullptr ;
142145
143146 // int lastRunNumberTimeRec = -999;
144147 // for time since start of run
@@ -176,78 +179,119 @@ struct zdcvector {
176179 auto sumA = 0.0 ;
177180 auto sumC = 0.0 ;
178181
182+ // default values for events without ZDC
183+ float znaEnergycommon = 0 .f ;
184+ float zncEnergycommon = 0 .f ;
185+
186+ float zna0 = 0 .f ;
187+ float zna1 = 0 .f ;
188+ float zna2 = 0 .f ;
189+ float zna3 = 0 .f ;
190+
191+ float znc0 = 0 .f ;
192+ float znc1 = 0 .f ;
193+ float znc2 = 0 .f ;
194+ float znc3 = 0 .f ;
195+
179196 auto bc = collision.foundBC_as <BCsRun3>();
180197
198+ // Helper to keep your early-return structure unchanged.
199+ // Every time ZDCCalTables is filled, the optional linked energy table is also filled.
200+ auto fillTables = [&](bool trigger,
201+ float qxA,
202+ float qxC,
203+ float qyA,
204+ float qyC) {
205+ zdccaltable (trigger,
206+ currentRunNumber,
207+ centrality,
208+ vx,
209+ vy,
210+ vz,
211+ qxA,
212+ qxC,
213+ qyA,
214+ qyC);
215+
216+ if (storeZdcEnergy) {
217+ zdcenergytable (zdccaltable.lastIndex (),
218+ znaEnergycommon,
219+ zncEnergycommon,
220+ zna0,
221+ zna1,
222+ zna2,
223+ zna3,
224+ znc0,
225+ znc1,
226+ znc2,
227+ znc3);
228+ }
229+ };
230+
181231 if (!bc.has_zdc ()) {
182232 triggerevent = false ;
183- zdccaltable (triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0 , 0.0 , 0.0 , 0.0 );
233+ fillTables (triggerevent, 0 .f , 0 .f , 0 .f , 0 .f );
234+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
184235 return ;
185236 }
186237
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- */
195238 histos.fill (HIST (" hEvtSelInfo" ), 1.5 );
196239
197240 auto zdc = bc.zdc ();
198241 auto zncEnergy = zdc.energySectorZNC ();
199242 auto znaEnergy = zdc.energySectorZNA ();
200- auto zncEnergycommon = zdc.energyCommonZNC ();
201- auto znaEnergycommon = zdc.energyCommonZNA ();
243+ zncEnergycommon = zdc.energyCommonZNC ();
244+ znaEnergycommon = zdc.energyCommonZNA ();
202245 auto beamEne = 5.36 * 0.5 ;
246+ zna0 = znaEnergy[0 ];
247+ zna1 = znaEnergy[1 ];
248+ zna2 = znaEnergy[2 ];
249+ zna3 = znaEnergy[3 ];
250+
251+ znc0 = zncEnergy[0 ];
252+ znc1 = zncEnergy[1 ];
253+ znc2 = zncEnergy[2 ];
254+ znc3 = zncEnergy[3 ];
203255
204256 if (znaEnergycommon <= 0.0 || zncEnergycommon <= 0.0 ) {
205257 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] );
258+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
259+ fillTables (triggerevent, 0 . f , 0 . f , 0 . f , 0 . f );
208260 return ;
209261 }
210262
211263 histos.fill (HIST (" hEvtSelInfo" ), 2.5 );
212264
213265 if (znaEnergy[0 ] <= 0.0 || znaEnergy[1 ] <= 0.0 || znaEnergy[2 ] <= 0.0 || znaEnergy[3 ] <= 0.0 ) {
214266 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] );
267+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
268+ fillTables (triggerevent, 0 . f , 0 . f , 0 . f , 0 . f );
217269 return ;
218270 }
219271 histos.fill (HIST (" hEvtSelInfo" ), 3.5 );
220272
221273 if (zncEnergy[0 ] <= 0.0 || zncEnergy[1 ] <= 0.0 || zncEnergy[2 ] <= 0.0 || zncEnergy[3 ] <= 0.0 ) {
222274 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] );
275+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
276+ fillTables (triggerevent, 0 . f , 0 . f , 0 . f , 0 . f );
225277 return ;
226278 }
227279
228280 histos.fill (HIST (" hEvtSelInfo" ), 4.5 );
229281
230282 if (rctCut.requireRCTFlagChecker && !rctChecker (collision)) {
231283 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] );
284+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
285+ fillTables (triggerevent, 0 . f , 0 . f , 0 . f , 0 . f );
234286 return ;
235287 }
236288
237289 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]);*/
246290
247291 if (additionalEvSel && (!collision.selection_bit (aod::evsel::kIsGoodZvtxFT0vsPV ))) {
248292 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] );
293+ fillTables (triggerevent, 0 . f , 0 .f , 0 .f , 0 .f );
294+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0 );
251295 return ;
252296 }
253297
@@ -284,7 +328,8 @@ struct zdcvector {
284328
285329 if (znaEnergy[iChA] <= 0.0 ) {
286330 triggerevent = false ;
287- zdccaltable (triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0 , 0.0 , 0.0 , 0.0 );
331+ fillTables (triggerevent, 0 .f , 0 .f , 0 .f , 0 .f );
332+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
288333 return ;
289334 } else {
290335 double ampl = gainequal * znaEnergy[iChA];
@@ -300,8 +345,8 @@ struct zdcvector {
300345 } else {
301346 if (zncEnergy[iChA - 4 ] <= 0.0 ) {
302347 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] );
348+ fillTables (triggerevent, 0 . f , 0 .f , 0 .f , 0 .f );
349+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0 );
305350 return ;
306351 } else {
307352 double ampl = gainequal * zncEnergy[iChA - 4 ];
@@ -345,8 +390,8 @@ struct zdcvector {
345390 qyZDCA = 0.0 ;
346391 qyZDCC = 0.0 ;
347392 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] );
393+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, 0.0, 0.0, 0.0, 0.0);
394+ fillTables (triggerevent, 0 . f , 0 . f , 0 . f , 0 . f );
350395 return ;
351396 }
352397
@@ -370,7 +415,12 @@ struct zdcvector {
370415
371416 lastRunNumber = currentRunNumber;
372417 }
373- zdccaltable (triggerevent, currentRunNumber, centrality, vx, vy, vz, qxZDCA, qxZDCC, qyZDCA, qyZDCC);
418+ // zdccaltable(triggerevent, currentRunNumber, centrality, vx, vy, vz, qxZDCA, qxZDCC, qyZDCA, qyZDCC);
419+ fillTables (triggerevent,
420+ qxZDCA,
421+ qxZDCC,
422+ qyZDCA,
423+ qyZDCC);
374424 }
375425};
376426
0 commit comments