微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 PyROOT

如何解决在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?