Loading [MathJax]/jax/input/TeX/config.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Functions
ZdcMonitorAlgorithm Namespace Reference

Functions

def create_log_bins (min_value, max_value, num_bins)
 
def create_vinj_bins ()
 
def create_hg_fit_amp_inj_bins ()
 
def create_lg_fit_amp_inj_bins ()
 
def ZdcMonitoringConfig (inputFlags)
 

Function Documentation

◆ create_hg_fit_amp_inj_bins()

def ZdcMonitorAlgorithm.create_hg_fit_amp_inj_bins ( )

Definition at line 54 of file ZdcMonitorAlgorithm.py.

55 
56  # Define min, max, and step size for each range
57  min1, max1, step1 = 0, 280, 4 # up to the tail of 10mV
58  min2, max2, step2 = 280, module_FPGA_max_ADC+1, 8
59 
60  # Generate each range using the defined variables
61  range1 = np.arange(min1, max1, step1)
62  range2 = np.arange(min2, max2, step2)
63 
64  # Concatenate the ranges into a single array
65  hg_amp_inj_bins_array = np.concatenate((range1, range2))
66 
67  return hg_amp_inj_bins_array.tolist()
68 

◆ create_lg_fit_amp_inj_bins()

def ZdcMonitorAlgorithm.create_lg_fit_amp_inj_bins ( )

Definition at line 69 of file ZdcMonitorAlgorithm.py.

70 
71  # Define min, max, and step size for each range
72  min1, max1, step1 = 0, 28, 0.4 # up to the tail of 10mV
73  min2, max2, step2 = 28, 800, 0.8 # roughly correspond to 300mV - can fine tune with ntuple
74  min3, max3, step3 = 800, module_FPGA_max_ADC+1, 8
75 
76 
77  # Generate each range using the defined variables
78  range1 = np.arange(min1, max1, step1)
79  range2 = np.arange(min2, max2, step2)
80  range3 = np.arange(min3, max3, step3)
81 
82  # Concatenate the ranges into a single array
83  lg_amp_inj_bins_array = np.concatenate((range1, range2, range3))
84 
85  return lg_amp_inj_bins_array.tolist()
86 

◆ create_log_bins()

def ZdcMonitorAlgorithm.create_log_bins (   min_value,
  max_value,
  num_bins 
)

Definition at line 24 of file ZdcMonitorAlgorithm.py.

24 def create_log_bins(min_value, max_value, num_bins):
25  # Calculate the logarithmic bin edges
26  log_min = np.log10(min_value)
27  log_max = np.log10(max_value)
28  log_bin_edges = np.linspace(log_min, log_max, num_bins + 1)
29  bin_edges = [10 ** edge for edge in log_bin_edges]
30 
31  return bin_edges
32 

◆ create_vinj_bins()

def ZdcMonitorAlgorithm.create_vinj_bins ( )

Definition at line 33 of file ZdcMonitorAlgorithm.py.

33 def create_vinj_bins():
34 
35  # Define min, max, and step size for each range
36  min1, max1, step1 = 0.0005 - 0.000001, 0.0025 - 0.000001, 0.00005
37  min2, max2, step2 = 0.0025 - 0.000001, 0.01 - 0.000001, 0.00025
38  min3, max3, step3 = 0.01 - 0.000001, 0.3 - 0.000001, 0.0025
39  min4, max4, step4 = 0.3 - 0.000001, 0.675 - 0.000001, 0.0125
40  min5, max5, step5 = 0.675 - 0.000001, 2.500001, 0.025
41 
42  # Generate each range using the defined variables
43  range1 = np.arange(min1, max1, step1)
44  range2 = np.arange(min2, max2, step2)
45  range3 = np.arange(min3, max3, step3)
46  range4 = np.arange(min4, max4, step4)
47  range5 = np.arange(min5, max5, step5)
48 
49  # Concatenate the ranges into a single array
50  vinj_bins_array = np.concatenate((np.array([0.]), range1, range2, range3, range4, range5))
51 
52  return vinj_bins_array.tolist()
53 

◆ ZdcMonitoringConfig()

def ZdcMonitorAlgorithm.ZdcMonitoringConfig (   inputFlags)

Definition at line 87 of file ZdcMonitorAlgorithm.py.

87 def ZdcMonitoringConfig(inputFlags):
88 
89  from AthenaMonitoring import AthMonitorCfgHelper
90  helper = AthMonitorCfgHelper(inputFlags,'ZdcAthMonitorCfg')
91 
92  from AthenaConfiguration.ComponentFactory import CompFactory
93  zdcMonAlg = helper.addAlgorithm(CompFactory.ZdcMonitorAlgorithm,'ZdcMonAlg')
94 
95  from ZdcRec.ZdcRecConfig import SetConfigTag
96  config = SetConfigTag(inputFlags)
97  print ('ZdcMonitorAlgorithm.py: Running with config tag ', config)
98 
99  # Edit properties of a algorithm
100  zdcMonAlg.EnableZDCSingleSideTriggers = inputFlags.DQ.useTrigger and inputFlags.Input.TriggerStream == 'calibration_ZDCCalib' # added for online: enable trigger if we are running in ATLAS partition (DQ.useTrigger flag not set offline)
101  zdcMonAlg.CalInfoOn = inputFlags.Input.TriggerStream == 'physics_MinBias' or inputFlags.Input.TriggerStream == 'express_express' or inputFlags.Input.TriggerStream == 'physics_UCC' # turn calorimeter info on if input triggerstream (autoconfigured from input file) is physics_MinBias / express_express / physics_UCC
102  zdcMonAlg.EnableUCCTriggers = inputFlags.DQ.useTrigger and inputFlags.Input.TriggerStream == 'physics_UCC'
103  zdcMonAlg.IsOnline = inputFlags.Common.isOnline # if running online select a subset of histograms & use coarser binnings
104  zdcMonAlg.IsInjectedPulse = inputFlags.Input.TriggerStream == 'calibration_ZDCInjCalib' or inputFlags.Input.TriggerStream == 'calibration_DcmDummyProcessor'
105  zdcMonAlg.IsStandalone = inputFlags.Input.TriggerStream == 'calibration_DcmDummyProcessor'
106  zdcMonAlg.IsPPMode = 'pp' in config
107 
108  zdcMonAlg.RunNumber = inputFlags.Input.RunNumbers[0] if len(inputFlags.Input.RunNumbers) > 0 else 0
109  if (len(inputFlags.Input.RunNumbers) == 0):
110  print ('ZdcMonitorAlgorithm.py: WARNING the list in the input flag Input.RunNumbers is empty - run number not set! Likely to use default pulser setting')
111  elif (len(inputFlags.Input.RunNumbers) > 1):
112  print ('ZdcMonitorAlgorithm.py: WARNING the list in the input flag Input.RunNumbers has more than one element - retrieving pulser-setting configuration using the first run number! May cause misconfiguration for the other run numbers')
113 
114  zdcMonAlg.EnableZDC = inputFlags.Detector.EnableZDC_ZDC
115  zdcMonAlg.EnableZDCPhysics = zdcMonAlg.EnableZDC and not zdcMonAlg.IsInjectedPulse # no physical pulse (neutrons) for injector pulse
116  zdcMonAlg.EnableRPD = inputFlags.Detector.EnableZDC_RPD and not zdcMonAlg.IsInjectedPulse
117  zdcMonAlg.EnableRPDAmp = zdcMonAlg.EnableRPD
118  zdcMonAlg.EnableCentroid = zdcMonAlg.EnableRPD
119 
120  print ("ZdcMonitorAlgorithm.py: IsInjectedPulse? ",zdcMonAlg.IsInjectedPulse)
121  print ("ZdcMonitorAlgorithm.py: IsPPMode? ",zdcMonAlg.IsPPMode)
122 
123 # --------------------------------------------------------------------------------------------------
124  # Configure histograms
125 
126  # (potentially run-type dependent) range settings
127  lumi_block_max = 2000
128  n_lumi_block_bins_coarse = 400
129  bcid_max = 3564
130  n_energy_bins_default = 200
131  n_fpga_bins = 204
132  n_time_centroid_bins_default = 100
133  n_module_amp_coarse_bins = 100
134  n_module_amp_fine_bins = 200
135  n_mod_fraction_bins_default = 100
136 
137  n_HG_LG_amp_ratio_bins = 120
138  n_HG_LG_time_diff_bins = 50
139 
140  module_chisq_min = 0.1
141  module_chisq_max = 800000
142  module_chisq_nbins = 80
143  module_chisq_over_amp_min = 0.01
144  module_chisq_over_amp_max = 3000
145  module_chisq_over_amp_nbins = 80
146  module_chisq_over_amp_linear_max = 50
147  module_chisq_over_amp_linear_nbins = 200
148 
149 
150  # to ensure the logarithmic binning in C++ algorithm agrees with python
151  # so that the inverse-bin-width weight calculation is correct
152  zdcMonAlg.ZDCModuleChisqHistMinValue = module_chisq_min
153  zdcMonAlg.ZDCModuleChisqHistMaxvalue = module_chisq_max
154  zdcMonAlg.ZDCModuleChisqHistNumBins = module_chisq_nbins
155  zdcMonAlg.ZDCModuleChisqOverAmpHistMinValue = module_chisq_over_amp_min
156  zdcMonAlg.ZDCModuleChisqOverAmpHistMaxvalue = module_chisq_over_amp_max
157  zdcMonAlg.ZDCModuleChisqOverAmpHistNumBins = module_chisq_over_amp_nbins
158 
159  zdcMonAlg.EnergyCutForModuleFractMonitor = 402 if zdcMonAlg.IsPPMode else 13400
160  zdcMonAlg.triggerSideA = "L1_ZDC_PP_A" if zdcMonAlg.IsPPMode else "L1_ZDC_A"
161  zdcMonAlg.triggerSideC = "L1_ZDC_PP_C" if zdcMonAlg.IsPPMode else "L1_ZDC_C"
162 
163  amp_LG_refit_max_ADC = module_FPGA_max_ADC
164 
165  fCal_single_side_min = -0.2
166  fCal_single_side_max = 2.8
167  fCal_sum_min = -0.5
168  fCal_sum_max = 5.5
169  fCal_single_side_nbins = 240
170  fCal_sum_nbins = 240
171 
172  energy_sum_zoomin_nbins = 200
173  energy_sum_1n_nbins = 350
174  energy_sum_1n_xmin = 1000.
175  energy_sum_1n_xmax = 4500.
176 
177  if config == "LHCf2022":
178  print ("looking at 2022 lhcf data")
179  energy_sum_xmax = 3000
180  energy_sum_two_sides_xmax_TeV = 10.0
181  energy_sum_single_side_xmax_TeV = 5.0
182  energy_sum_zoomin_xmax = 3000
183  uncalib_amp_sum_zoomin_xmax = module_FPGA_max_ADC
184  time_in_data_buffer = 75. #75 ns (3 BCID's) in buffer
185  x_centroid_min = -500 #small amplitude sum --> large range for x, y position
186  x_centroid_max = 500
187  y_centroid_min = -50
188  y_centroid_max = 750
189  zdc_amp_sum_xmax = 3000
190  rpd_channel_amp_min = - 200.
191  rpd_amp_sum_xmax = 3000
192  rpd_max_adc_sum_xmax = 3000
193  module_amp_xmax = 2000
194  rpd_sum_adc_max = 5000
195  module_calib_amp_xmax = 5000
196  module_amp_1Nmonitor_xmax = 2000 #about 5N / 4 * 2.7TeV
197  module_calib_amp_1Nmonitor_xmax = 5000 #about 5N / 4 * 2.7TeV
198 
199  elif config == "pp2023" or config == "pp2024" or config == "Injectorpp2024":
200  print ("looking at pp reference run")
201  energy_sum_xmax = 5000
202  energy_sum_two_sides_xmax_TeV = 10.0
203  energy_sum_single_side_xmax_TeV = 5.0
204  energy_sum_zoomin_xmax = 5000
205  uncalib_amp_sum_zoomin_xmax = module_FPGA_max_ADC
206  time_in_data_buffer = 75. #75 ns (3 BCID's) in buffer
207  x_centroid_min = -20 #small amplitude sum --> large range for x, y position
208  x_centroid_max = 20
209  y_centroid_min = -20
210  y_centroid_max = 120
211  zdc_amp_sum_xmax = 5000
212  rpd_channel_amp_min = - 200.
213  rpd_amp_sum_xmax = 5000
214  rpd_max_adc_sum_xmax = 5000
215  module_amp_xmax = module_FPGA_max_ADC
216  rpd_sum_adc_max = 5000.
217  module_calib_amp_xmax = 5000
218  module_amp_1Nmonitor_xmax = 2000 #about 5N / 4 * 2.7TeV
219  module_calib_amp_1Nmonitor_xmax = 5000 #about 5N / 4 * 2.7TeV
220 
221  elif config == "PbPb2023" or config == "PbPb2024" or config == "InjectorPbPb2024":
222  print ("looking at pbpb run")
223  energy_sum_xmax = 200000.0
224  energy_sum_two_sides_xmax_TeV = 400.0
225  energy_sum_single_side_xmax_TeV = 200.0
226  energy_sum_zoomin_xmax = 13000.0
227  uncalib_amp_sum_zoomin_xmax = 7200.0
228  time_in_data_buffer = 75. #75 ns (3 BCID's) in buffer
229  x_centroid_min = -20 #small amplitude sum --> large range for x, y position
230  x_centroid_max = 20
231  y_centroid_min = -20
232  y_centroid_max = 60
233  zdc_amp_sum_xmax = 163840.0
234  rpd_channel_amp_min = - 2000.
235  rpd_amp_sum_xmax = 245760.0 #not the full range but a reasonable value
236  rpd_max_adc_sum_xmax = 40960.0
237  module_amp_xmax = nominal_lg_max_ADC
238  rpd_sum_adc_max = 25000.
239  module_calib_amp_xmax = 100000.0 #about the full dynamic range: 160 N / 4 * 2.5TeV
240  module_amp_1Nmonitor_xmax = 1250.0 #about 5N / 4 * 2.7TeV
241  module_calib_amp_1Nmonitor_xmax = 3400.0 #about 5N / 4 * 2.7TeV
242 
243 
244  hg_lg_amp_ratio_min_nominal = 0.6
245  hg_lg_amp_ratio_min_tight = 0.9
246  hg_lg_amp_ratio_max_nominal = 1.4
247  hg_lg_amp_ratio_max_tight = 1.2
248 
249  # #bins for RPD channel amplitude, including negative values - determined by the ratio between the negative amplitude range & positive amplitude range
250  rpd_sub_amp_min = - module_amp_xmax / 4.
251  rpd_sub_amp_max = module_amp_xmax / 2.
252  n_rpd_amp_bins_full_range = int((abs(rpd_channel_amp_min) + rpd_sum_adc_max) / rpd_sum_adc_max * n_energy_bins_default)
253  n_rpd_sub_amp_bins = int((abs(rpd_sub_amp_min) + rpd_sub_amp_max) / rpd_sub_amp_max * n_energy_bins_default)
254 
255 # --------------------------------------------------------------------------------------------------
256 # ----------------------------------- General ZDC observables -----------------------------------
257 # --------- Event-level observables / decoding error monitoring / A-C side correlations ---------
258 # --------------------------------------------------------------------------------------------------
259 
260  genZdcMonTool = helper.addGroup(zdcMonAlg, 'genZdcMonTool', topPath = 'ZDC')
261 
262  nDecodingErrorBits = 3
263  nUCCTrigBits = 7
264 
265  genZdcMonTool.defineHistogram('decodingErrorBits',title=';;Events',
266  path='/EXPERT/Global/DecodingErrors',
267  opt='kVec',
268  xbins=nDecodingErrorBits,xmin=0.0,xmax=nDecodingErrorBits,
269  xlabels=['No Decoding Error', 'ZDC Decoding Error', 'RPD Decoding Error'])
270 
271  genZdcMonTool.defineHistogram('uccTrigBits',title=';;Events',
272  path='/EXPERT/Global/UCCTrigs',
273  opt='kVec',
274  xbins=nUCCTrigBits,xmin=0.0,xmax=nUCCTrigBits,
275  xlabels=['UCC Trig Enabled', 'Pass HELT50', 'Pass HELT35', 'Pass HELT25', 'Pass HELT20', 'Pass HELT15', 'UCC Trig Disabled'])
276 
277  if (zdcMonAlg.EnableCentroid):
278  genZdcMonTool.defineHistogram('rpdCosDeltaReactionPlaneAngle', title=';Cos (#Delta #phi_{AorC});Events',
279  path='/EXPERT/Global/ReactionPlane',
280  cutmask='bothHasCentroid', # only require both sides to have centroid
281  xbins=n_time_centroid_bins_default,xmin=-1,xmax=1)
282  if (not zdcMonAlg.IsOnline):
283  genZdcMonTool.defineHistogram('rpdCosDeltaReactionPlaneAngle;rpdCosDeltaReactionPlaneAngle_requireValid', title=';Cos (#Delta #phi_{AorC});Events',
284  path='/EXPERT/Global/ReactionPlane',
285  cutmask='bothReactionPlaneAngleValid', # require centroid calculation on both sides to be valid
286  xbins=n_time_centroid_bins_default,xmin=-1,xmax=1)
287 
288  if (zdcMonAlg.EnableZDCPhysics):
289  genZdcMonTool.defineHistogram('zdcEnergySumA, zdcEnergySumC', type='TH2F', title=';E_{ZDC,A} [GeV];E_{ZDC,C} [GeV]',
290  path='/EXPERT/Global/SideACCorr',
291  xbins=n_energy_bins_default,xmin=0.0,xmax=energy_sum_xmax,
292  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_xmax)
293 
294  # FCal E_T vs ZDC E_T
295  # to be run on min bias stream
296  if (zdcMonAlg.CalInfoOn):
297  genZdcMonTool.defineHistogram('fcalEtA, fcalEtC', type='TH2F', title=';E_{FCal, A} [GeV];E_{FCal, C} [GeV]',
298  path='/EXPERT/Global/SideACCorr',
299  xbins=fCal_single_side_nbins,xmin=fCal_single_side_min,xmax=fCal_single_side_max,
300  ybins=fCal_single_side_nbins,ymin=fCal_single_side_min,ymax=fCal_single_side_max)
301 
302  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcEnergySumTwoSidesTeV;zdcEnergySum_vs_fCalEt', type='TH2F', title=';FCal Energy [TeV];ZDC Energy [TeV]',
303  path = '/EXPERT/Global/ZDCFcalCorr',
304  opt='kAlwaysCreate',
305  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
306  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
307 
308  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcHadronicEnergySumTwoSidesTeV;zdcHadronicEnergySum_vs_fCalEt', type='TH2F', title=';FCal Energy [TeV];ZDC Hadronic Energy [TeV]',
309  path = '/EXPERT/Global/ZDCHEFcalCorr',
310  opt='kAlwaysCreate',
311  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
312  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
313 
314  if (zdcMonAlg.EnableUCCTriggers):
315  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcEnergySumTwoSidesTeV;zdcEnergySum_vs_fCalEt_passUCCTrig_HELT15', type='TH2F', title=';FCal Energy [TeV];ZDC Energy [TeV]',
316  path = '/EXPERT/Global/ZDCFcalCorr',
317  cutmask = 'passUCCTrig_HELT15',
318  opt='kAlwaysCreate',
319  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
320  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
321  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcEnergySumTwoSidesTeV;zdcEnergySum_vs_fCalEt_passUCCTrig_HELT20', type='TH2F', title=';FCal Energy [TeV];ZDC Energy [TeV]',
322  path = '/EXPERT/Global/ZDCFcalCorr',
323  cutmask = 'passUCCTrig_HELT20',
324  opt='kAlwaysCreate',
325  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
326  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
327  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcEnergySumTwoSidesTeV;zdcEnergySum_vs_fCalEt_passUCCTrig_HELT25', type='TH2F', title=';FCal Energy [TeV];ZDC Energy [TeV]',
328  path = '/EXPERT/Global/ZDCFcalCorr',
329  cutmask = 'passUCCTrig_HELT25',
330  opt='kAlwaysCreate',
331  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
332  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
333  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcEnergySumTwoSidesTeV;zdcEnergySum_vs_fCalEt_passUCCTrig_HELT35', type='TH2F', title=';FCal Energy [TeV];ZDC Energy [TeV]',
334  path = '/EXPERT/Global/ZDCFcalCorr',
335  cutmask = 'passUCCTrig_HELT35',
336  opt='kAlwaysCreate',
337  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
338  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
339  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcEnergySumTwoSidesTeV;zdcEnergySum_vs_fCalEt_passUCCTrig_HELT50', type='TH2F', title=';FCal Energy [TeV];ZDC Energy [TeV]',
340  path = '/EXPERT/Global/ZDCFcalCorr',
341  cutmask = 'passUCCTrig_HELT50',
342  opt='kAlwaysCreate',
343  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
344  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
345 
346  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcHadronicEnergySumTwoSidesTeV;zdcHadronicEnergySum_vs_fCalEt_passUCCTrig_HELT15', type='TH2F', title=';FCal Energy [TeV];ZDC Hadronic Energy [TeV]',
347  path = '/EXPERT/Global/ZDCHEFcalCorr',
348  cutmask = 'passUCCTrig_HELT15',
349  opt='kAlwaysCreate',
350  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
351  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
352  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcHadronicEnergySumTwoSidesTeV;zdcHadronicEnergySum_vs_fCalEt_passUCCTrig_HELT20', type='TH2F', title=';FCal Energy [TeV];ZDC Hadronic Energy [TeV]',
353  path = '/EXPERT/Global/ZDCHEFcalCorr',
354  cutmask = 'passUCCTrig_HELT20',
355  opt='kAlwaysCreate',
356  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
357  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
358  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcHadronicEnergySumTwoSidesTeV;zdcHadronicEnergySum_vs_fCalEt_passUCCTrig_HELT25', type='TH2F', title=';FCal Energy [TeV];ZDC Hadronic Energy [TeV]',
359  path = '/EXPERT/Global/ZDCHEFcalCorr',
360  cutmask = 'passUCCTrig_HELT25',
361  opt='kAlwaysCreate',
362  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
363  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
364  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcHadronicEnergySumTwoSidesTeV;zdcHadronicEnergySum_vs_fCalEt_passUCCTrig_HELT35', type='TH2F', title=';FCal Energy [TeV];ZDC Hadronic Energy [TeV]',
365  path = '/EXPERT/Global/ZDCHEFcalCorr',
366  cutmask = 'passUCCTrig_HELT35',
367  opt='kAlwaysCreate',
368  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
369  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
370  genZdcMonTool.defineHistogram('fcalEtSumTwoSides, zdcHadronicEnergySumTwoSidesTeV;zdcHadronicEnergySum_vs_fCalEt_passUCCTrig_HELT50', type='TH2F', title=';FCal Energy [TeV];ZDC Hadronic Energy [TeV]',
371  path = '/EXPERT/Global/ZDCHEFcalCorr',
372  cutmask = 'passUCCTrig_HELT50',
373  opt='kAlwaysCreate',
374  xbins=fCal_sum_nbins,xmin=fCal_sum_min,xmax=fCal_sum_max,
375  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_two_sides_xmax_TeV)
376 
377 # --------------------------------------------------------------------------------------------------
378  sides = ["C","A"]
379  modules = ["0","1","2","3"]
380  channels = ["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15"]
381 
382  nZdcStatusBits = 18
383  nRpdStatusBits = 15
384  nRpdCentroidStatusBits = 21
385 
386 # --------------------------------------------------------------------------------------------------
387 # ---------------------------------- Per-ZDC-arm/side observables ----------------------------------
388 # --------------------------------------------------------------------------------------------------
389 
390  if (zdcMonAlg.EnableZDCPhysics or zdcMonAlg.EnableRPDAmp or zdcMonAlg.EnableCentroid):
391 
392  zdcSideMonToolArr = helper.addArray([sides],zdcMonAlg,'ZdcSideMonitor', topPath = 'ZDC')
393 
394 
395  # ---------------------------- Calorimeter per-arm variables ----------------------------
396  # ---------------------------- Calorimeter energy/amplitude sum ----------------------------
397  if (zdcMonAlg.EnableZDCPhysics):
398  zdcSideMonToolArr.defineHistogram('zdcEnergySum',title='ZDC Side {0} Energy Sum;Side {0} Energy [GeV];Events',
399  path = '/EXPERT/ZDC/PerArm/Energy',
400  xbins=n_energy_bins_default,xmin=0.0,xmax=energy_sum_xmax) # 2.5TeV * 80 neutrons
401 
402  # --------------------- calibrated energy sum in the 1-to-4n-range ---------------------
403  zdcSideMonToolArr.defineHistogram('zdcEnergySum;zdcEnergySum_zoomin_noTrigSelec',title='ZDC Side {0} Energy Sum (1-to-4n, no trigger selection);Side {0} Energy[GeV];Events',
404  path = '/SHIFT/ZDC/PerArm/Energy',
405  opt='kAlwaysCreate', # always create for shift-needed histograms
406  xbins=energy_sum_zoomin_nbins,xmin=0.0,xmax=energy_sum_zoomin_xmax) # up to the "far end" of 4-neutron peak
407 
408  if (zdcMonAlg.EnableZDCSingleSideTriggers):
409  zdcSideMonToolArr.defineHistogram('zdcEnergySum;zdcEnergySum_zoomin_wTrigSelec',title='ZDC Side {0} Energy Sum (1-to-4n, require opposite-side trigger);Side {0} Energy[GeV];Events',
410  path = '/SHIFT/ZDC/PerArm/Energy',
411  opt='kAlwaysCreate', # always create for shift-needed histograms
412  cutmask = 'passTrigOppSide',
413  xbins=energy_sum_zoomin_nbins,xmin=0.0,xmax=energy_sum_zoomin_xmax) # up to the "far end" of 4-neutron peak
414 
415  # --------------------- uncalibrated amplitude sum in the 1-to-4n-range ---------------------
416  zdcSideMonToolArr.defineHistogram('zdcUncalibSum;zdcUncalibSum_zoomin_noTrigSelec',title='ZDC Side {0} Uncalibrated Amplitude Sum (1-to-4n, no trigger selection);Side {0} Amp Sum [ADC];Events',
417  path = '/EXPERT/ZDC/PerArm/UncalibAmp',
418  xbins=energy_sum_zoomin_nbins,xmin=0.0,xmax=uncalib_amp_sum_zoomin_xmax) # up to the "far end" of 4-neutron peak
419 
420  if (zdcMonAlg.EnableZDCSingleSideTriggers):
421  zdcSideMonToolArr.defineHistogram('zdcUncalibSum;zdcUncalibSum_zoomin_wTrigSelec',title='ZDC Side {0} Uncalibrated Amplitude Sum (1-to-4n, require opposite-side trigger);Side {0} Amp Sum [ADC];Events',
422  path = '/EXPERT/ZDC/PerArm/UncalibAmp',
423  cutmask = 'passTrigOppSide',
424  xbins=energy_sum_zoomin_nbins,xmin=0.0,xmax=uncalib_amp_sum_zoomin_xmax) # up to the "far end" of 4-neutron peak
425 
426  # --------------------- uncalibrated amplitude sum in the full range ---------------------
427  zdcSideMonToolArr.defineHistogram('zdcUncalibSum',title='ZDC Side {0} Uncalibrated Sum;[ADC];Events',
428  path = '/EXPERT/ZDC/PerArm/UncalibAmp',
429  xbins=n_energy_bins_default,xmin=0.0,xmax=zdc_amp_sum_xmax)
430 
431  # ---------------------------- Calorimeter energy/amplitude sum: LB dependence ----------------------------
432  if (not zdcMonAlg.IsOnline): # offline - use fine LB binnings
433  zdcSideMonToolArr.defineHistogram('lumiBlock, zdcEnergySum;zdcEnergySum_vs_lb_noTrig', type='TH2F', title=';lumi block;Side {0} Energy [GeV]',
434  path = '/EXPERT/ZDC/PerArm/Energy',
435  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
436  ybins=energy_sum_zoomin_nbins,ymin=0.0,ymax=energy_sum_zoomin_xmax) # for lumi dependence, only focus on the few-neutron peaks
437  if (zdcMonAlg.EnableZDCSingleSideTriggers):
438  zdcSideMonToolArr.defineHistogram('lumiBlock, zdcEnergySum;zdcEnergySum_vs_lb_wTrig', type='TH2F', title=';lumi block;Side {0} Energy [GeV]',
439  path = '/EXPERT/ZDC/PerArm/Energy',
440  cutmask = 'passTrigOppSide',
441  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
442  ybins=energy_sum_zoomin_nbins,ymin=0.0,ymax=energy_sum_zoomin_xmax) # for lumi dependence, only focus on the few-neutron peaks
443  else: # online - use coarse LB binnings
444  zdcSideMonToolArr.defineHistogram('zdcEnergySum;zdcEnergySum_1n_noTrigSelec',title='ZDC Side {0} Energy Sum (1n range, no trigger selection);Side {0} Energy[GeV];Events',
445  path = '/SHIFT/ZDC/PerArm/Energy',
446  opt='kAlwaysCreate', # always create for shift-needed histograms
447  xbins=energy_sum_1n_nbins,xmin=energy_sum_1n_xmin,xmax=energy_sum_1n_xmax)
448 
449  zdcSideMonToolArr.defineHistogram('lumiBlock, zdcEnergySum;zdcEnergySum_1n_vs_lb_noTrig', type='TH2F', title=';lumi block;Side {0} Energy (1n range) [GeV]',
450  path = '/EXPERT/ZDC/PerArm/Energy',
451  xbins=n_lumi_block_bins_coarse,xmin=0.0,xmax=lumi_block_max,
452  ybins=energy_sum_1n_nbins,ymin=energy_sum_1n_xmin,ymax=energy_sum_1n_xmax)
453 
454  if (not zdcMonAlg.IsOnline): #only offline
455  zdcSideMonToolArr.defineHistogram('lumiBlock, zdcUncalibSum;zdcUncalibSum_vs_lb_noTrig', type='TH2F', title=';lumi block;ZDC Side {0} Uncalibrated Sum [ADC]',
456  path = '/EXPERT/ZDC/PerArm/UncalibAmp',
457  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
458  ybins=n_energy_bins_default,ymin=0.0,ymax=uncalib_amp_sum_zoomin_xmax) # for lumi dependence, only focus on the few-neutron peaks
459  if (zdcMonAlg.EnableZDCSingleSideTriggers):
460  zdcSideMonToolArr.defineHistogram('lumiBlock, zdcUncalibSum;zdcUncalibSum_vs_lb_wTrig', type='TH2F', title=';lumi block;ZDC Side {0} Uncalibrated Sum [ADC]',
461  path = '/EXPERT/ZDC/PerArm/UncalibAmp',
462  cutmask = 'passTrigOppSide',
463  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
464  ybins=n_energy_bins_default,ymin=0.0,ymax=uncalib_amp_sum_zoomin_xmax) # for lumi dependence, only focus on the few-neutron peaks
465 
466  # ---------------------------- Calorimeter energy/amplitude sum: BCID dependence ----------------------------
467  if (not zdcMonAlg.IsOnline): #only offline
468  zdcSideMonToolArr.defineHistogram('bcid, zdcEnergySum;zdcEnergySum_vs_bcid_noTrig', type='TH2F', title=';BCID;Side {0} Energy [GeV]',
469  path = '/EXPERT/ZDC/PerArm/Energy',
470  xbins=bcid_max,xmin=0.0,xmax=bcid_max,
471  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_zoomin_xmax) # for lumi dependence, only focus on the few-neutron peaks
472  if (zdcMonAlg.EnableZDCSingleSideTriggers):
473  zdcSideMonToolArr.defineHistogram('bcid, zdcEnergySum;zdcEnergySum_vs_bcid_wTrig', type='TH2F', title=';BCID;Side {0} Energy [GeV]',
474  path = '/EXPERT/ZDC/PerArm/Energy',
475  cutmask = 'passTrigOppSide',
476  xbins=bcid_max,xmin=0.0,xmax=bcid_max,
477  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_zoomin_xmax) # for lumi dependence, only focus on the few-neutron peaks
478 
479  if (zdcMonAlg.CalInfoOn):
480  zdcSideMonToolArr.defineHistogram('fCalEt, zdcEnergySumTeV;zdcEnergySum_vs_fCalEt_single_side', type='TH2F', title=';Side {0} FCal Energy [TeV];Side {0} ZDC Energy [TeV]',
481  path = '/EXPERT/ZDC/PerArm/ZDCFcalCorr',
482  opt='kAlwaysCreate',
483  xbins=fCal_single_side_nbins,xmin=fCal_single_side_min,xmax=fCal_single_side_max,
484  ybins=n_energy_bins_default,ymin=0.0,ymax=energy_sum_single_side_xmax_TeV)
485 
486 
487  # ---------------------------- Calorimeter average time & LB dependence ----------------------------
488 
489  zdcSideMonToolArr.defineHistogram('zdcAvgTime',title='ZDC Side Average Time;t[ns];Events',
490  path = '/EXPERT/ZDC/PerArm/AvgTime',
491  xbins=n_time_centroid_bins_default,xmin=-10.0,xmax=10.0)
492 
493  if (not zdcMonAlg.IsOnline): #only offline
494  zdcSideMonToolArr.defineHistogram('lumiBlock, zdcAvgTime;zdcAvgTime_vs_lb', type='TH2F', title=';ZDC Side Average Time versus Lumi block;lumi block;t[ns]',
495  path = '/EXPERT/ZDC/PerArm/AvgTime',
496  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
497  ybins=n_time_centroid_bins_default,ymin=-10.0,ymax=10.0)
498 
499  # ---------------------------- RPD (centroid-related) per-arm variables ----------------------------
500  # ---------------------------- centroid status ----------------------------
501  zdcSideMonToolArr.defineHistogram('centroidStatusBits',title=';;Events',
502  path='/EXPERT/RPD/PerArm/Centroid',
503  xbins=nRpdCentroidStatusBits,xmin=0.0,xmax=nRpdCentroidStatusBits,
504  opt='kVec',
505  xlabels=['ValidBit', 'HasCentroidBit', 'ZDCInvalidBit', 'InsufficientZDCEnergyBit', 'ExcessiveZDCEnergyBit', 'EMInvalidBit', 'InsufficientEMEnergyBit', 'ExcessiveEMEnergyBit', 'RPDInvalidBit', 'PileupBit', 'ExcessivePileupBit', 'ZeroSumBit', 'ExcessiveSubtrUnderflowBit', 'Row0ValidBit', 'Row1ValidBit', 'Row2ValidBit', 'Row3ValidBit', 'Col0ValidBit', 'Col1ValidBit', 'Col2ValidBit', 'Col3ValidBit'])
506 
507  zdcSideMonToolArr.defineHistogram('centroidValidBitFloat;centroidValidBit_RequireMinZDCEnergy',title='Centroid valid bit;;Events',
508  path='/SHIFT/RPD/PerArm/Centroid',
509  opt='kAlwaysCreate', # always create for shift-needed histograms
510  cutmask='passMinZDCEnergyCutForCentroidValidEvaluation',
511  xbins=2,xmin=0,xmax=2,
512  xlabels=['Valid','Invalid'])
513 
514  # ---------------------------- x, y centroid & reaction plane angle requiring centroid ValidBit ----------------------------
515  zdcSideMonToolArr.defineHistogram('xCentroid',title=';Centroid x position [mm];Events',
516  path='/SHIFT/RPD/PerArm/Centroid',
517  opt='kAlwaysCreate', # always create for shift-needed histograms
518  cutmask='centroidValid',
519  xbins=n_time_centroid_bins_default,xmin=x_centroid_min,xmax=x_centroid_max)
520 
521  zdcSideMonToolArr.defineHistogram('yCentroid',title=';Centroid y position [mm];Events',
522  path='/SHIFT/RPD/PerArm/Centroid',
523  opt='kAlwaysCreate', # always create for shift-needed histograms
524  cutmask='centroidValid',
525  xbins=n_time_centroid_bins_default*2,xmin=y_centroid_min,xmax=y_centroid_max)
526 
527  zdcSideMonToolArr.defineHistogram('xCentroid, yCentroid',type='TH2F',title=';Centroid x position [mm];Centroid y position [mm]',
528  path='/EXPERT/RPD/PerArm/Centroid',
529  cutmask='centroidValid',
530  xbins=n_time_centroid_bins_default,xmin=x_centroid_min,xmax=x_centroid_max,
531  ybins=n_time_centroid_bins_default*2,ymin=y_centroid_min,ymax=y_centroid_max)
532 
533  zdcSideMonToolArr.defineHistogram('ReactionPlaneAngle',title=';Reaction Plane Angle;Events',
534  path='/EXPERT/RPD/PerArm/ReactionPlane',
535  cutmask='centroidValid',
536  xbins=64,xmin=-3.141593,xmax=3.141593)
537 
538  # ---------------------------- x, y centroid & reaction plane angle requiring only HasCentroidBit ----------------------------
539 
540  if (not zdcMonAlg.IsOnline): #only offline
541  zdcSideMonToolArr.defineHistogram('xCentroid, yCentroid;yCentroid_vs_xCentroid_requireOnlyHasCentroidBit',type='TH2F',title=';Centroid x position [mm];Centroid y position [mm]',
542  path='/EXPERT/RPD/PerArm/Centroid',
543  xbins=n_time_centroid_bins_default,xmin=x_centroid_min,xmax=x_centroid_max,
544  ybins=n_time_centroid_bins_default,ymin=y_centroid_min,ymax=y_centroid_max)
545  zdcSideMonToolArr.defineHistogram('ReactionPlaneAngle;ReactionPlaneAngle_requireOnlyHasCentroidBit',title=';Reaction Plane Angle;Events',
546  path='/EXPERT/RPD/PerArm/ReactionPlane',
547  xbins=64,xmin=-3.141593,xmax=3.141593)
548 
549 
550  # ---------------------------- Centroid LB dependence ----------------------------
551  if (not zdcMonAlg.IsOnline): #only offline
552  zdcSideMonToolArr.defineHistogram('lumiBlock, xCentroid;xCentroid_vs_lb_requireOnlyHasCentroidBit', type='TH2F', title=';lumi block;Centroid x position [mm]',
553  path='/EXPERT/RPD/PerArm/CentroidLBdep',
554  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
555  ybins=n_time_centroid_bins_default,ymin=x_centroid_min,ymax=x_centroid_max)
556  zdcSideMonToolArr.defineHistogram('lumiBlock, yCentroid;yCentroid_vs_lb_requireOnlyHasCentroidBit', type='TH2F', title=';lumi block;Centroid y position [mm]',
557  path='/EXPERT/RPD/PerArm/CentroidLBdep',
558  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
559  ybins=n_time_centroid_bins_default,ymin=y_centroid_min,ymax=y_centroid_max)
560 
561  zdcSideMonToolArr.defineHistogram('lumiBlock, xCentroid;xCentroid_vs_lb', type='TH2F', title=';lumi block;Centroid x position [mm]',
562  path='/EXPERT/RPD/PerArm/CentroidLBdep',
563  cutmask='centroidValid',
564  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
565  ybins=n_time_centroid_bins_default,ymin=x_centroid_min,ymax=x_centroid_max)
566  zdcSideMonToolArr.defineHistogram('lumiBlock, yCentroid;yCentroid_vs_lb', type='TH2F', title=';lumi block;Centroid y position [mm]',
567  path='/EXPERT/RPD/PerArm/CentroidLBdep',
568  cutmask='centroidValid',
569  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
570  ybins=n_time_centroid_bins_default,ymin=y_centroid_min,ymax=y_centroid_max)
571 
572  # ---------------------------- ZDC-RPD correlations ----------------------------
573  zdcSideMonToolArr.defineHistogram('zdcEnergySum, rpdMaxADCSum', type='TH2F', title=';E ZDC side [TeV];RPD Max ADC Sum (AorC) [ADC counts]',
574  path='/EXPERT/ZdcRpdPerSideCorr',
575  cutmask='RPDSideValid',
576  xbins=n_energy_bins_default,xmin=0.0,xmax=energy_sum_xmax,
577  ybins=n_energy_bins_default,ymin=0.0,ymax=rpd_max_adc_sum_xmax) # try a value for now
578  zdcSideMonToolArr.defineHistogram('zdcEnergySum, rpdAmplitudeCalibSum', type='TH2F', title=';E ZDC side [GeV];RPD Calib Amp Sum (AorC) [ADC counts]',
579  path='/EXPERT/ZdcRpdPerSideCorr',
580  cutmask='RPDSideValid',
581  xbins=n_energy_bins_default,xmin=0.0,xmax=energy_sum_xmax,
582  ybins=n_energy_bins_default,ymin=0.0,ymax=rpd_amp_sum_xmax) # try a value for now
583  zdcSideMonToolArr.defineHistogram('zdcEMModuleEnergy, rpdAmplitudeCalibSum', type='TH2F', title=';E EM module AorC [GeV];RPD Calib Amp Sum (AorC) [ADC counts]',
584  path='/EXPERT/ZdcRpdPerSideCorr',
585  cutmask='RPDSideValid',
586  xbins=n_energy_bins_default,xmin=0.0,xmax=module_calib_amp_xmax / 2., # divide by 2 to make a more zoomed-in plot (not full range)
587  ybins=n_energy_bins_default,ymin=0.0,ymax=rpd_amp_sum_xmax) # try a value for now
588 
589 # --------------------------------------------------------------------------------------------------
590 # ------------------------------------- ZDC-module observables -------------------------------------
591 # --------------------------------------------------------------------------------------------------
592 
593 
594  zdcModuleMonToolArr = helper.addArray([sides,modules],zdcMonAlg,'ZdcModuleMonitor', topPath = 'ZDC')
595 
596  # ---------------------------- ZDC-module status ----------------------------
597 
598  zdcModuleMonToolArr.defineHistogram('zdcStatusBits',title=';;Events',
599  path='/SHIFT/ZDC/ZdcModule/ModuleStatusBits',
600  opt='kAlwaysCreate kVec', # always create for shift-needed histograms
601  xbins=nZdcStatusBits,xmin=0.0,xmax=nZdcStatusBits,
602  xlabels=['PulseBit', 'LowGainBit', 'FailBit', 'HGOverflowBit', 'HGUnderflowBit', 'PSHGOverUnderflowBit', 'LGOverflowBit', 'LGUnderflowBit', 'PrePulseBit', 'PostPulseBit', 'FitFailedBit', 'BadChisqBit', 'BadT0Bit', 'ExcludeEarlyLGBit', 'ExcludeLateLGBit', 'preExpTailBit', 'FitMinAmpBit', 'RepassPulseBit'])
603 
604  # ---------------------------- ZDC-module amplitudes & amplitude fractions ----------------------------
605 
606  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp',title=';Module Amplitude [ADC Counts];Events',
607  path='/SHIFT/ZDC/ZdcModule/ModuleAmp',
608  opt='kAlwaysCreate', # always create for shift-needed histograms
609  xbins=n_fpga_bins * 2,xmin=0.0,xmax=module_amp_xmax)
610 
611  zdcModuleMonToolArr.defineHistogram('zdcModuleMaxADC',title=';Module Max ADC;Events',
612  path='/EXPERT/ZDC/ZdcModule/ModuleMaxADC',
613  xbins=n_fpga_bins,xmin=0.0,xmax=module_amp_xmax)
614 
615 
616  if (not zdcMonAlg.IsPPMode): # for PP mode data, LG never filled
617  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp;zdcModuleAmp_HG',title=';Module Amplitude HG [ADC Counts];Events',
618  path='/EXPERT/ZDC/ZdcModule/ModuleAmp',
619  cutmask='zdcModuleHG',
620  xbins=n_fpga_bins,xmin=0.0,xmax=module_FPGA_max_ADC)
621 
622  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp;zdcModuleAmp_LG',title=';Module Amplitude LG [ADC Counts];Events',
623  path='/EXPERT/ZDC/ZdcModule/ModuleAmp',
624  cutmask='zdcModuleLG', # require to use LG
625  xbins=n_fpga_bins,xmin=0.0,xmax=module_amp_xmax)
626 
627  if (zdcMonAlg.IsInjectedPulse):
628  zdcModuleMonToolArr.defineHistogram('zdcModuleAmpLGRefit',title=';LG-Refit Amplitude [ADC Counts];Events',
629  path='/EXPERT/ZDC/ZdcModule/ModuleAmp',
630  cutmask='zdcModuleHG',
631  xbins=n_fpga_bins,xmin=0.0,xmax=amp_LG_refit_max_ADC)
632 
633  if (not zdcMonAlg.IsOnline and not zdcMonAlg.IsInjectedPulse): # only offline
634  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp;zdcModuleAmp_halfrange',title=';Module Amplitude [ADC Counts];Events',
635  path='/EXPERT/ZDC/ZdcModule/ModuleAmp',
636  xbins=n_fpga_bins,xmin=0.0,xmax=module_amp_xmax / 2.)
637 
638 
639  if (zdcMonAlg.IsInjectedPulse or not zdcMonAlg.IsOnline):
640  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp,zdcModuleAmpToMaxADCRatio;zdcModuleAmpToMaxADCRatio_vs_zdcModuleMaxADC_HG_profile',type='TProfile',title=';Module Max ADC HG [ADC];Avg Amp/Max ADC',
641  path='/EXPERT/ZDC/ZdcModule/ModuleAmpToMaxADCRatio',
642  cutmask='zdcModuleHG',
643  xbins=n_fpga_bins,xmin=0.0,xmax=module_FPGA_max_ADC)
644 
645  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp,zdcModuleAmpToMaxADCRatio;zdcModuleAmpToMaxADCRatio_vs_zdcModuleMaxADC_HG',type='TH2F',title=';Module Max ADC HG [ADC];Avg Amp/Max ADC',
646  path='/EXPERT/ZDC/ZdcModule/ModuleAmpToMaxADCRatio',
647  cutmask='zdcModuleHG',
648  xbins=n_fpga_bins,xmin=0.0,xmax=module_FPGA_max_ADC,
649  ybins=100,ymin=0.0,ymax=2.)
650 
651  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp,zdcModuleAmpToMaxADCRatio;zdcModuleAmpToMaxADCRatio_vs_zdcModuleMaxADC_LG_profile',type='TProfile',title=';Module Max ADC LG [ADC];Avg Amp/Max ADC',
652  path='/EXPERT/ZDC/ZdcModule/ModuleAmpToMaxADCRatio',
653  cutmask='zdcModuleLG',
654  xbins=n_fpga_bins,xmin=0.0,xmax=nominal_lg_max_ADC) #max ADC has no LG gain factor
655 
656  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp,zdcModuleAmpToMaxADCRatio;zdcModuleAmpToMaxADCRatio_vs_zdcModuleMaxADC_LG',type='TH2F',title=';Module Max ADC LG [ADC];Avg Amp/Max ADC',
657  path='/EXPERT/ZDC/ZdcModule/ModuleAmpToMaxADCRatio',
658  cutmask='zdcModuleLG',
659  xbins=n_fpga_bins,xmin=0.0,xmax=nominal_lg_max_ADC, #max ADC has no LG gain factor
660  ybins=100,ymin=0.0,ymax=2./nominal_lg_gain_factor)
661 
662  # ---------------------------- ZDC-module amplitude fractions & correlations with energy deposits ----------------------------
663 
664  if (zdcMonAlg.IsInjectedPulse): # no real energy deposit --> do not require minimum ZDC energy
665  zdcModuleMonToolArr.defineHistogram('zdcModuleFract',title=';Module Amplitude Fraction;Events',
666  path='/SHIFT/ZDC/ZdcModule/ModuleFraction',
667  opt='kAlwaysCreate', # always create for shift-needed histograms
668  xbins=n_mod_fraction_bins_default,xmin=0.0,xmax=1.)
669  else:
670  zdcModuleMonToolArr.defineHistogram('zdcModuleFract;zdcModuleFract_above_cut',title=';Module Amplitude Fraction;Events',
671  path='/SHIFT/ZDC/ZdcModule/ModuleFraction',
672  opt='kAlwaysCreate', # always create for shift-needed histograms
673  cutmask='zdcEnergyAboveModuleFractCut',
674  xbins=n_mod_fraction_bins_default,xmin=0.0,xmax=1.)
675  zdcModuleMonToolArr.defineHistogram('zdcEnergySumCurrentSide, zdcModuleFract;zdcModuleFract_vs_zdcEnergySum_fullrange', type='TH2F', title=';ZDC Energy Sum Current Side [GeV];Module Amplitude Fraction',
676  path='/EXPERT/ZDC/ZdcModule/ModuleFractionVsEnergy',
677  xbins=n_energy_bins_default,xmin=0.0,xmax=energy_sum_xmax,
678  ybins=n_mod_fraction_bins_default,ymin=0.0,ymax=1.)
679  zdcModuleMonToolArr.defineHistogram('zdcEnergySumCurrentSide, zdcModuleFract;zdcModuleFract_vs_zdcEnergySum_profile', type='TProfile', title=';ZDC Energy Sum Current Side [GeV];Module Amplitude Fraction',
680  path='/EXPERT/ZDC/ZdcModule/ModuleFractionVsEnergy',
681  cutmask='zdcModuleFractionValid',
682  xbins=n_energy_bins_default,xmin=0.0,xmax=energy_sum_xmax)
683  zdcModuleMonToolArr.defineHistogram('zdcEnergySumCurrentSide, zdcModuleFract;zdcModuleFract_vs_zdcEnergySum_zoomedin', type='TH2F', title=';Amplitude Sum Current Side [ADC Counts];Module Amplitude Fraction',
684  path='/EXPERT/ZDC/ZdcModule/ModuleFractionVsEnergy',
685  xbins=n_energy_bins_default,xmin=0.0,xmax=10000,
686  ybins=n_mod_fraction_bins_default,ymin=0.0,ymax=1.)
687  if (not zdcMonAlg.IsOnline): # only offline
688  zdcModuleMonToolArr.defineHistogram('zdcModuleFract',title=';Module Amplitude Fraction;Events',
689  path='/EXPERT/ZDC/ZdcModule/ModuleFraction',
690  xbins=n_mod_fraction_bins_default,xmin=0.0,xmax=1.)
691  zdcModuleMonToolArr.defineHistogram('zdcModuleFract;zdcModuleFract_above20N',title=';Module Amplitude Fraction;Events',
692  path='/EXPERT/ZDC/ZdcModule/ModuleFraction',
693  cutmask='zdcAbove20NCurrentSide',
694  xbins=n_mod_fraction_bins_default,xmin=0.0,xmax=1.)
695 
696  if (not zdcMonAlg.IsInjectedPulse):
697  zdcModuleMonToolArr.defineHistogram('zdcModuleCalibAmp',title=';Module Calibrated Amplitude [GeV];Events',
698  path='/EXPERT/ZDC/ZdcModule/ModuleCalibAmp',
699  xbins=2*n_energy_bins_default,xmin=0.0,xmax=module_calib_amp_xmax) # 2.5TeV * 40
700 
701  if (not zdcMonAlg.IsOnline and not zdcMonAlg.IsInjectedPulse):
702  zdcModuleMonToolArr.defineHistogram('zdcModuleCalibAmp;zdcModuleCalibAmp_halfrange',title=';Module Calibrated Amplitude [GeV];Events',
703  path='/EXPERT/ZDC/ZdcModule/ModuleCalibAmp',
704  xbins=2*n_energy_bins_default,xmin=0.0,xmax=module_calib_amp_xmax / 2.) # 2.5TeV * 40
705 
706  # ---------------------------- ZDC-module reco amplitude versus input voltage ----------------------------
707  if (zdcMonAlg.IsInjectedPulse):
708  # ---------------------------- HG response ----------------------------
709  zdcModuleMonToolArr.defineHistogram('injectedPulseInputVoltage,zdcModuleFitAmp;zdcModuleAmpHG_vs_injectedPulseInputVoltage', type='TH2F', title=';Pulse amp [V];Signal Fit Amp [ADC Counts]',
710  cutmask='zdcHGInjPulseValid',
711  path='/EXPERT/ZDC/ZdcModule/ModuleAmpHGVsInputVoltage',
712  xbins=create_vinj_bins(),
714 
715  zdcModuleMonToolArr.defineHistogram('injectedPulseInputVoltage,zdcModuleFitAmp;zdcModuleAmpHG_vs_injectedPulseInputVoltage_profile', type='TProfile', title=';Pulse amp [V];Signal Fit Amp [ADC Counts]',
716  cutmask='zdcHGInjPulseValid',
717  path='/EXPERT/ZDC/ZdcModule/ModuleAmpHGVsInputVoltage',
718  xbins=create_vinj_bins())
719 
720  # ---------------------------- HG response max ADC ----------------------------
721 
722  zdcModuleMonToolArr.defineHistogram('injectedPulseInputVoltage,zdcModuleMaxADCHG', type='TH2F', title=';Pulse amp [V];Max ADC HG',
723  cutmask='zdcHGInjPulseValid',
724  path='/EXPERT/ZDC/ZdcModule/ModuleMaxADCHGVsInputVoltage',
725  xbins=create_vinj_bins(),
727 
728  # ---------------------------- LG response ----------------------------
729  zdcModuleMonToolArr.defineHistogram('injectedPulseInputVoltage,zdcModuleLGFitAmp;zdcModuleAmpLG_vs_injectedPulseInputVoltage', type='TH2F', title=';Pulse amp [V];Signal Fit Amp [ADC Counts]',
730  cutmask='zdcLGInjPulseValid',
731  path='/EXPERT/ZDC/ZdcModule/ModuleAmpLGVsInputVoltage',
732  xbins=create_vinj_bins(),
734 
735  zdcModuleMonToolArr.defineHistogram('injectedPulseInputVoltage,zdcModuleLGFitAmp;zdcModuleAmpLG_vs_injectedPulseInputVoltage_profile', type='TProfile', title=';Pulse amp [V];Signal Fit Amp [ADC Counts]',
736  cutmask='zdcLGInjPulseValid',
737  path='/EXPERT/ZDC/ZdcModule/ModuleAmpLGVsInputVoltage',
738  xbins=create_vinj_bins())
739 
740  # ---------------------------- LG response max ADC ----------------------------
741 
742  zdcModuleMonToolArr.defineHistogram('injectedPulseInputVoltage,zdcModuleMaxADCLG;zdcModuleMaxADCLG_vs_injectedPulseInputVoltage', type='TH2F', title=';Pulse amp [V];Max ADC LG',
743  cutmask='zdcLGInjPulseValid',
744  path='/EXPERT/ZDC/ZdcModule/ModuleMaxADCLGVsInputVoltage',
745  xbins=create_vinj_bins(),
746  ybins=create_hg_fit_amp_inj_bins()) # maxADC has no LG gain factor multiplied
747 
748  # ---------------------------- ZDC-module times ----------------------------
749 
750  zdcModuleMonToolArr.defineHistogram('zdcModuleTime',title=';Module Time [ns];Events',
751  path='/SHIFT/ZDC/ZdcModule/ModuleTime',
752  opt='kAlwaysCreate', # always create for shift-needed histograms
753  xbins=n_time_centroid_bins_default,xmin=-10.0,xmax=10.0)
754 
755  if (not zdcMonAlg.IsPPMode): # for PP mode, LG never filled
756  zdcModuleMonToolArr.defineHistogram('zdcModuleTime;zdcModuleTime_LG',title=';Module Time [ns];Events',
757  path='/SHIFT/ZDC/ZdcModule/ModuleTime',
758  opt='kAlwaysCreate', # always create for shift-needed histograms
759  cutmask='zdcModuleLG',
760  xbins=n_time_centroid_bins_default,xmin=-10.0,xmax=10.0)
761 
762  zdcModuleMonToolArr.defineHistogram('zdcModuleTime;zdcModuleTime_HG',title=';Module Time [ns];Events',
763  path='/SHIFT/ZDC/ZdcModule/ModuleTime',
764  opt='kAlwaysCreate', # always create for shift-needed histograms
765  cutmask='zdcModuleHG',
766  xbins=n_time_centroid_bins_default,xmin=-10.0,xmax=10.0)
767 
768  zdcModuleMonToolArr.defineHistogram('zdcModuleFitT0',title=';Module FitT0 [ns];Events',
769  path='/EXPERT/ZDC/ZdcModule/ModuleFitT0',
770  xbins=200,xmin=0.0,xmax=time_in_data_buffer)
771 
772  if (not zdcMonAlg.IsPPMode): # for PP mode, LG never filled
773  zdcModuleMonToolArr.defineHistogram('zdcModuleFitT0;zdcModuleFitT0_LG',title=';Module FitT0 LG [ns];Events',
774  path='/EXPERT/ZDC/ZdcModule/ModuleFitT0',
775  cutmask='zdcModuleLG',
776  xbins=n_time_centroid_bins_default,xmin=0.0,xmax=time_in_data_buffer)
777 
778  zdcModuleMonToolArr.defineHistogram('zdcModuleFitT0;zdcModuleFitT0_HG',title=';Module FitT0 HG [ns];Events',
779  path='/EXPERT/ZDC/ZdcModule/ModuleFitT0',
780  cutmask='zdcModuleHG',
781  xbins=n_time_centroid_bins_default,xmin=0.0,xmax=time_in_data_buffer)
782 
783 
784  if (not zdcMonAlg.IsOnline and not zdcMonAlg.IsInjectedPulse):
785  zdcModuleMonToolArr.defineHistogram('zdcModuleCalibTime',title=';Module Calibrated Time [ns];Events',
786  path='/EXPERT/ZDC/ZdcModule/ModuleCalibTime',
787  xbins=n_time_centroid_bins_default,xmin=-10.0,xmax=10.0)
788 
789  # ---------------------------- ZDC-module pulse-fitting chi squares (pulse fitting goodness) ----------------------------
790 
791  zdcModuleMonToolArr.defineHistogram('zdcModuleChisq',title=';Module Chi-square;Events',
792  path='/EXPERT/ZDC/ZdcModule/ModuleChisq',
793  weight='zdcModuleChisqEventWeight',
794  xbins=create_log_bins(module_chisq_min, module_chisq_max, module_chisq_nbins))
795  zdcModuleMonToolArr.defineHistogram('zdcModuleChisqOverAmp',title=';Module Chi-square / Amplitude;Events',
796  path='/SHIFT/ZDC/ZdcModule/ModuleChisq',
797  opt='kAlwaysCreate', # always create for shift-needed histograms
798  weight='zdcModuleChisqOverAmpEventWeight',
799  xbins=create_log_bins(module_chisq_over_amp_min, module_chisq_over_amp_max, module_chisq_over_amp_nbins))
800  zdcModuleMonToolArr.defineHistogram('zdcModuleChisqOverAmp;zdcModuleChisqOverAmp_linear',title=';Module Chi-square / Amplitude;Events',
801  path='/SHIFT/ZDC/ZdcModule/ModuleChisq',
802  opt='kAlwaysCreate', # always create for shift-needed histograms
803  xbins=module_chisq_over_amp_linear_nbins,xmin=0.,xmax=module_chisq_over_amp_linear_max)
804 
805  if (not zdcMonAlg.IsOnline):
806  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp, zdcModuleChisqOverAmp',type='TH2F',title=';Module Amplitude [ADC Counts];Module Chi-square / Amplitude',
807  path='/EXPERT/ZDC/ZdcModule/ModuleChisq',
808  weight='zdcModuleChisqOverAmpEventWeight',
809  xbins=n_energy_bins_default,xmin=0.0,xmax=module_amp_xmax / 2.,
810  ybins=create_log_bins(module_chisq_over_amp_min, module_chisq_over_amp_max, module_chisq_over_amp_nbins))
811 
812 
813  # ---------------------------- LG & HG comparisons ----------------------------
814  zdcModuleMonToolArr.defineHistogram('zdcModuleHGtoLGAmpRatio',title=';HG-to-LG Amplitude Raio;Events',
815  path='/SHIFT/ZDC/ZdcModule/ModuleHGLGCompr',
816  opt='kAlwaysCreate', # always create for shift-needed histograms
817  cutmask='zdcModuleHG',
818  xbins=n_HG_LG_amp_ratio_bins,xmin=hg_lg_amp_ratio_min_nominal,xmax=hg_lg_amp_ratio_max_nominal)
819 
820  if (not zdcMonAlg.IsInjectedPulse):
821  zdcModuleMonToolArr.defineHistogram('zdcModuleHGtoLGAmpRatioNoNonlinCorr',title=';HG-to-LG Amplitude Raio;Events',
822  path='/SHIFT/ZDC/ZdcModule/ModuleHGLGComprNoNonlinCorr',
823  opt='kAlwaysCreate', # always create for shift-needed histograms
824  cutmask='zdcModuleHG',
825  xbins=n_HG_LG_amp_ratio_bins,xmin=hg_lg_amp_ratio_min_nominal,xmax=hg_lg_amp_ratio_max_nominal)
826 
827  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp, zdcModuleHGtoLGAmpRatio', type='TH2F', title=';ZDC HG Amplitude [ADC Counts];HG-to-LG Amplitude Raio;Events',
828  path='/EXPERT/ZDC/ZdcModule/ModuleHGLGCompr',
829  cutmask='zdcModuleHG',
830  xbins=n_module_amp_fine_bins, xmin=0.0, xmax=module_FPGA_max_ADC,
831  ybins=n_HG_LG_amp_ratio_bins,ymin=hg_lg_amp_ratio_min_nominal,ymax=hg_lg_amp_ratio_max_nominal)
832 
833  if (not zdcMonAlg.IsInjectedPulse):
834  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp, zdcModuleHGtoLGAmpRatioNoNonlinCorr', type='TH2F', title=';ZDC HG Amplitude [ADC Counts];HG-to-LG Amplitude Raio;Events',
835  path='/EXPERT/ZDC/ZdcModule/ModuleHGLGComprNoNonlinCorr',
836  cutmask='zdcModuleHG',
837  xbins=n_module_amp_fine_bins, xmin=0.0, xmax=module_FPGA_max_ADC,
838  ybins=n_HG_LG_amp_ratio_bins,ymin=hg_lg_amp_ratio_min_nominal,ymax=hg_lg_amp_ratio_max_nominal)
839 
840  zdcModuleMonToolArr.defineHistogram('zdcModuleAmp, zdcModuleHGtoLGAmpRatio;zdcModuleHGtoLGAmpRatio_vs_zdcModuleAmp_profile', type='TProfile', title=';ZDC HG Amplitude [ADC Counts];Average HG-to-LG Amplitude Raio;Events',
841  path='/EXPERT/ZDC/ZdcModule/ModuleHGLGCompr',
842  cutmask='zdcModuleHG',
843  xbins=n_module_amp_fine_bins, xmin=0.0, xmax=module_FPGA_max_ADC)
844 
845  if (not zdcMonAlg.IsOnline):
846  zdcModuleMonToolArr.defineHistogram('zdcModuleAmpLGRefit, zdcModuleHGtoLGAmpRatio', type='TH2F', title=';ZDC LG-Refit Amplitude [ADC Counts];HG-to-LG Amplitude Raio;Events',
847  path='/EXPERT/ZDC/ZdcModule/ModuleHGLGCompr',
848  cutmask='zdcModuleHG',
849  xbins=n_module_amp_fine_bins, xmin=0.0, xmax=amp_LG_refit_max_ADC,
850  ybins=n_HG_LG_amp_ratio_bins,ymin=hg_lg_amp_ratio_min_nominal,ymax=hg_lg_amp_ratio_max_nominal)
851  zdcModuleMonToolArr.defineHistogram('zdcModuleAmpLGRefit, zdcModuleHGtoLGAmpRatio;zdcModuleHGtoLGAmpRatio_vs_zdcModuleAmpLGRefit_profile', type='TProfile', title=';ZDC LG-Refit Amplitude [ADC Counts];Average HG-to-LG Amplitude Raio;Events',
852  path='/EXPERT/ZDC/ZdcModule/ModuleHGLGCompr',
853  cutmask='zdcModuleHG',
854  xbins=n_module_amp_fine_bins, xmin=0.0, xmax=amp_LG_refit_max_ADC)
855 
856  zdcModuleMonToolArr.defineHistogram('zdcModuleHGtoLGT0Diff',title=';HG-LG T0 Difference [ns];Events',
857  path='/EXPERT/ZDC/ZdcModule/ModuleHGLGCompr',
858  cutmask='zdcModuleHG',
859  xbins=n_HG_LG_time_diff_bins,xmin=-10.0,xmax=10.0)
860 
861  zdcModuleMonToolArr.defineHistogram('zdcModuleHGtoLGT0Diff, zdcModuleHGtoLGAmpRatio', type='TH2F', title=';HG-LG T0 Difference [ns];HG-to-LG Amplitude Raio;Events',
862  path='/EXPERT/ZDC/ZdcModule/ModuleHGLGCompr',
863  cutmask='zdcModuleHG',
864  xbins=n_HG_LG_time_diff_bins,xmin=2.0,xmax=4.0, # zoomed in to see potential correlations
865  ybins=n_HG_LG_amp_ratio_bins,ymin=hg_lg_amp_ratio_min_tight,ymax=hg_lg_amp_ratio_max_tight)
866 
867 
868  # ---------------------------- LB and BCID-dep ZDC-module-level observables ----------------------------
869  # ---------------------------- ZDC-module amplitudes ----------------------------
870 
871  if (not zdcMonAlg.IsInjectedPulse):
872  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleCalibAmp;zdcModuleCalibAmp_vs_lb', type='TH2F', title=';lumi block;Module Calib Amplitude',
873  path='/EXPERT/ZDC/ZdcModule/ModuleCalibAmpLBdep',
874  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
875  ybins=n_module_amp_coarse_bins, ymin=0.0, ymax=module_calib_amp_1Nmonitor_xmax)
876  if (not zdcMonAlg.IsOnline):
877  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleAmp;zdcModuleAmp_vs_lb', type='TH2F', title=';lumi block;Module Amplitude [ADC counts]',
878  path='/EXPERT/ZDC/ZdcModule/ModuleAmpLBdep',
879  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
880  ybins=n_module_amp_coarse_bins, ymin=0.0, ymax=module_amp_1Nmonitor_xmax)
881  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleFract;zdcModuleFract_above20N_vs_lb', type='TH2F',title=';lumi block;Module Amplitude Fraction',
882  path='/EXPERT/ZDC/ZdcModule/ModuleFractionLBdep',
883  cutmask='zdcAbove20NCurrentSide',
884  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
885  ybins=n_mod_fraction_bins_default,ymin=0.0,ymax=1.)
886 
887  if (not zdcMonAlg.IsOnline and not zdcMonAlg.IsInjectedPulse):
888  zdcModuleMonToolArr.defineHistogram('bcid, zdcModuleCalibAmp', type='TH2F', title=';BCID;Module Calib Amplitude',
889  path='/EXPERT/ZDC/ZdcModule/ModuleCalibAmpBCIDdep',
890  xbins=bcid_max,xmin=0.0,xmax=bcid_max,
891  ybins=n_module_amp_coarse_bins, ymin=0.0, ymax=module_calib_amp_1Nmonitor_xmax)
892 
893  # ---------------------------- ZDC-module times ----------------------------
894 
895  if (not zdcMonAlg.IsOnline): #offline - fine binnings
896  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleTime;zdcModuleTime_vs_lb', type='TH2F', title=';lumi block;Module Time [ns]',
897  path='/EXPERT/ZDC/ZdcModule/ModuleTimeLBdep',
898  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
899  ybins=n_time_centroid_bins_default, ymin=-10.0, ymax=10.0)
900  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleTime;zdcModuleTime_LG_vs_lb', type='TH2F', title=';lumi block;Module Time [ns]',
901  path='/EXPERT/ZDC/ZdcModule/ModuleTimeLBdep',
902  cutmask='zdcModuleLG',
903  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
904  ybins=n_time_centroid_bins_default, ymin=-10.0, ymax=10.0)
905  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleTime;zdcModuleTime_HG_vs_lb', type='TH2F', title=';lumi block;Module Time [ns]',
906  path='/EXPERT/ZDC/ZdcModule/ModuleTimeLBdep',
907  cutmask='zdcModuleHG',
908  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
909  ybins=n_time_centroid_bins_default, ymin=-10.0, ymax=10.0)
910  else: #online - coarse binnings
911  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleTime;zdcModuleTime_LG_vs_lb', type='TH2F', title=';lumi block;Module Time [ns]',
912  path='/EXPERT/ZDC/ZdcModule/ModuleTimeLBdep',
913  cutmask='zdcModuleLG',
914  xbins=n_lumi_block_bins_coarse,xmin=0.0,xmax=lumi_block_max,
915  ybins=n_time_centroid_bins_default, ymin=-10.0, ymax=10.0)
916  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleTime;zdcModuleTime_HG_vs_lb', type='TH2F', title=';lumi block;Module Time [ns]',
917  path='/EXPERT/ZDC/ZdcModule/ModuleTimeLBdep',
918  cutmask='zdcModuleHG',
919  xbins=n_lumi_block_bins_coarse,xmin=0.0,xmax=lumi_block_max,
920  ybins=n_time_centroid_bins_default, ymin=-10.0, ymax=10.0)
921 
922  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleTime;zdcModuleTime_LG_vs_lb_profile', type='TProfile', title=';lumi block;Module Time [ns]',
923  path='/EXPERT/ZDC/ZdcModule/ModuleTimeLBdep',
924  cutmask='zdcModuleLGTimeValid',
925  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max)
926  zdcModuleMonToolArr.defineHistogram('lumiBlock, zdcModuleTime;zdcModuleTime_HG_vs_lb_profile', type='TProfile', title=';lumi block;Module Time [ns]',
927  path='/EXPERT/ZDC/ZdcModule/ModuleTimeLBdep',
928  cutmask='zdcModuleHGTimeValid',
929  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max)
930 
931 # --------------------------------------------------------------------------------------------------
932 # ------------------------------------ RPD-channel observables -------------------------------------
933 # --------------------------------------------------------------------------------------------------
934 
935  if (zdcMonAlg.EnableRPDAmp):
936 
937  rpdChannelMonToolArr = helper.addArray([sides,channels],zdcMonAlg,'RpdChannelMonitor', topPath = 'ZDC')
938 
939  # ---------------------------- amplitudes ----------------------------
940  rpdChannelMonToolArr.defineHistogram('RPDChannelAmplitudeCalib', title=';RPD Channel Calibrated Amplitude;Events',
941  path='/SHIFT/RPD/RPDChannel/CalibAmp',
942  opt='kAlwaysCreate', # always create for shift-needed histograms
943  cutmask='RPDChannelValid',
944  xbins=n_rpd_amp_bins_full_range,xmin=rpd_channel_amp_min,xmax=rpd_sum_adc_max) # NOT energy calibration - calibration factor is 1 for now
945  rpdChannelMonToolArr.defineHistogram('RPDChannelMaxADC', title=';Max ADC [ADC Counts];Events',
946  path='/EXPERT/RPD/RPDChannel/MaxADC',
947  cutmask='RPDChannelValid',
948  xbins=n_energy_bins_default,xmin=0.0,xmax=module_FPGA_max_ADC)
949 
950  if (not zdcMonAlg.IsOnline):
951  rpdChannelMonToolArr.defineHistogram('RPDChannelSubAmp', title=';RPD Channel Subtracted Amplitude;Events',
952  path='/EXPERT/RPD/RPDChannel/SubAmp',
953  cutmask='RPDChannelCentroidValid',
954  xbins=n_rpd_sub_amp_bins,xmin=rpd_sub_amp_min,xmax=rpd_sub_amp_max) # NOT energy calibration - calibration factor is 1 for now
955 
956  # max ADC versus sum ADC
957  if (not zdcMonAlg.IsOnline):
958  rpdChannelMonToolArr.defineHistogram('RPDChannelAmplitudeCalib,RPDChannelMaxADC', type='TH2F', title=';Sum ADC [ADC Counts];Max ADC [ADC Counts]',
959  path='/EXPERT/RPD/RPDChannel/MaxADCVsSumADC',
960  cutmask='RPDChannelValid',
961  xbins=n_rpd_amp_bins_full_range,xmin=rpd_channel_amp_min,xmax=rpd_sum_adc_max, #change to xmax=20000 for zoomed in
962  ybins=n_energy_bins_default,ymin=0.0,ymax=module_FPGA_max_ADC) # change to ymax=3000.0 for zoomed in
963  # ---------------------------- timing (max sample) ----------------------------
964  rpdChannelMonToolArr.defineHistogram('RPDChannelMaxSample', title=';Max Sample;Events',
965  path='/EXPERT/RPD/RPDChannel/MaxSample',
966  cutmask='RPDChannelValid',
967  xbins=24,xmin=0.0,xmax=24.)
968 
969 
970  # ---------------------------- status bits ----------------------------
971  rpdChannelMonToolArr.defineHistogram('RPDStatusBits',title=';;Events',
972  path='/EXPERT/RPD/RPDChannel/StatusBits',
973  xbins=nRpdStatusBits,xmin=0,xmax=nRpdStatusBits,
974  opt='kVec',
975  xlabels=['ValidBit', 'OutOfTimePileupBit', 'OverflowBit', 'PrePulseBit', 'PostPulseBit', 'NoPulseBit', 'BadAvgBaselineSubtrBit', 'InsufficientPileupFitPointsBit', 'PileupStretchedExpFitFailBit', 'PileupStretchedExpGrowthBit', 'PileupBadStretchedExpSubtrBit', 'PileupExpFitFailBit', 'PileupExpGrowthBit', 'PileupBadExpSubtrBit', 'PileupStretchedExpPulseLike'])
976 
977  rpdChannelMonToolArr.defineHistogram('RPDChannelValidBitFloat;RPDChannelValidBit',title='RPD Channel valid bit;;Events',
978  path='/SHIFT/RPD/RPDChannel/StatusBits',
979  opt='kAlwaysCreate', # always create for shift-needed histograms
980  xbins=2,xmin=0,xmax=2,
981  xlabels=['Valid','Invalid'])
982 
983  # ---------------------------- LB dependence ----------------------------
984  if (not zdcMonAlg.IsOnline): #offline
985  rpdChannelMonToolArr.defineHistogram('lumiBlock, RPDChannelAmplitudeCalib;RPDChannelAmplitudeCalib_vs_lb', type='TH2F', title=';lumi block;RPD Channel Calibrated Amplitude',
986  path='/EXPERT/RPD/RPDChannel/CalibAmpLBdep',
987  cutmask='RPDChannelValid',
988  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
989  ybins=n_rpd_amp_bins_full_range,ymin=rpd_channel_amp_min,ymax=rpd_sum_adc_max) # NOT energy calibration - calibration factor is 1 for now
990  rpdChannelMonToolArr.defineHistogram('lumiBlock, RPDChannelMaxADC;RPDChannelMaxADC_vs_lb', type='TH2F', title=';lumi block;Max ADC [ADC Counts]',
991  path='/EXPERT/RPD/RPDChannel/MaxADCLBdep',
992  cutmask='RPDChannelValid',
993  xbins=lumi_block_max,xmin=0.0,xmax=lumi_block_max,
994  ybins=n_energy_bins_default,ymin=0.0,ymax=module_FPGA_max_ADC)
995  else: #online
996  rpdChannelMonToolArr.defineHistogram('lumiBlock, RPDChannelAmplitudeCalib;RPDChannelAmplitudeCalib_vs_lb', type='TH2F', title=';lumi block;RPD Channel Calibrated Amplitude',
997  path='/EXPERT/RPD/RPDChannel/CalibAmpLBdep',
998  cutmask='RPDChannelValid',
999  xbins=n_lumi_block_bins_coarse,xmin=0.0,xmax=lumi_block_max,
1000  ybins=n_rpd_amp_bins_full_range,ymin=rpd_channel_amp_min,ymax=rpd_sum_adc_max) # NOT energy calibration - calibration factor is 1 for now
1001  rpdChannelMonToolArr.defineHistogram('lumiBlock, RPDChannelMaxADC;RPDChannelMaxADC_vs_lb', type='TH2F', title=';lumi block;Max ADC [ADC Counts]',
1002  path='/EXPERT/RPD/RPDChannel/MaxADCLBdep',
1003  cutmask='RPDChannelValid',
1004  xbins=n_lumi_block_bins_coarse,xmin=0.0,xmax=lumi_block_max,
1005  ybins=n_energy_bins_default,ymin=0.0,ymax=module_FPGA_max_ADC)
1006 
1007 
1008 
1013  return helper.result()
1014 
1015  # # Otherwise, merge with result object and return
1016  # acc = helper.result()
1017  # result.merge(acc)
1018  # return result
1019 
ZdcMonitorAlgorithm.create_hg_fit_amp_inj_bins
def create_hg_fit_amp_inj_bins()
Definition: ZdcMonitorAlgorithm.py:54
ZdcMonitorAlgorithm.create_log_bins
def create_log_bins(min_value, max_value, num_bins)
Definition: ZdcMonitorAlgorithm.py:24
ZdcMonitorAlgorithm.create_vinj_bins
def create_vinj_bins()
Definition: ZdcMonitorAlgorithm.py:33
ZdcMonitorAlgorithm.create_lg_fit_amp_inj_bins
def create_lg_fit_amp_inj_bins()
Definition: ZdcMonitorAlgorithm.py:69
python.CaloAddPedShiftConfig.int
int
Definition: CaloAddPedShiftConfig.py:45
ZdcMonitorAlgorithm.ZdcMonitoringConfig
def ZdcMonitoringConfig(inputFlags)
Definition: ZdcMonitorAlgorithm.py:87
python.ZdcRecConfig.SetConfigTag
def SetConfigTag(flags)
Definition: ZdcRecConfig.py:83