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

— Classes —############################ More...

Public Member Functions

def __init__
 
def createJob
 
def getValidation
 
def runJob
 

Public Attributes

 preexisting
 
 validation
 

Static Public Attributes

int batchCount = 0
 
list batchJobIds = []
 
int crabCount = 0
 
int interactCount = 0
 
int jobCount = 0
 

Private Member Functions

def __createJob
 
def __getValidation
 

Private Attributes

 __commandLineOptions
 
 __config
 
 __scripts
 
 __valName
 
 __valType
 

Detailed Description

— Classes —############################

Definition at line 40 of file validateAlignments.py.

Constructor & Destructor Documentation

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

Definition at line 49 of file validateAlignments.py.

References split.

49 
50  def __init__( self, validation, config, options ):
51  if validation[1] == "":
52  # intermediate syntax
53  valString = validation[0].split( "->" )[0]
54  alignments = validation[0].split( "->" )[1]
55  # force user to use the normal syntax
56  if "->" in validation[0]:
57  msg = ("Instead of using the intermediate syntax\n'"
58  +valString.strip()+"-> "+alignments.strip()
59  +":'\nyou have to use the now fully supported syntax \n'"
60  +valString.strip()+": "
61  +alignments.strip()+"'.")
62  raise AllInOneError(msg)
63  else:
64  valString = validation[0]
65  alignments = validation[1]
66  valString = valString.split()
67  self.__valType = valString[0]
68  self.__valName = valString[1]
69  self.__commandLineOptions = options
70  self.__config = config
71  # workaround for intermediate parallel version
72  if self.__valType == "offlineParallel":
73  print ("offlineParallel and offline are now the same. To run an offline parallel validation,\n"
74  "just set parallelJobs to something > 1. There is no reason to call it offlineParallel anymore.")
75  self.__valType = "offline"
76  section = self.__valType + ":" + self.__valName
77  if not self.__config.has_section( section ):
78  raise AllInOneError, ("Validation '%s' of type '%s' is requested in"
79  " '[validation]' section, but is not defined."
80  "\nYou have to add a '[%s]' section."
81  %( self.__valName, self.__valType, section ))
82  self.validation = self.__getValidation( self.__valType, self.__valName,
83  alignments, self.__config,
84  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 154 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.createJob().

155  def __createJob( self, jobMode, outpath ):
156  """This private method creates the needed files for the validation job.
157  """
158  self.validation.createConfiguration( outpath )
159  self.__scripts = sum([addIndex(script, self.validation.NJobs) for script in self.validation.createScript( outpath )], [])
160  if jobMode.split( ',' )[0] == "crab":
161  self.validation.createCrabCfg( outpath )
162  return None
def validateAlignments.ValidationJob.__getValidation (   self,
  valType,
  name,
  alignments,
  config,
  options 
)
private

Definition at line 85 of file validateAlignments.py.

References validateAlignments.ValidationJob.__config, and split.

85 
86  def __getValidation( self, valType, name, alignments, config, options ):
87  if valType == "compare":
88  alignmentsList = alignments.split( "," )
89  firstAlignList = alignmentsList[0].split()
90  firstAlignName = firstAlignList[0].strip()
91  if firstAlignName == "IDEAL":
92  raise AllInOneError, ("'IDEAL' has to be the second (reference)"
93  " alignment in 'compare <val_name>: "
94  "<alignment> <reference>'.")
95  if len( firstAlignList ) > 1:
96  firstRun = firstAlignList[1]
97  else:
98  firstRun = "1"
99  firstAlign = Alignment( firstAlignName, self.__config, firstRun )
100  firstAlignName = firstAlign.name
101  secondAlignList = alignmentsList[1].split()
102  secondAlignName = secondAlignList[0].strip()
103  if len( secondAlignList ) > 1:
104  secondRun = secondAlignList[1]
105  else:
106  secondRun = "1"
107  if secondAlignName == "IDEAL":
108  secondAlign = secondAlignName
109  else:
110  secondAlign = Alignment( secondAlignName, self.__config,
111  secondRun )
112  secondAlignName = secondAlign.name
113  # check if alignment was already compared previously
114  try:
115  randomWorkdirPart = \
116  globalDictionaries.alignRandDict[firstAlignName]
117  except KeyError:
118  randomWorkdirPart = None
119 
120  validation = GeometryComparison( name, firstAlign, secondAlign,
121  self.__config,
122  self.__commandLineOptions.getImages,
123  randomWorkdirPart )
124  globalDictionaries.alignRandDict[firstAlignName] = \
125  validation.randomWorkdirPart
126  if not secondAlignName == "IDEAL":
127  globalDictionaries.alignRandDict[secondAlignName] = \
128  validation.randomWorkdirPart
129  elif valType == "offline":
130  validation = OfflineValidation( name,
131  Alignment( alignments.strip(), self.__config ), self.__config )
132  elif valType == "preexistingoffline":
133  validation = PreexistingOfflineValidation(name, self.__config)
134  elif valType == "offlineDQM":
135  validation = OfflineValidationDQM( name,
136  Alignment( alignments.strip(), self.__config ), self.__config )
137  elif valType == "mcValidate":
138  validation = MonteCarloValidation( name,
139  Alignment( alignments.strip(), self.__config ), self.__config )
140  elif valType == "preexistingmcValidate":
141  validation = PreexistingMonteCarloValidation(name, self.__config)
142  elif valType == "split":
143  validation = TrackSplittingValidation( name,
144  Alignment( alignments.strip(), self.__config ), self.__config )
145  elif valType == "preexistingsplit":
146  validation = PreexistingTrackSplittingValidation(name, self.__config)
147  elif valType == "zmumu":
148  validation = ZMuMuValidation( name,
149  Alignment( alignments.strip(), self.__config ), self.__config )
150  else:
151  raise AllInOneError, "Unknown validation mode '%s'"%valType
152  self.preexisting = ("preexisting" in valType)
153  return validation
double split
Definition: MVATrainer.cc:139
def validateAlignments.ValidationJob.createJob (   self)
This is the method called to create the job files.

Definition at line 163 of file validateAlignments.py.

References validateAlignments.ValidationJob.__createJob(), and validateAlignments.ValidationJob.preexisting.

164  def createJob(self):
165  """This is the method called to create the job files."""
166  if self.preexisting:
167  return
168  self.__createJob( self.validation.jobmode,
169  os.path.abspath( self.__commandLineOptions.Name) )
def validateAlignments.ValidationJob.getValidation (   self)

Definition at line 233 of file validateAlignments.py.

References validateAlignments.ValidationJob.validation.

234  def getValidation( self ):
235  return self.validation
236 
def validateAlignments.ValidationJob.runJob (   self)

Definition at line 170 of file validateAlignments.py.

References validateAlignments.ValidationJob.__scripts, validateAlignments.ValidationJob.__valName, validateAlignments.ValidationJob.__valType, cmsRelvalreport.exit, helperFunctions.getCommandOutput2(), validateAlignments.ValidationJob.preexisting, and split.

171  def runJob( self ):
172  if self.preexisting:
173  log = "> " + self.validation.name + " is already validated."
174  print log
175  return log
176 
177  general = self.__config.getGeneral()
178  log = ""
179  for script in self.__scripts:
180  name = os.path.splitext( os.path.basename( script) )[0]
181  ValidationJob.jobCount += 1
182  if self.__commandLineOptions.dryRun:
183  print "%s would run: %s"%( name, os.path.basename( script) )
184  continue
185  log = "> Validating "+name
186  print "> Validating "+name
187  if self.validation.jobmode == "interactive":
188  log += getCommandOutput2( script )
189  ValidationJob.interactCount += 1
190  elif self.validation.jobmode.split(",")[0] == "lxBatch":
191  repMap = {
192  "commands": self.validation.jobmode.split(",")[1],
193  "logDir": general["logdir"],
194  "jobName": name,
195  "script": script,
196  "bsub": "/afs/cern.ch/cms/caf/scripts/cmsbsub"
197  }
198  bsubOut=getCommandOutput2("%(bsub)s %(commands)s "
199  "-J %(jobName)s "
200  "-o %(logDir)s/%(jobName)s.stdout "
201  "-e %(logDir)s/%(jobName)s.stderr "
202  "%(script)s"%repMap)
203  #Attention: here it is assumed that bsub returns a string
204  #containing a job id like <123456789>
205  ValidationJob.batchJobIds.append(bsubOut.split("<")[1].split(">")[0])
206  log+=bsubOut
207  ValidationJob.batchCount += 1
208  elif self.validation.jobmode.split( "," )[0] == "crab":
209  os.chdir( general["logdir"] )
210  crabName = "crab." + os.path.basename( script )[:-3]
211  theCrab = crabWrapper.CrabWrapper()
212  options = { "-create": "",
213  "-cfg": crabName + ".cfg",
214  "-submit": "" }
215  try:
216  theCrab.run( options )
217  except AllInOneError, e:
218  print "crab:", str(e).split("\n")[0]
219  exit(1)
220  ValidationJob.crabCount += 1
221 
222  else:
223  raise AllInOneError, ("Unknown 'jobmode'!\n"
224  "Please change this parameter either in "
225  "the [general] or in the ["
226  + self.__valType + ":" + self.__valName
227  + "] section to one of the following "
228  "values:\n"
229  "\tinteractive\n\tlxBatch, -q <queue>\n"
230  "\tcrab, -q <queue>")
231 
232  return log
double split
Definition: MVATrainer.cc:139

Member Data Documentation

validateAlignments.ValidationJob.__commandLineOptions
private

Definition at line 68 of file validateAlignments.py.

validateAlignments.ValidationJob.__config
private

Definition at line 69 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.__getValidation().

validateAlignments.ValidationJob.__scripts
private

Definition at line 158 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.runJob().

validateAlignments.ValidationJob.__valName
private

Definition at line 67 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.runJob().

validateAlignments.ValidationJob.__valType
private

Definition at line 66 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.runJob().

int validateAlignments.ValidationJob.batchCount = 0
static

Definition at line 45 of file validateAlignments.py.

list validateAlignments.ValidationJob.batchJobIds = []
static

Definition at line 46 of file validateAlignments.py.

int validateAlignments.ValidationJob.crabCount = 0
static

Definition at line 43 of file validateAlignments.py.

int validateAlignments.ValidationJob.interactCount = 0
static

Definition at line 44 of file validateAlignments.py.

int validateAlignments.ValidationJob.jobCount = 0
static

Definition at line 47 of file validateAlignments.py.

validateAlignments.ValidationJob.preexisting

Definition at line 151 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.createJob(), and validateAlignments.ValidationJob.runJob().

validateAlignments.ValidationJob.validation

Definition at line 81 of file validateAlignments.py.

Referenced by validateAlignments.ValidationJob.getValidation().