1 |
|
#!/usr/bin/env python |
2 |
|
import os |
3 |
+ |
import re |
4 |
|
import sys |
5 |
+ |
import math |
6 |
|
import datetime |
7 |
< |
import argparse |
8 |
< |
from OSUT3Analysis.Configuration.configurationOptions import * |
7 |
> |
from optparse import OptionParser |
8 |
> |
#from OSUT3Analysis.Configuration.configurationOptions import * |
9 |
|
|
10 |
< |
|
9 |
< |
def split_composite_datasets(datasets): |
10 |
> |
def split_composite_datasets(datasets, composite_dataset_definitions): |
11 |
|
for dataset in datasets: |
12 |
|
if dataset in composite_dataset_definitions: |
13 |
|
for component_dataset in composite_dataset_definitions[dataset]: |
15 |
|
datasets.remove(dataset) |
16 |
|
return datasets |
17 |
|
|
18 |
< |
def get_composite_datasets(datasets): |
18 |
> |
def get_composite_datasets(datasets, composite_dataset_definitions): |
19 |
|
composite_datasets = [] |
20 |
|
for dataset in datasets: |
21 |
|
if dataset in composite_dataset_definitions: |
44 |
|
sys.exit("Cannot find last condor working directory") |
45 |
|
dir_list.sort(reverse=True) |
46 |
|
condor_dir = "condor/%s" % dir_list[0] |
47 |
< |
#print "Condor output directory set to ",condor_dir |
47 |
> |
print "Condor output directory set to ",condor_dir |
48 |
|
return condor_dir |
49 |
|
|
50 |
|
def set_commandline_arguments(parser): |
51 |
< |
parser.add_argument("-l", "--localConfig", dest="localConfig", |
51 |
> |
#### Configuration-related Options |
52 |
> |
parser.add_option("-l", "--localConfig", dest="localConfig", |
53 |
|
help="local configuration file") |
54 |
< |
|
53 |
< |
parser.add_argument("-c", "--condorDir", dest="condorDir", |
54 |
> |
parser.add_option("-c", "--condorDir", dest="condorDir", |
55 |
|
help="condor output directory") |
56 |
< |
parser.add_argument("-n", "--normalize", action="store_true", dest="normalizeToData", default=False, |
56 |
> |
parser.add_option("-o", "--output-file", dest="outputFileName", |
57 |
> |
help="specify an output file name for the histogram file, default is 'stacked_histograms.root'") |
58 |
> |
parser.add_option("-t", "--no-weights", action="store_true", dest="noWeights", default=False, |
59 |
> |
help="do not apply cross section weights") |
60 |
> |
parser.add_option("-q", "--quickMerge", action="store_true", dest="quickMerge", default=False, |
61 |
> |
help="do merge without making cutflow or plots") |
62 |
> |
|
63 |
> |
|
64 |
> |
#### Histogram Formatting Options |
65 |
> |
parser.add_option("-n", "--normalize", action="store_true", dest="normalizeToData", default=False, |
66 |
|
help="normalize total background MC yield to the data") |
67 |
< |
parser.add_argument("-u", "--unit-area", action="store_true", dest="normalizeToUnitArea", default=False, |
67 |
> |
parser.add_option("-u", "--unit-area", action="store_true", dest="normalizeToUnitArea", default=False, |
68 |
|
help="normalize all samples to unit area (useful to compare shapes)") |
69 |
< |
parser.add_argument("-e", "--empty", action="store_true", dest="noStack", default=False, |
69 |
> |
parser.add_option("-e", "--empty", action="store_true", dest="noStack", default=False, |
70 |
|
help="don't stack the background samples, draw them as empty histograms instead") |
71 |
< |
parser.add_argument("-r", "--ratio", action="store_true", dest="makeRatioPlots", default=False, |
71 |
> |
|
72 |
> |
parser.add_option("-r", "--ratio", action="store_true", dest="makeRatioPlots", default=False, |
73 |
|
help="draw (data-MC)/MC plots below all 1D histograms") |
74 |
< |
parser.add_argument("-o", "--output-file", dest="outputFileName", |
75 |
< |
help="specify an output file name for the histogram file, default is 'stacked_histograms.root'") |
76 |
< |
|
74 |
> |
parser.add_option("-R", "--ratioYRange", dest="ratioYRange", default=1.15, |
75 |
> |
help="maximum of range of vertical scale for ratio plots") |
76 |
> |
parser.add_option("-d", "--diff", action="store_true", dest="makeDiffPlots", default=False, |
77 |
> |
help="draw data-MC plots below all 1D histograms") |
78 |
> |
parser.add_option("-b", "--rebin", dest="rebinFactor", |
79 |
> |
help="Rebin all the histograms which will have at least 10 bins after rebinning") |
80 |
> |
parser.add_option("--2D", action="store_true", dest="draw2DPlots", default=False, |
81 |
> |
help="draw stacked 2D histograms") |
82 |
> |
parser.add_option("-y", "--yields", action="store_true", dest="printYields", default=False, |
83 |
> |
help="Include the yield of each source in the legend") |
84 |
> |
parser.add_option("-p", "--pdfs", action="store_true", dest="savePDFs", default=False, |
85 |
> |
help="Save pdfs files for all plots made") |
86 |
> |
|
87 |
|
|
88 |
|
return parser |
89 |
|
|
90 |
< |
def get_short_name(dataset): |
90 |
> |
def get_short_name(dataset, dataset_names): |
91 |
|
for key in dataset_names: |
92 |
|
if dataset_names[key] == dataset: |
93 |
< |
return key; |
93 |
> |
return key |
94 |
|
return "Unknown" |
95 |
+ |
|
96 |
+ |
def stop_ctau (dataset): |
97 |
+ |
if not re.match (r"stop[^_]*to[^_]*_[^_]*mm.*", dataset): |
98 |
+ |
return 0.0 |
99 |
+ |
return float (re.sub (r"stop[^_]*to[^_]*_([^_]*)mm.*", r"\1", dataset)) |
100 |
+ |
|
101 |
+ |
def source_stop_ctau (ctau): |
102 |
+ |
return int (math.pow (10.0, math.ceil (math.log10 (ctau)))) |
103 |
+ |
|
104 |
+ |
def add_stops (options, masses, ctaus, bottomBranchingRatios = []): |
105 |
+ |
if not bottomBranchingRatios: |
106 |
+ |
bottomBranchingRatios.append (50.0) |
107 |
+ |
for mass in masses: |
108 |
+ |
for ctau in ctaus: |
109 |
+ |
for bottomBranchingRatio in bottomBranchingRatios: |
110 |
+ |
datasetName = 'stop' + str (mass) + "_" + str (ctau) + "mm_br" + str (int (bottomBranchingRatio)) |
111 |
+ |
bottomDatasetName = 'stop' + str (mass) + "toBl_" + str (ctau) + "mm" |
112 |
+ |
sourceBottomDatasetName = 'stop' + str (mass) + "toBl_" + str (source_stop_ctau (ctau)) + "mm" |
113 |
+ |
topDatasetName = 'stop' + str (mass) + "toTnu_" + str (ctau) + "mm" |
114 |
+ |
sourceTopDatasetName = 'stop' + str (mass) + "toTnu_" + str (source_stop_ctau (ctau)) + "mm" |
115 |
+ |
mixedDatasetName = 'stop' + str (mass) + "toBT_" + str (ctau) + "mm" |
116 |
+ |
sourceMixedDatasetName = 'stop' + str (mass) + "toBT_" + str (source_stop_ctau (ctau)) + "mm" |
117 |
+ |
|
118 |
+ |
options['datasets'].append (datasetName) |
119 |
+ |
bottomBranchingRatio /= 100.0 |
120 |
+ |
options['composite_dataset_definitions'][datasetName] = { |
121 |
+ |
bottomDatasetName : bottomBranchingRatio * bottomBranchingRatio, |
122 |
+ |
topDatasetName : (1 - bottomBranchingRatio) * (1 - bottomBranchingRatio), |
123 |
+ |
mixedDatasetName : (1 - bottomBranchingRatio * bottomBranchingRatio - (1 - bottomBranchingRatio) * (1 - bottomBranchingRatio)) |
124 |
+ |
} |
125 |
+ |
options['dataset_names'][bottomDatasetName] = options['dataset_names'][sourceBottomDatasetName] |
126 |
+ |
options['dataset_names'][topDatasetName] = options['dataset_names'][sourceTopDatasetName] |
127 |
+ |
options['dataset_names'][mixedDatasetName] = options['dataset_names'][sourceMixedDatasetName] |
128 |
+ |
options['nJobs'][bottomDatasetName] = 1 |
129 |
+ |
options['nJobs'][topDatasetName] = 1 |
130 |
+ |
options['nJobs'][mixedDatasetName] = 1 |
131 |
+ |
options['maxEvents'][bottomDatasetName] = -1 |
132 |
+ |
options['maxEvents'][topDatasetName] = -1 |
133 |
+ |
options['maxEvents'][mixedDatasetName] = -1 |
134 |
+ |
options['types'][datasetName] = "signalMC" |
135 |
+ |
options['types'][bottomDatasetName] = "signalMC" |
136 |
+ |
options['types'][topDatasetName] = "signalMC" |
137 |
+ |
options['types'][mixedDatasetName] = "signalMC" |
138 |
+ |
options['labels'][datasetName] = str (mass) + " GeV stop (#LTc#tau#GT = " + str (ctau) + " mm)" |
139 |
+ |
options['labels'][bottomDatasetName] = "#tilde{t}#tilde{t}#rightarrowbbll (#LTc#tau#GT = " + str (ctau) + " mm)" |
140 |
+ |
options['labels'][topDatasetName] = "#tilde{t}#tilde{t}#rightarrowtt#nu#nu (#LTc#tau#GT = " + str (ctau) + " mm)" |
141 |
+ |
options['labels'][mixedDatasetName] = "#tilde{t}#tilde{t}#rightarrowbtl#nu (#LTc#tau#GT = " + str (ctau) + " mm)" |