File size: 3,422 Bytes
e391a84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""
shared/constants.py
───────────────────
Named constants used across the entire codebase.
Centralised here to eliminate magic numbers and strings.
"""
from __future__ import annotations

# ── PPG Signal Processing ─────────────────────────────────────────────────────
PPG_BANDPASS_LOW: float = 0.5          # Lower cut-off frequency (Hz)
PPG_BANDPASS_HIGH: float = 8.0         # Upper cut-off frequency (Hz)
PPG_FILTER_ORDER: int = 4              # Butterworth filter order
PPG_SEGMENT_DURATION_SEC: int = 8      # Window size for segmentation (seconds)
PPG_MIN_SAMPLING_RATE: float = 25.0    # Minimum acceptable sampling rate (Hz)
PPG_MAX_SAMPLING_RATE: float = 1000.0  # Maximum acceptable sampling rate (Hz)
PPG_MIN_DURATION_SEC: float = 1.0      # Minimum signal duration (seconds)
PPG_MAX_DURATION_SEC: float = 3600.0   # Maximum signal duration (seconds)

# ── Blood Pressure Thresholds ─────────────────────────────────────────────────
BP_SBP_MIN: float = 60.0    # Minimum valid systolic BP (mmHg)
BP_SBP_MAX: float = 260.0   # Maximum valid systolic BP (mmHg)
BP_DBP_MIN: float = 30.0    # Minimum valid diastolic BP (mmHg)
BP_DBP_MAX: float = 160.0   # Maximum valid diastolic BP (mmHg)

# ── Message Queue ─────────────────────────────────────────────────────────────
PPG_QUEUE_NAME: str = "ppg_queue"
PPG_EXCHANGE_NAME: str = "ppg_exchange"
PPG_ROUTING_KEY: str = "ppg.raw"
MESSAGE_PREFETCH_COUNT: int = 1        # Consumer prefetch (process one at a time)

# ── Database ──────────────────────────────────────────────────────────────────
RAW_PPG_TABLE_NAME: str = "raw_ppg"
PREDICTIONS_TABLE_NAME: str = "predictions"

# ── API ───────────────────────────────────────────────────────────────────────
API_V1_PREFIX: str = "/api/v1"
DEFAULT_PAGINATION_LIMIT: int = 50
MAX_PAGINATION_LIMIT: int = 500

# ── Inference ─────────────────────────────────────────────────────────────────
MODEL_VERSION_MOCK: str = "mock-v1.0"
MODEL_VERSION_GAN_VGTLNET: str = "gan-vgtlnet-v1.0"

# ── CardioGAN Constants ───────────────────────────────────────────────────────
CARDIOGAN_ORIG_FS: int = 125
CARDIOGAN_TARGET_FS: int = 128
CARDIOGAN_WINDOW_SEC: int = 4
CARDIOGAN_WINDOW_SAMPLES: int = 512  # TARGET_FS * WINDOW_SEC
CARDIOGAN_OVERLAP: float = 0.10

# ── VGTL-Net Constants ────────────────────────────────────────────────────────
VGTLNET_SAMPLING_RATE: int = 125
VGTLNET_WINDOW_SIZE: int = 224