SNBL Software & Docs








Pylatus: beamline control software

What is Pylatus

Pylatus is beamline control software for diffractometers based on Dectris Pilatus detectors and ICEPAP motor controls originally developed for the BM01 beamline at SNBL@ESRF.

Pylatus

Pylatus beamlines

Currently, Pylatus is working at the following ESRF beamlines:

Why Pylatus?

Pylatus is trying to combine a simple and easy-to-learn interface together with complexity required for modern synchrotron experiments. User can collect individual or multiple datasets for single crystals or powders using GUI but more advanced options for complicated data collection are also available (see scripting in Python).

Pylatus gives total control over beamline starting up from the optics (mirrors and monochromators) down to the sample environment. It includes a lot of batteries, such as:

  • Kappa or chi goniometer for single crystal and powder experiments. Infinite spinner is also available.
  • All motor views and controls, moving motors relatively and absolutely.
  • Pseudo-motors (such as energy, wavelength or grouped motions).
  • Continuous scans (1D or meshes) for all motors using as counters:
    • any SPEC counters;
    • Silicon diodes connected to nano-ammeters (currently, only Keithley 6485 is supported);
    • Pilatus detector itself (summing up all pixels on the frame using AVX512, AVX or SSE4 intrinsics if available);
  • Beamline auto-alignment (using routine scenarios, like scanning a motor and positioning it to the intensity maximum value);
  • Automatic beamstop search on the measured frames (using AVX512, AVX or SSE4 intrinsics if available; calibration required).
  • Automatic storing experimental values (temperature, pressure, voltage, etc.) into the headers of the output CBF files.
  • Powerful scripting in Python for complex experimental scenarios and sequences.
  • Native control of the sample environment devices, such as:
  • Implementation of the ESRF data policy.
  • Possibility to connect to SPEC sessions and run everything available from SPEC.

Pylatus source code

Pylatus is free and open source software (under GPLv3 license), the source code can be found in the Pylatus git repository.

Pylatus is mainly written in C++ but it has some modules written in pure C and Rust. Pylatus depends on Qt5 (min version 5.12). Pylatus contains additional daemons, such as:

  • dcubroker - a daemon running on the Dectris DCU. It collects cbf files from the camserver and sends them to Pylatus (written in Rust).
  • icepapd - a daemon running the ESRF ICEPAP crates (written in Rust).

Cite Pylatus

If you use Pylatus or its parts, please cite this paper: A new multipurpose diffractometer PILATUS@SNBL, J. Synchrotron Rad. (2016). 23, 825-829 .

Pylatus scripting API

Pylatus API Objects

Technical details

Pylatus is dynamically linked against a local version of Python, but only Python>=3.6 is supported. If you do not want to use any Python scripting in Pylatus, it should be compiled with -DNO_PYTHON=1.

Thus, Python in Pylatus is the same interpreter which is installed in your system, and you can import any module which is installed for you system interpreter, i.e. this would work

import numpy as np

if you have numpy installed. Pylatus extends the system modules with a few objects specific for a typical diffraction experiment.

It is important to note that the Pylatus do not run the script immediately but creates a sequence of actions which can be inspected by user and run after.

diffractometer

The main object which allows to script diffraction scan. (Diffractometer script source code)

In Pylatus Script editor the diffractometer object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from pylatus_diffractometer import PyDiffractometer

diffractometer = PyDiffractometer()

Macros example can be found in here: https://git.3lp.cx/dyadkin/bm01macros/src/branch/master/lab6.py

Instance methods:

Usage Examples


scan

diffractometer.scan(
    *,
    folder=None,
    filename=None,
    nperiods=None,
    nframes=None,
    exposure=None,
    dOmega=None,
    omega=None,
    phi=None,
    kappa=None,
    pldistf=None,
    pldistd=None,
    plrot=None,
    plvert=None,
    nop=False
)

Creates a data collection sequence action. This method accepts only the keyword arguments. If an argument is not set, its value is taken from the main Pylatus window, from the "Set diffraction experiment" widget (excluding nop argument).

diffractometer.scan

The method parameters are the following:

  • folder: string which specifies the directory where the data will be stored;
  • filename: string with file base name;
  • exposure: exposure time in seconds, float number;
  • nframes: number of frames, integer number;
  • nperiods: number of periods, integer number;
  • dOmega: angular step in degrees per image, float number. It is still called dOmega even if phi-scan is set (see issue #19);
  • omega: starting angle in degrees for omega axis when omega-scan is set or just omega position if phi-scan is set, float number;
  • phi: starting angle in degrees for phi axis when phi-scan is set or just phi position if omega-scan is set, float number;
  • kappa: kappa angle in degrees, float number;
  • pldistd: position of the detector inside the frame in mm, float number;
  • pldistf: position of the frame in mm, float number;
  • plrot: detector angle in degrees, float number;
  • plvert: vertical offset of the detector in mm, float number;
  • nop: bool, stands for no periods: if False the filename parameter will be extended with the period number, i.e. filename_0001p.cbf; if True just filename will be used, i.e. filename.cbf.

sleep

diffractometer.sleep(seconds)

Creates a sequence action to sleep: diffractometer does not do any action for a number of seconds.


abort

diffractometer.abort()

Creates a sequence action to abort the current diffraction data collection. Useful when data are collected periodically and user wants to stop it automatically when the temperature ramp is done.


setPhiScan

diffractometer.setPhiScan()

Creates a sequence action to set phi axis as the main scanning axis. In this case, the angular step will be called dPhi, since 2021-04-01 or dOmega for older version. Attention: if you switch omega and phi scans in the script, you HAVE TO specify
both omega= and phi= parameters in the diffractometer.scan method.


setOmegaScan

diffractometer.setOmegaScan()

Creates a sequence action to set omega axis as the main scanning axis. Attention: if you switch omega and phi scans in the script, you HAVE TO specify
both omega= and phi= parameters in the diffractometer.scan method.


align

diffractometer.align()

Create a sequence action for the diffractometer auto alignment procedure. All the values must be set in the Guru option Autoscan before using this method.


setDet (BM31 only)

diffractometer.setDetX(value)
diffractometer.setDetY(value)
diffractometer.setDetZ(value)
diffractometer.setDetR(value)

Sets GUI field for detector position in the Pylatus main window to the value.

Usage examples:

diffractometer.setOmegaScan()
diffractometer.scan(folder="omega_scan", phi=0, omega=-55, dOmega=1, nperiods=10)
diffractometer.setPhiScan()
diffractometer.scan(folder="phi_scan", phi=0, omega=-55, dPhi=1, nframes=5)

motor

motor("name")

The object which allows to script individual motor motions, where name is name of the motor. (Motor script source code)

In Pylatus Script editor the motor object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_motors import PyMotors

motor = PyMotors()

Macros example https://git.3lp.cx/dyadkin/bm31macros/src/branch/master/mono.py

Instance methods:

Usage Examples


move

motor("name").move(position, *, now=False)

creates a sequence action for the motor name to move it to the absolute position.

If now=True, then it does not create the sequence action but moves the motor immediately (recommended only for very advanced users).


moveRelative

motor("name").moveRelative(position, *, now=False)

creates a sequence action for the motor name to move it to the relative position.

If now=True, then it does not create the sequence action but moves the motor immediately (recommended only for very advanced users).


wait

motor.wait(*, now=False)

Creates a sequence action to wait until all the moving motors reach desirable positions.

If now=True blocks the script immediately and waits until all the motor finish (recommended only for very advanced users). It does not need a motor name.


position

motor('name').position() -> float

Returns current position of the motor name. (recommended only for very advanced users)


isAt

motor('name').isAt(position) -> bool

Calculates whether the motor name is at the position taking into account the motor precision. (recommended only for very advanced users)


Usage examples:

# move motors to the starting positions
motor('omega').move(0)
motor('phi').move(90)
motor('kappa').move(-55)
motor('gon1').move(-55)
# wait until all the motor reach starting positions
motor.wait()
# make a scan
diffractometer.scan()

cryostream

The object which operates the Cryostream gas blower. (Cryostream script source code)

In Pylatus Script editor the blower object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_cryostream import PyCryostream

cryostream = PyCryostream()

Instance methods:


cool

cryostream.cool(temperature)

Creates a sequence action to cool the cryostream to the temperature as quick as possible. Temperature interval is from 80 K to 500 K (float).


ramp

cryostream.ramp(temperature, ramp_rate)

Creates a sequence action to ramp the cryostream to the temperature with the ramp rate of ramp_rate. Temperature interval is from 80 K to 500 K (float), ramp rate is from 1 to 360 K/hour.


end

cryostream.end(ramp_rate)

Creates a sequence action to ramp the cryostream to the room temperature the ramp rate ramp_rate and switches it off. Ramp rate is from 1 to 360 K/hour.


wait

cryostream.wait()

Creates a sequence action for cryostream to wait until it reaches the temperature specified by one of the previous commands.

blower

The object which operates the Eurotherm controlling a standard ESRF hot gas blower or the Hermann's heater. (Blower script source code)

In Pylatus Script editor the blower object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_blower import PyBlower

blower = PyBlower()

Instance methods:


ramp

blower.ramp(temperature, ramp_rate)

Creates a sequence action to ramp the blower to the temperature with the ramp rate of ramp_rate. Temperature interval is from 20 C to 1000 C (float), ramp rate is from 1 to 1000 C/min.


wait

blower.wait(temperature=None)

Creates a sequence action to wait for the temperature specified in the blower.ramp. If the optional parameter temperature (float) is not None, then blower waits until temperature is reached.

For some samples (often damaged by x-rays) it is useful not to measure all the time but at certain temperatures without stopping the ramp, i.e.

blower.ramp(1000, 10)
for t in range(100, 1001, 10):
    blower.wait(t)
    diffractometer.scan()

Then we would measure diffraction every 10 C with permanent ramp.

lakeshore

The object which operates the Lakeshore temperature controller. (Lakeshore script source code)

In Pylatus Script editor the lakeshore object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_lakeshore import PyLakeshore

lakeshore = PyLakeshore()

Instance methods:


setpoint

lakeshore.setpoint(output, target)

Creates a sequence action to set target temperature (in K) for the lakeshore at the output (usually 1 or 2).


range

lakeshore.range(output, range)

Creates a sequence action to set the heater range at the output. range can be either one of the following values:

  • 0 - Off
  • 1 - Low
  • 2 - Medium
  • 3 - High

heater

lakeshore.heater(output, value)

Creates a sequence action to set the heater to manual value at the output. value can be in a range from 0 to 100 %.


pid

lakeshore.pid(output, p, i, d)

Creates a sequence action to set p, i, d coefficients at the output.


wait

lakeshore.wait()

Creates a sequence action for the Lakeshore to wait for the temperature set with lakeshore.setpoint.

iseg

The object which operates the ISEG high voltage device. (Iseg script source code)

In Pylatus Script editor the iseg object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_iseg import PyIseg

iseg = PyIseg()

Instance methods:


setVoltage

iseg.setVoltage(voltage, ramp_rate)

Creates a sequence action to set the voltage value with the ramp_rate. Maximum voltage depends on the model (usually 2000 V). Ramp rate is from 2 to 255 V/s.


ramp

iseg.ramp(voltage, ramp_rate)

Alias for iseg.setVoltage.


wait

iseg.wait()

Creates a sequence action to wait until the voltage is set by the previous command.

keithley

The object which operates the Keithley2200 voltage/current device. (Keithley script source code)

In Pylatus Script editor the keithley object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_keithley import PyKeithley

keithley = PyKeithley()

Instance methods:


setVoltage

keithley.setVoltage(voltage)

Creates a sequence action to set voltage value in V at the Keithley output.


setCurrent

keithley.setCurrent(current)

Creates a sequence action to set current value in A at the Keithley output.


stop

keithley.stop()

Creates a sequence action to switch off the Keithley output.

spec

The object which connects to a SPEC session and runs macros in there. (Spec script source code)

In Pylatus Script editor the spec object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_spec import PySpec

spec = PySpec()

Important: unlike other objects, spec does not create a sequence action but runs directly and immediately, i.e. it changes the Pylatus script editor to a prompt, then the Python interpreter blocks until the spec command is finished. If you need to run a spec macro as a sequence action, consider using to_sequence decorator.

Macros example https://git.3lp.cx/dyadkin/bm31macros/src/branch/master/spec.py

Instance methods


__init__

You can create a spec connection as:

s = spec('host:session')

Since creation of the connection is expensive and time-consuming operation, Pylatus puts them in a cache for future reuse.

run

spec('bm31spec2:experiment').run('ct 1')

Runs a spec command immediately and blocks until it is finished. You can abort the command at any moment.

to_sequence

to_sequence is a decorator to put a block of Python code into a sequence action. (to_sequence source code)

In Pylatus Script editor the to_sequence decorator is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_seq import to_sequence

Usages example https://git.3lp.cx/dyadkin/bm01macros/src/branch/master/musst.py

Explanation

Imagine we have a function which connects to spec and runs a macro there. In our case, we have a spec macro chan_on which turns on a channel chan on the MUSST card:

def musst_chan_on(chan):
    spec('snbla2:rhmusst').run(f'chan_on {chan}')

If we call this function as is

musst_chan_on(8)

it will turn on TTL signal on our MUSST. But we may want to put our spec command into the sequence, then we could write it like:

@to_sequence
def musst_chan_on(chan):
    '''Musst turns channel 'chan' ON'''
    spec('snbla2:rhmusst').run(f'chan_on {chan}')

After that, calling

musst_chan_on(8)

it will create a sequence action instead of running it immediately.

Format doc strings

You can use Qt format strings to add some info into sequence action:

@to_sequence
def musst_chan_on(chan, time):
    '''Musst turns channel '%1' for %2 seconds'''
    spec('snbla2:rhmusst').run(f'chan_on {chan}')
    from time import sleep
    sleep(time)
    spec('snbla2:rhmusst').run(f'chan_off {chan}')

which will generate an action as following:

action_doc_string.png

%1 will be substituted with the first argument value, %2 with the second one, etc., up to 9 arguments are allowed.

Limitations

Due to fragile substance of the decorator there are certain limitations on its usage:

  • Only a top level function can be decorated. Classes, methods, metaclasses, lambdas, closures or other smart thing will not work, i.e.
@to_sequence
class TooSmart:  # wrong! classes cannot be decorated
    pass


class EvenSmarter(TooSmart):
    @to_sequence
    def cool_method(self):  # wrong! methods cannot be decorated
        pass


@to_sequence
def silly_function():
    '''I am a very silly function'''  # ok!


@to_sequence
def smart_function():
    '''I am a very smart function'''
    @to_sequence
    def silly_function():  # wrong! closures cannot be decorated
        '''I am a very silly function'''
  • The decorated function can get any number of arguments, but they must be either:

    • strings,
    • integer numbers,
    • float numbers.

    More complicated data structures (i.e. dicts, lists, other objects) will not work:

@to_sequence
def spec_hello(greet, num):  # <--- ok!
    '''Prints `greet` `num` times in spec'''
    spec('bm31spec2:experiment').run(f'for (i=0; i<{num}; i++) print({greet});')


@to_sequence
def spec_run_all(list_of_commands):  # <--- wrong! python list (or any Iterable) cannot be an argument
    '''Runs list of commands in spec'''
    for command in list_of_commands:
        spec('bm31spec2:experiment').run(f'{command}')
  • The decorated function must have a doc-string, which will be used as a part of the sequence action name.
@to_sequence
def silly_function():
    '''I am a very silly function'''  # ok!


@to_sequence
def dummy_function():
    return None  # wrong! there is no doc string
  • The decorated function cannot capture anything from the outer scope, i.e. neither imports, nor variables, nor other functions or types:
from time import sleep

sleep_time = 5


@to_sequence
def spec_sleep1():
    '''Block spec prompt for 5 seconds'''
    sleep(sleep_time)  # wrong! sleep and sleep_time cannot be captured from the outer scope


@to_sequence
def spec_sleep2(sleep_time):
    '''Block spec prompt for `%1` seconds'''
    from time import sleep
    sleep(sleep_time)  # ok, sleep is imported inside the function, sleep_time is an argument

If you find these limitations too strict, your patches eliminating them are always welcome.

log

The object which puts a message into Pylatus log window and, consequently, into Pylatus log file. (log script source code)

In Pylatus Script editor the log object is already imported into Python interpreter, but if you have external .py files, then you can import it as:

from auxygen_log import PyLogger

log = PyLogger()

Important: unlike other objects, log does not create a sequence action but runs directly and immediately, i.e. it changes the Pylatus script editor to a prompt, then the Python interpreter blocks until the spec command is finished. If you need to run a log macro as a sequence action, consider using to_sequence decorator.

Instance methods


info

log.info("Simple info message")

Prints an info message into Pylatus log window and, consequently, into Pylatus log file.


warn

log.warn("Warning message")

Prints a warning message into Pylatus log window and, consequently, into Pylatus log file.


error

log.error("Error message")

Prints an error message into Pylatus log window and, consequently, into Pylatus log file.

brainboxes

The object which operates the remote IO BrainBoxes devices. (BrainBoxes script source code)

In Pylatus Script editor the brainboxes object is already imported into Python interpreter, but if it is going to be called from an external .py file, then the manual import is needed:

from auxygen_brainboxes import PyBrainBoxes
brainboxes = PyBrainBoxes()

Instance methods:


setInput

brainboxes.setInput(address, channel, value, *, timeout=0, now=False)

Creates a sequence action (if now==False) which sets the input channel of a BrainBoxes device with address to value. The value equals to 0 is interpreted as off, anything else is on. If timeout is not 0, then the input will be set to the inverted value after timeout milliseconds.

If now==True, the sequence action is not created, but the command is run immediately (no sequence action mode).

Useful Pylatus script snippets

Measure all LaB6 patterns at once

dists = [0, 100, 200, 300, 400, 500]
heights = [-80, 0]

for d in dists:
    heights = heights[::-1]
    for h in heights:
        diffractometer.scan(filename=f'lab6_{d:03d}_{h:02d}',
                            pldistf=d, plvert=h, omega=0,
                            dOmega=100, nperiods=1,
                            exposure=10, nframes=1)

Measurements with Cryostream

# from 300 K to 200 K with a step 10
# and from 200 K to 80 K with a step 1 K
temps = list(range(300, 200, -10)) + list(range(200, 79, -1))
for t in temps:
    # ramp with rate 360 K/hour
    cryostream.ramp(t, 360)
    cryostream.wait()
    # sometimes it's useful to wait for temperature stabilization
    diffractometer.sleep(120)
    # Folder pattern is like Sample1_100K
    diffractometer.scan(folder=f'Sample1_{t:03d}K')

Eurotherm based device (gas heat blower or Hermann's heater)

# from 400.5 K to 500.5 K with a step 0.5
# It is not possible to use range with float,
# Thus we import arange from numpy
from numpy import arange

temps = arange(400.5, 501, 0.5)
for t in temps:
    # ramp 10 C/min
    blower.ramp(t, 10)
    blower.wait()
    # Directory pattern is like Sample1_400.5C
    diffractometer.scan(folder=f'Sample1_{t:.2f}C')

Modulation Enhanced Diffraction

import numpy as np

amax = 250  # max temperature amplitude
amin = 200  # min temperature amplitude
n = 50  # number of points
filename = 'name'
func = np.cos  # use cosine function

points = np.linspace(0, 2 * np.pi, n)
temps = (amax + amin) / 2 + func(points) * (amax - amin) / 2

for i, t in enumerate(temps):
    cryostream.ramp(t, 360)
    cryostream.wait()
    # nop=True means the filename pattern will be without _0001p
    # part, i.e. name_001.cbf instead of name_001_0001p.cbf
    diffractometer.scan(filename=f'{filename}_{i:03d}', nop=True)

Measure the full sphere with Arinax micro-kappa

dir = 'test'
runs = {
    'run0': {'akappa': 0, 'aphi': 0, 'prhor': -44.5813, 'samtx': 1.6822, 'samty': 0.8764},
    'run1': {'akappa': 90, 'aphi': 0, 'prhor': -44.3563, 'samtx': 1.9445, 'samty': 1.3063},
    'run2': {'akappa': 90, 'aphi': 90, 'prhor': -44.3064, 'samtx': 1.8516, 'samty': 0.7455},
    'run3': {'akappa': 90, 'aphi': 180, 'prhor': -44.6463, 'samtx': 1.3820, 'samty': 0.8077},
}

for r in runs:
    motors = runs[r]
    for m in motors:
        motor(m).move(motors[m])
    motor('omega').move(0)
    motor.wait()
    diffractometer.scan(folder=f'{dir}/{r}', kappa=motors['akappa'], phi=motors['aphi'])

SNBL Toolbox

SNBL Toolbox

SNBL Toolbox is a set of useful programs for Pilatus data. If you use this program please cite this paper: A new multipurpose diffractometer PILATUS@SNBL

SNBL Toolbox is open source software covered by the GPLv3 license.

Download

To run the SNBL Toolbox in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of the SNBL Toolbox is compiled in Ubuntu 16.04 LTS, thus it should work in any rather new distributions.



Source code

Source code is freely available at the git repositories:

Changelog

  • 2023.3.1 - v2.3.7:

    • Crysis: fix regression when Crysis does not create all the needed files for Crysalis.
    • Fiewer: now can open Crysalis IMG files.
    • HeadEx: support for Voltage CBF header key.
  • 2023.1.25 - v2.3.6:

    • Converter: fix incorrect periodical binning when it is started not from the very first period #14.
    • Fiewer: fix incorrect numbers in Bubble cakes in Windows a0a374e4e6.
  • 2022.8.3 - v2.3.5:

    • Fiewer correctly displays detector gaps for Dectris Eiger.
    • Fiewer can open Eiger frames from ID11@ESRF.
    • Fiewer: fixed an issue when the shown image is one more pixel stretched than it should be.
    • Fiewer can sum up frames in multiframe files (usually, Eiger HDF5) and export them as one EDF.
    • HeadEx can now extract the Pressure header key.
  • 2022.4.20 - v2.3.4:

    • Fix regression in Crysis (since v2.2.4): Crysis creates a not containing mask file for Pilatus detectors.
    • Converter now uses AVX and AVX2 CPU instructions which may stop Toolbox working on old computers.
  • 2022.1.26 - v2.3.3:

    • Fix Fiewer regressions:
      • not showing any angular information for CBF files #12.
      • bad units for Bubble cakes #13.
  • 2022.1.7 - v2.3.2:

    • Fix Fiewer crashes when a Bubble cake is not square #11.
    • Fiewer can open pyFAI generated HDF5 files.
    • HeadEx: extract header values from EDF files.
  • 2021.11.26 - v2.3.1

    • Converter: fix incorrect summing of angle increments for periodical binnings.
    • Converter: fix a possible crash if user deletes files from the list for conversion.
  • 2021.10.28 - v2.3.0

    • Fiewer shows cakes produces by Bubble bubbles #7.
    • Converter: improve the speed of file scanning when adding an enormous amount of files.
  • 2021.6.29 - v2.2.6

    • Fiewer watches for newly appearing files (even on Windows)
    • Fiewer can open tiff files with int32 values (usually Pilatus tiff)
    • HeadEx can extract calibrated blower temperature: use Blower_calibrated in the list
  • 2021.1.27 - v2.2.5

    • Fix regression in Converter: very slow file scanning
  • 2020.12.16 - v2.2.4

    • Crysis: fix multiruns with KuMa-like kappa goniometer
    • Converter: CBF 'Count_cutoff' header key is summed up while binning
    • Fiewer: fix remembering to many arrow key clicks while listing heavy frames
  • 2020.10.8 - v2.2.3

    • Converter: Gandolfi-like binning for multi-temperature single crystal scans
    • Fiewer: display angular information for CBF frames
  • 2020.9.1 - v2.2.2

    • Converter: fix incorrect binning of CBF frames periodically on Windows and MacOS
  • 2020.8.26 - v2.2.1

    • Converter: fix incorrect binning of CBF frames
  • 2020.5.17 - v2.2.0

    • Fiewer: new frame formats:
      • Agilent esperanto, raw frames and packed with AGI_BITFIELD;
      • TIFF;
      • Dectris Eiger HDF5;
    • Fiewer: fix various memory leaks happened when playing frames back and forward
    • Fiewer: smart file sorting
  • 2020.5.17 - v2.1.0

    • A new tool: Fiewer - the frame viewer. Fiewer is supposed to be a fast tool to show images. It is able to jump between frame files or frames inside a multiframe file (using tool buttons or keyboard arrow keys) sorting files in lexical order. Fiewer support frame types such as:

      • EDF: all primitive types, multiframed files. Packed (gzip, etc) EDF format is not supported;
      • CBF from Dectris Pilatus;
      • Bruker format;
      • Mar (non-spiral);
      • JungFrau: only if master header in HDF5 format exists;
      • Fit2D masks;
    • Converter: fix naming scheme while binning periodical datasets

  • 2020.2.21 - v2.0.10

    • Converter: properly sum up the header keys for merged frames
  • 2019.4.15 - v2.0.9 (a9c76dfce9c6ac07789341fef61d902b01aa8071)

    • Converter: fix wrong MD5 sum in merged CBF files, then ALBULA can open CBF files after the Toolbox again
    • Converter: set negative intensities to the requested value even for one converted frame
    • Converter: check the flux value for zero, otherwise a CBF header could have a 'nan' value for flux
  • 2019.4.8 - v2.0.8 (70c41a5636f91804c299395e658cc7c344ad299f)

    • Fix wrong update message
    • Minor internal fixes for performance
  • 2019.1.21 - v2.0.6 (ea5930cd008a856a6bbbeaa9dfbd1a51bb6b4454)

    • SNBL Toolbox is rewritten in C++ and changes version from 1 to 2
    • Crysis accepts a par file as a template for all processed directories
    • To start from scratch, Crysis can remove all old files processed by Crysalis before. Use attentively!
    • Converter can normalize the final frame on the Flux counter or the median value
    • Various small fixes
  • 2018.2.27

    • 3DV: fix Windows bugs
    • HeadEx: fix progress bar
    • HeadEx: fix not working stop button
  • 2018.1.16 (7b5973dbceb9)

    • HeadEx can return CBF time as Unix time (number of seconds since January 1, 1970)
    • HeadEx reads cbf files using multiple threads
  • 2018.1.15 (6219065f6a4b)

    • Fix various crashes in HeadEx
    • New look for HeadEx
  • 2017.12.14 (c302bcd79ef6)

    • Crysis and Converter do not crash if there is an OS error (read-only filesystem, for example)
    • 3DV does not create layers with just zeros on Windows
    • SNBL Toolbox checks the updates from https://soft.snbl.eu/
  • 2017.8.23 (344b86e56f28)

    • Comply with new cryio API.
    • Since August 24, 2017 Pylatus changes the position of the beam center to comply not with Fit2D (as before) but with Albula and pyFAI. Thus, crysis can now correctly handle the old and the new data.
    • crysis shows the whole progress now.

SNBL Toolbox

SNBL Toolbox

SNBL Toolbox is a set of useful programs for Pilatus data. If you use this program please cite this paper: A new multipurpose diffractometer PILATUS@SNBL

SNBL Toolbox is open source software covered by the GPLv3 license.

Download

To run the SNBL Toolbox in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of the SNBL Toolbox is compiled in Ubuntu 16.04 LTS, thus it should work in any rather new distributions.



Source code

Source code is freely available at the git repositories:

Changelog

  • 2023.3.1 - v2.3.7:

    • Crysis: fix regression when Crysis does not create all the needed files for Crysalis.
    • Fiewer: now can open Crysalis IMG files.
    • HeadEx: support for Voltage CBF header key.
  • 2023.1.25 - v2.3.6:

    • Converter: fix incorrect periodical binning when it is started not from the very first period #14.
    • Fiewer: fix incorrect numbers in Bubble cakes in Windows a0a374e4e6.
  • 2022.8.3 - v2.3.5:

    • Fiewer correctly displays detector gaps for Dectris Eiger.
    • Fiewer can open Eiger frames from ID11@ESRF.
    • Fiewer: fixed an issue when the shown image is one more pixel stretched than it should be.
    • Fiewer can sum up frames in multiframe files (usually, Eiger HDF5) and export them as one EDF.
    • HeadEx can now extract the Pressure header key.
  • 2022.4.20 - v2.3.4:

    • Fix regression in Crysis (since v2.2.4): Crysis creates a not containing mask file for Pilatus detectors.
    • Converter now uses AVX and AVX2 CPU instructions which may stop Toolbox working on old computers.
  • 2022.1.26 - v2.3.3:

    • Fix Fiewer regressions:
      • not showing any angular information for CBF files #12.
      • bad units for Bubble cakes #13.
  • 2022.1.7 - v2.3.2:

    • Fix Fiewer crashes when a Bubble cake is not square #11.
    • Fiewer can open pyFAI generated HDF5 files.
    • HeadEx: extract header values from EDF files.
  • 2021.11.26 - v2.3.1

    • Converter: fix incorrect summing of angle increments for periodical binnings.
    • Converter: fix a possible crash if user deletes files from the list for conversion.
  • 2021.10.28 - v2.3.0

    • Fiewer shows cakes produces by Bubble bubbles #7.
    • Converter: improve the speed of file scanning when adding an enormous amount of files.
  • 2021.6.29 - v2.2.6

    • Fiewer watches for newly appearing files (even on Windows)
    • Fiewer can open tiff files with int32 values (usually Pilatus tiff)
    • HeadEx can extract calibrated blower temperature: use Blower_calibrated in the list
  • 2021.1.27 - v2.2.5

    • Fix regression in Converter: very slow file scanning
  • 2020.12.16 - v2.2.4

    • Crysis: fix multiruns with KuMa-like kappa goniometer
    • Converter: CBF 'Count_cutoff' header key is summed up while binning
    • Fiewer: fix remembering to many arrow key clicks while listing heavy frames
  • 2020.10.8 - v2.2.3

    • Converter: Gandolfi-like binning for multi-temperature single crystal scans
    • Fiewer: display angular information for CBF frames
  • 2020.9.1 - v2.2.2

    • Converter: fix incorrect binning of CBF frames periodically on Windows and MacOS
  • 2020.8.26 - v2.2.1

    • Converter: fix incorrect binning of CBF frames
  • 2020.5.17 - v2.2.0

    • Fiewer: new frame formats:
      • Agilent esperanto, raw frames and packed with AGI_BITFIELD;
      • TIFF;
      • Dectris Eiger HDF5;
    • Fiewer: fix various memory leaks happened when playing frames back and forward
    • Fiewer: smart file sorting
  • 2020.5.17 - v2.1.0

    • A new tool: Fiewer - the frame viewer. Fiewer is supposed to be a fast tool to show images. It is able to jump between frame files or frames inside a multiframe file (using tool buttons or keyboard arrow keys) sorting files in lexical order. Fiewer support frame types such as:

      • EDF: all primitive types, multiframed files. Packed (gzip, etc) EDF format is not supported;
      • CBF from Dectris Pilatus;
      • Bruker format;
      • Mar (non-spiral);
      • JungFrau: only if master header in HDF5 format exists;
      • Fit2D masks;
    • Converter: fix naming scheme while binning periodical datasets

  • 2020.2.21 - v2.0.10

    • Converter: properly sum up the header keys for merged frames
  • 2019.4.15 - v2.0.9 (a9c76dfce9c6ac07789341fef61d902b01aa8071)

    • Converter: fix wrong MD5 sum in merged CBF files, then ALBULA can open CBF files after the Toolbox again
    • Converter: set negative intensities to the requested value even for one converted frame
    • Converter: check the flux value for zero, otherwise a CBF header could have a 'nan' value for flux
  • 2019.4.8 - v2.0.8 (70c41a5636f91804c299395e658cc7c344ad299f)

    • Fix wrong update message
    • Minor internal fixes for performance
  • 2019.1.21 - v2.0.6 (ea5930cd008a856a6bbbeaa9dfbd1a51bb6b4454)

    • SNBL Toolbox is rewritten in C++ and changes version from 1 to 2
    • Crysis accepts a par file as a template for all processed directories
    • To start from scratch, Crysis can remove all old files processed by Crysalis before. Use attentively!
    • Converter can normalize the final frame on the Flux counter or the median value
    • Various small fixes
  • 2018.2.27

    • 3DV: fix Windows bugs
    • HeadEx: fix progress bar
    • HeadEx: fix not working stop button
  • 2018.1.16 (7b5973dbceb9)

    • HeadEx can return CBF time as Unix time (number of seconds since January 1, 1970)
    • HeadEx reads cbf files using multiple threads
  • 2018.1.15 (6219065f6a4b)

    • Fix various crashes in HeadEx
    • New look for HeadEx
  • 2017.12.14 (c302bcd79ef6)

    • Crysis and Converter do not crash if there is an OS error (read-only filesystem, for example)
    • 3DV does not create layers with just zeros on Windows
    • SNBL Toolbox checks the updates from https://soft.snbl.eu/
  • 2017.8.23 (344b86e56f28)

    • Comply with new cryio API.
    • Since August 24, 2017 Pylatus changes the position of the beam center to comply not with Fit2D (as before) but with Albula and pyFAI. Thus, crysis can now correctly handle the old and the new data.
    • crysis shows the whole progress now.

Old SNBL Toolbox versions

Bubble

Bubble

Bubble is a program for fast on-line powder integration for small and wide angle diffraction.

If you use this program please cite this paper: A new multipurpose diffractometer PILATUS@SNBL.

Bubble is open source software covered by the GPLv3 license.

Download

To run the Bubble client in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.



Source code

Source code is freely available at the git repositories:

Changelog

  • 2023.1.27 - v4.2.2:

    • Lexicographical sorting of the azimuthal slices.
    • bubbles: new CLI argument (--poll, -p) to poll watched directories periodically; it is useful for network shares (like NFS) when bubbles does get INotify events from kernel.
  • 2022.1.7 - v4.2.0:

    • Client does not crash anymore, if an empty mask is applied (bubblec #4).
    • Client can disconnect from server from now (bubblec #5).
    • Fix SNBL azimuthal range (bubbles #18).
    • Auto mask Eiger gaps (bubbles #19).
    • Average is now possible for multiframed data (i.e. Eiger) (bubbles #20). Averaging cannot go through frame border.
    • If user stops integration, averaging also stops (bubbles #21).
  • 2021.10.27 - v4.1.0:

    • Nice cake view (can be seen via SNBL Toolbox Fiewer) (bubbles #7).
    • Bubble should now guess the pixel size from a detector name from new PONI format.
  • 2021.7.23 - v4.0.2:

    • Fix server crash when a user specifies radial range above the bin limit (bubbles #15).
    • Fix for server which could not open certain unlucky EDF files (bubbles #16).
  • 2021.7.16 - v4.0.1:

    • Fix memory leaks in server (bubbles #13).
    • Add FReLoN detector in the PONI parser.
  • 2021.5.27 - v4.0.0:

    • Dectris Eiger HDF5 with bitshuffle filter support (cryiorust #3).
    • Cakes are now saved in EDF to avoid rounding problems with CBF format. Use SNBL Toolbox::Fiewer to look at them (bubble.meta #1).
    • Dark background and sample files do not swap anymore (bubblec #3).
    • SAXS and WAXS calibration factors are not swapped anymore (bubblec #2).
    • The plot is now properly updated with the latest integrated file (bubblec #1).
    • Averaging is not so greedy for memory anymore (bubbles #10).
    • Previously, switching normalization from Monitor to None did not have any effect, it is fixed now (bubbles #8).
    • On linux bubbles may create files available only to its user (i.e. 0600), it is fixed now (bubbles #2).
    • Fix for not reading symlinks in bubbles (bubbles #1).
    • Bubbles is using Actix framework now (bubbles #5).
    • Fix for overflows in some Mar files.
    • Add support for tif files with 32 and 64 signed integers (mainly tested with files produced by Dectris Pilatus).
  • 2020.5.17 - v3.1.0:

    • Add the 'None' beamline: the images are shown and integrated 'as is' without applying any transformations. This beamline type has to be chosen in case if the data are not measured neither on SNBL-BM01@ESRF nor Dubble@ESRF.
    • When both radial and azimuthal ranges were applied, the final integration pattern could have been calculated incorrectly. Fixed.
    • Fix crashes of the client on linux.
    • Save mask ROI separately in the client.
    • Save mask in Fit2D format. Then it can be reused in Fit2D or pyFAI. The beamline should be set to None then.
    • When an integrated 2D pattern (or a mask image) is zoomed enough then the pixel intensity is shown for all the visible pixels.
  • 2020.2.7 - v3.0.0:

    • The server is rewritten in the Rust programming language. The integration speed increased up to 20% and the memory consumption decreased about two times.
    • On-line integration is now available on the all three main platforms, monitor and photo counters and transmission are correctly taken into account.
    • Integrator can now average files by a number given by user. The averaging happens per directory. Contradicting issues between the on-line integration and the averaging are quite expected and cannot be avoided.
    • In the client it is again possible to set logarithmic scale for the axes in 2D plots.
    • The server can run as a normal UNIX daemon (forking, logging, etc).
    • Minor usability fixes in the client.
    • Qt updated to v5.14.1
  • 2019.7.30 - v2.0.0:

    • The client is rewritten in C++.
    • New widgets for 1D and 2D plots. To rescale the values for 2D plots, please, use the mouse wheel and dragging on the colorbar. The right button allows to change the color scheme.
    • The mask is now plotted using polygon lines (like in Fit2D), double click finishes the mask shape. The mask can be dragged or removed (via the context menu).
    • The issue, when a few overlapping polygons produce gaps in the final mask, has been resolved.
    • Issues with discontinuity for azimuthal integration has been solved for angles 0, 90, 180, 270. The discontinuity for angle 360 still exists.
    • The client does not crash anymore when the number of bins set to 1.
    • The button with the server settings has been removed. Partially, those settings migrated to the advanced options, separately for SAXS and WAXS.
  • 2018.11.28

    • Bugfix: fix multicolumn files.
  • 2018.11.8.1

    • Support for new poni files from pyFAI-0.16.
    • Bugfix: saving mask with 'less' or 'more' values does not crash the client after reopen.
    • Bugfix: when WAXS is not normalized, the background was not properly subtracted.
  • 2018.7.9

    • Hopefully, the final fix of crashes in Windows.
    • New mask: the saved mask file contains everything inside: both an image and ROIs which can be edited after load.
  • 2018.6.21

    • Fix various Windows related bugs.
  • 2018.6.8

    • Fix various client crashes.
  • 2018.6.7

    • Fixing various bugs in the Windows version;
    • Fixing bugs with spline correction;
    • Correct calculation of the error bars for patterns normalized by the background;
    • bubbleg can be run with option -resize N, where is a number to bin images by NxN pixels; it decreases the image size which are to be transferred over the network. By default, N=1 in Linux and N=4 in Windows and macOS.
  • 2018.3.7

    • Fixing issues with ellipsoidal mask in the client;
    • Bruker images;
    • Distortion correction for Frelon.
  • 2018.2.22

    • New integration server written in Go, thus, the features are not yet supported:

      • Spline files for Frelon-like cameras;
      • Brueker images;

      If you need these features, please use an older version. Everything else should work as expected.

    • Bubble client shows the image after integration, which means, if radial or azimuthal limits are applied, then they will also be seen in the 2D plot;

    • Now it is possible to set both numbers of radial and azimuthal bins in the Options page, thus, bubble can save radially integrated patterns as a function of 2θ (Q), azimuthally integrated patterns as a function of χ and 2D-Cake images in CBF format;

    • Recursive integration: the bubble server integrates in the parent directory and in all the internal directories;

    • There is no need anymore to do start/stop, if the directory is the same: bubble not just waits for new files, but it also checks if the older files have changed and integrates them accordingly.

    • Mar Image Plate image support;

  • 2017.10.22 (513b8fb114c6)

    • Bruker image support.
  • 2017.10.21 (7c24e8753ce8)

    • Updated UI.
    • Fine integration tuning on the server tab:
      • Number of bins;
      • Polarization correction;
      • Solid angle correction;
      • Double precision.
    • Client checks updates.
    • Minor bug fixes.
  • 2017.8.24 (70ff9f8e8d97)

    • If normalization is done not by monitor, then the Bubble does read the Flux value from the CBF header.
    • The options 'Speed' and 'Super speed' are applied on-line: there is no need to restart the integration process.
    • Minor bug fixes.

Bubble

Bubble

Bubble is a program for fast on-line powder integration for small and wide angle diffraction.

If you use this program please cite this paper: A new multipurpose diffractometer PILATUS@SNBL.

Bubble is open source software covered by the GPLv3 license.

Download

To run the Bubble client in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.



Source code

Source code is freely available at the git repositories:

Changelog

  • 2023.1.27 - v4.2.2:

    • Lexicographical sorting of the azimuthal slices.
    • bubbles: new CLI argument (--poll, -p) to poll watched directories periodically; it is useful for network shares (like NFS) when bubbles does get INotify events from kernel.
  • 2022.1.7 - v4.2.0:

    • Client does not crash anymore, if an empty mask is applied (bubblec #4).
    • Client can disconnect from server from now (bubblec #5).
    • Fix SNBL azimuthal range (bubbles #18).
    • Auto mask Eiger gaps (bubbles #19).
    • Average is now possible for multiframed data (i.e. Eiger) (bubbles #20). Averaging cannot go through frame border.
    • If user stops integration, averaging also stops (bubbles #21).
  • 2021.10.27 - v4.1.0:

    • Nice cake view (can be seen via SNBL Toolbox Fiewer) (bubbles #7).
    • Bubble should now guess the pixel size from a detector name from new PONI format.
  • 2021.7.23 - v4.0.2:

    • Fix server crash when a user specifies radial range above the bin limit (bubbles #15).
    • Fix for server which could not open certain unlucky EDF files (bubbles #16).
  • 2021.7.16 - v4.0.1:

    • Fix memory leaks in server (bubbles #13).
    • Add FReLoN detector in the PONI parser.
  • 2021.5.27 - v4.0.0:

    • Dectris Eiger HDF5 with bitshuffle filter support (cryiorust #3).
    • Cakes are now saved in EDF to avoid rounding problems with CBF format. Use SNBL Toolbox::Fiewer to look at them (bubble.meta #1).
    • Dark background and sample files do not swap anymore (bubblec #3).
    • SAXS and WAXS calibration factors are not swapped anymore (bubblec #2).
    • The plot is now properly updated with the latest integrated file (bubblec #1).
    • Averaging is not so greedy for memory anymore (bubbles #10).
    • Previously, switching normalization from Monitor to None did not have any effect, it is fixed now (bubbles #8).
    • On linux bubbles may create files available only to its user (i.e. 0600), it is fixed now (bubbles #2).
    • Fix for not reading symlinks in bubbles (bubbles #1).
    • Bubbles is using Actix framework now (bubbles #5).
    • Fix for overflows in some Mar files.
    • Add support for tif files with 32 and 64 signed integers (mainly tested with files produced by Dectris Pilatus).
  • 2020.5.17 - v3.1.0:

    • Add the 'None' beamline: the images are shown and integrated 'as is' without applying any transformations. This beamline type has to be chosen in case if the data are not measured neither on SNBL-BM01@ESRF nor Dubble@ESRF.
    • When both radial and azimuthal ranges were applied, the final integration pattern could have been calculated incorrectly. Fixed.
    • Fix crashes of the client on linux.
    • Save mask ROI separately in the client.
    • Save mask in Fit2D format. Then it can be reused in Fit2D or pyFAI. The beamline should be set to None then.
    • When an integrated 2D pattern (or a mask image) is zoomed enough then the pixel intensity is shown for all the visible pixels.
  • 2020.2.7 - v3.0.0:

    • The server is rewritten in the Rust programming language. The integration speed increased up to 20% and the memory consumption decreased about two times.
    • On-line integration is now available on the all three main platforms, monitor and photo counters and transmission are correctly taken into account.
    • Integrator can now average files by a number given by user. The averaging happens per directory. Contradicting issues between the on-line integration and the averaging are quite expected and cannot be avoided.
    • In the client it is again possible to set logarithmic scale for the axes in 2D plots.
    • The server can run as a normal UNIX daemon (forking, logging, etc).
    • Minor usability fixes in the client.
    • Qt updated to v5.14.1
  • 2019.7.30 - v2.0.0:

    • The client is rewritten in C++.
    • New widgets for 1D and 2D plots. To rescale the values for 2D plots, please, use the mouse wheel and dragging on the colorbar. The right button allows to change the color scheme.
    • The mask is now plotted using polygon lines (like in Fit2D), double click finishes the mask shape. The mask can be dragged or removed (via the context menu).
    • The issue, when a few overlapping polygons produce gaps in the final mask, has been resolved.
    • Issues with discontinuity for azimuthal integration has been solved for angles 0, 90, 180, 270. The discontinuity for angle 360 still exists.
    • The client does not crash anymore when the number of bins set to 1.
    • The button with the server settings has been removed. Partially, those settings migrated to the advanced options, separately for SAXS and WAXS.
  • 2018.11.28

    • Bugfix: fix multicolumn files.
  • 2018.11.8.1

    • Support for new poni files from pyFAI-0.16.
    • Bugfix: saving mask with 'less' or 'more' values does not crash the client after reopen.
    • Bugfix: when WAXS is not normalized, the background was not properly subtracted.
  • 2018.7.9

    • Hopefully, the final fix of crashes in Windows.
    • New mask: the saved mask file contains everything inside: both an image and ROIs which can be edited after load.
  • 2018.6.21

    • Fix various Windows related bugs.
  • 2018.6.8

    • Fix various client crashes.
  • 2018.6.7

    • Fixing various bugs in the Windows version;
    • Fixing bugs with spline correction;
    • Correct calculation of the error bars for patterns normalized by the background;
    • bubbleg can be run with option -resize N, where is a number to bin images by NxN pixels; it decreases the image size which are to be transferred over the network. By default, N=1 in Linux and N=4 in Windows and macOS.
  • 2018.3.7

    • Fixing issues with ellipsoidal mask in the client;
    • Bruker images;
    • Distortion correction for Frelon.
  • 2018.2.22

    • New integration server written in Go, thus, the features are not yet supported:

      • Spline files for Frelon-like cameras;
      • Brueker images;

      If you need these features, please use an older version. Everything else should work as expected.

    • Bubble client shows the image after integration, which means, if radial or azimuthal limits are applied, then they will also be seen in the 2D plot;

    • Now it is possible to set both numbers of radial and azimuthal bins in the Options page, thus, bubble can save radially integrated patterns as a function of 2θ (Q), azimuthally integrated patterns as a function of χ and 2D-Cake images in CBF format;

    • Recursive integration: the bubble server integrates in the parent directory and in all the internal directories;

    • There is no need anymore to do start/stop, if the directory is the same: bubble not just waits for new files, but it also checks if the older files have changed and integrates them accordingly.

    • Mar Image Plate image support;

  • 2017.10.22 (513b8fb114c6)

    • Bruker image support.
  • 2017.10.21 (7c24e8753ce8)

    • Updated UI.
    • Fine integration tuning on the server tab:
      • Number of bins;
      • Polarization correction;
      • Solid angle correction;
      • Double precision.
    • Client checks updates.
    • Minor bug fixes.
  • 2017.8.24 (70ff9f8e8d97)

    • If normalization is done not by monitor, then the Bubble does read the Flux value from the CBF header.
    • The options 'Speed' and 'Super speed' are applied on-line: there is no need to restart the integration process.
    • Minor bug fixes.

Previous versions of Bubble

Medved

Medved

Medved (Modulation-Enhanced Diffraction Viewer and EDitor) is software that allows a user to load a number of powder patterns (standard two- or three-column ASCII data files) or hkl files (in SHELX format), inspect them separately or together, calculate Fourier transforms (using fast Fourier transform algorithms) and inspect separate harmonics as well as their real or imaginary parts.

If you use this program please cite this paper: Frequency analysis for modulation-enhanced powder diffraction.

Medved is open source software covered by the GPLv3 license.

Download

To run Medved in Windows you may need to install the the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of Medved is compiled in Ubuntu 16.04 LTS, thus it should work in any rather new distributions. It will probably not work in CentOS or similar "conservative" distributions.

The macOS version of Medved is compiled in Mac OS X 10.15.7.



Source code

Medved source code is freely available at the git repositories:

Changelog

  • 2023.3.1 - v2.3.0:

    • Save Fourier data as text files.
  • 2021.9.17 - v2.2.0:

    • The crosshair size can be adjusted to cover the actually integrated area (View->Adjust crosshair size).
    • Export vertical cut and 2d images.
    • Fit vertical cut with pseudo-Voigt function (Process->Fit...).
    • Fourier is calculated only on-demand (i.e. when the Fourier tab is switched).
  • 2020.5.17 - v2.1.0:

    • Medved opens patterns in parallel.
    • If the directory with data contained non pattern files, they might have appeared in the data dock. Fixed.
    • When the image is zoomed enough, Medved shows the pixel value for the all visible pixels.
  • 2020.1.14 - v2.0.0:

    • Major version change to 2
    • The core is rewritten in C++, the performance is significantly boosted
    • Reload button
    • Auto-reload option (only in Linux and macOS), Medved automatically loads newly created patterns
    • Changeable size of the cuts
  • 2017.11.20.1 (d5fbc19b6f0e)

    • New UI
    • Fix update checking
    • Fix for the crash when a new dataset is loaded
  • 2017.9.12.1 (401e64c7806c)

    • Minor bug fixes
  • 2017.9.12 (88aaf6d3b2e4)

    • MEDVED checks updates at https://soft.snbl.eu
    • New UI based on standard Qt widgets
    • Fourier calculations are done n times faster now, where n is a number of loaded files
    • Fixing the About window: new website; the links are clickable now
    • Fourier view correctly shows plot ticks when switches something->phase->something
    • Refactoring of the code
    • Minor bug fixes
  • 2016.12.2 (a807bc7b7cc8)

    • Porting to Qt5
    • Small improvements

Medved

Medved

Medved (Modulation-Enhanced Diffraction Viewer and EDitor) is software that allows a user to load a number of powder patterns (standard two- or three-column ASCII data files) or hkl files (in SHELX format), inspect them separately or together, calculate Fourier transforms (using fast Fourier transform algorithms) and inspect separate harmonics as well as their real or imaginary parts.

If you use this program please cite this paper: Frequency analysis for modulation-enhanced powder diffraction.

Medved is open source software covered by the GPLv3 license.

Download

To run Medved in Windows you may need to install the the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of Medved is compiled in Ubuntu 16.04 LTS, thus it should work in any rather new distributions. It will probably not work in CentOS or similar "conservative" distributions.

The macOS version of Medved is compiled in Mac OS X 10.15.7.



Source code

Medved source code is freely available at the git repositories:

Changelog

  • 2023.3.1 - v2.3.0:

    • Save Fourier data as text files.
  • 2021.9.17 - v2.2.0:

    • The crosshair size can be adjusted to cover the actually integrated area (View->Adjust crosshair size).
    • Export vertical cut and 2d images.
    • Fit vertical cut with pseudo-Voigt function (Process->Fit...).
    • Fourier is calculated only on-demand (i.e. when the Fourier tab is switched).
  • 2020.5.17 - v2.1.0:

    • Medved opens patterns in parallel.
    • If the directory with data contained non pattern files, they might have appeared in the data dock. Fixed.
    • When the image is zoomed enough, Medved shows the pixel value for the all visible pixels.
  • 2020.1.14 - v2.0.0:

    • Major version change to 2
    • The core is rewritten in C++, the performance is significantly boosted
    • Reload button
    • Auto-reload option (only in Linux and macOS), Medved automatically loads newly created patterns
    • Changeable size of the cuts
  • 2017.11.20.1 (d5fbc19b6f0e)

    • New UI
    • Fix update checking
    • Fix for the crash when a new dataset is loaded
  • 2017.9.12.1 (401e64c7806c)

    • Minor bug fixes
  • 2017.9.12 (88aaf6d3b2e4)

    • MEDVED checks updates at https://soft.snbl.eu
    • New UI based on standard Qt widgets
    • Fourier calculations are done n times faster now, where n is a number of loaded files
    • Fixing the About window: new website; the links are clickable now
    • Fourier view correctly shows plot ticks when switches something->phase->something
    • Refactoring of the code
    • Minor bug fixes
  • 2016.12.2 (a807bc7b7cc8)

    • Porting to Qt5
    • Small improvements

Previous versions

Chirok

Chirok

Chirok is a program for statistical analysis of the ratio of calculated and measured Parsons quotients.

Chirok is open source software covered by the GPLv3 license.

If you use this program, please cite the following paper: Chirok: a post-refinement tool to analyse absolute structure.

Download

To run Chirok in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of Chirok is compiled in Ubuntu 16.04, thus it should work in any rather new distributions.



Source code

Source code is freely available at the git repository: https://git.3lp.cx/dyadkin/chirok

Changelog

  • 2020.7.28 - v1.1.2:

    • Add paper into the about windows.
  • 2020.5.20 - v1.1.1:

    • Minor fixes.
  • 2020.2.28 - v1.1.0:

    • Chirok predicts the Gamma threshold and the number of bins using the Random Forest algorithm.
    • Remove funny characters from the log output on Windows.
    • Fix minor issues with zooming and autoscaling.
  • 2019.7.24 - v1.0.0:

    • First release.
  • 2018.12.13 - v0.1.0:

    • Initial alpha release.

Chirok

Chirok

Chirok is a program for statistical analysis of the ratio of calculated and measured Parsons quotients.

Chirok is open source software covered by the GPLv3 license.

If you use this program, please cite the following paper: Chirok: a post-refinement tool to analyse absolute structure.

Download

To run Chirok in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of Chirok is compiled in Ubuntu 16.04, thus it should work in any rather new distributions.



Source code

Source code is freely available at the git repository: https://git.3lp.cx/dyadkin/chirok

Changelog

  • 2020.7.28 - v1.1.2:

    • Add paper into the about windows.
  • 2020.5.20 - v1.1.1:

    • Minor fixes.
  • 2020.2.28 - v1.1.0:

    • Chirok predicts the Gamma threshold and the number of bins using the Random Forest algorithm.
    • Remove funny characters from the log output on Windows.
    • Fix minor issues with zooming and autoscaling.
  • 2019.7.24 - v1.0.0:

    • First release.
  • 2018.12.13 - v0.1.0:

    • Initial alpha release.

Previous versions

GIuSAXS: GISAXS and GIWAXS data viewer

GIuSAXS

GIuSAXS is a tool to inspect GISAXS and GIWAXS data. The program is made in collaboration between:

  • Giuseppe Portale, Zernike Institute for advanced Materials at the University of Groningen;
  • Daniel Hermida Merino, Dubble@ESRF;
  • Eduardo Solano, ALBA;
  • Vadim Diadkin, SNBL@ESRF.

GIuSAXS is open source software covered by the GPLv3 license. GIuSAXS is funded by Dubble@ESRF.

Download

To run GIuSAXS in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of the GIuSAXS is compiled in Ubuntu 16.04 LTS, thus it should work in any rather new distributions.



Source code:

Source code is freely available at the git repository: https://git.3lp.cx/dyadkin/giusaxs.

Changelog

  • 2023.1.31 - v0.2.1:

    • Export processed data as EDF.
  • 2022.1.7 - v0.2.0:

    • Listing directories using arrow keys or tool buttons (#2).
    • Serialization of parameters to be applied on another directory (#3).
  • 2021.11.12 - v0.1.0:

    • Reading a PONI file for geometry calculations.
    • Ewald sphere corrections for qz vs qr.
    • Sequential calculation of the cuts and storing them in ASCII files.
    • Calculation of transmission.
  • 2021.3.10 - v0.0.1

    • Initial release of the version, rewritten in C++.
  • 2017.10.23 (24a6613848e0)

    • Support for Bruker images.
  • 2017.10.22 (4793fe9afb8b)

    • View menu to switch back the docks.
    • Minor fixes.
  • 2017.4.29 (dc1272d9cf36)

    • Initial release.

GIuSAXS: GISAXS and GIWAXS data viewer

GIuSAXS

GIuSAXS is a tool to inspect GISAXS and GIWAXS data. The program is made in collaboration between:

  • Giuseppe Portale, Zernike Institute for advanced Materials at the University of Groningen;
  • Daniel Hermida Merino, Dubble@ESRF;
  • Eduardo Solano, ALBA;
  • Vadim Diadkin, SNBL@ESRF.

GIuSAXS is open source software covered by the GPLv3 license. GIuSAXS is funded by Dubble@ESRF.

Download

To run GIuSAXS in Windows you may need to install the MS Visual C++ Redistributable for Visual Studio 2015-2019.

The Linux version of the GIuSAXS is compiled in Ubuntu 16.04 LTS, thus it should work in any rather new distributions.



Source code:

Source code is freely available at the git repository: https://git.3lp.cx/dyadkin/giusaxs.

Changelog

  • 2023.1.31 - v0.2.1:

    • Export processed data as EDF.
  • 2022.1.7 - v0.2.0:

    • Listing directories using arrow keys or tool buttons (#2).
    • Serialization of parameters to be applied on another directory (#3).
  • 2021.11.12 - v0.1.0:

    • Reading a PONI file for geometry calculations.
    • Ewald sphere corrections for qz vs qr.
    • Sequential calculation of the cuts and storing them in ASCII files.
    • Calculation of transmission.
  • 2021.3.10 - v0.0.1

    • Initial release of the version, rewritten in C++.
  • 2017.10.23 (24a6613848e0)

    • Support for Bruker images.
  • 2017.10.22 (4793fe9afb8b)

    • View menu to switch back the docks.
    • Minor fixes.
  • 2017.4.29 (dc1272d9cf36)

    • Initial release.

Previous versions

seq_shel: Sequential run of Crysalis and shelx

seq_shel allows you to run Crysalis and shelx sequentially for multiple single crystal datasets.

Better description can be found in the ECM Poster.

seq_shel is open source software covered by the GPLv3 license.

Download



Source code

Source code is freely available at the git repository:

seq_shel: Sequential run of Crysalis and shelx

seq_shel allows you to run Crysalis and shelx sequentially for multiple single crystal datasets.

Better description can be found in the ECM Poster.

seq_shel is open source software covered by the GPLv3 license.

Download



Source code

Source code is freely available at the git repository:

Previous versions