def makeAreaFit(): # calculate ares d_s = [1.000, 0.990, 0.990, 1.005, 1.000, 1.005] d_m = [1.700, 1.690, 1.695, 1.700, 1.705, 1.705] d_l = [2.880, 2.880, 2.875, 2.880, 2.880, 2.880] d = map(avgstd, [d_s, d_m, d_l]) a = map(area, d) diaarea = DataErrors() for i in range(3): diaarea.addPoint(d[i][0], a[i][0], d[i][1], a[i][1]) diaarea.saveDataToLaTeX(['Durchmesser $d$ / cm', '$s_d$ / cm', 'Fl\"ache $F / \\text{cm}^2$', '$s_F / \\text{cm}^2$'], ['%.4f', '%.4f', '%.4f', '%.4f'], 'Verschiedene Fl\"achen f\"ur die Samariummessung', 'tab:data:samarium:area', '../src/data_samarium_areas.tex', 'w') with TxtFile('../fit/samarium.txt', 'w') as f: f.writeline('areas') f.writeline('=====') for b in a: f.writeline('\t', '%e' % b[0], TxtFile.PM, '%e' % b[1]) f.writeline() #read data from files #file=[area, area error, path, time] files = [] files.append([a[0][0], a[0][1], '../data/31_Sm_kl_1600_t3000.txt', 3000]) files.append([a[1][0], a[1][1], '../data/34_Sm_m_1600_t2400.txt', 2400]) files.append([a[2][0], a[2][1], '../data/08_Sm_ggrFl_1600-1600-0.txt', 1200]) u = readSingleEntryFile('../data/09_Untergrund_1600-1600-0.txt') tu = 3600 d = DataErrors() for file in files: n = readSingleEntryFile(file[2]) d.addPoint(file[0], n - u, file[1], np.sqrt(n / file[3] + u / tu)) d.saveDataToLaTeX(['Fl\"ache $F / \\text{cm}^2$', '$s_F / \\text{cm}^2$', 'Z\"ahlrate $n / (1/\\text{s})$', '$s_n / (1/\\text{s})$'], ['%.4f', '%.4f', '%.3f', '%.3f'], 'Z\"ahlraten von \\samarium~f\"ur verschiedene Fl\"achen mit Fehlern', 'tab:data:samarium', '../src/data_samarium.tex', 'w') c = TCanvas('c2', '', 800, 600) g = d.makeGraph('g', 'Fl#ddot{a}che F / cm^{2}', 'Z#ddot{a}hlrate n / (1/s)') g.Draw('AP') fit = Fitter('f', '[0]+[1]*x') fit.setParam(0, 'a', 0) fit.setParam(1, 'b', 0.05) fit.fit(g, 0, 30) fit.saveData('../fit/samarium.txt', 'a') a = fit.params[0]['value'] sa = fit.params[0]['error'] b = fit.params[1]['value'] sb = fit.params[1]['error'] l = TLegend(0.55, 0.15, 0.98, 0.5) l.AddEntry('g', '{}^{147} Samarium ohne Untergrund', 'p') # TODO with error bar? (options +'e') l.AddEntry(fit.function, 'Fit mit n(F)=a+b*F', 'l') l.AddEntry(0, '#chi^{2} / DoF : %f' % fit.getChisquareOverDoF(), '') l.AddEntry(0, 'Paramter:', '') l.AddEntry(0, 'a: %e #pm %e' % (a, sa), '') l.AddEntry(0, 'b: %e #pm %e' % (b, sb), '') l.SetTextSize(0.03) l.Draw() c.Update() c.Print('../img/Samarium147-Flaechenabhaengigkeit.pdf', 'pdf') #calculation with fit parameters c = 0.004025 NA = 6.02214129e23 m = 2*150.36 + 3*15.999 h = 0.1487 t = (np.log(2) * c * NA * h) / (2 * m * b) / (3600 * 24 * 365.242) st = t * (sb / b) with TxtFile('../fit/samarium.txt', 'a') as f: f.writeline('calculation from fit') f.writeline('====================') f.writeline('\t', '%e' % t, TxtFile.PM, '%e' % st) f.writeline() # calculation from single data points sc = map(lambda p: calculateHalfLife(*p), d.points) with TxtFile('../fit/samarium.txt', 'a') as f: f.writeline('calculation from single data points') f.writeline('===================================') for s in sc: f.writeline('\t', '%e' % s[0], TxtFile.PM, '%e' % s[1]) f.writeline()
def makeMassFit(): # config files # file = [mass, path] files = [] files.append([2.0123, "../data/11_K_m9_3200_t420.txt", 420]) files.append([2.0123, "../data/11b_K_m9_3200_t420.txt", 420]) files.append([1.9047, "../data/13_K_m8_3200_t420.txt", 420]) files.append([1.6812, "../data/15_K_m7_3200_t420.txt", 420]) files.append([1.4827, "../data/17_K_m6_3200_t420.txt", 420]) files.append([1.2952, "../data/19_K_m5_3200_t480.txt", 480]) files.append([1.0993, "../data/21_K_m4_3200_t480.txt", 480]) files.append([0.8086, "../data/23_K_m3_3200_t540.txt", 540]) files.append([0.6954, "../data/25_K_m2_3200_t540.txt", 540]) files.append([0.5007, "../data/27_K_m1_3200_t660.txt", 660]) files.append([0.3030, "../data/29_K_m0_3200_t780.txt", 780]) u = 0.760 tu = 50 d = DataErrors() for file in files: n = readSingleEntryFile(file[1]) d.addPoint(file[0], n - u, 0.001, np.sqrt(n / file[2] + u / tu)) d.saveDataToLaTeX(['Masse $m /$g', '$s_m /$g', 'Z\"ahlrate $n / (1/\\text{s})$', '$s_n / (1/\\text{s})$'], ['%.3f', '%.3f', '%.3f', '%.3f'], 'Z\"ahlraten von \\kalium\,f\"ur verschiedene Massen mit Fehlern', 'tab:data:kalium', '../src/data_kalium.tex', 'w') c = TCanvas('c2', '', 800, 600) g = d.makeGraph('g', 'Masse m / g', 'Z#ddot{a}hlrate n / (1/s)') g.SetMaximum(6) g.SetMinimum(2) g.Draw('AP') fit = Fitter('f', '[0]*(1-exp(-[1]*x))') fit.setParam(0, 'a') fit.setParam(1, 'b') fit.fit(g, 0.1, 2.5) fit.saveData('../fit/kalium.txt') a = fit.params[0]['value'] sa = fit.params[0]['error'] b = fit.params[1]['value'] sb = fit.params[1]['error'] l = TLegend(0.4, 0.15, 0.85, 0.5) l.AddEntry('g', '{}^{40} Kalium ohne Untergrund', 'p') # TODO with error bar? (options +'e') l.AddEntry(fit.function, 'Fit mit n(m)=a(1-exp(-b*m))', 'l') l.AddEntry(0, '#chi^{2} / DoF : %f' % fit.getChisquareOverDoF(), '') l.AddEntry(0, 'Paramter:', '') l.AddEntry(0, 'a: %e #pm %e' % (a, sa), '') l.AddEntry(0, 'b: %e #pm %e' % (b, sb), '') l.SetTextSize(0.03) l.Draw() NA = 6.02214129e23 hrel = 0.000118 mrel = 39.0983 + 35.45 f = 1.29 rho = fit.getCorrMatrixElem(1, 0) thalf = (np.log(2) * NA * hrel * f) / (1.12 * mrel * 2 * a * b) / (3600 * 24 * 365.242) sthalf = thalf * np.sqrt((sa / a) ** 2 + (sb / b) ** 2 + 2 * rho * (sa / a) * (sb / b)) with TxtFile.fromRelPath('../fit/kalium.txt', 'a') as f: f.writeline() f.writeline('calculations') f.writeline('============') f.writeline('\t', 'half-life of Kalium:', '%e' % thalf, TxtFile.PM, '%e' % sthalf) c.Update() c.Print('../img/Kalium40_Massenabhaengigkeit.pdf')