Source code for nucleon_elastic_ff.data.scripts.nucelff

#!/usr/bin/env python
"""Main interface to data scripts
"""
from argparse import ArgumentParser

from nucleon_elastic_ff.utilities import set_up_logger

from nucleon_elastic_ff.data.scripts import average
from nucleon_elastic_ff.data.scripts import tslice

LOGGER = set_up_logger("nucleon_elastic_ff")

PARSER = ArgumentParser(description="Run nucleon_elastic_ff scripts.")
PARSER.add_argument(
    "root", type=str, help="Root directory to look for files to slice or average."
)

PARSER.add_argument(
    "--slice",
    "-s",
    action="store_true",
    default=False,
    help="Slice files in time direction and shift source to origin."
    " Also multiply negative parity by minus one when slicing time."
    "See `nucleon_elastic_ff.data.scripts.tslice` for more info.",
)
PARSER.add_argument(
    "--tslice-fact",
    "-t",
    type=float,
    default=None,
    help="Interface for controlling factor for determening sclicing size."
    " E.g., if a a file has NT = 48 and tslice_fact is 0.5, only time"
    " slices from 0 to 23 are exported to the output file. Note that the source"
    " location is shifted before slicing. If this argument is specified,"
    " the code looks for files which match `spec_4D`",
)
PARSER.add_argument(
    "--average",
    "-a",
    action="store_true",
    default=False,
    help="Average time sliced files over different sources."
    " Looks for `formfac_4D_tslice` files."
    " See `nucleon_elastic_ff.data.scripts.average` for more info.",
)
PARSER.add_argument(
    "--average-spec",
    action="store_true",
    default=False,
    help="Average time sliced files over different sources, spin and parity."
    " Similar to `average` flag but looks for `spec_4D_tslice` files."
    " See `nucleon_elastic_ff.data.scripts.spec_average` for more info.",
)

PARSER.add_argument(
    "--overwrite",
    "-f",
    action="store_true",
    default=False,
    help="Overwrite hdf5 files if they already exist.",
)

PARSER.add_argument(
    "--n-expected-sources",
    "-n",
    type=int,
    default=None,
    help="Option passed to average sources. If specified, raise error if number of"
    " sources in one average group is different than specified.",
)

PARSER.add_argument(
    "--boundary-sign-flip",
    "-b",
    action="store_true",
    default=None,
    help="Flip sign of correlator when hopping over (temporal) boundaries."
    " Form factor correlators come with this sign already implemented"
    " (do not use this factor)."
    " Spectrum files need this factor."
    " If you do not specify this flag, it autodetects the correct behavior based on"
    " the name of the file.",
)

PARSER.add_argument(
    "--expected-sources",
    nargs="+",
    default=None,
    help=""
    " Checks named sources prior averaging. Only averages over expected sources,"
    " ignores other sources  and raises exception if not all sources are found."
    " If this flag is set, also the ``file-name-addition`` flag must be set."
    " Flag only used for averaging of time sliced files.",
)
PARSER.add_argument(
    "--file-name-addition",
    type=str,
    default=None,
    help="Appends string to the file name."
    " Flag only used for averaging of time sliced files.",
)


[docs]def main(): """Runs src average and or tslice. """ args = PARSER.parse_args() LOGGER.info("Running nucleon_elastic_ff scripts") LOGGER.info("Full log can be found in `nucleon_elastic_ff.log`") if args.slice: if args.tslice_fact is not None: boundary_sign_flip = ( True if args.boundary_sign_flip is None else args.boundary_sign_flip ) tslice.tslice( args.root, name_input="spec_4D", name_output="spec_4D_tslice", overwrite=args.overwrite, tslice_fact=args.tslice_fact, dset_patterns=["4D_correlator/x[0-9]+_y[0-9]+_z[0-9]+_t[0-9]+"], boundary_sign_flip=boundary_sign_flip, ) else: boundary_sign_flip = ( False if args.boundary_sign_flip is None else args.boundary_sign_flip ) tslice.tslice( args.root, overwrite=args.overwrite, boundary_sign_flip=boundary_sign_flip, ) if args.expected_sources is not None and args.file_name_addition is None: raise ValueError( "You must set `--file-name-addition` if you set `--expected-sources`" ) if args.average: average.source_average( args.root, overwrite=args.overwrite, n_expected_sources=args.n_expected_sources, expected_sources=args.expected_sources, file_name_addition=args.file_name_addition, ) if args.average_spec: average.spec_average( args.root, overwrite=args.overwrite, n_expected_sources=args.n_expected_sources, expected_sources=args.expected_sources, file_name_addition=args.file_name_addition, )
if __name__ == "__main__": main()