Source code for paws.core.operations.IO.CALIBRATION.Fit2DToPONI
from collections import OrderedDict
import os
import numpy as np
import pyFAI
from ... import Operation as opmod
from ...Operation import Operation
inputs=OrderedDict(fit2d_file=None,wavelength_A=None)
outputs=OrderedDict(poni_dict=None,fit2d_dict=None)
[docs]class Fit2DToPONI(Operation):
"""Produce PONI calibration parameters from a Fit2D calibration result.
Reads in Fit2D calibration result from a text file,
converts it to a dict of PyFAI PONI parameters.
WARNING: Some developers have claimed that
the Fit2D software itself computes tilted geometries incorrectly.
If using actual Fit2D output with tilts,
it is suggested that a new calibration be attempted,
with a different package (something other than Fit2D).
Use tilts from Fit2D output at your own risk.
Format of text file for Fit2D parameters is expected to be:
directDist=____ # sample-detector
centerX=____ # beam center on detector, in pixels
centerY=____ # beam center on detector, in pixels
pixelX=____ # pixel width, microns
pixelY=____ # pixel height, microns
tilt=____ # degrees
tiltPlanRotation=____ # degrees
splineFile=____ # optional detector distortion correction file
"""
def __init__(self):
super(Fit2DToPONI,self).__init__(inputs,outputs)
self.input_doc['fit2d_file'] = 'text file describing Fit2D geometry'
self.input_doc['wavelength_A'] = 'wavelength in Angstroms'
self.output_doc['fit2d_dict'] = 'Fit2D calibration parameters'
self.output_doc['poni_dict'] = 'pyFAI calibration parameters'
[docs] def run(self):
fpath = self.inputs['fit2d_file']
fit2d_dict = OrderedDict()
for line in open(fpath,'r'):
kv = line.strip().split('=')
fit2d_dict[kv[0]] = float(kv[1])
# get wavelength in m
wl_m = self.inputs['wavelength_A']*1E-10
# use a pyFAI.AzimuthalIntegrator() to do the conversion
p = pyFAI.AzimuthalIntegrator(wavelength = wl_m)
p.setFit2D(
fit2d_dict['directDist'],
fit2d_dict['centerX'],
fit2d_dict['centerY'],
fit2d_dict['tilt'],
fit2d_dict['tiltPlanRotation'],
fit2d_dict['pixelX'],
fit2d_dict['pixelY'])
poni_dict = p.getPyFAI()
self.outputs['fit2d_dict'] = fit2d_dict
self.outputs['poni_dict'] = poni_dict