Usage

Nexgen is a Python package that provides a set of tools to write NeXus files for experiments at Diamond Light Source, following the NXmx application definition for macromolecular crystallography. This is meant to include all relevant experiment metadata required to process the datasets, including detector and goniometer description.

Installation

Nexgen can be installed using pip.

pip install nexgen

Note

This project is under development.

Command line tools

This package started out as an easy way to quickly generate NeXus files from scratch along with blank HDF5 datasets using command line tools.

Note

NOTE ON PARSING

The command line tools have been refactored as of version 0.11.0 and no longer use freephil because of dependencies issues with some packages being deprecated. Old tools are still available in older nexgen versions.

Getting help

Every command line tool in the nexgen package has a help message that explains how to use it and what the options are. This help message will be printed by using the option -h, or –help, and each subcommand also has an help message detailing its specific options.

generate_nexus demo -h

Generating new NeXus files

  • For an existing dataset

    generate_nexus 1 File_00_meta.h5 --config config_file.yaml -o /path/to/output/dir -nxs File_01.nxs
    
  • From scratch, along with blank data (demo)

    generate_nexus 2 File.nxs -n 3600 --config config_file.yaml --mask /path/to/mask/file
    

Note

This functionality will only work properly for NXmx datasets.

Generating NXmx-like NeXus files for Electron Diffraction

Example usage for a dataset collected on Dectris Singla 1M detector using a phil parser:

ED_nexus singla-phil FILE_master.h5 FILE_data_01.h5 FILE_data_02.h5 (etc) --config ED_Singla.yaml

The instrument name and source are defined by the values parsed from source, which can be defined in the config file as follows:

instrument:
    source:
        beamline: "eBIC"
        facility:
            name: "Diamond Light Source"
            short_name: "DLS"
            type: "Electron Source"
            id: "DIAMOND MICROSCOPE"
        probe: "electron"

Passing a facility id allows the user to specify a more specific name for the /entry/instrument/name field; this will result in the instrument name being set to DIAMOND MICROSCOPE eBic instead of DIAMOND eBic.

The downside of this option is that the external links to the data will now be saved using absolute paths instead of relative.

Example usage for a dataset collected on Dectris Singla 1M detector without the phil parser (new as of version 0.7.3):

ED_nexus singla FILE_master.h5 400 -e 0.099 -wl 0.02 -bc 1 1 --axis-name alpha --axis-start 0.0 --axis-inc 0.11

For both CLI tools, in case there is a need to save the NeXus file in a different location than the data files:

-o /path/to/new/directory

Configuration files

The configuration files passed to the commanf line should be either yaml or json files, implementing the configuration schema described in CLI configuration.

Example yaml

gonio:
    axes:
        - name: phi
        depends: "."
        transformation_type: rotation
        vector: [-1,0,0]
        start_pos: 10.0
        - name: sam_z
        depends: "phi"
        transformation_type: translation
        vector: [0,0,1]
        start_pos: 0.0
        increment: 0.125
        num_steps: 20
        - name: sam_x
        depends: "sam_z"
        transformation_type: translation
        vector: [1,0,0]
        start_pos: 0.0
        increment: 0.125
        num_steps: 20
    scan_type: "grid"
    snaked_scan: True

instrument:
    beam:
        wavelength: [0.4, 0.6]
        wavelength_weights: [0.1, 0.2]
        flux: null
    attenuator:
        transmission: null
    source:
        beamline: "ixx"

det:
    axes:
        - name: det_z
        depends: "."
        transformation_type: translation
        vector: [0,0,1]
        start_pos: 1350
    params:
        description: Eiger2 X 9M
        image_size: [3262, 3108]
        sensor_material: CdTe
        overload: 65535
        underload: -1
    beam_center: [1134, 1458]
    exposure_time: 0.01
    module:
        fast_axis: [-1,0,0]
        slow_axis: [0,1,0]