Exemple #1
0
class SeederTest(unittest.TestCase):
    def setUp(self):
        """
        _setUp_

        """

        self.manager = SeederManager()

        self.seedlistForRandom = {
            "simMuonRPCDigis.initialSeed": None,
            "simEcalUnsuppressedDigis.initialSeed": None,
            "simCastorDigis.initialSeed": None,
            "generator.initialSeed": None,
            "simSiStripDigis.initialSeed": None,
            "LHCTransport.initialSeed": None,
            "mix.initialSeed": None,
            "simHcalUnsuppressedDigis.initialSeed": None,
            "theSource.initialSeed": None,
            "simMuonCSCDigis.initialSeed": None,
            "VtxSmeared.initialSeed": None,
            "g4SimHits.initialSeed": None,
            "simSiPixelDigis.initialSeed": None,
            "simMuonDTDigis.initialSeed": None,
            "evtgenproducer.initialSeed": None,
        }

        return

    def tearDown(self):
        """
        _tearDown_

        """
        # Do nothing

        return

    def oneHundredFiles(self, splittingAlgo="EventBased", jobType="Processing"):
        """
        _oneHundredFiles_
        
        Generate a WMBS data stack representing 100 files for job splitter
        testing
        
        """
        fileset1 = Fileset(name="EventBasedFiles1")
        for i in range(0, 100):
            f = File(
                "/store/MultipleFileSplit%s.root" % i, 1000, 100, 10 + i, 12312  # lfn  # size  # events  # run  # lumi
            )
            f["locations"].add("BULLSHIT")

            fileset1.addFile(f)

        work = Workflow()
        subscription1 = Subscription(fileset=fileset1, workflow=work, split_algo=splittingAlgo, type=jobType)
        splitter = SplitterFactory()
        jobfactory = splitter(subscription1)
        jobs = jobfactory(events_per_job=100)
        # for jobGroup in jobs:
        #    yield jobGroup

        self.manager.addSeeder("RandomSeeder", **self.seedlistForRandom)
        self.manager.addSeeder("RunAndLumiSeeder")

        return jobs

    def testSimpleFiles(self):
        """
        _testSimpleFiles_

        
        test using one hundred files that we can save the attributes in a job
        """
        jobs = self.oneHundredFiles()

        for jobGrp in jobs:
            self.manager(jobGrp)

        for jobGrp in jobs:
            count = 0
            for job in jobGrp.jobs:
                conf = job.getBaggage()
                self.assertEqual(hasattr(conf.RandomSeeder.evtgenproducer, "initialSeed"), True)
                self.assertEqual(hasattr(conf.RandomSeeder.generator, "initialSeed"), True)
                self.assertEqual(job["mask"]["FirstLumi"], count % 11)
                self.assertEqual(job["mask"]["FirstRun"], (count / 11) + 1)
                count += 1

        return

    def testWMTask(self):
        """
        _testWMTask_
        
        Test whether or not we can read the seeder parameters out of a WMTask.
        Also tests RandomSeeder and RunAndLumiSeeder
        """

        task1 = makeWMTask("task1")

        randomDict = {"generator.initialSeed": None, "evtgenproducer.initialSeed": None, "MAXINT": 10000}
        lumiDict = {"lumi_per_run": 5}

        task1.addGenerator("RandomSeeder", **randomDict)
        task1.addGenerator("RunAndLumiSeeder", **lumiDict)

        manager = SeederManager(task=task1)

        jobs = self.oneHundredFiles()

        for jobGrp in jobs:
            manager(jobGrp)

        for jobGrp in jobs:
            count = 0
            for job in jobGrp.jobs:
                conf = job.getBaggage()
                self.assertEqual(hasattr(conf.RandomSeeder.evtgenproducer, "initialSeed"), True)
                self.assertEqual(hasattr(conf.RandomSeeder.generator, "initialSeed"), True)
                self.assertEqual(job["mask"]["FirstLumi"], count % 6)
                self.assertEqual(job["mask"]["FirstRun"], (count / 6) + 1)
                x = conf.RandomSeeder.generator.initialSeed
                assert x > 0, "ERROR: producing negative random numbers"
                assert x < 10000, "ERROR: MAXINT tag failed; producing bad random number %i" % (x)
                count += 1

        return

    def testPresetSeeder(self):
        """
        _testPresetSeeder_
        
        Test whether the PresetSeeder works
        """

        task1 = makeWMTask("task2")

        seederDict = {"generator.initialSeed": 1001, "evtgenproducer.initialSeed": 1001}
        task1.addGenerator("PresetSeeder", **seederDict)

        manager = SeederManager(task=task1)

        jobs = self.oneHundredFiles()

        for jobGrp in jobs:
            manager(jobGrp)

        for jobGrp in jobs:
            count = 0
            for job in jobGrp.jobs:
                conf = job.getBaggage()
                self.assertEqual(conf.PresetSeeder.evtgenproducer.initialSeed, 1001)
                self.assertEqual(conf.PresetSeeder.generator.initialSeed, 1001)

        return