Skip to content

Commit 6631050

Browse files
committed
Adds one more single-fit tutorial for pd-neut-cwl analysis
1 parent d914ce8 commit 6631050

File tree

3 files changed

+3553
-0
lines changed

3 files changed

+3553
-0
lines changed

docs/mkdocs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ nav:
5959
- SingleFit pd-neut-cwl: tutorials/basic_single-fit_pd-neut-cwl_LBCO-HRPT.ipynb
6060
- Advanced Usage:
6161
- SingleFit pd-neut-tof: tutorials/advanced_single-fit_pd-neut-tof_Si-SEPD.ipynb
62+
- SingleFit pd-neut-cwl: tutorials/advanced_single-fit_pd-neut-cwl_HS-HRPT.ipynb
6263
- JointFit pd-neut-xray-cwl: tutorials/advanced_joint-fit_pd-neut-xray-cwl_PbSO4.ipynb
6364
- Pair Distribution Function:
6465
- SingleFit pd-neut-tof: tutorials/pdf_pd-neut-tof_Si-NOMAD.ipynb
Lines changed: 332 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,332 @@
1+
# %% [markdown]
2+
# # Standard diffraction: HS
3+
#
4+
# Standard diffraction analysis of HS after the powder neutron constant wavelength
5+
# diffraction measurement from HRPT at PSI.
6+
7+
# %% [markdown]
8+
# ## Import EasyDiffraction
9+
10+
# %%
11+
from easydiffraction import (
12+
Project,
13+
SampleModel,
14+
Experiment,
15+
download_from_repository
16+
)
17+
18+
# %% [markdown]
19+
# ## Define Sample Model
20+
#
21+
# This section covers how to add sample models and modify their parameters.
22+
#
23+
# ### Create sample model object
24+
25+
# %%
26+
model = SampleModel('hs')
27+
28+
# %% [markdown]
29+
# ### Define space group
30+
31+
# %%
32+
model.space_group.name_h_m = 'R -3 m'
33+
model.space_group.it_coordinate_system_code = 'h'
34+
35+
# %% [markdown]
36+
# ### Define unit cell
37+
38+
# %%
39+
model.cell.length_a = 6.9
40+
model.cell.length_c = 14.1
41+
42+
# %% [markdown]
43+
# ### Define atom sites
44+
45+
# %%
46+
model.atom_sites.add('Zn', 'Zn', 0, 0, 0.5, wyckoff_letter='b', b_iso=0.5)
47+
model.atom_sites.add('Cu', 'Cu', 0.5, 0, 0, wyckoff_letter='e', b_iso=0.5)
48+
model.atom_sites.add('O', 'O', 0.21, -0.21, 0.06, wyckoff_letter='h', b_iso=0.5)
49+
model.atom_sites.add('Cl', 'Cl', 0, 0, 0.197, wyckoff_letter='c', b_iso=0.5)
50+
model.atom_sites.add('H', '2H', 0.13, -0.13, 0.08, wyckoff_letter='h', b_iso=0.5)
51+
52+
# %% [markdown]
53+
# ### Symmetry constraints
54+
#
55+
# Model as CIF before applying symmetry constraints
56+
57+
# %%
58+
model.show_as_cif()
59+
60+
# %% [markdown]
61+
# Apply symmetry constraints
62+
63+
# %%
64+
model.apply_symmetry_constraints()
65+
66+
# Model as CIF after applying symmetry constraints
67+
68+
# %%
69+
model.show_as_cif()
70+
71+
# %% [markdown]
72+
# ## Define Experiment
73+
#
74+
# This section teaches how to add experiments, configure their parameters, and
75+
# link to them the sample models defined in the previous step.
76+
#
77+
# ### Download measured data
78+
79+
# %%
80+
download_from_repository('hrpt_hs.xye',
81+
branch='docs',
82+
destination='data')
83+
84+
# %% [markdown]
85+
# ### Create experiment object
86+
87+
# %%
88+
expt = Experiment(name='hrpt',
89+
data_path='data/hrpt_hs.xye')
90+
91+
# %% [markdown]
92+
# ### Define instrument
93+
94+
# %%
95+
expt.instrument.setup_wavelength = 1.89
96+
expt.instrument.calib_twotheta_offset = 0.0
97+
98+
# %% [markdown]
99+
# ### Define peak profile
100+
101+
# %%
102+
expt.peak.broad_gauss_u = 0.1
103+
expt.peak.broad_gauss_v = -0.2
104+
expt.peak.broad_gauss_w = 0.2
105+
expt.peak.broad_lorentz_x = 0.0
106+
expt.peak.broad_lorentz_y = 0
107+
108+
# %% [markdown]
109+
# ### Define background
110+
111+
# %%
112+
expt.background.add(x=4.4196, y=500)
113+
expt.background.add(x=6.6207, y=500)
114+
expt.background.add(x=10.4918, y=500)
115+
expt.background.add(x=15.4634, y=500)
116+
expt.background.add(x=45.6041, y=500)
117+
expt.background.add(x=74.6844, y=500)
118+
expt.background.add(x=103.4187, y=500)
119+
expt.background.add(x=121.6311, y=500)
120+
expt.background.add(x=159.4116, y=500)
121+
122+
# %% [markdown]
123+
# ### Select linked phase
124+
125+
# %%
126+
expt.linked_phases.add('hs', scale=0.5)
127+
128+
# %% [markdown]
129+
# ## Define Project
130+
#
131+
# The project object is used to manage the sample model, experiments, and
132+
# analysis
133+
#
134+
# ### Create project object
135+
136+
# %%
137+
project = Project()
138+
139+
# %% [markdown]
140+
# ### Configure Plotting Engine
141+
142+
# %%
143+
project.plotter.engine = 'plotly'
144+
145+
# %% [markdown]
146+
# ### Add sample model
147+
148+
# %%
149+
project.sample_models.add(model)
150+
151+
# %% [markdown]
152+
# ### Add experiment
153+
154+
# %%
155+
project.experiments.add(expt)
156+
157+
# %% [markdown]
158+
# ## Analysis
159+
#
160+
# This section will guide you through the analysis process, including setting
161+
# up calculators and fitting models.
162+
#
163+
# ### Set calculation engine
164+
165+
# %%
166+
project.analysis.current_calculator = 'cryspy'
167+
168+
# %% [markdown]
169+
# ### Set fitting engine
170+
171+
# %%
172+
project.analysis.current_minimizer = 'lmfit (leastsq)'
173+
174+
# %% [markdown]
175+
# ### Show measured vs calculated
176+
177+
# %%
178+
project.plot_meas_vs_calc(expt_name='hrpt',
179+
show_residual=True)
180+
project.plot_meas_vs_calc(expt_name='hrpt',
181+
x_min=48, x_max=51,
182+
show_residual=True)
183+
184+
# %% [markdown]
185+
# ### Perform Fit 1/5
186+
#
187+
# Set parameters to be fitted
188+
189+
# %%
190+
model.cell.length_a.free = True
191+
model.cell.length_c.free = True
192+
193+
expt.linked_phases['hs'].scale.free = True
194+
expt.instrument.calib_twotheta_offset.free = True
195+
196+
# %% [markdown]
197+
# Show free parameters after selection
198+
199+
# %%
200+
project.analysis.show_free_params()
201+
202+
# %% [markdown]
203+
# #### Start fitting
204+
205+
# %%
206+
project.analysis.fit()
207+
208+
# %% [markdown]
209+
# #### Show fitting results
210+
211+
# %%
212+
project.plot_meas_vs_calc(expt_name='hrpt',
213+
show_residual=True)
214+
project.plot_meas_vs_calc(expt_name='hrpt',
215+
x_min=48, x_max=51,
216+
show_residual=True)
217+
218+
# %% [markdown]
219+
# ### Perform Fit 2/5
220+
#
221+
# Set parameters to be fitted
222+
223+
# %%
224+
expt.peak.broad_gauss_u.free = True
225+
expt.peak.broad_gauss_v.free = True
226+
expt.peak.broad_gauss_w.free = True
227+
expt.peak.broad_lorentz_x.free = True
228+
229+
for point in expt.background:
230+
point.y.free = True
231+
232+
# %% [markdown]
233+
# Show free parameters after selection
234+
235+
# %%
236+
project.analysis.show_free_params()
237+
238+
# %% [markdown]
239+
# #### Start fitting
240+
241+
# %%
242+
project.analysis.fit()
243+
244+
# %% [markdown]
245+
# #### Show fitting results
246+
247+
# %%
248+
project.plot_meas_vs_calc(expt_name='hrpt',
249+
show_residual=True)
250+
project.plot_meas_vs_calc(expt_name='hrpt',
251+
x_min=48, x_max=51,
252+
show_residual=True)
253+
254+
# %% [markdown]
255+
# ### Perform Fit 3/5
256+
#
257+
# Set parameters to be fitted
258+
259+
# %%
260+
model.atom_sites['O'].fract_x.free = True
261+
model.atom_sites['O'].fract_z.free = True
262+
model.atom_sites['Cl'].fract_z.free = True
263+
model.atom_sites['H'].fract_x.free = True
264+
model.atom_sites['H'].fract_z.free = True
265+
266+
# %% [markdown]
267+
# Show free parameters after selection
268+
269+
# %%
270+
project.analysis.show_free_params()
271+
272+
# %% [markdown]
273+
# #### Start fitting
274+
275+
# %%
276+
project.analysis.fit()
277+
278+
# %% [markdown]
279+
# #### Show fitting results
280+
281+
# %%
282+
project.plot_meas_vs_calc(expt_name='hrpt',
283+
show_residual=True)
284+
project.plot_meas_vs_calc(expt_name='hrpt',
285+
x_min=48, x_max=51,
286+
show_residual=True)
287+
288+
# %% [markdown]
289+
# ### Perform Fit 4/5
290+
#
291+
# Set parameters to be fitted
292+
293+
# %%
294+
model.atom_sites['Zn'].b_iso.free = True
295+
model.atom_sites['Cu'].b_iso.free = True
296+
model.atom_sites['O'].b_iso.free = True
297+
model.atom_sites['Cl'].b_iso.free = True
298+
model.atom_sites['H'].b_iso.free = True
299+
300+
# %% [markdown]
301+
# Show free parameters after selection
302+
303+
# %%
304+
project.analysis.show_free_params()
305+
306+
# %% [markdown]
307+
# #### Start fitting
308+
309+
# %%
310+
project.analysis.fit()
311+
312+
# %% [markdown]
313+
# #### Show fitting results
314+
315+
# %%
316+
project.plot_meas_vs_calc(expt_name='hrpt',
317+
show_residual=True)
318+
project.plot_meas_vs_calc(expt_name='hrpt',
319+
x_min=48, x_max=51,
320+
show_residual=True)
321+
322+
# %% [markdown]
323+
# ## Summary
324+
#
325+
# In this final section, you will learn how to review the results of the
326+
# analysis
327+
328+
# %% [markdown]
329+
# ### Show project summary report
330+
331+
# %%
332+
project.summary.show_report()

0 commit comments

Comments
 (0)