Ejemplo n.º 1
0
class DDSimTestCase(unittest.TestCase):
    """ Base class for the DDSim test cases
  """
    def setUp(self):
        """set up the objects"""
        self.dds = DDSim({})

    def test_setrandomseed(self):
        self.assertFalse(self.dds._errorDict)
        self.dds.setRandomSeed(89421)
        self.assertFalse(self.dds._errorDict)
        assertEqualsImproved(self.dds.randomSeed, 89421, self)

    def test_setrandomseed_fails(self):
        self.assertFalse(self.dds._errorDict)
        self.dds.setRandomSeed(['abc'])
        self.assertIn('_checkArgs', self.dds._errorDict)

    def test_setstartfrom(self):
        self.assertFalse(self.dds._errorDict)
        self.dds.setStartFrom(89421)
        self.assertFalse(self.dds._errorDict)
        assertEqualsImproved(self.dds.startFrom, 89421, self)

    def test_setstartfrom_fails(self):
        self.assertFalse(self.dds._errorDict)
        self.dds.setStartFrom('adgiuj')
        self.assertIn('_checkArgs', self.dds._errorDict)

    def test_resolvelinkedparams(self):
        step_mock = Mock()
        input_mock = Mock()
        input_mock.getType.return_value = {'abc': False}
        self.dds._linkedidx = 3
        self.dds._jobsteps = [None, None, None, input_mock]
        assertDiracSucceeds(self.dds._resolveLinkedStepParameters(step_mock),
                            self)
        step_mock.setLink.assert_called_once_with('InputFile', {'abc': False},
                                                  'OutputFile')

    def test_resolvelinkedparams_noinputstep(self):
        self.dds._linkedidx = None
        self.dds._inputappstep = []
        assertDiracSucceeds(self.dds._resolveLinkedStepParameters(None), self)

    def test_checkworkflow_app_missing(self):
        self.dds._inputapp = [
            'some_depdency', 'unavailable_dependency_fail_on_this'
        ]
        self.dds._jobapps = ['myjobapp_1', 'some_dependency']
        assertDiracFailsWith(self.dds._checkWorkflowConsistency(),
                             'job order not correct', self)

    def test_checkworkflow_empty(self):
        self.dds._inputapp = []
        self.dds._jobapps = []
        assertDiracSucceeds(self.dds._checkWorkflowConsistency(), self)

    def test_checkworkflow_success(self):
        self.dds._inputapp = [
            'some_dependency', 'other_dependencies', 'many_more'
        ]
        self.dds._jobapps = [
            'ignore_me', 'many_more', 'some_dependency', 'other_dependencies'
        ]
        assertDiracSucceeds(self.dds._checkWorkflowConsistency(), self)

    def test_userjobmodules(self):
        module_mock = Mock()
        assertDiracSucceeds(self.dds._userjobmodules(module_mock), self)

    def test_prodjobmodules(self):
        module_mock = Mock()
        assertDiracSucceeds(self.dds._prodjobmodules(module_mock), self)

    def test_userjobmodules_fails(self):
        with patch('%s._setUserJobFinalization' % MODULE_NAME, new=Mock(return_value=S_OK('something'))),\
             patch('%s._setApplicationModuleAndParameters' % MODULE_NAME, new=Mock(return_value=S_ERROR('some_test_err'))):
            assertDiracFailsWith(self.dds._userjobmodules(None),
                                 'userjobmodules failed', self)

    def test_prodjobmodules_fails(self):
        with patch('%s._setApplicationModuleAndParameters' % MODULE_NAME, new=Mock(return_value=S_OK('something'))), \
             patch('%s._setOutputComputeDataList' % MODULE_NAME, new=Mock(return_value=S_ERROR('some_other_test_err'))):
            assertDiracFailsWith(self.dds._prodjobmodules(None),
                                 'prodjobmodules failed', self)

    def test_checkconsistency(self):
        self.dds.version = '134'
        self.dds.detectorModel = 'mymodel.det'
        self.dds.outputFile = 'myoutput.file'
        self.dds._jobtype = 'User'
        assertDiracSucceeds(self.dds._checkConsistency(Mock()), self)
        self.assertNotIn(
            {
                'outputFile': '@{OutputFile}',
                'outputPath': '@{OutputPath}',
                'outputDataSE': '@{OutputSE}'
            }, self.dds._listofoutput)
        self.assertNotIn('nbevts', self.dds.prodparameters)
        self.assertNotIn('Process', self.dds.prodparameters)

    def test_checkconsistency_nodetectormodel(self):
        self.dds.version = 123
        self.dds.steeringFile = None
        self.dds.detectorModel = None
        assertDiracFailsWith(self.dds._checkConsistency(Mock()),
                             'no detectormodel set', self)

    def test_checkconsistency_noversion(self):
        self.dds.version = None
        assertDiracFailsWith(self.dds._checkConsistency(Mock()),
                             'no version found', self)

    def test_checkconsistency_existsfails(self):
        self.dds.version = '134'
        self.dds.steeringFile = 'mysteer.file'
        with patch('os.path.exists', new=Mock(return_value=False)), \
             patch.object(inspect.getmodule(DDSim), 'Exists', new=Mock(return_value=S_ERROR('testerr_exists_mock'))):
            assertDiracFailsWith(self.dds._checkConsistency(Mock()),
                                 'testerr_exists_mock', self)

    def test_checkconsistency_userjob(self):
        self.dds.version = '134'
        self.dds.steeringFile = 'mysteer.file'
        self.dds._jobtype = 'notUser'
        self.dds.detectorModel = 'myDetectorv200'
        with patch('os.path.exists', new=Mock(return_value=True)), \
             patch.object(inspect.getmodule(DDSim), 'Exists', new=Mock(return_value=S_ERROR('testerr_exists_mock'))):
            assertDiracSucceeds(self.dds._checkConsistency(Mock()), self)
            self.assertIn(
                {
                    'outputFile': '@{OutputFile}',
                    'outputPath': '@{OutputPath}',
                    'outputDataSE': '@{OutputSE}'
                }, self.dds._listofoutput)
            for keyword in ['detectorType', 'slic_detectormodel']:
                self.assertIn(keyword, self.dds.prodparameters)

    def test_checkconsistency_userjob_notdetmodel(self):
        self.dds.version = '134'
        self.dds.steeringFile = 'mysteer.file'
        self.dds._jobtype = 'notUser'
        self.dds.detectorModel = True
        self.dds.setStartFrom(148)
        with patch('os.path.exists', new=Mock(return_value=False)), \
             patch.object(inspect.getmodule(DDSim), 'Exists', new=Mock(return_value=S_OK())):
            assertDiracSucceeds(self.dds._checkConsistency(Mock()), self)
            self.assertIn(
                {
                    'outputFile': '@{OutputFile}',
                    'outputPath': '@{OutputPath}',
                    'outputDataSE': '@{OutputSE}'
                }, self.dds._listofoutput)
            for keyword in ['detectorType', 'slic_detectormodel']:
                self.assertIn(keyword, self.dds.prodparameters)
Ejemplo n.º 2
0
steeringfile="/cvmfs/ilc.desy.de/sw/ILDConfig/v01-17-10-p01/StandardConfig/lcgeo_current/ddsim_steer.py"

d= DiracILC(True,"repo.rep")

###In case one wants a loop: comment the folowing.
#for i in range(2):
j = UserJob()
j.setJobGroup("Tutorial")
j.setName("DDSim-example")  #%i)
# j.setInputSandbox(setting_file)

ddsim = DDSim()
ddsim.setVersion("ILCSoft-01-17-10")
ddsim.setDetectorModel("ILD_o1_v05")
ddsim.setInputFile(genfile)
ddsim.setRandomSeed(12345)
# ddsim.setStartFrom(1)
ddsim.setNumberOfEvents(5)  # Number of events should not exceed number of events in file.
                            # Otherwise, G4exception is thrown
# ddsim.setDebug()
ddsim.setSteeringFile(steeringfile)
ddsim.setOutputFile(simfile)

res = j.append(ddsim)
if not res['OK']:
    print res['Message']
    exit(1)
  
j.setOutputSandbox(["*.log","*.xml","*.sh","*.root"])
j.dontPromptMe()
def main(argv):
    # Input arguments
    ildconfig_version   = "$ILDCONFIGVER"
    ilcsoft_version     = "$ILCSOFTVER"

    evts_per_run    = $EVTSPERRUN
    detector_model  = "$DETECTOR"
    sim_input       = "$SIMINPUT"
    process_name    = "$PROCESS"

    index           = $IND

    sim_input = diracpath_from_pnfspath( sim_input )
    sim_detector_model = detector_model_wo_option( detector_model )

    job_group = ilcsoft_version + "_" + ildconfig_version + "_" + process_name + "_" + detector_model
    dirac = DiracILC(True,job_group+".rep")

    # outputs to be saved onto grid SE
    RECoutput = []

    # DDSim

    evtStart   = (index-1)*evts_per_run
    evtEnd     = index*evts_per_run - 1
    RandSeed = random.randrange(11623, 99999)

    lcinputSIM  = "LFN:" + sim_input
    lcoutputSIM = ilcsoft_version + ".ILDConfig_" + ildconfig_version + ".E1000." + process_name + ".eLpR.evt%s-%s_SIM.slcio"%(str(evtStart),(str)(evtEnd))

    sim = DDSim()
    sim.setVersion(ilcsoft_version)

    sim.setDetectorModel(sim_detector_model)
    sim.setInputFile(lcinputSIM)
    sim.setSteeringFile("ddsim_steer.py")
    sim.setNumberOfEvents(evts_per_run)
    sim.setRandomSeed(RandSeed)
    sim.setEnergy(1000)
    sim.setStartFrom(evtStart)
    sim.setOutputFile(lcoutputSIM)

    # Marlin
    lcoutputDST = ilcsoft_version + ".ILDConfig_" + ildconfig_version + ".E1000." + process_name + ".eLpR.evt%s-%s_DST.slcio"%(str(evtStart),(str)(evtEnd))

    ma = Marlin()
    ma.setVersion(ilcsoft_version)
    ma.setDetectorModel(detector_model)
    ma.setSteeringFile("MarlinStdReco.xml")
    ma.setExtraCLIArguments( "--constant.lcgeo_DIR=$lcgeo_DIR --constant.DetectorModel={} --global.MaxRecordNumber=0".format(detector_model) )
    ma.setLogFile("marlin.log")
    ma.getInputFromApp(sim)
    ma.setEnergy(1000)
    ma.setOutputDstFile(lcoutputDST)

    RECoutput.append(lcoutputDST)

    # ILCDirac user job
    job = UserJob()
    job.setName("user_sim_reco")

    job.setJobGroup(job_group)

    job.setILDConfig(ildconfig_version)
    job.setCPUTime(86400)

    tmp_file_name = process_name + "_sim_reco_job_tmp.py"
    job.setInputSandbox([tmp_file_name])
    job.setOutputSandbox(["*.log","MarlinStdRecoParsed.xml","marlin*.xml","*.py "])

    job.dontPromptMe()
    job.setBannedSites(['LCG.IN2P3-CC.fr','OSG.UConn.us','LCG.Cracow.pl','OSG.MIT.us','LCG.Glasgow.uk','OSG.CIT.us','OSG.BNL.us','LCG.Brunel.uk','LCG.RAL-LCG2.uk','LCG.Oxford.uk','OSG.UCSDT2.us'])

    # run simulation job
    simres = job.append(sim)
    if not simres['OK']:
            print simres['Not ok appending ddsim to job']
            quit()


    # run Malrin reco jobs
    mares = job.append(ma)
    if not mares['OK']:
            print mares['Not ok appending Marlin to job']
            quit()

    job.setOutputData(RECoutput,"ILDPerformance/WWZZSeparation/{}_ILDConfig_{}_{}".format(ilcsoft_version,ildconfig_version,detector_model),"DESY-SRM")
    print RECoutput

    submit_output = job.submit(dirac)
    print submit_output