本文整理汇总了Python中pyFAI.azimuthalIntegrator.AzimuthalIntegrator.getFit2D方法的典型用法代码示例。如果您正苦于以下问题:Python AzimuthalIntegrator.getFit2D方法的具体用法?Python AzimuthalIntegrator.getFit2D怎么用?Python AzimuthalIntegrator.getFit2D使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyFAI.azimuthalIntegrator.AzimuthalIntegrator
的用法示例。
在下文中一共展示了AzimuthalIntegrator.getFit2D方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Refinment2D
# 需要导入模块: from pyFAI.azimuthalIntegrator import AzimuthalIntegrator [as 别名]
# 或者: from pyFAI.azimuthalIntegrator.AzimuthalIntegrator import getFit2D [as 别名]
class Refinment2D(object):
"""
refine the parameters from image itself ...
(Jerome est-ce que tu peux elaborer un petit peu plus ???)
"""
def __init__(self, img, ai=None):
"""
@param img: raw image we are working on
@type img: ndarray
@param ai: azimuhal integrator we are working on
@type ai: pyFAI.azimuthalIntegrator.AzimutalIntegrator
"""
self.img = img
if ai is None:
self.ai = AzimuthalIntegrator()
else:
self.ai = ai
def get_shape(self):
return self.img.shape
shape = property(get_shape)
def reconstruct(self, tth, I):
"""
Reconstruct a perfect image according to 2th / I given in
input
@param tth: 2 theta array
@type tth: ndarray
@param I: intensity array
@type I: ndarray
@return: a reconstructed image
@rtype: ndarray
"""
return numpy.interp(self.ai.twoThetaArray(self.shape), tth, I)
def diff_tth_X(self, dx=0.1):
"""
Jerome peux-tu décrire de quoi il retourne ???
@param dx: ???
@type: float ???
@return: ???
@rtype: ???
"""
f = self.ai.getFit2D()
fp = f.copy()
fm = f.copy()
fm["centerX"] -= dx / 2.0
fp["centerX"] += dx / 2.0
ap = AzimuthalIntegrator()
am = AzimuthalIntegrator()
ap.setFit2D(**fp)
am.setFit2D(**fm)
dtthX = (ap.twoThetaArray(self.shape) - am.twoThetaArray(self.shape)) / dx
tth, I = self.ai.xrpd(self.img, max(self.shape))
dI = SGModule.getSavitzkyGolay(I, npoints=5, degree=2, order=1) / (tth[1] - tth[0])
dImg = self.reconstruct(tth, dI)
return (dtthX * dImg).sum()
def diff_tth_tilt(self, dx=0.1):
"""
idem ici ???
@param dx: ???
@type dx: float ???
@return: ???
@rtype: ???
"""
f = self.ai.getFit2D()
fp = f.copy()
fm = f.copy()
fm["tilt"] -= dx / 2.0
fp["tilt"] += dx / 2.0
ap = AzimuthalIntegrator()
am = AzimuthalIntegrator()
ap.setFit2D(**fp)
am.setFit2D(**fm)
dtthX = (ap.twoThetaArray(self.shape) - am.twoThetaArray(self.shape)) / dx
tth, I = self.ai.xrpd(self.img, max(self.shape))
dI = SGModule.getSavitzkyGolay(I, npoints=5, degree=2, order=1) / (tth[1] - tth[0])
dImg = self.reconstruct(tth, dI)
return (dtthX * dImg).sum()
def diff_Fit2D(self, axis="all", dx=0.1):
"""
???
@param axis: ???
@type axis: ???
@param dx: ???
@type dx: ???
@return: ???
@rtype: ???
#.........这里部分代码省略.........
示例2: CalibrationData
# 需要导入模块: from pyFAI.azimuthalIntegrator import AzimuthalIntegrator [as 别名]
# 或者: from pyFAI.azimuthalIntegrator.AzimuthalIntegrator import getFit2D [as 别名]
#.........这里部分代码省略.........
if self.cake_geometry._polarization is not None:
if self.img_data.img_data.shape != self.cake_geometry._polarization.shape:
# resetting the integrator if the polarization correction matrix has not the same shape as the image
self.cake_geometry.reset()
t1 = time.time()
res = self.cake_geometry.integrate2d(self.img_data._img_data, dimensions[0], dimensions[1], method=method,
mask=mask,
unit=unit, polarization_factor=polarization_factor)
logger.info('2d integration of {}: {}s.'.format(os.path.basename(self.img_data.filename), time.time() - t1))
self.cake_img = res[0]
self.cake_tth = res[1]
self.cake_azi = res[2]
return self.cake_img
def create_point_array(self, points, points_ind):
res = []
for i, point_list in enumerate(points):
if point_list.shape == (2,):
res.append([point_list[0], point_list[1], points_ind[i]])
else:
for point in point_list:
res.append([point[0], point[1], points_ind[i]])
return np.array(res)
def get_point_array(self):
return self.create_point_array(self.points, self.points_index)
def get_calibration_parameter(self):
pyFAI_parameter = self.cake_geometry.getPyFAI()
pyFAI_parameter['polarization_factor'] = self.polarization_factor
try:
fit2d_parameter = self.cake_geometry.getFit2D()
fit2d_parameter['polarization_factor'] = self.polarization_factor
except TypeError:
fit2d_parameter = None
try:
pyFAI_parameter['wavelength'] = self.spectrum_geometry.wavelength
fit2d_parameter['wavelength'] = self.spectrum_geometry.wavelength
except RuntimeWarning:
pyFAI_parameter['wavelength'] = 0
return pyFAI_parameter, fit2d_parameter
def calculate_number_of_spectrum_points(self, max_dist_factor=1.5):
# calculates the number of points for an integrated spectrum, based on the distance of the beam center to the the
#image corners. Maximum value is determined by the shape of the image.
fit2d_parameter = self.spectrum_geometry.getFit2D()
center_x = fit2d_parameter['centerX']
center_y = fit2d_parameter['centerY']
width, height = self.img_data.img_data.shape
if center_x < width and center_x > 0:
side1 = np.max([abs(width - center_x), center_x])
else:
side1 = width
if center_y < height and center_y > 0:
side2 = np.max([abs(height - center_y), center_y])
else:
side2 = height
max_dist = np.sqrt(side1 ** 2 + side2 ** 2)
return int(max_dist * max_dist_factor)
def load(self, filename):
示例3: CalibrationModel
# 需要导入模块: from pyFAI.azimuthalIntegrator import AzimuthalIntegrator [as 别名]
# 或者: from pyFAI.azimuthalIntegrator.AzimuthalIntegrator import getFit2D [as 别名]
#.........这里部分代码省略.........
if self.cake_geometry._polarization is not None:
if self.img_model.img_data.shape != self.cake_geometry._polarization.shape:
# resetting the integrator if the polarization correction matrix has not the same shape as the image
self.cake_geometry.reset()
t1 = time.time()
res = self.cake_geometry.integrate2d(self.img_model._img_data, dimensions[0], dimensions[1], method=method,
mask=mask,
unit=unit, polarization_factor=polarization_factor)
logger.info('2d integration of {0}: {1}s.'.format(os.path.basename(self.img_model.filename), time.time() - t1))
self.cake_img = res[0]
self.cake_tth = res[1]
self.cake_azi = res[2]
return self.cake_img
def create_point_array(self, points, points_ind):
res = []
for i, point_list in enumerate(points):
if point_list.shape == (2,):
res.append([point_list[0], point_list[1], points_ind[i]])
else:
for point in point_list:
res.append([point[0], point[1], points_ind[i]])
return np.array(res)
def get_point_array(self):
return self.create_point_array(self.points, self.points_index)
def get_calibration_parameter(self):
pyFAI_parameter = self.cake_geometry.getPyFAI()
pyFAI_parameter['polarization_factor'] = self.polarization_factor
try:
fit2d_parameter = self.cake_geometry.getFit2D()
fit2d_parameter['polarization_factor'] = self.polarization_factor
except TypeError:
fit2d_parameter = None
try:
pyFAI_parameter['wavelength'] = self.spectrum_geometry.wavelength
fit2d_parameter['wavelength'] = self.spectrum_geometry.wavelength
except RuntimeWarning:
pyFAI_parameter['wavelength'] = 0
return pyFAI_parameter, fit2d_parameter
def calculate_number_of_spectrum_points(self, max_dist_factor=1.5):
# calculates the number of points for an integrated spectrum, based on the distance of the beam center to the the
# image corners. Maximum value is determined by the shape of the image.
fit2d_parameter = self.spectrum_geometry.getFit2D()
center_x = fit2d_parameter['centerX']
center_y = fit2d_parameter['centerY']
width, height = self.img_model.img_data.shape
if center_x < width and center_x > 0:
side1 = np.max([abs(width - center_x), center_x])
else:
side1 = width
if center_y < height and center_y > 0:
side2 = np.max([abs(height - center_y), center_y])
else:
side2 = height
max_dist = np.sqrt(side1 ** 2 + side2 ** 2)
return int(max_dist * max_dist_factor)
def load(self, filename):
示例4: run
# 需要导入模块: from pyFAI.azimuthalIntegrator import AzimuthalIntegrator [as 别名]
# 或者: from pyFAI.azimuthalIntegrator.AzimuthalIntegrator import getFit2D [as 别名]
def run(self):
ai = AzimuthalIntegrator(
dist=self.__distance,
poni1=self.__poni1,
poni2=self.__poni2,
rot1=self.__rotation1,
rot2=self.__rotation2,
rot3=self.__rotation3,
detector=self.__detector,
wavelength=self.__wavelength)
# FIXME Add error model
method1d = method_registry.Method(1, self.__method.split, self.__method.algo, self.__method.impl, None)
methods = method_registry.IntegrationMethod.select_method(method=method1d)
if len(methods) == 0:
method1d = method_registry.Method(1, method1d.split, "*", "*", None)
_logger.warning("Downgrade 1D integration method to %s", method1d)
else:
method1d = methods[0].method
method2d = method_registry.Method(2, self.__method.split, self.__method.algo, self.__method.impl, None)
methods = method_registry.IntegrationMethod.select_method(method=method2d)
if len(methods) == 0:
method2d = method_registry.Method(2, method2d.split, "*", "*", None)
_logger.warning("Downgrade 2D integration method to %s", method2d)
else:
method2d = methods[0].method
self.__result1d = ai.integrate1d(
method=method1d,
data=self.__image,
npt=self.__nPointsRadial,
unit=self.__radialUnit,
mask=self.__mask,
polarization_factor=self.__polarizationFactor)
self.__result2d = ai.integrate2d(
method=method2d,
data=self.__image,
npt_rad=self.__nPointsRadial,
npt_azim=self.__nPointsAzimuthal,
unit=self.__radialUnit,
mask=self.__mask,
polarization_factor=self.__polarizationFactor)
# Create an image masked where data exists
self.__resultMask2d = None
if self.__mask is not None:
if self.__mask.shape == self.__image.shape:
maskData = numpy.ones(shape=self.__image.shape, dtype=numpy.float32)
maskData[self.__mask == 0] = float("NaN")
if self.__displayMask:
self.__resultMask2d = ai.integrate2d(
method=method2d,
data=maskData,
npt_rad=self.__nPointsRadial,
npt_azim=self.__nPointsAzimuthal,
unit=self.__radialUnit,
polarization_factor=self.__polarizationFactor)
else:
_logger.warning("Inconsistency between image and mask sizes. %s != %s", self.__image.shape, self.__mask.shape)
try:
self.__directDist = ai.getFit2D()["directDist"]
except Exception:
# The geometry could not fit this param
_logger.debug("Backtrace", exc_info=True)
self.__directDist = None
if self.__calibrant:
rings = self.__calibrant.get_2th()
try:
rings = unitutils.from2ThRad(rings, self.__radialUnit, self.__wavelength, self.__directDist)
except ValueError:
message = "Convertion to unit %s not supported. Ring marks ignored"
_logger.warning(message, self.__radialUnit)
rings = []
# Filter the rings which are not part of the result
rings = filter(lambda x: self.__result1d.radial[0] <= x <= self.__result1d.radial[-1], rings)
rings = list(rings)
else:
rings = []
self.__ringAngles = rings
self.__ai = ai