Far side sled test Forman et al. (2013)¶
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 Forman et al. (2013)¶
Important note on beta version of this notebook¶
Currently no reference PMHS data is included this notebook. It will be updated as soon as they are available.
Summary¶
The far side sled test was first published by Forman et al. (2013).
Forman, J. L., Lopez-Valdes, F., Lessley, D. J., Riley, P., Sochor, M., Heltzel, S., Ash, J., Perz, R., Kent, R. W., Seacrist, T., Arbogast, K. B., Tanji, H., & Higuchi, K. (2013). Occupant kinematics and shoulder belt retention in far-side lateral and oblique collisions: A parametric study. Stapp Car Crash Journal, 57, 343–385.
Example animations illustrating the sled test in a simulation with THUMS v4.1 50M is 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¶
The characteristics of all PMHS used in these tests are provided in the table below.
- 7 male specimen (average age: 60.7 yrs, average mass: 83.1kg, average height: 176.0 cm)
¶
| Subject Number | Weight (kg) | Height (cm) | Age (yrs) |
|---|---|---|---|
| 557 | 91 | 174 | 67 |
| 551 | 83 | 171 | 67 |
| 559 | 73 | 175 | 60 |
| 591 | 86 | 182 | 44 |
| 587 | 91 | 180 | 70 |
| 602 | 79 | 178 | 61 |
| 608 | 79 | 172 | 56 |
| Average | 83.1 | 176.0 | 60.7 |
Test configurations which are used for simulation¶
| Configuration | Test | Subject | Sled acc [g] | Impact direction | D-Ring position | Pretensioner | Pelvis |
|---|---|---|---|---|---|---|---|
| 1 | S0124 | 591 | 14 | Oblique | Intermediate | Yes | No |
| 1 | S0135 | 602 | 14 | Oblique | Intermediate | Yes | No |
| 2 | S0122 | 591 | 6.6 | Oblique | Intermediate | No | No |
| 2 | S0133 | 602 | 6.6 | Oblique | Intermediate | No | No |
| 2 | S0136 | 608 | 6.6 | Oblique | Intermediate | No | No |
| 3 | S0123 | 591 | 6.6 | Oblique | Intermediate | Yes | No |
| 3 | S0134 | 602 | 6.6 | Oblique | Intermediate | Yes | No |
| 3 | S0137 | 608 | 6.6 | Oblique | Intermediate | Yes | No |
| 4 | S0127 | 587 | 6.6 | Oblique | Back | Yes | No |
| 4 | S0129 | 587 | 6.6 | Oblique | Back | Yes | Yes |
| 4 | S0132 | 602 | 6.6 | Oblique | Back | Yes | No |
| 4 | S0139 | 608 | 6.6 | Oblique | Back | Yes | No |
| 5 | S0082 | 551 | 6.6 | Lateral | Forward | Yes | No |
| 5 | S0083 | 551 | 6.6 | Lateral | Forward | Yes | No |
| 5 | S0088 | 559 | 6.6 | Lateral | Forward | Yes | No |
| 6 | S0091 | 559 | 14 | Lateral | Intermediate | Yes | No |
Responses recorded¶
- Trajectories of head, acromion, T1, T8, L2 and Pelvis
- Seat load cell (Fy and Fz)
- Tension forces in shoulder and lap belt
- The reference values from the paper were digitised and are included in the package.
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/petit_2019.
setup_dict={'Config1': 'Configuration 1',
'Config2': 'Configuration 2',
'Config3': 'Configuration 3',
'Config4': 'Configuration 4',
'Config5': 'Configuration 5',
'Config6': 'Configuration 6',
'noSidePlate': 'No side plate is used',
'SidePlate': 'A side plate is used',
'DRf': 'Forward D-ring position',
'DRi': 'Intermediate D-ring position',
'DRb': 'Back D-ring position'}
file_master = '00_Master_Sled.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
DRing_pos = None
for line in lines:
if line.strip() == 'R Conf1 1.':
setup_type = 'Config1'
DRing_pos = 'DRi'
testbed_type = 'noSidePlate'
break
if line.strip() == 'R Conf2 1.':
setup_type = 'Config2'
DRing_pos = 'DRi'
testbed_type = 'noSidePlate'
break
if line.strip() == 'R Conf3 1.':
setup_type = 'Config3'
DRing_pos = 'DRi'
testbed_type = 'noSidePlate'
break
if line.strip() == 'R Conf4 1.':
setup_type = 'Config4'
DRing_pos = 'DRb'
testbed_type = 'SidePlate'
break
if line.strip() == 'R Conf5 1.':
setup_type = 'Config5'
DRing_pos = 'DRf'
testbed_type = 'noSidePlate'
break
if line.strip() == 'R Conf6 1.':
setup_type = 'Config6'
DRing_pos = 'DRi'
testbed_type = 'noSidePlate'
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])
if testbed_type is None:
raise ValueError('Testbed type not found in 00_Master_Sled.k.')
print('Simulation testbed type:', setup_dict[testbed_type])
if DRing_pos is None:
raise ValueError('D-ring position not found in 00_Master_Sled.k.')
print('Simulation D-ring position:', setup_dict[DRing_pos])
Simulation setup type: Configuration 1 Simulation testbed type: No side plate is used Simulation D-ring position: Intermediate D-ring position
# 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": 1, # 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 200 ms. Error termination is assumed to occur if in-crash time is less than 200 ms.
t_incrash = 200 * 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_s_mm_ton.def [READ DYNASAUR DEF] read data/metadata/04_testbed.def [READ DYNASAUR DEF] done [READ DYNASAUR DEF] read data/metadata/00_Forman_testbed_ID.def [READ DYNASAUR DEF] read data/metadata/00_THUMS_v4.1_50M_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 13166581 from channel name: x_coordinate
['-----------------------------------------------------------------------------------------------------------------------', 'The simulation duration should be at least: 0.600 seconds', 'The actual simulation duration is: 0.650 seconds']
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_s_mm_ton.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_Forman_testbed_ID.def [READ DYNASAUR DEF] read data/metadata/00_THUMS_v4.1_50M_IDs.def [READ DYNASAUR DEF] done [READ BINOUT] read glstat data ... [READ BINOUT] done reading glstat! [READ BINOUT] read matsum data ... [WARNING] binout keys: kinetic_energy max_shell_mass date version build_id time legend brick_id total_kinetic_energy z_momentum x_rbvelocity eroded_kinetic_energy mass legend_ids z_rbvelocity y_momentum ids revision max_brick_mass y_rbvelocity hourglass_energy shell_id x_momentum eroded_internal_energy title internal_energy [WARNING] Your definition file tries to access the following undefined keys : x_acceleration z_acceleration y_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 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] elout: initialize stress shell [READ BINOUT] assign stresses for shell elements [READ BINOUT] extract data took : 12.79320740699768 [READ BINOUT] calc eigenvalue [READ BINOUT] calc eigenvalues took : 4.6755900382995605 [READ BINOUT] assign strains for shell elements [READ BINOUT] elout: initialize strain shell [READ BINOUT] extract data took : 16.433340311050415 [READ BINOUT] calc eigenvalue [READ BINOUT] calc eigenvalues took : 4.717860460281372 [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 81000000 from channel name: mass [DATA] read id 81000100 from channel name: mass [DATA] read id 81000101 from channel name: mass [DATA] read id 81000102 from channel name: mass [DATA] read id 81000200 from channel name: mass [DATA] read id 81000300 from channel name: mass [DATA] read id 81000301 from channel name: mass [DATA] read id 81000400 from channel name: mass [DATA] read id 81000401 from channel name: mass [DATA] read id 81000500 from channel name: mass [DATA] read id 81000501 from channel name: mass [DATA] read id 81000600 from channel name: mass [DATA] read id 81000700 from channel name: mass [DATA] read id 81000701 from channel name: mass [DATA] read id 81000702 from channel name: mass [DATA] read id 81000800 from channel name: mass [DATA] read id 81000900 from channel name: mass [DATA] read id 81000901 from channel name: mass [DATA] read id 81000902 from channel name: mass [DATA] read id 81001000 from channel name: mass [DATA] read id 81001100 from channel name: mass [DATA] read id 81001101 from channel name: mass [DATA] read id 81001200 from channel name: mass [DATA] read id 81001300 from channel name: mass [DATA] read id 81001301 from channel name: mass [DATA] read id 81001400 from channel name: mass [DATA] read id 81001401 from channel name: mass [DATA] read id 81001500 from channel name: mass [DATA] read id 81001501 from channel name: mass [DATA] read id 81001600 from channel name: mass [DATA] read id 81001601 from channel name: mass [DATA] read id 81001700 from channel name: mass [DATA] read id 81001701 from channel name: mass [DATA] read id 81001800 from channel name: mass [DATA] read id 81001801 from channel name: mass [DATA] read id 81001900 from channel name: mass [DATA] read id 81001901 from channel name: mass [DATA] read id 81002000 from channel name: mass [DATA] read id 81002001 from channel name: mass [DATA] read id 81002100 from channel name: mass [DATA] read id 81002101 from channel name: mass [DATA] read id 81002200 from channel name: mass [DATA] read id 81002201 from channel name: mass [DATA] read id 81002300 from channel name: mass [DATA] read id 81002301 from channel name: mass [DATA] read id 81002400 from channel name: mass [DATA] read id 81002401 from channel name: mass [DATA] read id 81002500 from channel name: mass [DATA] read id 81002501 from channel name: mass [DATA] read id 81002600 from channel name: mass [DATA] read id 81002601 from channel name: mass [DATA] read id 81002700 from channel name: mass [DATA] read id 81002701 from channel name: mass [DATA] read id 81002800 from channel name: mass [DATA] read id 81002801 from channel name: mass [DATA] read id 81002900 from channel name: mass [DATA] read id 81002901 from channel name: mass [DATA] read id 81003000 from channel name: mass [DATA] read id 81003001 from channel name: mass [DATA] read id 81003100 from channel name: mass [DATA] read id 81003101 from channel name: mass [DATA] read id 81003200 from channel name: mass [DATA] read id 81003201 from channel name: mass [DATA] read id 81003300 from channel name: mass [DATA] read id 81003301 from channel name: mass [DATA] read id 81003400 from channel name: mass [DATA] read id 81003401 from channel name: mass [DATA] read id 81003500 from channel name: mass [DATA] read id 81003501 from channel name: mass [DATA] read id 81003600 from channel name: mass [DATA] read id 81003601 from channel name: mass [DATA] read id 81003700 from channel name: mass [DATA] read id 81003701 from channel name: mass [DATA] read id 81100000 from channel name: mass [DATA] read id 81100001 from channel name: mass [DATA] read id 81100100 from channel name: mass [DATA] read id 81100101 from channel name: mass [DATA] read id 81100200 from channel name: mass [DATA] read id 81100201 from channel name: mass [DATA] read id 81100300 from channel name: mass [DATA] read id 81100301 from channel name: mass [DATA] read id 81100400 from channel name: mass [DATA] read id 81100401 from channel name: mass [DATA] read id 81100501 from channel name: mass [DATA] read id 81100600 from channel name: mass [DATA] read id 81100601 from channel name: mass [DATA] read id 81100701 from channel name: mass [DATA] read id 81100801 from channel name: mass [DATA] read id 81100901 from channel name: mass [DATA] read id 81101001 from channel name: mass [DATA] read id 81101101 from channel name: mass [DATA] read id 81101201 from channel name: mass [DATA] read id 81101202 from channel name: mass [DATA] read id 81101203 from channel name: mass [DATA] read id 81101204 from channel name: mass [DATA] read id 81101301 from channel name: mass [DATA] read id 81101302 from channel name: mass [DATA] read id 81101303 from channel name: mass [DATA] read id 81101304 from channel name: mass [DATA] read id 81101305 from channel name: mass [DATA] read id 81101306 from channel name: mass [DATA] read id 81101307 from channel name: mass [DATA] read id 81101308 from channel name: mass [DATA] read id 81101309 from channel name: mass [DATA] read id 81200001 from channel name: mass [DATA] read id 81200100 from channel name: mass [DATA] read id 81200101 from channel name: mass [DATA] read id 81200200 from channel name: mass [DATA] read id 81200201 from channel name: mass [DATA] read id 81200300 from channel name: mass [DATA] read id 81200301 from channel name: mass [DATA] read id 81200401 from channel name: mass [DATA] read id 81200500 from channel name: mass [DATA] read id 81200501 from channel name: mass [DATA] read id 81200601 from channel name: mass [DATA] read id 81200700 from channel name: mass [DATA] read id 81200701 from channel name: mass [DATA] read id 81200800 from channel name: mass [DATA] read id 81200801 from channel name: mass [DATA] read id 81200900 from channel name: mass [DATA] read id 81200901 from channel name: mass [DATA] read id 81201000 from channel name: mass [DATA] read id 81201001 from channel name: mass [DATA] read id 81201101 from channel name: mass [DATA] read id 81201200 from channel name: mass [DATA] read id 81201201 from channel name: mass [DATA] read id 81201301 from channel name: mass [DATA] read id 81201400 from channel name: mass [DATA] read id 81201401 from channel name: mass [DATA] read id 82000000 from channel name: mass [DATA] read id 82000100 from channel name: mass [DATA] read id 82000101 from channel name: mass [DATA] read id 82000102 from channel name: mass [DATA] read id 82000200 from channel name: mass [DATA] read id 82000300 from channel name: mass [DATA] read id 82000301 from channel name: mass [DATA] read id 82000400 from channel name: mass [DATA] read id 82000401 from channel name: mass [DATA] read id 82000500 from channel name: mass [DATA] read id 82000501 from channel name: mass [DATA] read id 82000600 from channel name: mass [DATA] read id 82000700 from channel name: mass [DATA] read id 82000701 from channel name: mass [DATA] read id 82000702 from channel name: mass [DATA] read id 82000800 from channel name: mass [DATA] read id 82000900 from channel name: mass [DATA] read id 82000901 from channel name: mass [DATA] read id 82000902 from channel name: mass [DATA] read id 82001000 from channel name: mass [DATA] read id 82001100 from channel name: mass [DATA] read id 82001101 from channel name: mass [DATA] read id 82001200 from channel name: mass [DATA] read id 82001300 from channel name: mass [DATA] read id 82001301 from channel name: mass [DATA] read id 82001400 from channel name: mass [DATA] read id 82001401 from channel name: mass [DATA] read id 82001500 from channel name: mass [DATA] read id 82001501 from channel name: mass [DATA] read id 82001600 from channel name: mass [DATA] read id 82001601 from channel name: mass [DATA] read id 82001700 from channel name: mass [DATA] read id 82001701 from channel name: mass [DATA] read id 82001800 from channel name: mass [DATA] read id 82001801 from channel name: mass [DATA] read id 82001900 from channel name: mass [DATA] read id 82001901 from channel name: mass [DATA] read id 82002000 from channel name: mass [DATA] read id 82002001 from channel name: mass [DATA] read id 82002100 from channel name: mass [DATA] read id 82002101 from channel name: mass [DATA] read id 82002200 from channel name: mass [DATA] read id 82002201 from channel name: mass [DATA] read id 82002300 from channel name: mass [DATA] read id 82002301 from channel name: mass [DATA] read id 82002400 from channel name: mass [DATA] read id 82002401 from channel name: mass [DATA] read id 82002500 from channel name: mass [DATA] read id 82002501 from channel name: mass [DATA] read id 82002600 from channel name: mass [DATA] read id 82002601 from channel name: mass [DATA] read id 82002700 from channel name: mass [DATA] read id 82002701 from channel name: mass [DATA] read id 82002800 from channel name: mass [DATA] read id 82002801 from channel name: mass [DATA] read id 82002900 from channel name: mass [DATA] read id 82002901 from channel name: mass [DATA] read id 82003000 from channel name: mass [DATA] read id 82003001 from channel name: mass [DATA] read id 82003100 from channel name: mass [DATA] read id 82003101 from channel name: mass [DATA] read id 82003200 from channel name: mass [DATA] read id 82003201 from channel name: mass [DATA] read id 82003300 from channel name: mass [DATA] read id 82003301 from channel name: mass [DATA] read id 82003400 from channel name: mass [DATA] read id 82003401 from channel name: mass [DATA] read id 82003500 from channel name: mass [DATA] read id 82003501 from channel name: mass [DATA] read id 82003600 from channel name: mass [DATA] read id 82003601 from channel name: mass [DATA] read id 82003700 from channel name: mass [DATA] read id 82003701 from channel name: mass [DATA] read id 82100000 from channel name: mass [DATA] read id 82100001 from channel name: mass [DATA] read id 82100100 from channel name: mass [DATA] read id 82100101 from channel name: mass [DATA] read id 82100200 from channel name: mass [DATA] read id 82100201 from channel name: mass [DATA] read id 82100300 from channel name: mass [DATA] read id 82100301 from channel name: mass [DATA] read id 82100400 from channel name: mass [DATA] read id 82100401 from channel name: mass [DATA] read id 82100501 from channel name: mass [DATA] read id 82100600 from channel name: mass [DATA] read id 82100601 from channel name: mass [DATA] read id 82100701 from channel name: mass [DATA] read id 82100801 from channel name: mass [DATA] read id 82100901 from channel name: mass [DATA] read id 82101001 from channel name: mass [DATA] read id 82101101 from channel name: mass [DATA] read id 82101201 from channel name: mass [DATA] read id 82101202 from channel name: mass [DATA] read id 82101203 from channel name: mass [DATA] read id 82101204 from channel name: mass [DATA] read id 82101301 from channel name: mass [DATA] read id 82101302 from channel name: mass [DATA] read id 82101303 from channel name: mass [DATA] read id 82101304 from channel name: mass [DATA] read id 82101305 from channel name: mass [DATA] read id 82101306 from channel name: mass [DATA] read id 82101307 from channel name: mass [DATA] read id 82101308 from channel name: mass [DATA] read id 82101309 from channel name: mass [DATA] read id 82200001 from channel name: mass [DATA] read id 82200100 from channel name: mass [DATA] read id 82200101 from channel name: mass [DATA] read id 82200200 from channel name: mass [DATA] read id 82200201 from channel name: mass [DATA] read id 82200300 from channel name: mass [DATA] read id 82200301 from channel name: mass [DATA] read id 82200401 from channel name: mass [DATA] read id 82200500 from channel name: mass [DATA] read id 82200501 from channel name: mass [DATA] read id 82200601 from channel name: mass [DATA] read id 82200700 from channel name: mass [DATA] read id 82200701 from channel name: mass [DATA] read id 82200800 from channel name: mass [DATA] read id 82200801 from channel name: mass [DATA] read id 82200900 from channel name: mass [DATA] read id 82200901 from channel name: mass [DATA] read id 82201000 from channel name: mass [DATA] read id 82201001 from channel name: mass [DATA] read id 82201101 from channel name: mass [DATA] read id 82201200 from channel name: mass [DATA] read id 82201201 from channel name: mass [DATA] read id 82201301 from channel name: mass [DATA] read id 82201400 from channel name: mass [DATA] read id 82201401 from channel name: mass [DATA] read id 83000100 from channel name: mass [DATA] read id 83000101 from channel name: mass [DATA] read id 83000200 from channel name: mass [DATA] read id 83000201 from channel name: mass [DATA] read id 83000202 from channel name: mass [DATA] read id 83000203 from channel name: mass [DATA] read id 83000204 from channel name: mass [DATA] read id 83000205 from channel name: mass [DATA] read id 83000206 from channel name: mass [DATA] read id 83000207 from channel name: mass [DATA] read id 83000208 from channel name: mass [DATA] read id 83000209 from channel name: mass [DATA] read id 83000300 from channel name: mass [DATA] read id 83100100 from channel name: mass [DATA] read id 83100200 from channel name: mass [DATA] read id 83100300 from channel name: mass [DATA] read id 83100400 from channel name: mass [DATA] read id 83100500 from channel name: mass [DATA] read id 83100600 from channel name: mass [DATA] read id 83100700 from channel name: mass [DATA] read id 83100800 from channel name: mass [DATA] read id 83200100 from channel name: mass [DATA] read id 83200101 from channel name: mass [DATA] read id 83200102 from channel name: mass [DATA] read id 83500100 from channel name: mass [DATA] read id 83500101 from channel name: mass [DATA] read id 83500200 from channel name: mass [DATA] read id 83500201 from channel name: mass [DATA] read id 83500202 from channel name: mass [DATA] read id 83500203 from channel name: mass [DATA] read id 83500204 from channel name: mass [DATA] read id 83500205 from channel name: mass [DATA] read id 83500206 from channel name: mass [DATA] read id 83500207 from channel name: mass [DATA] read id 83500208 from channel name: mass [DATA] read id 83500209 from channel name: mass [DATA] read id 83500300 from channel name: mass [DATA] read id 83600100 from channel name: mass [DATA] read id 83600200 from channel name: mass [DATA] read id 83600300 from channel name: mass [DATA] read id 83600400 from channel name: mass [DATA] read id 83600500 from channel name: mass [DATA] read id 83600600 from channel name: mass [DATA] read id 83600700 from channel name: mass [DATA] read id 83600800 from channel name: mass [DATA] read id 83700100 from channel name: mass [DATA] read id 83700101 from channel name: mass [DATA] read id 83700102 from channel name: mass [DATA] read id 84000100 from channel name: mass [DATA] read id 84000200 from channel name: mass [DATA] read id 84000300 from channel name: mass [DATA] read id 84000400 from channel name: mass [DATA] read id 84000500 from channel name: mass [DATA] read id 84000600 from channel name: mass [DATA] read id 84000700 from channel name: mass [DATA] read id 84000800 from channel name: mass [DATA] read id 84000900 from channel name: mass [DATA] read id 84100100 from channel name: mass [DATA] read id 84100101 from channel name: mass [DATA] read id 84100200 from channel name: mass [DATA] read id 84100201 from channel name: mass [DATA] read id 84100300 from channel name: mass [DATA] read id 84100301 from channel name: mass [DATA] read id 84100400 from channel name: mass [DATA] read id 84100500 from channel name: mass [DATA] read id 84200100 from channel name: mass [DATA] read id 84200101 from channel name: mass [DATA] read id 84200200 from channel name: mass [DATA] read id 84200201 from channel name: mass [DATA] read id 84200300 from channel name: mass [DATA] read id 84200301 from channel name: mass [DATA] read id 84200400 from channel name: mass [DATA] read id 84200401 from channel name: mass [DATA] read id 84200500 from channel name: mass [DATA] read id 84200501 from channel name: mass [DATA] read id 84200600 from channel name: mass [DATA] read id 84200601 from channel name: mass [DATA] read id 84200700 from channel name: mass [DATA] read id 84200701 from channel name: mass [DATA] read id 84200800 from channel name: mass [DATA] read id 84200801 from channel name: mass [DATA] read id 84200802 from channel name: mass [DATA] read id 84200900 from channel name: mass [DATA] read id 84200901 from channel name: mass [DATA] read id 84201000 from channel name: mass [DATA] read id 84201001 from channel name: mass [DATA] read id 84201002 from channel name: mass [DATA] read id 84201003 from channel name: mass [DATA] read id 84201004 from channel name: mass [DATA] read id 84201100 from channel name: mass [DATA] read id 84201101 from channel name: mass [DATA] read id 84201200 from channel name: mass [DATA] read id 84300100 from channel name: mass [DATA] read id 84300101 from channel name: mass [DATA] read id 84300200 from channel name: mass [DATA] read id 84300201 from channel name: mass [DATA] read id 84300300 from channel name: mass [DATA] read id 84300301 from channel name: mass [DATA] read id 84300400 from channel name: mass [DATA] read id 84300401 from channel name: mass [DATA] read id 84300500 from channel name: mass [DATA] read id 84300501 from channel name: mass [DATA] read id 84300502 from channel name: mass [DATA] read id 84300503 from channel name: mass [DATA] read id 84300600 from channel name: mass [DATA] read id 84300601 from channel name: mass [DATA] read id 84300602 from channel name: mass [DATA] read id 84300603 from channel name: mass [DATA] read id 85000000 from channel name: mass [DATA] read id 85000100 from channel name: mass [DATA] read id 85000101 from channel name: mass [DATA] read id 85000102 from channel name: mass [DATA] read id 85000200 from channel name: mass [DATA] read id 85000300 from channel name: mass [DATA] read id 85000301 from channel name: mass [DATA] read id 85000302 from channel name: mass [DATA] read id 85000400 from channel name: mass [DATA] read id 85000500 from channel name: mass [DATA] read id 85000501 from channel name: mass [DATA] read id 85000502 from channel name: mass [DATA] read id 85000600 from channel name: mass [DATA] read id 85000601 from channel name: mass [DATA] read id 85000700 from channel name: mass [DATA] read id 85000701 from channel name: mass [DATA] read id 85000800 from channel name: mass [DATA] read id 85000801 from channel name: mass [DATA] read id 85000900 from channel name: mass [DATA] read id 85000901 from channel name: mass [DATA] read id 85001000 from channel name: mass [DATA] read id 85001001 from channel name: mass [DATA] read id 85001100 from channel name: mass [DATA] read id 85001101 from channel name: mass [DATA] read id 85001200 from channel name: mass [DATA] read id 85001201 from channel name: mass [DATA] read id 85001300 from channel name: mass [DATA] read id 85001301 from channel name: mass [DATA] read id 85001400 from channel name: mass [DATA] read id 85001401 from channel name: mass [DATA] read id 85001500 from channel name: mass [DATA] read id 85001501 from channel name: mass [DATA] read id 85001600 from channel name: mass [DATA] read id 85001601 from channel name: mass [DATA] read id 85001700 from channel name: mass [DATA] read id 85001701 from channel name: mass [DATA] read id 85001800 from channel name: mass [DATA] read id 85001801 from channel name: mass [DATA] read id 85001900 from channel name: mass [DATA] read id 85001901 from channel name: mass [DATA] read id 85002000 from channel name: mass [DATA] read id 85002001 from channel name: mass [DATA] read id 85002100 from channel name: mass [DATA] read id 85002101 from channel name: mass [DATA] read id 85002200 from channel name: mass [DATA] read id 85002201 from channel name: mass [DATA] read id 85002300 from channel name: mass [DATA] read id 85002301 from channel name: mass [DATA] read id 85002400 from channel name: mass [DATA] read id 85002401 from channel name: mass [DATA] read id 85002500 from channel name: mass [DATA] read id 85002501 from channel name: mass [DATA] read id 85002600 from channel name: mass [DATA] read id 85002601 from channel name: mass [DATA] read id 85002700 from channel name: mass [DATA] read id 85002701 from channel name: mass [DATA] read id 85002800 from channel name: mass [DATA] read id 85002801 from channel name: mass [DATA] read id 85002900 from channel name: mass [DATA] read id 85002901 from channel name: mass [DATA] read id 85003000 from channel name: mass [DATA] read id 85003001 from channel name: mass [DATA] read id 85003100 from channel name: mass [DATA] read id 85003101 from channel name: mass [DATA] read id 85003200 from channel name: mass [DATA] read id 85003201 from channel name: mass [DATA] read id 85100001 from channel name: mass [DATA] read id 85100101 from channel name: mass [DATA] read id 85100201 from channel name: mass [DATA] read id 85100301 from channel name: mass [DATA] read id 85100401 from channel name: mass [DATA] read id 85100501 from channel name: mass [DATA] read id 85100601 from channel name: mass [DATA] read id 85100701 from channel name: mass [DATA] read id 85100801 from channel name: mass [DATA] read id 85100901 from channel name: mass [DATA] read id 85101001 from channel name: mass [DATA] read id 85101101 from channel name: mass [DATA] read id 85200001 from channel name: mass [DATA] read id 85200100 from channel name: mass [DATA] read id 85200101 from channel name: mass [DATA] read id 85200200 from channel name: mass [DATA] read id 85200201 from channel name: mass [DATA] read id 85200301 from channel name: mass [DATA] read id 85200400 from channel name: mass [DATA] read id 85200401 from channel name: mass [DATA] read id 85200501 from channel name: mass [DATA] read id 85200600 from channel name: mass [DATA] read id 85200601 from channel name: mass [DATA] read id 85200700 from channel name: mass [DATA] read id 85200701 from channel name: mass [DATA] read id 85200801 from channel name: mass [DATA] read id 85200900 from channel name: mass [DATA] read id 85200901 from channel name: mass [DATA] read id 85201001 from channel name: mass [DATA] read id 85201100 from channel name: mass [DATA] read id 85201101 from channel name: mass [DATA] read id 86000000 from channel name: mass [DATA] read id 86000100 from channel name: mass [DATA] read id 86000101 from channel name: mass [DATA] read id 86000102 from channel name: mass [DATA] read id 86000200 from channel name: mass [DATA] read id 86000300 from channel name: mass [DATA] read id 86000301 from channel name: mass [DATA] read id 86000302 from channel name: mass [DATA] read id 86000400 from channel name: mass [DATA] read id 86000500 from channel name: mass [DATA] read id 86000501 from channel name: mass [DATA] read id 86000502 from channel name: mass [DATA] read id 86000600 from channel name: mass [DATA] read id 86000601 from channel name: mass [DATA] read id 86000700 from channel name: mass [DATA] read id 86000701 from channel name: mass [DATA] read id 86000800 from channel name: mass [DATA] read id 86000801 from channel name: mass [DATA] read id 86000900 from channel name: mass [DATA] read id 86000901 from channel name: mass [DATA] read id 86001000 from channel name: mass [DATA] read id 86001001 from channel name: mass [DATA] read id 86001100 from channel name: mass [DATA] read id 86001101 from channel name: mass [DATA] read id 86001200 from channel name: mass [DATA] read id 86001201 from channel name: mass [DATA] read id 86001300 from channel name: mass [DATA] read id 86001301 from channel name: mass [DATA] read id 86001400 from channel name: mass [DATA] read id 86001401 from channel name: mass [DATA] read id 86001500 from channel name: mass [DATA] read id 86001501 from channel name: mass [DATA] read id 86001600 from channel name: mass [DATA] read id 86001601 from channel name: mass [DATA] read id 86001700 from channel name: mass [DATA] read id 86001701 from channel name: mass [DATA] read id 86001800 from channel name: mass [DATA] read id 86001801 from channel name: mass [DATA] read id 86001900 from channel name: mass [DATA] read id 86001901 from channel name: mass [DATA] read id 86002000 from channel name: mass [DATA] read id 86002001 from channel name: mass [DATA] read id 86002100 from channel name: mass [DATA] read id 86002101 from channel name: mass [DATA] read id 86002200 from channel name: mass [DATA] read id 86002201 from channel name: mass [DATA] read id 86002300 from channel name: mass [DATA] read id 86002301 from channel name: mass [DATA] read id 86002400 from channel name: mass [DATA] read id 86002401 from channel name: mass [DATA] read id 86002500 from channel name: mass [DATA] read id 86002501 from channel name: mass [DATA] read id 86002600 from channel name: mass [DATA] read id 86002601 from channel name: mass [DATA] read id 86002700 from channel name: mass [DATA] read id 86002701 from channel name: mass [DATA] read id 86002800 from channel name: mass [DATA] read id 86002801 from channel name: mass [DATA] read id 86002900 from channel name: mass [DATA] read id 86002901 from channel name: mass [DATA] read id 86003000 from channel name: mass [DATA] read id 86003001 from channel name: mass [DATA] read id 86003100 from channel name: mass [DATA] read id 86003101 from channel name: mass [DATA] read id 86003200 from channel name: mass [DATA] read id 86003201 from channel name: mass [DATA] read id 86100001 from channel name: mass [DATA] read id 86100101 from channel name: mass [DATA] read id 86100201 from channel name: mass [DATA] read id 86100301 from channel name: mass [DATA] read id 86100401 from channel name: mass [DATA] read id 86100501 from channel name: mass [DATA] read id 86100601 from channel name: mass [DATA] read id 86100701 from channel name: mass [DATA] read id 86100801 from channel name: mass [DATA] read id 86100901 from channel name: mass [DATA] read id 86101001 from channel name: mass [DATA] read id 86101101 from channel name: mass [DATA] read id 86200001 from channel name: mass [DATA] read id 86200100 from channel name: mass [DATA] read id 86200101 from channel name: mass [DATA] read id 86200200 from channel name: mass [DATA] read id 86200201 from channel name: mass [DATA] read id 86200301 from channel name: mass [DATA] read id 86200400 from channel name: mass [DATA] read id 86200401 from channel name: mass [DATA] read id 86200501 from channel name: mass [DATA] read id 86200600 from channel name: mass [DATA] read id 86200601 from channel name: mass [DATA] read id 86200700 from channel name: mass [DATA] read id 86200701 from channel name: mass [DATA] read id 86200801 from channel name: mass [DATA] read id 86200900 from channel name: mass [DATA] read id 86200901 from channel name: mass [DATA] read id 86201001 from channel name: mass [DATA] read id 86201100 from channel name: mass [DATA] read id 86201101 from channel name: mass [DATA] read id 87000100 from channel name: mass [DATA] read id 87000101 from channel name: mass [DATA] read id 87000200 from channel name: mass [DATA] read id 87000201 from channel name: mass [DATA] read id 87000300 from channel name: mass [DATA] read id 87000301 from channel name: mass [DATA] read id 87000400 from channel name: mass [DATA] read id 87000401 from channel name: mass [DATA] read id 87000500 from channel name: mass [DATA] read id 87000501 from channel name: mass [DATA] read id 87000600 from channel name: mass [DATA] read id 87000601 from channel name: mass [DATA] read id 87000700 from channel name: mass [DATA] read id 87000701 from channel name: mass [DATA] read id 87000800 from channel name: mass [DATA] read id 87000801 from channel name: mass [DATA] read id 87000900 from channel name: mass [DATA] read id 87000901 from channel name: mass [DATA] read id 87001000 from channel name: mass [DATA] read id 87001001 from channel name: mass [DATA] read id 87001100 from channel name: mass [DATA] read id 87001101 from channel name: mass [DATA] read id 87001200 from channel name: mass [DATA] read id 87001201 from channel name: mass [DATA] read id 87001300 from channel name: mass [DATA] read id 87001301 from channel name: mass [DATA] read id 87100100 from channel name: mass [DATA] read id 87100200 from channel name: mass [DATA] read id 87100300 from channel name: mass [DATA] read id 87100400 from channel name: mass [DATA] read id 87100500 from channel name: mass [DATA] read id 87100600 from channel name: mass [DATA] read id 87200100 from channel name: mass [DATA] read id 87200101 from channel name: mass [DATA] read id 87200102 from channel name: mass [DATA] read id 87200200 from channel name: mass [DATA] read id 87200300 from channel name: mass [DATA] read id 87200400 from channel name: mass [DATA] read id 87200500 from channel name: mass [DATA] read id 87200600 from channel name: mass [DATA] read id 87200601 from channel name: mass [DATA] read id 87200602 from channel name: mass [DATA] read id 87200603 from channel name: mass [DATA] read id 87200604 from channel name: mass [DATA] read id 87200605 from channel name: mass [DATA] read id 87200606 from channel name: mass [DATA] read id 87200607 from channel name: mass [DATA] read id 87200608 from channel name: mass [DATA] read id 87200700 from channel name: mass [DATA] read id 87200701 from channel name: mass [DATA] read id 87200702 from channel name: mass [DATA] read id 87200703 from channel name: mass [DATA] read id 87200704 from channel name: mass [DATA] read id 87200705 from channel name: mass [DATA] read id 87200800 from channel name: mass [DATA] read id 87200801 from channel name: mass [DATA] read id 87200802 from channel name: mass [DATA] read id 87200803 from channel name: mass [DATA] read id 87200900 from channel name: mass [DATA] read id 87200901 from channel name: mass [DATA] read id 87200902 from channel name: mass [DATA] read id 87200903 from channel name: mass [DATA] read id 87200904 from channel name: mass [DATA] read id 87201000 from channel name: mass [DATA] read id 87201100 from channel name: mass [DATA] read id 87201200 from channel name: mass [DATA] read id 87201300 from channel name: mass [DATA] read id 87201301 from channel name: mass [DATA] read id 87201302 from channel name: mass [DATA] read id 87201303 from channel name: mass [DATA] read id 87201400 from channel name: mass [DATA] read id 87201401 from channel name: mass [DATA] read id 87201402 from channel name: mass [DATA] read id 87201403 from channel name: mass [DATA] read id 87201404 from channel name: mass [DATA] read id 87201405 from channel name: mass [DATA] read id 87201406 from channel name: mass [DATA] read id 87201500 from channel name: mass [DATA] read id 87500100 from channel name: mass [DATA] read id 87500101 from channel name: mass [DATA] read id 87500200 from channel name: mass [DATA] read id 87500201 from channel name: mass [DATA] read id 87500300 from channel name: mass [DATA] read id 87500301 from channel name: mass [DATA] read id 87500400 from channel name: mass [DATA] read id 87500401 from channel name: mass [DATA] read id 87500500 from channel name: mass [DATA] read id 87500501 from channel name: mass [DATA] read id 87500600 from channel name: mass [DATA] read id 87500601 from channel name: mass [DATA] read id 87500700 from channel name: mass [DATA] read id 87500701 from channel name: mass [DATA] read id 87500800 from channel name: mass [DATA] read id 87500801 from channel name: mass [DATA] read id 87500900 from channel name: mass [DATA] read id 87500901 from channel name: mass [DATA] read id 87501000 from channel name: mass [DATA] read id 87501001 from channel name: mass [DATA] read id 87501100 from channel name: mass [DATA] read id 87501101 from channel name: mass [DATA] read id 87501200 from channel name: mass [DATA] read id 87501201 from channel name: mass [DATA] read id 87501300 from channel name: mass [DATA] read id 87501301 from channel name: mass [DATA] read id 87600100 from channel name: mass [DATA] read id 87600200 from channel name: mass [DATA] read id 87600300 from channel name: mass [DATA] read id 87600400 from channel name: mass [DATA] read id 87600500 from channel name: mass [DATA] read id 87600600 from channel name: mass [DATA] read id 87700100 from channel name: mass [DATA] read id 87700101 from channel name: mass [DATA] read id 87700102 from channel name: mass [DATA] read id 87700200 from channel name: mass [DATA] read id 87700300 from channel name: mass [DATA] read id 87700400 from channel name: mass [DATA] read id 87700500 from channel name: mass [DATA] read id 87700600 from channel name: mass [DATA] read id 87700601 from channel name: mass [DATA] read id 87700602 from channel name: mass [DATA] read id 87700603 from channel name: mass [DATA] read id 87700604 from channel name: mass [DATA] read id 87700605 from channel name: mass [DATA] read id 87700606 from channel name: mass [DATA] read id 87700607 from channel name: mass [DATA] read id 87700608 from channel name: mass [DATA] read id 87700700 from channel name: mass [DATA] read id 87700701 from channel name: mass [DATA] read id 87700702 from channel name: mass [DATA] read id 87700703 from channel name: mass [DATA] read id 87700704 from channel name: mass [DATA] read id 87700705 from channel name: mass [DATA] read id 87700800 from channel name: mass [DATA] read id 87700801 from channel name: mass [DATA] read id 87700802 from channel name: mass [DATA] read id 87700803 from channel name: mass [DATA] read id 87700900 from channel name: mass [DATA] read id 87700901 from channel name: mass [DATA] read id 87700902 from channel name: mass [DATA] read id 87700903 from channel name: mass [DATA] read id 87700904 from channel name: mass [DATA] read id 87701000 from channel name: mass [DATA] read id 87701100 from channel name: mass [DATA] read id 87701200 from channel name: mass [DATA] read id 87701300 from channel name: mass [DATA] read id 87701301 from channel name: mass [DATA] read id 87701302 from channel name: mass [DATA] read id 87701303 from channel name: mass [DATA] read id 87701400 from channel name: mass [DATA] read id 87701401 from channel name: mass [DATA] read id 87701402 from channel name: mass [DATA] read id 87701403 from channel name: mass [DATA] read id 87701404 from channel name: mass [DATA] read id 87701405 from channel name: mass [DATA] read id 87701406 from channel name: mass [DATA] read id 87701500 from channel name: mass [DATA] read id 88000001 from channel name: mass [DATA] read id 88000002 from channel name: mass [DATA] read id 88000003 from channel name: mass [DATA] read id 88000004 from channel name: mass [DATA] read id 88000005 from channel name: mass [DATA] read id 88000006 from channel name: mass [DATA] read id 88000007 from channel name: mass [DATA] read id 88000008 from channel name: mass [DATA] read id 88000009 from channel name: mass [DATA] read id 88000010 from channel name: mass [DATA] read id 88000011 from channel name: mass [DATA] read id 88000012 from channel name: mass [DATA] read id 88000013 from channel name: mass [DATA] read id 88000014 from channel name: mass [DATA] read id 88000015 from channel name: mass [DATA] read id 88000016 from channel name: mass [DATA] read id 88000017 from channel name: mass [DATA] read id 88000018 from channel name: mass [DATA] read id 88000019 from channel name: mass [DATA] read id 88000020 from channel name: mass [DATA] read id 88000021 from channel name: mass [DATA] read id 88000022 from channel name: mass [DATA] read id 88000023 from channel name: mass [DATA] read id 88000024 from channel name: mass [DATA] read id 88000025 from channel name: mass [DATA] read id 88000026 from channel name: mass [DATA] read id 88000027 from channel name: mass [DATA] read id 88000028 from channel name: mass [DATA] read id 88000029 from channel name: mass [DATA] read id 88000030 from channel name: mass [DATA] read id 88000031 from channel name: mass [DATA] read id 88000032 from channel name: mass [DATA] read id 88000033 from channel name: mass [DATA] read id 88000034 from channel name: mass [DATA] read id 88000035 from channel name: mass [DATA] read id 88000036 from channel name: mass [DATA] read id 88000037 from channel name: mass [DATA] read id 88000038 from channel name: mass [DATA] read id 88000039 from channel name: mass [DATA] read id 88000040 from channel name: mass [DATA] read id 88000041 from channel name: mass [DATA] read id 88000042 from channel name: mass [DATA] read id 88000043 from channel name: mass [DATA] read id 88000044 from channel name: mass [DATA] read id 88000045 from channel name: mass [DATA] read id 88000046 from channel name: mass [DATA] read id 88000047 from channel name: mass [DATA] read id 88000048 from channel name: mass [DATA] read id 88000049 from channel name: mass [DATA] read id 88000050 from channel name: mass [DATA] read id 88000051 from channel name: mass [DATA] read id 88000052 from channel name: mass [DATA] read id 88000053 from channel name: mass [DATA] read id 88000054 from channel name: mass [DATA] read id 88000055 from channel name: mass [DATA] read id 88000056 from channel name: mass [DATA] read id 88000057 from channel name: mass [DATA] read id 88000058 from channel name: mass [DATA] read id 88000059 from channel name: mass [DATA] read id 88000060 from channel name: mass [DATA] read id 88000061 from channel name: mass [DATA] read id 88000062 from channel name: mass [DATA] read id 88000063 from channel name: mass [DATA] read id 88000064 from channel name: mass [DATA] read id 88000065 from channel name: mass [DATA] read id 88000066 from channel name: mass [DATA] read id 88000067 from channel name: mass [DATA] read id 88000068 from channel name: mass [DATA] read id 88000069 from channel name: mass [DATA] read id 88000070 from channel name: mass [DATA] read id 88000071 from channel name: mass [DATA] read id 88000072 from channel name: mass [DATA] read id 88000073 from channel name: mass [DATA] read id 88000074 from channel name: mass [DATA] read id 88000075 from channel name: mass [DATA] read id 88000076 from channel name: mass [DATA] read id 88000077 from channel name: mass [DATA] read id 88000078 from channel name: mass [DATA] read id 88000079 from channel name: mass [DATA] read id 88000080 from channel name: mass [DATA] read id 88000081 from channel name: mass [DATA] read id 88000082 from channel name: mass [DATA] read id 88000083 from channel name: mass [DATA] read id 88000084 from channel name: mass [DATA] read id 88000085 from channel name: mass [DATA] read id 88000086 from channel name: mass [DATA] read id 88000087 from channel name: mass [DATA] read id 88000088 from channel name: mass [DATA] read id 88000089 from channel name: mass [DATA] read id 88000090 from channel name: mass [DATA] read id 88000091 from channel name: mass [DATA] read id 88000092 from channel name: mass [DATA] read id 88000093 from channel name: mass [DATA] read id 88000094 from channel name: mass [DATA] read id 88000095 from channel name: mass [DATA] read id 88000096 from channel name: mass [DATA] read id 88000097 from channel name: mass [DATA] read id 88000098 from channel name: mass [DATA] read id 88000099 from channel name: mass [DATA] read id 88000100 from channel name: mass [DATA] read id 88000101 from channel name: mass [DATA] read id 88000102 from channel name: mass [DATA] read id 88000103 from channel name: mass [DATA] read id 88000104 from channel name: mass [DATA] read id 88000105 from channel name: mass [DATA] read id 88000106 from channel name: mass [DATA] read id 88000107 from channel name: mass [DATA] read id 88000109 from channel name: mass [DATA] read id 88000110 from channel name: mass [DATA] read id 88000111 from channel name: mass [DATA] read id 88000112 from channel name: mass [DATA] read id 88000113 from channel name: mass [DATA] read id 88000114 from channel name: mass [DATA] read id 88000115 from channel name: mass [DATA] read id 88000116 from channel name: mass [DATA] read id 88000117 from channel name: mass [DATA] read id 88000118 from channel name: mass [DATA] read id 88000119 from channel name: mass [DATA] read id 88000120 from channel name: mass [DATA] read id 88000121 from channel name: mass [DATA] read id 88000122 from channel name: mass [DATA] read id 88000123 from channel name: mass [DATA] read id 88000124 from channel name: mass [DATA] read id 88000125 from channel name: mass [DATA] read id 88000126 from channel name: mass [DATA] read id 88000127 from channel name: mass [DATA] read id 88000129 from channel name: mass [DATA] read id 88000130 from channel name: mass [DATA] read id 88000131 from channel name: mass [DATA] read id 88000132 from channel name: mass [DATA] read id 88000133 from channel name: mass [DATA] read id 88000134 from channel name: mass [DATA] read id 88000135 from channel name: mass [DATA] read id 88000136 from channel name: mass [DATA] read id 88000137 from channel name: mass [DATA] read id 88000138 from channel name: mass [DATA] read id 88000139 from channel name: mass [DATA] read id 88000140 from channel name: mass [DATA] read id 88000141 from channel name: mass [DATA] read id 88000142 from channel name: mass [DATA] read id 88000143 from channel name: mass [DATA] read id 88000144 from channel name: mass [DATA] read id 88000145 from channel name: mass [DATA] read id 88000146 from channel name: mass [DATA] read id 88000147 from channel name: mass [DATA] read id 88000148 from channel name: mass [DATA] read id 88000149 from channel name: mass [DATA] read id 88000150 from channel name: mass [DATA] read id 88000151 from channel name: mass [DATA] read id 88000152 from channel name: mass [DATA] read id 88000153 from channel name: mass [DATA] read id 88000154 from channel name: mass [DATA] read id 88000155 from channel name: mass [DATA] read id 88000156 from channel name: mass [DATA] read id 88000157 from channel name: mass [DATA] read id 88000158 from channel name: mass [DATA] read id 88000159 from channel name: mass [DATA] read id 88000160 from channel name: mass [DATA] read id 88000161 from channel name: mass [DATA] read id 88000162 from channel name: mass [DATA] read id 88000163 from channel name: mass [DATA] read id 88000164 from channel name: mass [DATA] read id 88000165 from channel name: mass [DATA] read id 88000166 from channel name: mass [DATA] read id 88000167 from channel name: mass [DATA] read id 88000168 from channel name: mass [DATA] read id 88000169 from channel name: mass [DATA] read id 88000170 from channel name: mass [DATA] read id 88000171 from channel name: mass [DATA] read id 88000172 from channel name: mass [DATA] read id 88000173 from channel name: mass [DATA] read id 88000174 from channel name: mass [DATA] read id 88000175 from channel name: mass [DATA] read id 88000176 from channel name: mass [DATA] read id 88000177 from channel name: mass [DATA] read id 88000178 from channel name: mass [DATA] read id 88000179 from channel name: mass [DATA] read id 88000180 from channel name: mass [DATA] read id 88000181 from channel name: mass [DATA] read id 88000182 from channel name: mass [DATA] read id 88000183 from channel name: mass [DATA] read id 88000184 from channel name: mass [DATA] read id 88000185 from channel name: mass [DATA] read id 88000186 from channel name: mass [DATA] read id 88000187 from channel name: mass [DATA] read id 88000188 from channel name: mass [DATA] read id 88000189 from channel name: mass [DATA] read id 88000190 from channel name: mass [DATA] read id 88000191 from channel name: mass [DATA] read id 88000192 from channel name: mass [DATA] read id 88000193 from channel name: mass [DATA] read id 88000194 from channel name: mass [DATA] read id 88000195 from channel name: mass [DATA] read id 88000196 from channel name: mass [DATA] read id 88000197 from channel name: mass [DATA] read id 88000198 from channel name: mass [DATA] read id 88000199 from channel name: mass [DATA] read id 88000200 from channel name: mass [DATA] read id 88000201 from channel name: mass [DATA] read id 88000202 from channel name: mass [DATA] read id 88000203 from channel name: mass [DATA] read id 88000204 from channel name: mass [DATA] read id 88000205 from channel name: mass [DATA] read id 88000206 from channel name: mass [DATA] read id 88000207 from channel name: mass [DATA] read id 88000208 from channel name: mass [DATA] read id 88000209 from channel name: mass [DATA] read id 88000210 from channel name: mass [DATA] read id 88000211 from channel name: mass [DATA] read id 88000212 from channel name: mass [DATA] read id 88000213 from channel name: mass [DATA] read id 88000214 from channel name: mass [DATA] read id 88000215 from channel name: mass [DATA] read id 88000216 from channel name: mass [DATA] read id 88000217 from channel name: mass [DATA] read id 88000219 from channel name: mass [DATA] read id 88000220 from channel name: mass [DATA] read id 88000221 from channel name: mass [DATA] read id 88000222 from channel name: mass [DATA] read id 88000223 from channel name: mass [DATA] read id 88000224 from channel name: mass [DATA] read id 88000225 from channel name: mass [DATA] read id 88000226 from channel name: mass [DATA] read id 88000227 from channel name: mass [DATA] read id 88000228 from channel name: mass [DATA] read id 88000229 from channel name: mass [DATA] read id 88000230 from channel name: mass [DATA] read id 88000231 from channel name: mass [DATA] read id 88000232 from channel name: mass [DATA] read id 88000233 from channel name: mass [DATA] read id 88000234 from channel name: mass [DATA] read id 88000235 from channel name: mass [DATA] read id 88000236 from channel name: mass [DATA] read id 88000242 from channel name: mass [DATA] read id 88000243 from channel name: mass [DATA] read id 88000244 from channel name: mass [DATA] read id 88000245 from channel name: mass [DATA] read id 88000246 from channel name: mass [DATA] read id 88000247 from channel name: mass [DATA] read id 88000248 from channel name: mass [DATA] read id 88000249 from channel name: mass [DATA] read id 88000250 from channel name: mass [DATA] read id 88000251 from channel name: mass [DATA] read id 88000252 from channel name: mass [DATA] read id 88000253 from channel name: mass [DATA] read id 88000254 from channel name: mass [DATA] read id 88000255 from channel name: mass [DATA] read id 88000256 from channel name: mass [DATA] read id 88000257 from channel name: mass [DATA] read id 88000258 from channel name: mass [DATA] read id 88000259 from channel name: mass [DATA] read id 88000260 from channel name: mass [DATA] read id 88000261 from channel name: mass [DATA] read id 88000262 from channel name: mass [DATA] read id 88000263 from channel name: mass [DATA] read id 88000264 from channel name: mass [DATA] read id 89000100 from channel name: mass [DATA] read id 89000101 from channel name: mass [DATA] read id 89000200 from channel name: mass [DATA] read id 89000201 from channel name: mass [DATA] read id 89000300 from channel name: mass [DATA] read id 89000301 from channel name: mass [DATA] read id 89000400 from channel name: mass [DATA] read id 89000401 from channel name: mass [DATA] read id 89000500 from channel name: mass [DATA] read id 89000501 from channel name: mass [DATA] read id 89000600 from channel name: mass [DATA] read id 89000601 from channel name: mass [DATA] read id 89000700 from channel name: mass [DATA] read id 89000701 from channel name: mass [DATA] read id 89000800 from channel name: mass [DATA] read id 89000801 from channel name: mass [DATA] read id 89000900 from channel name: mass [DATA] read id 89000901 from channel name: mass [DATA] read id 89001000 from channel name: mass [DATA] read id 89001001 from channel name: mass [DATA] read id 89001100 from channel name: mass [DATA] read id 89001101 from channel name: mass [DATA] read id 89001200 from channel name: mass [DATA] read id 89001201 from channel name: mass [DATA] read id 89001300 from channel name: mass [DATA] read id 89001301 from channel name: mass [DATA] read id 89001400 from channel name: mass [DATA] read id 89001401 from channel name: mass [DATA] read id 89001500 from channel name: mass [DATA] read id 89001501 from channel name: mass [DATA] read id 89001600 from channel name: mass [DATA] read id 89001601 from channel name: mass [DATA] read id 89001700 from channel name: mass [DATA] read id 89001701 from channel name: mass [DATA] read id 89001800 from channel name: mass [DATA] read id 89001801 from channel name: mass [DATA] read id 89001900 from channel name: mass [DATA] read id 89001901 from channel name: mass [DATA] read id 89002000 from channel name: mass [DATA] read id 89002001 from channel name: mass [DATA] read id 89002100 from channel name: mass [DATA] read id 89002101 from channel name: mass [DATA] read id 89002200 from channel name: mass [DATA] read id 89002201 from channel name: mass [DATA] read id 89002300 from channel name: mass [DATA] read id 89002301 from channel name: mass [DATA] read id 89002400 from channel name: mass [DATA] read id 89002401 from channel name: mass [DATA] read id 89002500 from channel name: mass [DATA] read id 89002501 from channel name: mass [DATA] read id 89002600 from channel name: mass [DATA] read id 89002601 from channel name: mass [DATA] read id 89002700 from channel name: mass [DATA] read id 89002701 from channel name: mass [DATA] read id 89002800 from channel name: mass [DATA] read id 89002801 from channel name: mass [DATA] read id 89002900 from channel name: mass [DATA] read id 89002901 from channel name: mass [DATA] read id 89003000 from channel name: mass [DATA] read id 89003001 from channel name: mass [DATA] read id 89003100 from channel name: mass [DATA] read id 89003101 from channel name: mass [DATA] read id 89003200 from channel name: mass [DATA] read id 89003201 from channel name: mass [DATA] read id 89003300 from channel name: mass [DATA] read id 89003301 from channel name: mass [DATA] read id 89003400 from channel name: mass [DATA] read id 89003401 from channel name: mass [DATA] read id 89003402 from channel name: mass [DATA] read id 89003600 from channel name: mass [DATA] read id 89003601 from channel name: mass [DATA] read id 89003700 from channel name: mass [DATA] read id 89003701 from channel name: mass [DATA] read id 89003800 from channel name: mass [DATA] read id 89003801 from channel name: mass [DATA] read id 89003900 from channel name: mass [DATA] read id 89003901 from channel name: mass [DATA] read id 89004000 from channel name: mass [DATA] read id 89004001 from channel name: mass [DATA] read id 89004100 from channel name: mass [DATA] read id 89004101 from channel name: mass [DATA] read id 89004200 from channel name: mass [DATA] read id 89004201 from channel name: mass [DATA] read id 89004300 from channel name: mass [DATA] read id 89004301 from channel name: mass [DATA] read id 89004400 from channel name: mass [DATA] read id 89004401 from channel name: mass [DATA] read id 89004500 from channel name: mass [DATA] read id 89004501 from channel name: mass [DATA] read id 89004600 from channel name: mass [DATA] read id 89004601 from channel name: mass [DATA] read id 89004700 from channel name: mass [DATA] read id 89004701 from channel name: mass [DATA] read id 89004800 from channel name: mass [DATA] read id 89004801 from channel name: mass [DATA] read id 89004900 from channel name: mass [DATA] read id 89004901 from channel name: mass [DATA] read id 89005000 from channel name: mass [DATA] read id 89005001 from channel name: mass [DATA] read id 89005100 from channel name: mass [DATA] read id 89005101 from channel name: mass [DATA] read id 89005200 from channel name: mass [DATA] read id 89005201 from channel name: mass [DATA] read id 89100100 from channel name: mass [DATA] read id 89100200 from channel name: mass [DATA] read id 89100300 from channel name: mass [DATA] read id 89100400 from channel name: mass [DATA] read id 89100500 from channel name: mass [DATA] read id 89100600 from channel name: mass [DATA] read id 89100700 from channel name: mass [DATA] read id 89100800 from channel name: mass [DATA] read id 89100900 from channel name: mass [DATA] read id 89101000 from channel name: mass [DATA] read id 89101100 from channel name: mass [DATA] read id 89101200 from channel name: mass [DATA] read id 89101300 from channel name: mass [DATA] read id 89101400 from channel name: mass [DATA] read id 89101500 from channel name: mass [DATA] read id 89101600 from channel name: mass [DATA] read id 89101700 from channel name: mass [DATA] read id 89101800 from channel name: mass [DATA] read id 89101900 from channel name: mass [DATA] read id 89102000 from channel name: mass [DATA] read id 89102100 from channel name: mass [DATA] read id 89102200 from channel name: mass [DATA] read id 89200100 from channel name: mass [DATA] read id 89200101 from channel name: mass [DATA] read id 89200200 from channel name: mass [DATA] read id 89200201 from channel name: mass [DATA] read id 89200300 from channel name: mass [DATA] read id 89200301 from channel name: mass [DATA] read id 89200400 from channel name: mass [DATA] read id 89200401 from channel name: mass [DATA] read id 89200500 from channel name: mass [DATA] read id 89200501 from channel name: mass [DATA] read id 89200600 from channel name: mass [DATA] read id 89200601 from channel name: mass [DATA] read id 89200602 from channel name: mass [DATA] read id 89200603 from channel name: mass [DATA] read id 89200700 from channel name: mass [DATA] read id 89200701 from channel name: mass [DATA] read id 89200702 from channel name: mass [DATA] read id 89200800 from channel name: mass [DATA] read id 89200801 from channel name: mass [DATA] read id 89200802 from channel name: mass [DATA] read id 89201000 from channel name: mass [DATA] read id 89201001 from channel name: mass [DATA] read id 89201002 from channel name: mass [DATA] read id 89201100 from channel name: mass [DATA] read id 89201101 from channel name: mass [DATA] read id 89201200 from channel name: mass [DATA] read id 89201300 from channel name: mass [DATA] read id 89201400 from channel name: mass [DATA] read id 89201500 from channel name: mass [DATA] read id 89201600 from channel name: mass [DATA] read id 89201700 from channel name: mass [DATA] read id 89300100 from channel name: mass [DATA] read id 89300101 from channel name: mass [DATA] read id 89300200 from channel name: mass [DATA] read id 89300201 from channel name: mass [DATA] read id 89300202 from channel name: mass [DATA] read id 89500100 from channel name: mass [DATA] read id 89500101 from channel name: mass [DATA] read id 89500200 from channel name: mass [DATA] read id 89500201 from channel name: mass [DATA] read id 89500300 from channel name: mass [DATA] read id 89500301 from channel name: mass [DATA] read id 89500400 from channel name: mass [DATA] read id 89500401 from channel name: mass [DATA] read id 89500500 from channel name: mass [DATA] read id 89500501 from channel name: mass [DATA] read id 89500600 from channel name: mass [DATA] read id 89500601 from channel name: mass [DATA] read id 89500700 from channel name: mass [DATA] read id 89500701 from channel name: mass [DATA] read id 89500800 from channel name: mass [DATA] read id 89500801 from channel name: mass [DATA] read id 89500900 from channel name: mass [DATA] read id 89500901 from channel name: mass [DATA] read id 89501000 from channel name: mass [DATA] read id 89501001 from channel name: mass [DATA] read id 89501100 from channel name: mass [DATA] read id 89501101 from channel name: mass [DATA] read id 89501200 from channel name: mass [DATA] read id 89501201 from channel name: mass [DATA] read id 89501300 from channel name: mass [DATA] read id 89501301 from channel name: mass [DATA] read id 89501400 from channel name: mass [DATA] read id 89501401 from channel name: mass [DATA] read id 89501500 from channel name: mass [DATA] read id 89501501 from channel name: mass [DATA] read id 89501600 from channel name: mass [DATA] read id 89501601 from channel name: mass [DATA] read id 89501700 from channel name: mass [DATA] read id 89501701 from channel name: mass [DATA] read id 89501800 from channel name: mass [DATA] read id 89501801 from channel name: mass [DATA] read id 89501900 from channel name: mass [DATA] read id 89501901 from channel name: mass [DATA] read id 89502000 from channel name: mass [DATA] read id 89502001 from channel name: mass [DATA] read id 89502100 from channel name: mass [DATA] read id 89502101 from channel name: mass [DATA] read id 89502200 from channel name: mass [DATA] read id 89502201 from channel name: mass [DATA] read id 89502300 from channel name: mass [DATA] read id 89502301 from channel name: mass [DATA] read id 89502400 from channel name: mass [DATA] read id 89502401 from channel name: mass [DATA] read id 89502500 from channel name: mass [DATA] read id 89502501 from channel name: mass [DATA] read id 89502600 from channel name: mass [DATA] read id 89502601 from channel name: mass [DATA] read id 89502700 from channel name: mass [DATA] read id 89502701 from channel name: mass [DATA] read id 89502800 from channel name: mass [DATA] read id 89502801 from channel name: mass [DATA] read id 89502900 from channel name: mass [DATA] read id 89502901 from channel name: mass [DATA] read id 89503000 from channel name: mass [DATA] read id 89503001 from channel name: mass [DATA] read id 89503100 from channel name: mass [DATA] read id 89503101 from channel name: mass [DATA] read id 89503200 from channel name: mass [DATA] read id 89503201 from channel name: mass [DATA] read id 89503300 from channel name: mass [DATA] read id 89503301 from channel name: mass [DATA] read id 89503400 from channel name: mass [DATA] read id 89503401 from channel name: mass [DATA] read id 89503402 from channel name: mass [DATA] read id 89503600 from channel name: mass [DATA] read id 89503601 from channel name: mass [DATA] read id 89503700 from channel name: mass [DATA] read id 89503701 from channel name: mass [DATA] read id 89503800 from channel name: mass [DATA] read id 89503801 from channel name: mass [DATA] read id 89503900 from channel name: mass [DATA] read id 89503901 from channel name: mass [DATA] read id 89504000 from channel name: mass [DATA] read id 89504001 from channel name: mass [DATA] read id 89504100 from channel name: mass [DATA] read id 89504101 from channel name: mass [DATA] read id 89504200 from channel name: mass [DATA] read id 89504201 from channel name: mass [DATA] read id 89504300 from channel name: mass [DATA] read id 89504301 from channel name: mass [DATA] read id 89504400 from channel name: mass [DATA] read id 89504401 from channel name: mass [DATA] read id 89504500 from channel name: mass [DATA] read id 89504501 from channel name: mass [DATA] read id 89504600 from channel name: mass [DATA] read id 89504601 from channel name: mass [DATA] read id 89504700 from channel name: mass [DATA] read id 89504701 from channel name: mass [DATA] read id 89504800 from channel name: mass [DATA] read id 89504801 from channel name: mass [DATA] read id 89504900 from channel name: mass [DATA] read id 89504901 from channel name: mass [DATA] read id 89505000 from channel name: mass [DATA] read id 89505001 from channel name: mass [DATA] read id 89505100 from channel name: mass [DATA] read id 89505101 from channel name: mass [DATA] read id 89505200 from channel name: mass [DATA] read id 89505201 from channel name: mass [DATA] read id 89600100 from channel name: mass [DATA] read id 89600200 from channel name: mass [DATA] read id 89600300 from channel name: mass [DATA] read id 89600400 from channel name: mass [DATA] read id 89600500 from channel name: mass [DATA] read id 89600600 from channel name: mass [DATA] read id 89600700 from channel name: mass [DATA] read id 89600800 from channel name: mass [DATA] read id 89600900 from channel name: mass [DATA] read id 89601000 from channel name: mass [DATA] read id 89601100 from channel name: mass [DATA] read id 89601300 from channel name: mass [DATA] read id 89601400 from channel name: mass [DATA] read id 89601500 from channel name: mass [DATA] read id 89601600 from channel name: mass [DATA] read id 89601700 from channel name: mass [DATA] read id 89601800 from channel name: mass [DATA] read id 89601900 from channel name: mass [DATA] read id 89602000 from channel name: mass [DATA] read id 89602100 from channel name: mass [DATA] read id 89602200 from channel name: mass [DATA] read id 89700100 from channel name: mass [DATA] read id 89700101 from channel name: mass [DATA] read id 89700200 from channel name: mass [DATA] read id 89700201 from channel name: mass [DATA] read id 89700300 from channel name: mass [DATA] read id 89700301 from channel name: mass [DATA] read id 89700400 from channel name: mass [DATA] read id 89700401 from channel name: mass [DATA] read id 89700500 from channel name: mass [DATA] read id 89700501 from channel name: mass [DATA] read id 89700600 from channel name: mass [DATA] read id 89700601 from channel name: mass [DATA] read id 89700602 from channel name: mass [DATA] read id 89700603 from channel name: mass [DATA] read id 89700700 from channel name: mass [DATA] read id 89700701 from channel name: mass [DATA] read id 89700702 from channel name: mass [DATA] read id 89700800 from channel name: mass [DATA] read id 89700801 from channel name: mass [DATA] read id 89700802 from channel name: mass [DATA] read id 89701000 from channel name: mass [DATA] read id 89701001 from channel name: mass [DATA] read id 89701002 from channel name: mass [DATA] read id 89701100 from channel name: mass [DATA] read id 89701101 from channel name: mass [DATA] read id 89701200 from channel name: mass [DATA] read id 89701300 from channel name: mass [DATA] read id 89701400 from channel name: mass [DATA] read id 89701500 from channel name: mass [DATA] read id 89701600 from channel name: mass [DATA] read id 89701700 from channel name: mass [DATA] read id 89800100 from channel name: mass [DATA] read id 89800101 from channel name: mass [DATA] read id 89800200 from channel name: mass [DATA] read id 89800201 from channel name: mass [DATA] read id 89800202 from channel name: mass [DATA] read id 90000011 from channel name: mass [DATA] read id 90000012 from channel name: mass [DATA] read id 90000013 from channel name: mass [CALCULATION] Calculating Visualization: TESTBED_Testbed_X_coordinate_over_time [DATA] read id 13166581 from channel name: x_coordinate [CALCULATION] Calculating Visualization: TESTBED_Testbed_Y_coordinate_over_time [DATA] read id 13166581 from channel name: y_coordinate [CALCULATION] Calculating Visualization: TESTBED_Testbed_Z_coordinate_over_time [DATA] read id 13166581 from channel name: z_coordinate [CALCULATION] Calculating Visualization: TESTBED_Testbed_X_acceleration_over_time_CFC60 [DATA] read id 13166581 from channel name: x_acceleration
c:\Users\desi_kofler\.conda\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 13166581 from channel name: y_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_Z_acceleration_over_time_CFC60 [DATA] read id 13166581 from channel name: z_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_X_acceleration_over_time_CFC1000 [DATA] read id 13166581 from channel name: x_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_Y_acceleration_over_time_CFC1000 [DATA] read id 13166581 from channel name: y_acceleration [CALCULATION] Calculating Visualization: TESTBED_Testbed_Z_acceleration_over_time_CFC1000 [DATA] read id 13166581 from channel name: z_acceleration [CALCULATION] Calculating Visualization: TESTBED_Slipring_shoulder_belt_X_coordinate_over_time [DATA] read id 13176020 from channel name: x_coordinate [CALCULATION] Calculating Visualization: TESTBED_Slipring_shoulder_belt_Y_coordinate_over_time [DATA] read id 13176020 from channel name: y_coordinate [CALCULATION] Calculating Visualization: TESTBED_Slipring_shoulder_belt_Z_coordinate_over_time [DATA] read id 13176020 from channel name: z_coordinate [CALCULATION] Calculating Visualization: TESTBED_End_of_2D_shoulder_belt_X_coordinate_over_time [DATA] read id 22000351 from channel name: x_coordinate [CALCULATION] Calculating Visualization: TESTBED_End_of_2D_shoulder_belt_Y_coordinate_over_time [DATA] read id 22000351 from channel name: y_coordinate [CALCULATION] Calculating Visualization: TESTBED_End_of_2D_shoulder_belt_Z_coordinate_over_time [DATA] read id 22000351 from channel name: z_coordinate [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_force_Seat_CFC60 [DATA] read id 13000020 from channel name: y_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_force_Seat [DATA] read id 13000020 from channel name: y_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Seat_CFC60 [DATA] read id 13000020 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Seat [DATA] read id 13000020 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Seat_CFC60 [DATA] read id 13000020 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Seat [DATA] read id 13000020 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Footrest_CFC60 [DATA] read id 13000010 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_X_force_Footrest [DATA] read id 13000010 from channel name: x_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Footrest_CFC60 [DATA] read id 13000010 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Z_force_Footrest [DATA] read id 13000010 from channel name: z_force [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Footrest_CFC60 [DATA] read id 13000010 from channel name: y_moment [CALCULATION] Calculating Visualization: LOADCELL_Loadcell_Y_moment_Footrest [DATA] read id 13000010 from channel name: y_moment [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 22000032 from channel name: total_force [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_displacement_over_time [DATA] read id 91100001 from channel name: x_displacement [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_displacement_over_time [DATA] read id 91100001 from channel name: y_displacement [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_displacement_over_time [DATA] read id 91100001 from channel name: z_displacement [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_coordinate_over_time [DATA] read id 91100001 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_coordinate_over_time [DATA] read id 91100001 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_coordinate_over_time [DATA] read id 91100001 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_acceleration_over_time_CFC1000 [DATA] read id 91100001 from channel name: x_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_acceleration_over_time_CFC1000 [DATA] read id 91100001 from channel name: y_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_acceleration_over_time_CFC1000 [DATA] read id 91100001 from channel name: z_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_rot_acceleration_over_time_CFC1000 [DATA] read id 91100001 from channel name: rx_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_rot_acceleration_over_time_CFC1000 [DATA] read id 91100001 from channel name: ry_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_rot_acceleration_over_time_CFC1000 [DATA] read id 91100001 from channel name: rz_acceleration [CALCULATION] Calculating Visualization: HBM_Head_CoG_X_rot_velocity_over_time_CFC1000 [DATA] read id 91100001 from channel name: rx_velocity [CALCULATION] Calculating Visualization: HBM_Head_CoG_Y_rot_velocity_over_time_CFC1000 [DATA] read id 91100001 from channel name: ry_velocity [CALCULATION] Calculating Visualization: HBM_Head_CoG_Z_rot_velocity_over_time_CFC1000 [DATA] read id 91100001 from channel name: rz_velocity [CALCULATION] Calculating Visualization: HBM_T1_X_coordinate_over_time [DATA] read id 91301011 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_T1_Y_coordinate_over_time [DATA] read id 91301011 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_T1_Z_coordinate_over_time [DATA] read id 91301011 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_T8_X_coordinate_over_time [DATA] read id 91308011 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_T8_Y_coordinate_over_time [DATA] read id 91308011 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_T8_Z_coordinate_over_time [DATA] read id 91308011 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_L2_X_coordinate_over_time [DATA] read id 91402011 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_L2_Y_coordinate_over_time [DATA] read id 91402011 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_L2_Z_coordinate_over_time [DATA] read id 91402011 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Pelvis_X_coordinate_over_time [DATA] read id 91512020 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Pelvis_Y_coordinate_over_time [DATA] read id 91512020 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Pelvis_Z_coordinate_over_time [DATA] read id 91512020 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_right_X_coordinate_over_time [DATA] read id 89509391 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_right_Y_coordinate_over_time [DATA] read id 89509391 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_right_Z_coordinate_over_time [DATA] read id 89509391 from channel name: z_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_left_X_coordinate_over_time [DATA] read id 89009391 from channel name: x_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_left_Y_coordinate_over_time [DATA] read id 89009391 from channel name: y_coordinate [CALCULATION] Calculating Visualization: HBM_Acromion_left_Z_coordinate_over_time [DATA] read id 89009391 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 [CALCULATION] DATA VISUALIZATION done writing csv to data/processed/sim_results\Configuration_1_Dynasaur_diagram_output_THUMS_v4.1_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 testbed_type == 'noSidePlate':
sim_data_no_occupant = pd.read_csv(os.path.join(reference_data_dir, 'load_cell_forces_without_occupant_noSidePlate.csv'), delimiter=';', na_values='-', header = [0,1,2,3])
sim_data_no_occupant.sort_index(axis=1, inplace=True)
elif testbed_type == 'SidePlate':
sim_data_no_occupant = pd.read_csv(os.path.join(reference_data_dir, 'load_cell_forces_without_occupant_SidePlate.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']['Slipring_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))
if DRing_pos == 'DRf':
print("The shoulder belt angle after settling is %.1f°. It should be between 28° and 40°." % shoulder_belt_angle)
assert shoulder_belt_angle >= 28, "Shoulder belt angle is too small. Adjust your setup to increase it (cf. Step 9 in the documentation)."
assert shoulder_belt_angle <= 40, "Shoulder belt angle is too large. Adjust your setup to reduce it (cf. Step 9 in the documentation)."
elif DRing_pos == 'DRi':
print("The shoulder belt angle after settling is %.1f°. It should be between 26° and 37°." % shoulder_belt_angle)
assert shoulder_belt_angle >= 26, "Shoulder belt angle is too small. Adjust your setup to increase it (cf. Step 9 in the documentation)."
assert shoulder_belt_angle <= 37, "Shoulder belt angle is too large. Adjust your setup to reduce it (cf. Step 9 in the documentation)."
elif DRing_pos == 'DRb':
print("The shoulder belt angle after settling is %.1f°. It should be between 24° and 33°." % shoulder_belt_angle)
assert shoulder_belt_angle >= 24, "Shoulder belt angle is too small. Adjust your setup to increase it (cf. Step 9 in the documentation)."
assert shoulder_belt_angle <= 33, "Shoulder belt angle is too large. Adjust your setup to reduce it (cf. Step 9 in the documentation)."
C:\Users\desi_kofler\AppData\Local\Temp\ipykernel_16576\2085017815.py:3: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]` 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]] C:\Users\desi_kofler\AppData\Local\Temp\ipykernel_16576\2085017815.py:4: FutureWarning: Series.__getitem__ treating keys as positions is deprecated. In a future version, integer keys will always be treated as labels (consistent with DataFrame behavior). To access a value by position, use `ser.iloc[pos]` 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]]
The shoulder belt angle after settling is 34.4°. It should be between 26° and 37°.
Head displacement plots¶
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 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) - convert_to_unit(sim_data_results['TESTBED']['Testbed_X_coordinate_over_time']['x-coordinate'], unit_deflection_plot, offset=offset)
head_y_displacement = convert_to_unit(sim_data_results['HBM']['Head_CoG_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)
head_z_displacement = convert_to_unit(sim_data_results['HBM']['Head_CoG_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].plot(head_x_displacement, head_z_displacement, label=settings["HBM"])
ax[1].plot(head_y_displacement, head_z_displacement)
ax[0].set(title="Head Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1].set(title="Head Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_head_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Acromion left displacement plots¶
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(18, 6))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['Acromion_left_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
Acromion_left_x_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_left_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)
Acromion_left_y_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_left_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)
Acromion_left_z_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_left_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].plot(convert_to_unit(sim_data_results['HBM']['Acromion_left_X_coordinate_over_time']['time'], unit_time_plot, offset=offset), Acromion_left_x_displacement, label=settings["HBM"])
for data_exp in data_exp_acr_le_up_dx:
Alx_Cor_upper_x = data_exp[:, 0]
Alx_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_acr_le_lo_dx:
Alx_Cor_lower_x = data_exp[:, 0]
Alx_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[0].fill(np.append(Alx_Cor_upper_x[::-1], Alx_Cor_lower_x), np.append(Alx_Cor_upper_y[::-1], Alx_Cor_lower_y), color = 'lightgrey', label = "Preliminary corridor")
ax[1].plot(convert_to_unit(sim_data_results['HBM']['Acromion_left_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), Acromion_left_y_displacement)
for data_exp in data_exp_acr_le_up_dy:
Aly_Cor_upper_x = data_exp[:, 0]
Aly_Cor_upper_y = (data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_acr_le_lo_dy:
Aly_Cor_lower_x = data_exp[:, 0]
Aly_Cor_lower_y = (data_exp[:, 1] - data_exp[0, 1])
ax[1].fill(np.append(Aly_Cor_upper_x[::-1], Aly_Cor_lower_x), np.append(Aly_Cor_upper_y[::-1], Aly_Cor_lower_y), color = 'lightgrey')
ax[2].plot(convert_to_unit(sim_data_results['HBM']['Acromion_left_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), Acromion_left_z_displacement)
for data_exp in data_exp_acr_le_up_dz:
Alz_Cor_upper_x = data_exp[:, 0]
Alz_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_acr_le_lo_dz:
Alz_Cor_lower_x = data_exp[:, 0]
Alz_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[2].fill(np.append(Alz_Cor_upper_x[::-1], Alz_Cor_lower_x), np.append(Alz_Cor_upper_y[::-1], Alz_Cor_lower_y), color = 'lightgrey')
ax[0].set(title="Acromion left X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1].set(title="Acromion left Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[2].set(title="Acromion left Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.08))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_acromion_left_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['Acromion_left_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
Acromion_left_x_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_left_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)
Acromion_left_y_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_left_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)
Acromion_left_z_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_left_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].plot(Acromion_left_x_displacement, Acromion_left_z_displacement, label=settings["HBM"])
ax[1].plot(Acromion_left_y_displacement, Acromion_left_z_displacement)
ax[0].set(title="Acromion left Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1].set(title="Acromion left Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_acromion_left_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Acromion right displacement plots¶
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(18, 6))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['Acromion_right_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
Acromion_right_x_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_right_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)
Acromion_right_y_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_right_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)
Acromion_right_z_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_right_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].plot(convert_to_unit(sim_data_results['HBM']['Acromion_right_X_coordinate_over_time']['time'], unit_time_plot, offset=offset), Acromion_right_x_displacement, label=settings["HBM"])
for data_exp in data_exp_acr_ri_up_dx:
Arx_Cor_upper_x = data_exp[:, 0]
Arx_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_acr_ri_lo_dx:
Arx_Cor_lower_x = data_exp[:, 0]
Arx_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[0].fill(np.append(Arx_Cor_upper_x[::-1], Arx_Cor_lower_x), np.append(Arx_Cor_upper_y[::-1], Arx_Cor_lower_y), color = 'lightgrey', label = "Preliminary corridor")
ax[1].plot(convert_to_unit(sim_data_results['HBM']['Acromion_right_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), Acromion_right_y_displacement)
for data_exp in data_exp_acr_ri_up_dy:
Ary_Cor_upper_x = data_exp[:, 0]
Ary_Cor_upper_y = (data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_acr_ri_lo_dy:
Ary_Cor_lower_x = data_exp[:, 0]
Ary_Cor_lower_y = (data_exp[:, 1] - data_exp[0, 1])
ax[1].fill(np.append(Ary_Cor_upper_x[::-1], Ary_Cor_lower_x), np.append(Ary_Cor_upper_y[::-1], Ary_Cor_lower_y), color = 'lightgrey')
ax[2].plot(convert_to_unit(sim_data_results['HBM']['Acromion_right_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), Acromion_right_z_displacement)
for data_exp in data_exp_acr_ri_up_dz:
Arz_Cor_upper_x = data_exp[:, 0]
Arz_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_acr_ri_lo_dz:
Arz_Cor_lower_x = data_exp[:, 0]
Arz_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[2].fill(np.append(Arz_Cor_upper_x[::-1], Arz_Cor_lower_x), np.append(Arz_Cor_upper_y[::-1], Arz_Cor_lower_y), color = 'lightgrey')
ax[0].set(title="Acromion right X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1].set(title="Acromion right Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[2].set(title="Acromion right Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.08))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_acromion_right_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
fig.suptitle(setup_dict[setup_type])
offset = np.argmax(sim_data_results['HBM']['Acromion_right_X_coordinate_over_time']['time'] >= t_settle)
assert offset > 0
Acromion_right_x_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_right_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)
Acromion_right_y_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_right_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)
Acromion_right_z_displacement = convert_to_unit(sim_data_results['HBM']['Acromion_right_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].plot(Acromion_right_x_displacement, Acromion_right_z_displacement, label=settings["HBM"])
ax[1].plot(Acromion_right_y_displacement, Acromion_right_z_displacement)
ax[0].set(title="Acromion right Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1].set(title="Acromion right Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_acromion_right_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
T1 displacement plots¶
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(18, 6))
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)
ax[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_up_dx:
T1x_Cor_upper_x = data_exp[:, 0]
T1x_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_T1_lo_dx:
T1x_Cor_lower_x = data_exp[:, 0]
T1x_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[0].fill(np.append(T1x_Cor_upper_x[::-1], T1x_Cor_lower_x), np.append(T1x_Cor_upper_y[::-1], T1x_Cor_lower_y), color = 'lightgrey', label = "Preliminary corridor")
ax[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_up_dy:
T1y_Cor_upper_x = data_exp[:, 0]
T1y_Cor_upper_y = (data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_T1_lo_dy:
T1y_Cor_lower_x = data_exp[:, 0]
T1y_Cor_lower_y = (data_exp[:, 1] - data_exp[0, 1])
ax[1].fill(np.append(T1y_Cor_upper_x[::-1], T1y_Cor_lower_x), np.append(T1y_Cor_upper_y[::-1], T1y_Cor_lower_y), color = 'lightgrey')
ax[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_up_dz:
T1z_Cor_upper_x = data_exp[:, 0]
T1z_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_T1_lo_dz:
T1z_Cor_lower_x = data_exp[:, 0]
T1z_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[2].fill(np.append(T1z_Cor_upper_x[::-1], T1z_Cor_lower_x), np.append(T1z_Cor_upper_y[::-1], T1z_Cor_lower_y), color = 'lightgrey')
ax[0].set(title="T1 X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1].set(title="T1 Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[2].set(title="T1 Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.08))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_T1_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
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)
ax[0].plot(T1_x_displacement, T1_z_displacement, label=settings["HBM"])
ax[1].plot(T1_y_displacement, T1_z_displacement)
ax[0].set(title="T1 Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1].set(title="T1 Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_T1_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
T8 displacement plots¶
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(18, 6))
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)
ax[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"])
ax[1].plot(convert_to_unit(sim_data_results['HBM']['T8_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), T8_y_displacement)
ax[2].plot(convert_to_unit(sim_data_results['HBM']['T8_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), T8_z_displacement)
ax[0].set(title="T8 X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1].set(title="T8 Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[2].set(title="T8 Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_T8_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
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)
ax[0].plot(T8_x_displacement, T8_z_displacement, label=settings["HBM"])
ax[1].plot(T8_y_displacement, T8_z_displacement)
ax[0].set(title="T8 Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1].set(title="T8 Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_T8_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
L2 displacement plots¶
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(18, 6))
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].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"])
ax[1].plot(convert_to_unit(sim_data_results['HBM']['L2_Y_coordinate_over_time']['time'], unit_time_plot, offset=offset), L2_y_displacement)
ax[2].plot(convert_to_unit(sim_data_results['HBM']['L2_Z_coordinate_over_time']['time'], unit_time_plot, offset=offset), L2_z_displacement)
ax[0].set(title="L2 X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1].set(title="L2 Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[2].set(title="L2 Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_L2_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
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].plot(L2_x_displacement, L2_z_displacement, label=settings["HBM"])
ax[1].plot(L2_y_displacement, L2_z_displacement)
ax[0].set(title="L2 Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1].set(title="L2 Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_L2_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
Pelvis displacement plots¶
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(18, 6))
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)
ax[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_pelv_up_dx:
Pex_Cor_upper_x = data_exp[:, 0]
Pex_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_pelv_lo_dx:
Pex_Cor_lower_x = data_exp[:, 0]
Pex_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[0].fill(np.append(Pex_Cor_upper_x[::-1], Pex_Cor_lower_x), np.append(Pex_Cor_upper_y[::-1], Pex_Cor_lower_y), color = 'lightgrey', label = "Preliminary corridor")
ax[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_pelv_up_dy:
Pey_Cor_upper_x = data_exp[:, 0]
Pey_Cor_upper_y = (data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_pelv_lo_dy:
Pey_Cor_lower_x = data_exp[:, 0]
Pey_Cor_lower_y = (data_exp[:, 1] - data_exp[0, 1])
ax[1].fill(np.append(Pey_Cor_upper_x[::-1], Pey_Cor_lower_x), np.append(Pey_Cor_upper_y[::-1], Pey_Cor_lower_y), color = 'lightgrey')
ax[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_pelv_up_dz:
Pez_Cor_upper_x = data_exp[:, 0]
Pez_Cor_upper_y = -(data_exp[:, 1] - data_exp[0, 1])
for data_exp in data_exp_pelv_lo_dz:
Pez_Cor_lower_x = data_exp[:, 0]
Pez_Cor_lower_y = -(data_exp[:, 1] - data_exp[0, 1])
ax[2].fill(np.append(Pez_Cor_upper_x[::-1], Pez_Cor_lower_x), np.append(Pez_Cor_upper_y[::-1], Pez_Cor_lower_y), color = 'lightgrey')
ax[0].set(title="Pelvis X-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[1].set(title="Pelvis Y-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
ax[2].set(title="Pelvis Z-Displacement", xlabel="Time / ms", ylabel="Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.08))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_Pelvis_displacement_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 5))
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)
ax[0].plot(Pelvis_x_displacement, Pelvis_z_displacement, label=settings["HBM"])
ax[1].plot(Pelvis_y_displacement, Pelvis_z_displacement)
ax[0].set(title="Pelvis Trajectory", xlabel="X Displacement / mm", ylabel="Z Displacement / mm")
ax[1].set(title="Pelvis Trajectory", xlabel="Y Displacement / mm", ylabel="Z Displacement / mm")
fig.tight_layout()
fig.legend(loc='lower center', bbox_to_anchor=(0.5, -0.05))
fig.savefig(os.path.join(figures_dir, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_Pelvis_trajectories_' + settings["HBM"] + '.png'), format='png', bbox_inches='tight')
plt.show()
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_Y_force_Seat_CFC60']['time'] >= t_settle)
assert offset > 0
time, forceX = subtract_no_occupant_data('LOADCELL', 'Loadcell_Y_force_Seat_CFC60', 'y-force', offset)
ax1.plot(time, forceX, label=settings["HBM"])
time, forceZ = subtract_no_occupant_data('LOADCELL', 'Loadcell_Z_force_Seat_CFC60', 'z-force', offset)
ax2.plot(time, forceZ)
ax1.set(title="Seat Y-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, 'Forman_2013_' + setup_dict[setup_type].replace(" ", "_") + '_seat_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_belt_sh_up_fx:
SBf_Cor_upper_x = data_exp[:, 0]
SBf_Cor_upper_y = data_exp[:, 1]
for data_exp in data_exp_belt_sh_lo_fx:
SBf_Cor_lower_x = data_exp[:, 0]
SBf_Cor_lower_y = data_exp[:, 1]
ax1.fill(np.append(SBf_Cor_upper_x[::-1], SBf_Cor_lower_x), np.append(SBf_Cor_upper_y[::-1], SBf_Cor_lower_y), color = 'lightgrey')
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_belt_lap_up_fx:
LBf_Cor_upper_x = data_exp[:, 0]
LBf_Cor_upper_y = data_exp[:, 1]
for data_exp in data_exp_belt_lap_lo_fx:
LBf_Cor_lower_x = data_exp[:, 0]
LBf_Cor_lower_y = data_exp[:, 1]
ax2.fill(np.append(LBf_Cor_upper_x[::-1], LBf_Cor_lower_x), np.append(LBf_Cor_upper_y[::-1], LBf_Cor_lower_y), color = 'lightgrey')
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, 'Forman_2013_' + 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_y_displacement_rel[idx], -T1_y_displacement_rel[idx], -T8_y_displacement_rel[idx], -L2_y_displacement_rel[idx], -Pelvis_y_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_y_displacement, head_z_displacement, label="Head")
ax1.plot(T1_y_displacement, T1_z_displacement, label="T1")
ax1.plot(T8_y_displacement, T8_z_displacement, label="T8")
ax1.plot(L2_y_displacement, L2_z_displacement, label="L2")
ax1.plot(Pelvis_y_displacement, Pelvis_z_displacement, label="Pelvis")
ax2.plot(-head_y_displacement_rel, head_z_displacement_rel)
ax2.plot(-T1_y_displacement_rel, T1_z_displacement_rel)
ax2.plot(-T8_y_displacement_rel, T8_z_displacement_rel)
ax2.plot(-L2_y_displacement_rel, L2_z_displacement_rel)
ax2.plot(-Pelvis_y_displacement_rel, Pelvis_z_displacement_rel)
ax1.set(title="Absolute trajectories", xlabel="Y-Displacement / mm", ylabel="Z-Displacement / mm")
ax2.set(title="Trajectories relative to sled", xlabel="Y-Displacement / mm", ylabel="Z-Displacement / mm")
ax2.set_xlim(left=-1000, right=100)
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, 'Forman_2013_' + 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, 'Forman_2013_' + 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, 'Forman_2013_' + 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
assert offset > 0
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, 'Forman_2013_' + 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, 'Forman_2013_' + 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¶
No objective metric score calculated yet. The score will be calculated when curves from PMHS tests are digitalised.