Skip to content

Commit 33a2710

Browse files
big updates in plotting for new AC fits
1 parent c1a9756 commit 33a2710

File tree

5 files changed

+164
-47
lines changed

5 files changed

+164
-47
lines changed

Plots/cats.json

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
{
2-
"all":"All Categories",
3-
"wall":"#splitline{All Categories}{S/(S+B) weighted}",
4-
"VBFTag_0":"not populated cat",
5-
"VBFTag_1":"ggH low purity",
6-
"VBFTag_2":"not populated cat",
7-
"VBFTag_3":"ggH high purity",
8-
"VBFTag_4":"not populated cat",
9-
"VBFTag_5":"qqH SM-like",
10-
"VBFTag_6":"qqH BSM-like high purity",
11-
"VBFTag_7":"qqH BSM-like med purity"
2+
"all":"All Categories",
3+
"wall":"#splitline{All Categories}{S/(S+B) weighted}",
4+
"RECO_VBFTOPO_ACGGH_Tag0":"ggH low purity",
5+
"RECO_VBFTOPO_ACGGH_Tag1":"ggH high purity",
6+
"RECO_VBFTOPO_ACVBFSM_Tag0":"qqH SM-like",
7+
"RECO_VBFTOPO_ACVBFBSM_Tag0":"qqH BSM-like high purity",
8+
"RECO_VBFTOPO_ACVBFBSM_Tag1":"qqH BSM-like med purity",
9+
"RECO_VBFTOPO_VHHAD_Tag0":"qqH VH Tag0",
10+
"RECO_VBFTOPO_VHHAD_Tag1":"qqH VH Tag1",
1211
}
1312

Plots/cats_latex.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
"RECO_PTH_GT650_Tag0":"BSM high $\\ptgg$",
3232
"RECO_VBFTOPO_VHHAD_Tag0":"qqH VH-like Tag0",
3333
"RECO_VBFTOPO_VHHAD_Tag1":"qqH VH-like Tag1",
34+
"RECO_VBFTOPO_ACGGH_Tag0":"qqH ggH-like Tag0",
35+
"RECO_VBFTOPO_ACGGH_Tag1":"qqH ggH-like Tag1",
36+
"RECO_VBFTOPO_ACVBFSM_Tag0":"qqH SM-like",
37+
"RECO_VBFTOPO_ACVBFBSM_Tag0":"qqH BSM-like Tag0",
38+
"RECO_VBFTOPO_ACVBFBSM_Tag1":"qqH BSM-like Tag1",
3439
"RECO_VBFTOPO_JET3VETO_LOWMJJ_Tag0":"qqH low $\\mjj$ low $\\ptHjj$ Tag0",
3540
"RECO_VBFTOPO_JET3VETO_LOWMJJ_Tag1":"qqH low $\\mjj$ low $\\ptHjj$ Tag1",
3641
"RECO_VBFTOPO_JET3VETO_HIGHMJJ_Tag0":"qqH high $\\mjj$ low $\\ptHjj$ Tag0",

Plots/makeToys.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def get_options():
4343
setParam0Str = setParam0Str[:-1]
4444
mh_bf = w.var("MH").getVal()
4545

46-
if opt.batch == 'IC':
46+
if opt.batch in ['IC','Rome']:
4747
# Create submission file
4848
for itoy in range(0,opt.nToys):
4949
fsub = open("./SplusBModels%s/toys/jobs/sub_toy_%g.sh"%(opt.ext,itoy),'w')
@@ -76,7 +76,8 @@ def get_options():
7676
os.system("chmod 775 ./SplusBModels%s/toys/jobs/sub*.sh"%opt.ext)
7777
if not opt.dryRun:
7878
subs = glob.glob("./SplusBModels%s/toys/jobs/sub*"%opt.ext)
79-
for fsub in subs: os.system("qsub -q hep.q -l h_rt=4:0:0 -l h_vmem=24G %s"%fsub)
79+
subcmd = 'qsub -q hep.q -l h_rt=4:0:0 -l h_vmem=24G' if opt.batch == 'IC' else 'bsub -q %s'%opt.queue
80+
for fsub in subs: os.system("%s %s"%(subcmd,fsub))
8081
else: print " --> [DRY-RUN] jobs have not been submitted"
8182

8283
elif opt.batch == 'condor':

Plots/makeYieldsTables.py

Lines changed: 95 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ def leave():
2222
print " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HGG YIELDS TABLES RUN II (END) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "
2323
sys.exit(1)
2424

25+
2526
# Define STXS stage 0 mapping to procs
2627
stage0_ggh = od()
2728
stage0_ggh["ggH"] = ['ggH_0J_PTH_0_10','ggZH_had_0J_PTH_0_10','ggH_0J_PTH_GT10','ggZH_had_0J_PTH_GT10','ggH_1J_PTH_0_60','ggZH_had_1J_PTH_0_60','ggH_1J_PTH_60_120','ggZH_had_1J_PTH_60_120','ggH_1J_PTH_120_200','ggZH_had_1J_PTH_120_200','ggH_GE2J_MJJ_0_350_PTH_0_60','ggZH_had_GE2J_MJJ_0_350_PTH_0_60','ggH_GE2J_MJJ_0_350_PTH_60_120','ggZH_had_GE2J_MJJ_0_350_PTH_60_120','ggH_GE2J_MJJ_0_350_PTH_120_200','ggZH_had_GE2J_MJJ_0_350_PTH_120_200','ggH_GE2J_MJJ_350_700_PTH_0_200_PTHJJ_0_25','ggH_GE2J_MJJ_350_700_PTH_0_200_PTHJJ_GT25','ggH_GE2J_MJJ_GT700_PTH_0_200_PTHJJ_0_25','ggH_GE2J_MJJ_GT700_PTH_0_200_PTHJJ_GT25','ggZH_had_GE2J_MJJ_350_700_PTH_0_200_PTHJJ_0_25','ggZH_had_GE2J_MJJ_350_700_PTH_0_200_PTHJJ_GT25','ggZH_had_GE2J_MJJ_GT700_PTH_0_200_PTHJJ_0_25','ggZH_had_GE2J_MJJ_GT700_PTH_0_200_PTHJJ_GT25','ggH_PTH_200_300','ggZH_had_PTH_200_300','ggH_PTH_300_450','ggH_PTH_450_650','ggH_PTH_GT650','ggZH_had_PTH_300_450','ggZH_had_PTH_450_650','ggZH_had_PTH_GT650']
@@ -53,11 +54,17 @@ def leave():
5354
stage0_top["tHq"] = ['tHq']
5455
stage0_top["tHW"] = ['tHW']
5556

56-
cp_vbf = od()
57-
cp_vbf["ggH"] = ['ggH']
58-
cp_vbf["qqH"] = ['qqH']
59-
cp_vbf["ttH"] = ['ttH']
60-
cp_vbf["vH"] = ['vH']
57+
cp_ggh = od()
58+
cp_ggh["ggH"] = ['ggH']
59+
60+
cp_qqh = od()
61+
cp_qqh["qqH"] = ['qqH']
62+
63+
cp_top = od()
64+
cp_top["ttH"] = ['ttH']
65+
66+
cp_vh = od()
67+
cp_vh["vH"] = ['WMINUSH2HQQ','WPLUSH2HQQ','ZH_lep']
6168

6269
# ggH tags
6370
target_procs_ggh = od()
@@ -152,13 +159,81 @@ def leave():
152159
target_procs_qqh["RECO_VBFTOPO_VHHAD_Tag1"] = ['qqH_GE2J_MJJ_60_120','WH_had_GE2J_MJJ_60_120','ZH_had_GE2J_MJJ_60_120']
153160

154161
# qqH tags for anomalous couplings
162+
target_procs_ggh_ac = od()
163+
target_procs_ggh_ac["RECO_0J_PTH_0_10_Tag0"] = ['ggH']
164+
target_procs_ggh_ac["RECO_0J_PTH_0_10_Tag1"] = ['ggH']
165+
target_procs_ggh_ac["RECO_0J_PTH_0_10_Tag2"] = ['ggH']
166+
target_procs_ggh_ac["RECO_0J_PTH_GT10_Tag0"] = ['ggH']
167+
target_procs_ggh_ac["RECO_0J_PTH_GT10_Tag1"] = ['ggH']
168+
target_procs_ggh_ac["RECO_0J_PTH_GT10_Tag2"] = ['ggH']
169+
target_procs_ggh_ac["RECO_1J_PTH_0_60_Tag0"] = ['ggH']
170+
target_procs_ggh_ac["RECO_1J_PTH_0_60_Tag1"] = ['ggH']
171+
target_procs_ggh_ac["RECO_1J_PTH_0_60_Tag2"] = ['ggH']
172+
target_procs_ggh_ac["RECO_1J_PTH_120_200_Tag0"] = ['ggH']
173+
target_procs_ggh_ac["RECO_1J_PTH_120_200_Tag1"] = ['ggH']
174+
target_procs_ggh_ac["RECO_1J_PTH_120_200_Tag2"] = ['ggH']
175+
target_procs_ggh_ac["RECO_1J_PTH_60_120_Tag0"] = ['ggH']
176+
target_procs_ggh_ac["RECO_1J_PTH_60_120_Tag1"] = ['ggH']
177+
target_procs_ggh_ac["RECO_1J_PTH_60_120_Tag2"] = ['ggH']
178+
target_procs_ggh_ac["RECO_GE2J_PTH_0_60_Tag0"] = ['ggH']
179+
target_procs_ggh_ac["RECO_GE2J_PTH_0_60_Tag1"] = ['ggH']
180+
target_procs_ggh_ac["RECO_GE2J_PTH_0_60_Tag2"] = ['ggH']
181+
target_procs_ggh_ac["RECO_GE2J_PTH_120_200_Tag0"] = ['ggH']
182+
target_procs_ggh_ac["RECO_GE2J_PTH_120_200_Tag1"] = ['ggH']
183+
target_procs_ggh_ac["RECO_GE2J_PTH_120_200_Tag2"] = ['ggH']
184+
target_procs_ggh_ac["RECO_GE2J_PTH_60_120_Tag0"] = ['ggH']
185+
target_procs_ggh_ac["RECO_GE2J_PTH_60_120_Tag1"] = ['ggH']
186+
target_procs_ggh_ac["RECO_GE2J_PTH_60_120_Tag2"] = ['ggH']
187+
target_procs_ggh_ac["RECO_PTH_200_300_Tag0"] = ['ggH']
188+
target_procs_ggh_ac["RECO_PTH_200_300_Tag1"] = ['ggH']
189+
target_procs_ggh_ac["RECO_PTH_300_450_Tag0"] = ['ggH']
190+
target_procs_ggh_ac["RECO_PTH_300_450_Tag1"] = ['ggH']
191+
target_procs_ggh_ac["RECO_PTH_450_650_Tag0"] = ['ggH']
192+
target_procs_ggh_ac["RECO_PTH_GT650_Tag0"] = ['ggH']
193+
194+
target_procs_top_ac = od()
195+
target_procs_top_ac["RECO_THQ_LEP"] = ['ttH']
196+
target_procs_top_ac["RECO_TTH_HAD_PTH_0_60_Tag0"] = ['ttH']
197+
target_procs_top_ac["RECO_TTH_HAD_PTH_0_60_Tag1"] = ['ttH']
198+
target_procs_top_ac["RECO_TTH_HAD_PTH_0_60_Tag2"] = ['ttH']
199+
target_procs_top_ac["RECO_TTH_HAD_PTH_120_200_Tag0"] = ['ttH']
200+
target_procs_top_ac["RECO_TTH_HAD_PTH_120_200_Tag1"] = ['ttH']
201+
target_procs_top_ac["RECO_TTH_HAD_PTH_120_200_Tag2"] = ['ttH']
202+
target_procs_top_ac["RECO_TTH_HAD_PTH_120_200_Tag3"] = ['ttH']
203+
target_procs_top_ac["RECO_TTH_HAD_PTH_200_300_Tag0"] = ['ttH']
204+
target_procs_top_ac["RECO_TTH_HAD_PTH_200_300_Tag1"] = ['ttH']
205+
target_procs_top_ac["RECO_TTH_HAD_PTH_200_300_Tag2"] = ['ttH']
206+
target_procs_top_ac["RECO_TTH_HAD_PTH_60_120_Tag0"] = ['ttH']
207+
target_procs_top_ac["RECO_TTH_HAD_PTH_60_120_Tag1"] = ['ttH']
208+
target_procs_top_ac["RECO_TTH_HAD_PTH_60_120_Tag2"] = ['ttH']
209+
target_procs_top_ac["RECO_TTH_HAD_PTH_GT300_Tag0"] = ['ttH']
210+
target_procs_top_ac["RECO_TTH_HAD_PTH_GT300_Tag1"] = ['ttH']
211+
target_procs_top_ac["RECO_TTH_LEP_PTH_0_60_Tag0"] = ['ttH']
212+
target_procs_top_ac["RECO_TTH_LEP_PTH_0_60_Tag1"] = ['ttH']
213+
target_procs_top_ac["RECO_TTH_LEP_PTH_0_60_Tag2"] = ['ttH']
214+
target_procs_top_ac["RECO_TTH_LEP_PTH_120_200_Tag0"] = ['ttH']
215+
target_procs_top_ac["RECO_TTH_LEP_PTH_120_200_Tag1"] = ['ttH']
216+
target_procs_top_ac["RECO_TTH_LEP_PTH_200_300_Tag0"] = ['ttH']
217+
target_procs_top_ac["RECO_TTH_LEP_PTH_60_120_Tag0"] = ['ttH']
218+
target_procs_top_ac["RECO_TTH_LEP_PTH_60_120_Tag1"] = ['ttH']
219+
target_procs_top_ac["RECO_TTH_LEP_PTH_60_120_Tag2"] = ['ttH']
220+
target_procs_top_ac["RECO_TTH_LEP_PTH_GT300_Tag0"] = ['ttH']
221+
155222
target_procs_qqh_ac = od()
156-
target_procs_qqh_ac["VBFTag_1"] = ['qqH']
157-
target_procs_qqh_ac["VBFTag_3"] = ['qqH']
158-
target_procs_qqh_ac["VBFTag_5"] = ['qqH']
159-
target_procs_qqh_ac["VBFTag_6"] = ['qqH']
160-
target_procs_qqh_ac["VBFTag_7"] = ['qqH']
223+
target_procs_qqh_ac["RECO_VBFTOPO_ACGGH_Tag0"] = ['qqH']
224+
target_procs_qqh_ac["RECO_VBFTOPO_ACGGH_Tag1"] = ['qqH']
225+
target_procs_qqh_ac["RECO_VBFTOPO_ACVBFBSM_Tag0"] = ['qqH']
226+
target_procs_qqh_ac["RECO_VBFTOPO_ACVBFBSM_Tag1"] = ['qqH']
227+
target_procs_qqh_ac["RECO_VBFTOPO_ACVBFSM_Tag0"] = ['qqH']
161228

229+
target_procs_vh_ac = od()
230+
target_procs_vh_ac["RECO_VBFTOPO_VHHAD_Tag0"] = ['vH']
231+
target_procs_vh_ac["RECO_VBFTOPO_VHHAD_Tag1"] = ['vH']
232+
target_procs_vh_ac["RECO_VH_MET_Tag0"] = ['vH']
233+
target_procs_vh_ac["RECO_VH_MET_Tag1"] = ['vH']
234+
target_procs_vh_ac["RECO_VH_MET_Tag2"] = ['vH']
235+
target_procs_vh_ac["RECO_WH_LEP_PTV_0_75_Tag0"] = ['vH']
236+
target_procs_vh_ac["RECO_WH_LEP_PTV_0_75_Tag1"] = ['vH']
162237

163238
def get_options():
164239
parser = OptionParser()
@@ -181,20 +256,17 @@ def LoadTranslations(jsonfilename):
181256
translateStage0 = {} if opt.translateStage0 is None else LoadTranslations(opt.translateStage0)
182257

183258
if opt.group == "ggh":
184-
stage0 = stage0_ggh
185-
target_procs = target_procs_ggh
259+
stage0 = cp_ggh
260+
target_procs = target_procs_ggh_ac
186261
elif opt.group == "qqh":
187-
stage0 = stage0_qqh
188-
target_procs = target_procs_qqh
262+
stage0 = cp_qqh
263+
target_procs = target_procs_qqh_ac
189264
elif opt.group == "vh":
190-
stage0 = stage0_vh
191-
target_procs = target_procs_vh
265+
stage0 = cp_vh
266+
target_procs = target_procs_vh_ac
192267
elif opt.group == "top":
193-
stage0 = stage0_top
194-
target_procs = target_procs_top
195-
elif opt.group == "qqh_ac":
196-
stage0 = cp_vbf
197-
target_procs = target_procs_qqh_ac
268+
stage0 = cp_top
269+
target_procs = target_procs_top_ac
198270
else:
199271
print " --> [ERROR] target group of categories %s does not exist"%opt.group
200272
leave()
@@ -204,7 +276,7 @@ def LoadTranslations(jsonfilename):
204276
print " --> [ERROR] Input directory with pickle files does not exist. Leaving"
205277
leave()
206278
yfiles = glob.glob("%s/*.pkl" % opt.inputPklDir)
207-
data = pd.concat([pd.read_pickle(f) for f in yfiles])
279+
data = pd.concat([pd.read_pickle(f) for f in yfiles],sort=False)
208280
#with open( opt.inputPkl, "rb" ) as fin: data = pickle.load(fin)
209281

210282
# Load cat info dataframe
@@ -254,6 +326,7 @@ def LoadTranslations(jsonfilename):
254326
# Make table
255327
nColumns = 4+len(stage0.keys())
256328
foutname = "Tables/yields_table_lite_%s%s.txt"%(opt.group,opt.ext)
329+
if not os.path.isdir('Tables'): os.system("mkdir Tables")
257330
fout = open(foutname,"w")
258331
fout.write("\\begin{tabular}{%s}\n"%("l|"+("c"*(nColumns-1))))
259332
#fout.write(" \\hline \\hline \n")

Plots/run_sequence.sh

100644100755
Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,55 @@
1-
# prefit (all mu=1)
2-
python makeSplusBModelPlot.py --inputWSFile ../Combine/Datacard_sm_mu_simple.root --cats VBFTag_1,VBFTag_3,VBFTag_5,VBFTag_6,VBFTag_7 --doZeroes --pdir plots/2022-08-31-fits --ext _test --translateCats cats.json --unblind
1+
STEP=0
2+
usage(){
3+
echo "Script to run fits and plots of fit output."
4+
echo "options:"
5+
6+
echo "-h|--help) "
7+
echo "-s|--step) "
8+
echo "-d|--dryRun) "
9+
}
10+
# options may be followed by one colon to indicate they have a required argument
11+
if ! options=$(getopt -u -o s:hd -l help,step:,dryRun -- "$@")
12+
then
13+
# something went wrong, getopt will put out an error message for us
14+
exit 1
15+
fi
16+
set -- $options
17+
while [ $# -gt 0 ]
18+
do
19+
case $1 in
20+
-h|--help) usage; exit 0;;
21+
-s|--step) STEP=$2; shift ;;
22+
-d|--dryRun) DR=$2; shift ;;
23+
(--) shift; break;;
24+
(-*) usage; echo "$0: error - unrecognized option $1" 1>&2; usage >> /dev/stderr; exit 1;;
25+
(*) break;;
26+
esac
27+
shift
28+
done
329

4-
# postfit
5-
python makeSplusBModelPlot.py --inputWSFile plots/2022-08-31-fits/sm_mu_simple/bestfit_syst_r_VBF.root --loadSnapshot MultiDimFit --cats VBFTag_1,VBFTag_3,VBFTag_5,VBFTag_6,VBFTag_7 --doZeroes --pdir plots/2022-08-31-fits --ext _test --translateCats cats.json --unblind
30+
bestfit="../Combine/runFitsxsec_xsec_savedWS/higgsCombine_bestfit_syst_obs_xsec_r_ggH.MultiDimFit.mH125.root"
31+
yields="../Datacard/yields_2023-03-02_xsec"
632

7-
# get category weights
8-
python getCatInfo.py --inputWSFile ../Combine/Datacard_sm_mu_simple.root --cats all --doBkgRenormalization --saveCatInfo --ext _allCats
33+
if [[ $STEP == "spb" ]]; then
34+
python makeSplusBModelPlot.py --inputWSFile $bestfit --loadSnapshot MultiDimFit --cats all --doZeroes --pdir . --ext _test --unblind
35+
elif [[ $STEP == "catweights" ]]; then
36+
python getCatInfo.py --inputWSFile $bestfit --cats all --doBkgRenormalization --saveCatInfo --ext _allCats
37+
elif [[ $STEP == "bands" ]]; then
38+
python makeToys.py --inputWSFile $bestfit --loadSnapshot MultiDimFit --nToys 500 --POIs r_ggH,r_VBF,r_top,r_VH --batch Rome --queue cmsan --ext _test_with_bands
39+
elif [[ $STEP == "spb2-calc" ]]; then
40+
# first time, with bands calculation
41+
python makeSplusBModelPlot.py --inputWSFile $bestfit --loadSnapshot MultiDimFit --cats all --doZeroes --pdir . --ext _test_with_bands --unblind --doBands --saveToyYields --doSumCategories --doCatWeights --saveWeights
42+
elif [[ $STEP == "spb2" ]]; then
43+
# next times, when toys are merged
44+
python makeSplusBModelPlot.py --inputWSFile $bestfit --loadSnapshot MultiDimFit --cats all --doZeroes --pdir . --ext _test_with_bands --unblind --doBands --loadToyYields SplusBModels_test_with_bands/toys/toyYields_CMS_hgg_mass.pkl --doSumCategories --doCatWeights --saveWeights
45+
elif [[ $STEP == "tables" ]]; then
46+
# make tables with yields
47+
groups=("ggh" "qqh" "vh" "top")
48+
for group in ${groups[*]}
49+
do
50+
python makeYieldsTables.py --inputPklDir $yields --loadCatInfo pkl/catInfo_allCats.pkl --group $group
51+
done
52+
else
53+
echo "Step $STEP is not one among yields,datacard,links. Exiting."
54+
fi
955

10-
# make bands with toys
11-
python makeToys.py --inputWSFile plots/2022-08-31-fits/sm_mu_simple/bestfit_syst_r_VBF.root --loadSnapshot MultiDimFit --nToys 500 --POIs r_ggH,r_VBF,r_top,r_VH --batch condor --queue workday --ext _test_with_bands
12-
python makeSplusBModelPlot.py --inputWSFile plots/2022-08-31-fits/sm_mu_simple/bestfit_syst_r_VBF.root --loadSnapshot MultiDimFit --cats all --doZeroes --pdir plots/2022-08-31-fits --ext _test_with_bands --translateCats cats.json --unblind --doBands --saveToyYields --doSumCategories --doCatWeights --saveWeights # first time, with bands calculation
13-
python makeSplusBModelPlot.py --inputWSFile plots/2022-08-31-fits/sm_mu_simple/bestfit_syst_r_VBF.root --loadSnapshot MultiDimFit --cats all --doZeroes --pdir plots/2022-08-31-fits --ext _test_with_bands --translateCats cats.json --unblind --doBands --loadToyYields SplusBModels_test_with_bands/toys/toyYields_CMS_hgg_mass.pkl --doSumCategories --doCatWeights --saveWeights
14-
15-
# make tables with yields
16-
python makeYieldsTables.py --inputPklDir ../Datacard/yields_2022-09-01_xsec --loadCatInfo pkl/catInfo_allCats.pkl --group qqh_ac --translateCats cats.json

0 commit comments

Comments
 (0)