Each of the signal shape input files corresponds to the JESUP/DOWN JERUP/DOWN shapes. I can explain how we created these for the dijet analysis and we can discuss whether we want to use the same method for the trijet analysis. To get the HLT signal shapes, we actually start from the RECO signal shapes. We assume that the JES +-1sigma uncertainty is simply given by shifting the mjj values by +-2%. For the JER +1sigma uncertainty, we smear the mjj values by +10% of the RECO jet energy resolution (which varies from ~15% of mjj at low mass to ~5% of mjj at high mass) So the way the JER/JES uncertainties are applied are explained briefly on slides 4-6 of this Dijet presentation https://indico.cern.ch/event/544604/contributions/2210115/attachments/1294018/1928591/Dijet_CaloScoutingUpdate_17June2016.pdf As you can see from the slides, the HLT JER (in green) is slightly worse than the RECO JER (in red). So to get the HLT signal shapes and corresponding JER up/down shapes, we smear the mjj values in our reduced signal ntuples by the the appropriate smearing function. Note that (somewhat luckily) because the HLT - 1sigma JER is still larger than than the RECO JER, we can define all 3 smearing functions (HLT nominal, +-1sigma JER). For the RECO -1sigma JER, we obviously can't "unsmear" the signal so for that we just let combine assume some interpolation (we don't provide the shape) The smearing functions for both HLT (nominal, +-1sigma JER) and RECO (+1sigma JER) are defined here: https://github.com/CMSDIJET/DijetRootTreeAnalyzer/blob/master/src/analysisClass_signalDijetScoutingPlots.C#L101-L111 And then lines 138-154 actually apply the smearing: https://github.com/CMSDIJET/DijetRootTreeAnalyzer/blob/master/src/analysisClass_signalDijetScoutingPlots.C#L138-L154 The parameters for the HLT and RECO resolution functions which are input to this procedure are defined by the configuration here: https://github.com/CMSDIJET/DijetRootTreeAnalyzer/blob/master/config/cutFile_signalDijetScoutingPlots.txt#L22-L32 Once we have these histograms produced for our signal sample: https://github.com/CMSDIJET/DijetRootTreeAnalyzer/blob/1d370c425448448d8b764ce9c20676fe518b1069/data/trees_2016/README Then we proceeded to make interpolated signal shape templates (and interpolation) using this repository: https://github.com/CMSDIJET/DijetShapeInterpolator The code to create these shapes is also in the same directory. We make plots like https://github.com/CMSDIJET/DijetShapeInterpolator/blob/master/inputs/InputShapes_RSGgg_Scouting_Spring15.root with 75 bins from 0 to 1.5*M. Once we have the histograms, we extract the shapes with https://github.com/CMSDIJET/DijetShapeInterpolator/blob/master/extractShapes.py like ./extractShapes.py -i inputs/InputShapes_RSGgg_CaloScouting_Spring15.root > inputs/input_shapes_gg_13TeV_CaloScouting_Spring15.py Then interpolate the shapes with https://github.com/CMSDIJET/DijetShapeInterpolator/blob/master/getResonanceShapes.py like ./getResonanceShapes.py -i inputs/input_shapes_gg_13TeV_CaloScouting_Spring15.py -f gg --fineBinning --massrange 500 9000 50 -o ResonanceShapes_gg_13TeV_CaloScouting_Spring15.root -f qq or -f qg for the other shapes.