Instructions to run the xBF team's framework for differential cross-section measurements for CMSSW_10_X releases. =========================================
Dependencies:
Framework/documentation:
Detailed documentation regarding the framework can be found in the dedicated ReadTheDocs page. This README
file and the official documentation are written in .rst
(ReStructured Text Markup syntax) in order to better explore the options given by sphinx
and ReadTheDocs
. For more details about the Markup syntax, please consult the ReStructuredText Primer.
1. Setup the correct CMSSW and Combine releases ========================================= These are formed from from the official Combine framework instructions.
CC7 release CMSSW_10_2_X - recommended version Setting up the environment (once): :
export SCRAM_ARCH=slc7_amd64_gcc700
cmsrel CMSSW_10_2_13
cd CMSSW_10_2_13/src
cmsenv
git clone https://github.com/cms-analysis/HiggsAnalysis-CombinedLimit.git HiggsAnalysis/CombinedLimit
cd HiggsAnalysis/CombinedLimit
Update to a recommended tag - currently the recommended tag is v8.2.0: see release notes: :
cd $CMSSW_BASE/src/HiggsAnalysis/CombinedLimit
git fetch origin
git checkout v8.2.0
scramv1 b clean; scramv1 b # always make a clean build
Depending on where the data/mc is stored, one might need: :
voms-proxy-init -voms cms
Final step is to clone the correct verison of the code. At the moment the working version can be found on the `CMSSW_10_X
` branch, which can be cloned via the following command: :
cd $CMSSW_BASE/src/
git clone -b CMSSW_10_X git@github.com:vukasinmilosevic/Fiducial_XS.git
cd Fiducial_XS
# To update the git submodule
git submodule update --init --recursive
source setup.sh # mandatory to load necessary library
# or run following manually:
# export PYTHON27PATH=$PYTHON27PATH:python
# export PYTHON27PATH=$PYTHON27PATH:Inputs
2.1 Using the RunEverything.py
script: -----------------------------------------
Now, all steps can be run using script RunEverything.py
. The available options are: :
usage: RunEverything.py [-h] [-s {1,2,3,4,5}] [-c CHANNELS [CHANNELS ...]]
[-p NTUPLEDIR] [-m HIGGSMASS] [-r {0,1}]
Input arguments
optional arguments:
-h, --help show this help message and exit
-s {1,2,3,4,5} Which step to run
-c CHANNELS [CHANNELS ...]
list of channels
-p NTUPLEDIR Path of ntuples
-m HIGGSMASS Higgs mass
-r {0,1} if 1 then it will run the commands else it will just
print the commands
Commands to run: :
python RunEverything.py -r 1 -s 1 # step-1: Compute efficiencies
python RunEverything.py -r 1 -s 2 # step-2: collectInputs
python RunEverything.py -r 1 -s 3 # step-3: interpolation for powheg sample
python RunEverything.py -r 1 -s 4 # step-4: Run uncertainty step
python RunEverything.py -r 1 -s 5 # step-5: interpolation for the NNLOPS sample using powheg sample
python RunEverything.py -r 1 -s 6 # step-6: Run background template maker
python RunEverything.py -r 1 -s 7 # step-7: Final measurement and plotter
Current example running mass4l
variable via nohup
. For local testing remove nohup
(and pipelining into a .log file if wanting terminal printout). :
nohup python -u efficiencyFactors.py -l -q -b --obsName="mass4l" --obsBins="|105.0|140.0|" -c "4mu" >& effs_mass4l_4mu.log &
nohup python -u efficiencyFactors.py -l -q -b --obsName="mass4l" --obsBins="|105.0|140.0|" -c "4e" >& effs_mass4l_4e.log &
nohup python -u efficiencyFactors.py -l -q -b --obsName="mass4l" --obsBins="|105.0|140.0|" -c "2e2mu" >& effs_mass4l_2e2mu.log &
nohup python -u efficiencyFactors.py -l -q -b --obsName="mass4l" --obsBins="|105.0|140.0|" -c "4l" >& effs_mass4l_4l.log &
python collectInputs.py # currently only active for mass4l, calls be uncommented for the rest of variables
Running the plotter: :
#skipping for mass4l
#python -u plot2dsigeffs.py -l -q -b --obsName="pT4l" --obsBins="|0|10|20|30|45|80|120|200|13000|"
Run the interpolation step for powheg sample:
python python/interpolate_differential_full.py --obsName="mass4l" --obsBins="|105.0|140.0|" --year=2018 --debug 0
python -u getUnc_Unc.py --obsName="mass4l" --obsBins="|105.0|140.0|" >& unc_mass4l.log &
Run the interpolation step for NNLOPS sample. For NNLOPS sample we don't have M124 and M126 MC samples. We assume that the the ratio for the acceptance for M125 and M125.38 is same for both NNLOPS and powheg. Then, we compute this ratio from powheg sample and get the values for NNLOPS sample.
NOTE: Run this step after the uncertainty step. As this will also update the pdf and QCD scale uncertainty for NNLOPS.
python python/interpolate_differential_full.py --obsName="mass4l" --obsBins="|105.0|140.0|" --year=2018 --debug 0
2.2.3 Running the background template maker ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ :
python -u runHZZFiducialXS.py --dir="/eos/home-v/vmilosev/Skim_2018_HZZ/WoW/" --obsName="mass4l" --obsBins="|105.0|140.0|" --redoTemplates --templatesOnly
2.2.4 Runing the final measurement and plotters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
For the last step a data file is needed as input, even for the blinded step (!). I've stored the previous one in my public folder: :
/afs/cern.ch/user/v/vmilosev/public/data_13TeV.root
or one can copy the data file from the data/mc folder and properly rename it. One additional set of models is needed in order to run the combine step. The HZZ4l specific modules stored here: :
/afs/cern.ch/user/v/vmilosev/public/HZZ4l_models/
needs to be added to the corresponding $CMSSW_BASE/src/HiggsAnalysis/CombinedLimit/python
collection of libraries.
The command to run the measurement and the plotters is: :
nohup python -u runHZZFiducialXS.py --obsName="mass4l" --obsBins="|105.0|140.0|" --calcSys --asimovMass 125.0 >& log_mass4l_Run2Fid.txt &
- Hardcoded paths in LoadData.py
- Currently, the framework will work if all samples exists in the same directory, including the Z+X files.
- Add the choices for argparser whereever its possible. So, that code won't run if we provide wrong arguments.
Hardcoded Informations ^^^^^^^^^^^^^^^^^^
- obsList YAML file should follow the following format:
`YAML Observables: 1D_Observables: mass4l: - bins: "|105.0|140.0|" 2D_Observables: mass4l: - bins: "|105.0|140.0|"
`In this YAML file the two names Observables, 1D_Observables and 2D_Observables should remain same, else the code will give error.