Esempio n. 1
0
def evalAngles():
    # load data and set errors
    datalist = loadCSVToList('../data/angles.txt')
    l = len(datalist)
    data = DataErrors().fromLists(list(zip(*datalist)[0]), list(zip(*datalist)[1]), ex=[0.5] * l, ey=[0] * l)
    data.setYErrorFunc(lambda x: np.sqrt(x))
    
    #draw graph
    c = TCanvas('c', '', 1280, 720)
    g = data.makeGraph('g', 'Winkel #alpha / #circ', 'Counts N')
    g.SetMarkerStyle(1)
    g.Draw('AP')
    
    #fit function
    fit = Fitter('f', '[0]+gaus(1)')
    fit.function.SetNpx(1000)  # for smoother curve
    fit.setParam(0, 'offset', 35)
    fit.setParam(1, 'ampl', 350)
    fit.setParam(2, 'theta', 180)
    fit.setParam(3, 'sigma', 20)
    fit.fit(g, 80, 280)
    fit.saveData('../calc/angles.txt', 'w')

    fit2 = Fitter('f', '[0]+1/2*[4]*(TMath::Erf(([1]+2*x-2*[2])/(2*sqrt(2)*[3]))+TMath::Erf(([1]-2*x+2*[2])/(2*sqrt(2)*[3])))')
    fit2.function.SetNpx(1000)  # for smoother curve
    fit2.function.SetLineColor(4)
    fit2.setParam(0, 'offset', 20)
    fit2.setParam(1, 'breite', 20)
    fit2.setParam(2, 'theta', 180)
    fit2.setParam(3, 'sigma', 5)
    fit2.setParam(4, 'amplitude', 350)
    fit2.fit(g, 80, 280, '+')
    fit2.saveData('../calc/angles_convolution.txt', 'w')
    
    l = TLegend(0.65, 0.55, 0.85, 0.85)
    l.AddEntry('g', 'Messwerte', 'p')
    l.AddEntry(fit.function, 'Fit mit Gaussverteilung', 'l')
    l.AddEntry(0, '#chi^2 / DoF = %.1f' % fit.getChisquareOverDoF(), '')
    l.AddEntry(0, '#alpha_{0,g} = (%.1f #pm %.1f) #circ' % (fit.params[2]['value'], fit.params[2]['error']), '')
    l.AddEntry(fit2.function, 'Fit mit Faltungsprodukt', 'l')
    l.AddEntry(0, '#chi^2 / DoF = %.1f' % fit2.getChisquareOverDoF(), '')
    l.AddEntry(0, '#alpha_{0,f} = (%.1f #pm %.1f) #circ' % (fit2.params[2]['value'], fit2.params[2]['error']), '')
    l.Draw()
    
    #print to file
    c.Update()
    c.Print('../img/angles.pdf')