Example #1
0
def main(args):
    assert args.cs.endswith('.cs'), "Input file must be a .cs file"
    assert args.o.endswith('.pkl'), "Output CTF parameters must be .pkl file"

    metadata = np.load(args.cs)
    N = len(metadata)
    log('{} particles'.format(N))

    ctf_params = np.zeros((N, 9))
    ctf_params[:,0] = metadata['blob/shape'][0][0]
    fields = ('blob/psize_A','ctf/df1_A','ctf/df2_A','ctf/df_angle_rad','ctf/accel_kv','ctf/cs_mm','ctf/amp_contrast','ctf/phase_shift_rad')
    for i,f in enumerate(fields):
        ctf_params[:,i+1] = metadata[f]
        if f in ('ctf/df_angle_rad', 'ctf/phase_shift_rad'): # convert to degrees
            ctf_params[:,i+1] *= (180/np.pi) 

    ctf.print_ctf_params(ctf_params[0])
    log('Saving {}'.format(args.o))
    with open(args.o,'wb') as f:
        pickle.dump(ctf_params.astype(np.float32), f)
    if args.png:
        import matplotlib.pyplot as plt
        ctf.plot_ctf(int(ctf_params[0,0]), ctf_params[0,1], ctf_params[0,2:])
        plt.savefig(args.png)
        log(args.png)
Example #2
0
def main(args):
    assert args.star.endswith('.star'), "Input file must be .star file"
    assert args.o.endswith('.pkl'), "Output CTF parameters must be .pkl file"
    if args.relion31:  # TODO: parse the data_optics block
        assert args.kv is not None, "--kv must be set manually with RELION 3.1 file format"
        assert args.cs is not None, "--cs must be set manually with RELION 3.1 file format"
        assert args.w is not None, "-w must be set manually with RELION 3.1 file format"

    s = starfile.Starfile.load(args.star, relion31=args.relion31)
    N = len(s.df)
    log('{} particles'.format(N))

    overrides = {}
    if args.kv is not None:
        log(f'Overriding accerlating voltage with {args.kv} kV')
        overrides[HEADERS[3]] = args.kv
    if args.cs is not None:
        log(f'Overriding spherical abberation with {args.cs} mm')
        overrides[HEADERS[4]] = args.cs
    if args.w is not None:
        log(f'Overriding amplitude contrast ratio with {args.w}')
        overrides[HEADERS[5]] = args.w
    if args.ps is not None:
        log(f'Overriding phase shift with {args.ps}')
        overrides[HEADERS[6]] = args.ps

    ctf_params = np.zeros((N, 9))
    ctf_params[:, 0] = args.D
    ctf_params[:, 1] = args.Apix
    for i, header in enumerate([
            '_rlnDefocusU', '_rlnDefocusV', '_rlnDefocusAngle', '_rlnVoltage',
            '_rlnSphericalAberration', '_rlnAmplitudeContrast',
            '_rlnPhaseShift'
    ]):
        ctf_params[:, i + 2] = s.df[
            header] if header not in overrides else overrides[header]
    log('CTF parameters for first particle:')
    ctf.print_ctf_params(ctf_params[0])
    log('Saving {}'.format(args.o))
    with open(args.o, 'wb') as f:
        pickle.dump(ctf_params.astype(np.float32), f)
    if args.png:
        import matplotlib.pyplot as plt
        assert args.D, 'Need image size to plot CTF'
        ctf.plot_ctf(args.D, args.Apix, ctf_params[0, 2:])
        plt.savefig(args.png)
        log(args.png)
Example #3
0
def main(args):
    assert args.cs.endswith('.cs'), "Input file must be a .cs file"
    assert args.o.endswith('.pkl'), "Output CTF parameters must be .pkl file"

    metadata = np.load(args.cs)
    N = len(metadata)
    log('{} particles'.format(N))

    # sometimes blob/shape, blob/psize_A are missing from the .cs file
    try:
        D = metadata['blob/shape'][0][0]
        Apix = metadata['blob/psize_A']
    except ValueError:
        assert args.D, "Must provide image size with -D"
        assert args.Apix, "Must provide pixel size with --Apix"
        D = args.D
        Apix = args.Apix

    ctf_params = np.zeros((N, 9))
    ctf_params[:, 0] = D
    ctf_params[:, 1] = Apix
    fields = ('ctf/df1_A', 'ctf/df2_A', 'ctf/df_angle_rad', 'ctf/accel_kv',
              'ctf/cs_mm', 'ctf/amp_contrast', 'ctf/phase_shift_rad')
    for i, f in enumerate(fields):
        ctf_params[:, i + 2] = metadata[f]
        if f in ('ctf/df_angle_rad',
                 'ctf/phase_shift_rad'):  # convert to degrees
            ctf_params[:, i + 2] *= (180 / np.pi)

    ctf.print_ctf_params(ctf_params[0])
    log('Saving {}'.format(args.o))
    with open(args.o, 'wb') as f:
        pickle.dump(ctf_params.astype(np.float32), f)
    if args.png:
        import matplotlib.pyplot as plt
        ctf.plot_ctf(int(ctf_params[0, 0]), ctf_params[0, 1], ctf_params[0,
                                                                         2:])
        plt.savefig(args.png)
        log(args.png)