Skip to content

Commit 3115255

Browse files
committed
Updates NCAF tutorial
1 parent b7e6295 commit 3115255

File tree

2 files changed

+117
-138
lines changed

2 files changed

+117
-138
lines changed

.github/workflows/building-deploying-docs.yml

+1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ jobs:
124124
- name: Build site with MkDocs
125125
run: |
126126
export JUPYTER_PLATFORM_DIRS=1
127+
export PYTHONWARNINGS="ignore::RuntimeWarning"
127128
export PYTHONPATH=$(pwd)/src:$PYTHONPATH
128129
mkdocs build
129130

tutorials/cryst-struct_pd-neut-tof_NCAF-WISH.py

+116-138
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# structure using time-of-flight neutron powder diffraction data from WISH at
66
# ISIS.
77
#
8-
# Temporarily, only a single dataset from detector banks 5 & 6 is used here.
8+
# Two datasets from detector banks 5_6 and 4_7 are used for joint fitting.
99

1010
# %% [markdown]
1111
# ## Import Library
@@ -45,12 +45,12 @@
4545
# ### Set Atom Sites
4646

4747
# %%
48-
model.atom_sites.add('Ca', 'Ca', 0.4661, 0.0, 0.25, wyckoff_letter="b", b_iso=0.9)
49-
model.atom_sites.add('Al', 'Al', 0.25171, 0.25171, 0.25171, wyckoff_letter="a", b_iso=0.66)
50-
model.atom_sites.add('Na', 'Na', 0.08481, 0.08481, 0.08481, wyckoff_letter="a", b_iso=1.9)
51-
model.atom_sites.add('F1', 'F', 0.1375, 0.3053, 0.1195, wyckoff_letter="c", b_iso=0.9)
52-
model.atom_sites.add('F2', 'F', 0.3626, 0.3634, 0.1867, wyckoff_letter="c", b_iso=1.28)
53-
model.atom_sites.add('F3', 'F', 0.4612, 0.4612, 0.4612, wyckoff_letter="a", b_iso=0.79)
48+
model.atom_sites.add('Ca', 'Ca', 0.4665, 0.0, 0.25, wyckoff_letter="b", b_iso=0.92)
49+
model.atom_sites.add('Al', 'Al', 0.2520, 0.2520, 0.2520, wyckoff_letter="a", b_iso=0.73)
50+
model.atom_sites.add('Na', 'Na', 0.0852, 0.0852, 0.0852, wyckoff_letter="a", b_iso=2.08)
51+
model.atom_sites.add('F1', 'F', 0.1376, 0.3055, 0.1196, wyckoff_letter="c", b_iso=0.90)
52+
model.atom_sites.add('F2', 'F', 0.3623, 0.3631, 0.1870, wyckoff_letter="c", b_iso=1.37)
53+
model.atom_sites.add('F3', 'F', 0.4611, 0.4611, 0.4611, wyckoff_letter="a", b_iso=0.88)
5454

5555
# %% [markdown]
5656
# ## Define Experiment
@@ -61,50 +61,71 @@
6161
# ### Download Measured Data
6262

6363
# %%
64-
download_from_repository('wish_ncaf.xye',
64+
download_from_repository('wish_ncaf_5_6.xye',
65+
branch='docs',
66+
destination='data')
67+
68+
# %%
69+
download_from_repository('wish_ncaf_4_7.xye',
6570
branch='docs',
6671
destination='data')
6772

6873
# %% [markdown]
6974
# ### Create Experiment
7075

7176
# %%
72-
expt = Experiment('wish',
73-
beam_mode='time-of-flight',
74-
data_path='data/wish_ncaf.xye')
77+
expt1 = Experiment('wish_5_6',
78+
beam_mode='time-of-flight',
79+
data_path='data/wish_ncaf_5_6.xye')
80+
81+
# %%
82+
expt2 = Experiment('wish_4_7',
83+
beam_mode='time-of-flight',
84+
data_path='data/wish_ncaf_4_7.xye')
7585

7686
# %% [markdown]
7787
# ### Set Instrument
7888

7989
# %%
80-
expt.instrument.setup_twotheta_bank = 152.827
81-
expt.instrument.calib_d_to_tof_offset = 0.0
82-
expt.instrument.calib_d_to_tof_linear = 20770
83-
expt.instrument.calib_d_to_tof_quad = -1.08308
90+
expt1.instrument.setup_twotheta_bank = 152.827
91+
expt1.instrument.calib_d_to_tof_offset = -13.0
92+
expt1.instrument.calib_d_to_tof_linear = 20752.1
93+
expt1.instrument.calib_d_to_tof_quad = -1.08308
94+
95+
# %%
96+
expt2.instrument.setup_twotheta_bank = 121.660
97+
expt2.instrument.calib_d_to_tof_offset = -15.0
98+
expt2.instrument.calib_d_to_tof_linear = 18640.7
99+
expt2.instrument.calib_d_to_tof_quad = -0.47488
84100

85101
# %% [markdown]
86102
# ### Set Peak Profile
87103

88104
# %%
89-
expt.peak_profile_type = 'pseudo-voigt * ikeda-carpenter'
90-
expt.peak.broad_gauss_sigma_0 = 0.0
91-
expt.peak.broad_gauss_sigma_1 = 0.0
92-
expt.peak.broad_gauss_sigma_2 = 5.0
93-
expt.peak.broad_mix_beta_0 = 0.01
94-
expt.peak.broad_mix_beta_1 = 0.01
95-
96-
# %% [markdown]
97-
# ### Set Peak Asymmetry
105+
expt1.peak_profile_type = 'pseudo-voigt * ikeda-carpenter'
106+
expt1.peak.broad_gauss_sigma_0 = 0.0
107+
expt1.peak.broad_gauss_sigma_1 = 0.0
108+
expt1.peak.broad_gauss_sigma_2 = 15.0
109+
expt1.peak.broad_mix_beta_0 = 0.01
110+
expt1.peak.broad_mix_beta_1 = 0.01
111+
expt1.peak.asym_alpha_0 = -0.01
112+
expt1.peak.asym_alpha_1 = 0.10
98113

99114
# %%
100-
expt.peak.asym_alpha_0 = 0.0
101-
expt.peak.asym_alpha_1 = 0.1
115+
expt2.peak_profile_type = 'pseudo-voigt * ikeda-carpenter'
116+
expt2.peak.broad_gauss_sigma_0 = 0.0
117+
expt2.peak.broad_gauss_sigma_1 = 30.0
118+
expt2.peak.broad_gauss_sigma_2 = 20.0
119+
expt2.peak.broad_mix_beta_0 = 0.01
120+
expt2.peak.broad_mix_beta_1 = 0.01
121+
expt2.peak.asym_alpha_0 = -0.01
122+
expt2.peak.asym_alpha_1 = 0.10
102123

103124
# %% [markdown]
104125
# ### Set Background
105126

106127
# %%
107-
expt.background_type = 'line-segment'
128+
expt1.background_type = 'line-segment'
108129
for x, y in [
109130
(9162, 465),
110131
(11136, 593),
@@ -135,13 +156,49 @@
135156
(91958, 268),
136157
(102712, 262)
137158
]:
138-
expt.background.add(x, y)
159+
expt1.background.add(x, y)
160+
161+
# %%
162+
expt2.background_type = 'line-segment'
163+
for x, y in [
164+
(9090, 488),
165+
(10672, 566),
166+
(12287, 494),
167+
(14037, 559),
168+
(15451, 529),
169+
(16764, 445),
170+
(18076, 460),
171+
(19456, 413),
172+
(20466, 511),
173+
(21880, 396),
174+
(23798, 391),
175+
(25447, 385),
176+
(28073, 349),
177+
(30058, 332),
178+
(32583, 309),
179+
(34804, 355),
180+
(37160, 318),
181+
(40324, 290),
182+
(46895, 260),
183+
(50631, 256),
184+
(54602, 246),
185+
(58439, 264),
186+
(66520, 250),
187+
(75002, 258),
188+
(83649, 257),
189+
(92770, 255),
190+
(101524, 260)
191+
]:
192+
expt2.background.add(x, y)
139193

140194
# %% [markdown]
141195
# ### Set Linked Phases
142196

143197
# %%
144-
expt.linked_phases.add('ncaf', scale=0.5)
198+
expt1.linked_phases.add('ncaf', scale=1.0)
199+
200+
# %%
201+
expt2.linked_phases.add('ncaf', scale=2.0)
145202

146203
# %% [markdown]
147204
# ## Define Project
@@ -170,7 +227,8 @@
170227
# ### Add Experiment
171228

172229
# %%
173-
project.experiments.add(expt)
230+
project.experiments.add(expt1)
231+
project.experiments.add(expt2)
174232

175233
# %% [markdown]
176234
# ## Analysis
@@ -190,93 +248,26 @@
190248
project.analysis.current_minimizer = 'lmfit (leastsq)'
191249

192250
# %% [markdown]
193-
# ### Plot Measured vs Calculated
194-
195-
# %%
196-
project.plot_meas_vs_calc(expt_name='wish',
197-
show_residual=True)
251+
# ### Set Fit Mode
198252

199253
# %%
200-
project.plot_meas_vs_calc(expt_name='wish',
201-
x_min=37000, x_max=40000,
202-
show_residual=True)
203-
204-
# %% [markdown]
205-
# ### Perform Fit 1/5
206-
#
207-
# Set parameters to be refined.
208-
209-
# %%
210-
model.cell.length_a.free = True
211-
212-
expt.instrument.calib_d_to_tof_offset.free = True
213-
expt.linked_phases['ncaf'].scale.free = True
214-
215-
# %% [markdown]
216-
# Show free parameters after selection.
217-
218-
# %%
219-
project.analysis.show_free_params()
220-
221-
# %% [markdown]
222-
# #### Run Fit
223-
224-
# %%
225-
project.analysis.fit()
254+
project.analysis.fit_mode = 'joint'
226255

227256
# %% [markdown]
228257
# ### Plot Measured vs Calculated
229258

230259
# %%
231-
project.plot_meas_vs_calc(expt_name='wish',
260+
project.plot_meas_vs_calc(expt_name='wish_5_6',
232261
show_residual=True)
233262

234263
# %%
235-
project.plot_meas_vs_calc(expt_name='wish',
236-
x_min=37000, x_max=40000,
264+
project.plot_meas_vs_calc(expt_name='wish_4_7',
237265
show_residual=True)
238266

239267
# %% [markdown]
240-
# ### Perform Fit 2/5
268+
# ### Perform Fit
241269
#
242-
# Set more parameters to be refined.
243-
244-
# %%
245-
expt.peak.broad_gauss_sigma_2.free = True
246-
expt.peak.broad_mix_beta_0.free = True
247-
expt.peak.broad_mix_beta_1.free = True
248-
expt.peak.asym_alpha_0.free = True
249-
expt.peak.asym_alpha_1.free = True
250-
251-
# %% [markdown]
252-
# Show free parameters after selection.
253-
254-
# %%
255-
project.analysis.show_free_params()
256-
257-
# %% [markdown]
258-
# #### Run Fit
259-
260-
# %%
261-
project.analysis.fit()
262-
263-
# %% [markdown]
264-
# #### Plot Measured vs Calculated
265-
266-
# %%
267-
project.plot_meas_vs_calc(expt_name='wish',
268-
show_residual=True)
269-
270-
# %%
271-
project.plot_meas_vs_calc(expt_name='wish',
272-
x_min=37000, x_max=40000,
273-
show_residual=True)
274-
275-
276-
# %% [markdown]
277-
# ### Perform Fit 3/5
278-
#
279-
# Set more parameters to be refined.
270+
# Set parameters to be refined.
280271

281272
# %%
282273
model.atom_sites['Ca'].fract_x.free = True
@@ -290,45 +281,33 @@
290281
model.atom_sites['F2'].fract_z.free = True
291282
model.atom_sites['F3'].fract_x.free = True
292283

293-
# %% [markdown]
294-
# Show free parameters after selection.
295-
296-
# %%
297-
project.analysis.show_free_params()
298-
299-
# %% [markdown]
300-
# #### Run Fit
301-
302-
# %%
303-
project.analysis.fit()
304-
305-
# %% [markdown]
306-
# #### Plot Measured vs Calculated
307-
308-
# %%
309-
project.plot_meas_vs_calc(expt_name='wish',
310-
show_residual=True)
311-
312-
# %%
313-
project.plot_meas_vs_calc(expt_name='wish',
314-
x_min=37000, x_max=40000,
315-
show_residual=True)
316-
317-
# %% [markdown]
318-
# ### Perform Fit 4/5
319-
#
320-
# Set more parameters to be refined.
321-
322-
# %%
323-
expt.instrument.calib_d_to_tof_linear.free = True
324-
325284
model.atom_sites['Ca'].b_iso.free = True
326285
model.atom_sites['Al'].b_iso.free = True
327286
model.atom_sites['Na'].b_iso.free = True
328287
model.atom_sites['F1'].b_iso.free = True
329288
model.atom_sites['F2'].b_iso.free = True
330289
model.atom_sites['F3'].b_iso.free = True
331290

291+
# %%
292+
expt1.linked_phases['ncaf'].scale.free = True
293+
expt1.instrument.calib_d_to_tof_offset.free = True
294+
expt1.instrument.calib_d_to_tof_linear.free = True
295+
expt1.peak.broad_gauss_sigma_2.free = True
296+
expt1.peak.broad_mix_beta_0.free = True
297+
expt1.peak.broad_mix_beta_1.free = True
298+
expt1.peak.asym_alpha_0.free = True
299+
expt1.peak.asym_alpha_1.free = True
300+
301+
expt2.linked_phases['ncaf'].scale.free = True
302+
expt2.instrument.calib_d_to_tof_linear.free = True
303+
expt2.instrument.calib_d_to_tof_offset.free = True
304+
expt2.peak.broad_gauss_sigma_1.free = True
305+
expt2.peak.broad_gauss_sigma_2.free = True
306+
expt2.peak.broad_mix_beta_0.free = True
307+
expt2.peak.broad_mix_beta_1.free = True
308+
expt2.peak.asym_alpha_0.free = True
309+
expt2.peak.asym_alpha_1.free = True
310+
332311
# %% [markdown]
333312
# Show free parameters after selection.
334313

@@ -345,12 +324,11 @@
345324
# #### Plot Measured vs Calculated
346325

347326
# %%
348-
project.plot_meas_vs_calc(expt_name='wish',
327+
project.plot_meas_vs_calc(expt_name='wish_5_6',
349328
show_residual=True)
350329

351330
# %%
352-
project.plot_meas_vs_calc(expt_name='wish',
353-
x_min=37000, x_max=40000,
331+
project.plot_meas_vs_calc(expt_name='wish_4_7',
354332
show_residual=True)
355333

356334
# %% [markdown]

0 commit comments

Comments
 (0)