Gold Standard Test: Shaw et al. (2009)¶
This Jupyter notebook is part of the HBM4VT Validation Catalogue.
© 2024, OpenVT Organization OVTO
Available openly under Creative Commons Attribution 4.0 International License 
Experiments by Shaw et al. (2009)¶
Summary¶
The "Gold Standard" sled test was first published by Shaw et al. (2009).
Shaw, G., Parent, D., Purtsezov, S., Lessley, D., Crandall, J., Kent, R., Guillemot, H., Ridella, S. A., Takhounts, E., & Martin, P. (2009). Impact response of restrained PMHS in frontal sled tests: Skeletal deformation patterns under seat belt loading. Stapp Car Crash Journal, 53, 1–48. https://doi.org/10.4271/2009-22-0001
However, variants using the same sled setup using different speeds and belt load limiters have been performed. For details, please refer to the README.md and the documentation.
Example animations illustrating the sled test in a simulation with VIVA+ 50F are provided below. Note that while the sled moves in the simulations, a viewpoint moving with the sled was chosen for the animations.

When sharing your simulation results (TU Graz cloud, uploaded data is only accessible for the TU Graz developer group), please add animations (e.g.in *.avi format) of the views shown above to the zip-folder. These can be very helpful to analyze potential differences between different HBMs.
Experiments¶
Information on the subjects/specimens¶
Please refer to the "PMHS reference data overview" section in the README.md for detailed info on the tested PMHS for each of the three Gold Standard test setups.
Responses recorded¶
The reference values from the tests were obtained from the NHTSA biomechanics database of the tests listed in the README.md. There you can also find the links to the original data.
How to use this Notebook¶
- Copy your simulation results (only binouts are used) to the folder sim_results, into the correct subfolder (i.e. sim_results).
- Make sure the dynasaur ID file is provided for your HBM and the path in the respective cell ('Path to Dynasaur definition files') is set accordingly. For reference, an example file is provided in (data\metadata) and update which HBM you're using.
- Run the notebook and check your results for plausibility. Particularly, make sure that the automatically selected offsets make sense.
Disclaimer¶
The rib fracture predictions remain in the experimental stage for now and will be monitored for 2026 only. A criterion will be developed based on the data received for 2029.
# Read in version and setup type
# If you encounter an error message saying "Line does not start with "Version: " but..."
# or "Setup type not found in 00_Master_Sled.k."
# please make sure that the main file header is unchanged from the file available at
# https://openvt.eu/EuroNCAP/hbm4vt-validation-catalogue/ls-dyna/shaw_2009.
setup_dict={'40kph_notForceLimited': 'Gold Standard 1',
'30kph_3kN': 'Gold Standard 2',
'30kph_2kN': 'Gold Standard 2.1'}
belt_angle_range_dict={'40kph_notForceLimited': {'low': 24, 'high': 29},
'30kph_3kN': {'low': 25, 'high': 28},
'30kph_2kN': {'low': 23, 'high': 30}}
file_master = '00_Master_Sled_VIVA+50M_GS1.k'
with open(file_master, 'r') as fp:
lines = fp.readlines()
version_line = lines[2]
if not version_line.startswith('Version: '):
raise ValueError(f'Line does not start with "Version: " but {version_line}.')
version = version_line.split(' ')[1].strip()
setup_type = None
for line in lines:
if line.strip() == 'R GS1 1.':
setup_type = '40kph_notForceLimited'
break
if line.strip() == 'R GS2 1.':
setup_type = '30kph_3kN'
break
if line.strip() == 'R GS21 1.':
setup_type = '30kph_2kN'
break
if setup_type is None:
raise ValueError('Setup type not found in 00_Master_Sled.k.')
print('Simulation setup type:', setup_dict[setup_type])
Simulation setup type: Gold Standard 1
# Adjust settings here.
settings = {
"HBM": "VIVA+_50M", # E.g. THUMS_v4.1_05F, THUMS_v4.1_50M, VIVA+_50F
"units": "ms_mm_kg", # E.g. s_mm_ton, ms_mm_kg
"def_id_file": "00_vivaplus_IDs.def", # E.g. 00_THUMS_v4.1_05F_IDs.def, 00_THUMS_v4.1_50M_IDs.def, 00_VIVA+_50F_IDs.def
"HBM_char_file": 'HBM_characteristics_VIVA+_50M.csv',# E.g. HBM_characteristics_THUMS_v4.1_50M.csv, HBM_characteristics_VIVA+_50F.csv
"rib_criterion": "Larsson2021", # E.g. Larsson2021 or alternative tuned to THUMS v4.1 AM50: 'Forman2022_3plus'
"t_settle": 0.4, # Settling time in seconds. IMPORTANT: If settling time (parameter "SetHBM" in the master file) is changed, it needs to be adjusted here accordingly.
"solver_used": "LS-Dyna R12.2.2 SP",
"organisation": "OVTO",
"version": version,
"setup_type": setup_type,
"date": date.today().strftime('%Y-%m-%d')
}
# Length is expected to be in mm. If this changes, adjustments e.g. to rib_max_defl, step_size_defl are necessary.
assert settings["units"].split("_")[1] == "mm"
unit_system_to_time = {"s_mm_ton": "second", "ms_mm_kg": "millisecond"}
# Settling time to unit system.
t_settle = (settings["t_settle"] * ureg("seconds")).to(unit_system_to_time[settings["units"]]).magnitude
print('---- pre analysis to determine simulation duration ----')
text = []
# In-crash time is assumed to be at least 240 ms. Error termination is assumed to occur if in-crash time is less than 240 ms.
t_incrash = 240 * ureg("milliseconds").to(unit_system_to_time[settings["units"]]).magnitude
t_threshold = 1 * ureg("milliseconds").to(unit_system_to_time[settings["units"]]).magnitude
t_end = t_incrash + t_settle
dynasaur_def_pre = ["data/metadata/01_units_" + settings["units"] + ".def",
"data/metadata/04_testbed.def"]
sim = DataVisualizationController(calculation_procedure_def_file=dynasaur_def_pre,
object_def_file=dynasaur_def_id,
user_function_object=UserFunction,
data_source= binout_path_sim +'/binout*')
command = {'visualization': 'TESTBED_Testbed_X_coordinate_over_time', 'x_label': 'time', 'y_label': 'x-coordinate'}
sim.calculate(command)
t_end_sim = sim.get_data('TESTBED', 'Testbed_X_coordinate_over_time')['X'][-1]
text.append('-----------------------------------------------------------------------------------------------------------------------')
text.append('The simulation duration should be at least: %.3f ' % t_end + unit_system_to_time[settings["units"]] + 's')
text.append('The actual simulation duration is: %.3f ' % t_end_sim + unit_system_to_time[settings["units"]] + 's')
display(text)
assert t_end_sim > (t_end - t_threshold), "The simulation duration is smaller than the target duration. Check your results for possible errors. Simulation results may be utilised for assessment purposes even if the target time is not achieved, provided that the rebound phase has been reached. To continue with the assessment, run all cells below."
---- pre analysis to determine simulation duration ---- [READ DYNASAUR DEF] read data/metadata/01_units_ms_mm_kg.def [READ DYNASAUR DEF] read data/metadata/04_testbed.def [READ DYNASAUR DEF] done [READ DYNASAUR DEF] read data/metadata/00_Shaw_testbed_ID.def [READ DYNASAUR DEF] read data/metadata/00_vivaplus_IDs.def [READ DYNASAUR DEF] done [READ BINOUT] read nodout data ... [READ BINOUT] done reading nodout! [READ BINOUT] read secforc data ... [READ BINOUT] done reading secforc! [CALCULATION] Calculating Visualization: TESTBED_Testbed_X_coordinate_over_time [DATA] read id 13000161 from channel name: x_coordinate
['-----------------------------------------------------------------------------------------------------------------------', 'The simulation duration should be at least: 640.000 milliseconds', 'The actual simulation duration is: 649.900 milliseconds']
print('---- starting complete assessment ----')
sim = DataVisualizationController(calculation_procedure_def_file=dynasaur_def,
object_def_file=dynasaur_def_id,
user_function_object=UserFunction,
data_source= binout_path_sim +'/binout*')
for command in sim.get_defined_calculation_procedures():
sim.calculate(command)
sim.write_CSV(result_output_dir, filename=setup_dict[setup_type].replace(" ", "_")+"_Dynasaur_diagram_output_" + settings["HBM"] + ".csv")
with open(os.path.join(result_output_dir, setup_dict[setup_type].replace(" ", "_")+"_settings_" + settings["HBM"] + ".txt"), 'w') as fp:
json.dump(settings, fp, indent=4)
---- starting complete assessment ---- [READ DYNASAUR DEF] read data/metadata/01_units_ms_mm_kg.def [READ DYNASAUR DEF] read data/metadata/02_quality_criteria.def [READ DYNASAUR DEF] read data/metadata/04_testbed.def [READ DYNASAUR DEF] read data/metadata/05_HBM_deflection.def [READ DYNASAUR DEF] read data/metadata/06_HBM_ribs_criteria.def [READ DYNASAUR DEF] read data/metadata/06a_HBM_ribs_visualisation.def [READ DYNASAUR DEF] read data/metadata/07a_HBM_ribs_NFR_risk_Larsson_2021.def [READ DYNASAUR DEF] read data/metadata/07c_HBM_THUMS_50M_ribs_NFR_risk_Forman2022_3plus.def [READ DYNASAUR DEF] done [READ DYNASAUR DEF] read data/metadata/00_Shaw_testbed_ID.def [READ DYNASAUR DEF] read data/metadata/00_vivaplus_IDs.def [READ DYNASAUR DEF] done [READ BINOUT] read glstat data ... [READ BINOUT] done reading glstat! [READ BINOUT] read matsum data ... [WARNING] binout keys: x_rbvelocity legend revision date z_rbvelocity time internal_energy kinetic_energy mass total_kinetic_energy x_momentum y_momentum max_shell_mass brick_id eroded_internal_energy ids title build_id legend_ids hourglass_energy eroded_kinetic_energy version shell_id y_rbvelocity z_momentum max_brick_mass [WARNING] Your definition file tries to access the following undefined keys : x_acceleration y_acceleration z_acceleration [READ BINOUT] done reading matsum! [READ BINOUT] read nodout data ... [READ BINOUT] done reading nodout! [READ BINOUT] read secforc data ... [READ BINOUT] done reading secforc! [READ BINOUT] read elout data ... [READ BINOUT] elout: initialize stress solid [READ BINOUT] assign stresses for solid elements [READ BINOUT] extract data took : 7.28777813911438 [READ BINOUT] calc eigenvalue [READ BINOUT] calc eigenvalues took : 5.021826982498169 [READ BINOUT] assign strains for solid elements [READ BINOUT] elout: initialize strain solid [READ BINOUT] extract data took : 7.285658597946167 [READ BINOUT] calc eigenvalue [READ BINOUT] calc eigenvalues took : 5.051944971084595 [READ BINOUT] elout: initialize stress shell [READ BINOUT] assign stresses for shell elements [READ BINOUT] extract data took : 31.737220287322998 [READ BINOUT] calc eigenvalue [READ BINOUT] calc eigenvalues took : 26.767727851867676 [READ BINOUT] assign strains for shell elements [READ BINOUT] elout: initialize strain shell [READ BINOUT] extract data took : 39.64987778663635 [READ BINOUT] calc eigenvalue [READ BINOUT] calc eigenvalues took : 37.085665464401245 [READ BINOUT] elout: initialize stress beam [READ BINOUT] assign stresses for beam elements [READ BINOUT] nothing to extract [READ BINOUT] assign strains for beam elements [READ BINOUT] nothing to extract [READ BINOUT] done reading elout! [CALCULATION] Calculating Visualization: MODEL_Total_Energy_time [DATA] ENERGY_GLOBAL read from channel name: total_energy [CALCULATION] Calculating Visualization: MODEL_Internal_Energy_time [DATA] ENERGY_GLOBAL read from channel name: internal_energy [CALCULATION] Calculating Visualization: MODEL_Kinetic_Energy_time [DATA] ENERGY_GLOBAL read from channel name: kinetic_energy [CALCULATION] Calculating Visualization: MODEL_Hourglass_Energy_time [DATA] ENERGY_GLOBAL read from channel name: hourglass_energy [CALCULATION] Calculating Visualization: MODEL_Added_mass_time [DATA] ENERGY_GLOBAL read from channel name: added_mass [CALCULATION] Calculating Visualization: MODEL_Added_mass_percent_increase_time [DATA] ENERGY_GLOBAL read from channel name: percent_increase [DATA] ENERGY_GLOBAL read from channel name: percent_increase [CALCULATION] Calculating Visualization: MODEL_Sliding_Energy_time [DATA] ENERGY_GLOBAL read from channel name: sliding_interface_energy [CALCULATION] Calculating Visualization: HBM_HBM_added_mass_time [DATA] read id 101101 from channel name: mass [DATA] read id 101102 from channel name: mass [DATA] read id 101105 from channel name: mass [DATA] read id 101201 from channel name: mass [DATA] read id 101202 from channel name: mass [DATA] read id 101205 from channel name: mass [DATA] read id 101302 from channel name: mass [DATA] read id 101402 from channel name: mass [DATA] read id 101501 from channel name: mass [DATA] read id 101502 from channel name: mass [DATA] read id 101503 from channel name: mass [DATA] read id 101505 from channel name: mass [DATA] read id 101601 from channel name: mass [DATA] read id 101602 from channel name: mass [DATA] read id 101603 from channel name: mass [DATA] read id 101605 from channel name: mass [DATA] read id 101701 from channel name: mass [DATA] read id 101702 from channel name: mass [DATA] read id 101703 from channel name: mass [DATA] read id 101801 from channel name: mass [DATA] read id 101802 from channel name: mass [DATA] read id 101901 from channel name: mass [DATA] read id 101902 from channel name: mass [DATA] read id 101903 from channel name: mass [DATA] read id 101991 from channel name: mass [DATA] read id 101992 from channel name: mass [DATA] read id 103000 from channel name: mass [DATA] read id 103001 from channel name: mass [DATA] read id 103003 from channel name: mass [DATA] read id 104000 from channel name: mass [DATA] read id 104002 from channel name: mass [DATA] read id 105000 from channel name: mass [DATA] read id 105003 from channel name: mass [DATA] read id 105059 from channel name: mass [DATA] read id 105069 from channel name: mass [DATA] read id 106000 from channel name: mass [DATA] read id 106003 from channel name: mass [DATA] read id 107000 from channel name: mass [DATA] read id 151101 from channel name: mass [DATA] read id 151102 from channel name: mass [DATA] read id 151105 from channel name: mass [DATA] read id 151201 from channel name: mass [DATA] read id 151202 from channel name: mass [DATA] read id 151205 from channel name: mass [DATA] read id 151302 from channel name: mass [DATA] read id 151402 from channel name: mass [DATA] read id 151501 from channel name: mass [DATA] read id 151502 from channel name: mass [DATA] read id 151503 from channel name: mass [DATA] read id 151505 from channel name: mass [DATA] read id 151601 from channel name: mass [DATA] read id 151602 from channel name: mass [DATA] read id 151605 from channel name: mass [DATA] read id 151701 from channel name: mass [DATA] read id 151702 from channel name: mass [DATA] read id 151801 from channel name: mass [DATA] read id 151802 from channel name: mass [DATA] read id 151901 from channel name: mass [DATA] read id 151902 from channel name: mass [DATA] read id 151903 from channel name: mass [DATA] read id 151991 from channel name: mass [DATA] read id 151992 from channel name: mass [DATA] read id 153000 from channel name: mass [DATA] read id 153003 from channel name: mass [DATA] read id 154000 from channel name: mass [DATA] read id 154002 from channel name: mass [DATA] read id 155000 from channel name: mass [DATA] read id 155003 from channel name: mass [DATA] read id 155059 from channel name: mass [DATA] read id 155069 from channel name: mass [DATA] read id 156000 from channel name: mass [DATA] read id 156003 from channel name: mass [DATA] read id 157000 from channel name: mass [DATA] read id 200101 from channel name: mass [DATA] read id 200510 from channel name: mass [DATA] read id 200520 from channel name: mass [DATA] read id 200530 from channel name: mass [DATA] read id 200540 from channel name: mass [DATA] read id 200550 from channel name: mass [DATA] read id 200560 from channel name: mass [DATA] read id 200570 from channel name: mass [DATA] read id 200580 from channel name: mass [DATA] read id 200610 from channel name: mass [DATA] read id 200710 from channel name: mass [DATA] read id 200720 from channel name: mass [DATA] read id 200730 from channel name: mass [DATA] read id 200740 from channel name: mass [DATA] read id 200750 from channel name: mass [DATA] read id 200760 from channel name: mass [DATA] read id 201011 from channel name: mass [DATA] read id 201012 from channel name: mass [DATA] read id 201021 from channel name: mass [DATA] read id 201022 from channel name: mass [DATA] read id 201025 from channel name: mass [DATA] read id 201026 from channel name: mass [DATA] read id 201031 from channel name: mass [DATA] read id 201032 from channel name: mass [DATA] read id 201033 from channel name: mass [DATA] read id 201034 from channel name: mass [DATA] read id 201035 from channel name: mass [DATA] read id 201036 from channel name: mass [DATA] read id 201041 from channel name: mass [DATA] read id 201042 from channel name: mass [DATA] read id 201043 from channel name: mass [DATA] read id 201044 from channel name: mass [DATA] read id 201045 from channel name: mass [DATA] read id 201046 from channel name: mass [DATA] read id 201051 from channel name: mass [DATA] read id 201052 from channel name: mass [DATA] read id 201053 from channel name: mass [DATA] read id 201054 from channel name: mass [DATA] read id 201055 from channel name: mass [DATA] read id 201056 from channel name: mass [DATA] read id 201061 from channel name: mass [DATA] read id 201062 from channel name: mass [DATA] read id 201063 from channel name: mass [DATA] read id 201064 from channel name: mass [DATA] read id 201065 from channel name: mass [DATA] read id 201066 from channel name: mass [DATA] read id 201071 from channel name: mass [DATA] read id 201072 from channel name: mass [DATA] read id 201073 from channel name: mass [DATA] read id 201074 from channel name: mass [DATA] read id 201075 from channel name: mass [DATA] read id 201076 from channel name: mass [DATA] read id 201104 from channel name: mass [DATA] read id 201111 from channel name: mass [DATA] read id 201112 from channel name: mass [DATA] read id 201113 from channel name: mass [DATA] read id 201114 from channel name: mass [DATA] read id 201121 from channel name: mass [DATA] read id 201122 from channel name: mass [DATA] read id 201123 from channel name: mass [DATA] read id 201124 from channel name: mass [DATA] read id 201131 from channel name: mass [DATA] read id 201132 from channel name: mass [DATA] read id 201133 from channel name: mass [DATA] read id 201134 from channel name: mass [DATA] read id 201141 from channel name: mass [DATA] read id 201142 from channel name: mass [DATA] read id 201143 from channel name: mass [DATA] read id 201144 from channel name: mass [DATA] read id 201151 from channel name: mass [DATA] read id 201152 from channel name: mass [DATA] read id 201153 from channel name: mass [DATA] read id 201154 from channel name: mass [DATA] read id 201161 from channel name: mass [DATA] read id 201162 from channel name: mass [DATA] read id 201163 from channel name: mass [DATA] read id 201164 from channel name: mass [DATA] read id 201171 from channel name: mass [DATA] read id 201172 from channel name: mass [DATA] read id 201173 from channel name: mass [DATA] read id 201174 from channel name: mass [DATA] read id 201521 from channel name: mass [DATA] read id 201522 from channel name: mass [DATA] read id 201523 from channel name: mass [DATA] read id 201524 from channel name: mass [DATA] read id 201525 from channel name: mass [DATA] read id 201531 from channel name: mass [DATA] read id 201532 from channel name: mass [DATA] read id 201533 from channel name: mass [DATA] read id 201534 from channel name: mass [DATA] read id 201535 from channel name: mass [DATA] read id 201541 from channel name: mass [DATA] read id 201542 from channel name: mass [DATA] read id 201543 from channel name: mass [DATA] read id 201544 from channel name: mass [DATA] read id 201545 from channel name: mass [DATA] read id 201551 from channel name: mass [DATA] read id 201552 from channel name: mass [DATA] read id 201553 from channel name: mass [DATA] read id 201554 from channel name: mass [DATA] read id 201555 from channel name: mass [DATA] read id 201561 from channel name: mass [DATA] read id 201562 from channel name: mass [DATA] read id 201563 from channel name: mass [DATA] read id 201564 from channel name: mass [DATA] read id 201565 from channel name: mass [DATA] read id 201571 from channel name: mass [DATA] read id 201572 from channel name: mass [DATA] read id 201573 from channel name: mass [DATA] read id 201574 from channel name: mass [DATA] read id 201575 from channel name: mass [DATA] read id 202021 from channel name: mass [DATA] read id 202022 from channel name: mass [DATA] read id 202031 from channel name: mass [DATA] read id 202032 from channel name: mass [DATA] read id 202041 from channel name: mass [DATA] read id 202042 from channel name: mass [DATA] read id 202051 from channel name: mass [DATA] read id 202052 from channel name: mass [DATA] read id 202061 from channel name: mass [DATA] read id 202062 from channel name: mass [DATA] read id 202071 from channel name: mass [DATA] read id 202072 from channel name: mass [DATA] read id 202121 from channel name: mass [DATA] read id 202122 from channel name: mass [DATA] read id 202123 from channel name: mass [DATA] read id 202124 from channel name: mass [DATA] read id 202125 from channel name: mass [DATA] read id 202126 from channel name: mass [DATA] read id 202131 from channel name: mass [DATA] read id 202132 from channel name: mass [DATA] read id 202133 from channel name: mass [DATA] read id 202134 from channel name: mass [DATA] read id 202135 from channel name: mass [DATA] read id 202136 from channel name: mass [DATA] read id 202141 from channel name: mass [DATA] read id 202142 from channel name: mass [DATA] read id 202143 from channel name: mass [DATA] read id 202144 from channel name: mass [DATA] read id 202145 from channel name: mass [DATA] read id 202146 from channel name: mass [DATA] read id 202151 from channel name: mass [DATA] read id 202152 from channel name: mass [DATA] read id 202153 from channel name: mass [DATA] read id 202154 from channel name: mass [DATA] read id 202155 from channel name: mass [DATA] read id 202156 from channel name: mass [DATA] read id 202161 from channel name: mass [DATA] read id 202162 from channel name: mass [DATA] read id 202163 from channel name: mass [DATA] read id 202164 from channel name: mass [DATA] read id 202165 from channel name: mass [DATA] read id 202166 from channel name: mass [DATA] read id 202171 from channel name: mass [DATA] read id 202172 from channel name: mass [DATA] read id 202173 from channel name: mass [DATA] read id 202174 from channel name: mass [DATA] read id 202175 from channel name: mass [DATA] read id 202176 from channel name: mass [DATA] read id 203001 from channel name: mass [DATA] read id 203002 from channel name: mass [DATA] read id 203003 from channel name: mass [DATA] read id 203004 from channel name: mass [DATA] read id 203010 from channel name: mass [DATA] read id 205110 from channel name: mass [DATA] read id 205140 from channel name: mass [DATA] read id 205150 from channel name: mass [DATA] read id 205170 from channel name: mass [DATA] read id 205180 from channel name: mass [DATA] read id 205210 from channel name: mass [DATA] read id 205220 from channel name: mass [DATA] read id 205230 from channel name: mass [DATA] read id 205240 from channel name: mass [DATA] read id 205260 from channel name: mass [DATA] read id 205270 from channel name: mass [DATA] read id 205310 from channel name: mass [DATA] read id 205320 from channel name: mass [DATA] read id 205330 from channel name: mass [DATA] read id 205340 from channel name: mass [DATA] read id 205410 from channel name: mass [DATA] read id 205420 from channel name: mass [DATA] read id 205430 from channel name: mass [DATA] read id 205440 from channel name: mass [DATA] read id 205450 from channel name: mass [DATA] read id 205460 from channel name: mass [DATA] read id 205470 from channel name: mass [DATA] read id 205510 from channel name: mass [DATA] read id 205520 from channel name: mass [DATA] read id 205530 from channel name: mass [DATA] read id 205540 from channel name: mass [DATA] read id 205550 from channel name: mass [DATA] read id 205560 from channel name: mass [DATA] read id 205610 from channel name: mass [DATA] read id 205620 from channel name: mass [DATA] read id 205630 from channel name: mass [DATA] read id 205640 from channel name: mass [DATA] read id 205650 from channel name: mass [DATA] read id 205660 from channel name: mass [DATA] read id 205710 from channel name: mass [DATA] read id 205720 from channel name: mass [DATA] read id 205730 from channel name: mass [DATA] read id 205740 from channel name: mass [DATA] read id 205750 from channel name: mass [DATA] read id 205760 from channel name: mass [DATA] read id 205810 from channel name: mass [DATA] read id 205820 from channel name: mass [DATA] read id 205830 from channel name: mass [DATA] read id 205840 from channel name: mass [DATA] read id 205910 from channel name: mass [DATA] read id 205920 from channel name: mass [DATA] read id 205930 from channel name: mass [DATA] read id 205940 from channel name: mass [DATA] read id 205950 from channel name: mass [DATA] read id 205960 from channel name: mass [DATA] read id 205970 from channel name: mass [DATA] read id 206010 from channel name: mass [DATA] read id 206020 from channel name: mass [DATA] read id 206030 from channel name: mass [DATA] read id 206040 from channel name: mass [DATA] read id 206050 from channel name: mass [DATA] read id 206060 from channel name: mass [DATA] read id 206070 from channel name: mass [DATA] read id 206080 from channel name: mass [DATA] read id 206090 from channel name: mass [DATA] read id 206110 from channel name: mass [DATA] read id 206120 from channel name: mass [DATA] read id 206130 from channel name: mass [DATA] read id 206140 from channel name: mass [DATA] read id 206150 from channel name: mass [DATA] read id 206160 from channel name: mass [DATA] read id 206210 from channel name: mass [DATA] read id 206220 from channel name: mass [DATA] read id 206230 from channel name: mass [DATA] read id 206240 from channel name: mass [DATA] read id 206250 from channel name: mass [DATA] read id 206260 from channel name: mass [DATA] read id 206270 from channel name: mass [DATA] read id 206310 from channel name: mass [DATA] read id 206320 from channel name: mass [DATA] read id 206330 from channel name: mass [DATA] read id 206360 from channel name: mass [DATA] read id 206370 from channel name: mass [DATA] read id 206410 from channel name: mass [DATA] read id 206420 from channel name: mass [DATA] read id 206430 from channel name: mass [DATA] read id 206440 from channel name: mass [DATA] read id 206450 from channel name: mass [DATA] read id 206460 from channel name: mass [DATA] read id 206470 from channel name: mass [DATA] read id 206480 from channel name: mass [DATA] read id 206510 from channel name: mass [DATA] read id 206520 from channel name: mass [DATA] read id 206530 from channel name: mass [DATA] read id 206540 from channel name: mass [DATA] read id 206560 from channel name: mass [DATA] read id 206570 from channel name: mass [DATA] read id 206600 from channel name: mass [DATA] read id 206610 from channel name: mass [DATA] read id 206620 from channel name: mass [DATA] read id 206630 from channel name: mass [DATA] read id 206640 from channel name: mass [DATA] read id 206650 from channel name: mass [DATA] read id 206660 from channel name: mass [DATA] read id 206670 from channel name: mass [DATA] read id 206680 from channel name: mass [DATA] read id 206690 from channel name: mass [DATA] read id 206700 from channel name: mass [DATA] read id 206710 from channel name: mass [DATA] read id 206720 from channel name: mass [DATA] read id 206730 from channel name: mass [DATA] read id 206740 from channel name: mass [DATA] read id 206760 from channel name: mass [DATA] read id 206770 from channel name: mass [DATA] read id 206780 from channel name: mass [DATA] read id 206790 from channel name: mass [DATA] read id 206800 from channel name: mass [DATA] read id 206810 from channel name: mass [DATA] read id 206820 from channel name: mass [DATA] read id 206830 from channel name: mass [DATA] read id 206840 from channel name: mass [DATA] read id 206850 from channel name: mass [DATA] read id 206860 from channel name: mass [DATA] read id 206870 from channel name: mass [DATA] read id 206880 from channel name: mass [DATA] read id 206890 from channel name: mass [DATA] read id 206910 from channel name: mass [DATA] read id 206920 from channel name: mass [DATA] read id 206930 from channel name: mass [DATA] read id 206960 from channel name: mass [DATA] read id 206970 from channel name: mass [DATA] read id 214002 from channel name: mass [DATA] read id 250560 from channel name: mass [DATA] read id 250730 from channel name: mass [DATA] read id 253001 from channel name: mass [DATA] read id 253003 from channel name: mass [DATA] read id 253010 from channel name: mass [DATA] read id 255110 from channel name: mass [DATA] read id 255140 from channel name: mass [DATA] read id 255150 from channel name: mass [DATA] read id 255170 from channel name: mass [DATA] read id 255180 from channel name: mass [DATA] read id 255210 from channel name: mass [DATA] read id 255220 from channel name: mass [DATA] read id 255230 from channel name: mass [DATA] read id 255240 from channel name: mass [DATA] read id 255260 from channel name: mass [DATA] read id 255270 from channel name: mass [DATA] read id 255310 from channel name: mass [DATA] read id 255320 from channel name: mass [DATA] read id 255330 from channel name: mass [DATA] read id 255340 from channel name: mass [DATA] read id 255410 from channel name: mass [DATA] read id 255420 from channel name: mass [DATA] read id 255430 from channel name: mass [DATA] read id 255440 from channel name: mass [DATA] read id 255450 from channel name: mass [DATA] read id 255460 from channel name: mass [DATA] read id 255470 from channel name: mass [DATA] read id 255510 from channel name: mass [DATA] read id 255520 from channel name: mass [DATA] read id 255530 from channel name: mass [DATA] read id 255540 from channel name: mass [DATA] read id 255550 from channel name: mass [DATA] read id 255560 from channel name: mass [DATA] read id 255610 from channel name: mass [DATA] read id 255620 from channel name: mass [DATA] read id 255630 from channel name: mass [DATA] read id 255640 from channel name: mass [DATA] read id 255650 from channel name: mass [DATA] read id 255660 from channel name: mass [DATA] read id 255710 from channel name: mass [DATA] read id 255720 from channel name: mass [DATA] read id 255730 from channel name: mass [DATA] read id 255740 from channel name: mass [DATA] read id 255750 from channel name: mass [DATA] read id 255760 from channel name: mass [DATA] read id 255810 from channel name: mass [DATA] read id 255820 from channel name: mass [DATA] read id 255830 from channel name: mass [DATA] read id 255840 from channel name: mass [DATA] read id 255910 from channel name: mass [DATA] read id 255920 from channel name: mass [DATA] read id 255930 from channel name: mass [DATA] read id 255940 from channel name: mass [DATA] read id 255950 from channel name: mass [DATA] read id 255960 from channel name: mass [DATA] read id 255970 from channel name: mass [DATA] read id 256010 from channel name: mass [DATA] read id 256020 from channel name: mass [DATA] read id 256030 from channel name: mass [DATA] read id 256040 from channel name: mass [DATA] read id 256050 from channel name: mass [DATA] read id 256060 from channel name: mass [DATA] read id 256070 from channel name: mass [DATA] read id 256080 from channel name: mass [DATA] read id 256090 from channel name: mass [DATA] read id 256110 from channel name: mass [DATA] read id 256120 from channel name: mass [DATA] read id 256130 from channel name: mass [DATA] read id 256140 from channel name: mass [DATA] read id 256150 from channel name: mass [DATA] read id 256160 from channel name: mass [DATA] read id 256210 from channel name: mass [DATA] read id 256220 from channel name: mass [DATA] read id 256230 from channel name: mass [DATA] read id 256240 from channel name: mass [DATA] read id 256250 from channel name: mass [DATA] read id 256260 from channel name: mass [DATA] read id 256270 from channel name: mass [DATA] read id 256310 from channel name: mass [DATA] read id 256320 from channel name: mass [DATA] read id 256330 from channel name: mass [DATA] read id 256360 from channel name: mass [DATA] read id 256370 from channel name: mass [DATA] read id 256410 from channel name: mass [DATA] read id 256420 from channel name: mass [DATA] read id 256430 from channel name: mass [DATA] read id 256440 from channel name: mass [DATA] read id 256450 from channel name: mass [DATA] read id 256460 from channel name: mass [DATA] read id 256470 from channel name: mass [DATA] read id 256480 from channel name: mass [DATA] read id 256510 from channel name: mass [DATA] read id 256520 from channel name: mass [DATA] read id 256530 from channel name: mass [DATA] read id 256540 from channel name: mass [DATA] read id 256560 from channel name: mass [DATA] read id 256570 from channel name: mass [DATA] read id 256600 from channel name: mass [DATA] read id 256610 from channel name: mass [DATA] read id 256620 from channel name: mass [DATA] read id 256630 from channel name: mass [DATA] read id 256640 from channel name: mass [DATA] read id 256650 from channel name: mass [DATA] read id 256660 from channel name: mass [DATA] read id 256670 from channel name: mass [DATA] read id 256680 from channel name: mass [DATA] read id 256690 from channel name: mass [DATA] read id 256700 from channel name: mass [DATA] read id 256710 from channel name: mass [DATA] read id 256720 from channel name: mass [DATA] read id 256730 from channel name: mass [DATA] read id 256740 from channel name: mass [DATA] read id 256760 from channel name: mass [DATA] read id 256770 from channel name: mass [DATA] read id 256780 from channel name: mass [DATA] read id 256790 from channel name: mass [DATA] read id 256800 from channel name: mass [DATA] read id 256810 from channel name: mass [DATA] read id 256820 from channel name: mass [DATA] read id 256830 from channel name: mass [DATA] read id 256840 from channel name: mass [DATA] read id 256850 from channel name: mass [DATA] read id 256860 from channel name: mass [DATA] read id 256870 from channel name: mass [DATA] read id 256880 from channel name: mass [DATA] read id 256890 from channel name: mass [DATA] read id 256910 from channel name: mass [DATA] read id 256920 from channel name: mass [DATA] read id 256930 from channel name: mass [DATA] read id 256960 from channel name: mass [DATA] read id 256970 from channel name: mass [DATA] read id 301101 from channel name: mass [DATA] read id 301102 from channel name: mass [DATA] read id 301113 from channel name: mass [DATA] read id 301123 from channel name: mass [DATA] read id 301201 from channel name: mass [DATA] read id 301202 from channel name: mass [DATA] read id 301213 from channel name: mass [DATA] read id 301223 from channel name: mass [DATA] read id 301309 from channel name: mass [DATA] read id 301311 from channel name: mass [DATA] read id 301312 from channel name: mass [DATA] read id 301313 from channel name: mass [DATA] read id 301321 from channel name: mass [DATA] read id 301331 from channel name: mass [DATA] read id 301332 from channel name: mass [DATA] read id 301333 from channel name: mass [DATA] read id 301409 from channel name: mass [DATA] read id 301411 from channel name: mass [DATA] read id 301412 from channel name: mass [DATA] read id 301413 from channel name: mass [DATA] read id 301421 from channel name: mass [DATA] read id 301431 from channel name: mass [DATA] read id 301432 from channel name: mass [DATA] read id 301433 from channel name: mass [DATA] read id 301509 from channel name: mass [DATA] read id 301511 from channel name: mass [DATA] read id 301512 from channel name: mass [DATA] read id 301513 from channel name: mass [DATA] read id 301521 from channel name: mass [DATA] read id 301531 from channel name: mass [DATA] read id 301532 from channel name: mass [DATA] read id 301533 from channel name: mass [DATA] read id 301603 from channel name: mass [DATA] read id 303001 from channel name: mass [DATA] read id 305112 from channel name: mass [DATA] read id 305119 from channel name: mass [DATA] read id 305121 from channel name: mass [DATA] read id 305122 from channel name: mass [DATA] read id 305131 from channel name: mass [DATA] read id 305141 from channel name: mass [DATA] read id 305142 from channel name: mass [DATA] read id 305161 from channel name: mass [DATA] read id 305162 from channel name: mass [DATA] read id 305172 from channel name: mass [DATA] read id 305201 from channel name: mass [DATA] read id 305202 from channel name: mass [DATA] read id 306001 from channel name: mass [DATA] read id 306002 from channel name: mass [DATA] read id 351101 from channel name: mass [DATA] read id 351102 from channel name: mass [DATA] read id 351113 from channel name: mass [DATA] read id 351123 from channel name: mass [DATA] read id 351201 from channel name: mass [DATA] read id 351202 from channel name: mass [DATA] read id 351213 from channel name: mass [DATA] read id 351223 from channel name: mass [DATA] read id 351309 from channel name: mass [DATA] read id 351311 from channel name: mass [DATA] read id 351312 from channel name: mass [DATA] read id 351313 from channel name: mass [DATA] read id 351321 from channel name: mass [DATA] read id 351331 from channel name: mass [DATA] read id 351332 from channel name: mass [DATA] read id 351333 from channel name: mass [DATA] read id 351409 from channel name: mass [DATA] read id 351411 from channel name: mass [DATA] read id 351412 from channel name: mass [DATA] read id 351413 from channel name: mass [DATA] read id 351421 from channel name: mass [DATA] read id 351431 from channel name: mass [DATA] read id 351432 from channel name: mass [DATA] read id 351433 from channel name: mass [DATA] read id 351509 from channel name: mass [DATA] read id 351511 from channel name: mass [DATA] read id 351512 from channel name: mass [DATA] read id 351513 from channel name: mass [DATA] read id 351521 from channel name: mass [DATA] read id 351531 from channel name: mass [DATA] read id 351532 from channel name: mass [DATA] read id 351533 from channel name: mass [DATA] read id 351603 from channel name: mass [DATA] read id 353001 from channel name: mass [DATA] read id 355112 from channel name: mass [DATA] read id 355119 from channel name: mass [DATA] read id 355121 from channel name: mass [DATA] read id 355122 from channel name: mass [DATA] read id 355131 from channel name: mass [DATA] read id 355141 from channel name: mass [DATA] read id 355142 from channel name: mass [DATA] read id 355161 from channel name: mass [DATA] read id 355162 from channel name: mass [DATA] read id 355172 from channel name: mass [DATA] read id 355201 from channel name: mass [DATA] read id 355202 from channel name: mass [DATA] read id 356001 from channel name: mass [DATA] read id 356002 from channel name: mass [DATA] read id 401011 from channel name: mass [DATA] read id 401012 from channel name: mass [DATA] read id 401013 from channel name: mass [DATA] read id 401014 from channel name: mass [DATA] read id 401021 from channel name: mass [DATA] read id 401022 from channel name: mass [DATA] read id 401031 from channel name: mass [DATA] read id 401032 from channel name: mass [DATA] read id 401041 from channel name: mass [DATA] read id 401042 from channel name: mass [DATA] read id 401051 from channel name: mass [DATA] read id 401052 from channel name: mass [DATA] read id 401061 from channel name: mass [DATA] read id 401062 from channel name: mass [DATA] read id 401071 from channel name: mass [DATA] read id 401072 from channel name: mass [DATA] read id 401081 from channel name: mass [DATA] read id 401082 from channel name: mass [DATA] read id 401091 from channel name: mass [DATA] read id 401092 from channel name: mass [DATA] read id 401101 from channel name: mass [DATA] read id 401102 from channel name: mass [DATA] read id 401111 from channel name: mass [DATA] read id 401112 from channel name: mass [DATA] read id 401121 from channel name: mass [DATA] read id 401122 from channel name: mass [DATA] read id 401211 from channel name: mass [DATA] read id 401212 from channel name: mass [DATA] read id 401511 from channel name: mass [DATA] read id 401512 from channel name: mass [DATA] read id 401513 from channel name: mass [DATA] read id 401514 from channel name: mass [DATA] read id 401515 from channel name: mass [DATA] read id 401516 from channel name: mass [DATA] read id 401517 from channel name: mass [DATA] read id 402010 from channel name: mass [DATA] read id 402020 from channel name: mass [DATA] read id 402030 from channel name: mass [DATA] read id 402040 from channel name: mass [DATA] read id 402050 from channel name: mass [DATA] read id 402060 from channel name: mass [DATA] read id 402070 from channel name: mass [DATA] read id 402080 from channel name: mass [DATA] read id 402090 from channel name: mass [DATA] read id 402100 from channel name: mass [DATA] read id 402110 from channel name: mass [DATA] read id 402121 from channel name: mass [DATA] read id 402122 from channel name: mass [DATA] read id 402123 from channel name: mass [DATA] read id 402124 from channel name: mass [DATA] read id 402125 from channel name: mass [DATA] read id 402126 from channel name: mass [DATA] read id 402127 from channel name: mass [DATA] read id 402128 from channel name: mass [DATA] read id 403013 from channel name: mass [DATA] read id 403014 from channel name: mass [DATA] read id 403015 from channel name: mass [DATA] read id 403023 from channel name: mass [DATA] read id 403024 from channel name: mass [DATA] read id 403025 from channel name: mass [DATA] read id 403033 from channel name: mass [DATA] read id 403034 from channel name: mass [DATA] read id 403035 from channel name: mass [DATA] read id 403043 from channel name: mass [DATA] read id 403044 from channel name: mass [DATA] read id 403045 from channel name: mass [DATA] read id 403053 from channel name: mass [DATA] read id 403054 from channel name: mass [DATA] read id 403055 from channel name: mass [DATA] read id 403063 from channel name: mass [DATA] read id 403064 from channel name: mass [DATA] read id 403065 from channel name: mass [DATA] read id 403073 from channel name: mass [DATA] read id 403074 from channel name: mass [DATA] read id 403075 from channel name: mass [DATA] read id 403083 from channel name: mass [DATA] read id 403084 from channel name: mass [DATA] read id 403085 from channel name: mass [DATA] read id 403093 from channel name: mass [DATA] read id 403094 from channel name: mass [DATA] read id 403095 from channel name: mass [DATA] read id 403103 from channel name: mass [DATA] read id 403104 from channel name: mass [DATA] read id 403105 from channel name: mass [DATA] read id 403113 from channel name: mass [DATA] read id 403114 from channel name: mass [DATA] read id 403115 from channel name: mass [DATA] read id 403123 from channel name: mass [DATA] read id 403124 from channel name: mass [DATA] read id 403125 from channel name: mass [DATA] read id 403501 from channel name: mass [DATA] read id 403502 from channel name: mass [DATA] read id 403503 from channel name: mass [DATA] read id 403601 from channel name: mass [DATA] read id 403602 from channel name: mass [DATA] read id 403603 from channel name: mass [DATA] read id 403604 from channel name: mass [DATA] read id 404001 from channel name: mass [DATA] read id 404009 from channel name: mass [DATA] read id 404010 from channel name: mass [DATA] read id 404201 from channel name: mass [DATA] read id 404401 from channel name: mass [DATA] read id 404409 from channel name: mass [DATA] read id 404501 from channel name: mass [DATA] read id 404502 from channel name: mass [DATA] read id 404503 from channel name: mass [DATA] read id 404504 from channel name: mass [DATA] read id 404601 from channel name: mass [DATA] read id 404602 from channel name: mass [DATA] read id 404603 from channel name: mass [DATA] read id 404604 from channel name: mass [DATA] read id 404605 from channel name: mass [DATA] read id 404606 from channel name: mass [DATA] read id 404607 from channel name: mass [DATA] read id 404608 from channel name: mass [DATA] read id 404609 from channel name: mass [DATA] read id 404610 from channel name: mass [DATA] read id 404611 from channel name: mass [DATA] read id 404612 from channel name: mass [DATA] read id 404702 from channel name: mass [DATA] read id 404703 from channel name: mass [DATA] read id 404704 from channel name: mass [DATA] read id 404705 from channel name: mass [DATA] read id 404706 from channel name: mass [DATA] read id 404707 from channel name: mass [DATA] read id 404708 from channel name: mass [DATA] read id 405001 from channel name: mass [DATA] read id 405003 from channel name: mass [DATA] read id 406001 from channel name: mass [DATA] read id 406002 from channel name: mass [DATA] read id 406003 from channel name: mass [DATA] read id 406013 from channel name: mass [DATA] read id 453013 from channel name: mass [DATA] read id 453014 from channel name: mass [DATA] read id 453015 from channel name: mass [DATA] read id 453023 from channel name: mass [DATA] read id 453024 from channel name: mass [DATA] read id 453025 from channel name: mass [DATA] read id 453033 from channel name: mass [DATA] read id 453034 from channel name: mass [DATA] read id 453035 from channel name: mass [DATA] read id 453043 from channel name: mass [DATA] read id 453044 from channel name: mass [DATA] read id 453045 from channel name: mass [DATA] read id 453053 from channel name: mass [DATA] read id 453054 from channel name: mass [DATA] read id 453055 from channel name: mass [DATA] read id 453063 from channel name: mass [DATA] read id 453064 from channel name: mass [DATA] read id 453065 from channel name: mass [DATA] read id 453073 from channel name: mass [DATA] read id 453074 from channel name: mass [DATA] read id 453075 from channel name: mass [DATA] read id 453083 from channel name: mass [DATA] read id 453084 from channel name: mass [DATA] read id 453085 from channel name: mass [DATA] read id 453093 from channel name: mass [DATA] read id 453094 from channel name: mass [DATA] read id 453095 from channel name: mass [DATA] read id 453103 from channel name: mass [DATA] read id 453104 from channel name: mass [DATA] read id 453105 from channel name: mass [DATA] read id 453113 from channel name: mass [DATA] read id 453114 from channel name: mass [DATA] read id 453115 from channel name: mass [DATA] read id 453123 from channel name: mass [DATA] read id 453124 from channel name: mass [DATA] read id 453125 from channel name: mass [DATA] read id 453503 from channel name: mass [DATA] read id 453601 from channel name: mass [DATA] read id 453602 from channel name: mass [DATA] read id 453603 from channel name: mass [DATA] read id 453604 from channel name: mass [DATA] read id 454001 from channel name: mass [DATA] read id 454009 from channel name: mass [DATA] read id 454010 from channel name: mass [DATA] read id 454201 from channel name: mass [DATA] read id 454400 from channel name: mass [DATA] read id 454409 from channel name: mass [DATA] read id 454501 from channel name: mass [DATA] read id 454502 from channel name: mass [DATA] read id 454503 from channel name: mass [DATA] read id 454504 from channel name: mass [DATA] read id 454601 from channel name: mass [DATA] read id 454602 from channel name: mass [DATA] read id 454603 from channel name: mass [DATA] read id 454604 from channel name: mass [DATA] read id 454605 from channel name: mass [DATA] read id 454606 from channel name: mass [DATA] read id 454607 from channel name: mass [DATA] read id 454608 from channel name: mass [DATA] read id 454609 from channel name: mass [DATA] read id 454610 from channel name: mass [DATA] read id 454611 from channel name: mass [DATA] read id 454612 from channel name: mass [DATA] read id 454702 from channel name: mass [DATA] read id 454703 from channel name: mass [DATA] read id 454704 from channel name: mass [DATA] read id 454705 from channel name: mass [DATA] read id 454706 from channel name: mass [DATA] read id 454707 from channel name: mass [DATA] read id 454708 from channel name: mass [DATA] read id 455001 from channel name: mass [DATA] read id 455003 from channel name: mass [DATA] read id 456001 from channel name: mass [DATA] read id 456002 from channel name: mass [DATA] read id 456003 from channel name: mass [DATA] read id 456013 from channel name: mass [DATA] read id 501011 from channel name: mass [DATA] read id 501012 from channel name: mass [DATA] read id 501013 from channel name: mass [DATA] read id 501014 from channel name: mass [DATA] read id 501015 from channel name: mass [DATA] read id 501016 from channel name: mass [DATA] read id 501021 from channel name: mass [DATA] read id 501022 from channel name: mass [DATA] read id 501023 from channel name: mass [DATA] read id 501024 from channel name: mass [DATA] read id 501025 from channel name: mass [DATA] read id 501026 from channel name: mass [DATA] read id 501031 from channel name: mass [DATA] read id 501032 from channel name: mass [DATA] read id 501033 from channel name: mass [DATA] read id 501034 from channel name: mass [DATA] read id 501035 from channel name: mass [DATA] read id 501036 from channel name: mass [DATA] read id 501041 from channel name: mass [DATA] read id 501042 from channel name: mass [DATA] read id 501043 from channel name: mass [DATA] read id 501044 from channel name: mass [DATA] read id 501045 from channel name: mass [DATA] read id 501046 from channel name: mass [DATA] read id 501051 from channel name: mass [DATA] read id 501052 from channel name: mass [DATA] read id 501053 from channel name: mass [DATA] read id 501054 from channel name: mass [DATA] read id 501055 from channel name: mass [DATA] read id 501056 from channel name: mass [DATA] read id 501511 from channel name: mass [DATA] read id 501512 from channel name: mass [DATA] read id 501513 from channel name: mass [DATA] read id 501514 from channel name: mass [DATA] read id 501515 from channel name: mass [DATA] read id 501516 from channel name: mass [DATA] read id 501517 from channel name: mass [DATA] read id 501521 from channel name: mass [DATA] read id 501522 from channel name: mass [DATA] read id 501523 from channel name: mass [DATA] read id 501524 from channel name: mass [DATA] read id 501525 from channel name: mass [DATA] read id 501526 from channel name: mass [DATA] read id 501527 from channel name: mass [DATA] read id 501531 from channel name: mass [DATA] read id 501532 from channel name: mass [DATA] read id 501533 from channel name: mass [DATA] read id 501534 from channel name: mass [DATA] read id 501535 from channel name: mass [DATA] read id 501536 from channel name: mass [DATA] read id 501537 from channel name: mass [DATA] read id 501541 from channel name: mass [DATA] read id 501542 from channel name: mass [DATA] read id 501543 from channel name: mass [DATA] read id 501544 from channel name: mass [DATA] read id 501545 from channel name: mass [DATA] read id 501546 from channel name: mass [DATA] read id 501547 from channel name: mass [DATA] read id 501551 from channel name: mass [DATA] read id 501552 from channel name: mass [DATA] read id 501554 from channel name: mass [DATA] read id 501555 from channel name: mass [DATA] read id 501557 from channel name: mass [DATA] read id 501558 from channel name: mass [DATA] read id 502011 from channel name: mass [DATA] read id 502012 from channel name: mass [DATA] read id 502021 from channel name: mass [DATA] read id 502022 from channel name: mass [DATA] read id 502031 from channel name: mass [DATA] read id 502032 from channel name: mass [DATA] read id 502041 from channel name: mass [DATA] read id 502042 from channel name: mass [DATA] read id 502051 from channel name: mass [DATA] read id 502052 from channel name: mass [DATA] read id 502111 from channel name: mass [DATA] read id 502112 from channel name: mass [DATA] read id 502113 from channel name: mass [DATA] read id 502114 from channel name: mass [DATA] read id 502115 from channel name: mass [DATA] read id 502116 from channel name: mass [DATA] read id 502121 from channel name: mass [DATA] read id 502122 from channel name: mass [DATA] read id 502123 from channel name: mass [DATA] read id 502124 from channel name: mass [DATA] read id 502125 from channel name: mass [DATA] read id 502126 from channel name: mass [DATA] read id 502131 from channel name: mass [DATA] read id 502132 from channel name: mass [DATA] read id 502133 from channel name: mass [DATA] read id 502134 from channel name: mass [DATA] read id 502135 from channel name: mass [DATA] read id 502136 from channel name: mass [DATA] read id 502141 from channel name: mass [DATA] read id 502142 from channel name: mass [DATA] read id 502143 from channel name: mass [DATA] read id 502144 from channel name: mass [DATA] read id 502145 from channel name: mass [DATA] read id 502146 from channel name: mass [DATA] read id 502151 from channel name: mass [DATA] read id 502152 from channel name: mass [DATA] read id 502153 from channel name: mass [DATA] read id 502154 from channel name: mass [DATA] read id 502155 from channel name: mass [DATA] read id 502156 from channel name: mass [DATA] read id 505001 from channel name: mass [DATA] read id 505009 from channel name: mass [DATA] read id 505019 from channel name: mass [DATA] read id 506001 from channel name: mass [DATA] read id 506002 from channel name: mass [DATA] read id 506003 from channel name: mass [DATA] read id 506006 from channel name: mass [DATA] read id 506007 from channel name: mass [DATA] read id 555001 from channel name: mass [DATA] read id 555009 from channel name: mass [DATA] read id 555019 from channel name: mass [DATA] read id 556001 from channel name: mass [DATA] read id 556002 from channel name: mass [DATA] read id 556003 from channel name: mass [DATA] read id 556006 from channel name: mass [DATA] read id 556007 from channel name: mass [DATA] read id 601011 from channel name: mass [DATA] read id 601012 from channel name: mass [DATA] read id 601021 from channel name: mass [DATA] read id 601022 from channel name: mass [DATA] read id 601031 from channel name: mass [DATA] read id 601032 from channel name: mass [DATA] read id 601041 from channel name: mass [DATA] read id 601042 from channel name: mass [DATA] read id 601051 from channel name: mass [DATA] read id 601052 from channel name: mass [DATA] read id 601054 from channel name: mass [DATA] read id 602010 from channel name: mass [DATA] read id 602020 from channel name: mass [DATA] read id 603110 from channel name: mass [DATA] read id 604001 from channel name: mass [DATA] read id 605001 from channel name: mass [DATA] read id 605003 from channel name: mass [DATA] read id 606001 from channel name: mass [DATA] read id 606002 from channel name: mass [DATA] read id 606003 from channel name: mass [DATA] read id 606004 from channel name: mass [DATA] read id 651011 from channel name: mass [DATA] read id 651012 from channel name: mass [DATA] read id 651021 from channel name: mass [DATA] read id 651022 from channel name: mass [DATA] read id 651031 from channel name: mass [DATA] read id 651032 from channel name: mass [DATA] read id 651041 from channel name: mass [DATA] read id 651042 from channel name: mass [DATA] read id 651051 from channel name: mass [DATA] read id 651052 from channel name: mass [DATA] read id 651054 from channel name: mass [DATA] read id 652010 from channel name: mass [DATA] read id 652020 from channel name: mass [DATA] read id 653110 from channel name: mass [DATA] read id 654001 from channel name: mass [DATA] read id 655001 from channel name: mass [DATA] read id 655003 from channel name: mass [DATA] read id 656001 from channel name: mass [DATA] read id 656002 from channel name: mass [DATA] read id 656003 from channel name: mass [DATA] read id 656004 from channel name: mass [DATA] read id 701111 from channel name: mass [DATA] read id 701112 from channel name: mass [DATA] read id 701114 from channel name: mass [DATA] read id 701121 from channel name: mass [DATA] read id 701122 from channel name: mass [DATA] read id 701131 from channel name: mass [DATA] read id 701132 from channel name: mass [DATA] read id 701141 from channel name: mass [DATA] read id 701142 from channel name: mass [DATA] read id 701151 from channel name: mass [DATA] read id 701152 from channel name: mass [DATA] read id 701161 from channel name: mass [DATA] read id 701171 from channel name: mass [DATA] read id 701172 from channel name: mass [DATA] read id 701181 from channel name: mass [DATA] read id 701182 from channel name: mass [DATA] read id 701184 from channel name: mass [DATA] read id 701191 from channel name: mass [DATA] read id 701192 from channel name: mass [DATA] read id 701201 from channel name: mass [DATA] read id 701202 from channel name: mass [DATA] read id 701301 from channel name: mass [DATA] read id 701302 from channel name: mass [DATA] read id 701411 from channel name: mass [DATA] read id 701412 from channel name: mass [DATA] read id 701414 from channel name: mass [DATA] read id 701421 from channel name: mass [DATA] read id 701431 from channel name: mass [DATA] read id 701432 from channel name: mass [DATA] read id 701433 from channel name: mass [DATA] read id 701434 from channel name: mass [DATA] read id 701611 from channel name: mass [DATA] read id 701621 from channel name: mass [DATA] read id 701631 from channel name: mass [DATA] read id 701701 from channel name: mass [DATA] read id 701703 from channel name: mass [DATA] read id 702111 from channel name: mass [DATA] read id 702112 from channel name: mass [DATA] read id 702113 from channel name: mass [DATA] read id 702114 from channel name: mass [DATA] read id 702121 from channel name: mass [DATA] read id 702122 from channel name: mass [DATA] read id 702123 from channel name: mass [DATA] read id 702124 from channel name: mass [DATA] read id 702131 from channel name: mass [DATA] read id 702132 from channel name: mass [DATA] read id 702141 from channel name: mass [DATA] read id 702142 from channel name: mass [DATA] read id 702151 from channel name: mass [DATA] read id 702152 from channel name: mass [DATA] read id 702153 from channel name: mass [DATA] read id 702154 from channel name: mass [DATA] read id 702210 from channel name: mass [DATA] read id 702220 from channel name: mass [DATA] read id 702310 from channel name: mass [DATA] read id 702320 from channel name: mass [DATA] read id 702410 from channel name: mass [DATA] read id 704111 from channel name: mass [DATA] read id 704113 from channel name: mass [DATA] read id 704133 from channel name: mass [DATA] read id 705111 from channel name: mass [DATA] read id 705112 from channel name: mass [DATA] read id 705114 from channel name: mass [DATA] read id 705121 from channel name: mass [DATA] read id 705131 from channel name: mass [DATA] read id 705134 from channel name: mass [DATA] read id 705141 from channel name: mass [DATA] read id 705142 from channel name: mass [DATA] read id 705184 from channel name: mass [DATA] read id 705191 from channel name: mass [DATA] read id 705192 from channel name: mass [DATA] read id 705193 from channel name: mass [DATA] read id 706110 from channel name: mass [DATA] read id 706120 from channel name: mass [DATA] read id 706210 from channel name: mass [DATA] read id 751111 from channel name: mass [DATA] read id 751112 from channel name: mass [DATA] read id 751114 from channel name: mass [DATA] read id 751121 from channel name: mass [DATA] read id 751122 from channel name: mass [DATA] read id 751131 from channel name: mass [DATA] read id 751132 from channel name: mass [DATA] read id 751141 from channel name: mass [DATA] read id 751142 from channel name: mass [DATA] read id 751151 from channel name: mass [DATA] read id 751152 from channel name: mass [DATA] read id 751161 from channel name: mass [DATA] read id 751171 from channel name: mass [DATA] read id 751172 from channel name: mass [DATA] read id 751181 from channel name: mass [DATA] read id 751182 from channel name: mass [DATA] read id 751184 from channel name: mass [DATA] read id 751191 from channel name: mass [DATA] read id 751192 from channel name: mass [DATA] read id 751201 from channel name: mass [DATA] read id 751202 from channel name: mass [DATA] read id 751301 from channel name: mass [DATA] read id 751302 from channel name: mass [DATA] read id 751411 from channel name: mass [DATA] read id 751412 from channel name: mass [DATA] read id 751414 from channel name: mass [DATA] read id 751421 from channel name: mass [DATA] read id 751431 from channel name: mass [DATA] read id 751432 from channel name: mass [DATA] read id 751433 from channel name: mass [DATA] read id 751434 from channel name: mass [DATA] read id 751611 from channel name: mass [DATA] read id 751621 from channel name: mass [DATA] read id 751631 from channel name: mass [DATA] read id 751701 from channel name: mass [DATA] read id 751703 from channel name: mass [DATA] read id 752111 from channel name: mass [DATA] read id 752112 from channel name: mass [DATA] read id 752113 from channel name: mass [DATA] read id 752114 from channel name: mass [DATA] read id 752121 from channel name: mass [DATA] read id 752122 from channel name: mass [DATA] read id 752123 from channel name: mass [DATA] read id 752124 from channel name: mass [DATA] read id 752131 from channel name: mass [DATA] read id 752132 from channel name: mass [DATA] read id 752141 from channel name: mass [DATA] read id 752142 from channel name: mass [DATA] read id 752151 from channel name: mass [DATA] read id 752152 from channel name: mass [DATA] read id 752153 from channel name: mass [DATA] read id 752154 from channel name: mass [DATA] read id 752210 from channel name: mass [DATA] read id 752220 from channel name: mass [DATA] read id 752310 from channel name: mass [DATA] read id 752320 from channel name: mass [DATA] read id 752410 from channel name: mass [DATA] read id 754111 from channel name: mass [DATA] read id 754113 from channel name: mass [DATA] read id 754133 from channel name: mass [DATA] read id 755111 from channel name: mass [DATA] read id 755112 from channel name: mass [DATA] read id 755114 from channel name: mass [DATA] read id 755121 from channel name: mass [DATA] read id 755131 from channel name: mass [DATA] read id 755134 from channel name: mass [DATA] read id 755141 from channel name: mass [DATA] read id 755142 from channel name: mass [DATA] read id 755184 from channel name: mass [DATA] read id 755191 from channel name: mass [DATA] read id 755192 from channel name: mass [DATA] read id 755193 from channel name: mass [DATA] read id 756110 from channel name: mass [DATA] read id 756120 from channel name: mass [DATA] read id 756210 from channel name: mass [CALCULATION] Calculating Visualization: TESTBED_Testbed_X_coordinate_over_time [DATA] read id 13000161 from channel name: x_coordinate [CALCULATION] Calculating Visualization: TESTBED_Testbed_Y_coordinate_over_time [DATA] read id 13000161 from channel name: y_coordinate [CALCULATION] Calculating Visualization: TESTBED_Testbed_Z_coordinate_over_time [DATA] read id 13000161 from channel name: z_coordinate [CALCULATION] Calculating Visualization: TESTBED_Testbed_X_acceleration_over_time_CFC60 [DATA] read id 13000161 from channel name: x_acceleration
c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\dynasaur\calc\cfc.py:66: UnitStrippedWarning: The unit of the quantity is stripped when downcasting to ndarray. sampled_array = np.array(sampled_array)
[CALCULATION] Calculating Visualization: TESTBED_Testbed_Y_acceleration_over_time_CFC60 [DATA] read id 13000161 from channel name: y_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_Z_acceleration_over_time_CFC60 [DATA] read id 13000161 from channel name: z_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_X_acceleration_over_time_CFC1000 [DATA] read id 13000161 from channel name: x_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_Y_acceleration_over_time_CFC1000 [DATA] read id 13000161 from channel name: y_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_Z_acceleration_over_time_CFC1000 [DATA] read id 13000161 from channel name: z_acceleration [CALCULATION] Calculating Visualization: TESTBED_Slipring_shoulder_belt_X_coordinate_over_time [DATA] read id 13084580 from channel name: x_coordinate [CALCULATION] Calculating Visualization: TESTBED_Slipring_shoulder_belt_Y_coordinate_over_time [DATA] read id 13084580 from channel name: y_coordinate [CALCULATION] Calculating Visualization: TESTBED_Slipring_shoulder_belt_Z_coordinate_over_time [DATA] read id 13084580 from channel name: z_coordinate [CALCULATION] Calculating Visualization: TESTBED_End_of_2D_shoulder_belt_X_coordinate_over_time [DATA] read id 22001054 from channel name: x_coordinate [CALCULATION] Calculating Visualization: TESTBED_End_of_2D_shoulder_belt_Y_coordinate_over_time [DATA] read id 22001054 from channel name: y_coordinate [CALCULATION] Calculating Visualization: TESTBED_End_of_2D_shoulder_belt_Z_coordinate_over_time [DATA] read id 22001054 from channel name: z_coordinate [CALCULATION] Calculating Visualization: TESTBED_Shoulder_belt_res_force_over_time_CFC600 [DATA] read id 22000000 from channel name: total_force [CALCULATION] Calculating Visualization: TESTBED_Lap_belt_res_force_over_time_CFC600 [DATA] read id 22000001 from channel name: total_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Seat_CFC60 [DATA] read id 13000251 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Seat [DATA] read id 13000251 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Seat_CFC60 [DATA] read id 13000251 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Seat [DATA] read id 13000251 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Seat_CFC60 [DATA] read id 13000251 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Seat [DATA] read id 13000251 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Kneesupport_left_CFC60 [DATA] read id 13000250 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Kneesupport_left [DATA] read id 13000250 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Kneesupport_right_CFC60 [DATA] read id 13000240 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Kneesupport_right [DATA] read id 13000240 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Kneesupport_left_CFC60 [DATA] read id 13000250 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Kneesupport_left [DATA] read id 13000250 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Kneesupport_right_CFC60 [DATA] read id 13000240 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Kneesupport_right [DATA] read id 13000240 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Kneesupport_left_CFC60 [DATA] read id 13000250 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Kneesupport_left [DATA] read id 13000250 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Kneesupport_right_CFC60 [DATA] read id 13000240 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Kneesupport_right [DATA] read id 13000240 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Footrest_right_CFC60 [DATA] read id 13000280 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Footrest_right [DATA] read id 13000280 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Footrest_left_CFC60 [DATA] read id 13000270 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Footrest_left [DATA] read id 13000270 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Footrest_right_CFC60 [DATA] read id 13000280 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Footrest_right [DATA] read id 13000280 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Footrest_left_CFC60 [DATA] read id 13000270 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Footrest_left [DATA] read id 13000270 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Footrest_right_CFC60 [DATA] read id 13000280 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Footrest_right [DATA] read id 13000280 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Footrest_left_CFC60 [DATA] read id 13000270 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Footrest_left [DATA] read id 13000270 from channel name: y_moment [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_displacement_over_time [DATA] read id 1090000 from channel name: x_displacement [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_displacement_over_time [DATA] read id 1090000 from channel name: y_displacement [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_displacement_over_time [DATA] read id 1090000 from channel name: z_displacement [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_coordinate_over_time [DATA] read id 1090000 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_coordinate_over_time [DATA] read id 1090000 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_coordinate_over_time [DATA] read id 1090000 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_acceleration_over_time_CFC1000 [DATA] read id 1090000 from channel name: x_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_acceleration_over_time_CFC1000 [DATA] read id 1090000 from channel name: y_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_acceleration_over_time_CFC1000 [DATA] read id 1090000 from channel name: z_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_rot_acceleration_over_time_CFC1000 [DATA] read id 1090000 from channel name: rx_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_rot_acceleration_over_time_CFC1000 [DATA] read id 1090000 from channel name: ry_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_rot_acceleration_over_time_CFC1000 [DATA] read id 1090000 from channel name: rz_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_rot_velocity_over_time_CFC1000 [DATA] read id 1090000 from channel name: rx_velocity [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_rot_velocity_over_time_CFC1000 [DATA] read id 1090000 from channel name: ry_velocity [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_rot_velocity_over_time_CFC1000 [DATA] read id 1090000 from channel name: rz_velocity [CALCULATION] Calculating Visualization: HBM_Chest_defl_Sternum_mid_over_time [ERROR] Missing ID in binary input data, identifier: Chest_defl_Sternum_mid [CALCULATION] Calculating Visualization: HBM_Chest_Sternum_mid_X_coordinate_over_time [ERROR] Missing ID in binary input data, identifier: Chest_defl_Sternum_mid [CALCULATION] Calculating Visualization: HBM_T1_X_coordinate_over_time [DATA] read id 4091014 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_T1_Y_coordinate_over_time [DATA] read id 4091014 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_T1_Z_coordinate_over_time [DATA] read id 4091014 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_T8_X_coordinate_over_time [DATA] read id 4091084 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_T8_Y_coordinate_over_time [DATA] read id 4091084 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_T8_Z_coordinate_over_time [DATA] read id 4091084 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_L2_X_coordinate_over_time [DATA] read id 5091024 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_L2_Y_coordinate_over_time [DATA] read id 5091024 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_L2_Z_coordinate_over_time [DATA] read id 5091024 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Pelvis_X_coordinate_over_time [DATA] read id 6091000 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Pelvis_Y_coordinate_over_time [DATA] read id 6091000 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Pelvis_Z_coordinate_over_time [DATA] read id 6091000 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_right_X_coordinate_over_time [DATA] read id 3655720 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_right_Y_coordinate_over_time [DATA] read id 3655720 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_right_Z_coordinate_over_time [DATA] read id 3655720 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_left_X_coordinate_over_time [DATA] read id 3155720 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_left_Y_coordinate_over_time [DATA] read id 3155720 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_left_Z_coordinate_over_time [DATA] read id 3155720 from channel name: z_coordinate [CALCULATION] Calculating Visualization: BONES_RibL_1_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_1_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_2_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_2_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_3_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_3_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_4_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_4_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_5_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_5_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_6_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_6_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_7_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_7_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_8_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_8_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_9_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_9_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_10_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_10_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_11_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_11_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibL_12_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibL_12_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_1_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_1_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_2_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_2_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_3_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_3_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_4_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_4_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_5_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_5_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_6_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_6_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_7_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_7_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_8_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_8_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_9_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_9_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_10_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_10_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_11_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_11_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: BONES_RibR_12_95p_maxIP_overall_time [CALCULATION] Calculating Visualization: BONES_RibR_12_MPS_meanIP_tensile_time [CALCULATION] Calculating Visualization: RIBS_Overall_Rib_Risk_25YO_Larsson2021 [CALCULATION] Calculating Visualization: RIBS_Overall_Rib_Risk_50YO_Larsson2021 [CALCULATION] Calculating Visualization: RIBS_Overall_Rib_Risk_75YO_Larsson2021 [CALCULATION] Calculating Visualization: RIBS_Overall_Rib_Risk_25YO_Forman2022_3plus [CALCULATION] Calculating Visualization: RIBS_Overall_Rib_Risk_50YO_Forman2022_3plus [CALCULATION] Calculating Visualization: RIBS_Overall_Rib_Risk_75YO_Forman2022_3plus [CALCULATION] DATA VISUALIZATION writing csv to data/processed/sim_results/GS1 [CALCULATION] DATA VISUALIZATION done writing csv to data/processed/sim_results/GS1\Gold_Standard_1_Dynasaur_diagram_output_VIVA+_50M.csv
def get_unit_from_column_name(pd_df):
unit = list(pd_df.columns)
assert len(unit) == 1
assert type(unit[0]) == str
return unit[0]
def convert_to_unit(pd_df, unit, offset=None):
data = pd_df.dropna().to_numpy()
# Offset is done before conversion.
if offset is not None:
data = data[offset:] - data[offset]
data_unit = get_unit_from_column_name(pd_df)
data = data * ureg(data_unit)
return data.to(ureg(unit)).magnitude
if settings['setup_type'] == '30kph_2kN':
sim_data_no_occupant = pd.read_csv(os.path.join(reference_data_dir, 'load_cell_forces_without_occupant_G2.1.csv'), delimiter=';', na_values='-', header = [0,1,2,3])
sim_data_no_occupant.sort_index(axis=1, inplace=True)
def subtract_no_occupant_data(idx_1, idx_2, idx_3, offset):
time = convert_to_unit(sim_data_results[idx_1][idx_2]['time'], unit_time_plot, offset=offset)
# No offset for simulation data with no occupant.
time_no_occupant = convert_to_unit(sim_data_no_occupant[idx_1][idx_2]['time'], unit_time_plot)
force_no_occupant = convert_to_unit(sim_data_no_occupant[idx_1][idx_2][idx_3], unit_force_plot)
# Extrapolate with first and last value respectively (if necessary).
f = interpolate.interp1d(time_no_occupant[:, 0], force_no_occupant[:, 0], bounds_error=False, fill_value=(force_no_occupant[0, 0], force_no_occupant[-1, 0]))
force_subtracted = convert_to_unit(sim_data_results[idx_1][idx_2][idx_3], unit_force_plot, offset=offset) - f(time)
return time, force_subtracted
Results¶
Shoulder belt angle¶
offset = np.argmax(sim_data_results['TESTBED']['End_of_2D_shoulder_belt_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
D_ring_point = [sim_data_results['TESTBED']['Slipring_shoulder_belt_X_coordinate_over_time']['x-coordinate'].iloc[offset][0], sim_data_results['TESTBED']['Slipring_shoulder_belt_Z_coordinate_over_time']['z-coordinate'].iloc[offset][0]]
shoulder_belt_point = [sim_data_results['TESTBED']['End_of_2D_shoulder_belt_X_coordinate_over_time']['x-coordinate'].iloc[offset][0], sim_data_results['TESTBED']['End_of_2D_shoulder_belt_Z_coordinate_over_time']['z-coordinate'].iloc[offset][0]]
horizontal_distance = math.dist([D_ring_point[0]], [shoulder_belt_point[0]])
vertical_distance = math.dist([D_ring_point[1]], [shoulder_belt_point[1]])
xz_distance = math.dist(D_ring_point, shoulder_belt_point)
shoulder_belt_angle = math.degrees(math.acos(horizontal_distance/xz_distance))
print("The shoulder belt angle after settling is "+"{:.1f}".format((shoulder_belt_angle))+"°.")
print("It should be between "+str(belt_angle_range_dict[setup_type]['low'])+"° and "+str(belt_angle_range_dict[setup_type]['high'])+"° for the "+str(setup_dict[setup_type])+" load case.")
assert shoulder_belt_angle >= belt_angle_range_dict[setup_type]['low'], "Shoulder belt angle is too small. Adjust your setup to increase it (cf. Step 8 in the documentation)."
assert shoulder_belt_angle <= belt_angle_range_dict[setup_type]['high'], "Shoulder belt angle is too large. Adjust your setup to reduce it (cf. Step 8 in the documentation)."
The shoulder belt angle after settling is 25.1°. It should be between 24° and 29° for the Gold Standard 1 load case.
Head displacement plots¶
T1 displacement plots¶
fig, ax = plt.subplots(nrows=2, ncols=3, figsize=(18, 9))
ax[1, 2].remove()
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['T1_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
T1_x_displacement = convert_to_unit(sim_data_results['HBM']['T1_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
T1_y_displacement = convert_to_unit(sim_data_results['HBM']['T1_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
T1_z_displacement = convert_to_unit(sim_data_results['HBM']['T1_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
time = convert_to_unit(sim_data_results['HBM']['T1_X_coordinate_over_time']['time'], unit_time_plot, offset=offset)
sim_results_for_score['t1'] = [time, T1_x_displacement, T1_y_displacement, T1_z_displacement]
ax[0, 0].plot(convert_to_unit(sim_data_results['HBM']['T1_X_coordinate_over_time']['time'], unit_time_plot, offset=offset), T1_x_displacement, label=settings["HBM"])
for data_exp in data_exp_T1_dx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 1].plot(convert_to_unit(sim_data_results['HBM']['T1_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), T1_y_displacement)
for data_exp in data_exp_T1_dy:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 2].plot(convert_to_unit(sim_data_results['HBM']['T1_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), T1_z_displacement)
for data_exp in data_exp_T1_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 0].plot(T1_x_displacement, T1_z_displacement)
for data_exp in data_exp_T1_dx_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 1].plot(T1_y_displacement, T1_z_displacement)
for data_exp in data_exp_T1_dy_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 0].set(title="T1 X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 1].set(title="T1 Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 2].set(title="T1 Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1, 0].set(title="T1 Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1, 1].set(title="T1 Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower right', bbox_to_anchor=(0.9, 0.25))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_T1_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
T8 displacement plots¶
fig, ax = plt.subplots(nrows=2, ncols=3, figsize=(18, 9))
ax[1, 2].remove()
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['T8_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
T8_x_displacement = convert_to_unit(sim_data_results['HBM']['T8_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
T8_y_displacement = convert_to_unit(sim_data_results['HBM']['T8_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
T8_z_displacement = convert_to_unit(sim_data_results['HBM']['T8_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
time = convert_to_unit(sim_data_results['HBM']['T8_X_coordinate_over_time']['time'], unit_time_plot, offset=offset)
sim_results_for_score['t8'] = [time, T8_x_displacement, T8_y_displacement, T8_z_displacement]
ax[0, 0].plot(convert_to_unit(sim_data_results['HBM']['T8_X_coordinate_over_time']['time'], unit_time_plot, offset=offset), T8_x_displacement, label=settings["HBM"])
for data_exp in data_exp_T8_dx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 1].plot(convert_to_unit(sim_data_results['HBM']['T8_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), T8_y_displacement)
for data_exp in data_exp_T8_dy:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 2].plot(convert_to_unit(sim_data_results['HBM']['T8_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), T8_z_displacement)
for data_exp in data_exp_T8_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 0].plot(T8_x_displacement, T8_z_displacement)
for data_exp in data_exp_T8_dx_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 1].plot(T8_y_displacement, T8_z_displacement)
for data_exp in data_exp_T8_dy_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 0].set(title="T8 X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 1].set(title="T8 Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 2].set(title="T8 Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1, 0].set(title="T8 Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1, 1].set(title="T8 Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower right', bbox_to_anchor=(0.9, 0.25))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_T8_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
L2 displacement plots¶
fig, ax = plt.subplots(nrows=2, ncols=3, figsize=(18, 9))
ax[1, 2].remove()
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['L2_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
L2_x_displacement = convert_to_unit(sim_data_results['HBM']['L2_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
L2_y_displacement = convert_to_unit(sim_data_results['HBM']['L2_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
L2_z_displacement = convert_to_unit(sim_data_results['HBM']['L2_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
ax[0, 0].plot(convert_to_unit(sim_data_results['HBM']['L2_X_coordinate_over_time']['time'], unit_time_plot, offset=offset), L2_x_displacement, label=settings["HBM"])
for data_exp in data_exp_L2_dx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 1].plot(convert_to_unit(sim_data_results['HBM']['L2_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), L2_y_displacement)
for data_exp in data_exp_L2_dy:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 2].plot(convert_to_unit(sim_data_results['HBM']['L2_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), L2_z_displacement)
for data_exp in data_exp_L2_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 0].plot(L2_x_displacement, L2_z_displacement)
for data_exp in data_exp_L2_dx_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 1].plot(L2_y_displacement, L2_z_displacement)
for data_exp in data_exp_L2_dy_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 0].set(title="L2 X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 1].set(title="L2 Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 2].set(title="L2 Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1, 0].set(title="L2 Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1, 1].set(title="L2 Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower right', bbox_to_anchor=(0.9, 0.25))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_L2_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Pelvis displacement plots¶
fig, ax = plt.subplots(nrows=2, ncols=3, figsize=(18, 9))
ax[1, 2].remove()
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['Pelvis_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
Pelvis_x_displacement = convert_to_unit(sim_data_results['HBM']['Pelvis_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
Pelvis_y_displacement = convert_to_unit(sim_data_results['HBM']['Pelvis_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
Pelvis_z_displacement = convert_to_unit(sim_data_results['HBM']['Pelvis_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
time = convert_to_unit(sim_data_results['HBM']['Pelvis_X_coordinate_over_time']['time'], unit_time_plot, offset=offset)
sim_results_for_score['pelvis'] = [time, Pelvis_x_displacement, Pelvis_y_displacement, Pelvis_z_displacement]
ax[0, 0].plot(convert_to_unit(sim_data_results['HBM']['Pelvis_X_coordinate_over_time']['time'], unit_time_plot, offset=offset), Pelvis_x_displacement, label=settings["HBM"])
for data_exp in data_exp_Pelvis_dx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 0].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 1].plot(convert_to_unit(sim_data_results['HBM']['Pelvis_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), Pelvis_y_displacement)
for data_exp in data_exp_Pelvis_dy:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 1].plot(data_exp[:, 0], (data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 2].plot(convert_to_unit(sim_data_results['HBM']['Pelvis_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), Pelvis_z_displacement)
for data_exp in data_exp_Pelvis_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[0, 2].plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 0].plot(Pelvis_x_displacement, Pelvis_z_displacement)
for data_exp in data_exp_Pelvis_dx_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 0].plot(-(data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[1, 1].plot(Pelvis_y_displacement, Pelvis_z_displacement)
for data_exp in data_exp_Pelvis_dy_dz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax[1, 1].plot((data_exp[:, 0] - data_exp[0, 0]), -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax[0, 0].set(title="Pelvis X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 1].set(title="Pelvis Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[0, 2].set(title="Pelvis Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1, 0].set(title="Pelvis Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1, 1].set(title="Pelvis Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower right', bbox_to_anchor=(0.9, 0.25))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_pelvis_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Chest deflection plot¶
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(5, 6))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['Chest_Sternum_mid_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
Time = convert_to_unit(sim_data_results['HBM']['Chest_defl_Sternum_mid_over_time']['time'], unit_time_plot, offset=offset)
Chest_defl = convert_to_unit(sim_data_results['HBM']['Chest_defl_Sternum_mid_over_time']['x-displacement'], unit_deflection_plot, offset=offset)
sim_results_for_score['chest deflection'] = [Time, -Chest_defl]
ax.plot(Time, -Chest_defl, label=settings["HBM"])
for data_exp in data_exp_chest_defl:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax.plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax.plot(data_exp[:, 0], -(data_exp[:, 1] - data_exp[0, 1]), **plotExperimentFemale)
ax.set(title="Chest deflection", xlabel="Time / ms", ylabel="Displacement / mm")
fig.tight_layout()
fig.legend(loc='center left', bbox_to_anchor=(1.0, 0.5))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_chest_deflection_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\core\indexes\base.py:3653, in Index.get_loc(self, key) 3652 try: -> 3653 return self._engine.get_loc(casted_key) 3654 except KeyError as err: File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\_libs\index.pyx:147, in pandas._libs.index.IndexEngine.get_loc() File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\_libs\index.pyx:176, in pandas._libs.index.IndexEngine.get_loc() File pandas\_libs\hashtable_class_helper.pxi:7080, in pandas._libs.hashtable.PyObjectHashTable.get_item() File pandas\_libs\hashtable_class_helper.pxi:7088, in pandas._libs.hashtable.PyObjectHashTable.get_item() KeyError: 'Chest_Sternum_mid_X_coordinate_over_time' The above exception was the direct cause of the following exception: KeyError Traceback (most recent call last) Cell In[19], line 3 1 fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(5, 6)) 2 fig.suptitle(setup_dict[setup_type]) ----> 3 offset = np.argmax(sim_data_results['HBM']['Chest_Sternum_mid_X_coordinate_over_time']['time'] >= t_settle) 4 assert offset > 0 5 Time = convert_to_unit(sim_data_results['HBM']['Chest_defl_Sternum_mid_over_time']['time'], unit_time_plot, offset=offset) File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\core\frame.py:3760, in DataFrame.__getitem__(self, key) 3758 if is_single_key: 3759 if self.columns.nlevels > 1: -> 3760 return self._getitem_multilevel(key) 3761 indexer = self.columns.get_loc(key) 3762 if is_integer(indexer): File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\core\frame.py:3815, in DataFrame._getitem_multilevel(self, key) 3813 def _getitem_multilevel(self, key): 3814 # self.columns is a MultiIndex -> 3815 loc = self.columns.get_loc(key) 3816 if isinstance(loc, (slice, np.ndarray)): 3817 new_columns = self.columns[loc] File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\core\indexes\multi.py:2812, in MultiIndex.get_loc(self, key) 2809 return mask 2811 if not isinstance(key, tuple): -> 2812 loc = self._get_level_indexer(key, level=0) 2813 return _maybe_to_slice(loc) 2815 keylen = len(key) File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\core\indexes\multi.py:3160, in MultiIndex._get_level_indexer(self, key, level, indexer) 3157 return slice(i, j, step) 3159 else: -> 3160 idx = self._get_loc_single_level_index(level_index, key) 3162 if level > 0 or self._lexsort_depth == 0: 3163 # Desired level is not sorted 3164 if isinstance(idx, slice): 3165 # test_get_loc_partial_timestamp_multiindex File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\core\indexes\multi.py:2752, in MultiIndex._get_loc_single_level_index(self, level_index, key) 2750 return -1 2751 else: -> 2752 return level_index.get_loc(key) File c:\Users\jobinj\AppData\Local\anaconda3\envs\HBM4VT-env\lib\site-packages\pandas\core\indexes\base.py:3655, in Index.get_loc(self, key) 3653 return self._engine.get_loc(casted_key) 3654 except KeyError as err: -> 3655 raise KeyError(key) from err 3656 except TypeError: 3657 # If we have a listlike key, _check_indexing_error will raise 3658 # InvalidIndexError. Otherwise we fall through and re-raise 3659 # the TypeError. 3660 self._check_indexing_error(key) KeyError: 'Chest_Sternum_mid_X_coordinate_over_time'
Seat force plots¶
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['LOADCELL']['Loadcell_X_force_Seat_CFC60']['time'] >= t_settle)
assert offset > 0
for data_exp in data_exp_seat_fx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
if settings['setup_type'] == '30kph_2kN':
time, force = subtract_no_occupant_data('LOADCELL', 'Loadcell_X_force_Seat_CFC60', 'x-force', offset)
ax1.plot(time, -force, label=settings["HBM"])
else:
ax1.plot(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Seat_CFC60']['time'], unit_time_plot, offset=offset),
-convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Seat_CFC60']['x-force'], unit_force_plot, offset=offset),
label=settings["HBM"])
for data_exp in data_exp_seat_fz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
ax2.plot(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_Z_force_Seat_CFC60']['time'], unit_time_plot, offset=offset),
-convert_to_unit(sim_data_results['LOADCELL']['Loadcell_Z_force_Seat_CFC60']['z-force'], unit_force_plot, offset=offset))
ax1.set(title="Seat X-Force", xlabel ="Time / ms", ylabel="Force / kN")
ax2.set(title="Seat Z-Force", xlabel ="Time / ms", ylabel="Force / kN")
ax1.set_xlim(right=250)
ax2.set_xlim(right=250)
fig.legend(loc='center left', bbox_to_anchor=(0.9, 0.5))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_seat_force_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Knee support force plots¶
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['LOADCELL']['Loadcell_X_force_Kneesupport_left_CFC60']['time'] >= t_settle)
assert offset > 0
for data_exp in data_exp_knee_left_fx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
if settings['setup_type'] == '30kph_2kN':
time, force = subtract_no_occupant_data('LOADCELL', 'Loadcell_X_force_Kneesupport_left_CFC60', 'x-force', offset)
ax1.plot(time, -force, label=settings["HBM"])
else:
ax1.plot(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Kneesupport_left_CFC60']['time'], unit_time_plot, offset=offset),
-convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Kneesupport_left_CFC60']['x-force'], unit_force_plot, offset=offset),
label=settings["HBM"])
for data_exp in data_exp_knee_right_fx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
if settings['setup_type'] == '30kph_2kN':
time, force = subtract_no_occupant_data('LOADCELL', 'Loadcell_X_force_Kneesupport_right_CFC60', 'x-force', offset)
ax2.plot(time, -force)
else:
ax2.plot(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Kneesupport_right_CFC60']['time'], unit_time_plot, offset=offset),
-convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Kneesupport_right_CFC60']['x-force'], unit_force_plot, offset=offset))
ax1.set(title="Knee Support Left X-Force", xlabel ="Time / ms", ylabel="Force / kN")
ax2.set(title="Knee Support Right X-Force", xlabel ="Time / ms", ylabel="Force / kN")
ax1.set_xlim(right=250)
ax2.set_xlim(right=250)
fig.legend(loc='center left', bbox_to_anchor=(0.9, 0.5))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_knee_support_force_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Foot support force plots¶
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['LOADCELL']['Loadcell_X_force_Footrest_left_CFC60']['time'] >= t_settle)
assert offset > 0
for data_exp in data_exp_feet_fx:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
if settings['setup_type'] == '30kph_2kN':
time_left, force_left = subtract_no_occupant_data('LOADCELL', 'Loadcell_X_force_Footrest_left_CFC60', 'x-force', offset)
time_right, force_right = subtract_no_occupant_data('LOADCELL', 'Loadcell_X_force_Footrest_right_CFC60', 'x-force', offset)
ax1.plot(time_left, -(force_left + force_right), label=settings["HBM"])
else:
ax1.plot(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Footrest_left_CFC60']['time'], unit_time_plot, offset=offset),
-(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Footrest_left_CFC60']['x-force'], unit_force_plot, offset=offset) +
convert_to_unit(sim_data_results['LOADCELL']['Loadcell_X_force_Footrest_right_CFC60']['x-force'], unit_force_plot, offset=offset)),
label=settings["HBM"])
for data_exp in data_exp_feet_fz:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
ax1.set(title="Foot Support X-Force", xlabel ="Time / ms", ylabel="Force / kN")
ax2.set(title="Foot Support Z-Force", xlabel ="Time / ms", ylabel="Force / kN")
if settings['setup_type'] == '30kph_2kN':
time_left, force_left = subtract_no_occupant_data('LOADCELL', 'Loadcell_Z_force_Footrest_left_CFC60', 'z-force', offset)
time_right, force_right = subtract_no_occupant_data('LOADCELL', 'Loadcell_Z_force_Footrest_right_CFC60', 'z-force', offset)
ax2.plot(time_left, -(force_left + force_right))
else:
ax2.plot(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_Z_force_Footrest_left_CFC60']['time'], unit_time_plot, offset=offset),
-(convert_to_unit(sim_data_results['LOADCELL']['Loadcell_Z_force_Footrest_left_CFC60']['z-force'], unit_force_plot, offset=offset) +
convert_to_unit(sim_data_results['LOADCELL']['Loadcell_Z_force_Footrest_right_CFC60']['z-force'], unit_force_plot, offset=offset)))
ax1.set_xlim(right=250)
ax2.set_xlim(right=250)
fig.legend(loc='center left', bbox_to_anchor=(0.9, 0.5))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_foot_support_force_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Belt force plots¶
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['TESTBED']['Shoulder_belt_res_force_over_time_CFC600']['time'] >= t_settle)
assert offset > 0
ax1.plot(convert_to_unit(sim_data_results['TESTBED']['Shoulder_belt_res_force_over_time_CFC600']['time'], unit_time_plot, offset=offset),
convert_to_unit(sim_data_results['TESTBED']['Shoulder_belt_res_force_over_time_CFC600']['res-force'], unit_force_plot, offset=offset),
label=settings["HBM"])
for data_exp in data_exp_shoulder_belt:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax1.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
ax2.plot(convert_to_unit(sim_data_results['TESTBED']['Lap_belt_res_force_over_time_CFC600']['time'], unit_time_plot, offset=offset),
convert_to_unit(sim_data_results['TESTBED']['Lap_belt_res_force_over_time_CFC600']['res-force'], unit_force_plot, offset=offset))
for data_exp in data_exp_lap_belt:
if setup_type == '40kph_notForceLimited' or setup_type == '30kph_3kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentMale)
elif setup_type == '30kph_2kN':
ax2.plot(data_exp[:, 0], data_exp[:, 1], **plotExperimentFemale)
ax1.set(title="Shoulder Belt Force", xlabel ="Time / ms", ylabel="Force / kN")
ax2.set(title="Lap Belt Force", xlabel ="Time / ms", ylabel="Force / kN")
ax1.set_xlim(right=250)
ax2.set_xlim(right=250)
fig.legend(loc='center left', bbox_to_anchor=(0.9, 0.5))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_belt_force_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Trajectory plots using head, spine and pelvis markers¶
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(11, 5))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['Head_CoG_Y_displacement_over_time']['time'] >= t_settle)
assert offset > 0
head_x_displacement = convert_to_unit(sim_data_results['HBM']['Head_CoG_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['Head_CoG_X_coordinate_over_time']['x-coordinate'].iloc[0,0]
head_y_displacement = convert_to_unit(sim_data_results['HBM']['Head_CoG_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['Head_CoG_Y_coordinate_over_time']['y-coordinate'].iloc[0,0]
head_z_displacement = convert_to_unit(sim_data_results['HBM']['Head_CoG_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['Head_CoG_Z_coordinate_over_time']['z-coordinate'].iloc[0,0]
T1_x_displacement = convert_to_unit(sim_data_results['HBM']['T1_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['T1_X_coordinate_over_time']['x-coordinate'].iloc[0,0]
T1_y_displacement = convert_to_unit(sim_data_results['HBM']['T1_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['T1_Y_coordinate_over_time']['y-coordinate'].iloc[0,0]
T1_z_displacement = convert_to_unit(sim_data_results['HBM']['T1_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['T1_Z_coordinate_over_time']['z-coordinate'].iloc[0,0]
T8_x_displacement = convert_to_unit(sim_data_results['HBM']['T8_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['T8_X_coordinate_over_time']['x-coordinate'].iloc[0,0]
T8_y_displacement = convert_to_unit(sim_data_results['HBM']['T8_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['T8_Y_coordinate_over_time']['y-coordinate'].iloc[0,0]
T8_z_displacement = convert_to_unit(sim_data_results['HBM']['T8_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['T8_Z_coordinate_over_time']['z-coordinate'].iloc[0,0]
L2_x_displacement = convert_to_unit(sim_data_results['HBM']['L2_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['L2_X_coordinate_over_time']['x-coordinate'].iloc[0,0]
L2_y_displacement = convert_to_unit(sim_data_results['HBM']['L2_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['L2_Y_coordinate_over_time']['y-coordinate'].iloc[0,0]
L2_z_displacement = convert_to_unit(sim_data_results['HBM']['L2_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['L2_Z_coordinate_over_time']['z-coordinate'].iloc[0,0]
Pelvis_x_displacement = convert_to_unit(sim_data_results['HBM']['Pelvis_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['Pelvis_X_coordinate_over_time']['x-coordinate'].iloc[0,0]
Pelvis_y_displacement = convert_to_unit(sim_data_results['HBM']['Pelvis_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['Pelvis_Y_coordinate_over_time']['y-coordinate'].iloc[0,0]
Pelvis_z_displacement = convert_to_unit(sim_data_results['HBM']['Pelvis_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset) + sim_data_results['HBM']['Pelvis_Z_coordinate_over_time']['z-coordinate'].iloc[0,0]
head_x_displacement_rel = head_x_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
head_y_displacement_rel = head_y_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
head_z_displacement_rel = head_z_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
T1_x_displacement_rel = T1_x_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
T1_y_displacement_rel = T1_y_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
T1_z_displacement_rel = T1_z_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
T8_x_displacement_rel = T8_x_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
T8_y_displacement_rel = T8_y_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
T8_z_displacement_rel = T8_z_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
L2_x_displacement_rel = L2_x_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
L2_y_displacement_rel = L2_y_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
L2_z_displacement_rel = L2_z_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
Pelvis_x_displacement_rel = Pelvis_x_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
Pelvis_y_displacement_rel = Pelvis_y_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Y_coordinate_over_time']['y-coordinate'], unit_deflection_plot, offset=offset)
Pelvis_z_displacement_rel = Pelvis_z_displacement - convert_to_unit(sim_data_results['TESTBED']['Testbed_Z_coordinate_over_time']['z-coordinate'], unit_deflection_plot, offset=offset)
def get_indices(total_size, number_indices):
assert number_indices > 1
assert total_size >= number_indices
last_idx = total_size - 1
q, r = divmod(last_idx, number_indices - 1)
result = [0]
idx = 0
for i in range(1, number_indices):
idx += (q + 1) if (i <= r) else q
result.append(idx)
return result
for idx in get_indices(len(head_y_displacement_rel), 3):
ax2.plot([-head_x_displacement_rel[idx], -T1_x_displacement_rel[idx], -T8_x_displacement_rel[idx], -L2_x_displacement_rel[idx], -Pelvis_x_displacement_rel[idx]],
[head_z_displacement_rel[idx], T1_z_displacement_rel[idx], T8_z_displacement_rel[idx], L2_z_displacement_rel[idx], Pelvis_z_displacement_rel[idx]], marker='o', linestyle='--', color='grey', alpha=0.7)
ax1.plot(head_x_displacement, head_z_displacement, label="Head")
ax1.plot(T1_x_displacement, T1_z_displacement, label="T1")
ax1.plot(T8_x_displacement, T8_z_displacement, label="T8")
ax1.plot(L2_x_displacement, L2_z_displacement, label="L2")
ax1.plot(Pelvis_x_displacement, Pelvis_z_displacement, label="Pelvis")
ax2.plot(-head_x_displacement_rel, head_z_displacement_rel)
ax2.plot(-T1_x_displacement_rel, T1_z_displacement_rel)
ax2.plot(-T8_x_displacement_rel, T8_z_displacement_rel)
ax2.plot(-L2_x_displacement_rel, L2_z_displacement_rel)
ax2.plot(-Pelvis_x_displacement_rel, Pelvis_z_displacement_rel)
ax1.set(title="Absolute trajectories", xlabel="X-Displacement / mm", ylabel="Z-Displacement / mm")
ax2.set(title="Trajectories relative to sled", xlabel="X-Displacement / mm", ylabel="Z-Displacement / mm")
ax2.set_xlim(left=-250, right=500)
ax2.set_ylim(top=900, bottom=-100)
fig.legend(loc='center left', bbox_to_anchor=(0.9, 0.5))
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Rib criterion plots¶
# This cell prints the maximum rib fracture risk.
NFR1 = ("NFR=0", "NFR=1", "NFR=2", "NFR=3+")
NFR2 = ("NFR=0", "NFR=1+", "NFR=2+", "NFR=3+")
rib_criterion = settings["rib_criterion"]
rib_risks = {
'25 yo': (np.round(np.squeeze(100*sim_data_results['RIBS']['Overall_Rib_Risk_25YO_' + rib_criterion]['risk'][0:4].values),1)),
'50 yo': (np.round(np.squeeze(100*sim_data_results['RIBS']['Overall_Rib_Risk_50YO_' + rib_criterion]['risk'][0:4].values),1)),
'75 yo': (np.round(np.squeeze(100*sim_data_results['RIBS']['Overall_Rib_Risk_75YO_' + rib_criterion]['risk'][0:4].values),1))
}
x = np.arange(len(NFR1)) # the label locations
width = 0.25 # the width of the bars
multiplier1 = 0
multiplier2 = 0
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, constrained_layout=True, figsize=(10,5))
for attribute, measurement in rib_risks.items():
offset = width * multiplier1
rects = ax1.bar(x + offset, measurement, width, label=attribute)
ax1.bar_label(rects, padding=3)
multiplier1 += 1
ax1.set_ylabel('Risk / %')
ax1.set_title('Rib fracture risk max')
ax1.set_xticks(x + width)
ax1.set_xticklabels(NFR1)
ax1.legend(loc='best')
ax1.set_ylim(0, 110)
for attribute, measurement in rib_risks.items():
measurement[2] += measurement[3]
measurement[1] += measurement[2]
offset = width * multiplier2
rects = ax2.bar(x + offset, measurement, width, label=attribute)
ax2.bar_label(rects, padding=3)
multiplier2 += 1
ax2.set_ylabel('Risk / %')
ax2.set_title('Rib fracture risk max')
ax2.set_xticks(x + width)
ax2.set_xticklabels(NFR2)
ax2.legend(loc='best')
ax2.set_ylim(0, 110)
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_") + '_rib_risks_' + settings["HBM"] + '__Max' + '.png'), format='png', bbox_inches='tight')
plt.show()
Energy plots¶
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(5,6))
fig.suptitle(setup_dict[setup_type] + ' - Model Energies')
ax.plot(convert_to_unit(sim_data_results.MODEL.Hourglass_Energy_time.time, unit_time_plot),
convert_to_unit(sim_data_results.MODEL.Hourglass_Energy_time.hourglass_energy, unit_energy_plot),
label = "Hourglass Energy")
ax.plot(convert_to_unit(sim_data_results.MODEL.Internal_Energy_time.time, unit_time_plot),
convert_to_unit(sim_data_results.MODEL.Internal_Energy_time.internal_energy, unit_energy_plot),
label = "Internal Energy")
ax.plot(convert_to_unit(sim_data_results.MODEL.Kinetic_Energy_time.time, unit_time_plot),
convert_to_unit(sim_data_results.MODEL.Kinetic_Energy_time.kinetic_energy, unit_energy_plot),
label = "Kinetic Energy")
ax.plot(convert_to_unit(sim_data_results.MODEL.Total_Energy_time.time, unit_time_plot),
convert_to_unit(sim_data_results.MODEL.Total_Energy_time.total_energy, unit_energy_plot),
label = "Total Energy")
ax.set(xlabel ="Time / ms", ylabel="Energy / J")
fig.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig.tight_layout(pad=0.5)
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_energies_complete_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
offset = np.argmax(sim_data_results.MODEL.Hourglass_Energy_time.time > t_settle) + 1
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(5,6))
fig.suptitle(setup_dict[setup_type] + ' - Model Energies')
ax.plot(convert_to_unit(sim_data_results.MODEL.Hourglass_Energy_time.time, unit_time_plot, offset=offset),
convert_to_unit(sim_data_results.MODEL.Hourglass_Energy_time.hourglass_energy, unit_energy_plot, offset=offset),
label = "Hourglass Energy")
ax.plot(convert_to_unit(sim_data_results.MODEL.Internal_Energy_time.time, unit_time_plot, offset=offset),
convert_to_unit(sim_data_results.MODEL.Internal_Energy_time.internal_energy, unit_energy_plot, offset=offset),
label = "Internal Energy")
ax.plot(convert_to_unit(sim_data_results.MODEL.Kinetic_Energy_time.time, unit_time_plot, offset=offset),
convert_to_unit(sim_data_results.MODEL.Kinetic_Energy_time.kinetic_energy, unit_energy_plot, offset=offset),
label = "Kinetic Energy")
ax.plot(convert_to_unit(sim_data_results.MODEL.Total_Energy_time.time, unit_time_plot, offset=offset),
convert_to_unit(sim_data_results.MODEL.Total_Energy_time.total_energy, unit_energy_plot, offset=offset),
label = "Total Energy")
ax.set(xlabel ="Time / ms", ylabel="Energy / J")
fig.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig.tight_layout(pad=0.5)
fig.savefig(os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_")+'_energies_loading_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Added mass of HBM¶
# Data
HBM_mass = df_hbm_characteristics['HBM_mass'].to_numpy()
HBM_added_mass = convert_to_unit(sim_data_results['HBM']['HBM_added_mass_time']['added_mass'], unit_mass_plot)
HBM_added_mass_max = np.max(HBM_added_mass)
Percentage_increase = 100/HBM_mass * HBM_added_mass_max
# Table
col_labels = ["HBM", "Added mass / kg", "Percentage on HBM mass / %"]
table = []
table.append(settings["HBM"])
table.append(round(float(HBM_added_mass_max),3))
table.append(round(float(Percentage_increase),3))
criteria_table = []
criteria_table.append(table)
# Plot
fig_added_mass, ax = plt.subplots(figsize=(6, 1))
ax.set_title(setup_dict[setup_type], fontsize=12)
ax.axis('off')
bbox = [0, 0, 1, 1]
mpl_table = ax.table(cellText = criteria_table, bbox = bbox, colLabels = col_labels, cellLoc='center')
mpl_table.auto_set_font_size(False)
mpl_table.set_fontsize(10)
mpl_table.auto_set_column_width(col=[0,1,2,3])
mpl_table[0,0].get_text().set_weight('bold')
mpl_table[0,1].get_text().set_weight('bold')
mpl_table[0,2].get_text().set_weight('bold')
filename_save = os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_") + '_added_mass_' + settings["HBM"] + '.png')
fig_added_mass.savefig(filename_save, format='png', bbox_inches='tight')
assert Percentage_increase < 5, "The added mass is higher than 5% of the HBM mass."
Objective Metric Score¶
To calculate the objective metric score, the following steps are performed:
Preprocessing test data¶
- Start at time greater or equal 0
- Cut at 240 ms for Head, T1, T8 and Pelvis (end of test data)
- Cut at 150 ms for Chest Deflection (end of test data)
- Offset and adjust signs
Preprocessing simulation data¶
- Cut at 240 ms for Head, T1, T8 and Pelvis
- Cut at 150 ms for Chest Deflection
Remarks¶
- The objective metric score is calculated for GS2 only, as data for AM50 anthropometry is available.
from scipy.interpolate import interp1d
from arc_length_ellipse_score import ArcLengthEllipseScore
def cut_at_time(data, time_max, interpolate=True, cut_negative_time=True):
# If interpolate is True, linear interpolate time step where cut is performed.
if cut_negative_time:
idx_time_geq_0 = np.argmax(data[:, 0] >= 0.0)
data = data[idx_time_geq_0:, :]
idx_time_larger = np.argmax(data[:, 0] > time_max)
if idx_time_larger == 0:
return data
else:
if interpolate:
assert np.shape(data)[1] == 2
assert data[idx_time_larger - 1, 0] <= time_max
assert data[idx_time_larger, 0] > time_max
if np.isclose(data[idx_time_larger - 1, 0], time_max):
return data[:idx_time_larger, :]
f_time_max = interp1d(data[idx_time_larger - 1: idx_time_larger + 1, 0], data[idx_time_larger - 1: idx_time_larger + 1, 1])(time_max)
return np.append(data[:idx_time_larger, :], [[time_max, f_time_max]], axis=0)
else:
return data[:idx_time_larger, :]
def remove_nan_rows(data):
return data[~np.isnan(data).any(axis=1), :]
if setup_type == '30kph_3kN':
cut_at_arc_length = False
num_warp_ctrl_points_arcgen = 1
data_exp_dict = {}
data_exp_dict['head'] = [data_exp_head_dx, data_exp_head_dy, data_exp_head_dz]
data_exp_dict['t1'] = [data_exp_T1_dx, data_exp_T1_dy, data_exp_T1_dz]
data_exp_dict['t8'] = [data_exp_T8_dx, data_exp_T8_dy, data_exp_T8_dz]
data_exp_dict['pelvis'] = [data_exp_Pelvis_dx, data_exp_Pelvis_dy, data_exp_Pelvis_dz]
data_exp_dict['chest deflection'] = [data_exp_chest_defl]
time_cut_ms_dict = {'head': 240, 't1': 240, 't8': 240, 'pelvis': 240, 'chest deflection': 150}
direction_dict = {'head': ['x', 'y', 'z'], 't1': ['x', 'y', 'z'], 't8': ['x', 'y', 'z'], 'pelvis': ['x', 'y', 'z'], 'chest deflection': [None]}
signs_dict = {'head': [-1, 1, -1], 't1': [-1, 1, -1], 't8': [-1, 1, -1], 'pelvis': [-1, 1, -1], 'chest deflection': [-1]}
for case in ['head', 't1', 't8', 'pelvis', 'chest deflection']:
for data_exp_, displacement, direction, sign in zip(data_exp_dict[case], sim_results_for_score[case][1:], direction_dict[case], signs_dict[case]):
if direction is None:
title = f'{case.capitalize()}'
else:
title = f'{case.capitalize()} {direction.upper()}-Displacement'
print(title)
time_cut_ms = time_cut_ms_dict[case]
# Prepare test data.
test_data_list = []
for test_data in data_exp_:
test_data = remove_nan_rows(test_data)
assert not np.any(np.isnan(test_data))
assert test_data[-1, 0] >= time_cut_ms
test_data = cut_at_time(test_data, time_cut_ms)
test_data = np.column_stack((test_data[:, 0], sign * (test_data[:, 1] - test_data[0, 1])))
assert test_data[0, 0] >= 0.0
test_data_list.append(test_data)
# Prepare simulation data.
sim_data_list = [cut_at_time(np.column_stack((sim_results_for_score[case][0], displacement)), time_cut_ms)]
# Calculate objective metric scores.
ales = ArcLengthEllipseScore(test_data_list, sim_data_list, cut_at_arc_length, num_warp_ctrl_points_arcgen, use_dtw=True)
ales.arc_length_score_for_simulation_data()
score = np.round(ales.scores_simulation_list[0], decimals=2)
score_dtw = np.round(ales.scores_dtw_simulation_list[0], decimals=2)
print(f'Objective metric score: {score}')
print(f'Objective metric score dtw: {score_dtw}')
# Plot arc length score over normalized arc length.
# ales.plot_score_over_arc_length()
label_simulation = f'{settings["HBM"]}\nScore: {score}\nScore (dtw): {score_dtw}'
if direction is None:
filename_save = os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_") + f'_{case.replace(" ", "_")}_displacement_score_' + settings["HBM"] + '.png')
else:
filename_save = os.path.join(figures_dir, setup_dict[setup_type].replace(" ", "_") + f'_{case}_{direction}_displacement_score_' + settings["HBM"] + '.png')
fig_list = ales.plot_data_and_results(title_fig=setup_dict[setup_type], indices_plot_ellipses=[150, 300, 499], title_ax=f'Objective Metric Score - {title}', xlabel='Time / ms', ylabel='Displacement / mm',
label_sim=label_simulation, figsize=(7,5), bbox_to_anchor=(1.1, 0.5), loc='center left', tight_layout=False, min_corridor_width=0.02)
fig_list[0].savefig(filename_save, bbox_inches='tight')
else:
print('No Objective Metric Score was calculated, since data for AM50 anthropometry is available only for GS2 load case.')
No Objective Metric Score was calculated, since data for AM50 anthropometry is available only for GS2 load case.