Commit a730983e authored by Zolnierczuk, Piotr's avatar Zolnierczuk, Piotr
Browse files

temprorary commit

work on flippers
parent a082e42c
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -32,10 +32,12 @@ install-user: build-ui
uninstall:
	pip uninstall $(PROJNAME)

test:	runtest
test:	runtest integrationtest

runtest:
	@PYTHONPATH=.  $(PYTHON) -m pytest ./test

integrationtest:
	@PYTHONPATH=.  ./test/run_integration_tests.sh

pylint:
+27 −35
Original line number Diff line number Diff line
@@ -25,12 +25,12 @@ def current_sheet(turns_density):

class BaseFlipper:
    "Base flipper class"
    def __init__(self, name, position=0, thickness=0.01, turns_density=1):
    def __init__(self, name, **kwargs):
        "the constructor"
        self.name          = name
        self.position      = position     # distance from the source
        self.thickness     = thickness    #
        self.turns_density = turns_density
        self.position      = kwargs.pop('position', 0)
        self.thickness     = kwargs.pop('thickness', 0.01)
        self.turns_density = kwargs.pop('turns_density', 1)

    def __str__(self):
        "the flipper"
@@ -96,51 +96,43 @@ class FlipperPi2(BaseFlipper):
        omega_z = np.asarray([opt.newton(rxx13,PI/2,args=(x,)) for x in omega_x])
        return omega_z/omega_x

def make_flipper(name, params=None):

def __make_flipper(name, params=None):
    """Make a flipper from a config dictionary"""
    if not params:
        params = NSE_FLIPPERS.get(name, {})
        if not params:
            raise ValueError(f"unknown flipper name '{name}', choose from {list(NSE_FLIPPERS.keys())}")
    # make a copy, so that we can "remove" type
    params = params.copy()
    ftype = params.pop('type', 'unknown')
    ftype  = params.get('type', 'unknown')
    if ftype == 'pi':
        return FlipperPi(name=name, **params)
    if ftype  == 'pi/2':
        return FlipperPi2(name=name, **params)
    raise ValueError(f"unknown flipper type '{ftype}' for flipper '{name}'")

def make_flipper_from_file(filename):
    """make a flipper from a JSON file containing the flipper parameters

    The JSON file should contain a dictionary with the following keys:
    - name: The name of the flipper.
    - type: The type of the flipper (e.g., 'pi', 'pi/2').
    - position: The distance from the source (in meters).
    - thickness: The thickness of the flipper (in meters).
    - turns_density: The density of turns in the flipper (turns/meter)

    Args:
        filename (str): The path to the JSON file containing the flipper parameters.
def make_flipper(name, params=None):
    """make a flipper from a name or a file
    name   - flipper definition file or flipper name in NSE_FLIPPERS
    params - flipper parameters (overrides the file or NSE_FLIPPERS definition)

    Returns:
        dict: A dictionary containing the flipper parameters, or None if an error occurs.
    returns a flipper object
    """
    if params is not None:
        return __make_flipper(name, params=params)

    try:
        # Open the file in read mode ('r') with a 'with' statement
        # to ensure the file is automatically closed.
        with open(filename, 'r', encoding='utf-8') as file:
        with open(name, 'r', encoding='utf-8') as file:
            # Use json.load() to parse the file content directly
            data = json.load(file)
        name = data.pop('name', 'unknown')
        return make_flipper(name, params=data)
    except FileNotFoundError:
        print(f"Error: The file '{filename}' was not found.")
        return None
            params = json.load(file)
            name = params.pop('name', 'unknown')
            return __make_flipper(name, params=params)
    except json.JSONDecodeError:
        print(f"Error: Could not decode JSON from the file '{filename}'. Check the file format.")
        print(f"Error: Could not decode JSON from the file '{name}'. Check the file format.")
        return None
    except FileNotFoundError:
        pass

    params = NSE_FLIPPERS.get(name, {})
    if not params:
        raise ValueError(f"unknown flipper name '{name}', choose from {list(NSE_FLIPPERS.keys())}")
    return __make_flipper(name, params=params)

def tof_curve(flipper, lmax, dlam, points, sample_to_source, **kwargs):
    """
+9 −12
Original line number Diff line number Diff line
@@ -5,12 +5,13 @@ import logging
import numpy as np
import matplotlib.pyplot as plt

from ..constants import GAUSS
#from ..constants import GAUSS
from ..config import L2, Ltot, HMN, ANGSTROM
from ..echo.flippers import make_flipper, make_flipper_from_file, tof_curve
from ..echo.flippers import make_flipper, tof_curve

def plot_flipper_curve(axs, name='fpi', **kwargs):
    "test with plots"
    print(f"{name=}, {kwargs=}")
    pos     = kwargs.pop('pos', 'p2')
    freq    = kwargs.pop('freq', 60.0)
    points  = kwargs.pop('points', 163)
@@ -19,16 +20,14 @@ def plot_flipper_curve(axs, name='fpi', **kwargs):
    compare = kwargs.pop('compare', None)
    scale   = kwargs.pop('scale', 1.0)
    out     = kwargs.pop('out', None)
    b_x     = kwargs.pop('b_x', 0.0) # horizontal external field in GAUSS
    b_z     = kwargs.pop('b_z', 0.0) # vertical   external field in GAUSS
    b_x     = kwargs.pop('bfield_x', 0.0) # horizontal external field in Tesla
    b_z     = kwargs.pop('bfield_z', 0.0) # vertical   external field in Tesla
    fname   = kwargs.pop('file', None)    # flipper definition file

    log = logging.getLogger()
    L  =  Ltot.get(pos) # [m] source to detector
    L1 =  L - L2 # [m] source to sample

    #B_ext = [ 1.000692*GAUSS, 0, -0.039814*GAUSS ] # ext. field
    B_ext = np.asarray([ b_x, 0.0, b_z])*GAUSS  # ext. field
    B_ext = np.asarray([ b_x, 0.0, b_z])  # ext. field
    #
    compare_data = None
    if compare is not None:
@@ -37,13 +36,11 @@ def plot_flipper_curve(axs, name='fpi', **kwargs):
        except FileNotFoundError as err:
            log.error("cannot load compare file (%s)",err)
            compare_data = None

    if fname:
        flipper = make_flipper_from_file(fname)
        name = flipper.name
        flipper = make_flipper(fname)
    else:
        flipper = make_flipper(name)
    title = rf'{name} $\lambda_{{max}}$={lmax:g}$\AA$'
    title = rf'{flipper.name} $\lambda_{{max}}$={lmax:g}$\AA$'

    delam = HMN/(freq*L) # wavelengtgh band
    lmax = lmax*ANGSTROM
+11 −4
Original line number Diff line number Diff line
@@ -383,10 +383,11 @@ def add_flipper_options(subparser, parents=None):
    "make phase table"
    pars = subparser.add_parser('flipper', parents=parents, aliases=['flp',],
                                help='helper to create flipper curves',
                                description='create flipper curves')
    pars.set_defaults(file=[], name='fpi', fname=None,
                                description='create flipper curves either from a json file or from a named flipper (--name)')
    pars.set_defaults(file=[], name='fpi',
                      freq=DEFAULT_ACCELERATOR_FREQ, pos='p2',
                        points=163, shift=0, lmax=8.0, scale=1.0, compare=None)
                      points=163, shift=0, lmax=8.0, scale=1.0,
                      bfield_x=0.0, bfield_z=0.0, compare=None)
    flp = pars.add_mutually_exclusive_group()
    flp.add_argument('--name', '-n', dest='name', choices=NSE_FLIPPERS.keys(),
                        help='flipper name (default %(default)s)')
@@ -400,6 +401,12 @@ def add_flipper_options(subparser, parents=None):
                        help='instrument position to determine wavelength band (default %(default)s)')
    pars.add_argument('--shift', dest='shift', type=float, metavar='off',
                        help='shift (offset) the curve by a number of points (default %(default)s)')
    pars.add_argument('--points', dest='points', type=int, metavar='N',
                        help='number of points to calculate (default %(default)s)')
    pars.add_argument('--bfield-x', dest='bfield_x', type=float, metavar='bx',
                        help='external field in beam (x) direction (default %(default)s)')
    pars.add_argument('--bfield-z', dest='bfield_z', type=float, metavar='bz',
                        help='external field in the vertical (z) direction (default %(default)s)')
    pars.add_argument('--scale', dest='scale', type=float, metavar='sc',
                        help='current scale factor (default %(default)s)')
    pars.add_argument('--compare', '-c', dest='compare', metavar='file',
+2 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ python ./pysen/ui/nseplot.py bfield ./test/data/NSE_15617.nxs.h5 -S b
python ./pysen/ui/nseplot.py qtau             ./test/data/qtau_inp.py       -S qtau_default.png
#    phase_table (pt)    phase table
python ./pysen/ui/nseplot.py flipper                                        -S flipper_default.png
python ./pysen/ui/nseplot.py flipper  fpi21                                 -S flipper_fpi21.png
python ./pysen/ui/nseplot.py flipper  ./test/data/flipper.json              -S flipper_file.png

#    old_xyz             xyz plot (.dat or .h5 files)
#    gui                 nseplot gui
Loading