Пример #1
0
def BuildScan(scan, param, files, color, yvals, ycut):
    graph = read(scan, param, files, ycut)
    if graph.GetN() <= 1:
        graph.Print()
        raise RuntimeError(
            'Attempting to build %s scan from TGraph with zero or one point (see above)'
            % files)
    bestfit = None
    for i in xrange(graph.GetN()):
        if graph.GetY()[i] == 0.:
            bestfit = graph.GetX()[i]
    graph.SetMarkerColor(color)
    spline = ROOT.TSpline3("spline3", graph)
    global NAMECOUNTER
    func = ROOT.TF1('splinefn' + str(NAMECOUNTER), partial(Eval, spline),
                    graph.GetX()[0],
                    graph.GetX()[graph.GetN() - 1], 1)
    NAMECOUNTER += 1
    func.SetLineColor(color)
    func.SetLineWidth(3)
    assert (bestfit is not None)
    crossings = {}
    cross_1sig = None
    cross_2sig = None
    other_1sig = []
    other_2sig = []
    val = None
    val_2sig = None
    for yval in yvals:
        crossings[yval] = plot.FindCrossingsWithSpline(graph, func, yval)
        for cr in crossings[yval]:
            cr["contains_bf"] = cr["lo"] <= bestfit and cr["hi"] >= bestfit
    for cr in crossings[yvals[0]]:
        if cr['contains_bf']:
            val = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
            cross_1sig = cr
        else:
            other_1sig.append(cr)
    if len(yvals) > 1:
        for cr in crossings[yvals[1]]:
            if cr['contains_bf']:
                val_2sig = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
                cross_2sig = cr
            else:
                other_2sig.append(cr)
    else:
        val_2sig = (0., 0., 0.)
        cross_2sig = cross_1sig
    return {
        "graph": graph,
        "spline": spline,
        "func": func,
        "crossings": crossings,
        "val": val,
        "val_2sig": val_2sig,
        "cross_1sig": cross_1sig,
        "cross_2sig": cross_2sig,
        "other_1sig": other_1sig,
        "other_2sig": other_2sig
    }
Пример #2
0
def BuildScan(scan, param, files, color, yvals, chop, remove_near_min = None, rezero = False, envelope = False, pregraph = None, remove_delta = None, improve = False):
    if pregraph is None:
        graph = read(scan, param, files, chop, remove_near_min, rezero, remove_delta, improve)
    else:
        graph = pregraph
    bestfit = None
    for i in xrange(graph.GetN()):
        if graph.GetY()[i] == 0.:
            bestfit = graph.GetX()[i]
    if envelope: plot.RemoveGraphYAll(graph, 0.)
    graph.SetMarkerColor(color)
    spline = ROOT.TSpline3("spline3", graph)
    global NAMECOUNTER
    func = ROOT.TF1('splinefn'+str(NAMECOUNTER), partial(Eval, spline), graph.GetX()[0], graph.GetX()[graph.GetN() - 1], 1)
    NAMECOUNTER += 1
    func.SetLineColor(color)
    func.SetLineWidth(3)
    assert(bestfit is not None)
    if not envelope: plot.ImproveMinimum(graph, func)
    crossings = {}
    cross_1sig = None
    cross_2sig = None
    other_1sig = []
    other_2sig = []
    val = None
    val_2sig = None
    for yval in yvals:
        crossings[yval] = plot.FindCrossingsWithSpline(graph, func, yval)
        for cr in crossings[yval]:
            cr["contains_bf"] = cr["lo"] <= bestfit and cr["hi"] >= bestfit
    for cr in crossings[yvals[0]]:
        if cr['contains_bf']:
            val = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
            cross_1sig = cr
        else:
            other_1sig.append(cr)
    if len(yvals) > 1:
        for cr in crossings[yvals[1]]:
            if cr['contains_bf']:
                val_2sig = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
                cross_2sig = cr
            else:
                other_2sig.append(cr)
    else:
        val_2sig = (0., 0., 0.)
        cross_2sig = cross_1sig
    return {
        "graph"     : graph,
        "spline"    : spline,
        "func"      : func,
        "crossings" : crossings,
        "val"       : val,
        "val_2sig": val_2sig,
        "cross_1sig" : cross_1sig,
        "cross_2sig" : cross_2sig,
        "other_1sig" : other_1sig,
        "other_2sig" : other_2sig
    }
Пример #3
0
def BuildScan(scan, param, files, color, yvals, ycut):
    graph = read(scan, param, files, ycut)
    bestfit = None
    for i in xrange(graph.GetN()):
        if graph.GetY()[i] == 0.:
            bestfit = graph.GetX()[i]
    graph.SetMarkerColor(color)
    spline = ROOT.TSpline3("spline3", graph)
    global NAMECOUNTER
    func = ROOT.TF1(
        'splinefn' + str(NAMECOUNTER), partial(Eval, spline),
        graph.GetX()[0],
        graph.GetX()[graph.GetN() - 1], 1
    )  #graph.GetX()[0] to graph.GetX()[graph.GetN() - 1] KELLO, change boundaries in case of sharp peaks
    NAMECOUNTER += 1
    func.SetLineColor(color)
    func.SetLineWidth(3)
    #assert(bestfit is not None) #KELLO disabled for H0M
    crossings = {}
    cross_1sig = None
    cross_2sig = None
    other_1sig = []
    other_2sig = []
    val = None
    val_2sig = None
    for yval in yvals:
        crossings[yval] = plot.FindCrossingsWithSpline(graph, func, yval)
        for cr in crossings[yval]:
            cr["contains_bf"] = cr["lo"] <= bestfit and cr["hi"] >= bestfit
    for cr in crossings[yvals[0]]:
        if cr['contains_bf']:
            val = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
            cross_1sig = cr
        else:
            other_1sig.append(cr)
    if len(yvals) > 1:
        for cr in crossings[yvals[1]]:
            if cr['contains_bf']:
                val_2sig = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
                cross_2sig = cr
            else:
                other_2sig.append(cr)
    else:
        val_2sig = (0., 0., 0.)
        cross_2sig = cross_1sig
    return {
        "graph": graph,
        "spline": spline,
        "func": func,
        "crossings": crossings,
        "val": val,
        "val_2sig": val_2sig,
        "cross_1sig": cross_1sig,
        "cross_2sig": cross_2sig,
        "other_1sig": other_1sig,
        "other_2sig": other_2sig
    }
Пример #4
0
def BuildScan(scan, param, files, color, linestyle, yvals, ycut):
    graph = read(scan, param, files, ycut)
    bestfit = None
    for i in xrange(graph.GetN()):
        print(i, " X vs Y ", graph.GetX()[i], graph.GetY()[i])
        if (graph.GetY()[i] < 1e-5 and graph.GetY()[i] > -1e-5):
            bestfit = graph.GetX()[i]
    print("bestfit: ", bestfit)
    graph.SetMarkerColor(color)
    spline = ROOT.TSpline3("spline3", graph)
    global NAMECOUNTER
    func = ROOT.TF1('splinefn'+str(NAMECOUNTER), partial(Eval, spline), graph.GetX()[0], graph.GetX()[graph.GetN() - 1], 1)
    NAMECOUNTER += 1
    func.SetLineColor(color)
    func.SetLineWidth(3)
    func.SetLineStyle(linestyle)
    assert(bestfit is not None)
    crossings = {}
    cross_1sig = None
    cross_2sig = None
    other_1sig = []
    other_2sig = []
    val = None
    val_2sig = None
    for yval in yvals:
        crossings[yval] = plot.FindCrossingsWithSpline(graph, func, yval)
        for cr in crossings[yval]:
            cr["contains_bf"] = cr["lo"] <= bestfit and cr["hi"] >= bestfit
    for cr in crossings[yvals[0]]:
        if cr['contains_bf']:
            val = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
            cross_1sig = cr
        else:
            other_1sig.append(cr)
    if len(yvals) > 1:
        for cr in crossings[yvals[1]]:
            if cr['contains_bf']:
                val_2sig = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
                cross_2sig = cr
            else:
                other_2sig.append(cr)
    else:
        val_2sig = (0., 0., 0.)
        cross_2sig = cross_1sig
    return {
        "graph": graph,
        "spline": spline,
        "func": func,
        "crossings": crossings,
        "val": val,
        "val_2sig": val_2sig,
        "cross_1sig": cross_1sig,
        "cross_2sig": cross_2sig,
        "other_1sig": other_1sig,
        "other_2sig": other_2sig
    }
Пример #5
0
def BuildScan(scan,
              param,
              files,
              color,
              yvals,
              chop,
              remove_near_min=None,
              rezero=False,
              envelope=False,
              pregraph=None,
              remove_delta=None,
              improve=False):
    print "Build scan files:", files
    if pregraph is None:
        print "pregraph is none"
        remove_dups = not envelope
        graph = read(scan, param, files, chop, remove_near_min, rezero,
                     remove_delta, improve, remove_dups)
        print "Graph1:"
        print graph.Print()
        print chop
        plot.RemoveGraphYAbove(graph, chop)
        #plot.SetMinToZero(graph)
        print "Graph2:"
        print graph.Print()

    else:
        print "pregraph is NOT none"
        graph = pregraph
    bestfit = None
    #print "Graph:"
    #print graph.Print()
    min_i = -1
    min_val = 999
    for i in xrange(graph.GetN()):
        print i, graph.GetY()[i]
        #if i == 10 : graph.SetPoint(i, graph.GetX()[i], 0.) # FIXME
        if graph.GetY()[i] < min_val:
            min_val = graph.GetY()[i]
            min_i = i
        #if graph.GetY()[i] == 0.:
        #    bestfit = graph.GetX()[i]
    bestfit = graph.GetX()[min_i]
    if envelope:
        plot.RemoveGraphYAll(graph, 0.)

    global NAMECOUNTER
    print "NAMECOUNTER:", NAMECOUNTER
    ## for 1 lines + obs
    #colorMap = {
    #0 : ROOT.kBlack,
    #1 : ROOT.kRed}
    # for 2 lines + obs
    #colorMap = {
    #0 : ROOT.kBlack,
    #1 : ROOT.kGreen+1,
    #2 : ROOT.kRed}
    ## for 3 lines + obs
    colorMap = {
        0: ROOT.kBlack,
        2: ROOT.kBlue,
        3: ROOT.kRed,
        1: ROOT.kGreen + 1
    }

    #graph.SetMarkerColor(color)
    graph.SetMarkerColor(colorMap[NAMECOUNTER])
    spline = ROOT.TSpline3("spline3", graph)
    func = ROOT.TF1('splinefn' + str(NAMECOUNTER), partial(Eval, spline),
                    graph.GetX()[0],
                    graph.GetX()[graph.GetN() - 1], 1)
    func.SetNpx(NPX)

    #func.SetLineColor(color)
    func.SetLineColor(colorMap[NAMECOUNTER])
    NAMECOUNTER += 1
    func.SetLineWidth(3)
    assert (bestfit is not None)
    ##if not envelope:
    ##    plot.ImproveMinimum(graph, func)
    crossings = {}
    cross_1sig = None
    cross_2sig = None
    other_1sig = []
    other_2sig = []
    val = None
    val_2sig = None
    for yval in yvals:
        crossings[yval] = plot.FindCrossingsWithSpline(graph, func, yval)
        for cr in crossings[yval]:
            cr["contains_bf"] = cr["lo"] <= bestfit and cr["hi"] >= bestfit
    for cr in crossings[yvals[0]]:
        if cr['contains_bf']:
            val = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
            cross_1sig = cr
        else:
            other_1sig.append(cr)
    if len(yvals) > 1:
        for cr in crossings[yvals[1]]:
            if cr['contains_bf']:
                val_2sig = (bestfit, cr['hi'] - bestfit, cr['lo'] - bestfit)
                cross_2sig = cr
            else:
                other_2sig.append(cr)
    else:
        val_2sig = (0., 0., 0.)
        cross_2sig = cross_1sig
    return {
        "graph": graph,
        "spline": spline,
        "func": func,
        "crossings": crossings,
        "val": val,
        "val_2sig": val_2sig,
        "cross_1sig": cross_1sig,
        "cross_2sig": cross_2sig,
        "other_1sig": other_1sig,
        "other_2sig": other_2sig
    }
Пример #6
0
        scan = scans[-1]
        scan.BuildSpline()
        if len(splitargs) > 2:
            scan.graph_settings.update(ParseDictArgs(splitargs[2]))
        if len(splitargs) > 3:
            scan.func_settings.update(ParseDictArgs(splitargs[3]))

# Inject info about NLL crossings
for i, scan in enumerate(scans):
    # print 'Found %i envelope scans' % len(envelope_scans)
    ## Info extraction should come later, and be customisable
    scan_info = {}
    scan_info["Intervals"] = {}
    for j, crossing in enumerate(crossings_vals):
        scan_info["Intervals"][crossing_labels[j]] = []
        intervals = plotting.FindCrossingsWithSpline(scan.gr, scan.fn,
                                                     crossing)
        for interval in intervals:
            sub_info = scan_info["Intervals"][crossing_labels[j]].append({
                "Lo":
                interval['lo'],
                "Hi":
                interval['hi'],
                "ValidLo":
                interval['valid_lo'],
                "ValidHi":
                interval['valid_hi'],
            })
        info[scan.label].update(scan_info)
    scanner.AddMinima(scan_info=info[scan.label], scan=scan)
    scanner.AddUnc(info[scan.label])