如何解决在 PyROOT
我一直在尝试使用 pyroot 将一组数据与两个高斯函数的总和拟合,但我所有的尝试都以我不知道如何修复的相同错误结束。
我尝试使用高斯方程的表达式和 ROOT 内部公式(如 {gaus(0)+gaus(3)})定义自定义函数,但两个版本都不起作用。我很确定错误在于我对定义变量函数所需的步骤或在 ROOT's Fit 中实现它的步骤的错误解释。我在网上看到了各种类似的问题,每个人都建议使用 matplotlib 或类似的东西,但我真的很想了解我做错了什么。如果与 ROOT 的预定义 FIt 公式之一一起使用,则代码运行顺畅,因此我认为问题仅存在于我定义的函数中。
另一个问题是关于我在程序中插入 Canvas 的方式:因为我想要一个迭代系列的 Fit 我需要 n 个画布,但我不知道如何迭代生成它们(就像你一样可以看到,我事先定义了它们,然后创建了一个数组,这真是令人不快的查看和编辑)。如果有人有建议,我会很高兴听到他们的建议!
我将复制下面的代码,然后我从程序的特定版本中得到错误,但我不知道如何添加包含数据的文件,所以如果需要数据集,我需要一个关于如何提供它的输入...
import ROOT
import array
import numpy as np
import scipy
n=0.1 #step
xmin=7.9 #minimum
xmax=8.2 #maximum
gr=[] #graph's array
par1=[] #parameter's array
par2=[] #parameter's array
par1er=[] #parameter's error array
par2er=[] #parameter's error array
parameters=([0],[1],[2],[3],[4],[5])
data = np.genfromtxt('CampioneRame.txt',usecols = 1)
x = data[:]
c0=ROOT.TCanvas("c0","Passo 1")
c1=ROOT.TCanvas("c1","Passo 2")
c2=ROOT.TCanvas("c2","Passo 3")
c3=ROOT.TCanvas("c3","Passo 4")
c4=ROOT.TCanvas("c4","Passo 5")
c5=ROOT.TCanvas("c5","Passo 6")
c6=ROOT.TCanvas("c6","Passo 7")
c7=ROOT.TCanvas("c7","Passo 8")
c8=ROOT.TCanvas("c8","Passo 9")
c9=ROOT.TCanvas("c9","Passo 10")
c=[c0,c1,c2,c3,c4,c5,c6,c7,c8,c9] #canvas' array
def DoubleGaussian(x,parameters):
parameters=([0],[5])
fun=[0]*np.exp(-0.5*((x-[1])/[2])**2) + [3]*np.exp(-0.5*((x-[4])/[5])**2)
return fun
for i in range (0,10,1):
gr.append( ROOT.TGraphErrors("CampioneRame.txt" ) ) #Graph from file
gr[i].SetName("gr1")
gr[i].SetMarkerStyle(20)
gr[i].SetMarkerSize(0.4)
gr[i].SetMarkerColor(1)
function=ROOT.TF1("function","DoubleGaussian",xmin-2*(i*n),xmax+2*(i*n))
parameters=([0],[5])
function.SetParameters(15000,1,2,10000,2)
gr[i].Draw("AP")
gr[i].Fit("function","RV","",xmin-i*n,xmax+i*n)
fit = gr[i].GetFunction("function")
#par1.append(fit.GetParameter(2))
#par2.append(fit.GetParameter(5))
#par1er.append(fit.GetParError(2))
#par2er.append(fit.GetParError(5))
print xmin-i*n
print xmax+i*n
gr[i].SetTitle("Profilo dello spot della sorgente di Raggi X")
gr[i].GetXaxis().SetTitle("Pixel")
gr[i].GetXaxis().SetTitleSize(0.045)
gr[i].GetXaxis().SetTitleOffset(0.8)
gr[i].GetXaxis().CenterTitle()
gr[i].GetYaxis().SetTitle("Livelli di grigio")
gr[i].GetYaxis().SetTitleSize(0.045)
gr[i].GetYaxis().SetTitleOffset(0.8)
gr[i].GetYaxis().CenterTitle()
ROOT.gStyle.SetoptFit()
#c.append( ROOT.TCanvas("c"[i],"New Canvas") )
c[i].cd()
fit.Draw()
print "\n Valori Medie"
for i in range (0,1):
print par1[i],par1er[i]
print "\n Valori Sigma"
for i in range (0,1):
print par2[i],par2er[i]
错误:
TFormula::Compile 中的错误:错误的数值表达式: TF1::TF1 中的“DoubleGaussian”错误:函数: 函数/DoubleGaussian 有 0 个参数而不是 1 个未知 功能:功能 7.9 8.2 回溯(最近一次调用最后一次):文件“multifit - copia.py”,第 75 行,在 fit.Draw() ReferenceError: 尝试访问空指针
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。