File indexing completed on 2023-03-17 11:03:03
0001 import FWCore.ParameterSet.Config as cms
0002
0003 import argparse
0004 import sys
0005
0006 parser = argparse.ArgumentParser(prog=sys.argv[0], description='Test ProcessAccelerator.')
0007
0008 parser.add_argument("--enableTest2", help="Enable test2 accelerator", action="store_true")
0009 parser.add_argument("--accelerators", type=str, help="Comma-separated string for accelerators to enable")
0010
0011 argv = sys.argv[:]
0012 if '--' in argv:
0013 argv.remove("--")
0014 args, unknown = parser.parse_known_args(argv)
0015
0016 class ProcessAcceleratorTest(cms.ProcessAccelerator):
0017 def __init__(self):
0018 super(ProcessAcceleratorTest,self).__init__()
0019 self._labels = ["test1", "test2"]
0020 self._enabled = ["test1"]
0021 if args.enableTest2:
0022 self._enabled.append("test2")
0023 def labels(self):
0024 return self._labels
0025 def enabledLabels(self):
0026 return self._enabled
0027
0028 class SwitchProducerTest(cms.SwitchProducer):
0029 def __init__(self, **kargs):
0030 super(SwitchProducerTest,self).__init__(
0031 dict(
0032 cpu = cms.SwitchProducer.getCpu(),
0033 test1 = lambda accelerators: ("test1" in accelerators, 2),
0034 test2 = lambda accelerators: ("test2" in accelerators, 3),
0035 ), **kargs)
0036
0037 process = cms.Process("PROD1")
0038
0039 process.add_(ProcessAcceleratorTest())
0040
0041 process.source = cms.Source("EmptySource")
0042 process.maxEvents.input = 3
0043 if args.accelerators is not None:
0044 process.options.accelerators = args.accelerators.split(",")
0045
0046 process.intProducer1 = cms.EDProducer("ManyIntProducer", ivalue = cms.int32(1))
0047 process.intProducer2 = cms.EDProducer("ManyIntProducer", ivalue = cms.int32(2))
0048 process.failIntProducer = cms.EDProducer("ManyIntProducer", ivalue = cms.int32(-1), throw = cms.untracked.bool(True))
0049
0050 if args.enableTest2 and ("test2" in process.options.accelerators or "*" in process.options.accelerators):
0051 process.intProducer1.throw = cms.untracked.bool(True)
0052 else:
0053 process.intProducer2.throw = cms.untracked.bool(True)
0054
0055 process.intProducer = SwitchProducerTest(
0056 cpu = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("failIntProducer")),
0057 test1 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer1")),
0058 test2 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer2"))
0059 )
0060
0061 process.intConsumer = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer"))
0062
0063 process.t = cms.Task(
0064 process.failIntProducer,
0065 process.intProducer1,
0066 process.intProducer2,
0067 process.intProducer,
0068 )
0069 process.p = cms.Path(
0070 process.intConsumer,
0071 process.t
0072 )