Ryan Malloy 430caf9e62 Measured pattern import: CSV, EMCAR, NEC2, Touchstone S1P parsers + web UI upload
Add 5 MCP tools (PatternImportMixin) and 1 prompt for importing external
antenna pattern data. Pure-Python parsers with IDW interpolation on the
sphere, single-cut-to-3D synthesis for EMCAR/2-col CSV, and Touchstone S1P
bridge to the analytical pattern engine. Web UI gets a "Load File" button
with multipart upload endpoint and WebSocket broadcast. 78 tools, 14 prompts.
2026-01-31 15:58:19 -07:00

57 lines
1.2 KiB
TypeScript

export interface PatternData {
antenna_type: string;
frequency_hz: number;
wavelength_m: number;
theta_deg: number[];
phi_deg: number[];
gain_dbi: number[][];
peak_gain_dbi: number;
e_plane: PlanePoint[];
h_plane: PlanePoint[];
model: string;
resonance?: ResonanceData;
raw_cut?: { angles_deg: number[]; gain_db: number[]; plane: string };
import_info?: { format: string; filename?: string; points: number };
}
export interface PlanePoint {
theta_deg?: number;
phi_deg?: number;
gain_dbi: number;
}
export interface ResonanceData {
frequency_hz: number;
swr: number;
return_loss_db: number;
impedance_real: number;
impedance_imag: number;
}
export interface ComputeParams {
antenna_type: string;
frequency_hz: number;
impedance_real: number;
impedance_imag: number;
}
export interface ScanParams {
antenna_type: string;
start_hz: number;
stop_hz: number;
points: number;
}
export type DisplayMode = 'surface' | 'wireframe' | 'e-plane' | 'h-plane';
export interface AppState {
connected: boolean;
loading: boolean;
pattern: PatternData | null;
displayMode: DisplayMode;
antennaType: string;
frequencyMhz: number;
impedanceReal: number;
impedanceImag: number;
}