crystallography
OnDA Monitor for Crystallography.
This module contains an OnDA Monitor for serial x-ray crystallography experiments.
CrystallographyProcessing
Bases: OmProcessingProtocol
See documentation for the __init__
function.
__init__(*, monitor_parameters)
OnDA Monitor for Crystallography.
This Processing class implements an OnDA Monitor for Serial Crystallography experiments. The monitor processes detector data frames, detecting Bragg peaks in each frame using the Peakfinder8PeakDetection algorithm, It retrieves information about the location, size, intensity, SNR and maximum pixel value of each peak. The monitor also calculates the evolution of the hit rate over time. and can additionally optionally collect examples of hit and non-hit calibrated detector data frames. All the information retrieved from the facility or extracted from the data is then streamed to external programs (like OM's Crystallography GUI # noqa: E501 or OM's Frame Viewer) for visualization. The monitor can also respond to requests for data or change of behavior from external programs (a control GUI, for example.)
Parameters:
Name | Type | Description | Default |
---|---|---|---|
monitor_parameters |
MonitorParameters
|
An object storing OM's configuration parameters. |
required |
initialize_processing_node(*, node_rank, node_pool_size)
Initializes the processing nodes for the Crystallography Monitor.
This function initializes all the required algorithms (peak finding, binning, etc.), plus some internal counters.
Please see the documentation of the base Protocol class for additional information about this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
node_rank |
int
|
The OM rank of the current node, which is an integer that unambiguously identifies the current node in the OM node pool. |
required |
node_pool_size |
int
|
The total number of nodes in the OM pool, including all the processing nodes and the collecting node. |
required |
initialize_collecting_node(*, node_rank, node_pool_size)
Initializes the collecting node for the Crystallography Monitor.
This function initializes the data accumulation algorithms and the storage buffers used to compute statistics on the aggregated data. Additionally, it prepares all the necessary network sockets.
Please see the documentation of the base Protocol class for additional information about this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
node_rank |
int
|
The OM rank of the current node, which is an integer that unambiguously identifies the current node in the OM node pool. |
required |
node_pool_size |
int
|
The total number of nodes in the OM pool, including all the processing nodes and the collecting node. |
required |
process_data(*, node_rank, node_pool_size, data)
Processes a detector data frame.
This function processes retrieved data events, extracting the Bragg peak information. It prepares the reduced data (and optionally, the detector frame data) to be transmitted to the collecting node.
Please see the documentation of the base Protocol class for additional information about this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
node_rank |
int
|
The OM rank of the current node, which is an integer that unambiguously identifies the current node in the OM node pool. |
required |
node_pool_size |
int
|
The total number of nodes in the OM pool, including all the processing nodes and the collecting node. |
required |
data |
Dict[str, Any]
|
A dictionary containing the data that OM retrieved for the detector data frame being processed.
|
required |
Returns:
Type | Description |
---|---|
Tuple[Dict[str, Any], int]
|
A tuple with two entries. The first entry is a dictionary storing the processed data that should be sent to the collecting node. The second entry is the OM rank number of the node that processed the information. |
wait_for_data(*, node_rank, node_pool_size)
Receives and handles requests from external programs.
This function receives requests from external programs over a network socket and reacts according to the nature of the request, sending data back to the source of the request or modifying the internal behavior of the monitor.
Please see the documentation of the base Protocol class for additional information about this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
node_rank |
int
|
The OM rank of the current node, which is an integer that unambiguously identifies the current node in the OM node pool. |
required |
node_pool_size |
int
|
The total number of nodes in the OM pool, including all the processing nodes and the collecting node. |
required |
collect_data(*, node_rank, node_pool_size, processed_data)
Computes statistics on aggregated data and broadcasts data to external programs.
This function collects and accumulates frame- and peak-related information received from the processing nodes. It also computes a rolling average estimation of the hit rate evolution over time. Additionally, it uses the Bragg peak information to compute virtual powder pattern and a peakogram plot. All the aggregated information is then broadcast to external programs for visualization.
Please see the documentation of the base Protocol class for additional information about this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
node_rank |
int
|
The OM rank of the current node, which is an integer that unambiguously identifies the current node in the OM node pool. |
required |
node_pool_size |
int
|
The total number of nodes in the OM pool, including all the processing nodes and the collecting node. |
required |
processed_data |
Tuple[Dict, int]
|
A tuple whose first entry is a dictionary storing the data received from a processing node, and whose second entry is the OM rank number of the node that processed the information. |
required |
end_processing_on_processing_node(*, node_rank, node_pool_size)
Ends processing on the processing nodes for the Crystallography Monitor.
This function prints a message on the console and ends the processing.
Please see the documentation of the base Protocol class for additional information about this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
node_rank |
int
|
The OM rank of the current node, which is an integer that unambiguously identifies the current node in the OM node pool. |
required |
node_pool_size |
int
|
The total number of nodes in the OM pool, including all the processing nodes and the collecting node. |
required |
Returns:
Type | Description |
---|---|
Union[Dict[str, Any], None]
|
Usually nothing. Optionally, a dictionary storing information to be sent to the processing node. |
end_processing_on_collecting_node(*, node_rank, node_pool_size)
Ends processing on the collecting node for the Crystallography Monitor.
This function prints a message on the console and ends the processing.
Please see the documentation of the base Protocol class for additional information about this method.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
node_rank |
int
|
The OM rank of the current node, which is an integer that unambiguously identifies the current node in the OM node pool. |
required |
node_pool_size |
int
|
The total number of nodes in the OM pool, including all the processing nodes and the collecting node. |
required |