Skip to content

Commit c4ee9b4

Browse files
authored
Merge pull request #92 from scipp/geant4-load-sumos
Load SUMO coordinate from GEANT4 CSV files
2 parents 266785c + 337f23d commit c4ee9b4

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

src/ess/dream/io/geant4.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def _load_raw_events(file_path: str) -> sc.DataArray:
6969
table = sc.io.load_csv(
7070
file_path, sep="\t", header_parser="bracket", data_columns=[]
7171
)
72+
table.coords['sumo'] = table.coords['det ID']
7273
table.coords.pop("lambda", None)
7374
table = table.rename_dims(row="event")
7475
return sc.DataArray(
@@ -90,10 +91,14 @@ def group(key: str, da: sc.DataArray) -> sc.DataArray:
9091
if key in ["high_resolution", "sans"]:
9192
# Only the HR and SANS detectors have sectors.
9293
res = da.group("sector", *elements)
94+
elif key in ["endcap_backward", "endcap_forward"]:
95+
# Other banks only have a single SUMO.
96+
res = da.group("sumo", *elements)
9397
else:
9498
res = da.group(*elements)
9599
res.coords['position'] = res.bins.coords.pop('position').bins.mean()
96100
res.bins.coords.pop("sector", None)
101+
res.bins.coords.pop("sumo", None)
97102
return res
98103

99104
return {key: sc.DataGroup(events=group(key, da)) for key, da in detectors.items()}

tests/dream/geant4_reduction_test.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,15 @@ def test_workflow_is_deterministic(workflow):
9494

9595
def test_pipeline_can_compute_intermediate_results(workflow):
9696
workflow = powder.with_pixel_mask_filenames(workflow, [])
97-
result = workflow.compute(NormalizedByProtonCharge[SampleRun])
98-
assert set(result.dims) == {'segment', 'wire', 'counter', 'strip', 'module'}
97+
results = workflow.compute((NormalizedByProtonCharge[SampleRun], NeXusDetectorName))
98+
result = results[NormalizedByProtonCharge[SampleRun]]
99+
100+
detector_name = results[NeXusDetectorName]
101+
expected_dims = {'segment', 'wire', 'counter', 'strip', 'module'}
102+
if detector_name in ('endcap_backward', 'endcap_forward'):
103+
expected_dims.add('sumo')
104+
105+
assert set(result.dims) == expected_dims
99106

100107

101108
def test_pipeline_group_by_two_theta(workflow):

tests/dream/io/geant4_test.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ def test_load_geant4_csv_mantle_has_expected_coords(file):
114114
assert_index_coord(mantle.coords["wire"], values=set(range(1, 33)))
115115
assert_index_coord(mantle.coords["strip"], values=set(range(1, 257)))
116116
assert "sector" not in mantle.coords
117+
assert "sumo" not in mantle.coords
117118

118119
assert "sector" not in mantle.bins.coords
119120
assert "tof" in mantle.bins.coords
@@ -127,6 +128,7 @@ def test_load_geant4_csv_endcap_backward_has_expected_coords(file):
127128
assert_index_coord(endcap.coords["counter"])
128129
assert_index_coord(endcap.coords["wire"], values=set(range(1, 17)))
129130
assert_index_coord(endcap.coords["strip"], values=set(range(1, 17)))
131+
assert_index_coord(endcap.coords["sumo"], values=set(range(3, 7)))
130132
assert "sector" not in endcap.coords
131133

132134
assert "sector" not in endcap.bins.coords
@@ -141,6 +143,7 @@ def test_load_geant4_csv_endcap_forward_has_expected_coords(file):
141143
assert_index_coord(endcap.coords["counter"])
142144
assert_index_coord(endcap.coords["wire"], values=set(range(1, 17)))
143145
assert_index_coord(endcap.coords["strip"], values=set(range(1, 17)))
146+
assert_index_coord(endcap.coords["sumo"], values=set(range(3, 7)))
144147
assert "sector" not in endcap.coords
145148

146149
assert "sector" not in endcap.bins.coords
@@ -156,6 +159,7 @@ def test_load_geant4_csv_high_resolution_has_expected_coords(file):
156159
assert_index_coord(hr.coords["wire"], values=set(range(1, 17)))
157160
assert_index_coord(hr.coords["strip"], values=set(range(1, 33)))
158161
assert_index_coord(hr.coords["sector"], values=set(range(1, 5)))
162+
assert "sumo" not in hr.coords
159163

160164
assert "tof" in hr.bins.coords
161165
assert "position" in hr.coords
@@ -172,6 +176,7 @@ def test_load_geant4_csv_sans_has_expected_coords(file):
172176
assert_index_coord(sans.coords["wire"], values=set(range(1, 17)))
173177
assert_index_coord(sans.coords["strip"], values=set(range(1, 33)))
174178
assert_index_coord(sans.coords["sector"], values=set(range(1, 5)))
179+
assert "sumo" not in sans.coords
175180

176181
assert "tof" in sans.bins.coords
177182
assert "position" in sans.coords

0 commit comments

Comments
 (0)