|
20 | 20 | "outputs": [], |
21 | 21 | "source": [ |
22 | 22 | "import scipp as sc\n", |
23 | | - "\n", |
24 | 23 | "from ess import dream, powder\n", |
25 | 24 | "import ess.dream.data # noqa: F401\n", |
26 | 25 | "from ess.powder.types import *" |
|
71 | 70 | "workflow[UncertaintyBroadcastMode] = UncertaintyBroadcastMode.drop\n", |
72 | 71 | "# Edges for binning in d-spacing\n", |
73 | 72 | "workflow[DspacingBins] = sc.linspace(\"dspacing\", 0.0, 2.3434, 201, unit=\"angstrom\")\n", |
74 | | - "# Mask in time-of-flight to crop to valid range\n", |
75 | | - "workflow[TofMask] = lambda x: (x < sc.scalar(0.0, unit=\"ns\")) | (\n", |
76 | | - " x > sc.scalar(86e6, unit=\"ns\")\n", |
77 | | - ")\n", |
| 73 | + "# Empty masks by default\n", |
| 74 | + "workflow[TofMask] = None\n", |
78 | 75 | "workflow[TwoThetaMask] = None\n", |
79 | 76 | "workflow[WavelengthMask] = None\n", |
80 | 77 | "# No pixel masks\n", |
81 | | - "workflow = powder.with_pixel_mask_filenames(workflow, [])" |
| 78 | + "workflow = powder.with_pixel_mask_filenames(workflow, [])\n", |
| 79 | + "# Time-of-flight lookup table\n", |
| 80 | + "workflow[TimeOfFlightLookupTableFilename] = dream.data.tof_lookup_table_high_flux()" |
82 | 81 | ] |
83 | 82 | }, |
84 | 83 | { |
85 | 84 | "cell_type": "markdown", |
86 | 85 | "id": "6", |
87 | 86 | "metadata": {}, |
88 | 87 | "source": [ |
89 | | - "## Use the workflow\n", |
| 88 | + "## Use the reduction workflow\n", |
90 | 89 | "\n", |
91 | 90 | "We can visualize the graph for computing the final normalized result for intensity as a function of time-of-flight:" |
92 | 91 | ] |
|
152 | 151 | "in the documentation of ESSdiffraction.\n", |
153 | 152 | "See https://scipp.github.io/essdiffraction/\n", |
154 | 153 | "\"\"\"\n", |
155 | | - "cif_data.save('reduced.cif')" |
| 154 | + "cif_data.save(\"reduced.cif\")" |
156 | 155 | ] |
157 | 156 | }, |
158 | 157 | { |
|
192 | 191 | "outputs": [], |
193 | 192 | "source": [ |
194 | 193 | "two_theta = sc.linspace(\"two_theta\", 0.8, 2.4, 301, unit=\"rad\")\n", |
195 | | - "intermediates[MaskedData[SampleRun]].hist(two_theta=two_theta, wavelength=300).plot(\n", |
196 | | - " norm=\"log\"\n", |
197 | | - ")" |
| 194 | + "intermediates[MaskedData[SampleRun]].hist(\n", |
| 195 | + " two_theta=two_theta, wavelength=300\n", |
| 196 | + ").plot(norm=\"log\")" |
198 | 197 | ] |
199 | 198 | }, |
200 | 199 | { |
|
216 | 215 | "outputs": [], |
217 | 216 | "source": [ |
218 | 217 | "workflow[TwoThetaBins] = sc.linspace(\n", |
219 | | - " dim=\"two_theta\", unit=\"rad\", start=0.8, stop=2.4, num=17\n", |
| 218 | + " dim=\"two_theta\", unit=\"rad\", start=0.8, stop=2.4, num=201\n", |
220 | 219 | ")" |
221 | 220 | ] |
222 | 221 | }, |
|
237 | 236 | "id": "19", |
238 | 237 | "metadata": {}, |
239 | 238 | "outputs": [], |
240 | | - "source": [ |
241 | | - "angle = sc.midpoints(grouped_dspacing.coords[\"two_theta\"])\n", |
242 | | - "sc.plot(\n", |
243 | | - " {\n", |
244 | | - " f\"{angle[group].value:.3f} {angle[group].unit}\": grouped_dspacing[\n", |
245 | | - " \"two_theta\", group\n", |
246 | | - " ].hist()\n", |
247 | | - " for group in range(2, 6)\n", |
248 | | - " }\n", |
249 | | - ")" |
250 | | - ] |
251 | | - }, |
252 | | - { |
253 | | - "cell_type": "code", |
254 | | - "execution_count": null, |
255 | | - "id": "20", |
256 | | - "metadata": {}, |
257 | | - "outputs": [], |
258 | 239 | "source": [ |
259 | 240 | "grouped_dspacing.hist().plot(norm=\"log\")" |
260 | 241 | ] |
261 | 242 | }, |
262 | 243 | { |
263 | 244 | "cell_type": "markdown", |
264 | | - "id": "21", |
| 245 | + "id": "20", |
265 | 246 | "metadata": {}, |
266 | 247 | "source": [ |
267 | 248 | "## Normalizing by monitor\n", |
|
283 | 264 | { |
284 | 265 | "cell_type": "code", |
285 | 266 | "execution_count": null, |
286 | | - "id": "22", |
| 267 | + "id": "21", |
287 | 268 | "metadata": {}, |
288 | 269 | "outputs": [], |
289 | 270 | "source": [ |
|
292 | 273 | }, |
293 | 274 | { |
294 | 275 | "cell_type": "markdown", |
295 | | - "id": "23", |
| 276 | + "id": "22", |
296 | 277 | "metadata": {}, |
297 | 278 | "source": [ |
298 | 279 | "In addition to the parameters used before, we also need to provide filenames for monitor data and a position of the monitor as that is not saved in the simulation files:" |
|
301 | 282 | { |
302 | 283 | "cell_type": "code", |
303 | 284 | "execution_count": null, |
304 | | - "id": "24", |
| 285 | + "id": "23", |
305 | 286 | "metadata": {}, |
306 | 287 | "outputs": [], |
307 | 288 | "source": [ |
308 | 289 | "workflow[MonitorFilename[SampleRun]] = dream.data.simulated_monitor_diamond_sample()\n", |
309 | 290 | "workflow[MonitorFilename[VanadiumRun]] = dream.data.simulated_monitor_vanadium_sample()\n", |
310 | 291 | "workflow[MonitorFilename[BackgroundRun]] = dream.data.simulated_monitor_empty_can()\n", |
311 | | - "workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit='mm')\n", |
| 292 | + "workflow[CaveMonitorPosition] = sc.vector([0.0, 0.0, -4220.0], unit=\"mm\")\n", |
312 | 293 | "\n", |
313 | 294 | "# These are the same as at the top of the notebook:\n", |
314 | 295 | "workflow[Filename[SampleRun]] = dream.data.simulated_diamond_sample()\n", |
|
318 | 299 | "workflow[NeXusDetectorName] = \"mantle\"\n", |
319 | 300 | "workflow[UncertaintyBroadcastMode] = UncertaintyBroadcastMode.drop\n", |
320 | 301 | "workflow[DspacingBins] = sc.linspace(\"dspacing\", 0.0, 2.3434, 201, unit=\"angstrom\")\n", |
321 | | - "workflow[TofMask] = lambda x: (x < sc.scalar(0.0, unit=\"ns\")) | (\n", |
322 | | - " x > sc.scalar(86e6, unit=\"ns\")\n", |
323 | | - ")\n", |
| 302 | + "workflow[TofMask] = None\n", |
324 | 303 | "workflow[TwoThetaMask] = None\n", |
325 | 304 | "workflow[WavelengthMask] = None\n", |
326 | | - "workflow = powder.with_pixel_mask_filenames(workflow, [])" |
| 305 | + "workflow = powder.with_pixel_mask_filenames(workflow, [])\n", |
| 306 | + "workflow[TimeOfFlightLookupTableFilename] = dream.data.tof_lookup_table_high_flux()" |
327 | 307 | ] |
328 | 308 | }, |
329 | 309 | { |
330 | 310 | "cell_type": "code", |
331 | 311 | "execution_count": null, |
332 | | - "id": "25", |
| 312 | + "id": "24", |
333 | 313 | "metadata": {}, |
334 | 314 | "outputs": [], |
335 | 315 | "source": [ |
|
339 | 319 | { |
340 | 320 | "cell_type": "code", |
341 | 321 | "execution_count": null, |
342 | | - "id": "26", |
| 322 | + "id": "25", |
343 | 323 | "metadata": {}, |
344 | 324 | "outputs": [], |
345 | 325 | "source": [ |
|
352 | 332 | { |
353 | 333 | "cell_type": "code", |
354 | 334 | "execution_count": null, |
355 | | - "id": "27", |
| 335 | + "id": "26", |
356 | 336 | "metadata": {}, |
357 | 337 | "outputs": [], |
358 | 338 | "source": [ |
|
361 | 341 | }, |
362 | 342 | { |
363 | 343 | "cell_type": "markdown", |
364 | | - "id": "28", |
| 344 | + "id": "27", |
365 | 345 | "metadata": {}, |
366 | 346 | "source": [ |
367 | 347 | "Comparing the final, normalized result shows that it agrees with the data that was normalized by proton-charge:" |
|
370 | 350 | { |
371 | 351 | "cell_type": "code", |
372 | 352 | "execution_count": null, |
373 | | - "id": "29", |
| 353 | + "id": "28", |
374 | 354 | "metadata": {}, |
375 | 355 | "outputs": [], |
376 | 356 | "source": [ |
377 | | - "sc.plot({\n", |
378 | | - " 'By proton charge': histogram,\n", |
379 | | - " 'By monitor': normalized_by_monitor.hist()\n", |
380 | | - "})" |
| 357 | + "sc.plot({\"By proton charge\": histogram, \"By monitor\": normalized_by_monitor.hist()})" |
381 | 358 | ] |
382 | 359 | } |
383 | 360 | ], |
|
396 | 373 | "mimetype": "text/x-python", |
397 | 374 | "name": "python", |
398 | 375 | "nbconvert_exporter": "python", |
399 | | - "pygments_lexer": "ipython3", |
400 | | - "version": "3.10.14" |
| 376 | + "pygments_lexer": "ipython3" |
401 | 377 | } |
402 | 378 | }, |
403 | 379 | "nbformat": 4, |
|
0 commit comments