Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:12:41

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 args = parser.parse_args()
0012 
0013 class ProcessAcceleratorTest(cms.ProcessAccelerator):
0014     def __init__(self):
0015         super(ProcessAcceleratorTest,self).__init__()
0016         self._labels = ["test1", "test2"]
0017         self._enabled = ["test1"]
0018         if args.enableTest2:
0019             self._enabled.append("test2")
0020     def labels(self):
0021         return self._labels
0022     def enabledLabels(self):
0023         return self._enabled
0024 
0025 class SwitchProducerTest(cms.SwitchProducer):
0026     def __init__(self, **kargs):
0027         super(SwitchProducerTest,self).__init__(
0028             dict(
0029                 cpu = cms.SwitchProducer.getCpu(),
0030                 test1 = lambda accelerators: ("test1" in accelerators, 2),
0031                 test2 = lambda accelerators: ("test2" in accelerators, 3),
0032             ), **kargs)
0033 
0034 process = cms.Process("PROD1")
0035 
0036 process.add_(ProcessAcceleratorTest())
0037 
0038 process.source = cms.Source("EmptySource")
0039 process.maxEvents.input = 3
0040 if args.accelerators is not None:
0041     process.options.accelerators = args.accelerators.split(",")
0042 
0043 process.intProducer1 = cms.EDProducer("ManyIntProducer", ivalue = cms.int32(1))
0044 process.intProducer2 = cms.EDProducer("ManyIntProducer", ivalue = cms.int32(2))
0045 process.failIntProducer = cms.EDProducer("ManyIntProducer", ivalue = cms.int32(-1), throw = cms.untracked.bool(True))
0046 
0047 if args.enableTest2 and ("test2" in process.options.accelerators or "*" in process.options.accelerators):
0048     process.intProducer1.throw = cms.untracked.bool(True)
0049 else:
0050     process.intProducer2.throw = cms.untracked.bool(True)
0051 
0052 process.intProducer = SwitchProducerTest(
0053     cpu = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("failIntProducer")),
0054     test1 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer1")),
0055     test2 = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer2"))
0056 )
0057 
0058 process.intConsumer = cms.EDProducer("AddIntsProducer", labels = cms.VInputTag("intProducer"))
0059 
0060 process.t = cms.Task(
0061     process.failIntProducer,
0062     process.intProducer1,
0063     process.intProducer2,
0064     process.intProducer,
0065 )
0066 process.p = cms.Path(
0067     process.intConsumer,
0068     process.t
0069 )