Skip to content

Commit

Permalink
Implement main polarization parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
cailafinn committed Feb 20, 2025
1 parent 9d66250 commit edb825c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
13 changes: 13 additions & 0 deletions scripts/SANS/sans/user_file/toml_parsers/toml_v1_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from sans.state.StateObjects.StateMaskDetectors import get_mask_builder, StateMaskDetectors
from sans.state.StateObjects.StateMoveDetectors import get_move_builder
from sans.state.StateObjects.StateNormalizeToMonitor import get_normalize_to_monitor_builder
from sans.state.StateObjects.StatePolarization import StatePolarization
from sans.state.StateObjects.StateReductionMode import StateReductionMode
from sans.state.StateObjects.StateSave import StateSave
from sans.state.StateObjects.StateScale import StateScale
Expand Down Expand Up @@ -73,6 +74,9 @@ def get_state_normalize_to_monitor(self, _):
def get_state_reduction_mode(self):
return self._implementation.reduction_mode

def get_state_polarization(self):
return self._implementation.polarization

def get_state_save(self):
return StateSave()

Expand Down Expand Up @@ -112,6 +116,7 @@ def parse_all(self):
self._parse_transmission()
self._parse_transmission_roi()
self._parse_transmission_fitting()
self._parse_polarization()

@property
def instrument(self):
Expand All @@ -134,6 +139,7 @@ def _create_state_objs(self, data_info):
self.scale = StateScale()
self.wavelength = StateWavelength()
self.wavelength_and_pixel = get_wavelength_and_pixel_adjustment_builder(data_info=data_info).build()
self.polarization = StatePolarization()

# Ensure they are linked up correctly
self.adjustment.calculate_transmission = self.calculate_transmission
Expand Down Expand Up @@ -511,6 +517,13 @@ def _parse_mask(self):
if "stop" in phi_mask:
self.mask.phi_max = phi_mask["stop"]

def _parse_polarization(self):
polarization_dict = self.get_val("polarization")
if polarization_dict is None:
return
self.polarization.flipper_configuration = self.get_val("flipper_configuration", polarization_dict)
self.polarization.spin_configuration = self.get_val("spin_configuration", polarization_dict)

@staticmethod
def _get_1d_min_max(one_d_binning: str):
# TODO: We have to do some special parsing for this type on behalf of the sans codebase
Expand Down
6 changes: 6 additions & 0 deletions scripts/SANS/sans/user_file/toml_parsers/toml_v1_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,11 @@ def _reference_schema():
},
}

polarization_keys = {
"flipper_configuration",
"spin_configuration",
}

return {
"toml_file_version": None,
"binning": binning_keys,
Expand All @@ -149,6 +154,7 @@ def _reference_schema():
"q_resolution": q_resolution_keys,
"reduction": reduction_keys,
"transmission": transmission_keys,
"polarization": polarization_keys,
}

@staticmethod
Expand Down
10 changes: 10 additions & 0 deletions scripts/test/SANS/user_file/toml_parsers/toml_v1_parser_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
)
from sans.state.StateObjects.StateData import get_data_builder
from sans.state.StateObjects.StateMaskDetectors import StateMaskDetectors, StateMask
from sans.state.StateObjects.StatePolarization import StatePolarization
from sans.test_helper.file_information_mock import SANSFileInformationMock
from sans.user_file.parser_helpers.toml_parser_impl_base import MissingMandatoryParam
from sans.user_file.toml_parsers.toml_v1_parser import TomlV1Parser
Expand Down Expand Up @@ -695,6 +696,15 @@ def test_parse_mask(self):
self.assertEqual(102, norm_state.prompt_peak_correction_max)
self.assertTrue(norm_state.prompt_peak_correction_enabled)

def test_parse_polarization(self):
top_level_dict = {"polarization": {"flipper_configuration": "00,11,01,10", "spin_configuration": "-1-1,-1+1,+1-1,+1+1"}}
parser_result = self._setup_parser(top_level_dict)
polarization_state = parser_result.get_state_polarization()

self.assertIsInstance(polarization_state, StatePolarization)
self.assertEqual("00,11,01,10", polarization_state.flipper_configuration)
self.assertEqual("-1-1,-1+1,+1-1,+1+1", polarization_state.spin_configuration)


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

0 comments on commit edb825c

Please sign in to comment.