66def LArCellMonConfigCore(helper, algclass, flags, isCosmics=False, TriggerStream='CosmicCalo', isMC=False, isOnline=False, algname='LArCellMonAlg'):
67
68
69 LArCellMonAlg = helper.addAlgorithm(algclass, algname)
70
71 if isCosmics:
72 badChanMaskProblems=["deadReadout","deadPhys","short","sporadicBurstNoise","highNoiseHG","highNoiseMG","highNoiseLG"]
73 else:
74 badChanMaskProblems=["deadReadout","deadPhys","almostDead","short","sporadicBurstNoise","unstableNoiseLG","unstableNoiseMG","unstableNoiseHG","highNoiseHG","highNoiseMG","highNoiseLG"]
75
76 LArCellMonAlg.ProblemsToMask=badChanMaskProblems
77
78 if not isCosmics and not isMC:
79 LArCellMonAlg.useReadyFilterTool=True
80 else:
81 LArCellMonAlg.useReadyFilterTool=False
82
83 if isMC:
84 LArCellMonAlg.useBadLBTool=False
85 else:
86 LArCellMonAlg.useBadLBTool=True
87
88 if isCosmics or TriggerStream!='physics_CosmicCalo':
89 LArCellMonAlg.useBeamBackgroundRemoval = False
90 LArCellMonAlg.useLArCollisionFilterTool = False
91 else:
92 LArCellMonAlg.useBeamBackgroundRemoval = True
93 LArCellMonAlg.useLArCollisionFilterTool = True
94
95 if isOnline:
96 LArCellMonAlg.useLArNoisyAlg = False
97 else:
98 LArCellMonAlg.useLArNoisyAlg = True
99
100 GroupName="LArCellMon"
101 LArCellMonAlg.MonGroupName = GroupName
102 LArCellMonAlg.MonGroupName_perJob = GroupName+"PerJob"
103 LArCellMonAlg.MonGroupName_OccupancyEtaPhi = GroupName+"_OccupancyEtaPhi"
104 LArCellMonAlg.MonGroupName_PercentageOccupancyEtaPhi = GroupName+"_PercentageOccupancyEtaPhi"
105 LArCellMonAlg.MonGroupName_OccupancyEta = GroupName+"_OccupancyEta"
106 LArCellMonAlg.MonGroupName_OccupancyPhi = GroupName+"_OccupancyPhi"
107 LArCellMonAlg.MonGroupName_TotEnergyEtaPhi = GroupName+"_TotEnergyEtaPhi"
108 LArCellMonAlg.MonGroupName_AvgQualityEtaPhi = GroupName+"_AvgQualityEtaPhi"
109 LArCellMonAlg.MonGroupName_FractionOverQthEtaPhi = GroupName+"_FractionOverQthEtaPhi"
110 LArCellMonAlg.MonGroupName_AvgTimeEtaPhi = GroupName+"_AvgTimeEtaPhi"
111 LArCellMonAlg.MonGroupName_FractionPastTthEtaPhi = GroupName+"_FractionPastTthEtaPhi"
112
113
114 LArCellMonAlg.EnableLumi = True
115
116 LArCellMonAlg.Sporadic_switch = isCosmics
117
118
119 LArCellMonAlg.Threshold_EM_S0S1=5000.
120 LArCellMonAlg.Threshold_HECFCALEMS2S3=15000.
121
123
124 binlabels=["TotalEvents","ATLAS Ready","with Good LAr LB","with No LAr Collision","with No Beam Background", "with No Trigger Filter","with No LArError"]
125
126
127 LArCellMonAlg.rndmTriggerNames = "L1_RD0, L1_RD0_FILLED, L1_RD0_EMPTY, L1_RD1, L1_RD1_NOISE, L1_RD1_HIST, L1_RD1_BGRP4, L1_RD1_BGRP5"
128 LArCellMonAlg.caloTriggerNames = "L1_EM[0-9]+, L1_HA[0-9]+, L1_J[0-9]+.*, L1_JB[0-9]+, L1_JF[0-9]+, L1_TE[0-9]+, L1_JE[0-9]+, L1_XE[0-9]+, L1_2EM[0-9]+, L1_2FJ[0-9]+, L1_2J[0-9]+,L1_3J[0-9]+.*,L1_4J[0-9]+.*,L1_5J[0-9]+,L1_6J[0-9]+,L1_FJ[0-9]+.*"
129 LArCellMonAlg.minBiasTriggerNames = "L1_RD0_FILLED, L1_MBTS_1, L1_MBTS_2, L1_MBTS_1_1"
130 LArCellMonAlg.metTriggerNames = "EF_xe[0-9]+.*"
131 LArCellMonAlg.miscTriggerNames = ""
132
133
134
135
136 if (isCosmics or TriggerStream=='physics_CosmicCalo' or TriggerStream=='express_express' or TriggerStream=='physics_Main' or TriggerStream=='physics_ZeroBias') or isOnline:
137 do2DOcc = True
138 else:
139 do2DOcc = False
140
141 thresholdDict = {}
142 thresholdDict["ThresholdType"] = [ "noEth_CSCveto", "noEth_rndm_CSCveto", "medEth_CSCveto", "5Sigma_CSCveto", "hiEth_CSCveto", "hiEth_noVeto", "met_CSCveto" ]
143 thresholdDict["ThresholdDirection"] = [ "none" , "none" , "both" , "both" , "over" , "over" , "over" ]
144 thresholdDict["TriggersToInclude"] = [ "all" , "all" , "all" , "all" , "all" , "all" , "met" ]
145 thresholdDict["TriggersToExclude"] = [ "none" , "none" , "none" , "none" , "none" , "none" , "none" ]
146
147 thresholdDict["DoPercentageOccupancy"] = [ True , False , True , False , False , False , False ]
148 thresholdDict["DoEtaPhiOccupancy"] = [ True , False , do2DOcc , do2DOcc,do2DOcc, do2DOcc , False ]
149 thresholdDict["DoEtaOccupancy"] = [ False , False , isCosmics , False , False , False , False ]
150 thresholdDict["DoPhiOccupancy"] = [ False , False , True , False , False , False , False ]
151
152 thresholdDict["DoEtaPhiAverageEnergy"] = [ False , do2DOcc , False , do2DOcc , False , False , False ]
153 thresholdDict["DoEtaPhiTotalEnergy"] = [ False , False , False , False , False , False , False ]
154 thresholdDict["DoEtaPhiEnergyRMS"] = [ False , False , False , False , False , False , False ]
155 thresholdDict["DoEtaPhiRMSvsDBnoise"] = [ False , False , False , False , False , False , False ]
156
157 thresholdDict["DoEtaPhiAverageQuality"] = [ False , False , False , False , False , False , False ]
158 thresholdDict["DoEtaPhiFractionOverQth"]= [ False , False , False , do2DOcc , do2DOcc , do2DOcc , False ]
159 thresholdDict["QualityFactorThreshold"] = [ 4000. ]*7
160
161 thresholdDict["DoEtaPhiAverageTime"] = [ False , False , False , (not isCosmics) , False , False , False ]
162 thresholdDict["DoEtaPhiFractionPastTth"]= [ False , False , False , (not isCosmics) , False , False , False ]
163 thresholdDict["TimeThreshold"] = [ 4. ]*7
164 thresholdDict["ThresholdTitleTemplates"]= ["no Threshold",
165 "no Threshold",
166 "|E_{cell}| > %0.f#sigma_{noise}^{database}",
167 "E_{cell} beyond %0.f#sigma_{noise}^{database}",
168 "E_{cell} > %0.f MeV",
169 "E_{cell} > %0.f MeV",
170 "E_{cell} > %0.f MeV, MET trigger"]
171
172 thresholdDict["DefaultThresholds"] = [-4000000.,-4000000. , 3. , 5. , 500. , 500. , 1000. ]
173 thresholdDict["ThresholdinSigNoise"] = [ False , False , True , True , False , False , False ]
174
175
176
177 nthr = len(thresholdDict["ThresholdType"])
178 if not all(len(thrProp)==nthr for thrProp in thresholdDict.values()):
179 from AthenaCommon.Logging import logging
180 mlog = logging.getLogger( 'LArCellMonLog' )
181 mlog.error("LArCellMonAlg:: CONFIGURATION ERROR, threshold properties have different lenght. Please check CaloMonitoring/python/LArCellMonAlg.py")
182 exit(1)
183 pass
184
185
186 LArCellMonAlg.ThresholdType = thresholdDict["ThresholdType"]
187
188 LArCellMonAlg.ThresholdDirection = thresholdDict["ThresholdDirection"]
189 LArCellMonAlg.TriggersToInclude = thresholdDict["TriggersToInclude"]
190 LArCellMonAlg.TriggersToExclude = thresholdDict["TriggersToExclude"]
191
192 LArCellMonAlg.QualityFactorThreshold = thresholdDict["QualityFactorThreshold"]
193
194 LArCellMonAlg.TimeThreshold = thresholdDict["TimeThreshold"]
195
196 LArCellMonAlg.DoBeamBackgroundRemoval=[( "CSCveto" in thr ) for thr in thresholdDict["ThresholdType"]]
197
198
199 LArCellMonAlg.ThresholdTitleTemplates= thresholdDict["ThresholdTitleTemplates"]
200
201 LArCellMonAlg.DefaultThresholds = thresholdDict["DefaultThresholds"]
202 LArCellMonAlg.ThresholdinSigNoise = thresholdDict["ThresholdinSigNoise"]
203
204 LArCellMonAlg.ThresholdColumnType = ["hiEth_CSCveto", "hiEth_noVeto"]
205
206 LArCellMonAlg.EMBP_Thresh = [ 800. , 800. ]
207 LArCellMonAlg.EMB1_Thresh = [ 600. , 600. ]
208 LArCellMonAlg.EMB2_Thresh = [ 600. , 600. ]
209 LArCellMonAlg.EMB3_Thresh = [ 600. , 600. ]
210
211 LArCellMonAlg.EMECP_Thresh = [ 1200. , 1200. ]
212 LArCellMonAlg.EMEC1_Thresh = [ 800. , 800. ]
213 LArCellMonAlg.EMEC2_Thresh = [ 800. , 800. ]
214 LArCellMonAlg.EMEC3_Thresh = [ 800. , 800. ]
215
216 LArCellMonAlg.HEC0_Thresh = [ 4000. , 4000. ]
217 LArCellMonAlg.HEC1_Thresh = [ 4000. , 4000. ]
218 LArCellMonAlg.HEC2_Thresh = [ 4000. , 4000. ]
219 LArCellMonAlg.HEC3_Thresh = [ 4000. , 4000. ]
220
221 LArCellMonAlg.FCAL1_Thresh = [ 6000. , 6000. ]
222 LArCellMonAlg.FCAL2_Thresh = [ 6000. , 6000. ]
223 LArCellMonAlg.FCAL3_Thresh = [ 6000. , 6000. ]
224
225
226 LArCellMonAlg.DoEtaPhiTotalOccupancyNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if ( thresholdDict["DoEtaPhiOccupancy"][i_thr] and not thresholdDict["DoPercentageOccupancy"][i_thr] )
227 or thresholdDict["DoEtaPhiAverageEnergy"][i_thr]
228 or thresholdDict["DoEtaPhiAverageQuality"][i_thr]
229 or thresholdDict["DoEtaPhiAverageTime"][i_thr]]
230
231 LArCellMonAlg.DoEtaPhiPercentageOccupancyNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoEtaPhiOccupancy"][i_thr] and thresholdDict["DoPercentageOccupancy"][i_thr]]
232
233 LArCellMonAlg.DoEtaOccupancyNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoEtaOccupancy"][i_thr]]
234 LArCellMonAlg.DoPhiOccupancyNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoPhiOccupancy"][i_thr]]
235 LArCellMonAlg.DoEtaPhiTotEnergyNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoEtaPhiTotalEnergy"][i_thr] or thresholdDict["DoEtaPhiAverageEnergy"][i_thr]]
236 LArCellMonAlg.DoEtaPhiAvgQualityNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoEtaPhiAverageQuality"][i_thr]]
237 LArCellMonAlg.DoEtaPhiFractionOverQthNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoEtaPhiFractionOverQth"][i_thr]]
238 LArCellMonAlg.DoEtaPhiAvgTimeNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoEtaPhiAverageTime"][i_thr]]
239 LArCellMonAlg.DoEtaPhiFractionPastTthNames=[thr for i_thr,thr in enumerate(thresholdDict["ThresholdType"]) if thresholdDict["DoEtaPhiFractionPastTth"][i_thr]]
240
241
242
243
244
245
246
247 cellMonGroup = helper.addGroup(
248 LArCellMonAlg,
249 GroupName,
250 '/CaloMonitoring/LArCellMon_NoTrigSel/'
251
252 )
253
254
255
256
257 summ_hist_path='Summary/'
258
259 from CaloMonitoring.CaloMonAlgBase import CaloBaseHistConfig
260 CaloBaseHistConfig(cellMonGroup,summ_hist_path,binlabels)
261
262 cellMonGroup.defineHistogram('trigType;nEvtsByTrigger',
263 title='Total Events: bin 0, RNDM Trigger: 1, Calo Trigger: 2, MinBias Trigger: 3, MET Trigger: 4, Misc Trigger: 5, Events Selected for Noise Plots: 6 ',
264 type='TH1I', path=summ_hist_path,
265 xbins=lArCellBinningScheme.larCellSummary["xbins"][0], xmin=lArCellBinningScheme.larCellSummary["xbins"][1], xmax=lArCellBinningScheme.larCellSummary["xbins"][2],
266 xlabels=lArCellBinningScheme.larCellSummary["xlabels"])
267
268
269 cellMonGroup.defineHistogram('eventCounter;nEvtsPerThreshold',
270 title='Events events passed Trigger and Background removal for each threshold (for normalisation)',
271 type='TH1I', path=summ_hist_path,
272 xbins=len(thresholdDict["ThresholdType"]),xmin=-0.5, xmax=(len(thresholdDict["ThresholdType"])-0.5),
273 xlabels=thresholdDict["ThresholdType"])
274
275
276 LArCellMonAlg.doUnnormalized1DEnergy=True
277 energy_hist_path='Energy/'
278 if not isCosmics:
279 for part in LArCellMonAlg.LayerNames:
280 cellMonGroup.defineHistogram('cellEnergy_nocuts_'+part+';CellEnergy_'+part,
281 title='Cell Energy in ' +part+' with CSC veto;Cell Energy [MeV];Cell Events',
282 type='TH1F', path=energy_hist_path,
283 xbins=lArCellBinningScheme.logEnergyBins)
284 pass
285 elif isCosmics:
286 for part in LArCellMonAlg.LayerNames:
287 cellMonGroup.defineHistogram('cellEnergy_nocuts_'+part+';CellEnergy_'+part,
288 title='Cell Energy in ' +part+' with CSC veto;Cell Energy [MeV];Cell Events',
289 type='TH1F', path=energy_hist_path,
290 xbins=lArCellBinningScheme.cosmicEneBinning[part][0], xmin=lArCellBinningScheme.cosmicEneBinning[part][1], xmax=lArCellBinningScheme.cosmicEneBinning[part][2])
291 pass
292 else:
293 for part in LArCellMonAlg.LayerNames:
294 cellMonGroup.defineHistogram('cellEnergy_nocuts_'+part+';CellEnergy_'+part,
295 title='Cell Energy in ' +part+' with CSC veto;Cell Energy [MeV];Cell Events',
296 type='TH1F', path=energy_hist_path,
297 xbins=lArCellBinningScheme.defaultEnergyBins[0],xmin=lArCellBinningScheme.defaultEnergyBins[1],xmax=lArCellBinningScheme.defaultEnergyBins[2])
298 pass
299
300
301 energyvstime_hist_path='EnergyVsTime/'
302
303
304 eCutForTiming = LArCellMonAlg.EcutForTiming
305 idx=0
306 for part in LArCellMonAlg.LayerNames:
307 cellMonGroup.defineHistogram('cellTime_'+part+',cellEnergy_'+part+';CellEnergyVsTime_'+part,
308 title='Cell Energy vs Cell Time in '+part+' with CSC veto;Cell Time [ns];Cell Energy [MeV]',
309 type='TH2F', path=energyvstime_hist_path,
310 xbins=lArCellBinningScheme.timescale, ybins=lArCellBinningScheme.energyscale)
311
312 cellMonGroup.defineHistogram('cellTime_'+part+';CellEnergyVsTime_'+part+'_'+str(int(eCutForTiming[idx//2])),
313 title='Cell Energy vs Cell Time in '+part+' with CSC veto - Cell Time (E>'+str(int(eCutForTiming[idx//2]))+' [MeV]);Cell Time [ns]; NEvents',
314 weight='cellEnergy_'+part,
315 cutmask='enGreaterThanCut_'+part,
316 type='TH1F', path=energyvstime_hist_path,
317 xbins=lArCellBinningScheme.timescale)
318 idx=idx+1
319 pass
320
321
322 cellMonGroupPerJob = helper.addGroup(
323 LArCellMonAlg,
324 LArCellMonAlg.MonGroupName_perJob,
325 '/CaloMonitoring/LArCellMon_NoTrigSel/'
326 )
327
328 LArCellMonAlg.doKnownBadChannelsVsEtaPhi = True
329 LArCellMonAlg.doDatabaseNoiseVsEtaPhi = True
330
331 for part in LArCellMonAlg.LayerNames:
332 cellMonGroupPerJob.defineHistogram('celleta_'+part+',cellphi_'+part+';KnownBadChannelsVsEtaPhi_'+part,
333 title="Map of known bad channels in (#eta,#phi) for "+part+";cell #eta;cell #phi",
334 weight='badCellWord_'+part,
335 cutmask='fillBadChannelPlot',
336 type='TH2F', path="KnownBadChannels/",
337 xbins = lArCellBinningScheme.etaRange[part],
338 ybins = lArCellBinningScheme.phiRange[part],
339 merge='weightedAverage'
340)
341
342 cellMonGroupPerJob.defineHistogram('celleta_'+part+',cellphi_'+part+';DatabaseNoiseVsEtaPhi_'+part,
343 title="Map of Noise Values from the Database vs (#eta,#phi) for "+part+";cell #eta;cell #phi",
344 weight='cellnoisedb_'+part,
345 cutmask='doDatabaseNoisePlot',
346 type='TH2F', path="DatabaseNoise/",
347 xbins = lArCellBinningScheme.etaRange[part],
348 ybins = lArCellBinningScheme.phiRange[part],
349 merge='weightedAverage')
350
351 cellMonGroupPerJob.defineHistogram('celleta_'+part+';NCellsActiveVsEta_'+part,
352 title="No. of Active Cells in #eta for "+part+";cell #eta",
353 cutmask='doCellsActiveEtaPlot',
354 type='TH1F', path="ActiveCells/",
355 xbins = lArCellBinningScheme.etaRange[part],
356 merge='weightedAverage')
357
358 cellMonGroupPerJob.defineHistogram('cellphi_'+part+';NCellsActiveVsPhi_'+part,
359 title="No. of Active Cells in #phi for "+part+";cell #phi",
360 cutmask='doCellsActivePhiPlot',
361 type='TH1F', path="ActiveCells/",
362 xbins = lArCellBinningScheme.phiRange[part],
363 merge='weightedAverage')
364
365
366 pass
367
368
369 allMonArray = helper.addArray([LArCellMonAlg.LayerNames, LArCellMonAlg.ThresholdType], LArCellMonAlg, "allMon",
370 "/CaloMonitoring/LArCellMon_NoTrigSel/")
371
372 allMonArray.defineHistogram('dummy', type='TH1F', xbins=1, xmin=0, xmax=1)
373
374
375 for part in LArCellMonAlg.LayerNames:
376
377 allMonArray.defineHistogram('celleta,cellphi;CellOccupancyVsEtaPhi',
378 title='No. of events in (#eta,#phi) for '+part+';cell #eta;cell #phi',
379 type='TH2F', path="2d_Occupancy/",
380 cutmask='passThrCut',
381 xbins = lArCellBinningScheme.etaRange[part],
382 ybins = lArCellBinningScheme.phiRange[part],
383 pattern=[(part, _) for _ in LArCellMonAlg.DoEtaPhiTotalOccupancyNames])
384
385 allMonArray.defineHistogram('celleta;RAW_CellOccupancyVsEta',
386 title='No. of events in (#eta) for '+part+';cell #eta;',
387 type='TH1F', path="1d_Occupancy/",
388 cutmask='passThrCut',
389 xbins = lArCellBinningScheme.etaRange[part],
390 pattern=[(part, _) for _ in LArCellMonAlg.DoEtaOccupancyNames])
391
392 allMonArray.defineHistogram('cellphi;RAW_CellOccupancyVsPhi',
393 title='No. of events in (#phi) for '+part+';cell #phi;',
394 type='TH1F', path="1d_Occupancy/",
395 cutmask='passThrCut',
396 xbins = lArCellBinningScheme.phiRange[part],
397 pattern=[(part, _) for _ in LArCellMonAlg.DoPhiOccupancyNames])
398
399 allMonArray.defineHistogram('celleta,cellphi;TotalEnergyVsEtaPhi',
400 title="Total Cell Energy vs (#eta,#phi) in "+part+";cell #eta;cell #phi",
401 weight='cellEnergy',
402 type='TH2D', path="2d_TotalEnergy/",
403 cutmask='passThrCut',
404 xbins = lArCellBinningScheme.etaRange[part],
405 ybins = lArCellBinningScheme.phiRange[part],
406 pattern=[(part, _) for _ in LArCellMonAlg.DoEtaPhiTotEnergyNames])
407
408 allMonArray.defineHistogram('celleta,cellphi;TotalQualityVsEtaPhi',
409 title="Cell Quality vs (#eta,#phi) in "+part+";cell #eta;cell #phi",
410 weight='cellQuality',
411 type='TH2F', path="2d_AvgQuality/",
412 cutmask='passThrCut',
413 xbins = lArCellBinningScheme.etaRange[part],
414 ybins = lArCellBinningScheme.phiRange[part],
415 pattern=[(part, _) for _ in LArCellMonAlg.DoEtaPhiAvgQualityNames])
416
417 allMonArray.defineHistogram('celleta,cellphi;TotalTimeVsEtaPhi',
418 title="Cell Time vs (#eta,#phi) in "+part+";cell #eta;cell #phi",
419 weight='cellTime',
420 type='TH2F', path="2d_AvgTime/",
421 cutmask='passThrCut',
422 xbins = lArCellBinningScheme.etaRange[part],
423 ybins = lArCellBinningScheme.phiRange[part],
424 pattern=[(part, _) for _ in LArCellMonAlg.DoEtaPhiAvgTimeNames])
425
426 allMonArray.defineHistogram('celleta,cellphi;RAW_fractionOverQthVsEtaPhi',
427 title="Fraction of Events in "+part+" for which the Quality Factor exceeds Threshold;cell #eta;cell #phi",
428 weight='isPoorQuality',
429 type='TH2F', path="2d_PoorQualityFraction/",
430 cutmask='passThrCut',
431 xbins = lArCellBinningScheme.etaRange[part],
432 ybins = lArCellBinningScheme.phiRange[part],
433 pattern=[(part, _) for _ in LArCellMonAlg.DoEtaPhiFractionOverQthNames])
434
435 allMonArray.defineHistogram('celleta,cellphi;RAW_fractionPastTthVsEtaPhi',
436 title="Fraction of Events in "+part+" for which the Time is further than Threshold;cell #eta;cell #phi",
437 weight='isLateTime',
438 type='TH2F', path="2d_FractionOutOfTime/",
439 cutmask='passThrCut',
440 xbins = lArCellBinningScheme.etaRange[part],
441 ybins = lArCellBinningScheme.phiRange[part],
442 pattern=[(part, _) for _ in LArCellMonAlg.DoEtaPhiFractionPastTthNames])
443
444 pass
445
446
447
448
449 if LArCellMonAlg.Sporadic_switch:
450 sporadic_hist_path='/Sporadic_'+str(LArCellMonAlg.Threshold_EM_S0S1)+'*1e-3_'+str(LArCellMonAlg.Threshold_HECFCALEMS2S3)+'*1e-3GeV/'
451 cellMonGroup.defineTree('sporadicCellE,sporadicCellTime,sporadicCellQuality,sporadicCellID,lumiBlock,adoptedEThreshold;SporadicNoisyCellsTree', path=sporadic_hist_path,
452 treedef='sporadicCellE/F:sporadicCellTime/F:sporadicCellQuality/s:sporadicCellID/l:lumiBlock/i')
453
454 return LArCellMonAlg
455
456