From de67273d300a30396a13598391709fa32d32d27c Mon Sep 17 00:00:00 2001 From: Johannes Kasimir Date: Fri, 20 Oct 2023 09:45:05 +0200 Subject: [PATCH] fix --- src/essreflectometry/amor/load.py | 11 ++++-- src/essreflectometry/amor/resolution.py | 47 ++++++++----------------- 2 files changed, 24 insertions(+), 34 deletions(-) diff --git a/src/essreflectometry/amor/load.py b/src/essreflectometry/amor/load.py index 8363f8c..7479ada 100644 --- a/src/essreflectometry/amor/load.py +++ b/src/essreflectometry/amor/load.py @@ -99,7 +99,7 @@ def load(filename: Filename[Run], beamline: BeamlineParams[Run]) -> Raw[Run]: : Data array object for Amor dataset. """ - filename = get_path("sample.nxs") + filename = get_path(filename) get_logger('amor').info( "Loading '%s' as an Amor NeXus file", filename.filename if hasattr(filename, 'filename') else filename, @@ -128,7 +128,14 @@ def load(filename: Filename[Run], beamline: BeamlineParams[Run]) -> Raw[Run]: # data.attrs['orso'] = sc.scalar(orso) # Perform tof correction and fold two pulses - return Raw[Run](_tof_correction(data)) + data = _tof_correction(data) + + # Ad-hoc correction described in + # https://scipp.github.io/ess/instruments/amor/amor_reduction.html + data.coords['position'].fields.y += data.coords['position'].fields.z * sc.tan( + 2.0 * data.coords['sample_rotation'] - (0.955 * sc.units.deg) + ) + return data def populate_orso(orso: Any, data: sc.DataGroup, filename: str) -> Any: diff --git a/src/essreflectometry/amor/resolution.py b/src/essreflectometry/amor/resolution.py index d663852..31bfaf7 100644 --- a/src/essreflectometry/amor/resolution.py +++ b/src/essreflectometry/amor/resolution.py @@ -2,42 +2,25 @@ # Copyright (c) 2023 Scipp contributors (https://github.com/scipp) import scipp as sc -from ..reflectometry.types import ( - FootprintCorrected, - QData, - QDataWithResolutions, - Resolutions, - Sample, -) +from ..reflectometry.types import QData, QDataWithResolutions, Sample from .tools import fwhm_to_std -def compute_resolution(da: FootprintCorrected[Sample]) -> Resolutions: - return Resolutions( - { - 'wavelength_resolution': wavelength_resolution( - chopper_1_position=da.coords['source_chopper_1'].value['position'], - chopper_2_position=da.coords['source_chopper_2'].value['position'], - pixel_position=da.coords['position'], - ), - 'angular_resolution': angular_resolution( - pixel_position=da.coords['position'], - theta=da.bins.coords['theta'], - detector_spatial_resolution=da.coords['detector_spatial_resolution'], - ), - 'sample_size_resolution': sample_size_resolution( - pixel_position=da.coords['position'], - sample_size=da.coords['sample_size'], - ), - } +def compute_resolution(da: QData[Sample]) -> QDataWithResolutions: + da.coords['wavelength_resolution'] = wavelength_resolution( + chopper_1_position=da.coords['source_chopper_1'].value['position'], + chopper_2_position=da.coords['source_chopper_2'].value['position'], + pixel_position=da.coords['position'], + ) + da.coords['angular_resolution'] = angular_resolution( + pixel_position=da.coords['position'], + theta=da.bins.coords['theta'], + detector_spatial_resolution=da.coords['detector_spatial_resolution'], + ) + da.coords['sample_size_resolution'] = sample_size_resolution( + pixel_position=da.coords['position'], + sample_size=da.coords['sample_size'], ) - - -def add_resolutions( - da: QData[Sample], resolutions: Resolutions -) -> QDataWithResolutions: - for coord, value in resolutions.items(): - da.coords[coord] = value return QDataWithResolutions(da)