Table of Contents
- 'initialize'
- 'recordedChannels'
- 'detectorSettings'
- 'updateDetectorSettings'
- 'estimatedTime'
- 'scanRequest'
- 'abortScan'
- 'pauseScan'
- 'resumeScan'
- 'scanStatus'
- 'moveRequest'
- 'moveStatus'
- 'homeRequest'
- 'positionerStatus'
- 'modified positioner definition'
- 'modified zonePlate definition'
- 'zonePlateFocus'
- 'oscilloscopeDefinition'
- 'focusType'
- 'scanTypeArchive'
- 'localFileScanTypeArchive'
- 'allMotorsOff'
- 'resetInterferometer'
- 'OSA_IN'
- 'OSA_OUT'
- 'ZonePlate IN'
- 'ZonePlate OUT'
- 'Sample OUT'
- 'topupMode'
- 'beamShutterMode'
- 'loadFile directory'
- 'loadFile file'
- 'loadDefinition'
- 'change user'
- 'script info'
- 'getSettings'
This page lists the JSON strings that can be sent to the ZMQ REQ/REP port in order to request actions by Pixelator. The ZMQ messages must be sent in the format:
[HEADER, DATA1 (, DATA2)]
where the data can either be an empty string, or a JSON list or structure, e.g.:
["string1","string2","string3"] or {"key1":"value1","key2":"value2","key3":"value3"}
Request messages are typically responded to by a simple ["status", "ok"] response on the REQ/REP port and the publication of further data on the PUB/SUB port.
'initialize'
No data required or used. Lots of data is returned and published with the intended use being to populate a GUI.
Reply Messages:
["status","ok"]- Positioner definitions
- Detector definitions
- Oscilloscope options
- Zone Plate definitions
- File IO config options
Published Messages:
- Positioner status
- Focus status
- Scan status
- Beam shutter status
- Topup status
- User status
- Recorded channels
- Focus type
- Scan type archive attribute
- Beam shutter mode
- Topup mode
'recordedChannels'
Data is a list of strings that correspond to the names of the detectors to be enabled. For example:
msg = ['recordedChannels', '["Counter0", "Counter1"]' ]
Reply Messages:
["status","ok"]
'detectorSettings'
Data is a string that corresponds to the name of a detector. For example:
msg = ['detectorSettings', 'Counter0' ]
Reply Messages:
["status","ok"]- message from specific detector module with a JSON array, but there doesn't seem to be an implementation yet.
'updateDetectorSettings'
Data is a string that corresponds to the name of a detector. Data2 is a JSON array with property, value pairs. For example:
msg = ['updateDetectorSettings', 'Counter0', JSON_string ]
Reply Messages:
["status","ok"]
'estimatedTime'
Data is a JSON scan request (see 'scanRequest' below). For example:
msg = ['estimatedTime', Scan_Request ]
Reply Messages:
["status","ok"]- ['estimatedTime', Time_String ]
A Time_String will have a format like "00h 00m 01s", or "555h 59m 59s".
'scanRequest'
Data is a JSON scan request. For example:
msg = ['estimatedTime', "{
'scanType': 'Sample',
'spatialType': 'Image',
'meander': 1,
'tiling': 1,
'yAxisFast': 0,
'lineMode': 'Constant Velocity',
'accelerationDistance': 0.5,
'tileDelay': 0.05, 'lineDelay': 0.05,
'outerRegions': [{'dwellTime': 0.005,
'axes': [{'nPoints': 2,
'trajectories': [{'start': 900.0,
'end': 320.0,
'range': -580.0,
'step': -580.0,
'positionerName': 'Energy'
}]
}]
}],
'innerRegions': [{'axes': [{'nPoints': 1200,
'trajectories': [{'center': 4282.670215322501,
'range': 12.0,
'step': 0.01,
'positionerName': 'FineY'
}]
},
{'nPoints': 140,
'trajectories': [{'center': 37.8280758446287,
'range': 28.0,
'step': 0.2,
'positionerName': 'FineX'
}]
}]
},
{'axes': [{'nPoints': 10,
'trajectories': [{'center': 5571.33258869908,
'range': 1.0,
'step': 0.1,
'positionerName': 'FineY'
}]
},
{'nPoints': 10,
'trajectories': [{'center': -5400.94023907363,
'range': 1.0,
'step': 0.1,
'positionerName': 'FineX'
}]
}]
}],
'nOuterRegions': 1,
'nInnerRegions': 1,
'singleOuterRegionValue': 1,
'displayedAxes': {'x': {'region': 'inner',
'index': 1
},
'y': {'region': 'inner',
'index': 0
}
},
'positionPrecision': {'precision': 200.0},
'defocus': {'diameter': 0.0}
}"
]
Reply Messages:
["status","ok"]
'abortScan'
Message only needs the header, no data required. For example:
msg = ['abortScan' ]
Reply Messages:
["status","ok"]
'pauseScan'
Message only needs the header, no data required. For example:
msg = ['pauseScan' ]
Reply Messages:
["status","ok"]
'resumeScan'
Message only needs the header, no data required. For example:
msg = ['resumeScan' ]
Reply Messages:
["status","ok"]
'scanStatus'
Message only needs the header, no data required. For example:
msg = ['scanStatus' ]
I don't think this is actually used anymore, or is useful, since Pixelator regularly publishes scanStatus messages.
Reply Messages:
["status","ok"]["scanStatus", '{"current":{"innerRegion":1, "line":3, "lineRepetition":1, "outerRegion":1, "point":582, "polarization":1, "remainingTime":"25h 11m 10s", "time":"00h 01m 01s" }, "scanType":"Sample Scan", "status":"running", "total":{"innerRegion":1, "line":5001,"lineRepetition":1, "outerRegion":1, "point":1000, "polarization":1, "time":"25h 08m 40s" } }' ]
'moveRequest'
'moveStatus'
'homeRequest'
'positionerStatus'
'modified positioner definition'
-
"name": (required) Positioner name. Must exist as a defined positioner.Further optional keys correspond to the positioner base settings.
-
"positionOffset" -
"upperSoftLimit" -
"lowerSoftLimit" -
"autoOff"
Example message contents for modifying the CoarseX positioner:
msg = ['modified positioner definition',
'{
"autoOffMode":"Always",
"lowerSoftLimit":120.0,
"positionOffset":3.456,
"upperSoftLimit":1221.0,
}']
Successful modification of the positioner definition will result in the publication of the new positioner definition in full.
'modified zonePlate definition'
Changing the parameters for OSAs and zone plates, as well as the size of the OSA gap. While lots of information is included by the Intens GUI, only a few items are actually acted on by Pixelator:
- "dOsa" key with a float value of the OSA gap.
- "OSAs" key with a list of dictionaries containing OSA details - only the one containing
"active":1is acted on. - "zonePlates" key with a list of dictionaries containing zone plate details - only the one containing
"active":1is acted on.
These keys are not required to all be included in the JSON structure (e.g. the OSA gap can be set without the "OSAs" or "zonePlates" keys being present). When the OSA or zone plate set as "active" is one of the set that are described in the config file, the "activeOSA" and/or "activeZonePlate" is updated in the config file with the associated "name" string. All other details for the zone plate or OSA are taken from the zone plate config file. When the OSA gap is given a new value via the "dOsa" key, the "dOsa" key in the zone plate config file is updated. No other changes are made to the config file.
If the OSA or zone plate holding the "active":1 key/vale does not have a "name" key or its value is an empty string and its position in the list is one more than the number of pre-defined OSA/ZPs, then it is understood to be a temporary setting and is processed differently. Firstly, no change is made to the config file, so the settings will be forgotten on restart of Pixelator. Secondly, further info is read from the JSON string. For an OSA, the float value of the "diameter" key is read and applied as the OSA diameter in microns. For a zone plate, the array value of the "b" key is read and applied as the coefficients of a polynomial that describe the energy dependent focal length of the zone plate (assuming infinite source distance). While not required, an "outer_diameter" key should be provided with a float value in microns in order for the OSA gap colour indicator to function correctly (otherwise the OSA Gap input box will remain red at all times).
Details can be found in the ZonePlate::modify() function and the zone plate configuration documentation.
Example message
msg = ['modified zonePlate definition',
'{
"OSAs":[
{
"name":"OSA 50"
,"diameter":50.0
}
,{
"name":"OSA 60"
,"diameter":60.0
}
,{
"name":"OSA 70"
,"diameter":70.0
,"active":1
}
]
,"zonePlates":[
{
"name":"ZonePlate B"
,"zone_material":"Pt"
,"outermost_zone_width":35.0
,"outer_diameter":240.0
,"central_stop_diameter":75.0
,"b":[
0.0
,6.875
]
}
,{
"name":"ZonePlate A"
,"zone_material":"Pt"
,"outermost_zone_width":15.0
,"outer_diameter":150.0
,"central_stop_diameter":75.0
,"b":[
0.0
,1.7949999999999999
]
}
,{
"name":"ZonePlate C"
,"zone_material":"Au"
,"outermost_zone_width":25.0
,"outer_diameter":240.0
,"central_stop_diameter":75.0
,"b":[
0.0
,4.8209999999999997
]
,"active":1
}
]
,"dOsa":301.0
}']
Minimal example messages:
msg1 = ['modified zonePlate definition',
'{
"OSAs":[{
"name":"OSA 70"
,"active":1
}]
}']
msg2 = ['modified zonePlate definition',
'{
"dOsa":301.0
}']
msg3 = ['modified zonePlate definition',
'{"zonePlates":[
{
"name":"ZonePlate B"
,"active":1
}]
}']
"test" object example messages:
msg1 = ['modified zonePlate definition',
'{
"OSAs":[{}
,{}
,{}
,{
"diameter":70
,"active":1
}]
}']
msg2 = ['modified zonePlate definition',
'{"zonePlates":[{}
,{}
,{}
,{
"name":""
,"active":1
,"b":[0.0,4.821]
,"outer_diameter":240.0
}]
}']
'zonePlateFocus'
Set the focus position. Data is a dictionary with the following fields:
- "target": "Sample"|"OSA" : The object being focused on.
- "action": "calibrate"|"calculate" : Indicate whether to adjust the focus position, or simply return the calculated position (for setting up a focus scan).
- "cursorPosition": Position value (in microns) on the zonePlateZ stage where the focus should be set.
- "setDOsa": (Optional) Boolean integer to indicate that the OSA gap should be set (1/True) for the focus adjustment.
Note that focusing on the OSA means that the zonePlateZ stage offset would be adjusted to calibrate the distance between the zone plate and the OSA.
Example:
['zonePlateFocus', {'target': 'Sample', 'action': 'calibrate', 'cursorPosition': -1573.4942215445321}]
'oscilloscopeDefinition'
Parameters describing the function of the oscilloscope view of periodic detector readings. Data is a dictionary with the following fields:
- "on": Boolean integer stating whether the detector readings will be published.
- "interval": Float value for the time period (seconds) between detector values being published.
- "countRate": Boolean integer stating whether the published values are per second (1/True), or raw detector values (0/False)
Note that there is no check on the value of "interval" and small values will result in lots of messages being published. An "interval" value of zero or less (i.e. negative) will result in no detector values being published (effective period of infinity).
Example:
['oscilloscopeDefinition', {'countRate': 1, 'interval': 1.0, 'on': 0}]
'focusType'
Turn on/off the autofocus feature of the zoneplate Z stage. Data must be one of the following strings:
- "Auto": zoneplate will move to keep focal plane in the calculated position whenever the energy is changed.
- "Static": zoneplate stage will not respond to changes in energy.
Example:
['focusType', "Auto"]
'scanTypeArchive'
'localFileScanTypeArchive'
'allMotorsOff'
'resetInterferometer'
'OSA_IN'
'OSA_OUT'
'ZonePlate IN'
'ZonePlate OUT'
'Sample OUT'
'topupMode'
'beamShutterMode'
'loadFile directory'
Request that a the content list of a directory (on the tree available to Pixelator) be published. Required dict keys are:
- "directory": Full path to the directory.
- "showHidden": Optional flag to indicate if hidden files should be included in the published list of directory contents. Valid values are integer 1 or 0 (default 0)
- "fileExtension": Optional flag to filter list to include only files with the given file extension. Affects files only, directories are treated separately. The value should be a string representing the final characters of the filename strings.
- "pluginNumber": An integer that identifies which window is requesting the file data. This key/value will be added to the published data so that receiving GUIs can decide if/how they want to present the published data.
Example message:
msg = ['loadFile file',
'{
"directory":"/home/control/LocalData/2026-08-14"
,"showHidden":0
,"fileExtension":".hdf5"
,"pluginNumber":0
}']
'loadFile file'
Request that a the data from a file be published by Pixelator. Required dict keys are:
- "file": Full path to the file (or reference file) on the directory tree available to Pixelator. For reference files (i.e. with a defined "mode"), it doesn't matter if the discard directory is present or not, the code will check first without the discard directory and if not found there, will then look in the discard directory.
- "mode": Optional flag to load a scan with an adjacent scan number. Valid values are "next" (scan number +1) and "previous" (scan number -1). When the mode value is an empty string, or the key is not present, the function will try to load the exact path given in the "file" key (no checking for discard).
- "pluginNumber": An integer that identifies which window is requesting the file data. This key/value will be added to the published data so that receiving GUIs can decide if/how they want to present the published data.
Example message:
mesg = ['loadFile file',
'{
"file":"/home/control/LocalData/2026-08-14/discard/Sample_Image_2026-08-14_002.hdf5"
,"mode":"next"
,"pluginNumber":4948
}']
Example response where the "pluginNumber" of 4948 is included in the message header:
['scanFileContent4948',
{'directory': '/home/control/LocalData/2026-08-14'
,'filename': 'Sample_Image_2026-08-14_003.hdf5'
,'regionProfiles': {'coordType': 'without_offset', 'displayedAxes': {'displayedAxisX': {'index': 1, 'name': 'sample_x', 'region': 'inner'}, 'displayedAxisY': {'index': 0, 'name': 'sample_y', 'region': 'inner'}}, 'maxX': 55.0, 'maxY': 55.0, 'minStepX': 10.0, 'minStepY': 10.0, 'minX': 5.0, 'minY': 5.0, 'regionProfiles': [{'axes': [{'max': 55.0, 'min': 5.0, 'minimalStep': 10.0, 'numPts': 5, 'segments': [{'end': 55.0, 'indexOffset': 0, 'max': 55.0, 'maxPoint': 50.0, 'min': 5.0, 'minPoint': 10.0, 'numPts': 5, 'start': 5.0, 'step': 10.0}]}, {'max': 55.0, 'min': 5.0, 'minimalStep': 10.0, 'numPts': 5, 'segments': [{'end': 55.0, 'indexOffset': 0, 'max': 55.0, 'maxPoint': 50.0, 'min': 5.0, 'minPoint': 10.0, 'numPts': 5, 'start': 5.0, 'step': 10.0}]}]}]}
,'scanData': {'cntChannel': 1, 'cntOuterRegion': 1, 'cntPolarization': 1, 'polarizations': [{'outerRegions': [{'scanDataRegionVec': [{'axesDims': [5, 5], 'channels': {'channelData': [[969.0, 381.0, 770.0, 278.0, 277.0, 61.0, 330.0, 529.0, 925.0, 138.0, 422.0, 967.0, 969.0, 854.0, 203.0, 113.0, 190.0, 103.0, 400.0, 483.0, 589.0, 76.0, 756.0, 17.0, 230.0]]}}]}]}], 'regionDims': [[5, 5]]}
,'scanRequest': '{"scanType": "Sample", "outerRegions": [{"dwellTime": 0.001, "axes": [{"nPoints": 3, "trajectories": [{"start": 300.0, "end": 301.0, "range": 1.0, "step": 0.5, "positionerName": "Energy"}]}]}, {"dwellTime": 0.001, "axes": [{"nPoints": 5, "trajectories": [{"start": 302.0, "end": 306.0, "range": 4.0, "step": 1.0, "positionerName": "Energy"}]}]}], "innerRegions": [{"axes": [{"nPoints": 5, "trajectories": [{"center": 30.0, "range": 50.0, "step": 10.0, "positionerName": "CoarseY"}]}, {"nPoints": 5, "trajectories": [{"center": 30.0, "range": 50.0, "step": 10.0, "positionerName": "CoarseX"}]}]}], "spatialType": "Image", "lineMode": "Point by Point", "meander": 0, "yAxisFast": 0, "tiling": 0, "accelerationDistance": 1.0, "tileDelay": 0.01, "lineDelay": 0.001, "pointDelay": 0.0, "lineRepetition": 1, "nOuterRegions": 2, "nInnerRegions": 1, "singleOuterRegionValue": true, "displayedAxes": {"x": {"region": "inner", "index": 1}, "y": {"region": "inner", "index": 0}}}'
,'scanType': 'Sample'
,'scanTypeArchive': 'archive'
,'signalList': ['Counter1']}
]
'loadDefinition'
'change user'
'script info'
'getSettings'
The getSettings message will return the contents of all .json files referenced in the settings .json file passed to PixelatorController on the command line, the contents of the referenced .json files is placed under the key referencedJsonFiles, example json string returned from the getSettings message:
Example return message
{'Detector_Archive_Default': 'no',
'Focus_Archive_Default': 'no',
'Motor_Archive_Default': 'no',
'NeXusBaseDirectory': '/beamlinedata/SM/operations/STXM-data/ASTXM_upgrade_tmp/tmp/pixelator_data/2026',
'NeXusDiscardSubDirectory': 'discard',
'NeXusLocalBaseDirectory': '/beamlinedata/SM/operations/STXM-data/ASTXM_upgrade_tmp/tmp/pixelator_data/2026',
'NeXusScanDate': '2026-06-05',
'NeXusScanNumber': '003',
'OSA Focus_Archive_Default': 'yes',
'OSA_Archive_Default': 'yes',
'SampleImagePreifx': '.',
'Sample_Archive_Default': 'locked',
'axisConfigFileName': './config/axis.json',
'beamline': 'SLS PolLux X07DA',
'changeUserScript': 'echo',
'compression': 'LZW',
'controllerConfigFileName': './config/controllerNoHardware.json',
'dataPublisherPort': '56563',
'defaultSaveLocal': 'yes',
'defaultUsername': 'stxm',
'detectorConfigFileName': './config/detectorNoHardware.json',
'endOfScanScript': './scripts/endOfScan',
'instrumentConfigFileName': './config/instrument.json',
'log4cppPropertiesFileName': './config/log4cpp.properties',
'microscopeControlConfigFileName': './config/microscopeControl.json',
'missingDataCheckInterval': '0.1',
'missingDataCheckMaxChecks': '5',
'pixelClockConfigFileName': './config/pixelClockNoHardware.json',
'positionerConfigFileName': './config/positionerNoHardware.json',
'publisherPort': '56561',
'referencedJsonFiles': {'axisConfigFileName': {'content': {'SampleX': {'nexus_name': 'sample_x'},
'SampleY': {'nexus_name': 'sample_y'},
'SampleZ': {'nexus_name': 'sample_z'}},
'fileName': './config/axis.json',
'resolvedFileName': './config/axis.json'},
'controllerConfigFileName': {'content': {'NewPort1': {'active': 0,
'serverAddress': '129.129.113.94',
'serverPort': 5001,
'type': 'NewPort'},
'NexLine1': {'active': 0,
'serverAddress': '129.129.113.111',
'serverPort': 50000,
'type': 'NexLine'},
'Orchestra1': {'active': 0,
'type': 'Orchestra'},
'SmarAct1': {'active': 0,
'baudRate': 115200,
'deviceName': '/dev/ttyS0',
'type': 'SmarAct'}},
'fileName': './config/controllerNoHardware.json',
'resolvedFileName': './config/controllerNoHardware.json'},
'detectorConfigFileName': {'content': {'Analog0': {'active': 1,
'nexus_name': 'analog0',
'type': 'Base'},
'Counter0': {'active': 1,
'asynchronous': 1,
'hardwareUnitFactor': 0.001,
'hardwareUnitOffset': 20,
'nexus_name': 'counter0',
'type': 'Base',
'unit': 'kP'},
'Counter1': {'active': 1,
'detailedDataDimensions': [100],
'nexus_name': 'counter1',
'type': 'Base'},
'PHC': {'active': 0,
'autoRecord': 0,
'channel': 'X07DA-PHCAPD:PIXEL-C',
'channeldetails': 'X07DA-PHCAPD:PHC-CTRWF',
'detailedDataDimensions': [212],
'details': 1,
'nexus_name': 'phc',
'setTimeChannel': 'X07DA-PHCAPD:SAMPLE-TIME',
'type': 'Epics'},
'SampleX': {'active': 1,
'autoRecord': 1,
'monitor': 1,
'nexus_name': 'sample_x',
'type': 'Base'},
'SampleY': {'active': 1,
'autoRecord': 1,
'nexus_name': 'sample_y',
'type': 'Base'},
'Time': {'active': 1,
'autoRecord': 1,
'nexus_name': 'time',
'subType': 'time',
'type': 'Base'}},
'fileName': './config/detectorNoHardware.json',
'resolvedFileName': './config/detectorNoHardware.json'},
'instrumentConfigFileName': {'content': {'aperture_1': {'class': 'NXaperture',
'shape': {'class': 'NXshape',
'shape': 'nxbox',
'size': [0.0,
{'factor': 0.0001,
'positioner': 'EntranceSlit'},
0.03]},
'translation': {'class': 'NXtranslation',
'distances': [0.0,
0.0,
-11.0]}},
'aperture_2': {'class': 'NXaperture',
'shape': {'class': 'NXshape',
'shape': 'nxbox',
'size': [0.0,
{'factor': 0.0001,
'positioner': 'ExitSlit_H'},
{'factor': 0.0001,
'positioner': 'ExitSlit_V'}]},
'translation': {'class': 'NXtranslation',
'distances': [0.0,
0.0,
-1]}},
'bendmagnet': {'accepted_photon_beam_divergence': 'unknown',
'bending_radius': {'unit': 'deg',
'value': 1.2345},
'critical_energy': 1.2345,
'divergence_x_minus': -0.00025,
'divergence_x_plus': 0.00025,
'divergence_y_minus': {'offset': -0.00025,
'positioner': 'Ring_yAsym'},
'divergence_y_plus': {'offset': 0.00025,
'positioner': 'Ring_yAsym'},
'geometry': {'class': 'NXgeometry',
'translation': {'class': 'NXtranslation',
'distances': {'unit': 'μm',
'value': [0.0,
0.0,
-35.0]}}},
'magnetic_field': 1.4},
'hos_mirror_1': {'class': 'NXmirror',
'coating_material': 'MgF2',
'condition': {'==': ['IN',
{'epicsChannel': 'EPICS '
'X07DA-OP-HOS:STATE'}]},
'description': 'First '
'mirror '
'in '
'higher '
'order '
'suppression '
'system.',
'geometry': {'class': 'NXgeometry',
'orientation': {'class': 'NXorientation',
'value': [0.0,
0.0,
0.0]},
'translation': {'class': 'NXtranslation',
'distances': [0.0,
0.0,
-5.0]}},
'incident_angle': {'positioner': 'HOS_Angle1'},
'interior_atmosphere': 'vacuum',
'layer_thickness': 3e-08,
'substrate_material': 'SiO2',
'substrate_roughness': 1e-09,
'substrate_thickness': 0.03995},
'mirror': {'class': 'NXmirror',
'coating_material': 'pt',
'coating_roughness': 4.9e-10,
'geometry': {'class': 'NXgeometry',
'translation': {'class': 'NXtranslation',
'distances': [0.0,
0.0,
-23.0]}},
'incident_angle': {'unit': 'deg',
'value': 2.5},
'interior_atmosphere': 'vacuum',
'layer_thickness': 3e-08,
'shape': {'class': 'NXshape',
'direction': 'concave',
'shape': 'nxtoroidal',
'size': [275.05,
0.68]},
'substrate_material': 'Si',
'type': 'single'},
'source': {'current': {'positioner': 'Ring_Current'},
'name': 'Swiss '
'Light '
'Source',
'probe': 'x-ray',
'type': 'Synchrotron '
'X-ray '
'Source'}},
'fileName': './config/instrument.json',
'resolvedFileName': './config/instrument.json'},
'microscopeControlConfigFileName': {'content': {'InOut': {'OSA': [{'positionIn': 0.0,
'positionOut': -3000.0,
'positioner': 'OSAX'},
{'positionIn': 0.0,
'positionOut': 3000.0,
'positioner': 'OSAY'}],
'Sample': [{'positionIn': 5000.0,
'positionOut': 10000.0,
'positioner': 'CoarseZ'}],
'ZonePlate': [{'positionIn': -5000,
'positionOut': -18000.0,
'positioner': 'Zoneplate'}]}},
'fileName': './config/microscopeControl.json',
'resolvedFileName': './config/microscopeControl.json'},
'pixelClockConfigFileName': {'content': {'PixelClock': {'active': 1,
'noHardware': True}},
'fileName': './config/pixelClockNoHardware.json',
'resolvedFileName': './config/pixelClockNoHardware.json'},
'positionerConfigFileName': {'content': {'Auxilliary0': {'active': 0,
'description': 'Auxiliary '
'positioner '
'0',
'nexus_name': 'auxilliary0',
'readOnly': True,
'type': 'Base'},
'Auxilliary1': {'active': 0,
'description': 'Auxiliary '
'positioner '
'1',
'nexus_name': 'auxilliary1',
'readOnly': True,
'type': 'Base'},
'Auxilliary2': {'active': 0,
'description': 'Auxiliary '
'positioner '
'2',
'nexus_name': 'auxilliary2',
'readOnly': True,
'type': 'Base'},
'Baffle': {'active': 0,
'description': 'Translation '
'of '
'the '
'baffle '
'(protecting '
'the '
'side '
'of '
'first '
'mirror)',
'nexus_name': 'baffle',
'readOnly': True,
'type': 'Base'},
'BeamShutter': {'active': 1,
'lowerSoftLimit': 0,
'nexus_name': 'beam_shutter',
'type': 'Base',
'upperSoftLimit': 1},
'CoarseX': {'active': 1,
'axisName': 'SampleX',
'description': 'Coarse '
'translation '
'of '
'the '
'sample '
'along '
'the '
'X-axis',
'distributionMode': 'n',
'finePositioner': 'FineX',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'maxVelocity': 300,
'nexus_name': 'coarse_x',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'CoarseY': {'active': 1,
'axisName': 'SampleY',
'description': 'Coarse '
'translation '
'of '
'the '
'sample '
'along '
'the '
'Y-axis',
'distributionMode': 'n',
'finePositioner': 'FineY',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'maxVelocity': 300,
'nexus_name': 'coarse_y',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'CoarseZ': {'active': 0,
'axisName': 'SampleZ',
'description': 'Coarse '
'translation '
'of '
'the '
'sample '
'along '
'the '
'Z-axis',
'distributionMode': 'n',
'finePositioner': 'FineZ',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': 0,
'maxVelocity': 300,
'nexus_name': 'coarse_z',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'DetectorX': {'active': 1,
'description': 'Translation '
'of '
'the '
'detector '
'stage '
'along '
'the '
'X-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'nexus_name': 'detector_x',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'DetectorY': {'active': 1,
'description': 'Translation '
'of '
'the '
'detector '
'stage '
'along '
'the '
'Y-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'maxVelocity': 300,
'nexus_name': 'detector_y',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'DetectorZ': {'active': 1,
'description': 'Translation '
'of '
'the '
'detector '
'stage '
'along '
'the '
'Z-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'maxVelocity': 300,
'nexus_name': 'detector_z',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'Energy': {'active': 1,
'beamlineControlPosition': 1,
'description': 'Photon '
'energy '
'currently '
'transmitted '
'by '
'the '
'monochromator',
'distributionMode': 'nPlus1',
'hardwareUnitFactor': 1,
'lowerSoftLimit': 10,
'nexus_name': 'energy',
'positionOffset': 0,
'type': 'Base',
'unit': 'eV',
'upperSoftLimit': 1000},
'EntranceSlit': {'active': 0,
'beamlineControlPosition': 2,
'description': 'Width '
'of '
'the '
'entrance '
'slit '
'aperture',
'distributionMode': 'nPlus1',
'hardwareUnitFactor': 1,
'lowerSoftLimit': -10,
'nexus_name': 'entrance_slit',
'positionOffset': 0,
'type': 'Base',
'unit': 'mm',
'upperSoftLimit': 10},
'ExitSlit_H': {'active': 0,
'beamlineControlPosition': 3,
'description': 'Width '
'of '
'the '
'exit '
'slit '
'aperture',
'distributionMode': 'nPlus1',
'hardwareUnitFactor': 1,
'lowerSoftLimit': -10,
'nexus_name': 'exit_slit_h',
'positionOffset': 0,
'type': 'Base',
'unit': 'mm',
'upperSoftLimit': 10},
'ExitSlit_V': {'active': 0,
'beamlineControlPosition': 4,
'description': 'Height '
'of '
'the '
'exit '
'slit '
'aperture',
'distributionMode': 'nPlus1',
'hardwareUnitFactor': 1,
'lowerSoftLimit': -10,
'nexus_name': 'exit_slit_v',
'positionOffset': 0,
'type': 'Base',
'unit': 'mm',
'upperSoftLimit': 10},
'FineX': {'active': 1,
'axisName': 'SampleX',
'coarsePositioner': 'CoarseX',
'description': 'Fine '
'translation '
'of '
'the '
'sample '
'along '
'the '
'X-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -5,
'maxVelocity': 300,
'nexus_name': 'fine_x',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 5},
'FineY': {'active': 1,
'axisName': 'SampleY',
'coarsePositioner': 'CoarseY',
'description': 'Fine '
'translation '
'of '
'the '
'sample '
'along '
'the '
'Y-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -5,
'maxVelocity': 300,
'nexus_name': 'fine_y',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 5},
'FineZ': {'active': 0,
'axisName': 'SampleZ',
'coarsePositioner': 'CoarseZ',
'description': 'Fine '
'translation '
'of '
'the '
'sample '
'along '
'the '
'Z-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -5,
'maxVelocity': 300,
'nexus_name': 'fine_z',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 5},
'FrontEndSlit_H1': {'active': 0,
'description': 'Translation '
'of '
'the '
'front '
'end '
'slits '
'ring-side '
'blade',
'nexus_name': 'front_end_slit_h1',
'readOnly': True,
'type': 'Base'},
'FrontEndSlit_H2': {'active': 0,
'description': 'Translation '
'of '
'the '
'front '
'end '
'slits '
'wall-side '
'blade',
'nexus_name': 'front_end_slit_h2',
'readOnly': True,
'type': 'Base'},
'FrontEndSlit_V1': {'active': 0,
'description': 'Translation '
'of '
'the '
'front '
'end '
'slits '
'upper '
'blade',
'nexus_name': 'front_end_slit_v1',
'readOnly': True,
'type': 'Base'},
'FrontEndSlit_V2': {'active': 0,
'description': 'Translation '
'of '
'the '
'front '
'end '
'slits '
'lower '
'blade',
'nexus_name': 'front_end_slit_v2',
'readOnly': True,
'type': 'Base'},
'Girder_Rx': {'active': 0,
'description': 'Rotation '
'of '
'the '
'girder-mover '
'about '
'the '
'X-axis',
'nexus_name': 'girder_rx',
'readOnly': True,
'type': 'Base'},
'Girder_Ry': {'active': 0,
'description': 'Rotation '
'of '
'the '
'girder-mover '
'about '
'the '
'Y-axis',
'nexus_name': 'girder_ry',
'readOnly': True,
'type': 'Base'},
'Girder_Rz': {'active': 0,
'description': 'Rotation '
'of '
'the '
'girder-mover '
'about '
'the '
'Z-axis',
'nexus_name': 'girder_rz',
'readOnly': True,
'type': 'Base'},
'Girder_x': {'active': 0,
'description': 'Translation '
'of '
'the '
'girder-mover '
'along '
'the '
'X-axis',
'nexus_name': 'girder_x',
'readOnly': True,
'type': 'Base'},
'Girder_y': {'active': 0,
'description': 'Translation '
'of '
'the '
'girder-mover '
'along '
'the '
'Y-axis',
'nexus_name': 'girder_y',
'readOnly': True,
'type': 'Base'},
'Girder_z': {'active': 0,
'description': 'Translation '
'of '
'the '
'girder-mover '
'along '
'the '
'Z-axis',
'nexus_name': 'girder_z',
'readOnly': True,
'type': 'Base'},
'Grating_Ry': {'active': 0,
'description': 'Rotation '
'of '
'the '
'monochromator '
'grating '
'about '
'the '
'Y-axis',
'nexus_name': 'grating_ry',
'readOnly': True,
'type': 'Base'},
'Grating_y': {'active': 0,
'description': 'Translation '
'of '
'the '
'monochromator '
'grating '
'carriage '
'along '
'the '
'Y-axis',
'nexus_name': 'grating_y',
'readOnly': True,
'type': 'Base'},
'HOS_Rz1': {'active': 0,
'description': 'Rotation '
'of '
'the '
'first '
'higher '
'order '
'suppressor '
'mirror '
'about '
'the '
'X-axis '
'(-Z '
'translation '
'in '
'EPICS)',
'nexus_name': 'hos_rz1',
'readOnly': True,
'type': 'Base'},
'HOS_Rz2': {'active': 0,
'description': 'Rotation '
'of '
'the '
'last '
'higher '
'order '
'suppressor '
'mirror '
'about '
'the '
'X-axis '
'(+Z '
'translation '
'in '
'EPICS)',
'nexus_name': 'hos_rz2',
'readOnly': True,
'type': 'Base'},
'HOS_z': {'active': 0,
'description': 'Translation '
'of '
'the '
'higher '
'order '
'suppressor '
'along '
'the '
'X-axis '
'(-Z '
'in '
'EPICS)',
'nexus_name': 'hos_z',
'readOnly': True,
'type': 'Base'},
'ID1Off': {'active': 1,
'beamlineControlPosition': 2,
'description': 'ID '
'1 '
'Energy '
'Offset',
'distributionMode': 'nPlus1',
'hardwareUnitFactor': 1,
'lowerSoftLimit': -100,
'nexus_name': 'id1_off',
'positionOffset': 0,
'type': 'Base',
'unit': 'eV',
'upperSoftLimit': 100.0},
'ID2Off': {'active': 1,
'beamlineControlPosition': 3,
'description': 'ID '
'2 '
'Energy '
'Offset',
'distributionMode': 'nPlus1',
'hardwareUnitFactor': 1,
'lowerSoftLimit': -100,
'nexus_name': 'id2_off',
'positionOffset': 0,
'type': 'Base',
'unit': 'eV',
'upperSoftLimit': 100.0},
'Mirror1_Rx': {'active': 0,
'description': 'Rotation '
'of '
'the '
'first '
'mirror '
'about '
'the '
'Z-axis '
'(+X '
'in '
'EPICS)',
'nexus_name': 'mirror1_rx',
'readOnly': True,
'type': 'Base'},
'Mirror1_Ry': {'active': 0,
'description': 'Rotation '
'of '
'the '
'first '
'mirror '
'about '
'the '
'Y-axis',
'nexus_name': 'mirror1_ry',
'readOnly': True,
'type': 'Base'},
'Mirror1_Rz': {'active': 0,
'description': 'Rotation '
'of '
'the '
'first '
'mirror '
'about '
'the '
'X-axis '
'(-Z '
'in '
'EPICS)',
'nexus_name': 'mirror1_rz',
'readOnly': True,
'type': 'Base'},
'Mirror1_x': {'active': 0,
'description': 'Translation '
'of '
'the '
'first '
'mirror '
'along '
'the '
'Z-axis '
'(+X '
'in '
'EPICS)',
'nexus_name': 'mirror1_x',
'readOnly': True,
'type': 'Base'},
'Mirror1_y': {'active': 0,
'description': 'Translation '
'of '
'the '
'first '
'mirror '
'along '
'the '
'Y-axis',
'nexus_name': 'mirror1_y',
'readOnly': True,
'type': 'Base'},
'Mirror1_z': {'active': 0,
'description': 'Translation '
'of '
'the '
'first '
'mirror '
'along '
'the '
'X-axis '
'(-Z '
'in '
'EPICS)',
'nexus_name': 'mirror1_z',
'readOnly': True,
'type': 'Base'},
'MoenchNumFrames': {'active': 1,
'beamlineControlPosition': 4,
'description': 'Number '
'of '
'Frames',
'lowerSoftLimit': 0,
'nexus_name': 'moench_num_frames',
'type': 'Base',
'upperSoftLimit': 100000},
'OSAX': {'active': 1,
'description': 'Translation '
'of '
'the '
'order '
'selecting '
'aperture '
'along '
'the '
'X-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'maxVelocity': 300,
'nexus_name': 'osa_x',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'OSAY': {'active': 1,
'description': 'Translation '
'of '
'the '
'order '
'selecting '
'aperture '
'along '
'the '
'Y-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'maxVelocity': 300,
'nexus_name': 'osa_y',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 11000},
'Polarization': {'active': 1,
'description': 'Polarization',
'hardwareUnitFactor': 1,
'lowerSoftLimit': -0.2,
'nexus_name': 'polarization',
'positionOffset': 0,
'type': 'Base',
'upperSoftLimit': 0.2},
'Ring_Current': {'active': 1,
'description': 'Storage '
'ring '
'electron '
'beam '
'current',
'nexus_name': 'ring_current',
'readOnly': True,
'type': 'Base'},
'Ring_Injection': {'active': 0,
'description': 'Storage '
'ring '
'injection '
'mode',
'nexus_name': 'ring_injection',
'readOnly': True,
'type': 'Base'},
'Ring_OFBMode': {'active': 0,
'description': 'Storage '
'ring '
'electron '
'beam '
'orbit '
'feedback '
'mode',
'nexus_name': 'ring_ofb_mode',
'readOnly': True,
'type': 'Base'},
'Ring_xMin': {'active': 0,
'description': 'Width '
'of '
'the '
'storage '
'ring '
'electron '
'beam',
'nexus_name': 'ring_x_min',
'readOnly': True,
'type': 'Base'},
'Ring_xRMS': {'active': 0,
'description': 'Storage '
'ring '
'electron '
'beam '
'orbit '
'variation '
'in '
'X-position',
'nexus_name': 'ring_x_rms',
'readOnly': True,
'type': 'Base'},
'Ring_yAsym': {'active': 1,
'description': 'Vertical '
'offset '
'applied '
'to '
'the '
'orbit '
'of '
'the '
'storage '
'ring '
'electron '
'beam',
'nexus_name': 'ring_y_asym',
'readOnly': True,
'type': 'Base'},
'Ring_yMin': {'active': 0,
'description': 'Height '
'of '
'the '
'storage '
'ring '
'electron '
'beam',
'nexus_name': 'ring_y_min',
'readOnly': True,
'type': 'Base'},
'Ring_yRMS': {'active': 0,
'description': 'Storage '
'ring '
'electron '
'beam '
'orbit '
'variation '
'in '
'Y-position',
'nexus_name': 'ring_y_rms',
'readOnly': True,
'type': 'Base'},
'Zoneplate': {'active': 1,
'description': 'Translation '
'of '
'the '
'zoneplate '
'along '
'the '
'Z-axis',
'distributionMode': 'n',
'hardwareUnitFactor': 1000,
'lowerSoftLimit': -11000,
'maxVelocity': 300,
'nexus_name': 'zone_plate',
'positionOffset': 0,
'type': 'Base',
'unit': 'μm',
'upperSoftLimit': 0}},
'fileName': './config/positionerNoHardware.json',
'resolvedFileName': './config/positionerNoHardware.json'},
'sampleConfigFileName': {'content': {'rotation_angle': {'positioner': 'Auxilliary2'},
'start_position': [{'positioner': 'FineX'},
{'positioner': 'FineY'},
{'positioner': 'FineZ'}]},
'fileName': './config/sample.json',
'resolvedFileName': './config/sample.json'},
'topupConfigFileName': {'content': {'active': 0},
'fileName': './config/topupNoHardware.json',
'resolvedFileName': './config/topupNoHardware.json'},
'zonePlateConfigFileName': {'content': {'OSAs': [{'diameter': {'unit': 'μm',
'value': 50.0},
'name': 'OSA '
'50'},
{'diameter': {'unit': 'μm',
'value': 60.0},
'name': 'OSA '
'60'},
{'diameter': {'unit': 'μm',
'value': 70.0},
'name': 'OSA '
'70'}],
'activeOSA': 'OSA '
'50',
'activeZonePlate': 'ZonePlate '
'B',
'autoFocusDeadBand': 0.5,
'dOsa': 298.0,
'distance_exitSlit_OSA': 1005000,
'zonePlates': [{'NXgeometry': '"Engineering" '
'position '
'of '
'the '
'fresnel '
'zone '
'plate',
'b': [0,
6.875],
'central_stop_diameter': {'unit': 'μm',
'value': 75},
'central_stop_material': 'Pb',
'central_stop_thickness': 500,
'fabrication': 'etched',
'geometry': {'class': 'NXgeometry',
'translation': {'class': 'NXtranslation',
'distances': [0.0,
0.0,
-35.0]}},
'mask_material': 'mask',
'mask_thickness': 400,
'name': 'ZonePlate '
'B',
'outer_diameter': 240,
'outermost_zone_width': 35,
'support_membrane_material': 'membrane',
'support_membrane_thickness': 300,
'zone_height': 200,
'zone_material': 'Pt',
'zone_support_material': 'air '
';)'},
{'NXgeometry': '"Engineering" '
'position '
'of '
'the '
'fresnel '
'zone '
'plate',
'b': [0,
1.795],
'central_stop_diameter': 75,
'central_stop_material': 'Pb',
'central_stop_thickness': 500,
'fabrication': 'etched',
'geometry': {'class': 'NXgeometry',
'translation': {'class': 'NXtranslation',
'distances': [0.0,
0.0,
-35.0]}},
'mask_material': 'mask',
'mask_thickness': 400,
'name': 'ZonePlate '
'A',
'outer_diameter': 150,
'outermost_zone_width': 15,
'support_membrane_material': 'membrane',
'support_membrane_thickness': 300,
'zone_height': 200,
'zone_material': 'Pt',
'zone_support_material': 'air '
';)'},
{'NXgeometry': '"Engineering" '
'position '
'of '
'the '
'fresnel '
'zone '
'plate',
'b': [0,
4.821],
'central_stop_diameter': 75,
'central_stop_material': 'Au',
'central_stop_thickness': 500,
'fabrication': 'etched',
'geometry': {'class': 'NXgeometry',
'translation': {'class': 'NXtranslation',
'distances': [0.0,
0.0,
-35.0]}},
'mask_material': 'mask',
'mask_thickness': 400,
'name': 'ZonePlate '
'C',
'outer_diameter': 240,
'outermost_zone_width': 25,
'support_membrane_material': 'membrane',
'support_membrane_thickness': 300,
'zone_height': 200,
'zone_material': 'Au',
'zone_support_material': 'air '
';)'}]},
'fileName': './config/zonePlate.json',
'resolvedFileName': './config/zonePlate.json'}},
'requestPort': '56562',
'sampleConfigFileName': './config/sample.json',
'topupConfigFileName': './config/topupNoHardware.json',
'zonePlateConfigFileName': './config/zonePlate.json'}