Skip to content

Commit c2e1240

Browse files
authored
Bin by pixel (#224)
* feat: bin mcstas data into artificial pixel grid after loading * test: fix * fix * refactoring and geometry fixes + adding DetectorBank domain type to select detector bank * fix: search for component matching name * fix * fix: remove cases
1 parent 2b98056 commit c2e1240

File tree

6 files changed

+296
-137
lines changed

6 files changed

+296
-137
lines changed

docs/user-guide/beer/beer_modulation_mcstas.ipynb

Lines changed: 142 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
"metadata": {},
1616
"outputs": [],
1717
"source": [
18+
"%matplotlib ipympl\n",
19+
"import plopp as pp\n",
1820
"import scippneutron as scn\n",
1921
"\n",
2022
"from ess.beer import BeerModMcStasWorkflow, BeerModMcStasWorkflowKnownPeaks\n",
@@ -159,8 +161,11 @@
159161
"outputs": [],
160162
"source": [
161163
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
164+
"wf[DetectorBank] = 2\n",
162165
"wf[Filename[SampleRun]] = mcstas_silicon_medium_resolution()\n",
163-
"wf.compute(RawDetector[SampleRun])['bank1'].hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
166+
"da = wf.compute(RawDetector[SampleRun])\n",
167+
"da.masks.clear()\n",
168+
"da.hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
164169
]
165170
},
166171
{
@@ -179,9 +184,19 @@
179184
"outputs": [],
180185
"source": [
181186
"wf[DHKLList] = silicon_peaks_array()\n",
182-
"da = wf.compute(TofDetector[SampleRun])\n",
183-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
184-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), silicon_peaks_array())"
187+
"wf[Filename[SampleRun]] = mcstas_silicon_medium_resolution()\n",
188+
"\n",
189+
"results = {}\n",
190+
"for bank in (1, 2):\n",
191+
" wf[DetectorBank] = bank\n",
192+
" da = wf.compute(TofDetector[SampleRun])\n",
193+
" results[bank] = (\n",
194+
" da\n",
195+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
196+
" .hist(dspacing=dspacing, dim=da.dims)\n",
197+
" )\n",
198+
"\n",
199+
"ground_truth_peak_positions(pp.plot(results), silicon_peaks_array())"
185200
]
186201
},
187202
{
@@ -201,9 +216,19 @@
201216
"source": [
202217
"wf = BeerModMcStasWorkflow()\n",
203218
"wf[Filename[SampleRun]] = mcstas_silicon_medium_resolution()\n",
204-
"da = wf.compute(TofDetector[SampleRun])\n",
205-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
206-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), silicon_peaks_array())"
219+
"\n",
220+
"results = {}\n",
221+
"for bank in (1, 2):\n",
222+
" wf[DetectorBank] = bank\n",
223+
" da = wf.compute(TofDetector[SampleRun])\n",
224+
" results[bank] = (\n",
225+
" da\n",
226+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
227+
" .hist(dspacing=dspacing, dim=da.dims)\n",
228+
" )\n",
229+
"\n",
230+
"\n",
231+
"ground_truth_peak_positions(pp.plot(results), silicon_peaks_array())"
207232
]
208233
},
209234
{
@@ -223,11 +248,9 @@
223248
"metadata": {},
224249
"outputs": [],
225250
"source": [
226-
"da = da['bank2'].copy()\n",
227251
"da.masks.clear()\n",
228252
"da.bins.masks['too_far_from_center'] = ~da.bins.masks.pop('too_far_from_center')\n",
229-
"\n",
230-
"da.bins.concat().hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
253+
"da.bins.concat().hist(two_theta=400, event_time_offset=400).plot(norm='log', cmin=1.0e-3)"
231254
]
232255
},
233256
{
@@ -254,8 +277,9 @@
254277
"outputs": [],
255278
"source": [
256279
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
280+
"wf[DetectorBank] = 1\n",
257281
"wf[Filename[SampleRun]] = mcstas_duplex(8)\n",
258-
"wf.compute(RawDetector[SampleRun])['bank1'].hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-2)"
282+
"wf.compute(RawDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-2)"
259283
]
260284
},
261285
{
@@ -274,9 +298,18 @@
274298
"outputs": [],
275299
"source": [
276300
"wf[DHKLList] = duplex_peaks_array()\n",
277-
"da = wf.compute(TofDetector[SampleRun])\n",
278-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
279-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
301+
"\n",
302+
"results = {}\n",
303+
"for bank in (1, 2):\n",
304+
" wf[DetectorBank] = bank\n",
305+
" da = wf.compute(TofDetector[SampleRun])\n",
306+
" results[bank] = (\n",
307+
" da\n",
308+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
309+
" .hist(dspacing=dspacing, dim=da.dims)\n",
310+
" )\n",
311+
"\n",
312+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
280313
]
281314
},
282315
{
@@ -296,9 +329,18 @@
296329
"source": [
297330
"wf = BeerModMcStasWorkflow()\n",
298331
"wf[Filename[SampleRun]] = mcstas_duplex(8)\n",
299-
"da = wf.compute(TofDetector[SampleRun])\n",
300-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
301-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
332+
"\n",
333+
"results = {}\n",
334+
"for bank in (1, 2):\n",
335+
" wf[DetectorBank] = bank\n",
336+
" da = wf.compute(TofDetector[SampleRun])\n",
337+
" results[bank] = (\n",
338+
" da\n",
339+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
340+
" .hist(dspacing=dspacing, dim=da.dims)\n",
341+
" )\n",
342+
"\n",
343+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
302344
]
303345
},
304346
{
@@ -318,11 +360,10 @@
318360
"metadata": {},
319361
"outputs": [],
320362
"source": [
321-
"da = da['bank2'].copy()\n",
322363
"da.masks.clear()\n",
323364
"da.bins.masks['too_far_from_center'] = ~da.bins.masks.pop('too_far_from_center')\n",
324365
"\n",
325-
"da.bins.concat().hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
366+
"da.bins.concat().hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
326367
]
327368
},
328369
{
@@ -349,8 +390,9 @@
349390
"outputs": [],
350391
"source": [
351392
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
393+
"wf[DetectorBank] = 1\n",
352394
"wf[Filename[SampleRun]] = mcstas_duplex(9)\n",
353-
"wf.compute(RawDetector[SampleRun])['bank1'].hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
395+
"wf.compute(RawDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
354396
]
355397
},
356398
{
@@ -369,9 +411,18 @@
369411
"outputs": [],
370412
"source": [
371413
"wf[DHKLList] = duplex_peaks_array()\n",
372-
"da = wf.compute(TofDetector[SampleRun])\n",
373-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
374-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
414+
"\n",
415+
"results = {}\n",
416+
"for bank in (1, 2):\n",
417+
" wf[DetectorBank] = bank\n",
418+
" da = wf.compute(TofDetector[SampleRun])\n",
419+
" results[bank] = (\n",
420+
" da\n",
421+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
422+
" .hist(dspacing=dspacing, dim=da.dims)\n",
423+
" )\n",
424+
"\n",
425+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
375426
]
376427
},
377428
{
@@ -391,9 +442,18 @@
391442
"source": [
392443
"wf = BeerModMcStasWorkflow()\n",
393444
"wf[Filename[SampleRun]] = mcstas_duplex(9)\n",
394-
"da = wf.compute(TofDetector[SampleRun])\n",
395-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
396-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
445+
"\n",
446+
"results = {}\n",
447+
"for bank in (1, 2):\n",
448+
" wf[DetectorBank] = bank\n",
449+
" da = wf.compute(TofDetector[SampleRun])\n",
450+
" results[bank] = (\n",
451+
" da\n",
452+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
453+
" .hist(dspacing=dspacing, dim=da.dims)\n",
454+
" )\n",
455+
"\n",
456+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
397457
]
398458
},
399459
{
@@ -413,11 +473,10 @@
413473
"metadata": {},
414474
"outputs": [],
415475
"source": [
416-
"da = da['bank2'].copy()\n",
417476
"da.masks.clear()\n",
418477
"da.bins.masks['too_far_from_center'] = ~da.bins.masks.pop('too_far_from_center')\n",
419478
"\n",
420-
"da.bins.concat().hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
479+
"da.bins.concat().hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
421480
]
422481
},
423482
{
@@ -444,8 +503,9 @@
444503
"outputs": [],
445504
"source": [
446505
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
506+
"wf[DetectorBank] = 1\n",
447507
"wf[Filename[SampleRun]] = mcstas_duplex(10)\n",
448-
"wf.compute(RawDetector[SampleRun])['bank1'].hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
508+
"wf.compute(RawDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
449509
]
450510
},
451511
{
@@ -464,9 +524,18 @@
464524
"outputs": [],
465525
"source": [
466526
"wf[DHKLList] = duplex_peaks_array()\n",
467-
"da = wf.compute(TofDetector[SampleRun])\n",
468-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
469-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
527+
"\n",
528+
"results = {}\n",
529+
"for bank in (1, 2):\n",
530+
" wf[DetectorBank] = bank\n",
531+
" da = wf.compute(TofDetector[SampleRun])\n",
532+
" results[bank] = (\n",
533+
" da\n",
534+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
535+
" .hist(dspacing=dspacing, dim=da.dims)\n",
536+
" )\n",
537+
"\n",
538+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
470539
]
471540
},
472541
{
@@ -486,9 +555,18 @@
486555
"source": [
487556
"wf = BeerModMcStasWorkflow()\n",
488557
"wf[Filename[SampleRun]] = mcstas_duplex(10)\n",
489-
"da = wf.compute(TofDetector[SampleRun])\n",
490-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
491-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
558+
"\n",
559+
"results = {}\n",
560+
"for bank in (1, 2):\n",
561+
" wf[DetectorBank] = bank\n",
562+
" da = wf.compute(TofDetector[SampleRun])\n",
563+
" results[bank] = (\n",
564+
" da\n",
565+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
566+
" .hist(dspacing=dspacing, dim=da.dims)\n",
567+
" )\n",
568+
"\n",
569+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
492570
]
493571
},
494572
{
@@ -508,11 +586,10 @@
508586
"metadata": {},
509587
"outputs": [],
510588
"source": [
511-
"da = da['bank2'].copy()\n",
512589
"da.masks.clear()\n",
513590
"da.bins.masks['too_far_from_center'] = ~da.bins.masks.pop('too_far_from_center')\n",
514591
"\n",
515-
"da.bins.concat().hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
592+
"da.bins.concat().hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
516593
]
517594
},
518595
{
@@ -539,8 +616,9 @@
539616
"outputs": [],
540617
"source": [
541618
"wf = BeerModMcStasWorkflowKnownPeaks()\n",
619+
"wf[DetectorBank] = 1\n",
542620
"wf[Filename[SampleRun]] = mcstas_duplex(16)\n",
543-
"wf.compute(RawDetector[SampleRun])['bank1'].hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
621+
"wf.compute(RawDetector[SampleRun]).hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
544622
]
545623
},
546624
{
@@ -559,9 +637,18 @@
559637
"outputs": [],
560638
"source": [
561639
"wf[DHKLList] = duplex_peaks_array()\n",
562-
"da = wf.compute(TofDetector[SampleRun])\n",
563-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
564-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
640+
"\n",
641+
"results = {}\n",
642+
"for bank in (1, 2):\n",
643+
" wf[DetectorBank] = bank\n",
644+
" da = wf.compute(TofDetector[SampleRun])\n",
645+
" results[bank] = (\n",
646+
" da\n",
647+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
648+
" .hist(dspacing=dspacing, dim=da.dims)\n",
649+
" )\n",
650+
"\n",
651+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
565652
]
566653
},
567654
{
@@ -581,9 +668,18 @@
581668
"source": [
582669
"wf = BeerModMcStasWorkflow()\n",
583670
"wf[Filename[SampleRun]] = mcstas_duplex(16)\n",
584-
"da = wf.compute(TofDetector[SampleRun])\n",
585-
"da = da.transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
586-
"ground_truth_peak_positions(da.hist(dspacing=dspacing, dim=da.dims).plot(), duplex_peaks_array())"
671+
"\n",
672+
"results = {}\n",
673+
"for bank in (1, 2):\n",
674+
" wf[DetectorBank] = bank\n",
675+
" da = wf.compute(TofDetector[SampleRun])\n",
676+
" results[bank] = (\n",
677+
" da\n",
678+
" .transform_coords(('dspacing',), graph=scn.conversion.graph.tof.elastic('tof'),)\n",
679+
" .hist(dspacing=dspacing, dim=da.dims)\n",
680+
" )\n",
681+
"\n",
682+
"ground_truth_peak_positions(pp.plot(results), duplex_peaks_array())"
587683
]
588684
},
589685
{
@@ -603,11 +699,10 @@
603699
"metadata": {},
604700
"outputs": [],
605701
"source": [
606-
"da = da['bank2'].copy()\n",
607702
"da.masks.clear()\n",
608703
"da.bins.masks['too_far_from_center'] = ~da.bins.masks.pop('too_far_from_center')\n",
609704
"\n",
610-
"da.bins.concat().hist(two_theta=1000, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
705+
"da.bins.concat().hist(two_theta=400, event_time_offset=1000).plot(norm='log', cmin=1.0e-3)"
611706
]
612707
}
613708
],
@@ -627,7 +722,7 @@
627722
"name": "python",
628723
"nbconvert_exporter": "python",
629724
"pygments_lexer": "ipython3",
630-
"version": "3.12.7"
725+
"version": "3.11.13"
631726
}
632727
},
633728
"nbformat": 4,

0 commit comments

Comments
 (0)