Exemplo n.º 1
0
  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
  ####################################################
Exemplo n.º 4
0
    #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
Exemplo n.º 5
0
    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
Exemplo n.º 7
0
    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)