treeLumi = 1.0 # 1/fb newLumi = 5.0 # 1/fb masses = [3000, 2500, 2000, 1500] poi_setups = { 3000 : [60, 0, 30], 2500 : [60, 0, 30], 2000 : [60, 0, 20], 1500 : [75, 0, 20], } # createDirectoryStructure('/afs/cern.ch/work/y/yygao/public/VVJJStatInput/results_CamKt12SplitFilteredMu100SmallR30YCut4/syst_100', releaseDir, analysis, inputListTag, outputWSTag) createDirectoryStructure('/afs/cern.ch/work/v/vippolit/public//VVJJ/test_inputs_20150508', releaseDir, analysis, inputListTag, outputWSTag) vvjj = RF.VVJJAnalysisRunner(analysis) vvjj.setTreeObs('x') vvjj.setTreeWeight('weight') vvjj.setLumiRescale(treeLumi, newLumi) vvjj.setNbins(25) vvjj.setObsMin(1050) vvjj.setObsMax(3550) vvjj.setReleaseDir(releaseDir) vvjj.setInputListTag(inputListTag) vvjj.setOutputWSTag(outputWSTag) vvjj.doPull(producePull); if not doExternalPdf: # set up function for up/down shape variations
run1_input_path_format = '/afs/cern.ch/work/k/kalliopi/public/forValerio/test0/lvqq_{mass}.root' masses = [3000, 2500, 2000, 1500, 1000 ] dest = createEmptyDirs(releaseDir, analysis, inputTag) poi_setups = { 3000 : [60, 0, 30], 2500 : [60, 0, 30], 2000 : [60, 0, 20], 1500 : [75, 0, 20], 1000 : [80, 0, 20], 1000 : [60, 0, 20] } getInputFromRunI(run1_input_path_format, masses, dest) # run over them lvqq = RF.VVlvqqValidationRunner(analysis) lvqq.setReleaseDir(releaseDir) lvqq.setInputListTag(inputTag) lvqq.setOutputWSTag(wsTag) # create a new channel (will automatically add data) lvqq.addChannel('SR', '') # not using selection criteria # loop over signals for mass in masses: thisSig = 'signal_{mass}'.format(mass=mass) lvqq.channel('SR').addSample(thisSig) lvqq.channel('SR').sample(thisSig).setNormByLumi(True) lvqq.channel('SR').sample(thisSig).multiplyBy('mu', 1.0, 0, 20) # declare signal mass value
if "TCR" in sys.argv[1]: useTCR=True if "Merg" in sys.argv[1]: useMerg=True if "Res" in sys.argv[1]: useRes=True if "PNN" in sys.argv[1]: usePNN=True if usePNN: tag=tag+"PNN" masses=[] if len(sys.argv) > 2: masses=[int(sys.argv[2])] signalType="HVTWZ" if len(sys.argv) > 3: signalType=sys.argv[3] #Start analysis and define directory structure RFAnalysis = RF.DefaultTreeAnalysisRunner("ExampleVV") RFAnalysis.setOutputDir("./output/M4f/") RFAnalysis.setOutputWSTag(tag) #Set up/down variation names to your convention RFAnalysis.setCollectionTagNominal("Nominal") RFAnalysis.setCollectionTagUp("_up") RFAnalysis.setCollectionTagDown("_dn") #Example of defining some variables ahead of time. Example here for lumi uncertainities lumi_scale=1. lumi_uncert=0.017 #################################################### # Now define your fit model and where to find the data ####################################################
#doInjection = False doToys = False #doToys = True doOptimisedScan = True poi_setups = { # for optimised mu scan 2500 : [1000, 0, 100], 2000 : [1000, 0, 100], 1800 : [400, 0, 50], 1600 : [200, 0, 30], 1500 : [50, 0, 30], 1400 : [50, 0, 30], 1100 : [50, 0, 20], 1000 : [50, 0, 20], } llqq = RF.VVllqqAnalysisRunner(analysis) # define input tree format llqq.setTreeObs('Mlljj') llqq.setTreeWeight('weight') # define histogram binning llqq.setNbins(7) llqq.setObsMin(400) llqq.setObsMax(2500) # apply directory structure llqq.setReleaseDir(releaseDir) llqq.setInputListTag(inputListTag) llqq.setOutputWSTag(outputWSTag) # define channels
run1_input_path_format = '/afs/cern.ch/work/v/vippolit/public/VVJJ/DibjetStatPL_lite/Input/WPRIME/WPRIME_{mass}_measurement_combined_meas_model.root' masses = [3000, 2500, 2000, 1500] dest = '{releaseDir}/{analysis}/data/{inputTag}'.format( releaseDir=releaseDir, analysis=analysis, inputTag=inputTag) poi_setups = { 3000: [60, 0, 30], 2500: [60, 0, 30], 2000: [60, 0, 20], 1500: [75, 0, 20], } getInputFromRunI(run1_input_path_format, masses, dest) # run over them vvjj = RF.VVJJValidationRunner(analysis) vvjj.setReleaseDir(releaseDir) vvjj.setInputListTag(inputTag) vvjj.setOutputWSTag(wsTag) # create a new channel (will automatically add data) vvjj.addChannel('SR', '') # not using selection criteria # loop over signals for mass in masses: thisSig = 'signal_{mass}'.format(mass=mass) vvjj.channel('SR').addSample(thisSig) vvjj.channel('SR').sample(thisSig).setNormByLumi(True) vvjj.channel('SR').sample(thisSig).multiplyBy('mu', 1.0, 0, 300) vvjj.channel('SR').sample(thisSig).addVariation('ptr') vvjj.channel('SR').sample(thisSig).addVariation('pts')
# import histograms from Run-I code # run1_input_path_format = '/afs/cern.ch/user/w/wfisher/work/VHreso/VHlvbb_WPRIME/test00/lvbb_sL00_{mass}.root' #/afs/cern.ch/work/k/kalliopi/public/forValerio/test0/lvbb_{mass}.root' masses = [1000, 1500 ] #dest = createEmptyDirs(releaseDir, analysis, inputTag) poi_setups = { 1000 : [100, 0, 100], 1500 : [100, 0, 100] } # getInputFromRunI(run1_input_path_format, masses, dest) # run over them lvbb = RF.VHlvbbAnalysisRunner(analysis) lvbb.setReleaseDir(releaseDir) lvbb.setInputListTag(inputTag) lvbb.setOutputWSTag(wsTag) # create a new channel (will automatically add data) lvbb.addChannel('J2T2E', '') # not using selection criteria # loop over signals for mass in masses: thisSig = 'WpL{mass}'.format(mass=mass) lvbb.channel('J2T2E').addSample(thisSig) lvbb.channel('J2T2E').sample(thisSig).setNormByLumi(True) lvbb.channel('J2T2E').sample(thisSig).multiplyBy('mu', 1.0, 0, 100) # declare signal mass value
treeLumi = 1.01148 # 1/fb newLumi = 4.0 # 1/fb masses = [3000, 2500, 2000, 1500] poi_setups = { 3000: [60, 0, 30], 2500: [60, 0, 30], 2000: [60, 0, 20], 1500: [75, 0, 20], } createDirectoryStructure(inputdir, releaseDir, analysis, inputListTag, outputWSTag) vvjj = RF.VVJJAnalysisRunner(analysis) vvjj.setTreeObs('x') vvjj.setTreeWeight('weight') vvjj.setLumiRescale(treeLumi, newLumi) vvjj.setNbins(23) vvjj.setObsMin(1200) vvjj.setObsMax(3500) vvjj.setReleaseDir(releaseDir) vvjj.setInputListTag(inputListTag) vvjj.setOutputWSTag(outputWSTag) vvjj.doPull(producePull) if not doExternalPdf: # set up function for up/down shape variations # syntax is the same as RooWorkspace::factory
import ROOT ROOT.gROOT.SetBatch(True) ROOT.gROOT.ProcessLine( ROOT.gSystem.ExpandPathName('.x $ROOTCOREDIR/scripts/load_packages.C')) from ROOT import RF as RF if __name__ == '__main__': releaseDir = './test_v4' analysis = 'VVlvqq_HVT' outputWSTag = 'wtest01' # retrieve results results = RF.StatisticalResultsCollection('lvqqtest') filename = '{releaseDir}/{analysis}/ws/results_{analysis}_{outputWSTag}.root'.format( releaseDir=releaseDir, analysis=analysis, outputWSTag=outputWSTag) results.retrieve(filename) # plot ROOT.gROOT.ProcessLine('.L atlasstyle/AtlasStyle.C+') ROOT.SetAtlasStyle() plotter = RF.Plotter('lvqqtest', '.') plotter.setVarName('m_{HVT}') plotter.setVarUnit('GeV') plotter.setSpec(500, 1.0, 1.765000 * 1.0 * 0.75616 * 1e3) # note the 1000x factor plotter.setSpec(1000, 1.0, 0.098950 * 1.0 * 0.79607 * 1e3) plotter.setSpec(1500, 1.0, 0.016110 * 1.0 * 0.81147 * 1e3) plotter.setSpec(2000, 1.0, 0.003810 * 1.0 * 0.81310 * 1e3)