|
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