273 def _generate_sequence(self, name, seq=None):
274 """Assemble the tree of sequencers."""
275
276 if not seq:
277 seq = Gaudi__Sequencer(name, ShortCircuit=False)
278
279 for n in self.cfg[name]:
280
281 algo_name = n.split("/")[1] if "/" in n else n
282
283 if "type" in self.cfg.nodes[n]:
284
285 algo_type = self.cfg.nodes[n].get("type")
286 else:
287
288
289 algo_type = n.split("/")[0] if "/" in n else "Algorithm"
290
291 if algo_type in ["GaudiSequencer", "AthSequencer", "ProcessPhase"]:
292 if algo_name in ["RecoITSeq", "RecoOTSeq", "RecoTTSeq"]:
293 continue
294
295 if n not in self.unique_sequencers:
296 self.unique_sequencers.append(n)
297 else:
298 if n not in self.dupl_seqs:
299 self.dupl_seqs[n] = 2
300 else:
301 self.dupl_seqs[n] += 1
302
303 seq_daughter = Gaudi__Sequencer(algo_name, OutputLevel=INFO)
304 if self.cfg.nodes[n].get("ModeOR") == "True":
305 self.OR_sequencers.append(n)
306 seq_daughter.ModeOR = True
307
308
309 seq_daughter.ShortCircuit = False
310 if seq_daughter not in seq.Members:
311 seq.Members += [seq_daughter]
312
313 self._generate_sequence(n, seq_daughter)
314 else:
315
316
317 if n not in self.unique_algos:
318 self.unique_algos.append(n)
319 else:
320 if n not in self.dupl_algos:
321 self.dupl_algos[n] = 2
322 else:
323 self.dupl_algos[n] += 1
324
325 avgRuntime, varRuntime = self.timeValue.get(algo_name)
326
328 algo_name,
329 Cardinality=self.cardinality,
330 OutputLevel=self.outputLevel,
331 varRuntime=varRuntime,
332 avgRuntime=avgRuntime,
333 SleepFraction=self.sleepFraction
334 if self.BlockingBoolValue.get()
335 else 0.0,
336 Timeline=self.enableTimeline,
337 )
338
339 self._declare_data_deps(algo_name, algo_daughter)
340
341 if algo_daughter not in seq.Members:
342 seq.Members += [algo_daughter]
343
344 return seq
A class that implements a search for prime numbers.