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