Skip to content

Commit a3e9a2e

Browse files
committed
Implement main polarization parsing
RE mantidproject#38524
1 parent a6eeb59 commit a3e9a2e

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

scripts/SANS/sans/user_file/toml_parsers/toml_v1_parser.py

+11
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from sans.state.StateObjects.StateMaskDetectors import get_mask_builder, StateMaskDetectors
1717
from sans.state.StateObjects.StateMoveDetectors import get_move_builder
1818
from sans.state.StateObjects.StateNormalizeToMonitor import get_normalize_to_monitor_builder
19+
from sans.state.StateObjects.StatePolarization import StatePolarization
1920
from sans.state.StateObjects.StateReductionMode import StateReductionMode
2021
from sans.state.StateObjects.StateSave import StateSave
2122
from sans.state.StateObjects.StateScale import StateScale
@@ -73,6 +74,9 @@ def get_state_normalize_to_monitor(self, _):
7374
def get_state_reduction_mode(self):
7475
return self._implementation.reduction_mode
7576

77+
def get_state_polarization(self):
78+
return self._implementation.polarization
79+
7680
def get_state_save(self):
7781
return StateSave()
7882

@@ -112,6 +116,7 @@ def parse_all(self):
112116
self._parse_transmission()
113117
self._parse_transmission_roi()
114118
self._parse_transmission_fitting()
119+
self._parse_polarization()
115120

116121
@property
117122
def instrument(self):
@@ -134,6 +139,7 @@ def _create_state_objs(self, data_info):
134139
self.scale = StateScale()
135140
self.wavelength = StateWavelength()
136141
self.wavelength_and_pixel = get_wavelength_and_pixel_adjustment_builder(data_info=data_info).build()
142+
self.polarization = StatePolarization()
137143

138144
# Ensure they are linked up correctly
139145
self.adjustment.calculate_transmission = self.calculate_transmission
@@ -511,6 +517,11 @@ def _parse_mask(self):
511517
if "stop" in phi_mask:
512518
self.mask.phi_max = phi_mask["stop"]
513519

520+
def _parse_polarization(self):
521+
polarization_dict = self.get_val("polarization")
522+
self.polarization.flipper_configuration = self.get_val("flipper_configuration", polarization_dict)
523+
self.polarization.spin_configuration = self.get_val("spin_configuration", polarization_dict)
524+
514525
@staticmethod
515526
def _get_1d_min_max(one_d_binning: str):
516527
# TODO: We have to do some special parsing for this type on behalf of the sans codebase

scripts/SANS/sans/user_file/toml_parsers/toml_v1_schema.py

+6
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ def _reference_schema():
137137
},
138138
}
139139

140+
polarization_keys = {
141+
"flipper_configuration",
142+
"spin_configuration",
143+
}
144+
140145
return {
141146
"toml_file_version": None,
142147
"binning": binning_keys,
@@ -149,6 +154,7 @@ def _reference_schema():
149154
"q_resolution": q_resolution_keys,
150155
"reduction": reduction_keys,
151156
"transmission": transmission_keys,
157+
"polarization": polarization_keys,
152158
}
153159

154160
@staticmethod

scripts/test/SANS/user_file/toml_parsers/toml_v1_parser_test.py

+10
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
)
2222
from sans.state.StateObjects.StateData import get_data_builder
2323
from sans.state.StateObjects.StateMaskDetectors import StateMaskDetectors, StateMask
24+
from sans.state.StateObjects.StatePolarization import StatePolarization
2425
from sans.test_helper.file_information_mock import SANSFileInformationMock
2526
from sans.user_file.parser_helpers.toml_parser_impl_base import MissingMandatoryParam
2627
from sans.user_file.toml_parsers.toml_v1_parser import TomlV1Parser
@@ -695,6 +696,15 @@ def test_parse_mask(self):
695696
self.assertEqual(102, norm_state.prompt_peak_correction_max)
696697
self.assertTrue(norm_state.prompt_peak_correction_enabled)
697698

699+
def test_parse_polarization(self):
700+
top_level_dict = {"polarization": {"flipper_configuration": "00,11,01,10", "spin_configuration": "-1-1,-1+1,+1-1,+1+1"}}
701+
parser_result = self._setup_parser(top_level_dict)
702+
polarization_state = parser_result.get_state_polarization()
703+
704+
self.assertIsInstance(polarization_state, StatePolarization)
705+
self.assertEqual("00,11,01,10", polarization_state.flipper_configuration)
706+
self.assertEqual("-1-1,-1+1,+1-1,+1+1", polarization_state.spin_configuration)
707+
698708

699709
if __name__ == "__main__":
700710
unittest.main()

0 commit comments

Comments
 (0)