initial commit
This commit is contained in:
BIN
tests/.DS_Store
vendored
Normal file
BIN
tests/.DS_Store
vendored
Normal file
Binary file not shown.
0
tests/__init__.py
Normal file
0
tests/__init__.py
Normal file
BIN
tests/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
tests/__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
BIN
tests/__pycache__/__init__.cpython-314.pyc
Normal file
BIN
tests/__pycache__/__init__.cpython-314.pyc
Normal file
Binary file not shown.
BIN
tests/__pycache__/conftest.cpython-312-pytest-9.0.3.pyc
Normal file
BIN
tests/__pycache__/conftest.cpython-312-pytest-9.0.3.pyc
Normal file
Binary file not shown.
BIN
tests/__pycache__/conftest.cpython-314-pytest-9.0.3.pyc
Normal file
BIN
tests/__pycache__/conftest.cpython-314-pytest-9.0.3.pyc
Normal file
Binary file not shown.
BIN
tests/__pycache__/test_integration.cpython-312-pytest-9.0.3.pyc
Normal file
BIN
tests/__pycache__/test_integration.cpython-312-pytest-9.0.3.pyc
Normal file
Binary file not shown.
BIN
tests/__pycache__/test_integration.cpython-314-pytest-9.0.3.pyc
Normal file
BIN
tests/__pycache__/test_integration.cpython-314-pytest-9.0.3.pyc
Normal file
Binary file not shown.
BIN
tests/__pycache__/test_real_mme.cpython-312-pytest-9.0.3.pyc
Normal file
BIN
tests/__pycache__/test_real_mme.cpython-312-pytest-9.0.3.pyc
Normal file
Binary file not shown.
BIN
tests/__pycache__/test_real_mme.cpython-314-pytest-9.0.3.pyc
Normal file
BIN
tests/__pycache__/test_real_mme.cpython-314-pytest-9.0.3.pyc
Normal file
Binary file not shown.
284
tests/conftest.py
Normal file
284
tests/conftest.py
Normal file
@@ -0,0 +1,284 @@
|
||||
"""Shared test fixtures.
|
||||
|
||||
Generates synthetic MME test data that mimics a realistic frontal crash test.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
|
||||
from impakt.channel.code import ChannelCode
|
||||
from impakt.channel.model import (
|
||||
Channel,
|
||||
ChannelGroup,
|
||||
DummyInfo,
|
||||
ImpactConfig,
|
||||
TestData,
|
||||
TestMetadata,
|
||||
VehicleInfo,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_rate() -> float:
|
||||
return 20000.0
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def duration() -> float:
|
||||
return 0.2 # 200 ms
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def time_array(sample_rate: float, duration: float) -> np.ndarray:
|
||||
"""Time array: -0.01s to 0.19s (10 ms pre-trigger + 190 ms event)."""
|
||||
n = int(duration * sample_rate)
|
||||
pre = int(0.01 * sample_rate)
|
||||
return np.arange(n, dtype=np.float64) / sample_rate - pre / sample_rate
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def head_accel_x(time_array: np.ndarray, sample_rate: float) -> Channel:
|
||||
"""Synthetic head X acceleration: half-sine pulse peaking at ~40g."""
|
||||
t = time_array
|
||||
data = np.zeros_like(t)
|
||||
mask = (t >= 0) & (t <= 0.1)
|
||||
data[mask] = 40.0 * np.sin(np.pi * t[mask] / 0.1)
|
||||
# Add some noise
|
||||
data += np.random.default_rng(42).normal(0, 0.5, len(data))
|
||||
|
||||
return Channel(
|
||||
name="11HEAD0000ACXA",
|
||||
code=ChannelCode.parse("11HEAD0000ACXA"),
|
||||
data=data,
|
||||
time=t,
|
||||
unit="g",
|
||||
sample_rate=sample_rate,
|
||||
source_test_id="TEST_001",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def head_accel_y(time_array: np.ndarray, sample_rate: float) -> Channel:
|
||||
"""Synthetic head Y acceleration: smaller lateral component."""
|
||||
t = time_array
|
||||
data = np.zeros_like(t)
|
||||
mask = (t >= 0) & (t <= 0.1)
|
||||
data[mask] = 8.0 * np.sin(np.pi * t[mask] / 0.1) * np.cos(3 * np.pi * t[mask] / 0.1)
|
||||
data += np.random.default_rng(43).normal(0, 0.3, len(data))
|
||||
|
||||
return Channel(
|
||||
name="11HEAD0000ACYA",
|
||||
code=ChannelCode.parse("11HEAD0000ACYA"),
|
||||
data=data,
|
||||
time=t,
|
||||
unit="g",
|
||||
sample_rate=sample_rate,
|
||||
source_test_id="TEST_001",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def head_accel_z(time_array: np.ndarray, sample_rate: float) -> Channel:
|
||||
"""Synthetic head Z acceleration."""
|
||||
t = time_array
|
||||
data = np.zeros_like(t)
|
||||
mask = (t >= 0) & (t <= 0.1)
|
||||
data[mask] = 15.0 * np.sin(np.pi * t[mask] / 0.1)
|
||||
data += np.random.default_rng(44).normal(0, 0.3, len(data))
|
||||
|
||||
return Channel(
|
||||
name="11HEAD0000ACZA",
|
||||
code=ChannelCode.parse("11HEAD0000ACZA"),
|
||||
data=data,
|
||||
time=t,
|
||||
unit="g",
|
||||
sample_rate=sample_rate,
|
||||
source_test_id="TEST_001",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def head_group(head_accel_x: Channel, head_accel_y: Channel, head_accel_z: Channel) -> ChannelGroup:
|
||||
return ChannelGroup(
|
||||
key="11HEAD0000AC_A",
|
||||
x=head_accel_x,
|
||||
y=head_accel_y,
|
||||
z=head_accel_z,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def chest_deflection_channel(time_array: np.ndarray, sample_rate: float) -> Channel:
|
||||
"""Synthetic chest deflection: ramps to 35mm peak."""
|
||||
t = time_array
|
||||
data = np.zeros_like(t)
|
||||
mask = (t >= 0.01) & (t <= 0.08)
|
||||
t_event = t[mask] - 0.01
|
||||
data[mask] = 35.0 * np.sin(np.pi * t_event / 0.07)
|
||||
|
||||
return Channel(
|
||||
name="11CHST0000DCXA",
|
||||
code=ChannelCode.parse("11CHST0000DCXA"),
|
||||
data=data,
|
||||
time=t,
|
||||
unit="mm",
|
||||
sample_rate=sample_rate,
|
||||
source_test_id="TEST_001",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def neck_fz_channel(time_array: np.ndarray, sample_rate: float) -> Channel:
|
||||
"""Synthetic neck Fz: tension pulse peaking at ~3000N."""
|
||||
t = time_array
|
||||
data = np.zeros_like(t)
|
||||
mask = (t >= 0.005) & (t <= 0.06)
|
||||
t_event = t[mask] - 0.005
|
||||
data[mask] = 3000.0 * np.sin(np.pi * t_event / 0.055)
|
||||
|
||||
return Channel(
|
||||
name="11NECKUP00FOZA",
|
||||
code=ChannelCode.parse("11NECKUP00FOZA"),
|
||||
data=data,
|
||||
time=t,
|
||||
unit="N",
|
||||
sample_rate=sample_rate,
|
||||
source_test_id="TEST_001",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def neck_my_channel(time_array: np.ndarray, sample_rate: float) -> Channel:
|
||||
"""Synthetic neck My: flexion moment peaking at ~80 Nm."""
|
||||
t = time_array
|
||||
data = np.zeros_like(t)
|
||||
mask = (t >= 0.01) & (t <= 0.07)
|
||||
t_event = t[mask] - 0.01
|
||||
data[mask] = 80.0 * np.sin(np.pi * t_event / 0.06)
|
||||
|
||||
return Channel(
|
||||
name="11NECKUP00MOYA",
|
||||
code=ChannelCode.parse("11NECKUP00MOYA"),
|
||||
data=data,
|
||||
time=t,
|
||||
unit="N·m",
|
||||
sample_rate=sample_rate,
|
||||
source_test_id="TEST_001",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def femur_left_channel(time_array: np.ndarray, sample_rate: float) -> Channel:
|
||||
"""Synthetic left femur load: compressive pulse peaking at ~4500N."""
|
||||
t = time_array
|
||||
data = np.zeros_like(t)
|
||||
mask = (t >= 0.02) & (t <= 0.09)
|
||||
t_event = t[mask] - 0.02
|
||||
data[mask] = -4500.0 * np.sin(np.pi * t_event / 0.07)
|
||||
|
||||
return Channel(
|
||||
name="11FEMRLE00FOZA",
|
||||
code=ChannelCode.parse("11FEMRLE00FOZA"),
|
||||
data=data,
|
||||
time=t,
|
||||
unit="N",
|
||||
sample_rate=sample_rate,
|
||||
source_test_id="TEST_001",
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_metadata() -> TestMetadata:
|
||||
return TestMetadata(
|
||||
test_number="TEST_001",
|
||||
vehicle=VehicleInfo(make="Toyota", model="Camry", year=2024, mass_kg=1523.0),
|
||||
dummy=DummyInfo(dummy_type="H3-50M", position="Driver", mass_kg=78.0),
|
||||
impact=ImpactConfig(
|
||||
test_type="Full Frontal",
|
||||
speed_kmh=56.3,
|
||||
barrier_type="Rigid",
|
||||
overlap_percent=100.0,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_test_data(
|
||||
sample_metadata: TestMetadata,
|
||||
head_accel_x: Channel,
|
||||
head_accel_y: Channel,
|
||||
head_accel_z: Channel,
|
||||
chest_deflection_channel: Channel,
|
||||
neck_fz_channel: Channel,
|
||||
neck_my_channel: Channel,
|
||||
femur_left_channel: Channel,
|
||||
) -> TestData:
|
||||
"""Full synthetic test data with multiple channels."""
|
||||
channels = {
|
||||
head_accel_x.name: head_accel_x,
|
||||
head_accel_y.name: head_accel_y,
|
||||
head_accel_z.name: head_accel_z,
|
||||
chest_deflection_channel.name: chest_deflection_channel,
|
||||
neck_fz_channel.name: neck_fz_channel,
|
||||
neck_my_channel.name: neck_my_channel,
|
||||
femur_left_channel.name: femur_left_channel,
|
||||
}
|
||||
return TestData(
|
||||
test_id="TEST_001",
|
||||
metadata=sample_metadata,
|
||||
channels=channels,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_mme_dir(tmp_path: Path, head_accel_x: Channel) -> Path:
|
||||
"""Create a minimal MME directory structure for reader tests."""
|
||||
test_dir = tmp_path / "test_001"
|
||||
test_dir.mkdir()
|
||||
|
||||
# MME.ini
|
||||
ini = test_dir / "MME.ini"
|
||||
ini.write_text(
|
||||
"[Test]\n"
|
||||
"test_number = TEST_001\n"
|
||||
"test_type = Full Frontal\n"
|
||||
"test_speed = 56.3\n"
|
||||
"\n"
|
||||
"[Vehicle]\n"
|
||||
"vehicle_make = Toyota\n"
|
||||
"vehicle_model = Camry\n"
|
||||
"vehicle_year = 2024\n"
|
||||
"\n"
|
||||
"[Dummy]\n"
|
||||
"dummy_type = H3-50M\n"
|
||||
"dummy_position = Driver\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
# Channel directory
|
||||
ch_dir = test_dir / "channels"
|
||||
ch_dir.mkdir()
|
||||
|
||||
# .chn file
|
||||
chn = ch_dir / "11HEAD0000ACXA.chn"
|
||||
chn.write_text(
|
||||
"[Channel]\n"
|
||||
"channel_code = 11HEAD0000ACXA\n"
|
||||
"unit = g\n"
|
||||
"sample_rate = 20000\n"
|
||||
"num_samples = 4000\n"
|
||||
"pre_trigger = 200\n"
|
||||
"cfc = 1000\n"
|
||||
"data_format = ascii\n",
|
||||
encoding="utf-8",
|
||||
)
|
||||
|
||||
# .dat file (ASCII, one value per line)
|
||||
dat = ch_dir / "11HEAD0000ACXA.dat"
|
||||
np.savetxt(str(dat), head_accel_x.data, fmt="%.6f")
|
||||
|
||||
return test_dir
|
||||
306
tests/fixtures/generate_mme.py
vendored
Normal file
306
tests/fixtures/generate_mme.py
vendored
Normal file
@@ -0,0 +1,306 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate realistic synthetic MME crash test fixture data.
|
||||
|
||||
Creates a proper ISO 13499 MME directory structure simulating a full
|
||||
frontal crash test (56 km/h rigid barrier, Hybrid III 50th percentile
|
||||
male driver). Produces ~30 channels covering all body regions needed
|
||||
for injury criteria computation.
|
||||
|
||||
The signals use physically realistic waveforms:
|
||||
- Half-sine acceleration pulses with appropriate timing and magnitude
|
||||
- Neck force/moment with realistic tension-flexion patterns
|
||||
- Chest deflection with viscous loading character
|
||||
- Femur compressive force profiles
|
||||
- Tibia axial and bending loads
|
||||
|
||||
All signals include pre-trigger baseline, realistic noise, and sensor
|
||||
characteristics (sample rate, CFC class).
|
||||
|
||||
Usage:
|
||||
python generate_mme.py [output_dir]
|
||||
|
||||
If no output_dir is specified, generates into tests/fixtures/sample_mme/
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Parameters
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
SAMPLE_RATE = 20000.0 # Hz
|
||||
DT = 1.0 / SAMPLE_RATE
|
||||
PRE_TRIGGER_S = 0.010 # 10 ms pre-trigger
|
||||
EVENT_DURATION_S = 0.200 # 200 ms event
|
||||
TOTAL_DURATION_S = PRE_TRIGGER_S + EVENT_DURATION_S
|
||||
NUM_SAMPLES = int(TOTAL_DURATION_S * SAMPLE_RATE)
|
||||
PRE_TRIGGER_SAMPLES = int(PRE_TRIGGER_S * SAMPLE_RATE)
|
||||
|
||||
RNG = np.random.default_rng(2024)
|
||||
|
||||
# Time array with t=0 at trigger
|
||||
TIME = np.arange(NUM_SAMPLES, dtype=np.float64) * DT - PRE_TRIGGER_S
|
||||
|
||||
|
||||
def noise(scale: float = 0.3) -> np.ndarray:
|
||||
"""Add realistic sensor noise."""
|
||||
return RNG.normal(0, scale, NUM_SAMPLES)
|
||||
|
||||
|
||||
def half_sine(
|
||||
t_start: float,
|
||||
t_duration: float,
|
||||
amplitude: float,
|
||||
phase_shift: float = 0.0,
|
||||
) -> np.ndarray:
|
||||
"""Generate a half-sine pulse."""
|
||||
data = np.zeros(NUM_SAMPLES)
|
||||
mask = (TIME >= t_start) & (TIME <= t_start + t_duration)
|
||||
t_local = TIME[mask] - t_start
|
||||
data[mask] = amplitude * np.sin(np.pi * t_local / t_duration + phase_shift)
|
||||
return data
|
||||
|
||||
|
||||
def crash_pulse(t_start: float, t_rise: float, t_fall: float, amplitude: float) -> np.ndarray:
|
||||
"""Generate a more realistic crash pulse with fast rise and slower decay."""
|
||||
data = np.zeros(NUM_SAMPLES)
|
||||
# Rise phase
|
||||
mask_rise = (TIME >= t_start) & (TIME < t_start + t_rise)
|
||||
t_local = TIME[mask_rise] - t_start
|
||||
data[mask_rise] = amplitude * np.sin(np.pi * t_local / (2 * t_rise))
|
||||
# Fall phase
|
||||
mask_fall = (TIME >= t_start + t_rise) & (TIME <= t_start + t_rise + t_fall)
|
||||
t_local = TIME[mask_fall] - (t_start + t_rise)
|
||||
data[mask_fall] = amplitude * np.cos(np.pi * t_local / (2 * t_fall))
|
||||
return data
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Channel definitions
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Each channel: (code, description, unit, cfc_class, data_generator)
|
||||
|
||||
|
||||
def gen_channels() -> list[tuple[str, str, str, int, np.ndarray]]:
|
||||
channels = []
|
||||
|
||||
# === HEAD ===
|
||||
# Head X acceleration: main frontal pulse, ~45g peak
|
||||
head_ax = crash_pulse(0.0, 0.020, 0.060, 45.0) + noise(0.8)
|
||||
channels.append(("11HEAD0000ACXA", "Head CG X Acceleration", "g", 1000, head_ax))
|
||||
|
||||
# Head Y acceleration: small lateral component
|
||||
head_ay = half_sine(0.005, 0.070, 8.0) * np.cos(5 * np.pi * (TIME - 0.005) / 0.070) + noise(0.4)
|
||||
head_ay[TIME < 0.005] = noise(0.4)[TIME < 0.005]
|
||||
channels.append(("11HEAD0000ACYA", "Head CG Y Acceleration", "g", 1000, head_ay))
|
||||
|
||||
# Head Z acceleration: downward component
|
||||
head_az = crash_pulse(0.003, 0.018, 0.055, 22.0) + noise(0.5)
|
||||
channels.append(("11HEAD0000ACZA", "Head CG Z Acceleration", "g", 1000, head_az))
|
||||
|
||||
# Head angular velocity (for future BrIC)
|
||||
head_avx = half_sine(0.005, 0.060, 15.0) + noise(0.3)
|
||||
channels.append(("11HEAD0000AVXA", "Head Angular Velocity X", "rad/s", 600, head_avx))
|
||||
head_avy = half_sine(0.008, 0.055, 25.0) + noise(0.3)
|
||||
channels.append(("11HEAD0000AVYA", "Head Angular Velocity Y", "rad/s", 600, head_avy))
|
||||
head_avz = half_sine(0.006, 0.050, 10.0) + noise(0.2)
|
||||
channels.append(("11HEAD0000AVZA", "Head Angular Velocity Z", "rad/s", 600, head_avz))
|
||||
|
||||
# === NECK (upper) ===
|
||||
# Neck Fz: tension pulse ~3200 N
|
||||
neck_fz = crash_pulse(0.005, 0.015, 0.045, 3200.0) + noise(15.0)
|
||||
channels.append(("11NECKUP00FOZA", "Upper Neck Axial Force", "N", 600, neck_fz))
|
||||
|
||||
# Neck Fx: shear force ~800 N
|
||||
neck_fx = crash_pulse(0.008, 0.012, 0.040, 800.0) + noise(8.0)
|
||||
channels.append(("11NECKUP00FOXA", "Upper Neck Shear Force X", "N", 600, neck_fx))
|
||||
|
||||
# Neck My: flexion moment ~85 Nm
|
||||
neck_my = crash_pulse(0.010, 0.015, 0.050, 85.0) + noise(1.5)
|
||||
channels.append(("11NECKUP00MOYA", "Upper Neck Moment Y (Flexion)", "N·m", 600, neck_my))
|
||||
|
||||
# Neck Mx: lateral moment ~25 Nm
|
||||
neck_mx = half_sine(0.012, 0.045, 25.0) + noise(0.8)
|
||||
channels.append(("11NECKUP00MOXA", "Upper Neck Moment X", "N·m", 600, neck_mx))
|
||||
|
||||
# === CHEST ===
|
||||
# Chest X acceleration
|
||||
chest_ax = crash_pulse(0.008, 0.020, 0.055, 38.0) + noise(0.6)
|
||||
channels.append(("11CHST0000ACXA", "Chest T12 X Acceleration", "g", 180, chest_ax))
|
||||
|
||||
# Chest Y acceleration
|
||||
chest_ay = half_sine(0.010, 0.060, 6.0) + noise(0.3)
|
||||
channels.append(("11CHST0000ACYA", "Chest T12 Y Acceleration", "g", 180, chest_ay))
|
||||
|
||||
# Chest Z acceleration
|
||||
chest_az = crash_pulse(0.009, 0.018, 0.050, 18.0) + noise(0.4)
|
||||
channels.append(("11CHST0000ACZA", "Chest T12 Z Acceleration", "g", 180, chest_az))
|
||||
|
||||
# Chest deflection: ramps up to ~36mm, then recovers
|
||||
chest_dc = np.zeros(NUM_SAMPLES)
|
||||
mask_load = (TIME >= 0.010) & (TIME < 0.055)
|
||||
t_load = TIME[mask_load] - 0.010
|
||||
chest_dc[mask_load] = 36.0 * np.sin(np.pi * t_load / 0.090)
|
||||
mask_unload = (TIME >= 0.055) & (TIME < 0.130)
|
||||
t_unload = TIME[mask_unload] - 0.055
|
||||
chest_dc[mask_unload] = 36.0 * np.sin(np.pi * 0.045 / 0.090) * np.exp(-t_unload / 0.030)
|
||||
chest_dc += noise(0.2)
|
||||
channels.append(("11CHST0000DCXA", "Chest Deflection", "mm", 180, chest_dc))
|
||||
|
||||
# === PELVIS ===
|
||||
pelv_ax = crash_pulse(0.012, 0.022, 0.060, 35.0) + noise(0.5)
|
||||
channels.append(("11PELV0000ACXA", "Pelvis X Acceleration", "g", 180, pelv_ax))
|
||||
pelv_ay = half_sine(0.015, 0.055, 5.0) + noise(0.3)
|
||||
channels.append(("11PELV0000ACYA", "Pelvis Y Acceleration", "g", 180, pelv_ay))
|
||||
pelv_az = crash_pulse(0.014, 0.018, 0.050, 15.0) + noise(0.4)
|
||||
channels.append(("11PELV0000ACZA", "Pelvis Z Acceleration", "g", 180, pelv_az))
|
||||
|
||||
# === FEMUR ===
|
||||
# Left femur: compressive pulse ~4800 N (negative = compression in SAE)
|
||||
femur_l = -crash_pulse(0.020, 0.015, 0.045, 4800.0) + noise(20.0)
|
||||
channels.append(("11FEMRLE00FOZA", "Left Femur Axial Force", "N", 600, femur_l))
|
||||
|
||||
# Right femur: slightly lower
|
||||
femur_r = -crash_pulse(0.022, 0.014, 0.042, 4200.0) + noise(18.0)
|
||||
channels.append(("11FEMRRI00FOZA", "Right Femur Axial Force", "N", 600, femur_r))
|
||||
|
||||
# === TIBIA (left upper) ===
|
||||
tibia_fz = -crash_pulse(0.025, 0.012, 0.040, 5500.0) + noise(25.0)
|
||||
channels.append(("11TIBILEUOFOZA", "Left Upper Tibia Axial Force", "N", 600, tibia_fz))
|
||||
|
||||
tibia_mx = half_sine(0.028, 0.040, 80.0) + noise(2.0)
|
||||
channels.append(("11TIBILEUOMOXA", "Left Upper Tibia Moment X", "N·m", 600, tibia_mx))
|
||||
|
||||
tibia_my = half_sine(0.027, 0.038, 120.0) + noise(2.5)
|
||||
channels.append(("11TIBILEUOMOYA", "Left Upper Tibia Moment Y", "N·m", 600, tibia_my))
|
||||
|
||||
# === SEAT BELT ===
|
||||
belt_fo = crash_pulse(0.005, 0.025, 0.070, 6500.0) + noise(30.0)
|
||||
channels.append(("11BELT0000FOXA", "Lap Belt Force", "N", 60, belt_fo))
|
||||
|
||||
# Shoulder belt force
|
||||
sbelt_fo = crash_pulse(0.003, 0.020, 0.065, 5800.0) + noise(25.0)
|
||||
channels.append(("11BELTUPOOFOZA", "Shoulder Belt Force", "N", 60, sbelt_fo))
|
||||
|
||||
# === VEHICLE / STRUCTURAL ===
|
||||
# B-pillar acceleration
|
||||
bpil_ax = crash_pulse(0.001, 0.015, 0.040, 55.0) + noise(1.0)
|
||||
channels.append(("10BPILLE00ACXA", "Left B-Pillar X Acceleration", "g", 60, bpil_ax))
|
||||
|
||||
# Steering column displacement
|
||||
stcl_ds = np.zeros(NUM_SAMPLES)
|
||||
mask = (TIME >= 0.015) & (TIME < 0.100)
|
||||
t_local = TIME[mask] - 0.015
|
||||
stcl_ds[mask] = 45.0 * (1 - np.exp(-t_local / 0.025))
|
||||
stcl_ds[TIME >= 0.100] = stcl_ds[mask][-1] if np.any(mask) else 0
|
||||
stcl_ds += noise(0.3)
|
||||
channels.append(("10STCL0000DSXA", "Steering Column Displacement", "mm", 60, stcl_ds))
|
||||
|
||||
return channels
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# MME writer
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def write_mme(output_dir: Path) -> None:
|
||||
"""Write a complete MME directory structure."""
|
||||
output_dir.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# --- MME.ini ---
|
||||
ini_content = """\
|
||||
[Test]
|
||||
test_number = IMPAKT_SYNTH_001
|
||||
test_date = 2024-06-15
|
||||
test_type = Full Frontal Rigid Barrier
|
||||
test_speed = 56.3
|
||||
test_facility = Impakt Synthetic Data Generator
|
||||
test_standard = FMVSS 208
|
||||
description = Synthetic frontal crash test for Impakt development and testing
|
||||
|
||||
[Vehicle]
|
||||
vehicle_make = Synthetic
|
||||
vehicle_model = TestCar
|
||||
vehicle_year = 2024
|
||||
vehicle_vin = IMPAKT0000000001
|
||||
vehicle_mass = 1523.0
|
||||
vehicle_type = Passenger Car
|
||||
|
||||
[Barrier]
|
||||
barrier_type = Rigid
|
||||
impact_angle = 0
|
||||
overlap_percent = 100
|
||||
impact_side = Front
|
||||
|
||||
[Dummy]
|
||||
dummy_type = Hybrid III 50th Percentile Male
|
||||
dummy_serial = H3-50M-SYNTH-001
|
||||
dummy_position = Driver
|
||||
dummy_mass = 78.0
|
||||
restraint_type = 3-point belt + frontal airbag
|
||||
seat_position = Mid-track, mid-height
|
||||
|
||||
[DataAcquisition]
|
||||
sample_rate = 20000
|
||||
pre_trigger_ms = 10
|
||||
total_duration_ms = 210
|
||||
num_channels = 28
|
||||
"""
|
||||
|
||||
(output_dir / "MME.ini").write_text(ini_content, encoding="utf-8")
|
||||
|
||||
# --- Channel files ---
|
||||
ch_dir = output_dir / "channels"
|
||||
ch_dir.mkdir(exist_ok=True)
|
||||
|
||||
channels = gen_channels()
|
||||
|
||||
for code, description, unit, cfc, data in channels:
|
||||
# Write .chn header
|
||||
chn_content = f"""\
|
||||
[Channel]
|
||||
channel_code = {code}
|
||||
description = {description}
|
||||
unit = {unit}
|
||||
sample_rate = {SAMPLE_RATE:.0f}
|
||||
num_samples = {NUM_SAMPLES}
|
||||
dt = {DT:.10f}
|
||||
pre_trigger = {PRE_TRIGGER_SAMPLES}
|
||||
cfc = {cfc}
|
||||
data_format = ascii
|
||||
"""
|
||||
(ch_dir / f"{code}.chn").write_text(chn_content, encoding="utf-8")
|
||||
|
||||
# Write .dat data (ASCII, one value per line)
|
||||
np.savetxt(str(ch_dir / f"{code}.dat"), data, fmt="%.8f")
|
||||
|
||||
print(f"Generated MME fixture: {output_dir}")
|
||||
print(f" {len(channels)} channels, {NUM_SAMPLES} samples each")
|
||||
print(f" Sample rate: {SAMPLE_RATE:.0f} Hz")
|
||||
print(
|
||||
f" Duration: {PRE_TRIGGER_S * 1000:.0f} ms pre-trigger + {EVENT_DURATION_S * 1000:.0f} ms event"
|
||||
)
|
||||
print(
|
||||
f" Total size: ~{sum(len(data) for _, _, _, _, data in channels) * 12 / 1024 / 1024:.1f} MB"
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Main
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) > 1:
|
||||
out = Path(sys.argv[1])
|
||||
else:
|
||||
out = Path(__file__).parent / "sample_mme"
|
||||
|
||||
write_mme(out)
|
||||
36
tests/fixtures/sample_mme/MME.ini
vendored
Normal file
36
tests/fixtures/sample_mme/MME.ini
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
[Test]
|
||||
test_number = IMPAKT_SYNTH_001
|
||||
test_date = 2024-06-15
|
||||
test_type = Full Frontal Rigid Barrier
|
||||
test_speed = 56.3
|
||||
test_facility = Impakt Synthetic Data Generator
|
||||
test_standard = FMVSS 208
|
||||
description = Synthetic frontal crash test for Impakt development and testing
|
||||
|
||||
[Vehicle]
|
||||
vehicle_make = Synthetic
|
||||
vehicle_model = TestCar
|
||||
vehicle_year = 2024
|
||||
vehicle_vin = IMPAKT0000000001
|
||||
vehicle_mass = 1523.0
|
||||
vehicle_type = Passenger Car
|
||||
|
||||
[Barrier]
|
||||
barrier_type = Rigid
|
||||
impact_angle = 0
|
||||
overlap_percent = 100
|
||||
impact_side = Front
|
||||
|
||||
[Dummy]
|
||||
dummy_type = Hybrid III 50th Percentile Male
|
||||
dummy_serial = H3-50M-SYNTH-001
|
||||
dummy_position = Driver
|
||||
dummy_mass = 78.0
|
||||
restraint_type = 3-point belt + frontal airbag
|
||||
seat_position = Mid-track, mid-height
|
||||
|
||||
[DataAcquisition]
|
||||
sample_rate = 20000
|
||||
pre_trigger_ms = 10
|
||||
total_duration_ms = 210
|
||||
num_channels = 28
|
||||
10
tests/fixtures/sample_mme/channels/10BPILLE00ACXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/10BPILLE00ACXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 10BPILLE00ACXA
|
||||
description = Left B-Pillar X Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 60
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/10BPILLE00ACXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/10BPILLE00ACXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/10STCL0000DSXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/10STCL0000DSXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 10STCL0000DSXA
|
||||
description = Steering Column Displacement
|
||||
unit = mm
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 60
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/10STCL0000DSXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/10STCL0000DSXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11BELT0000FOXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11BELT0000FOXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11BELT0000FOXA
|
||||
description = Lap Belt Force
|
||||
unit = N
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 60
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11BELT0000FOXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11BELT0000FOXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11BELTUPOOFOZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11BELTUPOOFOZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11BELTUPOOFOZA
|
||||
description = Shoulder Belt Force
|
||||
unit = N
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 60
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11BELTUPOOFOZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11BELTUPOOFOZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11CHST0000ACXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11CHST0000ACXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11CHST0000ACXA
|
||||
description = Chest T12 X Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 180
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11CHST0000ACXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11CHST0000ACXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11CHST0000ACYA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11CHST0000ACYA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11CHST0000ACYA
|
||||
description = Chest T12 Y Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 180
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11CHST0000ACYA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11CHST0000ACYA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11CHST0000ACZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11CHST0000ACZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11CHST0000ACZA
|
||||
description = Chest T12 Z Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 180
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11CHST0000ACZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11CHST0000ACZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11CHST0000DCXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11CHST0000DCXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11CHST0000DCXA
|
||||
description = Chest Deflection
|
||||
unit = mm
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 180
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11CHST0000DCXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11CHST0000DCXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11FEMRLE00FOZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11FEMRLE00FOZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11FEMRLE00FOZA
|
||||
description = Left Femur Axial Force
|
||||
unit = N
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11FEMRLE00FOZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11FEMRLE00FOZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11FEMRRI00FOZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11FEMRRI00FOZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11FEMRRI00FOZA
|
||||
description = Right Femur Axial Force
|
||||
unit = N
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11FEMRRI00FOZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11FEMRRI00FOZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11HEAD0000ACXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11HEAD0000ACXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11HEAD0000ACXA
|
||||
description = Head CG X Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 1000
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11HEAD0000ACXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11HEAD0000ACXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11HEAD0000ACYA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11HEAD0000ACYA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11HEAD0000ACYA
|
||||
description = Head CG Y Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 1000
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11HEAD0000ACYA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11HEAD0000ACYA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11HEAD0000ACZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11HEAD0000ACZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11HEAD0000ACZA
|
||||
description = Head CG Z Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 1000
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11HEAD0000ACZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11HEAD0000ACZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11HEAD0000AVXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11HEAD0000AVXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11HEAD0000AVXA
|
||||
description = Head Angular Velocity X
|
||||
unit = rad/s
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11HEAD0000AVXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11HEAD0000AVXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11HEAD0000AVYA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11HEAD0000AVYA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11HEAD0000AVYA
|
||||
description = Head Angular Velocity Y
|
||||
unit = rad/s
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11HEAD0000AVYA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11HEAD0000AVYA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11HEAD0000AVZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11HEAD0000AVZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11HEAD0000AVZA
|
||||
description = Head Angular Velocity Z
|
||||
unit = rad/s
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11HEAD0000AVZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11HEAD0000AVZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11NECKUP00FOXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11NECKUP00FOXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11NECKUP00FOXA
|
||||
description = Upper Neck Shear Force X
|
||||
unit = N
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11NECKUP00FOXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11NECKUP00FOXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11NECKUP00FOZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11NECKUP00FOZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11NECKUP00FOZA
|
||||
description = Upper Neck Axial Force
|
||||
unit = N
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11NECKUP00FOZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11NECKUP00FOZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11NECKUP00MOXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11NECKUP00MOXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11NECKUP00MOXA
|
||||
description = Upper Neck Moment X
|
||||
unit = N·m
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11NECKUP00MOXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11NECKUP00MOXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11NECKUP00MOYA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11NECKUP00MOYA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11NECKUP00MOYA
|
||||
description = Upper Neck Moment Y (Flexion)
|
||||
unit = N·m
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11NECKUP00MOYA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11NECKUP00MOYA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11PELV0000ACXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11PELV0000ACXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11PELV0000ACXA
|
||||
description = Pelvis X Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 180
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11PELV0000ACXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11PELV0000ACXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11PELV0000ACYA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11PELV0000ACYA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11PELV0000ACYA
|
||||
description = Pelvis Y Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 180
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11PELV0000ACYA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11PELV0000ACYA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11PELV0000ACZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11PELV0000ACZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11PELV0000ACZA
|
||||
description = Pelvis Z Acceleration
|
||||
unit = g
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 180
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11PELV0000ACZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11PELV0000ACZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11TIBILEUOFOZA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11TIBILEUOFOZA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11TIBILEUOFOZA
|
||||
description = Left Upper Tibia Axial Force
|
||||
unit = N
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11TIBILEUOFOZA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11TIBILEUOFOZA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11TIBILEUOMOXA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11TIBILEUOMOXA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11TIBILEUOMOXA
|
||||
description = Left Upper Tibia Moment X
|
||||
unit = N·m
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11TIBILEUOMOXA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11TIBILEUOMOXA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
10
tests/fixtures/sample_mme/channels/11TIBILEUOMOYA.chn
vendored
Normal file
10
tests/fixtures/sample_mme/channels/11TIBILEUOMOYA.chn
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
[Channel]
|
||||
channel_code = 11TIBILEUOMOYA
|
||||
description = Left Upper Tibia Moment Y
|
||||
unit = N·m
|
||||
sample_rate = 20000
|
||||
num_samples = 4200
|
||||
dt = 0.0000500000
|
||||
pre_trigger = 200
|
||||
cfc = 600
|
||||
data_format = ascii
|
||||
4200
tests/fixtures/sample_mme/channels/11TIBILEUOMOYA.dat
vendored
Normal file
4200
tests/fixtures/sample_mme/channels/11TIBILEUOMOYA.dat
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
tests/mme_data/.DS_Store
vendored
Normal file
BIN
tests/mme_data/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
tests/mme_data/20020416_ISO_TS13499_revised(E).doc
Normal file
BIN
tests/mme_data/20020416_ISO_TS13499_revised(E).doc
Normal file
Binary file not shown.
BIN
tests/mme_data/3239/.DS_Store
vendored
Normal file
BIN
tests/mme_data/3239/.DS_Store
vendored
Normal file
Binary file not shown.
65
tests/mme_data/3239/3239.mme
Normal file
65
tests/mme_data/3239/3239.mme
Normal file
@@ -0,0 +1,65 @@
|
||||
Data format edition number :1.6
|
||||
Laboratory name :CALSPAN
|
||||
Laboratory contact name :NOVALUE
|
||||
Laboratory contact phone :NOVALUE
|
||||
Laboratory contact fax :NOVALUE
|
||||
Laboratory contact email :NOVALUE
|
||||
Laboratory test ref. number :RUN 858
|
||||
Customer name :NHTSA
|
||||
Customer test ref. number :3239
|
||||
Customer project ref. number:DTNH22-87-D-02012
|
||||
Customer order number :NOVALUE
|
||||
Customer cost unit :NOVALUE
|
||||
Customer test engineer name :VINCENT QUARLES
|
||||
Customer test engineer phone:NOVALUE
|
||||
Customer test engineer fax :NOVALUE
|
||||
Customer test engineer email:NOVALUE
|
||||
Title :FY89 NEW CAR ASSESSMENT PROGRAM
|
||||
Comments :FRONTAL BARRIER IMPACT TEST
|
||||
Medium No./number of media :NOVALUE
|
||||
Timestamp :2002-05-30 08:39:35
|
||||
Type of the test :VEHICLE INTO BARRIER
|
||||
Subtype of the test :FRONTAL BARRIER IMPACT TEST
|
||||
Regulation :FY89 NEW CAR ASSESSMENT
|
||||
Reference temperature :3
|
||||
Relative air humidity :NOVALUE
|
||||
Date of the test :1999-12-16
|
||||
Number of test objects :2
|
||||
Comments :TO OBTAIN VEHICLE CRASHWORTHINESS AND
|
||||
Comments :OCCUPANT RESTRAINT PERFORMANCE
|
||||
Name of test object 1 :VOLKSWAGEN PASSAT 2000
|
||||
Velocity test object 1 :15.527778202875252
|
||||
Mass test object 1 :1695
|
||||
Driver position object 1 :1
|
||||
Impact side test object 1 :FR
|
||||
Type of test object 1 :1
|
||||
Class of test object 1 :NOVALUE
|
||||
Code of test object 1 :FOUR DOOR SEDAN
|
||||
Ref. number of test object 1:NOVALUE
|
||||
.Offset 1 :100.0
|
||||
.Barrier width 1 :NOVALUE
|
||||
.Barrier height 1 :NOVALUE
|
||||
.Yaw angle 1 :NOVALUE
|
||||
.Reference system 1 :NOVALUE
|
||||
.Origin X 1 :NOVALUE
|
||||
.Origin Y 1 :NOVALUE
|
||||
.Origin Z 1 :NOVALUE
|
||||
.Number of loadcells 1 :NOVALUE
|
||||
Name of test object 2 :RIGID LOAD CELL BARRIER
|
||||
Velocity test object 2 :NOVALUE
|
||||
Mass test object 2 :NOVALUE
|
||||
Driver position object 2 :NOVALUE
|
||||
Impact side test object 2 :NOVALUE
|
||||
Type of test object 2 :B
|
||||
Class of test object 2 :NOVALUE
|
||||
Code of test object 2 :NOVALUE
|
||||
Ref. number of test object 2:NOVALUE
|
||||
.Offset 2 :100.0
|
||||
.Barrier width 2 :NOVALUE
|
||||
.Barrier height 2 :NOVALUE
|
||||
.Yaw angle 2 :NOVALUE
|
||||
.Reference system 2 :NOVALUE
|
||||
.Origin X 2 :NOVALUE
|
||||
.Origin Y 2 :NOVALUE
|
||||
.Origin Z 2 :NOVALUE
|
||||
.Number of loadcells 2 :NOVALUE
|
||||
1481
tests/mme_data/3239/3239.txt
Normal file
1481
tests/mme_data/3239/3239.txt
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.001
Normal file
3344
tests/mme_data/3239/Channel/3239.001
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.002
Normal file
3344
tests/mme_data/3239/Channel/3239.002
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.003
Normal file
3344
tests/mme_data/3239/Channel/3239.003
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.004
Normal file
3344
tests/mme_data/3239/Channel/3239.004
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.005
Normal file
3344
tests/mme_data/3239/Channel/3239.005
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.006
Normal file
3344
tests/mme_data/3239/Channel/3239.006
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.007
Normal file
3344
tests/mme_data/3239/Channel/3239.007
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.008
Normal file
3344
tests/mme_data/3239/Channel/3239.008
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.009
Normal file
3344
tests/mme_data/3239/Channel/3239.009
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.010
Normal file
3344
tests/mme_data/3239/Channel/3239.010
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.011
Normal file
3344
tests/mme_data/3239/Channel/3239.011
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.012
Normal file
3344
tests/mme_data/3239/Channel/3239.012
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.013
Normal file
3344
tests/mme_data/3239/Channel/3239.013
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.014
Normal file
3344
tests/mme_data/3239/Channel/3239.014
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.015
Normal file
3344
tests/mme_data/3239/Channel/3239.015
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.016
Normal file
3344
tests/mme_data/3239/Channel/3239.016
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.017
Normal file
3344
tests/mme_data/3239/Channel/3239.017
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.018
Normal file
3344
tests/mme_data/3239/Channel/3239.018
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.019
Normal file
3344
tests/mme_data/3239/Channel/3239.019
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.020
Normal file
3344
tests/mme_data/3239/Channel/3239.020
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.021
Normal file
3344
tests/mme_data/3239/Channel/3239.021
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.022
Normal file
3344
tests/mme_data/3239/Channel/3239.022
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.023
Normal file
3344
tests/mme_data/3239/Channel/3239.023
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.024
Normal file
3344
tests/mme_data/3239/Channel/3239.024
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.025
Normal file
3344
tests/mme_data/3239/Channel/3239.025
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.026
Normal file
3344
tests/mme_data/3239/Channel/3239.026
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.027
Normal file
3344
tests/mme_data/3239/Channel/3239.027
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.028
Normal file
3344
tests/mme_data/3239/Channel/3239.028
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.029
Normal file
3344
tests/mme_data/3239/Channel/3239.029
Normal file
File diff suppressed because it is too large
Load Diff
3344
tests/mme_data/3239/Channel/3239.030
Normal file
3344
tests/mme_data/3239/Channel/3239.030
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user