ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/CRAB/python/cms_cmssw.py
(Generate patch)

Comparing COMP/CRAB/python/cms_cmssw.py (file contents):
Revision 1.8 by gutsche, Wed Jun 14 20:52:32 2006 UTC vs.
Revision 1.27 by spiga, Thu Jul 6 17:50:33 2006 UTC

# Line 2 | Line 2 | from JobType import JobType
2   from crab_logger import Logger
3   from crab_exceptions import *
4   from crab_util import *
5 + import math
6   import common
7   import PsetManipulator  
8  
# Line 40 | Line 41 | class Cmssw(JobType):
41  
42          ### collect Data cards
43          try:
44 <         #   self.owner = cfg_params['CMSSW.owner']
45 <         #   log.debug(6, "CMSSW::CMSSW(): owner = "+self.owner)
46 <         #   self.dataset = cfg_params['CMSSW.dataset']
47 <            self.datasetPath = cfg_params['CMSSW.datasetpath']
48 <            log.debug(6, "CMSSW::CMSSW(): datasetPath = "+self.datasetPath)
44 >            tmp =  cfg_params['CMSSW.datasetpath']
45 >            log.debug(6, "CMSSW::CMSSW(): datasetPath = "+tmp)
46 >            if string.lower(tmp)=='none':
47 >                self.datasetPath = None
48 >                self.selectNoInput = 1
49 >            else:
50 >                self.datasetPath = tmp
51 >                self.selectNoInput = 0
52          except KeyError:
49        #    msg = "Error: owner and/or dataset not defined "
53              msg = "Error: datasetpath not defined "  
54              raise CrabException(msg)
55  
56          # ML monitoring
57          # split dataset path style: /PreProdR3Minbias/SIM/GEN-SIM
58 <        datasetpath_split = self.datasetPath.split("/")
59 <        self.setParam_('dataset', datasetpath_split[1])
60 <        self.setParam_('owner', datasetpath_split[-1])
58 >        if not self.datasetPath:
59 >            self.setParam_('dataset', 'None')
60 >            self.setParam_('owner', 'None')
61 >        else:
62 >            datasetpath_split = self.datasetPath.split("/")
63 >            self.setParam_('dataset', datasetpath_split[1])
64 >            self.setParam_('owner', datasetpath_split[-1])
65 >
66          self.setTaskid_()
67          self.setParam_('taskId', self.cfg_params['taskId'])
68  
61
62
63
69          self.dataTiers = []
65 #       try:
66 #           tmpDataTiers = string.split(cfg_params['CMSSW.data_tier'],',')
67 #           for tmp in tmpDataTiers:
68 #               tmp=string.strip(tmp)
69 #               self.dataTiers.append(tmp)
70 #               pass
71 #           pass
72 #       except KeyError:
73 #           pass
74 #       log.debug(6, "Cmssw::Cmssw(): dataTiers = "+str(self.dataTiers))
70  
71          ## now the application
72          try:
# Line 117 | Line 112 | class Cmssw(JobType):
112  
113          # script_exe file as additional file in inputSandbox
114          try:
115 <           self.scriptExe = cfg_params['USER.script_exe']
116 <           self.additional_inbox_files.append(self.scriptExe)
115 >            self.scriptExe = cfg_params['USER.script_exe']
116 >            self.additional_inbox_files.append(self.scriptExe)
117 >            if self.scriptExe != '':
118 >               if not os.path.isfile(self.scriptExe):
119 >                  msg ="WARNING. file "+self.scriptExe+" not found"
120 >                  raise CrabException(msg)
121          except KeyError:
122             pass
124        if self.scriptExe != '':
125           if os.path.isfile(self.scriptExe):
126              pass
127           else:
128              log.message("WARNING. file "+self.scriptExe+" not found")
129              sys.exit()
123                    
124          ## additional input files
125          try:
# Line 141 | Line 134 | class Cmssw(JobType):
134          except KeyError:
135              pass
136  
137 +        # files per job
138          try:
139              self.filesPerJob = int(cfg_params['CMSSW.files_per_jobs']) #Daniele
140 +            self.selectFilesPerJob = 1
141          except KeyError:
142 <            self.filesPerJob = 1
142 >            self.filesPerJob = 0
143 >            self.selectFilesPerJob = 0
144  
145 <        ## Max event   will be total_number_of_events ???  Daniele
145 >        ## Events per job
146          try:
147 <            self.maxEv = cfg_params['CMSSW.event_per_job']
147 >            self.eventsPerJob =int( cfg_params['CMSSW.events_per_job'])
148 >            self.selectEventsPerJob = 1
149          except KeyError:
150 <            self.maxEv = "-1"
151 <        ##  
150 >            self.eventsPerJob = -1
151 >            self.selectEventsPerJob = 0
152 >    
153 >        ## number of jobs
154 >        try:
155 >            self.theNumberOfJobs =int( cfg_params['CMSSW.number_of_jobs'])
156 >            self.selectNumberOfJobs = 1
157 >        except KeyError:
158 >            self.theNumberOfJobs = 0
159 >            self.selectNumberOfJobs = 0
160 >
161 >        ## source seed for pythia
162 >        try:
163 >            self.sourceSeed = int(cfg_params['CMSSW.pythia_seed'])
164 >        except KeyError:
165 >            self.sourceSeed = None
166 >            common.logger.debug(5,"No seed given")
167 >
168 >        if not (self.selectFilesPerJob + self.selectEventsPerJob + self.selectNumberOfJobs == 1 ):
169 >            msg = 'Must define either files_per_jobs or events_per_job or number_of_jobs'
170 >            raise CrabException(msg)
171 >
172          try:
173              self.total_number_of_events = int(cfg_params['CMSSW.total_number_of_events'])
174          except KeyError:
# Line 196 | Line 213 | class Cmssw(JobType):
213          self.maxEvents=0  # max events available   ( --> check the requested nb. of evts in Creator.py)
214          self.DBSPaths={}  # all dbs paths requested ( --> input to the site local discovery script)
215          ## Perform the data location and discovery (based on DBS/DLS)
216 <        self.DataDiscoveryAndLocation(cfg_params)
216 >        ## SL: Don't if NONE is specified as input (pythia use case)
217 >        common.analisys_common_info['sites']=None
218 >        if self.datasetPath:
219 >            self.DataDiscoveryAndLocation(cfg_params)
220          #DBSDLS-end          
221  
222          self.tgzNameWithPath = self.getTarBall(self.executable)
223 +    
224 +        ## Select Splitting
225 +        if self.selectNoInput: self.jobSplittingNoInput()
226 +        elif self.selectFilesPerJob or self.selectEventsPerJob or self.selectNumberOfJobs: self.jobSplittingPerFiles()
227 +        else:
228 +            msg = 'Don\'t know how to split...'
229 +            raise CrabException(msg)
230  
231 <        self.jobSplitting()  #Daniele job Splitting
232 <        self.PsetEdit.maxEvent(self.maxEv) #Daniele  
233 <        self.PsetEdit.inputModule("INPUT") #Daniele  
234 <        self.PsetEdit.psetWriter(self.configFilename())
235 <        
236 <
231 >        # modify Pset
232 >        try:
233 >            if (self.datasetPath): # standard job
234 >                #self.PsetEdit.maxEvent(self.eventsPerJob)
235 >                # always process all events in a file
236 >                self.PsetEdit.maxEvent("-1")
237 >                self.PsetEdit.inputModule("INPUT")
238 >
239 >            else:  # pythia like job
240 >                self.PsetEdit.maxEvent(self.eventsPerJob)
241 >                if (self.sourceSeed) :
242 >                    self.PsetEdit.pythiaSeed("INPUT","INPUTVTX")
243 >            self.PsetEdit.psetWriter(self.configFilename())
244 >        except:
245 >            msg='Error while manipuliating ParameterSet: exiting...'
246 >            raise CrabException(msg)
247  
248      def DataDiscoveryAndLocation(self, cfg_params):
249  
250          common.logger.debug(10,"CMSSW::DataDiscoveryAndLocation()")
251  
215        #datasetPath = "/"+self.owner+"/"+self.dataTiers[0]+"/"+self.dataset
216        
252          datasetPath=self.datasetPath
253  
254          ## TODO
# Line 241 | Line 276 | class Cmssw(JobType):
276          common.logger.message("Required data are :"+self.datasetPath)
277  
278          filesbyblock=self.pubdata.getFiles()
279 + #        print filesbyblock
280          self.AllInputFiles=filesbyblock.values()
281          self.files = self.AllInputFiles        
282  
247        ## TEMP
248    #    self.filesTmp = filesbyblock.values()
249    #    self.files = []
250    #    locPath='rfio:cmsbose2.bo.infn.it:/flatfiles/SE00/cms/fanfani/ProdTest/'
251    #    locPath=''
252    #    tmp = []
253    #    for file in self.filesTmp[0]:
254    #        tmp.append(locPath+file)
255    #    self.files.append(tmp)
256        ## END TEMP
257
283          ## get max number of events
284          #common.logger.debug(10,"number of events for primary fileblocks %i"%self.pubdata.getMaxEvents())
285          self.maxEvents=self.pubdata.getMaxEvents() ##  self.maxEvents used in Creator.py
# Line 279 | Line 304 | class Cmssw(JobType):
304              msg = 'No sites hosting all the needed data! Exiting... '
305              raise CrabException(msg)
306  
307 <        common.logger.message("List of Sites hosting the data : "+str(sites))
307 >        common.logger.message("List of Sites ("+str(len(sites))+") hosting the data : "+str(sites))
308          common.logger.debug(6, "List of Sites: "+str(sites))
309          common.analisys_common_info['sites']=sites    ## used in SchedulerEdg.py in createSchScript
310          self.setParam_('TargetCE', ','.join(sites))
311          return
312      
313 <    def jobSplitting(self):
313 >    def jobSplittingPerFiles(self):
314          """
315 <        first implemntation for job splitting  
316 <        """    
317 <      #  print 'eventi totali '+str(self.maxEvents)
293 <      #  print 'eventi totali richiesti dallo user '+str(self.total_number_of_events)
294 <        #print 'files per job '+str(self.filesPerJob)
295 <        common.logger.message('Required '+str(self.filesPerJob)+' files per job ')
315 >        Perform job splitting based on number of files to be accessed per job
316 >        """
317 >        common.logger.debug(5,'Splitting per input files')
318          common.logger.message('Required '+str(self.total_number_of_events)+' events in total ')
319 +        common.logger.message('Available '+str(self.maxEvents)+' events in total ')
320 +        common.logger.message('Required '+str(self.filesPerJob)+' files per job ')
321 +        common.logger.message('Required '+str(self.theNumberOfJobs)+' jobs in total ')
322 +        common.logger.message('Required '+str(self.eventsPerJob)+' events per job')
323 +
324 +        ## if asked to process all events, do it
325 +        if self.total_number_of_events == -1:
326 +            self.total_number_of_events=self.maxEvents
327 +        else:
328 +            if self.total_number_of_events>self.maxEvents:
329 +                common.logger.message("Asked "+str(self.total_number_of_events)+" but only "+str(self.maxEvents)+" available.")
330 +                self.total_number_of_events=self.maxEvents
331 +            pass
332  
333          ## TODO: SL need to have (from DBS) a detailed list of how many events per each file
334          n_tot_files = (len(self.files[0]))
335          ## SL: this is wrong if the files have different number of events
336          evPerFile = int(self.maxEvents)/n_tot_files
337 <        
337 >
338          common.logger.debug(5,'Events per File '+str(evPerFile))
339  
340 <        ## if asked to process all events, do it
341 <        if self.total_number_of_events == -1:
342 <            self.total_number_of_events=self.maxEvents
343 <            self.total_number_of_jobs = int(n_tot_files)*1/int(self.filesPerJob)
344 <            common.logger.message(str(self.total_number_of_jobs)+' jobs will be created for all available events '+str(self.total_number_of_events)+' events')
340 >        ## compute job splitting parameters: filesPerJob, eventsPerJob and theNumberOfJobs
341 >        if self.selectFilesPerJob:
342 >            ## user define files per event.
343 >            filesPerJob = self.filesPerJob
344 >            eventsPerJob = filesPerJob*evPerFile
345 >            theNumberOfJobs = int(self.total_number_of_events*1./eventsPerJob)
346 >            check = int(self.total_number_of_events) - (theNumberOfJobs*eventsPerJob)
347 >            if check > 0:
348 >                theNumberOfJobs +=1
349 >                filesLastJob = int(check*1./evPerFile+0.5)
350 >                common.logger.message('Warning: last job will be created with '+str(check)+' files')
351 >            else:
352 >                filesLastJob = filesPerJob
353 >
354 >        elif self.selectNumberOfJobs:
355 >            ## User select the number of jobs: last might be bigger to match request of events
356 >            theNumberOfJobs =  self.theNumberOfJobs
357 >
358 >            eventsPerJob = self.total_number_of_events/theNumberOfJobs
359 >            filesPerJob = int(eventsPerJob/evPerFile)
360 >            if (filesPerJob==0) : filesPerJob=1
361 >            check = int(self.total_number_of_events) - (int(theNumberOfJobs)*filesPerJob*evPerFile)
362 >            if not check == 0:
363 >                if check<0:
364 >                    missingFiles = int(check/evPerFile)
365 >                    additionalJobs = int(missingFiles/filesPerJob)
366 >                    #print missingFiles, additionalJobs
367 >                    theNumberOfJobs+=additionalJobs
368 >                    common.logger.message('Warning: will create only '+str(theNumberOfJobs)+' jobs')
369 >                    check = int(self.total_number_of_events) - (int(theNumberOfJobs)*filesPerJob*evPerFile)
370 >                    
371 >                if check >0 :
372 >                    filesLastJob = filesPerJob+int(check*1./evPerFile+0.5)
373 >                    common.logger.message('Warning: last job will be created with '+str(filesLastJob*evPerFile)+' events')
374 >                else:
375 >                    filesLastJob = filesPerJob
376 >            else:
377 >                filesLastJob = filesPerJob
378 >        elif self.selectEventsPerJob:
379 >            # SL case if asked events per job
380 >            ## estimate the number of files per job to match the user requirement
381 >            filesPerJob = int(float(self.eventsPerJob)/float(evPerFile))
382 >            if filesPerJob==0: filesPerJob=1
383 >            common.logger.debug(5,"filesPerJob "+str(filesPerJob))
384 >            if (filesPerJob==0): filesPerJob=1
385 >            eventsPerJob=filesPerJob*evPerFile
386 >            theNumberOfJobs = int(self.total_number_of_events)/int(eventsPerJob)
387 >            check = int(self.total_number_of_events) - (int(theNumberOfJobs)*eventsPerJob)
388 >            if not check == 0:
389 >                missingFiles = int(check/evPerFile)
390 >                additionalJobs = int(missingFiles/filesPerJob)
391 >                if ( additionalJobs>0) : theNumberOfJobs+=additionalJobs
392 >                check = int(self.total_number_of_events) - (int(theNumberOfJobs)*eventsPerJob)
393 >                if not check == 0:
394 >                    if (check <0 ):
395 >                        filesLastJob = filesPerJob+int(check*1./evPerFile-0.5)
396 >                    else:
397 >                        theNumberOfJobs+=1
398 >                        filesLastJob = int(check*1./evPerFile+0.5)
399 >
400 >                    common.logger.message('Warning: last job will be created with '+str(filesLastJob*evPerFile)+' events')
401 >                else:
402 >                    filesLastJob = filesPerJob
403 >            else:
404 >                filesLastJob = filesPerJob
405          
406 <        else:
407 <            self.total_number_of_files = int(self.total_number_of_events/evPerFile)
408 <            ## SL: if ask for less event than what is computed to be available on a
409 <            ##     file, process the first file anyhow.
410 <            if self.total_number_of_files == 0:
411 <                self.total_number_of_files = self.total_number_of_files + 1
406 >        self.total_number_of_jobs = theNumberOfJobs
407 >
408 >        totalEventsToBeUsed=theNumberOfJobs*filesPerJob*evPerFile
409 >        if not check == 0:
410 >        #    print (theNumberOfJobs-1)*filesPerJob*evPerFile,filesLastJob*evPerFile
411 >            totalEventsToBeUsed=(theNumberOfJobs-1)*filesPerJob*evPerFile+filesLastJob*evPerFile
412  
413 <            common.logger.debug(5,'N files  '+str(self.total_number_of_files))
413 >        common.logger.message(str(self.total_number_of_jobs)+' jobs will be created, each for '+str(filesPerJob*evPerFile)+' events, for a total of '+str(totalEventsToBeUsed)+' events')
414  
415 <            check = 0
415 >        totalFilesToBeUsed=filesPerJob*(theNumberOfJobs-1)+filesLastJob
416 >
417 >        ## set job arguments (files)
418 >        list_of_lists = []
419 >        lastFile=0
420 >        for i in range(0, int(totalFilesToBeUsed), filesPerJob)[:-1]:
421 >            parString = "\\{"
422 >            
423 >            lastFile=i+filesPerJob
424 >            params = self.files[0][i: lastFile]
425 >            for i in range(len(params) - 1):
426 >                parString += '\\\"' + params[i] + '\\\"\,'
427              
428 <            ## Compute the number of jobs
429 <            #self.total_number_of_jobs = int(n_tot_files)*1/int(self.filesPerJob)
430 <            self.total_number_of_jobs = int(self.total_number_of_files/self.filesPerJob)
325 <            common.logger.debug(5,'N jobs  '+str(self.total_number_of_jobs))
428 >            parString += '\\\"' + params[len(params) - 1] + '\\\"\\}'
429 >            list_of_lists.append([parString])
430 >            pass
431  
432 <            ## is there any remainder?
433 <            check = int(self.total_number_of_files) - (int(self.total_number_of_jobs)*self.filesPerJob)
432 >        ## last job
433 >        parString = "\\{"
434 >        
435 >        params = self.files[0][lastFile: lastFile+filesLastJob]
436 >        for i in range(len(params) - 1):
437 >            parString += '\\\"' + params[i] + '\\\"\,'
438 >        
439 >        parString += '\\\"' + params[len(params) - 1] + '\\\"\\}'
440 >        list_of_lists.append([parString])
441 >        pass
442  
443 <            common.logger.debug(5,'Check  '+str(check))
443 >        self.list_of_args = list_of_lists
444 >        # print self.list_of_args[0]
445 >        return
446  
447 <            if check > 0:
448 <                self.total_number_of_jobs =  self.total_number_of_jobs + 1
449 <                common.logger.message('Warning: last job will be created with '+str(check)+' files')
447 >    def jobSplittingNoInput(self):
448 >        """
449 >        Perform job splitting based on number of event per job
450 >        """
451 >        common.logger.debug(5,'Splitting per events')
452 >        common.logger.message('Required '+str(self.eventsPerJob)+' events per job ')
453 >        common.logger.message('Required '+str(self.theNumberOfJobs)+' jobs in total ')
454 >        common.logger.message('Required '+str(self.total_number_of_events)+' events in total ')
455  
456 <            common.logger.message(str(self.total_number_of_jobs)+' jobs will be created for a total of '+str((self.total_number_of_jobs-1)*self.filesPerJob*evPerFile + check*evPerFile)+' events')
457 <            pass
456 >        if (self.total_number_of_events < 0):
457 >            msg='Cannot split jobs per Events with "-1" as total number of events'
458 >            raise CrabException(msg)
459 >
460 >        if (self.selectEventsPerJob):
461 >            self.total_number_of_jobs = int(self.total_number_of_events/self.eventsPerJob)
462 >        elif (self.selectNumberOfJobs) :
463 >            self.total_number_of_jobs = self.theNumberOfJobs
464 >            self.eventsPerJob = int(self.total_number_of_events/self.total_number_of_jobs)
465 >
466 >        common.logger.debug(5,'N jobs  '+str(self.total_number_of_jobs))
467 >
468 >        # is there any remainder?
469 >        check = int(self.total_number_of_events) - (int(self.total_number_of_jobs)*self.eventsPerJob)
470 >
471 >        common.logger.debug(5,'Check  '+str(check))
472 >
473 >        common.logger.message(str(self.total_number_of_jobs)+' jobs will be created, each for '+str(self.eventsPerJob)+' for a total of '+str(self.total_number_of_jobs*self.eventsPerJob)+' events')
474 >        if check > 0:
475 >            common.logger.message('Warning: asked '+str(self.total_number_of_events)+' but will do only '+str(int(self.total_number_of_jobs)*self.eventsPerJob))
476  
339        list_of_lists = []
340        for i in xrange(0, int(n_tot_files), self.filesPerJob):
341            list_of_lists.append(self.files[0][i: i+self.filesPerJob])
477  
478 <        self.list_of_files = list_of_lists
479 <      
478 >        # argument is seed number.$i
479 >        self.list_of_args = []
480 >        for i in range(self.total_number_of_jobs):
481 >            if (self.sourceSeed):
482 >                self.list_of_args.append([(str(self.sourceSeed)+str(i))])
483 >            else:
484 >                self.list_of_args.append([str(i)])
485 >        #print self.list_of_args
486 >
487          return
488  
489      def split(self, jobParams):
# Line 349 | Line 491 | class Cmssw(JobType):
491          common.jobDB.load()
492          #### Fabio
493          njobs = self.total_number_of_jobs
494 <        filelist = self.list_of_files
494 >        arglist = self.list_of_args
495          # create the empty structure
496          for i in range(njobs):
497              jobParams.append("")
498          
499          for job in range(njobs):
500 <            jobParams[job] = filelist[job]
500 >            jobParams[job] = arglist[job]
501 >            # print str(arglist[job])
502 >            # print jobParams[job]
503              common.jobDB.setArguments(job, jobParams[job])
504  
505          common.jobDB.save()
506          return
507      
508      def getJobTypeArguments(self, nj, sched):
509 <        params = common.jobDB.arguments(nj)
510 <        #print params
511 <        parString = "\\{"
512 <        
369 <        for i in range(len(params) - 1):
370 <            parString += '\\\"' + params[i] + '\\\"\,'
371 <        
372 <        parString += '\\\"' + params[len(params) - 1] + '\\\"\\}'
373 <        return parString
509 >        result = ''
510 >        for i in common.jobDB.arguments(nj):
511 >            result=result+str(i)+" "
512 >        return result
513    
514      def numberOfJobs(self):
515          # Fabio
377
516          return self.total_number_of_jobs
379
380
517  
518      def checkBlackList(self, allSites):
519          if len(self.reCEBlackList)==0: return allSites
# Line 517 | Line 653 | class Cmssw(JobType):
653          txt += '        echo "JOB_EXIT_STATUS = 10016"\n'
654          txt += '        echo "JobExitCode=10016" | tee -a $RUNTIME_AREA/$repo\n'
655          txt += '        dumpStatus $RUNTIME_AREA/$repo\n'
656 +        txt += '        rm -f $RUNTIME_AREA/$repo \n'
657 +        txt += '        echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
658 +        txt += '        echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
659          txt += '        exit 1\n'
660          txt += '    fi\n'
661          txt += '\n'
# Line 536 | Line 675 | class Cmssw(JobType):
675          txt += '   echo "JOB_EXIT_STATUS = 10034"\n'
676          txt += '   echo "JobExitCode=10034" | tee -a $RUNTIME_AREA/$repo\n'
677          txt += '   dumpStatus $RUNTIME_AREA/$repo\n'
678 +        txt += '   rm -f $RUNTIME_AREA/$repo \n'
679 +        txt += '   echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
680 +        txt += '   echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
681          ## OLI_Daniele
682          txt += '    if [ $middleware == OSG ]; then \n'
683          txt += '        echo "Remove working directory: $WORKING_DIR"\n'
# Line 546 | Line 688 | class Cmssw(JobType):
688          txt += '            echo "JOB_EXIT_STATUS = 10018"\n'
689          txt += '            echo "JobExitCode=10018" | tee -a $RUNTIME_AREA/$repo\n'
690          txt += '            dumpStatus $RUNTIME_AREA/$repo\n'
691 +        txt += '            rm -f $RUNTIME_AREA/$repo \n'
692 +        txt += '            echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
693 +        txt += '            echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
694          txt += '        fi\n'
695          txt += '    fi \n'
696          txt += '   exit 1 \n'
# Line 566 | Line 711 | class Cmssw(JobType):
711          txt += '    echo "JOB_EXIT_STATUS = 50113"\n'
712          txt += '    echo "JobExitCode=50113" | tee -a $RUNTIME_AREA/$repo\n'
713          txt += '    dumpStatus $RUNTIME_AREA/$repo\n'
714 +        txt += '    rm -f $RUNTIME_AREA/$repo \n'
715 +        txt += '    echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
716 +        txt += '    echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
717          ## OLI_Daniele
718          txt += '    if [ $middleware == OSG ]; then \n'
719          txt += '        echo "Remove working directory: $WORKING_DIR"\n'
# Line 576 | Line 724 | class Cmssw(JobType):
724          txt += '            echo "JOB_EXIT_STATUS = 50114"\n'
725          txt += '            echo "JobExitCode=50114" | tee -a $RUNTIME_AREA/$repo\n'
726          txt += '            dumpStatus $RUNTIME_AREA/$repo\n'
727 +        txt += '            rm -f $RUNTIME_AREA/$repo \n'
728 +        txt += '            echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
729 +        txt += '            echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
730          txt += '        fi\n'
731          txt += '    fi \n'
732          txt += "    exit 1\n"
# Line 586 | Line 737 | class Cmssw(JobType):
737          job = common.job_list[nj]
738          pset = os.path.basename(job.configFilename())
739          txt += '\n'
740 <        txt += 'InputFiles=$2\n'
741 <        txt += 'echo "<$InputFiles>"\n'
742 <        #txt += 'echo sed "s#{\'INPUT\'}#$InputFiles#" $RUNTIME_AREA/'+pset+' \n'
743 <        txt += 'sed "s#{\'INPUT\'}#$InputFiles#" $RUNTIME_AREA/'+pset+' > pset.cfg\n'
744 <        #txt += 'sed "s#{\'INPUT\'}#${InputFiles}#" $RUNTIME_AREA/'+pset+' > pset1.cfg\n'
740 >        if (self.datasetPath): # standard job
741 >            txt += 'InputFiles=$2\n'
742 >            txt += 'echo "Inputfiles:<$InputFiles>"\n'
743 >            txt += 'sed "s#{\'INPUT\'}#$InputFiles#" $RUNTIME_AREA/'+pset+' > pset.cfg\n'
744 >        else:  # pythia like job
745 >            if (self.sourceSeed):
746 >                txt += 'Seed=$2\n'
747 >                txt += 'echo "Seed: <$Seed>"\n'
748 >                txt += 'sed "s#INPUT#$Seed#" $RUNTIME_AREA/'+pset+' > pset.cfg\n'
749 >            else:
750 >                txt += '# Copy untouched pset\n'
751 >                txt += 'cp $RUNTIME_AREA/'+pset+' pset.cfg\n'
752 >
753  
754          if len(self.additional_inbox_files) > 0:
755              for file in self.additional_inbox_files:
# Line 633 | Line 792 | class Cmssw(JobType):
792              txt += '       cd $RUNTIME_AREA\n'
793              txt += '       /bin/rm -rf $WORKING_DIR\n'
794              txt += '       if [ -d $WORKING_DIR ] ;then\n'
795 <            txt += '        echo "SET_EXE 50999 ==> OSG $WORKING_DIR could not be deleted on WN `hostname` after Untarring .tgz file failed"\n'
796 <            txt += '        echo "JOB_EXIT_STATUS = 50999"\n'
797 <            txt += '        echo "JobExitCode=50999" | tee -a $RUNTIME_AREA/$repo\n'
798 <            txt += '        dumpStatus $RUNTIME_AREA/$repo\n'
795 >            txt += '           echo "SET_EXE 50999 ==> OSG $WORKING_DIR could not be deleted on WN `hostname` after Untarring .tgz file failed"\n'
796 >            txt += '           echo "JOB_EXIT_STATUS = 50999"\n'
797 >            txt += '           echo "JobExitCode=50999" | tee -a $RUNTIME_AREA/$repo\n'
798 >            txt += '           dumpStatus $RUNTIME_AREA/$repo\n'
799 >            txt += '           rm -f $RUNTIME_AREA/$repo \n'
800 >            txt += '           echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
801 >            txt += '           echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
802              txt += '       fi\n'
803              txt += '   fi \n'
804              txt += '   \n'
# Line 714 | Line 876 | class Cmssw(JobType):
876              txt += '\n'
877              txt += '# check output file\n'
878              txt += 'ls '+fileWithSuffix+'\n'
879 <            txt += 'exe_result=$?\n'
880 <            txt += 'if [ $exe_result -ne 0 ] ; then\n'
881 <            txt += '   echo "ERROR: No output file to manage"\n'
882 <            txt += '   echo "JOB_EXIT_STATUS = $exe_result"\n'
883 <            txt += '   echo "JobExitCode=60302" | tee -a $RUNTIME_AREA/$repo\n'
884 <            txt += '   dumpStatus $RUNTIME_AREA/$repo\n'
879 >            txt += 'ls_result=$?\n'
880 >            #txt += 'exe_result=$?\n'
881 >            txt += 'if [ $ls_result -ne 0 ] ; then\n'
882 >            txt += '   echo "ERROR: Problem with output file"\n'
883 >            #txt += '   echo "JOB_EXIT_STATUS = $exe_result"\n'
884 >            #txt += '   echo "JobExitCode=60302" | tee -a $RUNTIME_AREA/$repo\n'
885 >            #txt += '   dumpStatus $RUNTIME_AREA/$repo\n'
886              ### OLI_DANIELE
887              if common.scheduler.boss_scheduler_name == 'condor_g':
888                  txt += '    if [ $middleware == OSG ]; then \n'
# Line 733 | Line 896 | class Cmssw(JobType):
896          txt += 'cd $RUNTIME_AREA\n'
897          file_list=file_list[:-1]
898          txt += 'file_list="'+file_list+'"\n'
899 +        txt += 'cd $RUNTIME_AREA\n'
900          ### OLI_DANIELE
901          txt += 'if [ $middleware == OSG ]; then\n'  
902          txt += '    cd $RUNTIME_AREA\n'
# Line 743 | Line 907 | class Cmssw(JobType):
907          txt += '        echo "JOB_EXIT_STATUS = 60999"\n'
908          txt += '        echo "JobExitCode=60999" | tee -a $RUNTIME_AREA/$repo\n'
909          txt += '        dumpStatus $RUNTIME_AREA/$repo\n'
910 +        txt += '        rm -f $RUNTIME_AREA/$repo \n'
911 +        txt += '        echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
912 +        txt += '        echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
913          txt += '    fi\n'
914          txt += 'fi\n'
915          txt += '\n'
# Line 773 | Line 940 | class Cmssw(JobType):
940          return job requirements to add to jdl files
941          """
942          req = ''
943 +        if common.analisys_common_info['sw_version']:
944 +            req='Member("VO-cms-' + \
945 +                 common.analisys_common_info['sw_version'] + \
946 +                 '", other.GlueHostApplicationSoftwareRunTimeEnvironment)'
947          if common.analisys_common_info['sites']:
777            if common.analisys_common_info['sw_version']:
778                req='Member("VO-cms-' + \
779                     common.analisys_common_info['sw_version'] + \
780                     '", other.GlueHostApplicationSoftwareRunTimeEnvironment)'
948              if len(common.analisys_common_info['sites'])>0:
949                  req = req + ' && ('
950                  for i in range(len(common.analisys_common_info['sites'])):
# Line 812 | Line 979 | class Cmssw(JobType):
979          txt += '       echo "JOB_EXIT_STATUS = 10020"\n'
980          txt += '       echo "JobExitCode=10020" | tee -a $RUNTIME_AREA/$repo\n'
981          txt += '       dumpStatus $RUNTIME_AREA/$repo\n'
982 +        txt += '       rm -f $RUNTIME_AREA/$repo \n'
983 +        txt += '       echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
984 +        txt += '       echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
985          txt += '       exit 1\n'
986          txt += '\n'
987          txt += '       echo "Remove working directory: $WORKING_DIR"\n'
# Line 822 | Line 992 | class Cmssw(JobType):
992          txt += '            echo "JOB_EXIT_STATUS = 10017"\n'
993          txt += '            echo "JobExitCode=10017" | tee -a $RUNTIME_AREA/$repo\n'
994          txt += '            dumpStatus $RUNTIME_AREA/$repo\n'
995 +        txt += '            rm -f $RUNTIME_AREA/$repo \n'
996 +        txt += '            echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
997 +        txt += '            echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
998          txt += '       fi\n'
999          txt += '\n'
1000          txt += '       exit 1\n'
# Line 845 | Line 1018 | class Cmssw(JobType):
1018          txt += '       echo "JOB_EXIT_STATUS = 10031" \n'
1019          txt += '       echo "JobExitCode=10031" | tee -a $RUNTIME_AREA/$repo\n'
1020          txt += '       dumpStatus $RUNTIME_AREA/$repo\n'
1021 +        txt += '       rm -f $RUNTIME_AREA/$repo \n'
1022 +        txt += '       echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
1023 +        txt += '       echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
1024          txt += '       exit 1\n'
1025          txt += '   else\n'
1026          txt += '       echo "Sourcing environment... "\n'
# Line 853 | Line 1029 | class Cmssw(JobType):
1029          txt += '           echo "JOB_EXIT_STATUS = 10020"\n'
1030          txt += '           echo "JobExitCode=10020" | tee -a $RUNTIME_AREA/$repo\n'
1031          txt += '           dumpStatus $RUNTIME_AREA/$repo\n'
1032 +        txt += '           rm -f $RUNTIME_AREA/$repo \n'
1033 +        txt += '           echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
1034 +        txt += '           echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
1035          txt += '           exit 1\n'
1036          txt += '       fi\n'
1037          txt += '       echo "sourcing $VO_CMS_SW_DIR/cmsset_default.sh"\n'
# Line 863 | Line 1042 | class Cmssw(JobType):
1042          txt += '           echo "JOB_EXIT_STATUS = 10032"\n'
1043          txt += '           echo "JobExitCode=10032" | tee -a $RUNTIME_AREA/$repo\n'
1044          txt += '           dumpStatus $RUNTIME_AREA/$repo\n'
1045 +        txt += '           rm -f $RUNTIME_AREA/$repo \n'
1046 +        txt += '           echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
1047 +        txt += '           echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
1048          txt += '           exit 1\n'
1049          txt += '       fi\n'
1050          txt += '   fi\n'
# Line 879 | Line 1061 | class Cmssw(JobType):
1061          txt += '       echo "JOB_EXIT_STATUS = 10033"\n'
1062          txt += '       echo "JobExitCode=10033" | tee -a $RUNTIME_AREA/$repo\n'
1063          txt += '       dumpStatus $RUNTIME_AREA/$repo\n'
1064 +        txt += '       rm -f $RUNTIME_AREA/$repo \n'
1065 +        txt += '       echo "MonitorJobID=`echo $MonitorJobID`" | tee -a $RUNTIME_AREA/$repo \n'
1066 +        txt += '       echo "MonitorID=`echo $MonitorID`" | tee -a $RUNTIME_AREA/$repo\n'
1067          txt += '       exit 1\n'
1068          txt += '   fi\n'
1069          txt += '   echo "SET_CMS_ENV 0 ==> setup cms environment ok"\n'

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines