view preprocess_dexela_h5_filesystem.py @ 0:4d2a2268a17a draft

"planemo upload"
author mzhuang
date Thu, 23 Sep 2021 21:00:48 +0000
parents
children
line wrap: on
line source

import argparse
import glob
import os

import numpy as np
import time
from datetime import datetime

from hexrd.imageseries import omega
import pp_dexela
#from IPython import embed

# =============================================================================
# USER INPUT
# =============================================================================

# panel keys to MATCH INSTRUMENT FILE
panel_keys = ['FF1', 'FF2']
panel_opts = dict.fromkeys(panel_keys)

# !!!: hard coded options for each dexela for April 2017
panel_opts['FF1'] = [('add-row', 1944), ('add-column', 1296),('flip', 'v'), ]
panel_opts['FF2'] = [('add-row', 1944), ('add-column', 1296),('flip', 'h'), ]

# ==================== End Inputs (should not need to alter below this line)



def process_dexelas(file_names, samp_name, scan_number,
                    ostart, ostep, num_frames,
                    panel_opts, threshold):
    """
    wrapper for F2 dexela setup
    """
    ostop = ostart + num_frames*ostep
    omw = omega.OmegaWedges(num_frames)
    omw.addwedge(ostart, ostop, num_frames)

    for file_name in file_names:
        for key in panel_keys:
            if key.lower() in file_name:
                ppd = pp_dexela.PP_Dexela(
                    file_name,
                    omw,
                    panel_opts[key],
                    panel_id=key,
                    frame_start=fstart)
#                embed()
#                ppd=add_missing_pixel_gap(ppd)

                output_name = samp_name + '_' + \
                    str(scan_number) + '_' + \
                    file_name.split('/')[-1].split('.')[0]
                ppd.save_processed(output_name, threshold)
                head_tail = os.path.split(file_name)
                if head_tail[0] is not None:
                    os.system('cp -p ' + './' + output_name + '* ' + head_tail[0] + ' 2>/dev/null')

if __name__ == '__main__':
    #
    #  Run preprocessor
    #
    print("Running preprocessor....")
    parser = argparse.ArgumentParser(
        description="pre-process double Dexela images from F2")

    parser.add_argument('base_dir',
                        help="raw data path on chess daq", type=str)
    parser.add_argument('expt_name',
                        help="experiment name", type=str)
    parser.add_argument('samp_name',
                        help="sample name", type=str)
    parser.add_argument('scan_number',
                        help="ff scan number", type=int)

    parser.add_argument('-n', '--num-frames',
                        help="number of frames to read",
                        type=int, default=1441)
    parser.add_argument('-s', '--start-frame',
                        help="index of first data frame",
                        type=int, default=4)
    parser.add_argument('-t', '--threshold',
                        help="threshold for frame caches",
                        type=int, default=50)
    parser.add_argument('-o', '--ome-start',
                        help="start omega",
                        type=float, default=0.)
#    parser.add_argument('-d', '--ome-delta',
#                        help="delta omega",
#                        type=float, default=0.2498265093684941)

    parser.add_argument('-e', '--ome-end',
                        help="end omega",
                        type=float, default=360.)


    args = parser.parse_args()

    # strip args
    data_dir = args.base_dir
    expt_name = args.expt_name
    samp_name = args.samp_name
    scan_number = args.scan_number
    num_frames = args.num_frames
    fstart = args.start_frame
    threshold = args.threshold
    ostart = args.ome_start
    oend = args.ome_end
    ostep = (oend-ostart)/float(num_frames)

    print("== Running preprocessor .... processing ")
    now = datetime.now()
    print(now.strftime("%m/%d/%Y %H:%M:%S"))

    file_names = glob.glob(
        os.path.join(
            data_dir,
            expt_name,
            samp_name,
            str(scan_number),
            'ff',
            '*.h5')
    )
    path = os.path.join(data_dir, expt_name, samp_name, str(scan_number), 'ff', '*.h5')
    print("path = " + path)
    for f in file_names:
        print(f)

    check_files_exist = [os.path.exists(file_name) for file_name in file_names]
    if not np.all(check_files_exist):
        raise RuntimeError("files don't exist!")

    process_dexelas(file_names, samp_name, scan_number,
                    ostart, ostep, num_frames,
                    panel_opts, threshold)
    now = datetime.now()
    print(now.strftime("%m/%d/%Y %H:%M:%S"))
    print("== End of processing " + " ==")
    print("                                   ")