예제 #1
0
def test_clash_variableoutput():
    import histgrinder.config
    from histgrinder.config import read_configuration
    import io

    print(histgrinder.config)
    # Can't specify OutputDOF without VariableOutput
    f = io.StringIO(r"""
---
Input: [ 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)', 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)' ]
OutputDOF: [ 'id0' ]
Function: afunction
Description: Test
    """)
    with pytest.raises(ValueError):
        read_configuration(f)

    # Can't specify Output and VariableOutput
    f = io.StringIO(r"""
---
Input: [ 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)', 'gaussians/gaus_(?P<id0>\d)(?P<id>\d)' ]
Output: [ 'gauDiv_{id0}' ]
VariableOutput: True
Function: afunction
Description: Test
    """)
    with pytest.raises(ValueError):
        read_configuration(f)
예제 #2
0
def test_read_config_from_filelike_object():
    from histgrinder.config import read_configuration
    c = read_configuration(open('tests/test_functional.yaml'))
    print(repr(c[0]))
    assert (repr(c[0]) == r"""Description: Testing1
Input: ['gaussians/gaus_(?P<id0>[23])(?P<id>\\d)', 'gaussians/gaus_5(?P<id>\\d)']
Output: ['gauDiv_{id0}{id}']
Function: histgrinder.example.transform_function_divide_ROOT, Parameters: {}"""
            )
    assert (repr(c[2]) == r"""Description: Testing3
Input: ['gaussians/gaus_(?P<id0>\\d)(?P<id>\\d)', 'gaussians/gaus_(?P<id0>\\d)(?P<id>\\d)']
VariableOutput: True, OutputDOF: ['id0']
Function: histgrinder.example.transform_function_divide2_ROOT_naming, Parameters: {'pattern': 'gauDiv3_{id0}'}"""
            )
예제 #3
0
def go():
    """ Application entry point """
    import logging

    import histgrinder
    from histgrinder.config import read_configuration, lookup_name
    from histgrinder.transform import Transformer

    # set up arguments
    from argparse import ArgumentParser

    parser = ArgumentParser(description="Histogram postprocessing script")
    parser.add_argument('-c', '--configfile', nargs='+',
                        help='YAML configuration file(s)')
    parser.add_argument('source', help='Input source, e.g. ROOT file')
    parser.add_argument('target', help='Output target, e.g. ROOT file')
    parser.add_argument('--inmodule',
                        default='histgrinder.io.root.ROOTInputModule',
                        help='Python class which implements an input module')
    parser.add_argument('--outmodule',
                        default='histgrinder.io.root.ROOTOutputModule',
                        help='Python class which implements an output module')
    parser.add_argument('--prefix',
                        help='Prefix to ignore in histogram locations')
    parser.add_argument('--loglevel', help='Set the logging level',
                        choices=['DEBUG', 'INFO', 'WARNING',
                                 'ERROR', 'CRITICAL'],
                        default='INFO')
    parser.add_argument('--defer', action='store_true', help='Defer processing of histograms until end of input loop')
    parser.add_argument('--delaywrite', action='store_true', help='Write histograms at once at end of job')
    args = parser.parse_args()

    logging.basicConfig(level=args.loglevel,
                        format='%(asctime)s | %(name)s | %(levelname)s | %(message)s')  # noqa: E501
    log = logging.getLogger(__name__)
    log.info(f"Histgrinder {histgrinder.__version__}: histogram postprocessor")

    # read configuration & set up transformations
    transformers = []
    for configfile in args.configfile:
        config = read_configuration(configfile)
        transformers += [Transformer(_) for _ in config]
    selectors = set()
    for transform in transformers:
        selectors.update(transform.inregexes)

    # Configure input
    im = lookup_name(args.inmodule)()
    in_configuration = {'source': args.source}
    if args.prefix:
        in_configuration['prefix'] = args.prefix
    im.configure(in_configuration)
    im.setSelectors(selectors)

    # Configure output
    om = lookup_name(args.outmodule)()
    out_configuration = {'target': args.target, 'delay': args.delaywrite}
    if args.prefix:
        out_configuration['prefix'] = args.prefix
    om.configure(out_configuration)

    # Warmup
    log.info("Warmup")
    for obj in im.warmup():
        for _ in transformers:
            _.consider(obj)

    log.info("Beginning loop")
    eventloop(im, om, transformers, args, log)
    log.info("Complete")
예제 #4
0
def test_read_nonexistent_config():
    from histgrinder.config import read_configuration
    with pytest.raises(FileNotFoundError):
        read_configuration('tests/missing.yaml')
예제 #5
0
def test_badconfig():
    from histgrinder.config import read_configuration
    c = read_configuration('tests/test_badconfig.yaml')
    assert c == []