![]() |
![]() |
Public Member Functions | |
def | __init__ |
def | appendToMergeParJobs |
def | createConfiguration |
def | createCrabCfg |
def | createScript |
def | getRepMap |
Private Attributes | |
__NJobs |
Definition at line 98 of file offlineValidation.py.
def offlineValidation::OfflineValidationParallel::__init__ | ( | self, | |
valName, | |||
alignment, | |||
config | |||
) |
Reimplemented from offlineValidation::OfflineValidation.
Definition at line 99 of file offlineValidation.py.
00100 : 00101 OfflineValidation.__init__(self, valName, alignment, config) 00102 defaults = { 00103 "parallelJobs":"1", 00104 "jobmode":self.jobmode 00105 } 00106 offline = config.getResultingSection( "offline:"+self.name, 00107 defaultDict = defaults ) 00108 self.general.update( offline ) 00109 self.__NJobs = self.general["parallelJobs"]
def offlineValidation::OfflineValidationParallel::appendToMergeParJobs | ( | self, | |
validationsSoFar = "" |
|||
) |
if no argument or "" is passed a string with an instantiation is returned, else the validation is appended to the list
Definition at line 206 of file offlineValidation.py.
00207 : 00208 """ 00209 if no argument or "" is passed a string with an instantiation is returned, 00210 else the validation is appended to the list 00211 """ 00212 repMap = self.getRepMap() 00213 00214 parameters = "" 00215 fileToAdd = "" 00216 for index in range(int(self.__NJobs)): 00217 fileToAdd = '%(outputFile)s'%repMap 00218 fileToAdd = fileToAdd.replace('.root','_'+str(index)+'.root') 00219 if index < int( self.general["parallelJobs"] )-1: 00220 parameters = parameters+fileToAdd+',' 00221 else: 00222 parameters = parameters+fileToAdd 00223 00224 mergedoutputfile = ("AlignmentValidation_" + self.name + "_" 00225 + '%(name)s'%repMap + ".root") 00226 validationsSoFar += ('root -x -b -q "TkAlOfflineJobsMerge.C(\\\"' 00227 +parameters+'\\\",\\\"'+mergedoutputfile+'\\\")"' 00228 +"\n") 00229 return validationsSoFar
def offlineValidation::OfflineValidationParallel::createConfiguration | ( | self, | |
path, | |||
configBaseName = "TkAlOfflineValidation" |
|||
) |
Reimplemented from offlineValidation::OfflineValidation.
Definition at line 110 of file offlineValidation.py.
00111 : 00112 # if offline validation uses N parallel jobs, we create here N cfg files 00113 numberParallelJobs = int( self.general["parallelJobs"] ) 00114 # limit maximum number of parallel jobs to 40 00115 # (each output file is approximately 20MB) 00116 maximumNumberJobs = 40 00117 if numberParallelJobs > maximumNumberJobs: 00118 msg = ("Maximum allowed number of parallel jobs " 00119 +str(maximumNumberJobs)+" exceeded!!!") 00120 raise AllInOneError(msg) 00121 # if maxevents is not specified, cannot calculate number of events for 00122 # each parallel job, and therefore running only a single job 00123 if int( self.general["maxevents"] ) == -1: 00124 msg = ("Maximum number of events (maxevents) not specified: " 00125 "cannot use parallel jobs in offline validation") 00126 raise AllInOneError(msg) 00127 if numberParallelJobs > 1: 00128 if self.general["offlineModuleLevelHistsTransient"] == "True": 00129 msg = ("To be able to merge results when running parallel jobs," 00130 " set offlineModuleLevelHistsTransient to false.") 00131 raise AllInOneError(msg) 00132 for index in range(numberParallelJobs): 00133 cfgName = "%s.%s.%s_%s_cfg.py"%(configBaseName, self.name, 00134 self.alignmentToValidate.name, 00135 str(index)) 00136 repMap = self.getRepMap() 00137 # in this parallel job, skip index*(maxEvents/nJobs) events from 00138 # the beginning 00139 # (first index is zero, so no skipping for a single job) 00140 # and use _index_ in the name of the output file 00141 repMap.update({"nIndex": str(index)}) 00142 # Create the result file directly to datadir since should not use /tmp/ 00143 # see https://cern.service-now.com/service-portal/article.do?n=KB0000484 00144 repMap.update({ 00145 "outputFile": replaceByMap("AlignmentValidation_" 00146 + self.name + 00147 "_.oO[name]Oo._.oO[nIndex]Oo..root", 00148 repMap ) 00149 }) 00150 repMap["outputFile"] = os.path.expandvars( repMap["outputFile"] ) 00151 00152 cfgs = {cfgName:replaceByMap(configTemplates.offlineParallelTemplate, 00153 repMap)} 00154 self.filesToCompare[GenericValidationData.defaultReferenceName] = repMap["resultFile"] 00155 GenericValidationData.createConfiguration(self, cfgs, path) 00156 # here is a small problem. only the last cfgs is saved 00157 # it requires a bit ugly solution later
def offlineValidation::OfflineValidationParallel::createCrabCfg | ( | self | ) |
Definition at line 230 of file offlineValidation.py.
def offlineValidation::OfflineValidationParallel::createScript | ( | self, | |
path, | |||
scriptBaseName = "TkAlOfflineValidation" |
|||
) |
Reimplemented from offlineValidation::OfflineValidation.
Definition at line 158 of file offlineValidation.py.
00159 : 00160 # A separate script is created for each parallel jobs. 00161 # Since only one cfg is saved a bit ugly solution is needed in the loop. 00162 returnValue = [] 00163 numJobs = int( self.general["parallelJobs"] ) 00164 for index in range(numJobs): 00165 scriptName = "%s.%s.%s_%s.sh"%(scriptBaseName, self.name, 00166 self.alignmentToValidate.name, 00167 str(index)) 00168 repMap = self.getRepMap() 00169 repMap["nIndex"]="" 00170 repMap["nIndex"]=str(index) 00171 repMap["CommandLine"]="" 00172 repMap.update({ 00173 "outputFile": replaceByMap("AlignmentValidation_" 00174 + self.name + 00175 "_.oO[name]Oo._.oO[nIndex]Oo..root", 00176 repMap ) 00177 }) 00178 for cfg in self.configFiles: 00179 # The ugly solution here is to change the name for each parallel job 00180 cfgtemp = cfg.replace(str(numJobs-1)+"_cfg.py", 00181 str(index)+"_cfg.py") 00182 repMap["CommandLine"]+= repMap["CommandLineTemplate"]%{"cfgFile":cfgtemp, 00183 "postProcess":"" 00184 } 00185 scripts = {scriptName: replaceByMap(configTemplates.parallelScriptTemplate, 00186 repMap ) } 00187 returnValue.extend(GenericValidationData.createScript(self, 00188 scripts, 00189 path) ) 00190 return returnValue
def offlineValidation::OfflineValidationParallel::getRepMap | ( | self, | |
alignment = None |
|||
) |
Reimplemented from offlineValidation::OfflineValidation.
Definition at line 191 of file offlineValidation.py.
00192 : 00193 repMap = OfflineValidation.getRepMap(self, alignment) 00194 repMap.update({ 00195 "nJobs": self.general["parallelJobs"], 00196 "offlineValidationFileOutput": 00197 configTemplates.offlineParallelFileOutputTemplate, 00198 "nameValidation": self.name 00199 }) 00200 # In case maxevents==-1, set number of parallel jobs to 1 00201 # since we cannot calculate number of events for each 00202 # parallel job 00203 if str(self.general["maxevents"]) == "-1": 00204 repMap.update({ "nJobs": "1" }) 00205 return repMap
Definition at line 99 of file offlineValidation.py.