Skip to content

Instantly share code, notes, and snippets.

@thomasaarholt
Created April 20, 2020 08:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thomasaarholt/1098819b9c930a48b3efb48df76a5185 to your computer and use it in GitHub Desktop.
Save thomasaarholt/1098819b9c930a48b3efb48df76a5185 to your computer and use it in GitHub Desktop.
Curve fitting the white lines on zirconium oxide with hyperspy
def fit_Zr_L(sZr, ll=None):
"Returns the model only"
print("Will produce 10 progress bars")
mZr = sZr.create_model(ll = ll, GOS="Hartree-Slater", auto_add_edges=False)
mZr.fit_component(mZr["PowerLaw"], bounded=True, signal_range=[2150.,2210.], fit_independent=True, only_current=True)
mZr.assign_current_values_to_all()
mZr.fit_component(mZr["PowerLaw"], bounded=True, signal_range=[2150.,2210.], fit_independent=True, only_current=False)
#mZr["PowerLaw"].set_parameters_not_free()
Zr_L3 = hs.model.components1D.EELSCLEdge("Zr_L3", GOS="Hartree-Slater")
Zr_L2 = hs.model.components1D.EELSCLEdge("Zr_L2", GOS="Hartree-Slater")
Zr_L3_white = hs.model.components1D.Gaussian()
Zr_L3_white.name = "Zr_L3 White Line"
Zr_L3_white.centre.bmin = 2218.0
Zr_L3_white.centre.bmax = 2240.0
Zr_L3_white.A.bmin = 0
Zr_L3_white.sigma.bmax=3
mZr.append(Zr_L3_white)
mZr.fit_component(Zr_L3_white,fitter="leastsq", signal_range=[Zr_L3_white.centre.bmin-3.0, Zr_L3_white.centre.bmax+3.0], bounded=True,)
mZr.assign_current_values_to_all([Zr_L3_white])
mZr.fit_component(Zr_L3_white,fitter="leastsq", signal_range=[Zr_L3_white.centre.bmin-3.0, Zr_L3_white.centre.bmax+3.0], bounded=True, only_current=False)
mZr.append(Zr_L3)
Zr_L3.onset_energy.twin = Zr_L3_white.centre
mZr.fit_component(Zr_L3, bounded=True, signal_range=[2240., 2290.])
mZr.assign_current_values_to_all([Zr_L3])
mZr.fit_component(Zr_L3, bounded=True, signal_range=[2240., 2290.], only_current=False)
Zr_L2_white = hs.model.components1D.Gaussian()
Zr_L2_white.name = "Zr_L2 White Line"
Zr_L2_white.centre.bmin = 2309.0
Zr_L2_white.centre.bmax = 2317.0
Zr_L2_white.A.bmin = 0
Zr_L2_white.sigma.bmax=3
mZr.append(Zr_L2_white)
mZr.fit_component(Zr_L2_white, signal_range=[Zr_L2_white.centre.bmin-3.0, Zr_L2_white.centre.bmax+3.0], bounded=True,)
mZr.assign_current_values_to_all([Zr_L2_white])
mZr.fit_component(Zr_L2_white, signal_range=[Zr_L2_white.centre.bmin-3.0, Zr_L2_white.centre.bmax+3.0], bounded=True, only_current=False)
mZr.append(Zr_L2)
Zr_L2.onset_energy.twin = Zr_L2_white.centre
mZr.fit_component(Zr_L2, bounded=True, signal_range=[2335., 2392.])
mZr.assign_current_values_to_all([Zr_L2])
mZr.fit_component(Zr_L2, bounded=True, signal_range=[2335., 2392.], only_current=False)
mZr.fit_component(Zr_L2_white, signal_range=[Zr_L2_white.centre.bmin-3.0, Zr_L2_white.centre.bmax+3.0], bounded=True, only_current=False)
mZr.fit_component(Zr_L3, bounded=True, signal_range=[2240., 2290.], only_current=False)
mZr.fit_component(Zr_L3_white, signal_range=[Zr_L3_white.centre.bmin-3.0, Zr_L3_white.centre.bmax+3.0], bounded=True, only_current=False)
mZr.fit_component(Zr_L2, bounded=True, signal_range=[2335., 2392.], only_current=False)
mZr.fit_component(Zr_L2_white, signal_range=[Zr_L2_white.centre.bmin-3.0, Zr_L2_white.centre.bmax+3.0], bounded=True, only_current=False)
print("Finished fitting Zirconium")
return mZr
def fit_O_K(sO, ll=None):
"Returns the model only"
print("Will produce 5 progress bars")
mO = sO.create_model(ll = ll, GOS="Hartree-Slater", auto_add_edges=False)
mO.fit_component(mO["PowerLaw"], bounded=True, fit_independent=True, signal_range=[490.0,520.0], only_current=True)
mO.assign_current_values_to_all()
mO.fit_component(mO["PowerLaw"], bounded=True, fit_independent=True, signal_range=[490.0,520.0], only_current=False)
O_K_white = hs.model.components1D.Gaussian()
O_K_white.name = "O_K White Line"
O_K_white.centre.bmin = 533.0
O_K_white.centre.bmax = 537.0
O_K_white.sigma.bmax = 3
mO.append(O_K_white)
mO.fit_component(O_K_white, bounded="True", signal_range=[532.0,538.0])
mO.assign_current_values_to_all([O_K_white])
mO.fit_component(O_K_white, bounded="True", signal_range=[532.0,538.0], only_current=False)
O_K = hs.model.components1D.EELSCLEdge("O_K", GOS="Hartree-Slater")
mO.append(O_K)
O_K.onset_energy.twin = O_K_white.centre
mO.fit_component(O_K, bounded="True", signal_range=[546.0,600.0])
mO.assign_current_values_to_all([O_K])
mO.fit_component(O_K, bounded="True", signal_range=[546.0,600.0], only_current=False)
mO.fit_component(O_K_white, bounded="True", signal_range=[532.0,539.0], only_current=False)
mO.fit_component(O_K, bounded="True", signal_range=[546.0,600.0], only_current=False)
print("Finished fitting Oxygen")
return mO
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment