Instructions to run Calo Scouting Dijet Resonance Search from start to finish.
-
Set up CMSSW/DijetRootTreeAnalyzer/combine
$ cmsrel CMSSW_7_4_14 $ cd CMSSW_7_4_14/src $ cmsenv $ git clone https://github.com/CMSDIJET/DijetRootTreeAnalyzer CMSDIJET/DijetRootTreeAnalyzer $ git clone -b dijetpdf_74X https://github.com/RazorCMS/HiggsAnalysis-CombinedLimit HiggsAnalysis/CombinedLimit $ cd HiggsAnalysis/CombinedLimit $ scram b -j 4 $ cd $CMSSW_BASE/CMSDIJET/DijetRootTreeAnalyzer
-
Add files from EOS together
$ python/AddFiles.py -l lists/CaloScoutingHT_2016_JEC_CaloL1L2L3_PFL2L3Residual_NewBiasCorrected_Golden12910pb_20160723_003113_reduced_skim.txt -o inputs/data_CaloScoutingHT_Run2016BCD_NewBiasCorrected_Golden12910pb_CaloDijet2016.root
-
Copy CaloScouting signal resonance files
$ wget https://github.com/CMSDIJET/DijetShapeInterpolator/raw/master/ResonanceShapes_gg_13TeV_CaloScouting_Spring16.root -P inputs/ $ wget https://github.com/CMSDIJET/DijetShapeInterpolator/raw/master/ResonanceShapes_gg_13TeV_CaloScouting_Spring16_JERUP.root -P inputs/ $ wget https://github.com/CMSDIJET/DijetShapeInterpolator/raw/master/ResonanceShapes_gg_13TeV_CaloScouting_Spring16_JERDOWN.root -P inputs/ $ wget https://github.com/CMSDIJET/DijetShapeInterpolator/raw/master/ResonanceShapes_gg_13TeV_CaloScouting_Spring16_JESUP.root -P inputs/ $ wget https://github.com/CMSDIJET/DijetShapeInterpolator/raw/master/ResonanceShapes_gg_13TeV_CaloScouting_Spring16_JESDOWN.root -P inputs/
-
Perform an unblinded, background-only, full region fit (with signal shapes plotted)
$ mkdir -p fits_2016_07_24/ $ mkdir -p fits_2016_07_24/CaloDijet2016_Full $ python python/BinnedFit.py -c config/dijet.config -l 12910 --mass 750_1200_1600 -m gg_qg_qq --xsec 9.5_8.2e-1_2.2e-1 -s inputs/ResonanceShapes_gg_13TeV_CaloScouting_Spring16.root inputs/data_CaloScoutingHT_Run2016BCD_NewBiasCorrectedFlat_Golden12910pb_CaloDijet2016.root -b CaloDijet2016 -d fits_2016_07_24/CaloDijet2016_Full/ --fit-spectrum
-
Run and fit 1000 toys and plot GOF for unblinded fit
$ python python/RunToys.py -b CaloDijet2016 --freq -c config/dijet.config --lumi 12910 --fit-region Full -d fits_2016_07_24/CaloDijet2016_Full/ -i fits_2016_07_24/CaloDijet2016_Full/DijetFitResults_CaloDijet2016.root -t 1000 -s 0 $ python python/PlotGOF.py -b CaloDijet2016 -c config/dijet.config -d fits_2016_07_24/CaloDijet2016_Full/ -t fits_2016_07_24/CaloDijet2016_Full/toys_Freq_s0_CaloDijet2016.root -l 12910 --data
-
Run combine to produce expected and observed limits for gg resonance mass range [500, 1600] in 50 GeV steps
$ mkdir -p cards_gg_freq $ python python/RunCombine.py -m gg -d cards_gg_freq/ --mass range\(500,1650,50\) -c config/dijet.config -i inputs/DijetFitResults.root -b CaloDijet2016 --rMax 20 --xsec 10 -l 12.910
-
Convert combine output files and plot 1D limit
$ python python/GetCombine.py -d cards_gg_freq/ -m gg --mass range\(500,1650,50\) -b CaloDijet2016 --xsec 10 -l 12.910 $ python python/Plot1DLimit.py -d cards_gg_freq/ -m gg -b CaloDijet2016 -l 12.910 --massMin 600 --massMax 1600 --xsecMin 1e-3 --xsecMax 1e5
-
Run combine-based bias studies with 1000 toys for r = 1 and 10 pb cross section using 4-parameter modified exponential for generation and 4-parameter dijet functin for fitting (defined in confif/dijet_bias.config)
$ mkdir signal_bias/ $ python python/RunBias.py -c config/dijet_bias.config --mass 750 -m gg -d signal_bias/ -r 1 -l 12.910 --xsec 10 -t 1000 --gen-pdf modexp --fit-pdf fourparam
-
Make plots of bias
$ python python/PlotBias.py -c config/dijet_bias.config --mass 750 -m gg -d signal_bias/ -r 1 -l 12.910 --xsec 10 -t 1000 --gen-pdf modexp --fit-pdf fourparam
-
Copying Commisioning dataset (warning: large file)
mkdir trigger cd trigger wget https://www.dropbox.com/s/djdx56s7gy7t4ct/ScoutingCaloCommissioning2016_JEC_CaloL1L2L3_PFL2L3Residual_NewBiasCorrectedFlat_Golden36410pb.root?dl=1 cd ..
-
Fitting BCDEFG trigger-turn-on
mkdir -p fits_2016_12_14/ mkdir -p fits_2016_12_14/CaloDijet2016BCDEFG_Full_hltturnon/ python python/BinnedFit.py -b CaloDijet2016 -c config/dijet_turnon.config -t trigger/ScoutingCaloCommissioning2016_JEC_CaloL1L2L3_PFL2L3Residual_NewBiasCorrectedFlat_Golden36410pb.root --fit-trigger -d fits_2016_12_14/CaloDijet2016BCDEFG_Full_hltturnon/ inputs/data_CaloScoutingHT_Run2016BCDEFGH_NoBiasCorr_Mjj300_Golden36410pb_CaloDijet2016.root -l 27637 --run-min 0 --run-max 280385
Note it takes a long time to convert the tree into a RooDataSet for fitting. Since this only needs to be done once, you can repeat the fit with a file that contains only the RooDataSet (produced the first time you run the command above). This is helpful if you want to change the binning of the plot, etc.
-
Refitting BCDEFG trigger-turn-on with RooDataSet
python python/BinnedFit.py -b CaloDijet2016 -c config/dijet_turnon.config -t fits_2016_12_14/CaloDijet2016BCDEFG_Full_hltturnon/triggerData.root --fit-trigger -d fits_2016_12_14/CaloDijet2016BCDEFG_Full_hltturnon/ inputs/data_CaloScoutingHT_Run2016BCDEFGH_NoBiasCorr_Mjj300_Golden36410pb_CaloDijet2016.root -l 27637 --run-min 0 --run-max 280385