Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions doc/source/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ Change-log of versions
* Documentation with a new tutorial on carbon polymorphs (diamond, graphite and C60)
- [integrate1|2d] enforce arguments to be kwargs to limit user errors
- [Doc] Improve the notebook about "flatfield" calculation.
- [Fiber/GrazingIncidence]
* Compatibility with pyFAI-integrate GUI and Worker
* Build the missing wedge mask using percentile threshold of counts

- [Integrate1/2dResult]

* can perform some basic maths (+, -), uncertainties are propagated accordingly.
Expand Down
40 changes: 32 additions & 8 deletions src/pyFAI/app/integrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@
import fabio
from .. import utils, io, version as pyFAI_version, date as pyFAI_date
from ..io import DefaultAiWriter, HDF5Writer
from ..io.integration_config import WorkerConfig
from ..io.integration_config import WorkerConfig, WorkerFiberConfig
from ..utils.shell import ProgressBar
from ..utils import logging_utils, header_utils
from ..worker import Worker
from ..worker import Worker, WorkerFiber
logging.basicConfig(level=logging.INFO)
logging.captureWarnings(True)
logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -82,7 +82,13 @@ def moveCenterTo(window, center):

def validateConfig():
config = window.get_config()
reason = Worker.validate_config(config, raise_exception=None)
integrator_class = config.get("integrator_class", "AzimuthalIntegrator")
if integrator_class == "AzimuthalIntegrator":
reason = Worker.validate_config(config, raise_exception=None)
elif integrator_class == "FiberIntegrator":
reason = WorkerFiber.validate_config(config, raise_exception=None)
else:
raise TypeError(f"{integrator_class} is not a valid integrator class")
if reason is None:
processData(config)
else:
Expand Down Expand Up @@ -121,8 +127,13 @@ def processData(config=None):
if config is None:
config = window.get_worker_config()
elif isinstance(config, dict):
config = WorkerConfig.from_dict(config)

integrator_class = config.get("integrator_class", "AzimuthalIntegrator")
if integrator_class == "AzimuthalIntegrator":
config = WorkerConfig.from_dict(config)
elif integrator_class == "FiberIntegrator":
config = WorkerFiberConfig.from_dict(config)
else:
raise TypeError(f"{integrator_class} is not a valid integrator class")
dialog = IntegrationProcess(None)
dialog.adjustSize()
moveCenterTo(dialog, center)
Expand Down Expand Up @@ -627,11 +638,24 @@ def process(input_data, output, config, observer, write_mode=HDF5Writer.MODE_ERR
# Create a null observer to avoid to deal with None
observer = IntegrationObserver()

worker = Worker()
if isinstance(config, WorkerConfig):
if isinstance(config, dict):
integrator_class = config.get("integrator_class", "AzimuthalIntegrator")
if integrator_class == "AzimuthalIntegrator":
worker_config = WorkerConfig.from_dict(config)
worker = Worker()
elif integrator_class == "FiberIntegrator":
worker_config = WorkerFiberConfig.from_dict(config)
worker = WorkerFiber()
else:
raise TypeError(f"{integrator_class} is not a valid integrator class")
elif type(config) is WorkerConfig:
worker_config = config
worker = Worker()
elif type(config) is WorkerFiberConfig:
worker_config = config
worker = WorkerFiber()
else:
worker_config = WorkerConfig.from_dict(config)
raise TypeError(f"{config} should be dictionary, WorkerConfig or WorkerFiberConfig")

monitor_name = worker_config.monitor_name
worker.set_config(worker_config)
Expand Down
39 changes: 36 additions & 3 deletions src/pyFAI/gui/IntegrationDialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,19 @@ def __displayResultUpdated(self):

def __displayResult(self, result, resetZoom=False):
self._plot.clear()
if isinstance(result, containers.Integrate1dResult):
self._plot.setGraphXLabel("Radial")
if isinstance(result, (containers.Integrate1dResult, containers.Integrate1dFiberResult)):
if isinstance(result, containers.Integrate1dFiberResult):
self._plot.setGraphXLabel("Integrated (in-plane / out-of-plane)")
edges = result.integrated
else:
self._plot.setGraphXLabel("Radial")
edges = result.radial
self._plot.setGraphYLabel("Intensity")

self._plot.addHistogram(
legend="result1d",
align="center",
edges=result.radial,
edges=edges,
color="blue",
histogram=result.intensity,
resetzoom=False)
Expand Down Expand Up @@ -152,6 +158,33 @@ def computeLocation(result):
scale=scale,
colormap=DEFAULT_COLORMAP,
resetzoom=False)
elif isinstance(result, containers.Integrate2dFiberResult):

def computeLocation(result):
# Assume that axes are linear
if result.intensity.shape[1] > 1:
scaleX = (result.inplane[-1] - result.inplane[0]) / (result.intensity.shape[1] - 1)
else:
scaleX = 1.0
if result.intensity.shape[0] > 1:
scaleY = (result.outofplane[-1] - result.outofplane[0]) / (result.intensity.shape[0] - 1)
else:
scaleY = 1.0
halfPixel = 0.5 * scaleX, 0.5 * scaleY
origin = (result.inplane[0] - halfPixel[0], result.outofplane[0] - halfPixel[1])
return origin, (scaleX, scaleY)

self._plot.setGraphXLabel("In-plane")
self._plot.setGraphYLabel("Out-of-plane")
origin, scale = computeLocation(result)
self._plot.addImage(
legend="result2d",
data=result.intensity,
origin=origin,
scale=scale,
colormap=DEFAULT_COLORMAP,
resetzoom=False)

else:
logger.error("Unsupported result type %s", type(result))
if resetZoom:
Expand Down
6 changes: 3 additions & 3 deletions src/pyFAI/gui/widgets/WorkerConfigurator.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
from ..dialog.GeometryDialog import GeometryDialog
from ..dialog.IntegrationMethodDialog import IntegrationMethodDialog
from ...utils import float_, str_, get_ui_file
from ...units import RADIAL_UNITS, to_unit, Unit, UnitFiber, parse_fiber_unit
from ...units import RADIAL_UNITS, to_unit, Unit, UnitFiber
from ..model.GeometryModel import GeometryModel
from ..model.DataModel import DataModel
from ..utils import units
Expand Down Expand Up @@ -607,7 +607,7 @@ def normalizeFiles(filenames):
self.do_oop_range.setChecked(wc.do_oop_range)
self.vertical_integration.setChecked(wc.vertical_integration)
self.do_1d_integration.setChecked(wc.integration_1d)
unit_ip = parse_fiber_unit(**wc.unit_ip)
unit_ip = wc.unit_ip

# In UnitSelector, searching the unit is made with 'is' not '==', not valid for FiberUnit (which are copies)
for index in range(self.ip_unit.count()):
Expand All @@ -616,7 +616,7 @@ def normalizeFiles(filenames):
self.ip_unit.setCurrentIndex(index)
break

unit_oop = parse_fiber_unit(**wc.unit_oop)
unit_oop = wc.unit_oop
for index in range(self.oop_unit.count()):
item = self.oop_unit.itemData(index)
if item == unit_oop:
Expand Down
Loading