Loading pysen/config.py +9 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,15 @@ J2_MAX = 0.0200 # [T*m] max field integral (20 mTm = 200 Gauss*m) # TODO: verif # J_LIMS = (J2_MIN, J1_MAX) # 4b. Flipper names NSE_FLIPPER_NAMES = { "fpi21" : dict(type='pi/2', position =-2.824663, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i33 "fpi21rs": dict(type='pi' , position =-2.283902, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i37 "fpi" : dict(type='pi' , position =-0.146000, thickness=0.013, turns_density=833.33), #w=0.18 h=0.18, i32 "fpi22rs": dict(type='pi' , position =+2.279194, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i38 "fpi22" : dict(type='pi/2', position =+2.823903, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i34 } # 5. Misc other data ATTENUATOR_TABLE_08A = { 'ERROR' : 1.0, Loading pysen/plot/__init__.py +1 −0 Original line number Diff line number Diff line Loading @@ -16,5 +16,6 @@ from .xyzplotlib import ( plot_xyz, plot_xyz_nexus, action_xyz, action_old_xyz ) # NOQA from .nxsplotlib import plot_detimage, action_detimage # NOQA from .miscplotlib import action_phase_table # NOQA from .fliplotlib import plot_flipper_curve, action_flipper # NOQA # obsolete from .histplotlib import plot_var, plot_sc # NOQA pysen/ui/nseflipper.py→pysen/plot/fliplotlib.py +98 −0 Original line number Diff line number Diff line #!/usr/bin/env python """ script to calculate Mezei flipper curves """ calculate Mezei flipper curves """ import argparse import logging import numpy as np import matplotlib.pyplot as plt from pysen import version, setup_logger from pysen.constants import GAUSS from pysen.config import INST_POSITIONS, L2, Ltot, HMN, ANGSTROM, DEFAULT_ACCELERATOR_FREQ from pysen.echo.flippers import FlipperPi, FlipperPi2, tof_curve from ..constants import GAUSS from ..config import L2, Ltot, HMN, ANGSTROM, NSE_FLIPPER_NAMES from ..echo.flippers import FlipperPi, FlipperPi2, tof_curve #NSE_FLIPPERS = { # "fpi21" : FlipperPi2('fpi21', position =-2.824663, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i33 # "fpi21rs": FlipperPi ('fpi21rs', position =-2.283902, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i37 # "fpi" : FlipperPi ('fpi', position =-0.146000, thickness=0.013, turns_density=833.33), #w=0.18 h=0.18, i32 # "fpi22rs": FlipperPi ('fpi22rs', position =+2.279194, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i38 # "fpi22" : FlipperPi2('fpi22', position =+2.823903, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i34 #} flippers = { "fpi21" : FlipperPi2('fpi21', position =-2.824663, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i33 "fpi21rs": FlipperPi ('fpi21rs', position =-2.283902, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i37 "fpi" : FlipperPi ('fpi', position =-0.146000, thickness=0.013, turns_density=833.33), #w=0.18 h=0.18, i32 "fpi22rs": FlipperPi ('fpi22rs', position =+2.279194, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i38 "fpi22" : FlipperPi2('fpi22', position =+2.823903, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i34 } NSE_FLIPPERS = {} def curve_test(axs, name='fpi', **kwargs): def plot_flipper_curve(axs, name='fpi', **kwargs): "test with plots" pos = kwargs.pop('pos', 'p2') freq = kwargs.pop('freq', 60.0) Loading @@ -41,6 +39,7 @@ def curve_test(axs, name='fpi', **kwargs): #B_ext = [ 1.000692*GAUSS, 0, -0.039814*GAUSS ] # ext. field B_ext = np.asarray([ b_x, 0.0, b_z])*GAUSS # ext. field # title = rf'{name} $\lambda_{{max}}$={lmax:g}$\AA$' compare_data = None if compare is not None: try: Loading @@ -52,7 +51,18 @@ def curve_test(axs, name='fpi', **kwargs): delam = HMN/(freq*L) # wavelengtgh band lmax = lmax*ANGSTROM f = flippers.get(name) params = NSE_FLIPPER_NAMES.get(name, {}) if not params: raise ValueError(f"unknown flipper name '{name}', choose from {list(NSE_FLIPPER_NAMES.keys())}") flipper_type = params.pop('type', 'unknown') if flipper_type == 'pi': f = FlipperPi(name=name, **params) elif flipper_type == 'pi/2': f = FlipperPi2(name=name, **params) else: raise ValueError(f"unknown flipper type '{params.get('type')}' for flipper '{name}'") curve = tof_curve(f, lmax, delam, points=points, sample_to_source=L1, freq=freq, b_ext=B_ext, rewind=5) curve = np.roll(curve, shift) Loading @@ -62,68 +72,27 @@ def curve_test(axs, name='fpi', **kwargs): axs.plot(compare_data,'--', lw=1, label='compare %s' % compare, color=p[0].get_color()) if out: with open(out, 'wt') as fd: with open(out, 'wt', encoding='ascii') as fd: fd.write(f"# flipper {f}\n") fd.write(f"# lambda = ({lmax-delam/ANGSTROM:g} - {lmax:g}) A\n") for point in scurve: fd.write(f"{point:g}\n") def main(): "TBD" description="<unknown>" # description='Tool to generate flipper curves' parser = argparse.ArgumentParser(description=description) parser.set_defaults(name='fpi', pos='p2', freq=DEFAULT_ACCELERATOR_FREQ, points=163, shift=0, lmax=8.0, scale=1.0, compare=None, loglevel=2, out=None, savefig=None) #parser.add_argument('filename', metavar='file', nargs='+', help='file name to process') parser.add_argument('--name', '-n', dest='name', choices=flippers.keys(), help='flipper name (default %(default)s)') parser.add_argument('--frequency', '-F', dest='freq', type=float, help='accelerator frequency (default %(default)s)') parser.add_argument('--wavelength', '-L', dest='lmax', type=float, help='set (max) neutron wavelength in Angstroms (default %(default)s)') parser.add_argument('--pos', '-p', dest='pos', choices=INST_POSITIONS, help='instrument position to determine wavelength band (default %(default)s)') parser.add_argument('--shift', dest='shift', type=float, help='shift the curve by a number of points (default %(default)s)') parser.add_argument('--scale', dest='scale', type=float, help='current scale factor (default %(default)s)') parser.add_argument('--compare', '-c', dest='compare', help='compare with file (default %(default)s)') parser.add_argument('--safe-figure', '-S', dest='savefig', metavar='file', help='save the output figure to a file and do not show it.') parser.add_argument('--outdir', '-o', dest='out', help='write data into a file (default %(default)s)') parser.add_argument('--version', action='version', version='%(prog)s pysen={version}'.format(version=version(full=True))) parser.add_argument('--verbose', '-v', dest='loglevel', action='count', help='verbose output') parser.add_argument('--quiet', '-q', dest='loglevel', action='store_const', const=0, help='verbose output') args = parser.parse_args() kwargs = vars(args) loglevel = kwargs.pop('loglevel') savefig = kwargs.pop('savefig') setup_logger(loglevel) axs.legend() axs.set_ylabel(r'I (A)') axs.grid() return title, scurve fig, ax1 = plt.subplots(1,1,figsize=(8,6)) fig.suptitle(rf'{args.name} $\lambda_{{max}}$={args.lmax:g}$\AA$') curve_test(ax1, **kwargs) def action_flipper(_filenames, **kwargs): "default action for echo, atari, etc" savefig = kwargs.pop('savefig') ax1.legend() ax1.set_ylabel(r'I (A)') ax1.grid() fig, ax = plt.subplots(1,1,figsize=(8,6)) title, _ = plot_flipper_curve(ax, **kwargs) fig.suptitle(title) if savefig: fig.savefig(savefig) else: plt.show() if __name__ == "__main__": main() pysen/revision.py +2 −2 Original line number Diff line number Diff line Loading @@ -3,8 +3,8 @@ PySEN revision module """ import sys __version__ = "2.0" __release__ = ".7b2" __date__ = "Sep 15, 2025" __release__ = ".7b3" __date__ = "Oct 10, 2025" def version(full=False): "get pysen version number" Loading pysen/ui/nseplot.py +8 −7 Original line number Diff line number Diff line Loading @@ -9,7 +9,8 @@ import numpy as np import matplotlib.pyplot as plt from pysen import version, setup_logger, DEFAULT_LOG_LEVEL from pysen.config import INST_POSITIONS, INST_MODES, DEFAULT_ACCELERATOR_POWER, TDC_MAXCH, TDC_MAXPIX from pysen.config import (INST_POSITIONS, INST_MODES, DEFAULT_ACCELERATOR_POWER, TDC_MAXCH, TDC_MAXPIX, DEFAULT_ACCELERATOR_FREQ, NSE_FLIPPER_NAMES) # ACTION imports import pysen.plot as nseplt Loading Loading @@ -351,11 +352,11 @@ def add_flipper_options(subparser, parents=None): pars = subparser.add_parser('flipper', parents=parents, aliases=['flp',], help='helpe to creat flipper curves', description='is flipper') pars.set_defaults(name='fpi', pos='p2', #freq=DEFAULT_ACCELERATOR_FREQ, pars.set_defaults(file=None, name='fpi', pos='p2', freq=DEFAULT_ACCELERATOR_FREQ, points=163, shift=0, lmax=8.0, scale=1.0, compare=None, loglevel=2, out=None, savefig=None) #pars.add_argument('file', metavar='filename', help='file to process', nargs='+') pars.add_argument('--name', '-n', dest='name', choices=['f1', 'f2'], #flippers.keys(), pars.add_argument('--name', '-n', dest='name', choices=NSE_FLIPPER_NAMES.keys(), help='flipper name (default %(default)s)') pars.add_argument('--frequency', '-F', dest='freq', type=float, help='accelerator frequency (default %(default)s)') Loading Loading @@ -451,7 +452,7 @@ def main(): datreat=nseplt.action_datreat, dtr=nseplt.action_datreat, qtau=nseplt.action_qtau, qt=nseplt.action_qtau, phase_table=nseplt.action_phase_table, pt=nseplt.action_phase_table, flipper=nseplt.phase_table, #action_flipper, flp=nseplt.action_flipper, flipper=nseplt.action_flipper, flp=nseplt.action_flipper, old_xyz=nseplt.action_old_xyz).get(args.command, None) if action is None: raise RuntimeError('no action specified for %s' % args.command) Loading Loading
pysen/config.py +9 −0 Original line number Diff line number Diff line Loading @@ -64,6 +64,15 @@ J2_MAX = 0.0200 # [T*m] max field integral (20 mTm = 200 Gauss*m) # TODO: verif # J_LIMS = (J2_MIN, J1_MAX) # 4b. Flipper names NSE_FLIPPER_NAMES = { "fpi21" : dict(type='pi/2', position =-2.824663, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i33 "fpi21rs": dict(type='pi' , position =-2.283902, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i37 "fpi" : dict(type='pi' , position =-0.146000, thickness=0.013, turns_density=833.33), #w=0.18 h=0.18, i32 "fpi22rs": dict(type='pi' , position =+2.279194, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i38 "fpi22" : dict(type='pi/2', position =+2.823903, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i34 } # 5. Misc other data ATTENUATOR_TABLE_08A = { 'ERROR' : 1.0, Loading
pysen/plot/__init__.py +1 −0 Original line number Diff line number Diff line Loading @@ -16,5 +16,6 @@ from .xyzplotlib import ( plot_xyz, plot_xyz_nexus, action_xyz, action_old_xyz ) # NOQA from .nxsplotlib import plot_detimage, action_detimage # NOQA from .miscplotlib import action_phase_table # NOQA from .fliplotlib import plot_flipper_curve, action_flipper # NOQA # obsolete from .histplotlib import plot_var, plot_sc # NOQA
pysen/ui/nseflipper.py→pysen/plot/fliplotlib.py +98 −0 Original line number Diff line number Diff line #!/usr/bin/env python """ script to calculate Mezei flipper curves """ calculate Mezei flipper curves """ import argparse import logging import numpy as np import matplotlib.pyplot as plt from pysen import version, setup_logger from pysen.constants import GAUSS from pysen.config import INST_POSITIONS, L2, Ltot, HMN, ANGSTROM, DEFAULT_ACCELERATOR_FREQ from pysen.echo.flippers import FlipperPi, FlipperPi2, tof_curve from ..constants import GAUSS from ..config import L2, Ltot, HMN, ANGSTROM, NSE_FLIPPER_NAMES from ..echo.flippers import FlipperPi, FlipperPi2, tof_curve #NSE_FLIPPERS = { # "fpi21" : FlipperPi2('fpi21', position =-2.824663, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i33 # "fpi21rs": FlipperPi ('fpi21rs', position =-2.283902, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i37 # "fpi" : FlipperPi ('fpi', position =-0.146000, thickness=0.013, turns_density=833.33), #w=0.18 h=0.18, i32 # "fpi22rs": FlipperPi ('fpi22rs', position =+2.279194, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i38 # "fpi22" : FlipperPi2('fpi22', position =+2.823903, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i34 #} flippers = { "fpi21" : FlipperPi2('fpi21', position =-2.824663, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i33 "fpi21rs": FlipperPi ('fpi21rs', position =-2.283902, thickness=0.010, turns_density=833.33), #w=0.10 h=0.18, i37 "fpi" : FlipperPi ('fpi', position =-0.146000, thickness=0.013, turns_density=833.33), #w=0.18 h=0.18, i32 "fpi22rs": FlipperPi ('fpi22rs', position =+2.279194, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i38 "fpi22" : FlipperPi2('fpi22', position =+2.823903, thickness=0.010, turns_density=821.40), #w=0.28 h=0.28, i34 } NSE_FLIPPERS = {} def curve_test(axs, name='fpi', **kwargs): def plot_flipper_curve(axs, name='fpi', **kwargs): "test with plots" pos = kwargs.pop('pos', 'p2') freq = kwargs.pop('freq', 60.0) Loading @@ -41,6 +39,7 @@ def curve_test(axs, name='fpi', **kwargs): #B_ext = [ 1.000692*GAUSS, 0, -0.039814*GAUSS ] # ext. field B_ext = np.asarray([ b_x, 0.0, b_z])*GAUSS # ext. field # title = rf'{name} $\lambda_{{max}}$={lmax:g}$\AA$' compare_data = None if compare is not None: try: Loading @@ -52,7 +51,18 @@ def curve_test(axs, name='fpi', **kwargs): delam = HMN/(freq*L) # wavelengtgh band lmax = lmax*ANGSTROM f = flippers.get(name) params = NSE_FLIPPER_NAMES.get(name, {}) if not params: raise ValueError(f"unknown flipper name '{name}', choose from {list(NSE_FLIPPER_NAMES.keys())}") flipper_type = params.pop('type', 'unknown') if flipper_type == 'pi': f = FlipperPi(name=name, **params) elif flipper_type == 'pi/2': f = FlipperPi2(name=name, **params) else: raise ValueError(f"unknown flipper type '{params.get('type')}' for flipper '{name}'") curve = tof_curve(f, lmax, delam, points=points, sample_to_source=L1, freq=freq, b_ext=B_ext, rewind=5) curve = np.roll(curve, shift) Loading @@ -62,68 +72,27 @@ def curve_test(axs, name='fpi', **kwargs): axs.plot(compare_data,'--', lw=1, label='compare %s' % compare, color=p[0].get_color()) if out: with open(out, 'wt') as fd: with open(out, 'wt', encoding='ascii') as fd: fd.write(f"# flipper {f}\n") fd.write(f"# lambda = ({lmax-delam/ANGSTROM:g} - {lmax:g}) A\n") for point in scurve: fd.write(f"{point:g}\n") def main(): "TBD" description="<unknown>" # description='Tool to generate flipper curves' parser = argparse.ArgumentParser(description=description) parser.set_defaults(name='fpi', pos='p2', freq=DEFAULT_ACCELERATOR_FREQ, points=163, shift=0, lmax=8.0, scale=1.0, compare=None, loglevel=2, out=None, savefig=None) #parser.add_argument('filename', metavar='file', nargs='+', help='file name to process') parser.add_argument('--name', '-n', dest='name', choices=flippers.keys(), help='flipper name (default %(default)s)') parser.add_argument('--frequency', '-F', dest='freq', type=float, help='accelerator frequency (default %(default)s)') parser.add_argument('--wavelength', '-L', dest='lmax', type=float, help='set (max) neutron wavelength in Angstroms (default %(default)s)') parser.add_argument('--pos', '-p', dest='pos', choices=INST_POSITIONS, help='instrument position to determine wavelength band (default %(default)s)') parser.add_argument('--shift', dest='shift', type=float, help='shift the curve by a number of points (default %(default)s)') parser.add_argument('--scale', dest='scale', type=float, help='current scale factor (default %(default)s)') parser.add_argument('--compare', '-c', dest='compare', help='compare with file (default %(default)s)') parser.add_argument('--safe-figure', '-S', dest='savefig', metavar='file', help='save the output figure to a file and do not show it.') parser.add_argument('--outdir', '-o', dest='out', help='write data into a file (default %(default)s)') parser.add_argument('--version', action='version', version='%(prog)s pysen={version}'.format(version=version(full=True))) parser.add_argument('--verbose', '-v', dest='loglevel', action='count', help='verbose output') parser.add_argument('--quiet', '-q', dest='loglevel', action='store_const', const=0, help='verbose output') args = parser.parse_args() kwargs = vars(args) loglevel = kwargs.pop('loglevel') savefig = kwargs.pop('savefig') setup_logger(loglevel) axs.legend() axs.set_ylabel(r'I (A)') axs.grid() return title, scurve fig, ax1 = plt.subplots(1,1,figsize=(8,6)) fig.suptitle(rf'{args.name} $\lambda_{{max}}$={args.lmax:g}$\AA$') curve_test(ax1, **kwargs) def action_flipper(_filenames, **kwargs): "default action for echo, atari, etc" savefig = kwargs.pop('savefig') ax1.legend() ax1.set_ylabel(r'I (A)') ax1.grid() fig, ax = plt.subplots(1,1,figsize=(8,6)) title, _ = plot_flipper_curve(ax, **kwargs) fig.suptitle(title) if savefig: fig.savefig(savefig) else: plt.show() if __name__ == "__main__": main()
pysen/revision.py +2 −2 Original line number Diff line number Diff line Loading @@ -3,8 +3,8 @@ PySEN revision module """ import sys __version__ = "2.0" __release__ = ".7b2" __date__ = "Sep 15, 2025" __release__ = ".7b3" __date__ = "Oct 10, 2025" def version(full=False): "get pysen version number" Loading
pysen/ui/nseplot.py +8 −7 Original line number Diff line number Diff line Loading @@ -9,7 +9,8 @@ import numpy as np import matplotlib.pyplot as plt from pysen import version, setup_logger, DEFAULT_LOG_LEVEL from pysen.config import INST_POSITIONS, INST_MODES, DEFAULT_ACCELERATOR_POWER, TDC_MAXCH, TDC_MAXPIX from pysen.config import (INST_POSITIONS, INST_MODES, DEFAULT_ACCELERATOR_POWER, TDC_MAXCH, TDC_MAXPIX, DEFAULT_ACCELERATOR_FREQ, NSE_FLIPPER_NAMES) # ACTION imports import pysen.plot as nseplt Loading Loading @@ -351,11 +352,11 @@ def add_flipper_options(subparser, parents=None): pars = subparser.add_parser('flipper', parents=parents, aliases=['flp',], help='helpe to creat flipper curves', description='is flipper') pars.set_defaults(name='fpi', pos='p2', #freq=DEFAULT_ACCELERATOR_FREQ, pars.set_defaults(file=None, name='fpi', pos='p2', freq=DEFAULT_ACCELERATOR_FREQ, points=163, shift=0, lmax=8.0, scale=1.0, compare=None, loglevel=2, out=None, savefig=None) #pars.add_argument('file', metavar='filename', help='file to process', nargs='+') pars.add_argument('--name', '-n', dest='name', choices=['f1', 'f2'], #flippers.keys(), pars.add_argument('--name', '-n', dest='name', choices=NSE_FLIPPER_NAMES.keys(), help='flipper name (default %(default)s)') pars.add_argument('--frequency', '-F', dest='freq', type=float, help='accelerator frequency (default %(default)s)') Loading Loading @@ -451,7 +452,7 @@ def main(): datreat=nseplt.action_datreat, dtr=nseplt.action_datreat, qtau=nseplt.action_qtau, qt=nseplt.action_qtau, phase_table=nseplt.action_phase_table, pt=nseplt.action_phase_table, flipper=nseplt.phase_table, #action_flipper, flp=nseplt.action_flipper, flipper=nseplt.action_flipper, flp=nseplt.action_flipper, old_xyz=nseplt.action_old_xyz).get(args.command, None) if action is None: raise RuntimeError('no action specified for %s' % args.command) Loading