示例#1
0
def main(args=None):

    if args is None:
        args = sys.argv[1:]

    subcommand_descriptions = {
        'print': 'get information on model/phase/material properties',
        'arrivals': 'print list of phase arrivals',
        'paths': 'print ray path details',
        'plot-xt': 'plot traveltime vs distance curves',
        'plot-xp': 'plot ray parameter vs distance curves',
        'plot-rays': 'plot ray propagation paths',
        'plot': 'plot combination of ray and traveltime curves',
        'plot-model': 'plot velocity model',
        'list-models': 'list builtin velocity models',
        'list-phase-map': 'show translation table for classic phase names',
        'simplify-model': 'create a simplified version of a layered model',
        'scatter': 'show details about scattering at model interfaces'
    }

    usage = '''cake <subcommand> [options]

Subcommands:

    print          %(print)s
    arrivals       %(arrivals)s
    paths          %(paths)s
    plot-xt        %(plot_xt)s
    plot-xp        %(plot_xp)s
    plot-rays      %(plot_rays)s
    plot           %(plot)s
    plot-model     %(plot_model)s
    list-models    %(list_models)s
    list-phase-map %(list_phase_map)s
    simplify-model %(simplify_model)s
    scatter        %(scatter)s

To get further help and a list of available options for any subcommand run:

    cake <subcommand> --help

'''.strip() % d2u(subcommand_descriptions)

    usage_sub = 'cake %s [options]'
    if len(args) < 1:
        sys.exit('Usage: %s' % usage)

    command = args[0]
    descr = subcommand_descriptions.get(command, None)
    subusage = usage_sub % command

    if command == 'print':
        c = optparse((), ('model', 'phases', 'material', 'output_format'),
                     usage=subusage,
                     descr=descr)

        if 'model' in c:
            if c.output_format == 'textual':
                print(c.model)
                print()
            elif c.output_format == 'nd':
                cake.write_nd_model_fh(c.model, sys.stdout)

        if 'phases' in c:
            for phase in c.phases:
                print(phase)
            print()

        if 'material' in c:
            print(c.material.describe())
            print()

    elif command == 'arrivals':
        c = optparse(('model', 'phases', 'distances'),
                     ('zstart', 'zstop', 'as_degrees'),
                     usage=subusage,
                     descr=descr)

        print_arrivals(
            c.model,
            **c.getn('zstart', 'zstop', 'phases', 'distances', 'as_degrees'))

    elif command == 'paths':
        c = optparse(('model', 'phases'), ('zstart', 'zstop', 'as_degrees'),
                     usage=subusage,
                     descr=descr)

        mod = c.model
        for path in mod.gather_paths(**c.getn('phases', 'zstart', 'zstop')):
            print(path.describe(path.endgaps(c.zstart, c.zstop), c.as_degrees))

    elif command in ('plot-xt', 'plot-xp', 'plot-rays', 'plot'):
        if command in ('plot-xt', 'plot'):
            c = optparse(('model', 'phases'),
                         ('zstart', 'zstop', 'distances', 'as_degrees', 'vred',
                          'phase_colors'),
                         usage=subusage,
                         descr=descr)
        else:
            c = optparse(('model', 'phases'),
                         ('zstart', 'zstop', 'distances', 'as_degrees',
                          'aspect', 'shade_model', 'phase_colors'),
                         usage=subusage,
                         descr=descr)

        mod = c.model
        paths = mod.gather_paths(**c.getn('phases', 'zstart', 'zstop'))

        if c.distances is not None:
            arrivals = mod.arrivals(
                **c.getn('phases', 'zstart', 'zstop', 'distances'))
        else:
            arrivals = None

        if command == 'plot-xp':
            plot.my_xp_plot(paths,
                            c.zstart,
                            c.zstop,
                            c.distances,
                            c.as_degrees,
                            phase_colors=c.phase_colors)
        elif command == 'plot-xt':
            plot.my_xt_plot(paths,
                            c.zstart,
                            c.zstop,
                            c.distances,
                            c.as_degrees,
                            vred=c.vred,
                            phase_colors=c.phase_colors)
        elif command == 'plot-rays':
            if c.as_degrees:
                plot.my_rays_plot_gcs(mod,
                                      paths,
                                      arrivals,
                                      c.zstart,
                                      c.zstop,
                                      c.distances,
                                      phase_colors=c.phase_colors)
            else:
                plot.my_rays_plot(mod,
                                  paths,
                                  arrivals,
                                  c.zstart,
                                  c.zstop,
                                  c.distances,
                                  aspect=c.aspect,
                                  shade_model=c.shade_model,
                                  phase_colors=c.phase_colors)

        elif command == 'plot':
            plot.my_combi_plot(mod,
                               paths,
                               arrivals,
                               c.zstart,
                               c.zstop,
                               c.distances,
                               c.as_degrees,
                               vred=c.vred,
                               phase_colors=c.phase_colors)

    elif command in ('plot-model', ):
        c = optparse(('model', ), (), usage=subusage, descr=descr)
        mod = c.model
        plot.my_model_plot(mod)

    elif command in ('simplify-model', ):
        c = optparse(('model', ), ('accuracy', ), usage=subusage, descr=descr)
        my_simplify_model(c.model, c.accuracy)

    elif command in ('list-models', ):
        c = optparse((), (), usage=subusage, descr=descr)
        for x in cake.builtin_models():
            print(x)

    elif command in ('list-phase-map', ):
        c = optparse((), (), usage=subusage, descr=descr)
        defs = cake.PhaseDef.classic_definitions()
        for k in sorted(defs.keys()):
            print('%-15s: %s' % (k, ', '.join(defs[k])))

    elif command in ('scatter', ):
        c = optparse(('model', ), ('slowness', 'interface', 'as_degrees'),
                     usage=subusage,
                     descr=descr)

        print_scatter(c.model, p=c.slowness, interface=c.interface)

    elif command in ('help-options', ):
        optparse((), ('model', 'accuracy', 'slowness', 'interface', 'phases',
                      'distances', 'zstart', 'zstop', 'distances',
                      'as_degrees', 'material', 'vred'),
                 usage='cake help-options',
                 descr='list all available options')

    elif command in ('--help', '-h', 'help'):
        sys.exit('Usage: %s' % usage)

    else:
        sys.exit('cake: no such subcommand: %s' % command)
示例#2
0
文件: cake.py 项目: emolch/pyrocko
def main(args=None):

    if args is None:
        args = sys.argv[1:]

    subcommand_descriptions = {
        'print':          'get information on model/phase/material properties',
        'arrivals':       'print list of phase arrivals',
        'paths':          'print ray path details',
        'plot-xt':        'plot traveltime vs distance curves',
        'plot-xp':        'plot ray parameter vs distance curves',
        'plot-rays':      'plot ray propagation paths',
        'plot':           'plot combination of ray and traveltime curves',
        'plot-model':     'plot velocity model',
        'list-models':    'list builtin velocity models',
        'list-phase-map': 'show translation table for classic phase names',
        'simplify-model': 'create a simplified version of a layered model',
        'scatter':        'show details about scattering at model interfaces'}

    usage = '''cake <subcommand> [options]

Subcommands:

    print          %(print)s
    arrivals       %(arrivals)s
    paths          %(paths)s
    plot-xt        %(plot_xt)s
    plot-xp        %(plot_xp)s
    plot-rays      %(plot_rays)s
    plot           %(plot)s
    plot-model     %(plot_model)s
    list-models    %(list_models)s
    list-phase-map %(list_phase_map)s
    simplify-model %(simplify_model)s
    scatter        %(scatter)s

To get further help and a list of available options for any subcommand run:

    cake <subcommand> --help

'''.strip() % d2u(subcommand_descriptions)

    usage_sub = 'cake %s [options]'
    if len(args) < 1:
        sys.exit('Usage: %s' % usage)

    command = args[0]
    descr = subcommand_descriptions.get(command, None)
    subusage = usage_sub % command

    if command == 'print':
        c = optparse(
            (), ('model', 'phases', 'material', 'output_format'),
            usage=subusage, descr=descr)

        if 'model' in c:
            if c.output_format == 'textual':
                print(c.model)
                print()
            elif c.output_format == 'nd':
                cake.write_nd_model_fh(c.model, sys.stdout)

        if 'phases' in c:
            for phase in c.phases:
                print(phase)
            print()

        if 'material' in c:
            print(c.material.describe())
            print()

    elif command == 'arrivals':
        c = optparse(
            ('model', 'phases', 'distances'),
            ('zstart', 'zstop', 'as_degrees'), usage=subusage, descr=descr)

        print_arrivals(
            c.model,
            **c.getn('zstart', 'zstop', 'phases', 'distances', 'as_degrees'))

    elif command == 'paths':
        c = optparse(
            ('model', 'phases'),
            ('zstart', 'zstop', 'as_degrees'),
            usage=subusage, descr=descr)

        mod = c.model
        for path in mod.gather_paths(**c.getn('phases', 'zstart', 'zstop')):
            print(path.describe(path.endgaps(c.zstart, c.zstop), c.as_degrees))

    elif command in ('plot-xt', 'plot-xp', 'plot-rays', 'plot'):
        if command in ('plot-xt', 'plot'):
            c = optparse(
                ('model', 'phases'),
                ('zstart', 'zstop', 'distances', 'as_degrees', 'vred',
                 'phase_colors'),
                usage=subusage, descr=descr)
        else:
            c = optparse(
                ('model', 'phases'),
                ('zstart', 'zstop', 'distances', 'as_degrees', 'aspect',
                 'shade_model', 'phase_colors'),
                usage=subusage, descr=descr)

        mod = c.model
        paths = mod.gather_paths(**c.getn('phases', 'zstart', 'zstop'))

        if c.distances is not None:
            arrivals = mod.arrivals(
                **c.getn('phases', 'zstart', 'zstop', 'distances'))
        else:
            arrivals = None

        if command == 'plot-xp':
            plot.my_xp_plot(
                paths, c.zstart, c.zstop, c.distances, c.as_degrees,
                phase_colors=c.phase_colors)
        elif command == 'plot-xt':
            plot.my_xt_plot(
                paths, c.zstart, c.zstop, c.distances, c.as_degrees,
                vred=c.vred, phase_colors=c.phase_colors)
        elif command == 'plot-rays':
            if c.as_degrees:
                plot.my_rays_plot_gcs(
                    mod, paths, arrivals, c.zstart, c.zstop, c.distances,
                    phase_colors=c.phase_colors)
            else:
                plot.my_rays_plot(
                    mod, paths, arrivals, c.zstart, c.zstop, c.distances,
                    aspect=c.aspect, shade_model=c.shade_model,
                    phase_colors=c.phase_colors)

        elif command == 'plot':
            plot.my_combi_plot(
                mod, paths, arrivals, c.zstart, c.zstop, c.distances,
                c.as_degrees, vred=c.vred, phase_colors=c.phase_colors)

    elif command in ('plot-model',):
        c = optparse(('model',), (), usage=subusage, descr=descr)
        mod = c.model
        plot.my_model_plot(mod)

    elif command in ('simplify-model',):
        c = optparse(('model',), ('accuracy',), usage=subusage, descr=descr)
        my_simplify_model(c.model, c.accuracy)

    elif command in ('list-models',):
        c = optparse((), (), usage=subusage, descr=descr)
        for x in cake.builtin_models():
            print(x)

    elif command in ('list-phase-map',):
        c = optparse((), (), usage=subusage, descr=descr)
        defs = cake.PhaseDef.classic_definitions()
        for k in sorted(defs.keys()):
            print('%-15s: %s' % (k, ', '.join(defs[k])))

    elif command in ('scatter',):
        c = optparse(
            ('model',),
            ('slowness', 'interface', 'as_degrees'),
            usage=subusage, descr=descr)

        print_scatter(c.model, p=c.slowness, interface=c.interface)

    elif command in ('help-options',):
        optparse(
            (),
            ('model', 'accuracy', 'slowness', 'interface', 'phases',
             'distances', 'zstart', 'zstop', 'distances', 'as_degrees',
             'material', 'vred'),
            usage='cake help-options', descr='list all available options')

    elif command in ('--help', '-h', 'help'):
        sys.exit('Usage: %s' % usage)

    else:
        sys.exit('cake: no such subcommand: %s' % command)
示例#3
0
def my_simplify_model(mod, accuracy):
    mod_simple = mod.simplify(max_rel_error=accuracy)
    cake.write_nd_model_fh(mod_simple, sys.stdout)
示例#4
0
文件: cake.py 项目: emolch/pyrocko
def my_simplify_model(mod, accuracy):
    mod_simple = mod.simplify(max_rel_error=accuracy)
    cake.write_nd_model_fh(mod_simple, sys.stdout)