Ejemplo n.º 1
0
def main():
    parser = argparse.ArgumentParser(
        description='Convert 3d segy data to binary file.')
    parser.add_argument('input', help='input segy file')
    parser.add_argument('output', help='output json bin file')
    parser.add_argument('-b',
                        '--bounds',
                        help='bounding box',
                        type=six_floats,
                        metavar='"xmin xmax ymin ymax zmin zmax"',
                        required=True)
    parser.add_argument('-s',
                        '--size',
                        help='num nodes at x y direction',
                        type=int,
                        nargs=2,
                        required=True)

    args = parser.parse_args()

    data, header, trace_header = read_segy(file(args.input, 'rb'))

    save_bin(args.output, data.reshape([
        data.shape[0],
    ] + args.size[::-1]), args.bounds)
Ejemplo n.º 2
0
def main():
    parser = argparse.ArgumentParser(description = 'Convert 2d segy data to binary file.')
    parser.add_argument('input', help='input segy file')
    parser.add_argument('output', help='output json bin file')
    parser.add_argument('-b', '--bounds', help='bounding box', type=four_floats, metavar='"xmin xmax ymin ymax"', required = False)
    parser.add_argument('-c', '--scale-coords', help='scale coords', type=float, default=1.0, metavar='SCALE', required = False)
    parser.add_argument('-v', '--scale-values', help='scale values', type=float, default=1.0, metavar='SCALE', required = False)
    
    args = parser.parse_args()

    data, header, trace_header = read_segy(file(args.input, 'rb'))
    
    # get dy
    dy = header['dt'] * args.scale_coords
    by = dy * header['ns']
    
    # get dx
    dx1 = trace_header['GroupX'][1] - trace_header['GroupX'][0]
    dx2 = trace_header['GroupY'][1] - trace_header['GroupY'][0]
    dx = (dx1**2 + dx2**2)**0.5 * args.scale_coords
    bx = dx * header['ntraces']
    
    bounds = [0.0, bx, 0.0, by]
    
    if args.bounds:
        bounds = args.bounds
    
    save_bin(args.output, data * args.scale_values, bounds)
Ejemplo n.º 3
0
def main():
    parser = argparse.ArgumentParser(
        description="Generate Ricker impulse samples.")

    parser.add_argument("start", type=float, help="samples start time, s")
    parser.add_argument("end", type=float, help="samples end time, s")
    parser.add_argument("num", type=int, help="num samples")
    parser.add_argument("freq", type=float, help="impulse frequency, Hz")
    parser.add_argument("out", type=str, help="OUT binary samples")
    parser.add_argument('-d',
                        '--display',
                        help='print data to screen',
                        action='store_true')
    parser.add_argument('-z',
                        '--zero',
                        help='start data from zero time',
                        action='store_true')

    args = parser.parse_args()

    time_samples = np.linspace(args.start, args.end, args.num)

    data = ricker(time_samples, args.freq)
    bbox = [args.start, args.end]
    if args.zero:
        bbox = [0.0, args.end - args.start]
    save_bin(args.out, data, bbox)

    if args.display:
        for i in range(args.num):
            t = time_samples[i]
            if args.zero:
                t -= args.start
            print t, data[i]
def main():
    parser = argparse.ArgumentParser(description='Reshape 3D data.')
    parser.add_argument('input', help='input file')
    parser.add_argument('output', help='output file')
    parser.add_argument('-s',
                        '--size',
                        help='number of nodes at x, y, z-direction',
                        type=int,
                        nargs=3,
                        required=True)

    args = parser.parse_args()

    jd, d = load_bin(args.input)
    b = jd['bbox']
    s = jd['size']
    n = args.size
    x = np.linspace(b[0], b[1], s[0])
    y = np.linspace(b[2], b[3], s[1])
    z = np.linspace(b[4], b[5], s[2])

    newx = np.linspace(b[0], b[1], n[0])
    newy = np.linspace(b[2], b[3], n[1])
    newz = np.linspace(b[4], b[5], n[2])
    f = RegularGridInterpolator(points=(z, y, x), values=d, fill_value=None)
    z, y, x = np.meshgrid(newz, newy, newx, indexing='ij')
    data = f((z.ravel(), y.ravel(), x.ravel()))
    save_bin(args.output, data.reshape(n[::-1]), jd['bbox'])
def main():
    parser = argparse.ArgumentParser(description='Reshape 2D data.')
    parser.add_argument('input', help='input file')
    parser.add_argument('output', help='output file')
    parser.add_argument('-s',
                        '--size',
                        help='number of nodes at x, y-direction',
                        type=int,
                        nargs=2,
                        required=True)

    args = parser.parse_args()

    jd, d = load_bin(args.input)
    b = jd['bbox']
    s = jd['size']
    n = args.size
    x = np.linspace(b[0], b[1], s[0])
    y = np.linspace(b[2], b[3], s[1])

    newx = np.linspace(b[0], b[1], n[0])
    newy = np.linspace(b[2], b[3], n[1])

    f = RectBivariateSpline(y, x, d, kx=1, ky=1)

    data = f(newy, newx)

    save_bin(args.output, data, jd['bbox'])
def main():
    parser = argparse.ArgumentParser(
        description='Load faults from txt file and create binary model.')
    parser.add_argument('faults', help='input txt file with faults')
    parser.add_argument('model', help='input bin file with model')
    parser.add_argument('out_faults', help='output binary file with faults')
    parser.add_argument('-w',
                        '--width',
                        help='width of fault',
                        type=float,
                        required=True)
    args = parser.parse_args()

    faults = load_faults(args.faults)

    jd, d = load_bin(args.model)
    bb = jd['bbox']
    x0 = np.array([bb[0], bb[2], bb[4]])
    x1 = np.array([bb[1], bb[3], bb[5]])
    h = (x1 - x0) / np.array(d.shape[::-1])
    print "H=", h

    data = np.full_like(d, 0.0)
    for f in faults.keys():
        print 'Fault', f
        fill_fault(faults[f], data, x0, h, args.width)

    save_bin(args.out_faults, data, jd['bbox'])
Ejemplo n.º 7
0
def main():
    parser = argparse.ArgumentParser(description = 'Convert txt data to binary file.')
    parser.add_argument('input', help='input txt file')
    parser.add_argument('output', help='output json bin file')
    parser.add_argument('-b', '--bounds', help='bounding box', type=six_floats, metavar='"xmin xmax ymin ymax zmin zmax"', required = False)
    parser.add_argument('-s', '--shape', help='shape', type=int, metavar='x y z', nargs=3, required = True)
    
    args = parser.parse_args()

    data = np.loadtxt(args.input)
    
    s = args.shape
    bounds = [0.0, s[0]]
    if s[1] > 1:
        bounds += [0.0, s[1]]
        if s[2] > 1:
            bounds += [0.0, s[2]]
    
    if args.bounds:
        bounds = args.bounds
    
    s1 = [s[0],]
    if s[1] > 1:
        s1 = [s[1],]+s1
    if s[2] > 1:
        s1 = [s[2],]+s1
    
    data = data.reshape(s1)
    
    save_bin(args.output, data, bounds)
Ejemplo n.º 8
0
def main():
    parser = argparse.ArgumentParser(
        description='Merge binary files by y-axis.')
    parser.add_argument('output', help='output json bin file')
    parser.add_argument('files', help='files to merge', nargs="+")
    parser.add_argument('-y',
                        '--yspacing',
                        help='spacing at y direction',
                        type=float,
                        required=True)

    args = parser.parse_args()

    ny = len(args.files)
    data = None
    bbox = None
    cnt = 0
    for i in args.files:
        jd, d = load_bin(i)
        if cnt == 0:
            data = np.zeros([d.shape[0], ny, d.shape[1]], dtype=np.float)
        data[:, cnt, :] = d
        cnt += 1
        bbox = jd['bbox']

    bb = [bbox[0], bbox[1], 0.0, ny * args.yspacing, bbox[2], bbox[3]]
    save_bin(args.output, data, bbox=bb)
def main():
    parser = argparse.ArgumentParser(
        description='Create 3D model from 2D maps.')
    parser.add_argument('output', help='output file')
    parser.add_argument('layers', help='layers files', nargs="+")
    parser.add_argument('-l',
                        '--values',
                        help='values for layers',
                        type=file,
                        required=True)
    parser.add_argument('-z',
                        '--zcoords',
                        help='values for z coordinates',
                        type=str,
                        required=True)

    args = parser.parse_args()

    layers = []
    jd = []
    for i in args.layers:
        j, d = load_layer(i)
        layers.append(d)
        jd.append(j)

    layers[0] += 1.0
    layers[-1] -= 1.0

    v = load_values(args.values, layers[0].shape)

    if len(v) != len(layers) - 1:
        raise argparse.ArgumentError(
            "number of layers and values should be the same")

    n = layers[0].shape

    t, z = load_bin(args.zcoords)

    data = np.zeros((z.shape[0], n[0], n[1]))
    for j in range(n[0]):
        print 'Procession %s of %s' % (j, n[0])
        for i in range(n[1]):
            #for k in range(n[2]):
            for m in range(len(layers) - 1):
                l1 = layers[m][j][i]
                l2 = layers[m + 1][j][i]
                #print l1,l2, z[k]
                #if z[k] <= l1 and z[k] >= l2:
                #print 'AAA'
                #    data[k][j][i] = v[m]
                #    break
                data[:, j, i] += (data[:, j, i] <= 0.0) * (
                    (z[:, j, i] <= l1) & (z[:, j, i] >= l2)) * v[m][j, i]

    print 'Min max data %s %s' % (data.min(), data.max())

    save_bin(args.output, data,
             jd[0]['bbox'] + [float(z.min()), float(z.max())])
Ejemplo n.º 10
0
def main():
    parser = argparse.ArgumentParser(description = 'Create data with constant value like existing array.')
    parser.add_argument('input', help='input file')
    parser.add_argument('output', help='output file')
    parser.add_argument('-a', '--value', help='value', type=float, required = True)
    
    args = parser.parse_args()
    jd, data = load_bin(args.input)
    
    save_bin(args.output, np.full_like(data, args.value), jd['bbox'])
Ejemplo n.º 11
0
def main():
    parser = argparse.ArgumentParser(
        description='Slice 3D data by one coordinate.')
    parser.add_argument('input', help='input file')
    parser.add_argument('-a',
                        '--value',
                        help='coordinate value',
                        type=float,
                        required=True)
    parser.add_argument('-c',
                        '--coord',
                        help='coordinate index -- 0, 1, or 2',
                        type=int,
                        required=True)
    parser.add_argument('output', help='output file')

    args = parser.parse_args()

    jd, d = load_bin(args.input)
    b = jd['bbox']
    s = jd['size']
    x = np.linspace(b[0], b[1], s[0])
    y = np.linspace(b[2], b[3], s[1])
    z = np.linspace(b[4], b[5], s[2])
    """
    f = RegularGridInterpolator(points = (z, y, x), values = d, fill_value = None)

    c = np.loadtxt(args.coords)
    
    data = f((c[:,2], c[:,1], c[:,0]))
    
    for i in data:
        print i
    """
    if args.coord == 1:
        if args.value >= b[2] and args.value <= b[3]:
            h = (b[3] - b[2]) / s[1]
            print "Y spacing", h
            ind = int((args.value - b[2]) / h)
            print "Y index", ind
            ind2 = ind + 1
            y1 = y[ind]
            y2 = y[ind2]
            print "Interpolate between", y1, y2
            c1 = (y2 - args.value) / (y2 - y1)
            c2 = 1.0 - c1
            newd = d[:, ind, :] * c1 + d[:, ind2, :] * c2
            save_bin(args.output, newd, [b[0], b[1], b[4], b[5]])
    else:
        print "Invalid coord value:", args.coord
def main():
    parser = argparse.ArgumentParser(
        description='Convert Irap Classical Grid (ASCII) to binary data.')
    parser.add_argument('irap_file', help='irap file to parse')
    parser.add_argument('json_file', help='save to file')
    parser.add_argument('-c',
                        '--comment',
                        help='add comment to file',
                        type=str)
    parser.add_argument(
        '-p',
        '--crop',
        help=
        'crop data, "xmin, xmax, ymin, ymax", you can use numpy notation i.e. negative indexes',
        type=four_ints,
        metavar='"xmin xmax ymin ymax"')
    parser.add_argument('-v',
                        '--verbose',
                        help='verbose output',
                        action='store_true')

    args = parser.parse_args()

    if args.verbose:
        print 'Reading file "%s"' % args.irap_file
    (hx, hy), (xmin, xmax, ymin,
               ymax), data = irap_parser(args.irap_file, args.crop)
    if args.verbose:
        print 'Saving to "%s"' % args.json_file
    jd = save_bin(args.json_file,
                  data, (xmin, xmax, ymin, ymax),
                  comment=args.comment,
                  command=" ".join(sys.argv[:]),
                  verbose=args.verbose)
Ejemplo n.º 13
0
def main():
    parser = argparse.ArgumentParser(
        description='Clip (limit) the values in an array.')
    parser.add_argument('input', help='input file')
    parser.add_argument('output', help='output file')
    parser.add_argument('-b',
                        '--bounds',
                        help='bounds for values',
                        type=two_floats,
                        metavar='"min max"',
                        required=True)

    args = parser.parse_args()
    jd, data = load_bin(args.input)

    save_bin(args.output, np.clip(data, args.bounds[0], args.bounds[1]),
             jd['bbox'])
Ejemplo n.º 14
0
def main():
    parser = argparse.ArgumentParser(
        description='Scale all values at bin file.')
    parser.add_argument('input', help='input file')
    parser.add_argument('output', help='output file')
    parser.add_argument('-s',
                        '--scale',
                        help='scale value',
                        type=float,
                        required=True)

    args = parser.parse_args()
    jd, data = load_bin(args.input)

    data *= args.scale

    save_bin(args.output, data, jd['bbox'])
Ejemplo n.º 15
0
def main():
    parser = argparse.ArgumentParser(description = 'Place 3D data (input1) inside other 3D data (input2).')
    parser.add_argument('input1', help='input1 file')
    parser.add_argument('input2', help='input2 file')
    parser.add_argument('output', help='output file')
    parser.add_argument('-i', '--index', help='index', type=int, nargs=3, required = True)
    
    args = parser.parse_args()

    jd1, d1 = load_bin(args.input1)
    jd2, d2 = load_bin(args.input2)
    bb = jd1['bbox']
    i = args.index
    d2[i[2]:i[2]+d1.shape[0], i[1]:i[1]+d1.shape[1], i[0]:i[0]+d1.shape[2]] = d1
    
    
    save_bin(args.output, d2, jd2['bbox'])
Ejemplo n.º 16
0
def main():
    parser = argparse.ArgumentParser(description='Set values between fault.')
    parser.add_argument('input', help='input file')
    parser.add_argument('f1', help='fault bottom')
    parser.add_argument('f2', help='fault top')
    parser.add_argument('output', help='output file')
    parser.add_argument('-v',
                        '--value',
                        help='fault value',
                        type=float,
                        required=True)

    args = parser.parse_args()
    jd, data = load_bin(args.input)

    bb = jd['bbox']
    xl = np.linspace(bb[0], bb[1], data.shape[1])
    yl = np.linspace(bb[2], bb[3], data.shape[0])

    print bb

    f1 = np.loadtxt(args.f1)
    ff1 = interpolate.interp1d(f1[:, 0],
                               f1[:, 1] + 150.0,
                               bounds_error=False,
                               fill_value='extrapolate')
    f2 = np.loadtxt(args.f2)
    ff2 = interpolate.interp1d(f2[:, 0],
                               f2[:, 1] + 150.0,
                               bounds_error=False,
                               fill_value='extrapolate')

    rmin = min(f1[:, 0].min(), f2[:, 0].min())
    rmax = max(f1[:, 0].max(), f2[:, 0].max())

    for i in range(data.shape[1]):
        if xl[i] < rmin or xl[i] > rmax:
            continue
        y1 = ff1(xl[i])
        y2 = ff2(xl[i])
        for j in range(data.shape[0]):
            if yl[j] >= y1 and yl[j] <= y2:
                data[j, i] = args.value

    save_bin(args.output, data, jd['bbox'])
Ejemplo n.º 17
0
def main():
    parser = argparse.ArgumentParser(description = 'Create 3D model from 2D maps.')
    parser.add_argument('output', help='output file')
    parser.add_argument('layers', help='layers files', nargs="+")
    parser.add_argument('-b', '--bounds', help='bounds at Z-direction', type=two_floats, metavar='"zmin zmax"', required = True)
    parser.add_argument('-n', '--nodes', help='number of nodes at z-direction', type=int, required = True)
    parser.add_argument('-l', '--values', help='values for layers', type=file, required = True)
    
    args = parser.parse_args()
    
    
    layers = []
    jd = []
    for i in args.layers:
        j, d = load_layer(i)
        layers.append(d)
        jd.append(j)
    layers = [np.full_like(layers[0], args.bounds[0]+1.0)] + layers
    layers = layers + [np.full_like(layers[0], args.bounds[1]-1.0)]
    
    v = np.loadtxt(args.values)
    if len(v) != len(layers)-1:
        raise argparse.ArgumentError("number of layers and values should be the same")
    
    n = layers[0].shape
    
    z = np.linspace(args.bounds[0], args.bounds[1], args.nodes)
    #print z
    data = np.zeros((args.nodes, n[0], n[1]))
    for j in range(n[0]):
        print 'Procession %s of %s' % (j, n[0])
        for i in range(n[1]):
            #for k in range(n[2]):
                for m in range(len(layers)-1):
                    l1 = layers[m][j][i]
                    l2 = layers[m+1][j][i]
                    #print l1,l2, z[k]
                    #if z[k] <= l1 and z[k] >= l2:
                        #print 'AAA'
                    #    data[k][j][i] = v[m]
                    #    break
                    data[:,j,i] += (data[:,j,i] <= 0.0) * ((z < l1) & (z > l2)) * v[m]
    
    print 'Min max data %s %s' % (data.min(), data.max())
    save_bin(args.output, data, jd[0]['bbox'] + args.bounds, command = " ".join(sys.argv[:]))
Ejemplo n.º 18
0
def main():
    parser = argparse.ArgumentParser(description='Evaluate any expression.')
    parser.add_argument('expr', help='expression', type=str)
    parser.add_argument('output', help='output file')
    parser.add_argument('-a', help='a-parameter', type=str, required=True)
    parser.add_argument('-b', help='b-parameter', type=str)
    parser.add_argument('-c', help='c-parameter', type=str)
    parser.add_argument('-d', help='d-parameter', type=str)

    args = parser.parse_args()

    a = b = c = d = None
    jd, a = load_bin(args.a)
    if args.b:
        jd, b = load_bin(args.b)
    if args.c:
        jd, c = load_bin(args.c)
    if args.d:
        jd, d = load_bin(args.d)

    data = eval(args.expr)

    save_bin(args.output, data, jd['bbox'])
Ejemplo n.º 19
0
def main():
    parser = argparse.ArgumentParser(
        description='Convert legacy vtk file to bin file.')
    parser.add_argument('input', help='input vtk file')
    parser.add_argument('output', help='output json bin file')
    parser.add_argument('-c',
                        '--component',
                        help='component to save',
                        type=str,
                        required=True)

    args = parser.parse_args()

    data, h, o, s = read_vtk(args.input)
    bbox = [
        o[0], o[0] + h[0] * s[0], o[1], o[1] + h[1] * s[1], o[2],
        o[2] + h[2] * s[2]
    ]

    if data.has_key(args.component):
        save_bin(args.output, data[args.component], bbox=bbox)
    else:
        print 'Unknown component "%s", components: %s' % (args.component,
                                                          data.keys())