Example #1
0
def test_SAXSWorkflow():
    # create processes
    thresholdmask = ThresholdMaskPlugin()
    qintegrate = QIntegratePlugin()

    # set values
    AI = AzimuthalIntegrator(.283,
                             5.24e-3,
                             4.085e-3,
                             0,
                             0,
                             0,
                             1.72e-4,
                             1.72e-4,
                             detector=Pilatus2M(),
                             wavelength=1.23984e-10)
    thresholdmask.data.value = fabio.open(
        '/Users/hari/Downloads/AGB_5S_USE_2_2m.edf').data

    def AI_func():
        from pyFAI.detectors import Pilatus2M
        from pyFAI import AzimuthalIntegrator, units
        return AzimuthalIntegrator(.283,
                                   5.24e-3,
                                   4.085e-3,
                                   0,
                                   0,
                                   0,
                                   1.72e-4,
                                   1.72e-4,
                                   detector=Pilatus2M(),
                                   wavelength=1.23984e-10)

    qintegrate.integrator.value = AI_func
    qintegrate.npt.value = 1000
    thresholdmask.minimum.value = 30
    thresholdmask.maximum.value = 1e12

    qintegrate.data.value = fabio.open(
        '/Users/hari/Downloads/AGB_5S_USE_2_2m.edf').data
    thresholdmask.neighborhood.value = 1
    qintegrate.normalization_factor.value = 0.5
    qintegrate.method.value = "numpy"

    # connect processes
    thresholdmask.mask.connect(qintegrate.mask)

    # add processes to workflow
    wf = Workflow('QIntegrate')
    wf.addProcess(thresholdmask)
    wf.addProcess(qintegrate)

    dsk = DaskExecutor()
    result = dsk.execute(wf)
    print(result)
Example #2
0
def test_workflow():
    from xicam.core.execution.workflow import Workflow
    from xicam.core.execution.daskexecutor import DaskExecutor
    from xicam.plugins.operationplugin import output_names

    executor = DaskExecutor()

    @operation
    @output_names("square")
    def square(a=3) -> int:
        return a**2

    @operation
    @output_names("sum")
    def my_sum(a, b=3) -> int:
        return a + b

    wf = Workflow()

    square = square()
    my_sum = my_sum()

    wf.add_operation(square)
    wf.add_operation(my_sum)
    wf.add_link(square, my_sum, "square", "a")

    assert wf.execute_synchronous(executor=executor) == [{"sum": 12}]
def custom_parameter_workflow(qfit):
    from xicam.core.execution.workflow import Workflow
    from xicam.core.execution.daskexecutor import DaskExecutor
    from xicam.plugins import manager

    manager.collect_plugins()

    executor = DaskExecutor()

    wf = Workflow()

    qfit = qfit()

    wf.add_operation(qfit)
    return wf
Example #4
0
def test_multiple_instances(square_op, sum_op):
    from xicam.core.execution.workflow import Workflow
    from xicam.core.execution.daskexecutor import DaskExecutor

    executor = DaskExecutor()

    wf = Workflow()

    square = square_op()
    square2 = square_op()
    square2.filled_values["a"] = 2
    my_sum = sum_op()

    wf.add_operation(square)
    wf.add_operation(square2)
    wf.add_operation(my_sum)
    wf.add_link(square, my_sum, "square", "a")  # 3**3
    wf.add_link(square2, my_sum, "square", "b") # 2**2
    assert wf.execute_synchronous(executor=executor) == [{"sum": 13}]
def test_multiple_instances(square_op, sum_op):
    from xicam.core.execution.workflow import Workflow
    from xicam.core.execution.daskexecutor import DaskExecutor

    executor = DaskExecutor()

    wf = Workflow()

    square = square_op()
    square2 = square_op()
    square2.filled_values['a'] = 2
    my_sum = sum_op()

    wf.add_operation(square)
    wf.add_operation(square2)
    wf.add_operation(my_sum)
    wf.add_link(square, my_sum, 'square', 'a')
    wf.add_link(square2, my_sum, 'square', 'b')

    assert wf.execute_synchronous(executor=executor) == [{'sum': 13}]
def simple_workflow(square_op, sum_op):
    from xicam.core.execution.workflow import Workflow
    from xicam.core.execution.daskexecutor import DaskExecutor

    executor = DaskExecutor()

    wf = Workflow()

    square = square_op()
    square2 = square_op()
    square2.filled_values['a'] = 2
    my_sum = sum_op()

    wf.add_operation(square)
    wf.add_operation(square2)
    wf.add_operation(my_sum)
    wf.add_link(square, my_sum, 'square', 'a')
    wf.add_link(square2, my_sum, 'square', 'b')

    return wf
Example #7
0
#         - bad pixels set to 0
CSX_TOOLS = False
try:
    from . import CSXCorrectImage
    CSX_TOOLS = True
except ImportError:
    CSXCorrectImage = None

# Disable testing against csxtools here
TEST_CSX_TOOLS = CSX_TOOLS and True

# TODO: test endianess
# TODO: test non-uint16 inputs?

# Used for testing purposes
executor = DaskExecutor()


@pytest.fixture
def op() -> correct_fastccd_image:
    op = correct_fastccd_image()
    op.filled_values['images'] = np.arange(24, dtype=np.uint16).reshape(
        (4, 3, 2))
    return op


@pytest.fixture
def old():
    if TEST_CSX_TOOLS:
        op = CSXCorrectImage()
        op.filled_values['bitmasked_images'] = np.arange(
Example #8
0
def test_tomoworkflow():
    read = read_APS2BM()
    read.path.value = '/Users/hari/test.hdf'
    read.sino.value = (1050, 1051)

    norm = Normalize()
    read.arr.connect(norm.arr)
    read.flat.connect(norm.flats)
    read.dark.connect(norm.darks)

    outliers = RemoveOutlier()
    norm.normalized.connect(outliers.arr)
    outliers.dif.value = 500
    outliers.size.value = 5

    # maximum = ArrayMax()
    # outliers.corrected.connect(maximum.arr)
    # maximum.floor.value = 1e-16

    # neglog = MinusLog()
    # maximum.out.connect(neglog.arr)

    # phase = RetrievePhase()
    # maximum.out.connect(phase.arr)
    # phase.pixel_size.value=6.5e-5
    # phase.dist.value=3
    # phase.energy.value=27

    stripe = RemoveStripeFw()
    outliers.corrected.connect(stripe.tomo)
    stripe.level.value = 8
    stripe.wname.value = 'db5'
    stripe.sigma.value = 4
    stripe.pad.value = True

    padding = Pad()
    stripe.corrected.connect(padding.arr)
    padding.axis.value = 2
    padding.npad.value = 448
    padding.mode.value = 'edge'

    # angles = Angles()
    # angles.nang.value=0
    # angles.ang1.value=90
    # angles.ang2.value=180


    gridrec = Recon()
    padding.padded.connect(gridrec.tomo)
    read.angles.connect(gridrec.theta)
    gridrec.filter_name.value = 'butterworth'
    gridrec.algorithm.value = 'gridrec'
    gridrec.center.value = np.array([1295 + 448])  # 1295
    gridrec.filter_par.value = np.array([0.2, 2])
    # gridrec.sinogram_order.value = True

    crop = Crop()
    gridrec.reconstructed.connect(crop.arr)
    crop.p11.value = 448
    crop.p22.value = 448
    crop.p12.value = 448
    crop.p21.value = 448
    crop.axis.value = 0

    divide = ArrayDivide()

    circularmask = CircMask()
    crop.croppedarr.connect(circularmask.arr)
    circularmask.val.value = 0
    circularmask.axis.value = 0
    circularmask.ratio.value = 1

    writetiff = WriteTiffStack()

    workflow = Workflow('Tomography')
    for process in [read,
                    norm,
                    outliers,
                    # maximum,
                    # neglog,
                    # phase,
                    stripe,
                    padding,
                    # angles,
                    gridrec,
                    crop,
                    # divide,
                    circularmask,
                    # writetiff
                    ]:
        workflow.addProcess(process)

    dsk = DaskExecutor()
    result = dsk.execute(workflow)
    print(result)

    import pyqtgraph as pg
    pg.image(result[0]['normalized'].value.squeeze())

    from qtpy.QtWidgets import QApplication
    app = QApplication([])
    app.exec_()