CMS 3D CMS Logo

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

Public Member Functions

def __init__
 
def createHtmlReport
 
def doPlots
 
def download
 

Private Member Functions

def _doPlots
 
def _doPlotsFastFull
 
def _doPlotsPileup
 
def _getDirectoryName
 
def _getRefFileAndSelection
 
def _getSelectionName
 

Private Attributes

 _fastsimSamples
 
 _fullsimSamples
 
 _newBaseDir
 
 _newFileModifier
 
 _newRelease
 
 _plotter
 
 _plotterDrawArgs
 
 _refRelease
 
 _refRepository
 
 _selectionName
 

Detailed Description

Base class for Tracking/Vertex validation.

Definition at line 364 of file validation.py.

Constructor & Destructor Documentation

def validation.Validation.__init__ (   self,
  fullsimSamples,
  fastsimSamples,
  refRelease,
  refRepository,
  newRelease,
  newRepository,
  newFileModifier = None,
  selectionName = "" 
)
Constructor.

Arguments:
fullsimSamples -- List of Sample objects for FullSim samples (may be empty)
fastsimSamples -- List of Sample objects for FastSim samples (may be empty)
refRelease    -- String for reference CMSSW release (can be None for no reference release)
newRepository -- String for directory whete to put new files
newRelease     -- CMSSW release to be validated
refRepository  -- String for directory where reference root files are
newFileModifier -- If given, a function to modify the names of the new files (function takes a string and returns a string)
selectionName  -- If given, use this string as the selection name (appended to GlobalTag for directory names)

Definition at line 366 of file validation.py.

Referenced by vertexPlots.VertexValidation._init__().

367  def __init__(self, fullsimSamples, fastsimSamples, refRelease, refRepository, newRelease, newRepository, newFileModifier=None, selectionName=""):
368  """Constructor.
369 
370  Arguments:
371  fullsimSamples -- List of Sample objects for FullSim samples (may be empty)
372  fastsimSamples -- List of Sample objects for FastSim samples (may be empty)
373  refRelease -- String for reference CMSSW release (can be None for no reference release)
374  newRepository -- String for directory whete to put new files
375  newRelease -- CMSSW release to be validated
376  refRepository -- String for directory where reference root files are
377  newFileModifier -- If given, a function to modify the names of the new files (function takes a string and returns a string)
378  selectionName -- If given, use this string as the selection name (appended to GlobalTag for directory names)
379  """
380  try:
381  self._newRelease = os.environ["CMSSW_VERSION"]
382  except KeyError:
383  print >>sys.stderr, 'Error: CMSSW environment variables are not available.'
384  print >>sys.stderr, ' Please run cmsenv'
385  sys.exit()
387  self._fullsimSamples = fullsimSamples
388  self._fastsimSamples = fastsimSamples
389  self._refRelease = refRelease
390  self._refRepository = refRepository
391  self._newRelease = newRelease
392  self._newBaseDir = os.path.join(newRepository, self._newRelease)
393  self._newFileModifier = newFileModifier
394  self._selectionName = selectionName

Member Function Documentation

def validation.Validation._doPlots (   self,
  sample,
  harvestedFile,
  plotterFolder,
  dqmSubFolder,
  htmlReport 
)
private
Do the real plotting work for a given sample and DQM subfolder

Definition at line 563 of file validation.py.

References validation._copySubDir(), validation._getGlobalTag(), validation.Validation._getRefFileAndSelection(), validation.Validation._newBaseDir, html.HtmlReport._newBaseDir, validation.Validation._newRelease, validation.Validation._plotterDrawArgs, validation.Validation._refRelease, and validation._stripRelease().

564  def _doPlots(self, sample, harvestedFile, plotterFolder, dqmSubFolder, htmlReport):
565  """Do the real plotting work for a given sample and DQM subfolder"""
566  # Get GlobalTags
567  newGlobalTag = _getGlobalTag(sample, self._newRelease)
568 
569  # Construct selection string
570  selectionNameBase = ""
571  if sample.hasScenario():
572  selectionNameBase += "_"+sample.scenario()
573  selectionNameBase += "_"+sample.pileup()
574  newSelection = newGlobalTag+selectionNameBase+plotterFolder.getSelectionName(dqmSubFolder)
575  if sample.hasPileup():
576  newPu = sample.pileupType(self._newRelease)
577  if newPu != "":
578  newSelection += "_"+newPu
579 
580  valname = "val.{sample}.root".format(sample=sample.name())
581 
582  # Construct reference file and selection string
583  (refValFile, refSelection) = self._getRefFileAndSelection(sample, plotterFolder, dqmSubFolder, selectionNameBase, valname)
584 
585  # Construct new directory name
586  tmp = []
587  if sample.fastsim():
588  tmp.extend(["fastsim", self._newRelease])
589  tmp.extend([newSelection, sample.name()])
590  newsubdir = os.path.join(*tmp)
591  newdir = os.path.join(self._newBaseDir, newsubdir)
592 
593  # Copy the relevant histograms to a new validation root file
594  # TODO: treat the case where dqmSubFolder is empty
595  newValFile = _copySubDir(harvestedFile, valname, plotterFolder.getPossibleDQMFolders(), dqmSubFolder.subfolder if dqmSubFolder is not None else None)
596  fileList = []
597 
598  # Do the plots
599  if plotting.verbose:
600  print "Comparing ref and new {sim} {sample} {translatedFolder}".format(
601  sim="FullSim" if not sample.fastsim() else "FastSim",
602  sample=sample.name(), translatedFolder=str(dqmSubFolder.translated) if dqmSubFolder is not None else "")
603  rootFiles = [refValFile, newValFile]
604  legendLabels = [
605  "%s, %s %s" % (sample.name(), _stripRelease(self._refRelease), refSelection) if self._refRelease is not None else "dummy",
606  "%s, %s %s" % (sample.name(), _stripRelease(self._newRelease), newSelection)
607  ]
608  plotterFolder.create(rootFiles, legendLabels, dqmSubFolder, isPileupSample=sample.hasPileup())
609  fileList.extend(plotterFolder.draw(**self._plotterDrawArgs))
610  # Copy val file only if there were plots
611  if len(fileList) > 0:
612  fileList.append(valname)
613 
614  # For tables we just try them all, and see which ones succeed
615  for tableCreator in plotterFolder.getTableCreators():
616  htmlReport.addTable(tableCreator.create(rootFiles, legendLabels, dqmSubFolder))
617 
618  newValFile.Close()
619  if refValFile is not None:
620  refValFile.Close()
621 
622  if len(fileList) == 0:
623  return []
624 
625  # Move plots to new directory
626  print "Moving plots and %s to %s" % (valname, newdir)
627  if not os.path.exists(newdir):
628  os.makedirs(newdir)
629  for f in fileList:
630  shutil.move(f, os.path.join(newdir, f))
631  return map(lambda n: os.path.join(newsubdir, n), fileList)
def _copySubDir
Definition: validation.py:743
def _getGlobalTag
Definition: validation.py:133
def _stripRelease
Definition: validation.py:126
def validation.Validation._doPlotsFastFull (   self,
  fastSample,
  fullSample,
  plotterFolder,
  dqmSubFolder,
  htmlReport 
)
private
Do the real plotting work for FastSim vs. FullSim for a given algorithm, quality flag, and sample.

Definition at line 632 of file validation.py.

References validation._getGlobalTag(), validation.Validation._newBaseDir, html.HtmlReport._newBaseDir, validation.Validation._newRelease, validation.Validation._plotterDrawArgs, and validation._stripRelease().

633  def _doPlotsFastFull(self, fastSample, fullSample, plotterFolder, dqmSubFolder, htmlReport):
634  """Do the real plotting work for FastSim vs. FullSim for a given algorithm, quality flag, and sample."""
635  # Get GlobalTags
636  fastGlobalTag = _getGlobalTag(fastSample, self._newRelease)
637  fullGlobalTag = _getGlobalTag(fullSample, self._newRelease)
638 
639  # Construct selection string
640  tmp = plotterFolder.getSelectionName(dqmSubFolder)
641  fastSelection = fastGlobalTag+"_"+fastSample.pileup()+tmp
642  fullSelection = fullGlobalTag+"_"+fullSample.pileup()+tmp
643  if fullSample.hasPileup():
644  fullSelection += "_"+fullSample.pileupType(self._newRelease)
645  fastSelection += "_"+fastSample.pileupType(self._newRelease)
646 
647  # Construct directories for FastSim, FullSim, and for the results
648  fastdir = os.path.join(self._newBaseDir, "fastsim", self._newRelease, fastSelection, fastSample.name())
649  fulldir = os.path.join(self._newBaseDir, fullSelection, fullSample.name())
650  newsubdir = os.path.join("fastfull", self._newRelease, fastSelection, fastSample.name())
651  newdir = os.path.join(self._newBaseDir, newsubdir)
652 
653  # Open input root files
654  valname = "val.{sample}.root".format(sample=fastSample.name())
655  fastValFilePath = os.path.join(fastdir, valname)
656  if not os.path.exists(fastValFilePath) and plotting.verbose:
657  print "FastSim file %s not found" % fastValFilePath
658  fullValFilePath = os.path.join(fulldir, valname)
659  if not os.path.exists(fullValFilePath) and plotting.verbose:
660  print "FullSim file %s not found" % fullValFilePath
661 
662  fastValFile = ROOT.TFile.Open(fastValFilePath)
663  fullValFile = ROOT.TFile.Open(fullValFilePath)
664 
665  # Do plots
666  if plotting.verbose:
667  print "Comparing FullSim and FastSim {sample} {translatedFolder}".format(
668  sample=fastSample.name(), translatedFolder=str(dqmSubFolder.translated) if dqmSubFolder is not None else "")
669  rootFiles = [fullValFile, fastValFile]
670  legendLabels = [
671  "FullSim %s, %s %s" % (fullSample.name(), _stripRelease(self._newRelease), fullSelection),
672  "FastSim %s, %s %s" % (fastSample.name(), _stripRelease(self._newRelease), fastSelection),
673  ]
674  plotterFolder.create(rootFiles, legendLabels, dqmSubFolder, isPileupSample=fastSample.hasPileup(), requireAllHistograms=True)
675  fileList = plotterFolder.draw(**self._plotterDrawArgs)
676 
677  # For tables we just try them all, and see which ones succeed
678  for tableCreator in plotterFolder.getTableCreators():
679  htmlReport.addTable(tableCreator.create(rootFiles, legendLabels, dqmSubFolder))
680 
681  fullValFile.Close()
682  fastValFile.Close()
683 
684  # Move plots to new directory
685  print "Moving plots to %s" % (newdir)
686  if not os.path.exists(newdir):
687  os.makedirs(newdir)
688  for f in fileList:
689  shutil.move(f, os.path.join(newdir, f))
690  return map(lambda n: os.path.join(newsubdir, n), fileList)
def _getGlobalTag
Definition: validation.py:133
def _stripRelease
Definition: validation.py:126
def validation.Validation._doPlotsPileup (   self,
  algo,
  quality,
  sample 
)
private
Do the real plotting work for Old vs. New pileup scenarios for a given algorithm, quality flag, and sample.

Definition at line 692 of file validation.py.

References validation.Validation._getDirectoryName(), validation._getGlobalTag(), validation.Validation._getSelectionName(), validation.Validation._newBaseDir, html.HtmlReport._newBaseDir, validation.Validation._newRelease, validation.Validation._plotterDrawArgs, and validation._stripRelease().

693  def _doPlotsPileup(self, algo, quality, sample):
694  """Do the real plotting work for Old vs. New pileup scenarios for a given algorithm, quality flag, and sample."""
695  # Get GlobalTags
696  newGlobalTag = _getGlobalTag(sample, self._newRelease)
697  refGlobalTag = newGlobalTag + "_OldPU"
698 
699  # Construct selection string
700  tmp = self._getSelectionName(quality, algo)
701  refSelection = refGlobalTag+"_"+sample.pileup()+tmp+"_"+sample.pileupType(self._newRelease)
702  newSelection = newGlobalTag+"_"+sample.pileup()+tmp+"_"+sample.pileupType(self._newRelease)
703 
704  # Construct directories for FastSim, FullSim, and for the results
705  refdir = os.path.join(self._newBaseDir, refSelection, sample.name())
706  newdir = os.path.join(self._newBaseDir, newSelection, sample.name())
707  resdir = os.path.join(self._newBaseDir, "pileup", self._newRelease, newSelection, sample.name())
708 
709  # Open input root files
710  valname = "val.{sample}.root".format(sample=sample.name())
711  refValFilePath = os.path.join(refdir, valname)
712  if not os.path.exists(refValFilePath) and plotting.verbose:
713  print "Ref pileup file %s not found" % refValFilePath
714  newValFilePath = os.path.join(newdir, valname)
715  if not os.path.exists(newValFilePath) and plotting.verbose:
716  print "New pileup file %s not found" % newValFilePath
717 
718  refValFile = ROOT.TFile.Open(refValFilePath)
719  newValFile = ROOT.TFile.Open(newValFilePath)
720 
721  # Do plots
722  if plotting.verbose:
723  print "Comparing Old and New pileup {sample} {algo} {quality}".format(
724  sample=sample.name(), algo=algo, quality=quality)
725  self._plotter.create([refValFile, newValFile], [
726  "%d BX %s, %s %s" % ({"25ns": 10, "50ns": 20}[sample.pileupType(self._newRelease)], sample.name(), _stripRelease(self._newRelease), refSelection),
727  "35 BX %s, %s %s" % (sample.name(), _stripRelease(self._newRelease), newSelection),
728  ],
729  subdir = self._getDirectoryName(quality, algo))
730  fileList = self._plotter.draw(**self._plotterDrawArgs)
731 
732  newValFile.Close()
733  refValFile.Close()
734 
735  # Move plots to new directory
736  print "Moving plots to %s" % (resdir)
737  if not os.path.exists(resdir):
738  os.makedirs(resdir)
739  for f in fileList:
740  shutil.move(f, os.path.join(resdir, f))
741  subdir = newdir.replace(self._newBaseDir+"/", "")
742  return map(lambda n: os.path.join(subdir, n), fileList)
def _getGlobalTag
Definition: validation.py:133
def _stripRelease
Definition: validation.py:126
def validation.Validation._getDirectoryName (   self,
  args,
  kwargs 
)
private

Definition at line 395 of file validation.py.

Referenced by validation.Validation._doPlotsPileup().

396  def _getDirectoryName(self, *args, **kwargs):
397  return None
def validation.Validation._getRefFileAndSelection (   self,
  sample,
  plotterFolder,
  dqmSubFolder,
  selectionNameBase,
  valname 
)
private

Definition at line 521 of file validation.py.

References validation._getGlobalTag(), validation.Validation._refRelease, validation.Validation._refRepository, and join().

Referenced by validation.Validation._doPlots().

522  def _getRefFileAndSelection(self, sample, plotterFolder, dqmSubFolder, selectionNameBase, valname):
523  if self._refRelease is None:
524  return (None, "")
525 
526  refGlobalTag = _getGlobalTag(sample, self._refRelease)
527  def _createRefSelection(selectionName):
528  sel = refGlobalTag+selectionNameBase+selectionName
529  if sample.hasPileup():
530  refPu = sample.pileupType(self._refRelease)
531  if refPu != "":
532  sel += "_"+refPu
533  return sel
534  refSelection = _createRefSelection(plotterFolder.getSelectionName(dqmSubFolder))
535 
536  # Construct reference directory name, and open reference file it it exists
537  refValFile = None
538  triedRefValFiles = []
539  tmp = [self._refRepository, self._refRelease]
540  if sample.fastsim():
541  tmp.extend(["fastsim", self._refRelease])
542  for selName in plotterFolder.getSelectionNameIterator(dqmSubFolder):
543  refSel = _createRefSelection(selName)
544  refdir = os.path.join(*(tmp+[refSel, sample.name()]))
545 
546  # Open reference file if it exists
547  refValFilePath = os.path.join(refdir, valname)
548  if os.path.exists(refValFilePath):
549  refSelection = refSel
550  refValFile = ROOT.TFile.Open(refValFilePath)
551  break
552  else:
553  triedRefValFiles.append(refValFilePath)
554  if refValFile is None:
555  if len(triedRefValFiles) == 1:
556  if plotting.verbose:
557  print "Reference file %s not found" % triedRefValFiles[0]
558  else:
559  if plotting.verbose:
560  print "None of the possible reference files %s not found" % ",".join(triedRefValFiles)
561 
562  return (refValFile, refSelection)
def _getGlobalTag
Definition: validation.py:133
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def validation.Validation._getSelectionName (   self,
  args,
  kwargs 
)
private

Definition at line 398 of file validation.py.

References validation.Validation._selectionName.

Referenced by validation.Validation._doPlotsPileup().

399  def _getSelectionName(self, *args, **kwargs):
400  return self._selectionName
def validation.Validation.createHtmlReport (   self)

Definition at line 449 of file validation.py.

References validation.Validation._newBaseDir, html.HtmlReport._newBaseDir, and validation.Validation._newRelease.

450  def createHtmlReport(self):
451  return html.HtmlReport(self._newRelease, self._newBaseDir)
def validation.Validation.doPlots (   self,
  plotter,
  plotterDrawArgs = {},
  limitSubFoldersOnlyTo = None,
  htmlReport = html.HtmlReportDummy(),
  doFastVsFull = True 
)
Create validation plots.

Arguments:
plotter       -- plotting.Plotter object that does the plotting

Keyword arguments:
plotterDrawArgs -- Dictionary for additional arguments to Plotter.draw() (default: {})
limitSubFoldersOnlyTo   -- If not None, should be a dictionary from string to an object. The string is the name of a PlotFolder, and the object is PlotFolder-type specific to limit the subfolders to be processed. In general case the object is a list of strings, but e.g. for track iteration plots it is a function taking the algo and quality as parameters.
htmlReport      -- Object returned by createHtmlReport(), in case HTML report generation is desired
doFastVsFull    -- Do FastSim vs. FullSim comparison? (default: True)

Definition at line 452 of file validation.py.

453  def doPlots(self, plotter, plotterDrawArgs={}, limitSubFoldersOnlyTo=None, htmlReport=html.HtmlReportDummy(), doFastVsFull=True):
454  """Create validation plots.
455 
456  Arguments:
457  plotter -- plotting.Plotter object that does the plotting
458 
459  Keyword arguments:
460  plotterDrawArgs -- Dictionary for additional arguments to Plotter.draw() (default: {})
461  limitSubFoldersOnlyTo -- If not None, should be a dictionary from string to an object. The string is the name of a PlotFolder, and the object is PlotFolder-type specific to limit the subfolders to be processed. In general case the object is a list of strings, but e.g. for track iteration plots it is a function taking the algo and quality as parameters.
462  htmlReport -- Object returned by createHtmlReport(), in case HTML report generation is desired
463  doFastVsFull -- Do FastSim vs. FullSim comparison? (default: True)
464  """
465  self._plotter = plotter
466  self._plotterDrawArgs = plotterDrawArgs
467 
468  # New vs. Ref
469  for sample in self._fullsimSamples+self._fastsimSamples:
470  # Check that the new DQM file exists
471  harvestedFile = sample.filename(self._newRelease)
472  if not os.path.exists(harvestedFile):
473  print "Harvested file %s does not exist!" % harvestedFile
474  sys.exit(1)
475 
476  plotterInstance = plotter.readDirs(harvestedFile)
477  htmlReport.beginSample(sample)
478  for plotterFolder, dqmSubFolder in plotterInstance.iterFolders(limitSubFoldersOnlyTo=limitSubFoldersOnlyTo):
479  if plotterFolder.onlyForPileup() and not sample.hasPileup():
480  continue
481  plotFiles = self._doPlots(sample, harvestedFile, plotterFolder, dqmSubFolder, htmlReport)
482  htmlReport.addPlots(plotterFolder, dqmSubFolder, plotFiles)
483  # TODO: the pileup case is still to be migrated
484 # if s.fullsim() and s.hasPileup():
485 # self._doPlotsPileup(a, q, s)
486 
487 
488  # Fast vs. Full
489  if not doFastVsFull:
490  return
491  for fast in self._fastsimSamples:
492  correspondingFull = None
493  for full in self._fullsimSamples:
494  if fast.name() != full.name():
495  continue
496  if fast.hasPileup():
497  if not full.hasPileup():
498  continue
499  if fast.fastsimCorrespondingFullsimPileup() != full.pileupType():
500  continue
501  else:
502  if full.hasPileup():
503  continue
504 
505  if correspondingFull is None:
506  correspondingFull = full
507  else:
508  raise Exception("Got multiple compatible FullSim samples for FastSim sample %s %s" % (fast.name(), fast.pileup()))
509  if correspondingFull is None:
510  raise Exception("Did not find compatible FullSim sample for FastSim sample %s %s" % (fast.name(), fast.pileup()))
511 
512  # If we reach here, the harvestedFile must exist
513  harvestedFile = fast.filename(self._newRelease)
514  plotterInstance = plotter.readDirs(harvestedFile)
515  htmlReport.beginSample(fast, fastVsFull=True)
516  for plotterFolder, dqmSubFolder in plotterInstance.iterFolders(limitSubFoldersOnlyTo=limitSubFoldersOnlyTo):
517  if plotterFolder.onlyForPileup() and not fast.hasPileup():
518  continue
519  plotFiles = self._doPlotsFastFull(fast, correspondingFull, plotterFolder, dqmSubFolder, htmlReport)
520  htmlReport.addPlots(plotterFolder, dqmSubFolder, plotFiles)
def validation.Validation.download (   self)
Download DQM files. Requires grid certificate and asks your password for it.

Definition at line 401 of file validation.py.

References validation.Validation._fastsimSamples, validation.Validation._fullsimSamples, validation._getRelValUrl(), validation.Validation._newFileModifier, validation.Validation._newRelease, alcazmumu_cfi.filter, and join().

402  def download(self):
403  """Download DQM files. Requires grid certificate and asks your password for it."""
404  filenames = [s.filename(self._newRelease) for s in self._fullsimSamples+self._fastsimSamples]
405  if self._newFileModifier is not None:
406  filenames = map(self._newFileModifier, filenames)
407  filenames = filter(lambda f: not os.path.exists(f), filenames)
408  if len(filenames) == 0:
409  print "All files already downloaded"
410  return
411 
412  relvalUrl = _getRelValUrl(self._newRelease)
413  urls = [relvalUrl+f for f in filenames]
414  certfile = os.path.join(os.environ["HOME"], ".globus", "usercert.pem")
415  if not os.path.exists(certfile):
416  print "Certificate file {certfile} does not exist, unable to download RelVal files from {url}".format(certfile=certfile, url=relvalUrl)
417  sys.exit(1)
418  keyfile = os.path.join(os.environ["HOME"], ".globus", "userkey.pem")
419  if not os.path.exists(certfile):
420  print "Private key file {keyfile} does not exist, unable to download RelVal files from {url}".format(keyfile=keyfile, url=relvalUrl)
421  sys.exit(1)
422 
423  cmd = ["curl", "--cert-type", "PEM", "--cert", certfile, "--key", keyfile, "-k"]
424  for u in urls:
425  cmd.extend(["-O", u])
426  print "Downloading %d files from RelVal URL %s:" % (len(filenames), relvalUrl)
427  print " "+"\n ".join(filenames)
428  print "Please provide your private key pass phrase when curl asks it"
429  ret = subprocess.call(cmd)
430  if ret != 0:
431  print "Downloading failed with exit code %d" % ret
432  sys.exit(1)
433 
434  # verify
435  allFine = True
436  for f in filenames:
437  p = subprocess.Popen(["file", f], stdout=subprocess.PIPE)
438  stdout = p.communicate()[0]
439  if p.returncode != 0:
440  print "file command failed with exit code %d" % p.returncode
441  sys.exit(1)
442  if not "ROOT" in stdout:
443  print "File {f} is not ROOT, please check the correct version, GlobalTag etc. from {url}".format(f=f, url=relvalUrl)
444  allFine = False
445  if os.path.exists(f):
446  os.remove(f)
447  if not allFine:
448  sys.exit(1)
static std::string join(char **cmd)
Definition: RemoteFile.cc:18
def _getRelValUrl
Definition: validation.py:178

Member Data Documentation

validation.Validation._fastsimSamples
private

Definition at line 387 of file validation.py.

Referenced by validation.Validation.download().

validation.Validation._fullsimSamples
private

Definition at line 386 of file validation.py.

Referenced by validation.Validation.download().

validation.Validation._newBaseDir
private

Definition at line 391 of file validation.py.

Referenced by validation.Validation._doPlots(), validation.Validation._doPlotsFastFull(), validation.Validation._doPlotsPileup(), and validation.Validation.createHtmlReport().

validation.Validation._newFileModifier
private

Definition at line 392 of file validation.py.

Referenced by validation.Validation.download().

validation.Validation._newRelease
private

Definition at line 380 of file validation.py.

Referenced by validation.Validation._doPlots(), validation.Validation._doPlotsFastFull(), validation.Validation._doPlotsPileup(), validation.Validation.createHtmlReport(), and validation.Validation.download().

validation.Validation._plotter
private

Definition at line 464 of file validation.py.

validation.Validation._plotterDrawArgs
private

Definition at line 465 of file validation.py.

Referenced by validation.Validation._doPlots(), validation.SimpleValidation._doPlots(), validation.Validation._doPlotsFastFull(), and validation.Validation._doPlotsPileup().

validation.Validation._refRelease
private

Definition at line 388 of file validation.py.

Referenced by validation.Validation._doPlots(), and validation.Validation._getRefFileAndSelection().

validation.Validation._refRepository
private

Definition at line 389 of file validation.py.

Referenced by validation.Validation._getRefFileAndSelection().

validation.Validation._selectionName
private

Definition at line 393 of file validation.py.

Referenced by validation.Validation._getSelectionName().