setenv SCRAM_ARCH slc6_amd64_gcc481
cmsrel CMSSW_7_1_5
cd CMSSW_7_1_5/src
cmsenv
git clone https://github.com/cms-analysis/HiggsAnalysis-CombinedLimit.git HiggsAnalysis/CombinedLimit
git clone https://gitlab.com/sidnarayanan/MonoXFit MonoX
scram b -j16
- Modify
config/categories_config.py
to point to the correct input root file - Call
python buildModel.py categories_config
to createmono-x.root
- Call
python runModel.py
to createcombined-model.root
datacards/combined.txt
is the full datacard for this analysis. You can choose which signal model to use by uncommenting the appropriate line. The datacard automatically points to the combined-model.root
file one directory up. Any changes to the datacard must be made here and in the datacard used for scans (see below)
To run the fit:
cd datacards/
combine -M MaxLikelihoodFit combined_2cat.txt --saveShapes --saveWithUncertainties
And the signal masked-fit:
cd datacards/
text2workspace.py combined_2cat.txt --channel-masks
combine combined_2cat.root -M MaxLikelihoodFit --saveShapes --saveWithUncertainties --setPhysicsModelParameters mask_tight_sig=1,mask_loose_sig=1
datacards/combined_tmpl.txt
is identical to combined.txt
, except the signal model is not specified. Any changes to the scan datacard must be made here and in the datacard used for fits (see above)
To run the scan:
cd datacards/
python scan.py
The results are dumped in *_obs_limits.txt
All plotting tools are in plotting/
. They must be run after running the fit (or limit scan, depending on what plots you want to make). These scripts automatically point to the ROOT files generated by the above combine calls, so there is nothing you need to do.
python plot_ratio.py # plots the xfer factors - no need to rerun now that the inputs are finalized
python plotStackedPostFit.py # makes the stack plots with prefit and postfit comparisons to data
python diffNuisances.py -g pulls.root ../datacards/mlfit.root # draws the pulls plot
python plotLimits.py # makes the limit plots (both sigma and sigma/sigma_theory)
The output directories are specified inside the above scripts and will need to be changed to fit the user's preferences. This should probably be changed to an environment variable.