CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Public Attributes | Static Public Attributes | Private Member Functions | Private Attributes
validateAlignments.ValidationJob Class Reference
Inheritance diagram for validateAlignments.ValidationJob:

Public Member Functions

def __init__ (self, validation, config, options)
 
def createJob (self)
 
def getValidation (self)
 
def needsproxy (self)
 
def runJob (self)
 

Public Attributes

 JobId
 
 validation
 

Static Public Attributes

 batchCount
 
 batchJobIds
 
 crabCount
 
 interactCount
 
 jobCount
 

Private Member Functions

def __createJob (self, jobMode, outpath)
 
def __getValidation (self, valType, name, alignments, config, options)
 

Private Attributes

 __commandLineOptions
 
 __config
 
 __preexisting
 
 __scripts
 
 __valName
 
 __valType
 

Detailed Description

Definition at line 74 of file validateAlignments.py.

Constructor & Destructor Documentation

def validateAlignments.ValidationJob.__init__ (   self,
  validation,
  config,
  options 
)

Definition at line 83 of file validateAlignments.py.

83  def __init__( self, validation, config, options ):
84  self.JobId=[]
85  if validation[1] == "":
86  # intermediate syntax
87  valString = validation[0].split( "->" )[0]
88  alignments = validation[0].split( "->" )[1]
89  # force user to use the normal syntax
90  if "->" in validation[0]:
91  msg = ("Instead of using the intermediate syntax\n'"
92  +valString.strip()+"-> "+alignments.strip()
93  +":'\nyou have to use the now fully supported syntax \n'"
94  +valString.strip()+": "
95  +alignments.strip()+"'.")
96  raise AllInOneError(msg)
97  else:
98  valString = validation[0]
99  alignments = validation[1]
100  valString = valString.split()
101  self.__valType = valString[0]
102  self.__valName = valString[1]
103  self.__commandLineOptions = options
104  self.__config = config
105  self.__preexisting = ("preexisting" in self.__valType)
106  if self.__valType[0] == "*":
107  self.__valType = self.__valType[1:]
108  self.__preexisting = True
109 
110  # workaround for intermediate parallel version
111  if self.__valType == "offlineParallel":
112  print ("offlineParallel and offline are now the same. To run an offline parallel validation,\n"
113  "just set parallelJobs to something > 1. There is no reason to call it offlineParallel anymore.")
114  self.__valType = "offline"
115  section = self.__valType + ":" + self.__valName
116  if not self.__config.has_section( section ):
117  raise AllInOneError("Validation '%s' of type '%s' is requested in"
118  " '[validation]' section, but is not defined."
119  "\nYou have to add a '[%s]' section."
120  %( self.__valName, self.__valType, section ))
122  alignments, self.__config,
123  options )
124 
def __getValidation(self, valType, name, alignments, config, options)
def __init__(self, validation, config, options)
double split
Definition: MVATrainer.cc:139

Member Function Documentation

def validateAlignments.ValidationJob.__createJob (   self,
  jobMode,
  outpath 
)
private
This private method creates the needed files for the validation job.

Definition at line 190 of file validateAlignments.py.

References validateAlignments.ValidationJob.__preexisting.

Referenced by validateAlignments.ValidationJob.createJob().

190  def __createJob( self, jobMode, outpath ):
191  """This private method creates the needed files for the validation job.
192  """
193  self.validation.createConfiguration( outpath )
194  if self.__preexisting:
195  return
196  self.__scripts = sum([addIndex(script, self.validation.NJobs) for script in self.validation.createScript( outpath )], [])
197  if jobMode.split( ',' )[0] == "crab":
198  self.validation.createCrabCfg( outpath )
199  return None
200 
def addIndex(filename, njobs, index=None)
def __createJob(self, jobMode, outpath)
def validateAlignments.ValidationJob.__getValidation (   self,
  valType,
  name,
  alignments,
  config,
  options 
)
private

Definition at line 125 of file validateAlignments.py.

References validateAlignments.ValidationJob.__config, split, and digitizers_cfi.strip.

125  def __getValidation( self, valType, name, alignments, config, options ):
126  if valType == "compare":
127  alignmentsList = alignments.split( "," )
128  firstAlignList = alignmentsList[0].split()
129  firstAlignName = firstAlignList[0].strip()
130  if firstAlignName == "IDEAL":
131  raise AllInOneError("'IDEAL' has to be the second (reference)"
132  " alignment in 'compare <val_name>: "
133  "<alignment> <reference>'.")
134  if len( firstAlignList ) > 1:
135  firstRun = firstAlignList[1]
136  else:
137  raise AllInOneError("Have to provide a run number for geometry comparison")
138  firstAlign = Alignment( firstAlignName, self.__config, firstRun )
139  firstAlignName = firstAlign.name
140  secondAlignList = alignmentsList[1].split()
141  secondAlignName = secondAlignList[0].strip()
142  if secondAlignName == "IDEAL":
143  secondAlign = secondAlignName
144  else:
145  if len( secondAlignList ) > 1:
146  secondRun = secondAlignList[1]
147  else:
148  raise AllInOneError("Have to provide a run number for geometry comparison")
149  secondAlign = Alignment( secondAlignName, self.__config,
150  secondRun )
151  secondAlignName = secondAlign.name
152 
153  validation = GeometryComparison( name, firstAlign, secondAlign,
154  self.__config,
155  self.__commandLineOptions.getImages)
156  elif valType == "offline":
157  validation = OfflineValidation( name,
158  Alignment( alignments.strip(), self.__config ), self.__config )
159  elif valType == "preexistingoffline":
160  validation = PreexistingOfflineValidation(name, self.__config)
161  elif valType == "offlineDQM":
162  validation = OfflineValidationDQM( name,
163  Alignment( alignments.strip(), self.__config ), self.__config )
164  elif valType == "mcValidate":
165  validation = MonteCarloValidation( name,
166  Alignment( alignments.strip(), self.__config ), self.__config )
167  elif valType == "preexistingmcValidate":
168  validation = PreexistingMonteCarloValidation(name, self.__config)
169  elif valType == "split":
170  validation = TrackSplittingValidation( name,
171  Alignment( alignments.strip(), self.__config ), self.__config )
172  elif valType == "preexistingsplit":
173  validation = PreexistingTrackSplittingValidation(name, self.__config)
174  elif valType == "zmumu":
175  validation = ZMuMuValidation( name,
176  Alignment( alignments.strip(), self.__config ), self.__config )
177  elif valType == "primaryvertex":
178  validation = PrimaryVertexValidation( name,
179  Alignment( alignments.strip(), self.__config ), self.__config )
180  elif valType == "preexistingprimaryvertex":
181  validation = PreexistingPrimaryVertexValidation(name, self.__config)
182  elif valType == "overlap":
183  validation = OverlapValidation( name,
184  Alignment( alignments.strip(), self.__config ), self.__config )
185  else:
186  raise AllInOneError("Unknown validation mode '%s'"%valType)
187 
188  return validation
189 
def __getValidation(self, valType, name, alignments, config, options)
double split
Definition: MVATrainer.cc:139
def validateAlignments.ValidationJob.createJob (   self)
This is the method called to create the job files.

Definition at line 201 of file validateAlignments.py.

References validateAlignments.ValidationJob.__createJob().

201  def createJob(self):
202  """This is the method called to create the job files."""
203  self.__createJob( self.validation.jobmode,
204  os.path.abspath( self.__commandLineOptions.Name) )
205 
def __createJob(self, jobMode, outpath)
def validateAlignments.ValidationJob.getValidation (   self)
def validateAlignments.ValidationJob.needsproxy (   self)

Definition at line 284 of file validateAlignments.py.

References validateAlignments.ValidationJob.__preexisting.

284  def needsproxy(self):
285  return self.validation.needsproxy and not self.__preexisting and not self.__commandLineOptions.dryRun
286 
287 
def validateAlignments.ValidationJob.runJob (   self)

Definition at line 206 of file validateAlignments.py.

References validateAlignments.ValidationJob.__preexisting, validateAlignments.ValidationJob.__scripts, validateAlignments.ValidationJob.__valName, validateAlignments.ValidationJob.__valType, cmsRelvalreport.exit, helperFunctions.getCommandOutput2(), edm.print(), split, and str.

206  def runJob( self ):
207  if self.__preexisting:
208  if self.validation.jobid:
209  self.batchJobIds.append(self.validation.jobid)
210  log = "> " + self.validation.name + " is already validated."
211  print(log)
212  return log
213  else:
214  if self.validation.jobid:
215  print("jobid {} will be ignored, since the validation {} is not preexisting".format(self.validation.jobid, self.validation.name))
216 
217  general = self.__config.getGeneral()
218  log = ""
219  for script in self.__scripts:
220  name = os.path.splitext( os.path.basename( script) )[0]
221  ValidationJob.jobCount += 1
222  if self.__commandLineOptions.dryRun:
223  print("%s would run: %s"%( name, os.path.basename( script) ))
224  continue
225  log = "> Validating "+name
226  print("> Validating "+name)
227  if self.validation.jobmode == "interactive":
228  log += getCommandOutput2( script )
229  ValidationJob.interactCount += 1
230  elif self.validation.jobmode.split(",")[0] == "lxBatch":
231  repMap = {
232  "commands": self.validation.jobmode.split(",")[1],
233  "logDir": general["logdir"],
234  "jobName": name,
235  "script": script,
236  "bsub": "/afs/cern.ch/cms/caf/scripts/cmsbsub"
237  }
238  for ext in ("stdout", "stderr", "stdout.gz", "stderr.gz"):
239  oldlog = "%(logDir)s/%(jobName)s."%repMap + ext
240  if os.path.exists(oldlog):
241  os.remove(oldlog)
242  bsubOut=getCommandOutput2("%(bsub)s %(commands)s "
243  "-J %(jobName)s "
244  "-o %(logDir)s/%(jobName)s.stdout "
245  "-e %(logDir)s/%(jobName)s.stderr "
246  "%(script)s"%repMap)
247  #Attention: here it is assumed that bsub returns a string
248  #containing a job id like <123456789>
249  jobid=bsubOut.split("<")[1].split(">")[0]
250  self.JobId.append(jobid)
251  ValidationJob.batchJobIds.append(jobid)
252  log+=bsubOut
253  ValidationJob.batchCount += 1
254  elif self.validation.jobmode.split( "," )[0] == "crab":
255  os.chdir( general["logdir"] )
256  crabName = "crab." + os.path.basename( script )[:-3]
257  theCrab = crabWrapper.CrabWrapper()
258  options = { "-create": "",
259  "-cfg": crabName + ".cfg",
260  "-submit": "" }
261  try:
262  theCrab.run( options )
263  except AllInOneError as e:
264  print("crab:", str(e).split("\n")[0])
265  exit(1)
266  ValidationJob.crabCount += 1
267 
268  else:
269  raise AllInOneError("Unknown 'jobmode'!\n"
270  "Please change this parameter either in "
271  "the [general] or in the ["
272  + self.__valType + ":" + self.__valName
273  + "] section to one of the following "
274  "values:\n"
275  "\tinteractive\n\tlxBatch, -q <queue>\n"
276  "\tcrab, -q <queue>")
277 
278  return log
279 
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
def getCommandOutput2(command)
#define str(s)
double split
Definition: MVATrainer.cc:139

Member Data Documentation

validateAlignments.ValidationJob.__commandLineOptions
private

Definition at line 103 of file validateAlignments.py.

validateAlignments.ValidationJob.__config
private
validateAlignments.ValidationJob.__preexisting
private
validateAlignments.ValidationJob.__scripts
private

Definition at line 196 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.runJob().

validateAlignments.ValidationJob.__valName
private

Definition at line 102 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.runJob().

validateAlignments.ValidationJob.__valType
private

Definition at line 101 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.runJob().

validateAlignments.ValidationJob.batchCount
static

Definition at line 79 of file validateAlignments.py.

validateAlignments.ValidationJob.batchJobIds
static

Definition at line 80 of file validateAlignments.py.

validateAlignments.ValidationJob.crabCount
static

Definition at line 77 of file validateAlignments.py.

validateAlignments.ValidationJob.interactCount
static

Definition at line 78 of file validateAlignments.py.

validateAlignments.ValidationJob.jobCount
static

Definition at line 81 of file validateAlignments.py.

validateAlignments.ValidationJob.JobId

Definition at line 84 of file validateAlignments.py.

validateAlignments.ValidationJob.validation