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, nProc=opts.jobs)
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,
54 "displaced": limitProcessing,
58 ignore =
lambda a,q:
False 59 kwargs_tracking[
"limitSubFoldersOnlyTo"] = {
63 "fromPVAllTP": ignore,
64 "tpPtLess09": limitRelVal,
65 "tpEtaGreater2p7": limitRelVal,
67 "bhadron": limitRelVal,
68 "displaced": limitRelVal,
71 trk = [trackingPlots.plotter]
72 other = [trackingPlots.timePlotter, vertexPlots.plotter, trackingPlots.plotterHLT]
74 trk.append(trackingPlots.plotterExt)
75 other.extend([vertexPlots.plotterExt, trackingPlots.plotterHLTExt])
76 val.doPlots(trk, plotterDrawArgs=drawArgs, **kwargs_tracking)
77 val.doPlots(other, plotterDrawArgs=drawArgs)
80 print(
"Plots created into directory '%s'." % opts.outputDir)
83 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)
85 if __name__ ==
"__main__":
86 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")
87 parser.add_argument(
"files", metavar=
"file", type=str, nargs=
"+",
88 help=
"DQM file to plot the validation plots from")
89 parser.add_argument(
"-o",
"--outputDir", type=str, default=
"plots",
90 help=
"Plot output directory (default: 'plots')")
91 parser.add_argument(
"--subdirprefix", type=str, default=
"plots",
92 help=
"Prefix for subdirectories inside outputDir (default: 'plots')")
93 parser.add_argument(
"--no-ratio", action=
"store_true",
94 help=
"Disable ratio pads")
95 parser.add_argument(
"--separate", action=
"store_true",
96 help=
"Save all plots separately instead of grouping them")
97 parser.add_argument(
"--png", action=
"store_true",
98 help=
"Save plots in PNG instead of PDF")
99 parser.add_argument(
"--limit-tracking-algo", type=str, default=
None,
100 help=
"Comma separated list of tracking algos to limit to. (default: all algos; conflicts with --limit-relval)")
101 parser.add_argument(
"--limit-relval", action=
"store_true",
102 help=
"Limit set of plots to those in release validation (almost). (default: all plots in the DQM files; conflicts with --limit-tracking-algo)")
103 parser.add_argument(
"--ptcut", action=
"store_true",
104 help=
"Include plots with pT > 0.9 GeV cut (with --limit-relval, does not have any effect)")
105 parser.add_argument(
"--extended", action=
"store_true",
106 help=
"Include extended set of plots (e.g. bunch of distributions; default off)")
107 parser.add_argument(
"--no-html", action=
"store_true",
108 help=
"Disable HTML page genration")
109 parser.add_argument(
"--html-sample", default=
"Sample",
110 help=
"Sample name for HTML page generation (default 'Sample')")
111 parser.add_argument(
"--html-validation-name", default=
"",
112 help=
"Validation name for HTML page generation (enters to <title> element) (default '')")
113 parser.add_argument(
"--jobs", default=0, type=int,
114 help=
"Number of jobs to run in parallel for generating plots. Default is 0 i.e. run number of cpu cores jobs.")
115 parser.add_argument(
"--verbose", action=
"store_true",
118 group = parser.add_argument_group(
"deprecated arguments (they have no effect and will be removed in the future):")
119 group.add_argument(
"--ignoreMissing", action=
"store_true",
120 help=
"Ignore missing histograms and directories (deprecated, is this is already the default mode)")
121 group.add_argument(
"--ratio", action=
"store_true",
122 help=
"Create ratio pads (deprecated, as it is already the default")
123 group.add_argument(
"--html", action=
"store_true",
124 help=
"Generate HTML pages (deprecated, as it is already the default")
126 opts = parser.parse_args()
128 if not os.path.exists(f):
129 parser.error(
"DQM file %s does not exist" % f)
131 if opts.ignoreMissing:
132 print(
"--ignoreMissing is now the only operation mode, so you can stop using this parameter")
135 print(
"--ratio is now the default, so you can stop using this parameter")
138 print(
"--html is now the default, so you can stop using this parameter")
140 if opts.limit_tracking_algo
is not None:
141 if opts.limit_relval:
142 parser.error(
"--limit-tracking-algo and --limit-relval conflict with each other")
143 opts.limit_tracking_algo = opts.limit_tracking_algo.split(
",")
145 if opts.limit_relval
and opts.ptcut:
146 print(
"With --limit-relval enabled, --ptcut option does not have any effect")
def __init__(self, algos, includePtCut)
def limitRelVal(algo, quality)
def __call__(self, algo, quality)
void print(TMatrixD &m, const char *label=nullptr, bool mathematicaFormat=false)