initial commit

This commit is contained in:
2026-04-10 14:37:34 -04:00
commit 9641dae687
601 changed files with 1633613 additions and 0 deletions

BIN
tests/.DS_Store vendored Normal file

Binary file not shown.

0
tests/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

284
tests/conftest.py Normal file
View 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
View 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
View 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

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

View 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

File diff suppressed because it is too large Load Diff

BIN
tests/mme_data/.DS_Store vendored Normal file

Binary file not shown.

Binary file not shown.

BIN
tests/mme_data/3239/.DS_Store vendored Normal file

Binary file not shown.

View 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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

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