3 from __future__
import print_function
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
24 return quality
in [
"",
"highPurity",
"ByOriginalAlgo",
"highPurityByOriginalAlgo"]
27 sample = SimpleSample(opts.subdirprefix, opts.html_sample, [(f, f.replace(
".root",
""))
for f
in opts.files])
31 drawArgs[
"ratio"] =
False
33 drawArgs[
"separate"] =
True
35 drawArgs[
"saveFormat"] =
".png"
37 plotting.verbose =
True
39 val = SimpleValidation([sample], opts.outputDir)
40 htmlReport = val.createHtmlReport(validationName=opts.html_validation_name)
42 limitProcessing =
LimitTrackAlgo(opts.limit_tracking_algo, includePtCut=opts.ptcut)
44 "limitSubFoldersOnlyTo": {
46 "allTPEffic": limitProcessing,
47 "fromPV": limitProcessing,
48 "fromPVAllTP": limitProcessing,
49 "tpPtLess09": limitProcessing,
50 "tpEtaGreater2p7": limitProcessing,
51 "seeding": limitProcessing,
52 "building": limitProcessing,
53 "bhadron": limitProcessing,
57 ignore =
lambda a,q:
False
58 kwargs_tracking[
"limitSubFoldersOnlyTo"] = {
62 "fromPVAllTP": ignore,
63 "tpPtLess09": limitRelVal,
64 "tpEtaGreater2p7": limitRelVal,
66 "bhadron": limitRelVal,
69 trk = [trackingPlots.plotter]
70 other = [trackingPlots.timePlotter, vertexPlots.plotter, trackingPlots.plotterHLT]
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)
78 print(
"Plots created into directory '%s'." % opts.outputDir)
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)
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",
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")
122 opts = parser.parse_args()
124 if not os.path.exists(f):
125 parser.error(
"DQM file %s does not exist" % f)
127 if opts.ignoreMissing:
128 print(
"--ignoreMissing is now the only operation mode, so you can stop using this parameter")
131 print(
"--ratio is now the default, so you can stop using this parameter")
134 print(
"--html is now the default, so you can stop using this parameter")
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(
",")
141 if opts.limit_relval
and opts.ptcut:
142 print(
"With --limit-relval enabled, --ptcut option does not have any effect")