212 def run(self, config):
213 from TriggerMenuMT.HLT.Menu import EventBuildingInfo
214 eb_identifiers = EventBuildingInfo.getAllEventBuildingIdentifiers()
215
216 for chain_name, chain_config in config['chains'].items():
217 peb_identifiers = [idf for idf in eb_identifiers if '_'+idf+'_' in chain_name]
218 peb_writers = [seq for seq in chain_config['sequencers'] if 'PEBInfoWriter' in seq]
219
220 is_peb_chain = (len(peb_identifiers) > 0 or len(peb_writers) > 0)
221
222
223 for stream_name in chain_config['streams']:
224 if stream_name not in config['streams']:
225 self.failures.append(
226 'Stream {:s} for chain {:s} is not defined in streaming configuration'.format(
227 stream_name, chain_name))
228
229 is_feb_stream = config['streams'][stream_name]['forceFullEventBuilding']
230
231 if is_peb_chain and is_feb_stream:
232 self.failures.append(
233 'PEB chain {:s} streamed to a full-event-building stream {:s} '
234 '(forceFullEventBuilding=True)'.format(
235 chain_name, stream_name))
236
237 elif not is_peb_chain and not is_feb_stream:
238 self.failures.append(
239 'Full-event-building chain {:s} streamed to the stream {:s} which allows partial '
240 'event building (forceFullEventBuilding=False)'.format(
241 chain_name, stream_name))
242
243 if not is_peb_chain:
244
245 continue
246
247 if len(peb_identifiers) != 1:
248 self.failures.append(
249 '{:s} has {:d} event building identifiers'.format(chain_name, len(peb_identifiers)))
250
251 if len(peb_writers) != 1:
252 self.failures.append(
253 '{:s} has {:d} PEBInfoWriter sequences'.format(chain_name, len(peb_writers)))
254
255 if peb_identifiers and peb_writers and not peb_writers[0].endswith(peb_identifiers[0]):
256 self.failures.append(
257 '{:s} PEB sequence name {:s} doesn\'t end with PEB identifier {:s}'.format(
258 chain_name, peb_writers[0], peb_identifiers[0]))
259
260
261