From 63e1c6fd7761a7c0dbcaad21f599caf70d26fd31 Mon Sep 17 00:00:00 2001 From: Cammille Carinan <cammille.carinan@xfel.eu> Date: Wed, 26 May 2021 09:33:20 +0200 Subject: [PATCH] Refactor packaging --- doc/getting_started.rst | 4 +- setup.py | 21 ++-- src/toolbox_scs/__init__.py | 53 ++++------ src/toolbox_scs/constants.py | 5 + src/toolbox_scs/detectors/__init__.py | 97 ++++--------------- .../detectors/azimuthal_integrator.py | 5 + src/toolbox_scs/detectors/bam_detectors.py | 3 + src/toolbox_scs/detectors/digitizers.py | 8 ++ src/toolbox_scs/detectors/dssc.py | 5 +- src/toolbox_scs/detectors/dssc_data.py | 7 ++ src/toolbox_scs/detectors/dssc_misc.py | 8 ++ src/toolbox_scs/detectors/dssc_processing.py | 4 + src/toolbox_scs/detectors/fccd.py | 3 +- src/toolbox_scs/detectors/pes.py | 6 ++ src/toolbox_scs/detectors/xgm.py | 5 + src/toolbox_scs/load.py | 7 ++ src/toolbox_scs/misc/__init__.py | 28 ++---- src/toolbox_scs/misc/bunch_pattern.py | 6 ++ .../misc/bunch_pattern_external.py | 7 ++ src/toolbox_scs/misc/laser_utils.py | 6 ++ src/toolbox_scs/mnemonics_machinery.py | 4 + src/toolbox_scs/routines/XAS.py | 5 + src/toolbox_scs/routines/__init__.py | 33 ++----- src/toolbox_scs/routines/knife_edge.py | 4 + 24 files changed, 161 insertions(+), 173 deletions(-) diff --git a/doc/getting_started.rst b/doc/getting_started.rst index 05e2d9f..f90b9d6 100644 --- a/doc/getting_started.rst +++ b/doc/getting_started.rst @@ -15,10 +15,10 @@ If the toolbox has been installed in your home directory previously, everything .. code:: bash - pip install --user . + pip install --user ".[maxwell]" Alternatively, use the -e flag for installation to install the package in development mode. .. code:: bash - pip install --user -e . + pip install --user -e ".[maxwell]" diff --git a/setup.py b/setup.py index 9076e91..fc1c33f 100644 --- a/setup.py +++ b/setup.py @@ -8,6 +8,13 @@ with open('VERSION') as f: _version = _version.strip("\n") +basic_analysis_reqs = ['numpy', 'scipy',] # and is readily available in Karabo +advanced_analysis_reqs = [ + 'pandas', 'imageio', 'xarray>=0.13.0', 'h5py', 'h5netcdf',] +interactive_reqs = ['ipykernel', 'matplotlib', 'tqdm',] +maxwell_reqs = ['joblib', 'extra_data', 'euxfel_bunch_pattern>=0.6'] + + setup(name='toolbox_scs', version=_version, description="A collection of code for the SCS beamline", @@ -20,9 +27,11 @@ setup(name='toolbox_scs', package_dir={'': 'src'}, packages=find_packages('src'), package_data={}, - install_requires=[ - 'xarray>=0.13.0', 'numpy', 'matplotlib', - 'pandas', 'scipy', 'h5py', 'h5netcdf', - 'extra_data', 'euxfel_bunch_pattern>=0.6', - ], - ) + install_requires=basic_analysis_reqs, + extras_require={ + 'advanced': advanced_analysis_reqs, + 'interactive': interactive_reqs, + 'maxwell': advanced_analysis_reqs + interactive_reqs + maxwell_reqs, + 'test': ['pytest'] + } +) diff --git a/src/toolbox_scs/__init__.py b/src/toolbox_scs/__init__.py index f1acd89..a1d290a 100644 --- a/src/toolbox_scs/__init__.py +++ b/src/toolbox_scs/__init__.py @@ -1,39 +1,22 @@ -from .load import (load, concatenateRuns, get_array, run_by_path) -from .constants import mnemonics -from .mnemonics_machinery import mnemonics_for_run - -__all__ = ( - # functions - "load", - "concatenateRuns", - "get_array", - "run_by_path", - "mnemonics_for_run", - # Classes - # Variables - "mnemonics", -) +from .constants import * +from .detectors import * +# Module name is the same as a child function, we use alias to avoid conflict +import toolbox_scs.load as load_module +from .load import * -# ------------------------------------------------------------------------------ -# Clean namespace -# clean_ns is a collection of undesired items in the namespace -# ------------------------------------------------------------------------------ +from .misc import * +from .mnemonics_machinery import * +from .routines import * -clean_ns = [ - # filenames - 'constants', - 'mnemonics_machinery' - # folders - 'misc', - 'util', - 'detectors', - 'routines', - ] - -for name in dir(): - if name in clean_ns: - del globals()[name] +__all__ = ( + # top-level modules + constants.__all__ + + load_module.__all__ + + mnemonics_machinery.__all__ -del globals()['clean_ns'] -del globals()['name'] + # submodules + + detectors.__all__ + + misc.__all__ + + routines.__all__ +) diff --git a/src/toolbox_scs/constants.py b/src/toolbox_scs/constants.py index 28587b5..09784e7 100644 --- a/src/toolbox_scs/constants.py +++ b/src/toolbox_scs/constants.py @@ -1,3 +1,8 @@ +__all__ = [ + 'mnemonics' +] + + mnemonics = { # Machine "sase3": ({'source': 'SCS_RR_UTC/MDL/BUNCH_DECODER', diff --git a/src/toolbox_scs/detectors/__init__.py b/src/toolbox_scs/detectors/__init__.py index a34b0b9..da11c8f 100644 --- a/src/toolbox_scs/detectors/__init__.py +++ b/src/toolbox_scs/detectors/__init__.py @@ -1,82 +1,21 @@ -from .xgm import ( - get_xgm, calibrate_xgm) -from .digitizers import ( - get_peaks, get_tim_peaks, get_laser_peaks, get_digitizer_peaks, - check_peak_params) -from .bam_detectors import get_bam -from .pes import get_pes_tof, get_pes_params -from .dssc_data import ( - save_xarray, load_xarray, get_data_formatted, save_attributes_h5) -from .dssc_misc import ( - load_dssc_info, create_dssc_bins, quickmask_DSSC_ASIC, - get_xgm_formatted, load_mask) -from .dssc_processing import ( - process_dssc_data) -from .dssc import ( - DSSCBinner, DSSCFormatter) -from .azimuthal_integrator import ( - AzimuthalIntegrator, AzimuthalIntegratorDSSC) +from .azimuthal_integrator import * +from .bam_detectors import * +from .digitizers import * +from .dssc import * +from .dssc_data import * +from .dssc_misc import * +from .dssc_processing import * +from .pes import * +from .xgm import * __all__ = ( - # Functions - "get_xgm", - "calibrate_xgm", - "get_peaks", - "get_tim_peaks", - "get_laser_peaks", - "get_digitizer_peaks", - "check_peak_params", - "get_bam", - "get_pes_tof", - "get_pes_params", - "save_xarray", - "load_xarray", - "get_data_formatted", - "save_attributes_h5", - "load_dssc_info", - "create_dssc_bins", - "quickmask_DSSC_ASIC", - "get_xgm_formatted", - "load_mask", - "calc_xgm_frame_indices", - "process_dssc_data", - # Classes - "DSSCBinner", - "DSSCFormatter", - "AzimuthalIntegrator", - "AzimuthalIntegratorDSSC", - # Variables + azimuthal_integrator.__all__ + + bam_detectors.__all__ + + digitizers.__all__ + + dssc.__all__ + + dssc_data.__all__ + + dssc_misc.__all__ + + dssc_processing.__all__ + + pes.__all__ + + xgm.__all__ ) - - -# ----------------------------------------------------------------------------- -# Clean namespace -# -> certain filenames we dont need in the namespace. Especially not those -# that are marked as private by using an underscore (_<filename>.py). -# ----------------------------------------------------------------------------- - -clean_ns = [ - # filenames - 'DSSC_bkp', - 'DSSC1module', - 'dssc', - 'dssc_routines', - 'dssc_processing', - 'dssc_data', - 'dssc_misc', - 'dssc_plot', - 'azimuthal_integrator', - 'FastCCD', - 'xgm', - 'digitizers', - 'bam_detectors', - 'pes' - ] - - -for name in dir(): - if name in clean_ns: - del globals()[name] - -del globals()['clean_ns'] -del globals()['name'] diff --git a/src/toolbox_scs/detectors/azimuthal_integrator.py b/src/toolbox_scs/detectors/azimuthal_integrator.py index d6326df..235c958 100644 --- a/src/toolbox_scs/detectors/azimuthal_integrator.py +++ b/src/toolbox_scs/detectors/azimuthal_integrator.py @@ -1,6 +1,11 @@ import logging import numpy as np +__all__ = [ + 'AzimuthalIntegrator', + 'AzimuthalIntegratorDSSC' +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/bam_detectors.py b/src/toolbox_scs/detectors/bam_detectors.py index 12d6ef1..667d20a 100644 --- a/src/toolbox_scs/detectors/bam_detectors.py +++ b/src/toolbox_scs/detectors/bam_detectors.py @@ -15,6 +15,9 @@ from ..misc.bunch_pattern_external import is_pulse_at from ..mnemonics_machinery import (mnemonics_to_process, mnemonics_for_run) +__all__ = [ + 'get_bam', +] log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/digitizers.py b/src/toolbox_scs/detectors/digitizers.py index b677323..339d17a 100644 --- a/src/toolbox_scs/detectors/digitizers.py +++ b/src/toolbox_scs/detectors/digitizers.py @@ -18,6 +18,14 @@ from ..util.exceptions import ToolBoxValueError from ..mnemonics_machinery import (mnemonics_to_process, mnemonics_for_run) +__all__ = [ + 'check_peak_params', + 'get_digitizer_peaks', + 'get_laser_peaks', + 'get_peaks', + 'get_tim_peaks', +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/dssc.py b/src/toolbox_scs/detectors/dssc.py index aaa80bf..7aa93a9 100644 --- a/src/toolbox_scs/detectors/dssc.py +++ b/src/toolbox_scs/detectors/dssc.py @@ -29,7 +29,10 @@ from .dssc_misc import ( from .dssc_processing import ( process_dssc_data, create_empty_dataset) -__all__ = ["DSSCBinner", "DSSCFormatter"] +__all__ = [ + "DSSCBinner", + "DSSCFormatter"] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/dssc_data.py b/src/toolbox_scs/detectors/dssc_data.py index 0781177..94b2336 100644 --- a/src/toolbox_scs/detectors/dssc_data.py +++ b/src/toolbox_scs/detectors/dssc_data.py @@ -6,6 +6,13 @@ import xarray as xr from ..util.exceptions import ToolBoxFileError +__all__ = [ + 'get_data_formatted', + 'load_xarray', + 'save_attributes_h5', + 'save_xarray', +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/dssc_misc.py b/src/toolbox_scs/detectors/dssc_misc.py index 96f5254..db89aa7 100644 --- a/src/toolbox_scs/detectors/dssc_misc.py +++ b/src/toolbox_scs/detectors/dssc_misc.py @@ -14,6 +14,14 @@ import extra_data as ed from .xgm import get_xgm from .digitizers import get_tim_peaks +__all__ = [ + 'create_dssc_bins', + 'get_xgm_formatted', + 'load_dssc_info', + 'load_mask', + 'quickmask_DSSC_ASIC', +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/dssc_processing.py b/src/toolbox_scs/detectors/dssc_processing.py index 2858308..a95607d 100644 --- a/src/toolbox_scs/detectors/dssc_processing.py +++ b/src/toolbox_scs/detectors/dssc_processing.py @@ -15,6 +15,10 @@ import extra_data as ed from ..mnemonics_machinery import mnemonics_for_run from .dssc_data import save_xarray +__all__ = [ + 'process_dssc_data' +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/fccd.py b/src/toolbox_scs/detectors/fccd.py index 0396df5..f0cb5de 100644 --- a/src/toolbox_scs/detectors/fccd.py +++ b/src/toolbox_scs/detectors/fccd.py @@ -1,6 +1,5 @@ from joblib import Parallel, delayed, parallel_backend from time import strftime -import tempfile import shutil from tqdm.auto import tqdm import os @@ -17,11 +16,11 @@ import h5py from glob import glob from imageio import imread -import ToolBox as tb from ..constants import mnemonics as _mnemonics from .azimuthal_integrator import AzimuthalIntegrator from ..misc.laser_utils import positionToDelay + class FastCCD: def __init__(self, proposal, distance=1, raw=False): diff --git a/src/toolbox_scs/detectors/pes.py b/src/toolbox_scs/detectors/pes.py index 49d73f7..cb36e49 100644 --- a/src/toolbox_scs/detectors/pes.py +++ b/src/toolbox_scs/detectors/pes.py @@ -16,6 +16,12 @@ from ..mnemonics_machinery import (mnemonics_to_process, mnemonics_for_run) +__all__ = [ + 'get_pes_params', + 'get_pes_tof', +] + + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/detectors/xgm.py b/src/toolbox_scs/detectors/xgm.py index cdb84dc..944dcc5 100644 --- a/src/toolbox_scs/detectors/xgm.py +++ b/src/toolbox_scs/detectors/xgm.py @@ -16,6 +16,11 @@ from ..misc.bunch_pattern_external import is_sase_1, is_sase_3 from ..mnemonics_machinery import (mnemonics_to_process, mnemonics_for_run) +__all__ = [ + 'calibrate_xgm', + 'get_xgm', +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/load.py b/src/toolbox_scs/load.py index 48360c7..d51b5b1 100644 --- a/src/toolbox_scs/load.py +++ b/src/toolbox_scs/load.py @@ -21,6 +21,13 @@ from .mnemonics_machinery import mnemonics_for_run from .util.exceptions import ToolBoxValueError import toolbox_scs.detectors as tbdet +__all__ = [ + 'concatenateRuns', + 'get_array', + 'load', + 'run_by_path', +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/misc/__init__.py b/src/toolbox_scs/misc/__init__.py index 0f4edde..3ff302d 100644 --- a/src/toolbox_scs/misc/__init__.py +++ b/src/toolbox_scs/misc/__init__.py @@ -1,25 +1,9 @@ -from .bunch_pattern import (extractBunchPattern, pulsePatternInfo, - repRate) -from .bunch_pattern_external import (is_sase_3, is_sase_1, - is_ppl, is_pulse_at) -from .laser_utils import positionToDelay, degToRelPower - +from .bunch_pattern import * +from .bunch_pattern_external import * +from .laser_utils import * __all__ = ( - # Functions - "extractBunchPattern", - "pulsePatternInfo", - "repRate", - "sortBAMdata", - "is_sase_3", - "is_sase_1", - "is_ppl", - "is_pulse_at", - "get_index_ppl", - "get_index_sase1", - "get_index_sase3", - "positionToDelay", - "degToRelPower", - # Classes - # Variables + bunch_pattern.__all__ + + bunch_pattern_external.__all__ + + laser_utils.__all__ ) diff --git a/src/toolbox_scs/misc/bunch_pattern.py b/src/toolbox_scs/misc/bunch_pattern.py index 3f5939b..852f9ed 100644 --- a/src/toolbox_scs/misc/bunch_pattern.py +++ b/src/toolbox_scs/misc/bunch_pattern.py @@ -16,6 +16,12 @@ from extra_data import RunDirectory # import and hide variable, such that it does not alter namespace. from ..constants import mnemonics as _mnemonics_bp +__all__ = [ + 'extractBunchPattern', + 'pulsePatternInfo', + 'repRate' +] + def extractBunchPattern(bp_table=None, key='sase3', runDir=None): ''' generate the bunch pattern and number of pulses of a source directly from the diff --git a/src/toolbox_scs/misc/bunch_pattern_external.py b/src/toolbox_scs/misc/bunch_pattern_external.py index 993b584..70d6afc 100644 --- a/src/toolbox_scs/misc/bunch_pattern_external.py +++ b/src/toolbox_scs/misc/bunch_pattern_external.py @@ -11,6 +11,13 @@ import logging import euxfel_bunch_pattern as ebp +__all__ = [ + 'is_sase_3', + 'is_sase_1', + 'is_ppl', + 'is_pulse_at', +] + PPL_SCS = ebp.LASER_SEED6 log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/misc/laser_utils.py b/src/toolbox_scs/misc/laser_utils.py index 55e44a3..b284999 100644 --- a/src/toolbox_scs/misc/laser_utils.py +++ b/src/toolbox_scs/misc/laser_utils.py @@ -1,3 +1,9 @@ +__all__ = [ + 'degToRelPower', + 'positionToDelay', +] + + def positionToDelay(pos, origin=0, invert = False, reflections=1): ''' converts a motor position in mm into optical delay in picosecond Inputs: diff --git a/src/toolbox_scs/mnemonics_machinery.py b/src/toolbox_scs/mnemonics_machinery.py index f09e14b..a3aa8f0 100644 --- a/src/toolbox_scs/mnemonics_machinery.py +++ b/src/toolbox_scs/mnemonics_machinery.py @@ -10,6 +10,10 @@ import logging from .constants import mnemonics as _mnemonics +__all__ = [ + 'mnemonics_for_run' +] + log = logging.getLogger(__name__) diff --git a/src/toolbox_scs/routines/XAS.py b/src/toolbox_scs/routines/XAS.py index 1c9ca17..3bf52a5 100644 --- a/src/toolbox_scs/routines/XAS.py +++ b/src/toolbox_scs/routines/XAS.py @@ -14,6 +14,11 @@ import matplotlib.gridspec as gridspec import matplotlib.pyplot as plt import re +__all__ = [ + 'xas', + 'xasxmcd', +] + def absorption(T, Io, fluorescence=False): """ Compute the absorption A = -ln(T/Io) (or A = T/Io diff --git a/src/toolbox_scs/routines/__init__.py b/src/toolbox_scs/routines/__init__.py index de3ef38..d8fbb26 100644 --- a/src/toolbox_scs/routines/__init__.py +++ b/src/toolbox_scs/routines/__init__.py @@ -1,29 +1,10 @@ -from .XAS import ( - xas, xasxmcd) -from .knife_edge import knife_edge +from .XAS import * + +# Module name is the same as a child function, we use alias to avoid conflict +import toolbox_scs.routines.knife_edge as knife_edge_module +from .knife_edge import * __all__ = ( - # Functions - "xas", - "xasxmcd", - "knife_edge" + knife_edge_module.__all__ + + XAS.__all__ ) - -# ----------------------------------------------------------------------------- -# Clean namespace -# -> certain filenames we dont need in the namespace. Especially not those -# that are marked as private by using an underscore (_<filename>.py). -# ----------------------------------------------------------------------------- - -clean_ns = [ - # filenames - 'XAS', - ] - - -for name in dir(): - if name in clean_ns: - del globals()[name] - -del globals()['clean_ns'] -del globals()['name'] diff --git a/src/toolbox_scs/routines/knife_edge.py b/src/toolbox_scs/routines/knife_edge.py index 191213d..fccc153 100644 --- a/src/toolbox_scs/routines/knife_edge.py +++ b/src/toolbox_scs/routines/knife_edge.py @@ -11,6 +11,10 @@ from scipy.special import erfc from scipy.optimize import curve_fit import bisect +__all__ = [ + 'knife_edge' +] + def knife_edge(ds, axisKey='scannerX', signalKey='FastADC4peaks', -- GitLab