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)
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