13 Typically, an EVTREJECTED algorithm is used to "short-circuit" the execution flow within
14 the group of algorithms it belongs to. Within such early-terminated group, a false-negative
15 data dependency resolution can never occur since all downstream algorithms are skipped.
16 However, there might be other algorithms - outside of the early-terminated group - that depend
17 on data outputs of the EVTREJECTED algorithm. The test emulates this scenario.
20 from Configurables
import (
22 AvalancheSchedulerSvc,
38 whiteboard = HiveWhiteBoard(
"EventDataSvc", EventSlots=evtslots, OutputLevel=INFO)
40 slimeventloopmgr = HiveSlimEventLoopMgr(
41 SchedulerName=
"AvalancheSchedulerSvc", OutputLevel=DEBUG
44 AvalancheSchedulerSvc(ThreadPoolSize=algosInFlight, OutputLevel=DEBUG)
46 AlgResourcePool(OutputLevel=DEBUG)
48 CPUCrunchSvc(shortCalib=
True)
52 a1 = CPUCruncher(
"AlgA", InvertDecision=
True)
53 a1.outKeys = [
"/Event/A"]
55 a2 = CPUCruncher(
"AlgB")
56 a2.inpKeys = [
"/Event/A"]
58 a3 = CPUCruncher(
"AlgC")
59 a3.inpKeys = [
"/Event/A"]
61 for a
in [a1, a2, a3]:
65 branch1 = GaudiSequencer(
"Branch1", ModeOR=
False, ShortCircuit=
False)
66 branch2 = GaudiSequencer(
"Branch2", ModeOR=
False, ShortCircuit=
True, Sequential=
True)
68 branch2.Members = [a1, a2]
69 branch1.Members = [branch2, a3]
75 EventLoop=slimeventloopmgr,
77 MessageSvcType=
"InertMessageSvc",