Initial commit
This commit is contained in:
@@ -0,0 +1,192 @@
|
||||
//! CTF MEG Format Constants
|
||||
//!
|
||||
//! Constants for parsing CTF MEG data files.
|
||||
|
||||
/// MEG4 file magic header for version 4.1
|
||||
pub const MEG4_MAGIC_V41: &[u8; 8] = b"MEG41CP\0";
|
||||
|
||||
/// MEG4 file magic header for version 4.2
|
||||
pub const MEG4_MAGIC_V42: &[u8; 8] = b"MEG42CP\0";
|
||||
|
||||
/// RES4 file magic header for version 4.1
|
||||
pub const RES4_MAGIC_V41: &[u8; 8] = b"MEG41RS\0";
|
||||
|
||||
/// RES4 file magic header for version 4.2
|
||||
pub const RES4_MAGIC_V42: &[u8; 8] = b"MEG42RS\0";
|
||||
|
||||
/// Maximum number of coils per sensor
|
||||
pub const MAX_COILS: usize = 8;
|
||||
|
||||
/// Maximum channel name length
|
||||
pub const MAX_CHANNEL_NAME: usize = 32;
|
||||
|
||||
/// Size of the MEG4 header in bytes
|
||||
pub const MEG4_HEADER_SIZE: usize = 8;
|
||||
|
||||
/// Size of each sample in bytes (int32)
|
||||
pub const SAMPLE_SIZE: usize = 4;
|
||||
|
||||
/// Maximum MEG4 file size (2GB limit)
|
||||
pub const MAX_MEG4_FILE_SIZE: u64 = 2_147_483_648;
|
||||
|
||||
// ============================================================================
|
||||
// Channel type constants
|
||||
// ============================================================================
|
||||
|
||||
/// MEG magnetometer/gradiometer channel
|
||||
pub const CTF_MEG_CH: i16 = 0;
|
||||
|
||||
/// Reference MEG channel
|
||||
pub const CTF_REF_MEG_CH: i16 = 1;
|
||||
|
||||
/// EEG channel
|
||||
pub const CTF_EEG_CH: i16 = 2;
|
||||
|
||||
/// Stimulus/trigger channel
|
||||
pub const CTF_STIM_CH: i16 = 3;
|
||||
|
||||
/// Analog to digital channel
|
||||
pub const CTF_ADC_CH: i16 = 4;
|
||||
|
||||
/// Head localization coil channel
|
||||
pub const CTF_HLC_CH: i16 = 5;
|
||||
|
||||
/// Digital input channel
|
||||
pub const CTF_DIN_CH: i16 = 6;
|
||||
|
||||
/// Digital auxiliary channel
|
||||
pub const CTF_DAC_CH: i16 = 7;
|
||||
|
||||
/// SCLK channel (system clock)
|
||||
pub const CTF_SCLK_CH: i16 = 8;
|
||||
|
||||
/// SAM (synthetic aperture magnetometry) channel
|
||||
pub const CTF_SAM_CH: i16 = 9;
|
||||
|
||||
/// Virtual channel
|
||||
pub const CTF_VIRTUAL_CH: i16 = 10;
|
||||
|
||||
/// System channel
|
||||
pub const CTF_SYS_CH: i16 = 11;
|
||||
|
||||
// ============================================================================
|
||||
// Sensor type constants
|
||||
// ============================================================================
|
||||
|
||||
/// Reference magnetometer
|
||||
pub const CTF_REF_MAG: i16 = 0;
|
||||
|
||||
/// Reference gradiometer
|
||||
pub const CTF_REF_GRAD: i16 = 1;
|
||||
|
||||
/// CTF 275 system MEG sensor
|
||||
pub const CTF_275_MAG: i16 = 2;
|
||||
|
||||
/// CTF 275 system reference
|
||||
pub const CTF_275_REF: i16 = 3;
|
||||
|
||||
// ============================================================================
|
||||
// Gradient order constants
|
||||
// ============================================================================
|
||||
|
||||
/// No gradient compensation
|
||||
pub const CTF_NO_GRAD: i16 = 0;
|
||||
|
||||
/// First order gradient compensation
|
||||
pub const CTF_G1BR: i16 = 1;
|
||||
|
||||
/// Second order gradient compensation
|
||||
pub const CTF_G2BR: i16 = 2;
|
||||
|
||||
/// Third order gradient compensation
|
||||
pub const CTF_G3BR: i16 = 3;
|
||||
|
||||
// ============================================================================
|
||||
// RES4 file structure sizes (based on CTF specification)
|
||||
// ============================================================================
|
||||
|
||||
/// Size of general header section
|
||||
pub const RES4_GENERAL_HEADER_SIZE: usize = 1844;
|
||||
|
||||
/// Size of each channel info entry
|
||||
pub const RES4_CHANNEL_INFO_SIZE: usize = 1360;
|
||||
|
||||
/// Offset to number of channels in header
|
||||
pub const RES4_NCHAN_OFFSET: usize = 1288;
|
||||
|
||||
/// Offset to sampling frequency in header
|
||||
pub const RES4_SFREQ_OFFSET: usize = 1296;
|
||||
|
||||
/// Offset to number of samples in header
|
||||
pub const RES4_NSAMP_OFFSET: usize = 1304;
|
||||
|
||||
/// Offset to number of trials in header
|
||||
pub const RES4_NTRIALS_OFFSET: usize = 1312;
|
||||
|
||||
/// Offset to channel info section
|
||||
pub const RES4_CHANNEL_INFO_OFFSET: usize = 1844;
|
||||
|
||||
// ============================================================================
|
||||
// Channel info offsets within RES4_CHANNEL_INFO_SIZE block
|
||||
// ============================================================================
|
||||
|
||||
/// Offset to channel name (32 bytes string)
|
||||
pub const CH_NAME_OFFSET: usize = 0;
|
||||
|
||||
/// Offset to channel type (i16)
|
||||
pub const CH_TYPE_OFFSET: usize = 32;
|
||||
|
||||
/// Offset to sensor type (i16)
|
||||
pub const CH_SENSOR_TYPE_OFFSET: usize = 34;
|
||||
|
||||
/// Offset to proper gain (f64)
|
||||
pub const CH_PROPER_GAIN_OFFSET: usize = 48;
|
||||
|
||||
/// Offset to q_gain (f64)
|
||||
pub const CH_Q_GAIN_OFFSET: usize = 56;
|
||||
|
||||
/// Offset to io_gain (f64)
|
||||
pub const CH_IO_GAIN_OFFSET: usize = 64;
|
||||
|
||||
/// Offset to io_offset (f64)
|
||||
pub const CH_IO_OFFSET_OFFSET: usize = 72;
|
||||
|
||||
/// Offset to number of coils (i16)
|
||||
pub const CH_NUM_COILS_OFFSET: usize = 80;
|
||||
|
||||
/// Offset to gradient order (i16)
|
||||
pub const CH_GRAD_ORDER_OFFSET: usize = 82;
|
||||
|
||||
/// Offset to first coil position (starts coil array)
|
||||
pub const CH_COILS_OFFSET: usize = 96;
|
||||
|
||||
/// Size of each coil info entry
|
||||
pub const COIL_INFO_SIZE: usize = 112;
|
||||
|
||||
// ============================================================================
|
||||
// Coil info offsets within COIL_INFO_SIZE block
|
||||
// ============================================================================
|
||||
|
||||
/// Offset to coil position X (f64)
|
||||
pub const COIL_POS_X_OFFSET: usize = 0;
|
||||
|
||||
/// Offset to coil position Y (f64)
|
||||
pub const COIL_POS_Y_OFFSET: usize = 8;
|
||||
|
||||
/// Offset to coil position Z (f64)
|
||||
pub const COIL_POS_Z_OFFSET: usize = 16;
|
||||
|
||||
/// Offset to coil orientation X (f64)
|
||||
pub const COIL_ORI_X_OFFSET: usize = 24;
|
||||
|
||||
/// Offset to coil orientation Y (f64)
|
||||
pub const COIL_ORI_Y_OFFSET: usize = 32;
|
||||
|
||||
/// Offset to coil orientation Z (f64)
|
||||
pub const COIL_ORI_Z_OFFSET: usize = 40;
|
||||
|
||||
/// Offset to coil area (f64)
|
||||
pub const COIL_AREA_OFFSET: usize = 48;
|
||||
|
||||
/// Offset to coil turns (i32)
|
||||
pub const COIL_TURNS_OFFSET: usize = 56;
|
||||
Reference in New Issue
Block a user