#!/usr/bin/env python3 # author J.Beale """ # aim make image file to input into pyFAI for initial detector beam-centre and detector distance calibration refer to Cristallina8M-calibration for complete protocol https://docs.google.com/document/d/1RoeUUogvRxX4M6uqGwkjf3dVJBabiMUx4ZxwcA5e9Dc/edit# # protocol take scan of LaB6 ## IMPORTANT ## - save image as photon-counts - in slic/run_control scale=beam energy - detector_geometry=TRUE - saves detector panels in their correct orientation ## scan inputs ## - <0.01 trans - motor scan > 10 um per step - 10 images per step, 100 steps - use scan.json as input for this script # usage python make-tiff.py -j -s -n # output creates a .npy file that can be loaded directly into pyFAI """ # modules from matplotlib import pyplot as plt import numpy as np from sfdata import SFScanInfo from tqdm import tqdm import argparse def convert_image( path_to_json, jungfrau, name ): # opens scan scan = SFScanInfo( path_to_json ) # step through scan and average files from each positions mean_image = [] for step in tqdm( enumerate(scan) ): # step is a SFDataFiles object subset = step[1] mean = np.mean( subset[ jungfrau ].data, axis=0 ) mean_image.append(mean) # sum averaged imaged sum_image = np.sum( mean_image, axis=0 ) # output to file np.save( "{0}.npy".format( name ), sum_image ) # create plot of summed, averaged scan fig, ax = plt.subplots() ax.imshow(sum_image, vmin=0, vmax=1000) plt.show() if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( "-j", "--jungfrau", help="name of the jungfrau used, i.e., JF17T16V01 for Cristallina MX", type=str, default="JF17T16V01" ) parser.add_argument( "-s", "--scan", help="path to json scan file", type=str, default="/sf/cristallina/data/p20590/raw/run0003/meta/scan.json" ) parser.add_argument( "-n", "--name", help="name of output file", type=str, default="sum_mean_scan" ) args = parser.parse_args() convert_image( args.scan, args.jungfrau, args.name )