Ejemplo n.º 1
0
def combine_pth_ggH(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    out_card = 'suppliedInput/{0}_pth_ggH_{1}.txt'.format(
        decay_channel, core.datestr())
    cmd = []
    if args.combWithHbb or args.combination or args.hgg:
        cmd.append('hgg=' + LatestPaths.card.pth_ggH.hgg)
    if args.combWithHbb or args.hbb:
        cmd.append('hbb=' + LatestPaths.card.pth_ggH.hbb)
    if args.combWithHbb or args.combination or args.hzz:
        cmd.append('hzz=' + LatestPaths.card.pth_ggH.hzz)
    combine_cards(out_card, *cmd)
Ejemplo n.º 2
0
def projection_kbkc_t2ws_floatingBRs(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    t2ws = T2WSKBKC()
    t2ws.card = cards.yukawa.s2grouping[decay_channel]
    if args.hgg: t2ws.extra_options.append('--PO isOnlyHgg=True')
    if args.hzz: t2ws.extra_options.append('--PO isOnlyHZZ=True')
    t2ws.add_theory()
    t2ws.apply_reweighting()
    t2ws.add_theory_uncertainties()
    if args.scenario2: t2ws.apply_s2_scaling()
    t2ws.extra_options.append('--PO freely_floating_BRs=True')
    t2ws.tags.append('floatingBRs')
    t2ws.run()
Ejemplo n.º 3
0
def projection_ktcg_t2ws_couplingdependentBRs(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    t2ws = T2WSKTCGKB()
    t2ws.card = cards.ktcgkb.s2grouping[decay_channel]
    if args.hgg: t2ws.extra_options.append('--PO isOnlyHgg=True')
    if args.hzz: t2ws.extra_options.append('--PO isOnlyHZZ=True')
    t2ws.add_theory_ktcg()
    t2ws.apply_reweighting()
    t2ws.add_theory_uncertainties()
    t2ws.add_scaling_ttH()
    if args.scenario2: t2ws.apply_s2_scaling()
    t2ws.extra_options.append('--PO BRs_kappa_dependent=True')
    t2ws.tags.append('couplingdependentBRs')
    t2ws.run()
Ejemplo n.º 4
0
def projection_ktcg_t2ws_floatingBRs(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    t2ws = T2WSKTCGKB()
    t2ws.card = cards.ktcgkb.s2grouping[decay_channel]
    if args.hgg: t2ws.extra_options.append('--PO isOnlyHgg=True')
    if args.hzz: t2ws.extra_options.append('--PO isOnlyHZZ=True')
    t2ws.add_theory_ktcg()
    t2ws.apply_reweighting()
    t2ws.add_theory_uncertainties()
    t2ws.add_scaling_ttH()
    # if args.combWithHbb:
    #     t2ws.constrain_bbZZ_ratio()
    if args.scenario2: t2ws.apply_s2_scaling()
    t2ws.extra_options.append('--PO freely_floating_BRs=True')
    t2ws.tags.append('floatingBRs')
    t2ws.run()
Ejemplo n.º 5
0
 def __init__(self, args):
     super(CombineConfigKBKC, self).__init__(args)
     args = differentialutils.force_asimov(args)
     self.onBatch = True
     self.queue = 'all.q'
     self.asimov = True if args.asimov else False
     self.decay_channel = differentialutils.get_decay_channel_tag(args)
     self.POIs = ['kappab', 'kappac']
     self.PhysicsModelParameters = ['kappab=1.0', 'kappac=1.0']
     self.subDirectory = 'out/Scan_projection_kbkc_{0}_{1}'.format(
         differentials.core.datestr(), self.decay_channel)
     self.hardPhysicsModelParameters.append('lumiscale={0}'.format(
         self.lumiscale))
     self.freezeNuisances.append('lumiscale')
     if args.scenario2: self.tags.append('scenario2')
     self.set_ranges()
     self.datacard = self.get_workspacedict()[self.decay_channel]
Ejemplo n.º 6
0
def basic_config_points(args):
    # assert_highpt(args)
    config = combine.CombineConfig(args)
    config.onBatch = True
    config.queue = 'short.q'
    config.asimov = True if args.asimov else False
    config.decay_channel = differentialutils.get_decay_channel_tag(args)

    if args.combWithHbb or args.hbb:
        config.minimizer_settings.extend([
            '--minimizerStrategy 2',
            '--minimizerTolerance 0.001',
            '--robustFit 1',
            '--minimizerAlgoForMinos Minuit2,Migrad',
        ])

    config.PhysicsModelParameters = ['ct=1.0', 'cg=0.0']
    config.subDirectory = 'out/Scan_{0}_TopPoints_{1}'.format(
        datestr, config.decay_channel)
    return config
Ejemplo n.º 7
0
def base_t2ws(args, apply_theory_uncertainties=True, apply_reweighting=True):
    t2ws = differentials.combine.t2ws.T2WS()

    decay_channel = differentialutils.get_decay_channel_tag(args, allow_default=True)
    t2ws.card = LatestPaths.card.yukawa[decay_channel]
    t2ws.model_file = 'physicsModels/CouplingModel.py'
    t2ws.model_name = 'couplingModel'
    t2ws.name = decay_channel + '_Yukawa'

    t2ws.extra_options.extend([
        '--PO linearTerms=True',
        '--PO splitggH=True',
        ])

    if args.hzz:
        t2ws.extra_options.append('--PO isOnlyHZZ=True' )
    if args.hgg:
        t2ws.extra_options.append('--PO isOnlyHgg=True' )

    obs = LatestBinning.obs_pth_ggH
    obs.drop_bins_up_to_value(yukawa_exp_binning[-1]+1.0)

    t2ws.extra_options.append(
        '--PO binBoundaries={0}'
        .format(','.join([str(b) for b in obs.binning]))
        )

    add_theory(t2ws)

    if apply_reweighting:
        crosssections = obs.crosssection()
        crosssections_str = ','.join([str(v) for v in crosssections])
        t2ws.extra_options.append('--PO SMXS_of_input_ws={0}'.format(crosssections_str))
        t2ws.tags.append('reweighted')
    else:
        t2ws.tags.append('unreweighted')

    if apply_theory_uncertainties:
        add_theory_uncertainties(t2ws)
    return t2ws
def totalXS_scan(args):
    config = totalXS_scan_config(args)

    decay_channel = differentialutils.get_decay_channel_tag(args)
    config.datacard = LatestPaths.ws.totalXS[decay_channel]
    config.tags.append(decay_channel)

    config.make_unique_directory()

    postfit = differentials.combine.combine.CombinePostfit(config)
    postfit.run()
    postfit_file = postfit.get_output()

    # Stat+syst scan (regular)
    scan = differentials.combine.combine.CombineScanFromPostFit(config)
    scan.run(postfit_file)

    # Stat-only scan
    scan_stat_only = differentials.combine.combine.CombineScanFromPostFit(
        config)
    scan_stat_only.subDirectory += '_statonly'
    scan_stat_only.freezeNuisances.append('rgx{.*}')
    scan_stat_only.run(postfit_file)
def projection_pth_smH_scan_GT200(args):
    args = differentialutils.force_asimov(args)
    decay_channel = differentialutils.get_decay_channel_tag(args)

    d = differentials.core.AttrDict()
    d.s1 = differentials.core.AttrDict()
    d.s2 = differentials.core.AttrDict()
    d.s1.hgg = 'projections/workspaces_Oct24/ws_pth_smH_hgg_GT200_s1.root'
    d.s2.hgg = 'projections/workspaces_Oct24/ws_pth_smH_hgg_GT200_s2.root'
    ws = (d.s2 if args.scenario2 else d.s1)[decay_channel]

    config = differential_config(args, ws, 'pth_smH', lumiscale=lumiscale3000)

    def tight_ranges(config):
        """Very manual tight r_ ranges based on Hgg scan results"""
        for POI in config.POIs:
            if 'GT600' in POI:
                config.set_parameter_range(POI, 0.64, 1.4)
            else:
                config.set_parameter_range(POI, 0.875, 1.14)

    if args.hbb:
        set_hbb_parameter_ranges(args, config)
    if args.hgg:
        tight_ranges(config)
    if args.combWithHbb:
        set_hbb_parameter_ranges(args, config)
        tight_ranges(config)

    # Overwrite to do only the scan for 1 POI
    config.POIs = ['r_smH_PTH_GT200']
    config.subDirectory += '_GT200only'

    if args.hbb or args.hzz:
        scan_directly(args, config, verbosity=1)
    else:
        postfit_and_scan(args, config)
Ejemplo n.º 10
0
def basic_config(args, hurry=False):
    config = combine.CombineConfig(args)
    config.onBatch       = True
    config.queue         = 'all.q'
    if hurry:
        logging.warning( 'Running with quick settings' )
        config.nPointsPerJob = 5
        config.queue         = 'short.q'

    if args.hzz:
        config.nPointsPerJob = 320
        config.queue         = 'short.q'

    if args.asimov:
        config.asimov = True
    else:
        config.asimov = False

    config.decay_channel = differentialutils.get_decay_channel_tag(args)

    config.nPoints = 70*70
    kappab_ranges = [ -15., 15. ]
    kappac_ranges = [ -35., 35. ]
    if config.args.lumiScale:
        config.nPoints = 40*40
        kappab_ranges = [ -7., 7. ]
        kappac_ranges = [ -17., 17. ]

    config.POIs = [ 'kappab', 'kappac' ]
    config.PhysicsModelParameters = [ 'kappab=1.0', 'kappac=1.0' ]
    config.PhysicsModelParameterRanges = [
        'kappab={0},{1}'.format( kappab_ranges[0], kappab_ranges[1] ),
        'kappac={0},{1}'.format( kappac_ranges[0], kappac_ranges[1] )
        ]
    config.subDirectory = 'out/Scan_Yukawa_{0}_{1}'.format(datestr, config.decay_channel)
    config.deltaNLLCutOff = 70.
    return config
Ejemplo n.º 11
0
def base_t2ws_fitOnlyTotalXS(args, apply_theory_uncertainties=True, apply_reweighting=False):
    t2ws = differentials.combine.t2ws.T2WS()

    decay_channel = differentialutils.get_decay_channel_tag(args, allow_default=True)
    t2ws.card = LatestPaths.card.inclusive[decay_channel]
    t2ws.model_file = 'physicsModels/CouplingModel.py'
    t2ws.model_name = 'couplingModel'
    t2ws.name = decay_channel + '_Yukawa'

    t2ws.extra_options.extend([
        '--PO linearTerms=True',
        '--PO splitggH=True',
        '--PO FitOnlyTotalXS=True'
        ])

    if args.hzz:
        t2ws.extra_options.append('--PO isOnlyHZZ=True' )
    if args.hgg:
        t2ws.extra_options.append('--PO isOnlyHgg=True' )

    add_theory(t2ws)

    if apply_reweighting:
        logging.warning('Not sure if applying the reweighting is a good thing for the incl.')
        obs = LatestBinning.obs_pth_ggH
        obs.drop_bins_up_to_value(yukawa_exp_binning[-1]+1.0)
        inc_smxs = obs.inclusive_crosssection()
        t2ws.extra_options.append('--PO SMXS_of_input_ws={0}'.format(inc_smxs))
        t2ws.tags.append('reweighted')
    else:
        t2ws.tags.append('unreweighted')

    if apply_theory_uncertainties:
        # 0.0795 based on theory_uncertainty_on_inclusive_xs_yukawa (crosschecks.py)
        t2ws.extra_options.append('--PO inc_xs_uncertainty={0}'.format(0.079528392665))

    return t2ws
Ejemplo n.º 12
0
def scan_topctcb(args):
    config = basic_config_ctcb(args)
    config.datacard = LatestPaths.ws.topctcb.nominal[
        differentialutils.get_decay_channel_tag(args)]
    differentialutils.run_postfit_fastscan_scan(config)
def njets_scan(args):
    ws = LatestPaths.ws.njets[differentialutils.get_decay_channel_tag(args)]
    config = differential_config(args, ws, 'njets')
    postfit_and_scan(args, config)
def differential_config(args, ws, obs_name, lumiscale=1.):
    # base_config = combine.CombineConfig(args)
    base_config = differentials.combine.combine.CombineConfig(args)
    base_config.onBatch = True
    base_config.queue = 'short.q'
    base_config.asimov = True if args.asimov else False

    base_config.decay_channel = differentialutils.get_decay_channel_tag(args)
    if args.hbb or args.combWithHbb:
        base_config.minimizer_settings = [
            '--cminDefaultMinimizerType Minuit2',
            '--cminDefaultMinimizerAlgo migrad',
            '--minimizerStrategy 2',
            '--minimizerTolerance 0.001',
            '--robustFit 1',
            '--minimizerAlgoForMinos Minuit2,Migrad',
        ]

    base_config.datacard = ws
    base_config.subDirectory = 'out/ScanProjection_{0}_{1}_{2}'.format(
        differentials.core.datestr(), obs_name, base_config.decay_channel)

    # Scale lumi
    base_config.freezeNuisances.append('lumiscale')
    base_config.hardPhysicsModelParameters.append(
        'lumiscale={0}'.format(lumiscale))

    if args.hbb or args.combWithHbb:
        # Freeze mcstat nuisances
        logging.info('Freezing mcstat systematics')
        base_config.extraOptions.append('--freezeNuisanceGroups mcstat')

    if lumiscale == 1.:
        base_config.subDirectory += '_36ifb'
    elif lumiscale == lumiscale300:
        base_config.subDirectory += '_300ifb'
    elif lumiscale == lumiscale3000:
        base_config.subDirectory += '_3000ifb'
    elif lumiscale == lumiscale6000:
        base_config.subDirectory += '_6000ifb'

    if args.statonly:
        base_config.subDirectory += '_statonly'
    if args.scenario2:
        base_config.subDirectory += '_scenario2'

    POIs = differentials.core.list_POIs(ws)
    if args.hbb: POIs.pop(0)
    base_config.POIs = POIs
    base_config.PhysicsModelParameters = ['{0}=1.0'.format(p) for p in POIs]

    if args.hbb or args.combWithHbb:
        logging.warning(
            'For hbb: qcdeff and r*p* parameters are given ranges! '
            'Should decide on (freezing) behaviour during postfit/scan')
        base_config.PhysicsModelParameterRanges.extend([
            'qcdeff=0.001,8.0',
            'r1p0=0.1,8.0',
            'r2p0=0.1,8.0',
            'r3p0=0.1,8.0',
            'r0p1=0.1,8.0',
            'r1p1=0.1,8.0',
            'r2p1=0.1,8.0',
            'r3p1=0.1,8.0',
        ])

    base_config.nPoints = 55
    # base_config.nPoints       = 20
    base_config.nPointsPerJob = 5

    if args.hzz or args.hbb:
        base_config.nPoints = 90
        base_config.nPointsPerJob = base_config.nPoints

    if args.combWithHbb:
        base_config.nPointsPerJob = 1

    # Ranges
    default_p3000 = differentials.core.AttrDict()
    default_p3000.hzz = [0.7, 1.3]
    default_p3000.hgg = [0.7, 1.3]
    default_p3000.hbb = [0.3, 1.7]
    default_p3000.combWithHbb = [0.5, 1.5]

    default_ranges = default_p3000
    for POI in POIs:
        ranges = default_ranges[base_config.decay_channel][:]
        if args.hzz and 'GT200' in POI:
            ranges = [0.3, 1.7]
        if (args.hgg) and ('GT600' in POI or '350_600' in POI):
            ranges = [0.4, 1.6]
        # if args.combWithHbb and ('GT600' in POI or '350_600' in POI):
        #     ranges = [ 0.6, 1.4 ]
        base_config.set_parameter_range(POI, ranges[0], ranges[1])

    return base_config
def rapidity_scan(args):
    ws = LatestPaths.ws.rapidity[differentialutils.get_decay_channel_tag(args)]
    config = differential_config(args, ws, 'rapidity')
    postfit_and_scan(args, config)
def differential_config(args, ws, obs_name):
    base_config = combine.CombineConfig(args)
    base_config.onBatch = True
    base_config.nPoints = 55
    base_config.nPointsPerJob = 5
    base_config.queue = 'short.q'

    if args.asimov:
        base_config.asimov = True
    else:
        base_config.asimov = False

    base_config.decay_channel = differentialutils.get_decay_channel_tag(args)
    if args.hzz or args.hbb:
        base_config.nPointsPerJob = base_config.nPoints
    if args.combWithHbb:
        base_config.nPoints = 100
        base_config.nPointsPerJob = 4
    if args.hbb or args.combWithHbb:
        base_config.minimizer_settings = [
            '--cminDefaultMinimizerType Minuit2',
            '--cminDefaultMinimizerAlgo migrad',
            '--minimizerStrategy 2',
            '--minimizerTolerance 0.001',
            '--robustFit 1',
            '--minimizerAlgoForMinos Minuit2,Migrad',
        ]

    base_config.datacard = ws
    base_config.subDirectory = 'out/Scan_{0}_{1}_{2}'.format(
        datestr, obs_name, base_config.decay_channel)
    if args.lumiScale:
        base_config.hardPhysicsModelParameters.append(
            'lumiScale={0}'.format(lumiMultiplier))
        base_config.freezeNuisances.append('lumiScale')
        base_config.subDirectory += '_lumiScale{0}'.format(
            str(lumiMultiplier).replace('.', 'p'))
    if args.statonly:
        base_config.subDirectory += '_statonly'

    POIs = differentials.core.list_POIs(ws)
    POIrange = [-1.0, 4.0]
    if args.hzz:
        POIrange[0] = 0.0
    if args.hbb:
        POIrange = [-10.0, 10.0]
    if args.combWithHbb:
        POIrange = [-1.0, 6.0]
    if args.lumiScale:
        POIrange = [0.7, 1.3]
        base_config.nPoints = 35
        if lumiMultiplier > 10.:
            POIrange = [0.9, 1.1]

    base_config.POIs = POIs
    base_config.PhysicsModelParameters = ['{0}=1.0'.format(p) for p in POIs]

    for POI in POIs:
        left, right = POIrange
        if '350_600' in POI or 'GT600' in POI or 'GT200' in POI:
            left = -10.
            right = 10.
            if base_config.decay_channel == 'hgg':
                left = -15.
        base_config.PhysicsModelParameterRanges.append('{0}={1},{2}'.format(
            POI, left, right))

    if args.hbb or args.combWithHbb:
        logging.warning(
            'For hbb: qcdeff and r*p* parameters are given ranges! '
            'Should decide on (freezing) behaviour during postfit/scan')
        base_config.PhysicsModelParameterRanges.extend([
            'qcdeff=0.001,8.0',
            'r1p0=0.0,8.0',
            'r2p0=0.0,8.0',
            'r3p0=0.0,8.0',
            'r0p1=0.0,8.0',
            'r1p1=0.0,8.0',
            'r2p1=0.0,8.0',
            'r3p1=0.0,8.0',
        ])
    return base_config
def rapidity_t2ws(args):
    t2ws = basic_t2ws('rapidity',
                      differentialutils.get_decay_channel_tag(args))
    t2ws.make_maps_from_processes()
    t2ws.run()
Ejemplo n.º 18
0
def base_t2ws(
    args,
    apply_theory_uncertainties=True,
    apply_reweighting=True,
    drop_last_bin=False,
    do_kappat_kappag=True,
    add_scaling_ttH=False,
):

    decay_channel = differentialutils.get_decay_channel_tag(args)
    t2ws = differentials.combine.t2ws.T2WS()
    t2ws.card = LatestPaths.card.pth_ggH[decay_channel]
    t2ws.model_file = 'physicsModels/CouplingModel.py'
    t2ws.model_name = 'couplingModel'

    if do_kappat_kappag:
        t2ws.name = decay_channel + '_Top'
    else:
        t2ws.name = decay_channel + '_TopCtCb'

    t2ws.extra_options.extend([
        '--PO linearTerms=False',
        '--PO splitggH=True',
    ])

    if args.hzz:
        t2ws.extra_options.append('--PO isOnlyHZZ=True')
    if args.hgg:
        t2ws.extra_options.append('--PO isOnlyHgg=True')

    obs = LatestBinning.obstuple_pth_ggH[decay_channel]
    # if drop_last_bin:
    #     obs.drop_last_bin()
    #     t2ws.tags.append('lastBinDropped')

    t2ws.extra_options.append('--PO binBoundaries={0}'.format(','.join(
        [str(b) for b in obs.binning])))

    # Add the theory

    if do_kappat_kappag:
        logging.warning('Doing variations for kappa_t / kappa_g')
        coupling_variations = FileFinder(
            cb=1.0,
            muR=1.0,
            muF=1.0,
            Q=1.0,
            directory=LatestPaths.theory.top.filedir).get()
        sm = [v for v in coupling_variations if v.ct == 1.0 and v.cg == 0.0][0]
        coupling_variations.pop(coupling_variations.index(sm))

        t2ws.extra_options.append('--PO SM=[ct=1,cg=0,file={0}]'.format(
            sm.theory_file))
        for variation in coupling_variations:
            if variation.ct == 1.0 or variation.cg == 0.0: continue
            t2ws.extra_options.append(
                '--PO theory=[ct={0},cg={1},file={2}]'.format(
                    variation.ct, variation.cg, variation.theory_file))
    else:
        logging.warning('Doing variations for kappa_t / kappa_b')
        coupling_variations = FileFinder(
            cg=0.0,
            muR=1.0,
            muF=1.0,
            Q=1.0,
            directory=LatestPaths.theory.top.filedir).get()
        sm = [v for v in coupling_variations if v.ct == 1.0 and v.cb == 1.0][0]
        coupling_variations.pop(coupling_variations.index(sm))

        t2ws.extra_options.append('--PO SM=[ct=1,cb=1,file={0}]'.format(
            sm.theory_file))
        for variation in coupling_variations:
            if variation.ct == 1.0 or variation.cb == 1.0: continue
            t2ws.extra_options.append(
                '--PO theory=[ct={0},cb={1},file={2}]'.format(
                    variation.ct, variation.cb, variation.theory_file))

    if apply_reweighting:
        t2ws.extra_options.append('--PO SMXS_of_input_ws={0}'.format(','.join(
            [str(v) for v in obs.crosssection()])))
        t2ws.tags.append('reweighted')
    if apply_theory_uncertainties:
        add_theory_uncertainties(t2ws)
    if add_scaling_ttH:
        t2ws.extra_options.append('--PO add_scaling_ttH=True')
        t2ws.tags.append('scalingttH')

    return t2ws
Ejemplo n.º 19
0
def t2ws_TopCtCb_nominal(args):
    t2ws = base_t2ws(args, do_kappat_kappag=False)
    t2ws.card = LatestPaths.card.top.nominal[
        differentialutils.get_decay_channel_tag(args)]
    t2ws.tags.append('noBinsDropped')
    t2ws.run()
Ejemplo n.º 20
0
def projection_ktcg_plot_comparison(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    Patcher = PlotPatcherKTCG_couplingdependentBRs_scenario2 if args.scenario2 else PlotPatcherKTCG_couplingdependentBRs
    Patcher(args, decay_channel).quick_patched_vs_unpatched()
def pth_smH_scan(args):
    ws = LatestPaths.ws.pth_smH[differentialutils.get_decay_channel_tag(args)]
    config = differential_config(args, ws, 'pth_smH')
    postfit_and_scan(args, config)
Ejemplo n.º 22
0
def add_xH_nuisance_parameter_to_ggH_card(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    card = LatestPaths.card.pth_ggH_noXHunc[decay_channel]
    add_xH_nuisance_parameter(card, 24, 20, 43)
Ejemplo n.º 23
0
def create_ktcgkb_projection_datacard(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    input_card = LatestPaths.card.pth_ggH[decay_channel]
    datacard = differentials.combine.preprocessing.Datacard(input_card)
    datacard.add_lumiscale_rateparam()
    datacard.out('projection_ktcgkb_{0}'.format(decay_channel))
Ejemplo n.º 24
0
def print_nuisances(args):
    decay_channel = differentialutils.get_decay_channel_tag(args)
    card = LatestPaths.card.pth_smH[decay_channel]
    datacard = differentials.combine.preprocessing.Datacard(card)
    datacard.print_nuisances()