#ifndef __UFO_ROOF_CONFIG_H #define __UFO_ROOF_CONFIG_H #include typedef struct { // ROOF Hardware gboolean roof_mode; // Indicates if ROOF is configured (1), otherwise only networking is implemented guint n_planes; // Number of detector planes, ROOF module serves a ring segment from all planes in a round-robin fashion guint n_modules; // Number of ROOF modules guint channels_per_module; // Number of pixels in each module guint samples_per_rotation; // Number of samples (projections) in a full fan sinogram; computed from sample_rate & image_rate if given guint sample_rate; // Number of samples (projections) acquired per second, 0 - if unknown guint imaging_rate; // Number of complete datasets (images) acquired per second, 0 - if unknown guint bit_depth; // Number of bits per pixel (we currently support only multiples of 8) // Geometry guint fan_projections; // Number of fan projections = samples_per_rotation guint fan_bins; // Number of fan detectors = n_modules * channels_per_module guint parallel_projections; guint parallel_bins; // guint detector_diameter; // Optics // Network Server / Reader gchar *path; // Location of data files for simmulation purposes (i.e. reading a sequence of files instead listening on the corresponding ports) guint first_file_number; // Indicates if the numbering of files starts at 0 or 1 gchar *protocol; // Protocols: tcp, udp, tcp6, udp6, ... guint port; // First port guint n_streams; // Number of independent data streams (expected on sequential ports), by default equal to number of ROOF modules guint header_size; // Expected size of the packet header, for dgram protocols we need at least 32-bit sequence number. Defaults to uint32_t for udp* and 0 - otherwise guint payload_size; // Expected size of TCP/UDP packet (without header) guint dataset_size; // Size of a single dataset (image, sinogram, etc.). This is real size in bytes, excluding all technical headers used in communication protocol. Normally, it is computed based on ROOF hardware parameters. // Performance parameters guint max_packets; // limits maximum number of packets which are read at once guint max_packet_size; // payload_size + header_size + ... (we don't care if tail is variable length provided that the complete packet does not exceed max_packet_size bytes) guint buffer_size; // How many datasets we can buffer. There is no sense to have more than 2 for odered protocols (default), but having larger number could help for UDP if significant order disturbances are expected guint drop_buffers; // If we are slow and lost some buffers, we may drop more than minimally necessary to catch up. guint network_timeout; // Maximum time (us) to wait for data on the socket /* guint planes_per_module; */ } UfoRoofConfig; UfoRoofConfig *ufo_roof_config_new(const char *config, GError **error); void ufo_roof_config_free(UfoRoofConfig *cfg); #endif /* __UFO_ROOF_CONFIG_H */