12def TileTBBeamMonitoringConfig(flags, fragIDs=[0x100,0x101,0x200,0x201,0x402], **kwargs):
13
14 ''' Function to configure TileTBBeamMonitorAlgorithm algorithm in the monitoring system.'''
15
16 from AthenaConfiguration.ComponentAccumulator import ComponentAccumulator
17 result = ComponentAccumulator()
18
19 from TileGeoModel.TileGMConfig import TileGMCfg
20 result.merge(TileGMCfg(flags))
21
22 from TileConditions.TileCablingSvcConfig import TileCablingSvcCfg
23 result.merge(TileCablingSvcCfg(flags))
24
25 from AthenaMonitoring import AthMonitorCfgHelper
26 helper = AthMonitorCfgHelper(flags, 'TileTBBeamMonitoring')
27
28 from AthenaConfiguration.ComponentFactory import CompFactory
29 tileTBBeamMonAlg = helper.addAlgorithm(CompFactory.TileTBBeamMonitorAlgorithm, 'TileTBBeamMonAlg')
30
31 tileTBBeamMonAlg.TriggerChain = ''
32
33 kwargs.setdefault('CaloCellContainer', 'AllCalo')
34 cellContainer = kwargs['CaloCellContainer']
35
36 kwargs.setdefault('TBperiod', 2023)
37 kwargs.setdefault('MaskMuonPMTs', [7])
38 kwargs.setdefault('TOFDifferencePairs', [[2, 1], [2, 3], [3, 1]])
39
40 from TileCalibBlobObjs.Classes import TileCalibUtils as Tile
41
42 modules = []
43 if fragIDs:
44 for fragID in fragIDs:
45 ros = fragID >> 8
46 drawer = fragID & 0x3F
47 modules += [Tile.getDrawerString(ros, drawer)]
48 else:
49 for ros in range(1, Tile.MAX_ROS):
50 for drawer in range(0, Tile.MAX_DRAWER):
51 fragIDs += [(ros << 8) | drawer]
52 modules += [Tile.getDrawerString(ros, drawer)]
53
54 tileTBBeamMonAlg.TileFragIDs = fragIDs
55
56 for k, v in kwargs.items():
57 setattr(tileTBBeamMonAlg, k, v)
58
59 from TileMonitoring.TileTBBeamChambersCalibration import updateBeamChambersCalibrations
60 updateBeamChambersCalibrations(tileTBBeamMonAlg, flags.Input.RunNumbers[0])
61
62 run = str(flags.Input.RunNumbers[0])
63
64
65 executeTimeGroup = helper.addGroup(tileTBBeamMonAlg, 'TileTBBeamMonExecuteTime', 'TestBeam')
66 executeTimeGroup.defineHistogram('TIME_execute', path='BeamElements', type='TH1F',
67 title='Time for execute TileTBBeamMonAlg algorithm;time [#mus]',
68 xbins=100, xmin=0, xmax=10000)
69
70 nMuonWallPMT = 12
71 muonWallPMTArray = helper.addArray([nMuonWallPMT], tileTBBeamMonAlg, 'MuonWallPMT', topPath='TestBeam')
72 for postfix, tool in muonWallPMTArray.Tools.items():
73 pmt = int(postfix[1:]) + 1
74 title = f'Run {run}: Muon Wall PMT{pmt} Amplitude;Amplitude [ADC];Counts'
75 name = f'amplitude;MuonWallPMT{pmt}'
76 tool.defineHistogram(name, title=title, path='BeamElements', type='TH1F',
77 xbins=410, xmin=0, xmax=4096)
78
79 totalMuEnergyGroup = helper.addGroup(tileTBBeamMonAlg, 'TileTBTotalMuonEnergy', 'TestBeam')
80 totalMuEnergyGroup.defineHistogram('TotalMuonEnergy', path='BeamElements', type='TH1F',
81 title=f'Run {run}: Muon Wall Total Energy; [ADC]',
82 xbins=1500, xmin=0, xmax=10000)
83
84 nScounters = 3
85 sCountersArray = helper.addArray([nScounters], tileTBBeamMonAlg, 'Scounter', topPath='TestBeam')
86 for postfix, tool in sCountersArray.Tools.items():
87 counter = int(postfix[1:]) + 1
88 title = f'Run {run}: S{counter} Counter Amplitude;Amplitude [ADC];Counts'
89 name = f'amplitude;S{counter}hist'
90 tool.defineHistogram(name, title=title, path='BeamElements', type='TH1F',
91 xbins=410, xmin=0, xmax=4096)
92
93 nCherenkov = 3
94 cherenkovArray = helper.addArray([nCherenkov], tileTBBeamMonAlg, 'Cherenkov', topPath='TestBeam')
95 for postfix, tool in cherenkovArray.Tools.items():
96 cherenkov = int(postfix[1:]) + 1
97 title = f'Run {run}: Cherenkov {cherenkov} Amplitude;Amplitude [ADC];Counts'
98 name = f'amplitude;Cher{cherenkov}hist'
99 tool.defineHistogram(name, title=title, path='BeamElements', type='TH1F',
100 xbins=410, xmin=0, xmax=4096)
101
102
103 cherCompGroup = helper.addGroup(tileTBBeamMonAlg, 'CherCompare', 'TestBeam')
104 cherCompGroup.defineHistogram('amplitude1,amplitude2;CherCompare', path='BeamElements', type='TH2F',
105 title=f'Run {run}: Cherenkov2 vs Cherenkov1;Amplitude [ADC];Amplitude [ADC]',
106 xbins=410, xmin=0, xmax=4096, ybins=410, ymin=0, ymax=4096)
107
108 nTOF = 3
109 tofArray = helper.addArray([nTOF], tileTBBeamMonAlg, 'TOF', topPath='TestBeam')
110 for postfix, tool in tofArray.Tools.items():
111 tof = int(postfix[1:]) + 1
112 title = f'Run {run}: TOF{tof};[ADC];Counts'
113 name = f'amplitude;TOF{tof}'
114 tool.defineHistogram(name, title=title, path='BeamElements', type='TH1F',
115 xbins=4096, xmin=-0.5, xmax=4095.5)
116
117 tofDiffPairs = kwargs['TOFDifferencePairs']
118 tofDiffArray = helper.addArray([len(tofDiffPairs)], tileTBBeamMonAlg, 'TOFDiff', topPath='TestBeam')
119 for postfix, tool in tofDiffArray.Tools.items():
120 pairIdx = int(postfix.split('_').pop())
121 tof1,tof2 = tofDiffPairs[pairIdx]
122 title = f'Run {run}: TOF{tof1} - TOF{tof2} Amplitude difference;[ADC];Counts'
123 tool.defineHistogram(f'TOFDiff;TOFDiff{tof1}{tof2}', title=title, path='BeamElements',
124 type='TH1F', xbins=4096, xmin=-0.5, xmax=4095.5)
125
126 cherenkovVsTOFArray = helper.addArray([nTOF, nCherenkov], tileTBBeamMonAlg, 'CherenkovVsTOF', topPath='TestBeam')
127 for postfix, tool in cherenkovVsTOFArray.Tools.items():
128 cherenkovTof = postfix.split('_')
129 cherenkov = int(cherenkovTof.pop()) + 1
130 tof = int(cherenkovTof.pop()) + 1
131 title = f'Run {run}: Cherenkov {cherenkov} Amplitude vs TOF{tof} Amplitude'
132 title += f';TOF{tof} Amplitude [ADC];Cherenkov{cherenkov} Amplitude [ADC]'
133 name = f'amplitudeTOF,amplitudeCherenkov;Cher{cherenkov}TOF{tof}'
134 tool.defineHistogram(name, title=title, path='BeamElements', type='TH2F',
135 xbins=410, xmin=0, xmax=4096, ybins=410, ymin=0, ymax=4096)
136
137 pmtHitMapGroup = helper.addGroup(tileTBBeamMonAlg, 'PMTHitMap', 'TestBeam')
138 pmtHitMapGroup.defineHistogram('column,row,amplitude;PMTHitMap', path='BeamElements', type='TProfile2D',
139 title=f'Run {run}: Muon Wall PMT Hit Map',
140 xbins=4, xmin=0, xmax=4, ybins=2, ymin=0, ymax=2)
141
142 nScaler = 3
143 scalerArray = helper.addArray([nScaler], tileTBBeamMonAlg, 'Scaler', topPath='TestBeam')
144 for postfix, tool in scalerArray.Tools.items():
145 scaler = int(postfix[1:]) + 1
146 title = f'Run {run}: Scaler S{scaler};Counts;# Events'
147 name = f'counts;Scaler{scaler}'
148 tool.defineHistogram(name, title=title, path='BeamElements', type='TH1F',
149 xbins=20000, xmin=-0.5, xmax=19999.5)
150
151 scalerCoincedenceGroup = helper.addGroup(tileTBBeamMonAlg, 'Scaler12', 'TestBeam')
152 scalerCoincedenceGroup.defineHistogram('counts12;Scaler12', path='BeamElements', type='TH1F',
153 title=f'Run {run}: Scaler S1 and S2 coincedence;counts;# Events',
154 xbins=20000, xmin=-0.5, xmax=19999.5)
155
156
157 beamChambers = ['BC1', 'BC2']
158 beamChambersArray = helper.addArray([beamChambers], tileTBBeamMonAlg, 'BeamChamber', topPath='TestBeam')
159 for postfix, tool in beamChambersArray.Tools.items():
160 beamChamber = postfix[1:]
161
162 for coordinate in ['X', 'Y']:
163 title = f'Run {run}: {beamChamber}{coordinate} Coordinate;{coordinate}[mm];Counts'
164 name = f'{beamChamber}{coordinate};{beamChamber}{coordinate}hist'
165 tool.defineHistogram(name, title=title, path='BeamElements', type='TH1F',
166 xbins=201, xmin=-100.5, xmax=100.5)
167
168 tool.defineHistogram(f'{beamChamber}X,{beamChamber}Y;{beamChamber}Profile', path='BeamElements',
169 type='TH2D', title=f'Run {run}: {beamChamber} Beam Profile;X[mm];Y[mm]',
170 xbins=1000, xmin=-100, xmax=100, ybins=1000, ymin=-100, ymax=100)
171
172 tool.defineHistogram(f'{beamChamber}Xsum,{beamChamber}Ysum;{beamChamber}ProfileSum', path='BeamElements',
173 type='TH2D', title=f'Run {run}: {beamChamber} Beam Profile Sum;X [mm];Y [mm]',
174 xbins=1000, xmin=-300, xmax=0, ybins=1000, ymin=-300, ymax=0)
175
176
177 impactProfileGroup = helper.addGroup(tileTBBeamMonAlg, 'ImpactProfile', 'TestBeam')
178 impactProfileGroup.defineHistogram('Ximp,Yimp;ImpactProfile', path='BeamElements', type='TH2F',
179 title=f'Run {run}: {beamChamber} Impact Profile;X [mm];Y [mm]',
180 xbins=200, xmin=-100, xmax=100, ybins=200, ymin=-100, ymax=100)
181
182
183 if cellContainer:
184 cherenkovEnergyArray = helper.addArray([nCherenkov], tileTBBeamMonAlg, 'CherenkovVsEnergy', topPath='TestBeam')
185 for postfix, tool in cherenkovEnergyArray.Tools.items():
186 cherenkov = int(postfix[1:]) + 1
187 title = f'Run {run}: Cherenkov {cherenkov} Amplitude vs Total Energy;Energy [pC]; Amplitude [ADC]'
188 name = f'totalEnergy,amplitude;Cher{cherenkov}Energy'
189 tool.defineHistogram(name, title=title, path='BeamElements', type='TH2F',
190 xbins=150, xmin=0, xmax=150, ybins=410, ymin=0, ymax=4096)
191
192 cellEneXimpGroup = helper.addGroup(tileTBBeamMonAlg, 'CellEnergyImpactX', 'TestBeam')
193 cellEneXimpGroup.defineHistogram('Ximp,cellEnergy;CellEnergyImpactX', path='BeamElements', type='TH2F',
194 title=f'Run {run}: Maximum Cell Energy vs Impact X;X [mm];Cell Energy [pc]',
195 xbins=200, xmin=-100, xmax=100, ybins=150, ymin=0, ymax=150)
196
197 cellEneYimpGroup = helper.addGroup(tileTBBeamMonAlg, 'CellEnergyImpactY', 'TestBeam')
198 cellEneYimpGroup.defineHistogram('Yimp,cellEnergy;CellEnergyImpactY', path='BeamElements', type='TH2F',
199 title=f'Run {run}: Maximum Cell Energy vs Impact Y;Y [mm];Cell Energy [pc]',
200 xbins=200, xmin=-100, xmax=100, ybins=150, ymin=0, ymax=150)
201
202 totalEneXimpGroup = helper.addGroup(tileTBBeamMonAlg, 'TotalEnergyImpactX', 'TestBeam')
203 totalEneXimpGroup.defineHistogram('Ximp,totalEnergy;TotalEnergyImpactX', path='BeamElements', type='TH2F',
204 title=f'Run {run}: Total Energy vs Impact X;X [mm];Total Energy [pc]',
205 xbins=200, xmin=-100, xmax=100, ybins=150, ymin=0, ymax=150)
206
207 totalEneYimpGroup = helper.addGroup(tileTBBeamMonAlg, 'TotalEnergyImpactY', 'TestBeam')
208 totalEneYimpGroup.defineHistogram('Yimp,totalEnergy;TotalEnergyImpactY', path='BeamElements', type='TH2F',
209 title=f'Run {run}: Total Energy vs Impact Y;Y [mm];Total Energy [pc]',
210 xbins=200, xmin=-100, xmax=100, ybins=150, ymin=0, ymax=150)
211
212
213 totalEneS1Group = helper.addGroup(tileTBBeamMonAlg, 'ScinCalEnergy', 'TestBeam')
214 totalEneS1Group.defineHistogram('amplitude,totalEnergy;ScinCalEnergy', path='BeamElements', type='TH2F',
215 title=f'Run {run}: Total Energy vs S1 amplitude; Amplitude [ADC];Total Energy [pc]',
216 xbins=410, xmin=0, xmax=4096, ybins=150, ymin=0, ymax=150)
217
218
219 accumalator = helper.result()
220 result.merge(accumalator)
221 return result
222
223