CMS 3D CMS Logo

makeTrackValidationPlots.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 from __future__ import print_function
4 import os
5 import argparse
6 
7 from Validation.RecoTrack.plotting.validation import SimpleValidation, SimpleSample
8 import Validation.RecoTrack.plotting.trackingPlots as trackingPlots
9 import Validation.RecoVertex.plotting.vertexPlots as vertexPlots
10 import Validation.RecoTrack.plotting.plotting as plotting
11 
13  def __init__(self, algos, includePtCut):
14  self._algos = algos
15  self._includePtCut = includePtCut
16  def __call__(self, algo, quality):
17  if self._algos is not None and algo not in self._algos:
18  return False
19  if not self._includePtCut and "Pt09" in quality:
20  return False
21  return True
22 
23 def limitRelVal(algo, quality):
24  return quality in ["", "highPurity", "ByOriginalAlgo", "highPurityByOriginalAlgo"]
25 
26 def main(opts):
27  sample = SimpleSample(opts.subdirprefix, opts.html_sample, [(f, f.replace(".root", "")) for f in opts.files])
28 
29  drawArgs={}
30  if opts.no_ratio:
31  drawArgs["ratio"] = False
32  if opts.separate:
33  drawArgs["separate"] = True
34  if opts.png:
35  drawArgs["saveFormat"] = ".png"
36  if opts.verbose:
37  plotting.verbose = True
38 
39  val = SimpleValidation([sample], opts.outputDir)
40  htmlReport = val.createHtmlReport(validationName=opts.html_validation_name)
41 
42  limitProcessing = LimitTrackAlgo(opts.limit_tracking_algo, includePtCut=opts.ptcut)
43  kwargs_tracking = {
44  "limitSubFoldersOnlyTo": {
45  "": limitProcessing,
46  "allTPEffic": limitProcessing,
47  "fromPV": limitProcessing,
48  "fromPVAllTP": limitProcessing,
49  "tpPtLess09": limitProcessing,
50  "tpEtaGreater2p7": limitProcessing,
51  "seeding": limitProcessing,
52  "building": limitProcessing,
53  "bhadron": limitProcessing,
54  }
55  }
56  if opts.limit_relval:
57  ignore = lambda a,q: False
58  kwargs_tracking["limitSubFoldersOnlyTo"] = {
59  "": limitRelVal,
60  "allTPEffic": ignore,
61  "fromPV": ignore,
62  "fromPVAllTP": ignore,
63  "tpPtLess09": limitRelVal,
64  "tpEtaGreater2p7": limitRelVal,
65  "seeding": ignore,
66  "bhadron": limitRelVal,
67  }
68 
69  trk = [trackingPlots.plotter]
70  other = [trackingPlots.timePlotter, vertexPlots.plotter, trackingPlots.plotterHLT]
71  if opts.extended:
72  trk.append(trackingPlots.plotterExt)
73  other.extend([vertexPlots.plotterExt, trackingPlots.plotterHLTExt])
74  val.doPlots(trk, plotterDrawArgs=drawArgs, **kwargs_tracking)
75  val.doPlots(other, plotterDrawArgs=drawArgs)
76  print()
77  if opts.no_html:
78  print("Plots created into directory '%s'." % opts.outputDir)
79  else:
80  htmlReport.write()
81  print("Plots and HTML report created into directory '%s'. You can just move it to some www area and access the pages via web browser" % opts.outputDir)
82 
83 if __name__ == "__main__":
84  parser = argparse.ArgumentParser(description="Create standard set of tracking validation plots from one or more DQM files.\nNote that for timing plots you have to include FastTimerService (typically it gets included via DQM/VALIDATION), and set\nprocess.FastTimerService.enableDQMbyPath = True")
85  parser.add_argument("files", metavar="file", type=str, nargs="+",
86  help="DQM file to plot the validation plots from")
87  parser.add_argument("-o", "--outputDir", type=str, default="plots",
88  help="Plot output directory (default: 'plots')")
89  parser.add_argument("--subdirprefix", type=str, default="plots",
90  help="Prefix for subdirectories inside outputDir (default: 'plots')")
91  parser.add_argument("--no-ratio", action="store_true",
92  help="Disable ratio pads")
93  parser.add_argument("--separate", action="store_true",
94  help="Save all plots separately instead of grouping them")
95  parser.add_argument("--png", action="store_true",
96  help="Save plots in PNG instead of PDF")
97  parser.add_argument("--limit-tracking-algo", type=str, default=None,
98  help="Comma separated list of tracking algos to limit to. (default: all algos; conflicts with --limit-relval)")
99  parser.add_argument("--limit-relval", action="store_true",
100  help="Limit set of plots to those in release validation (almost). (default: all plots in the DQM files; conflicts with --limit-tracking-algo)")
101  parser.add_argument("--ptcut", action="store_true",
102  help="Include plots with pT > 0.9 GeV cut (with --limit-relval, does not have any effect)")
103  parser.add_argument("--extended", action="store_true",
104  help="Include extended set of plots (e.g. bunch of distributions; default off)")
105  parser.add_argument("--no-html", action="store_true",
106  help="Disable HTML page genration")
107  parser.add_argument("--html-sample", default="Sample",
108  help="Sample name for HTML page generation (default 'Sample')")
109  parser.add_argument("--html-validation-name", default="",
110  help="Validation name for HTML page generation (enters to <title> element) (default '')")
111  parser.add_argument("--verbose", action="store_true",
112  help="Be verbose")
113 
114  group = parser.add_argument_group("deprecated arguments (they have no effect and will be removed in the future):")
115  group.add_argument("--ignoreMissing", action="store_true",
116  help="Ignore missing histograms and directories (deprecated, is this is already the default mode)")
117  group.add_argument("--ratio", action="store_true",
118  help="Create ratio pads (deprecated, as it is already the default")
119  group.add_argument("--html", action="store_true",
120  help="Generate HTML pages (deprecated, as it is already the default")
121 
122  opts = parser.parse_args()
123  for f in opts.files:
124  if not os.path.exists(f):
125  parser.error("DQM file %s does not exist" % f)
126 
127  if opts.ignoreMissing:
128  print("--ignoreMissing is now the only operation mode, so you can stop using this parameter")
129 
130  if opts.ratio:
131  print("--ratio is now the default, so you can stop using this parameter")
132 
133  if opts.html:
134  print("--html is now the default, so you can stop using this parameter")
135 
136  if opts.limit_tracking_algo is not None:
137  if opts.limit_relval:
138  parser.error("--limit-tracking-algo and --limit-relval conflict with each other")
139  opts.limit_tracking_algo = opts.limit_tracking_algo.split(",")
140 
141  if opts.limit_relval and opts.ptcut:
142  print("With --limit-relval enabled, --ptcut option does not have any effect")
143 
144  main(opts)
makeTrackValidationPlots.LimitTrackAlgo._algos
_algos
Definition: makeTrackValidationPlots.py:14
makeTrackValidationPlots.limitRelVal
def limitRelVal(algo, quality)
Definition: makeTrackValidationPlots.py:23
makeTrackValidationPlots.LimitTrackAlgo.__call__
def __call__(self, algo, quality)
Definition: makeTrackValidationPlots.py:16
edm::print
S & print(S &os, JobReport::InputFile const &f)
Definition: JobReport.cc:66
main
Definition: main.py:1
makeTrackValidationPlots.LimitTrackAlgo._includePtCut
_includePtCut
Definition: makeTrackValidationPlots.py:15
makeTrackValidationPlots.LimitTrackAlgo.__init__
def __init__(self, algos, includePtCut)
Definition: makeTrackValidationPlots.py:13
makeTrackValidationPlots.LimitTrackAlgo
Definition: makeTrackValidationPlots.py:12
makeTrackValidationPlots.main
def main(opts)
Definition: makeTrackValidationPlots.py:26