Exorikos
Legacy Member
Ik zou graag een chisqr-plot maken.
Eerst fit ik zonder problemen een spectrum aan de experimentele waarden. Daarna wil ik de twee belangrijke parameters die hieruit komen varieren en voor elke variatie de chisqr berekenen. Hij geeft echter een error met traceback naar een stuk code dat daarvoor volledig werkte: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Hieronder vind je alle relevante stukken uit de code. De traceback gaat naar "if E < centroid:", een boolean die niet ambigu is en waar ik niet onderuit kan.
Hopelijk is het wat duidelijk. Extra info verstrek ik graag.
Eerst fit ik zonder problemen een spectrum aan de experimentele waarden. Daarna wil ik de twee belangrijke parameters die hieruit komen varieren en voor elke variatie de chisqr berekenen. Hij geeft echter een error met traceback naar een stuk code dat daarvoor volledig werkte: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Hieronder vind je alle relevante stukken uit de code. De traceback gaat naar "if E < centroid:", een boolean die niet ambigu is en waar ik niet onderuit kan.
Code:
# Builds spectrum
def spectrum(x,al,centroid,bkg,I,J,HWHM,intensityl,intensityr):
F = states(I,J)
build = zeros(len(x))
for i in F:
E = centroid - energy(i,I,J,al)
if E < centroid:
build+=lorentzian(x,E,HWHM,intensityl)
else:
build+=lorentzian(x,E,HWHM,intensityr)
build+=bkg
return build
# Function that calculates the chi square for the chi square map
def chisquare(x,y,al,centroid,bkg,I,J,hwhm,intensityl,intensityr):
y = array(y)
expected = spectrum(x,al,centroid,bkg,I,J,hwhm,intensityl,intensityr)
chisq = 0
for i in range(len(y)):
chisq+=(y[i]-expected[i])**2/expected[i]
return chisq
# Script voor het chisqr plot
com = linspace(params['centroid'].value-1000,params['centroid'].value+1000,20)
a = linspace(params['al'].value-500,params['centroid'].value+500,10)
COM,A = meshgrid(com,a)
contourf(COM,A,chisquare(x,y,A,COM,params['bkg'].value,I,J,params['HWHM'].value,params['intensityl'].value,params['intensityr'].value))
show()
Hopelijk is het wat duidelijk. Extra info verstrek ik graag.

).
Ik programmeer dit natuurlijk voor mensen in het veld, dat maakt het voor jullie inderdaad lastig.