def __init__ (self,channels,combinations,prefix,combList,energyList,PhysModelList,TargetList,batchSplit,masses,unblind,Version,AltModel=['None'],Grid=False): self.jobsDic={} self.jobsList=[] self.prefix=prefix self.channels = channels self.combinations = combinations if self.prefix != '' : self.prefix+='__' for iComb in combList: if not 'Comb' in batchSplit and len(combList)>1 : kComb = 'AllComb' for jComb in combList: kComb+='-'+jComb else: kComb = iComb self.jobsDic[iComb] = {} # Model Split ? for iModel in PhysModelList: if not 'Model' in batchSplit and len(PhysModelList)>1 : kModel = 'AllModel' for jModel in PhysModelList: kModel+='-'+jModel else: kModel = iModel self.jobsDic[iComb][iModel] = {} # Mass Split ? massList = combTools.MassList_Filter(cardtypes,self.channels[Version],self.combinations,physmodels[iModel]['cardtype'],masses,iComb,energyList).get() for iMass in massList: if not 'Mass' in batchSplit and len(massList)>1 : kMass = 'AllMass' else: kMass = str(iMass) self.jobsDic[iComb][iModel][iMass] = {} # Target Split ? for iTarget in TargetList: if unblind or targets[iTarget]['notblind'] : if not 'Target' in batchSplit and len(TargetList)>1 : kTarget = 'AllTarget' for jTarget in TargetList: kTarget+='-'+jTarget else: kTarget = iTarget # More than one job ? self.jobsDic[iComb][iModel][iMass][iTarget] = {} if iTarget in targets and 'NJobs' in targets[iTarget]: NJobs = targets[iTarget]['NJobs'] else: NJobs = 1 # Job Multiple parameter ? NParam=1 JobParamName=[] JobParamSize=[] if iTarget in targets : pTarget=iTarget if 'Toys' in targets[iTarget]: pTarget=targets[iTarget]['Toys']['Target'] if 'JobsParam' in targets[pTarget]: for iJobParam in targets[pTarget]['JobsParam']: JobParamName.append(iJobParam) JobParamSize.append(len(targets[pTarget]['JobsParam'][iJobParam])) NParam*=len(targets[pTarget]['JobsParam'][iJobParam]) #NJobs=NJobs*NParam for iAltModel in AltModel: jJob=0 self.jobsDic[iComb][iModel][iMass][iTarget][iAltModel] = {} for iParam in xrange(1,NParam+1): # Toys ? ToysList = [] if iTarget != 'None' : if 'Toys' in targets[iTarget]: TPF='' if 'JobsParam' in targets[pTarget] : if len(JobParamSize) == 1: iPar=iParam-1 TPF=TPF+'_'+JobParamName[0]+str(targets[pTarget]['JobsParam'][JobParamName[0]][iPar]).replace('.','d') print TPF if len( energyList ) > 1 : iEnergy = 0 elif '7TeV' in energyList : iEnergy = 7 elif '8TeV' in energyList : iEnergy = 8 ToysList = combTools.getToys(iComb,iTarget,iEnergy,iMass,workspace,Version,cardtypes,physmodels,targets,iAltModel,TPF) NJobs=len(ToysList) for iJob in xrange(1,NJobs+1): EnergyText = '' if len( energyList ) > 1 : EnergyText = '' elif '7TeV' in energyList : EnergyText = '_7TeV' elif '8TeV' in energyList : EnergyText = '_8TeV' jJob+=1 jName = self.prefix+kComb+EnergyText+'_'+iAltModel+'__'+kModel+'__'+kMass+'__'+kTarget+'__'+str(jJob) subdir = self.prefix+kComb+EnergyText+'_'+iAltModel+'__'+kModel+'__'+kMass+'__'+kTarget + '/jobs'+str((jJob/250)*250) print jName if Grid: self.jobsDic[iComb][iModel][iMass][iTarget][iAltModel][jJob] = {} self.jobsDic[iComb][iModel][iMass][iTarget][iAltModel][jJob]['jName'] = subdir+'/'+jName #self.jobsDic[iComb][iModel][iMass][iTarget][iAltModel][jJob]['subdir'] = subdir else: os.system('mkdir -p '+jobdir+'/'+subdir) self.jobsDic[iComb][iModel][iMass][iTarget][iAltModel][jJob] = subdir+'/'+jName #print self.jobsDic[iComb][iModel][iMass][iTarget][iAltModel][jJob] if not jName in self.jobsList: self.jobsList.append(subdir+'/'+jName) #print self.jobsDic #print self.jobsList #print len(self.jobsList) if Grid: if not os.path.exists(crabdir) : os.system('mkdir -p '+crabdir) else: if not os.path.exists(jobdir) : os.system('mkdir -p '+jobdir) CMSSW=os.environ["CMSSW_BASE"] for jName in self.jobsList: #os.system( jFile = open(jobdir+'/'+jName+'.sh','w') jFile.write('#!/bin/bash\n') jFile.write('#$ -N '+jName+'\n') jFile.write('#$ -q all.q\n') jFile.write('#$ -cwd\n') jFile.write('source $VO_CMS_SW_DIR/cmsset_default.sh\n') jFile.write('cd '+CMSSW+'\n') jFile.write('eval `scramv1 ru -sh`\n') jFile.write('ulimit -c 0\n') jFile.close() os.system('chmod +x '+jobdir+'/'+jName+'.sh')
def getAllMass(iModel,combList,Version): allList = [] for iComb in combList: massList = combTools.MassList_Filter(cardtypes,channels[Version],combinations,physmodels[iModel]['cardtype'],[],iComb,energyList).get() allList.extend(massList) return sorted(list(set(allList)))
TargetList = combTools.TargetList_Filter(targets,options.targets).get() if options.runBatch or options.runGrid: print 'Call BATV Tools Init' jobs = batchTools.batchJobs(channels,combinations,'results',combList,energyList,PhysModelList,TargetList,options.batchSplit,options.masses,options.unblind,options.Version,options.AltModel,options.runGrid ) if options.runGrid: CrabDB = {} #Run Combine for iComb in combList: print '---------------------- Computing results for combination: '+iComb for iModel in PhysModelList: print '---------------------------> Model = '+iModel cardDir = combTools.CardDir_Filter(cardtypes,physmodels[iModel]['cardtype']).get() massList = combTools.MassList_Filter(cardtypes,channels[options.Version],combinations,physmodels[iModel]['cardtype'],options.masses,iComb,energyList).get() if 'targetdir' in cardtypes[physmodels[iModel]['cardtype']]: TargetDir=workspace+'/'+options.Version+'/'+cardtypes[physmodels[iModel]['cardtype']]['targetdir']+'/'+iComb TargetDirGrid=workspace.split('/')[-2]+'/'+options.Version+'/'+cardtypes[physmodels[iModel]['cardtype']]['targetdir']+'/'+iComb else: TargetDir=workspace+'/'+options.Version+'/'+cardDir+'/'+iComb TargetDirGrid=workspace.split('/')[-2]+'/'+options.Version+'/'+cardDir+'/'+iComb print 'Target Dir : '+TargetDir print 'Masses List: '+str(massList) paramSet = combTools.ParamSet_Maker(cardtypes,channels[options.Version],physmodels[iModel]['cardtype'],options.masses,'NONE',energyList).get() for iSet in range(0,len(paramSet['values'])) : iMass = paramSet['values'][iSet][0] print '------------------------------> Mass = '+str(iMass) + ' (Set: ' + str(paramSet['values'][iSet]) + ' )' for iAltModel in options.AltModel: print '------------------------------> AltModel = '+iAltModel for iTarget in TargetList:
isValidEnergy = False for iEnergy in combinations[iComb]['energies']: if (options.energy == 7 or options.energy == 0) and iEnergy == '7TeV': isValidEnergy = True if (options.energy == 8 or options.energy == 0) and iEnergy == '8TeV': isValidEnergy = True # Validate Combination Purpose isValidPurpose = False for purpose in combinations[iComb]['purposes']: if options.purpose == purpose: isValidPurpose = True # Process if valid if isValidEnergy and isValidPurpose: massList = combTools.MassList_Filter(cardtypes, channels[options.Version], combinations, options.purpose, options.masses, iComb, energyList).get() print '---------------------- Building cards for combination: ' + iComb if 'targetdir' in cardtypes[options.purpose]: TargetDir = workspace + '/' + options.Version + '/' + cardtypes[ options.purpose]['targetdir'] + '/' + iComb else: TargetDir = workspace + '/' + options.Version + '/' + cardDir + '/' + iComb print 'Target Dir : ' + TargetDir print 'Masses List: ' + str(massList) paramSet = combTools.ParamSet_Maker(cardtypes, channels[options.Version], options.purpose, options.masses, 'NONE', energyList).get() for iSet in range(0, len(paramSet['values'])):