Back impact (Viano 2001)#

Model validation information

  • Performed by : Jobin John

  • Reviewed by :

Added to VIVA+ Validation Catalog on : 2022-06-28

Last modified: 2022-07-05

VIVA+ model version (this notebook run for): 0.3.2

© 2019-2024, OpenVT Organization (OVTO)

Available openly under under Creative Commons Attribution 4.0 International License

Summary:#

The simulated outputs are compared to thecorridors taken from the references of PMHS tests reported by Viano et al., 2001.

Viano, D. C., Hardy, W. N., & King, A. I. (2001). Response of the Head, Neck and Torso to Pendulum Impacts on the Back. Journal of Crash Prevention and Injury Control, 2(4), 289-306. https://doi.org/10.1080/10286580108902573

Published in:#

John, J., Klug, C., Kranjec, M., Svenning, E., Iraeus, J. (2022). “Hello, world! VIVA+: A human body model lineup to evaluate sex-differences in crash protection.” Frontiers in bioengineering and biotechnology 10, https://doi.org/10.3389/fbioe.2022.918904

Experiments by Viano et al. (2001)#

Information on the subjects/specimens#

The experiments were carried out on 8 PMHS. The subjects had the age of 62 ± 12 years, body mass of 69 ± 17 kg and height of 173 ± 6 cm.

The test were conducted with a power-assisted pendulum with the weight of 23.4 kg. The cadavers were suspended upright with hands and arms forward. The top of the impactor face was aligned with T1 or T6 for the rear thoracic impacts. The pendulum interface was a smooth, flat circular disc with the diameter of 152 mm and rounded edges. The low-severity impacts were conducted at T1 and T6 followed by a high speed impact at T1. Low speed tests were nominally at 4.4m/s and the high-speed at 6.6 m/s.

Simulations#

Loading and Boundary Conditions#

6 loading configurations of hub impacts to the back were used. Both female and male models were impacted using a rigid hub with the diameter of 152 mm and weighing 23 kg. The impact velocities were 4.4m/s for low speed simulations and 6.6 m/s for high speed simulations. The impact locations were at the T1 and T6 vertebrae.

Configuration

Location

Impact v [m/s]

Model

1

T6

4.4

50F

2

T6

4.4

50M

3

T1

4.4

50F

4

T1

4.4

50M

5

T1

6.6

50F

6

T1

6.6

50M

Positioning#

For the validation purposes we used seated VIVA+ 50F and 50M models rotated for 23° around Y axis to get the torso somewhat vertical. The top of the impactor was aligned with the T1 or T6 for each model, depending on the loading condition.

Model Energies#

Hide code cell source
fig_energy, ((ax1, ax2), (ax3, ax4), (ax5, ax6)) = plt.subplots(3,2,figsize=(5, 10))
#fig_energy, (ax1, ax2, ax3, ax4, ax5, ax6) = plt.subplots(1,6)
fig_energy.suptitle('Model Energies')
#ax.set_title('Simulation #1')
ax3.set_ylabel('Energies (J)')

ax1.set(title='T6 50F', xlabel='time (ms)')
ax2.set(title='T6 50M', xlabel='time (ms)')
ax3.set(title='T1 4.4ms 50F', xlabel='time (ms)')
ax4.set(title='T1 4.4ms 50M', xlabel='time (ms)')
ax5.set(title='T1 6.6ms 50F', xlabel='time (ms)')
ax6.set(title='T1 6.6ms 50F', xlabel='time (ms)')

ax1.plot(simData_50F.MODEL.Hourglass_Energy.time, simData_50F.MODEL.Hourglass_Energy.energy, label="Hourglass Energy")
ax1.plot(simData_50F.MODEL.Internal_Energy.time, simData_50F.MODEL.Internal_Energy.energy, label="Internal Energy")
ax1.plot(simData_50F.MODEL.Kinetic_Energy.time, simData_50F.MODEL.Kinetic_Energy.energy, label="Kinetic Energy")
ax1.plot(simData_50F.MODEL.Total_Energy.time, simData_50F.MODEL.Total_Energy.energy, label="Total Energy")
ax1.plot(simData_50F.MODEL.Added_Mass.time, simData_50F.MODEL.Added_Mass.mass, label="Added Mass")


ax2.plot(simData_50M.MODEL.Hourglass_Energy.time, simData_50M.MODEL.Hourglass_Energy.energy)#, #label="Hourglass Energy")
ax2.plot(simData_50M.MODEL.Internal_Energy.time, simData_50M.MODEL.Internal_Energy.energy)#, #label="Internal Energy")
ax2.plot(simData_50M.MODEL.Kinetic_Energy.time, simData_50M.MODEL.Kinetic_Energy.energy)#, #label="Kinetic Energy")
ax2.plot(simData_50M.MODEL.Total_Energy.time, simData_50M.MODEL.Total_Energy.energy)#, #label="Total Energy")
ax2.plot(simData_50M.MODEL.Added_Mass.time, simData_50M.MODEL.Added_Mass.mass)#, #label="Added Mass")


ax3.plot(simData_50F_2.MODEL.Hourglass_Energy.time, simData_50F_2.MODEL.Hourglass_Energy.energy)#, #label="Hourglass Energy")
ax3.plot(simData_50F_2.MODEL.Internal_Energy.time, simData_50F_2.MODEL.Internal_Energy.energy)#, #label="Internal Energy")
ax3.plot(simData_50F_2.MODEL.Kinetic_Energy.time, simData_50F_2.MODEL.Kinetic_Energy.energy)#, label="Kinetic Energy")
ax3.plot(simData_50F_2.MODEL.Total_Energy.time, simData_50F_2.MODEL.Total_Energy.energy)#, #label="Total Energy")
ax3.plot(simData_50F_2.MODEL.Added_Mass.time, simData_50F_2.MODEL.Added_Mass.mass)#, #label="Added Mass")


ax4.plot(simData_50M_2.MODEL.Hourglass_Energy.time, simData_50M_2.MODEL.Hourglass_Energy.energy)#, #label="Hourglass Energy")
ax4.plot(simData_50M_2.MODEL.Internal_Energy.time, simData_50M_2.MODEL.Internal_Energy.energy)#, #label="Internal Energy")
ax4.plot(simData_50M_2.MODEL.Kinetic_Energy.time, simData_50M_2.MODEL.Kinetic_Energy.energy)#, #label="Kinetic Energy")
ax4.plot(simData_50M_2.MODEL.Total_Energy.time, simData_50M_2.MODEL.Total_Energy.energy)#, #label="Total Energy")
ax4.plot(simData_50M_2.MODEL.Added_Mass.time, simData_50M_2.MODEL.Added_Mass.mass)#, #label="Added Mass")

ax5.plot(simData_50F_3.MODEL.Hourglass_Energy.time, simData_50F_3.MODEL.Hourglass_Energy.energy) #label="Hourglass Energy")
ax5.plot(simData_50F_3.MODEL.Internal_Energy.time, simData_50F_3.MODEL.Internal_Energy.energy) #label="Internal Energy")
ax5.plot(simData_50F_3.MODEL.Kinetic_Energy.time, simData_50F_3.MODEL.Kinetic_Energy.energy) #label="Kinetic Energy")
ax5.plot(simData_50F_3.MODEL.Total_Energy.time, simData_50F_3.MODEL.Total_Energy.energy) #label="Total Energy")
ax5.plot(simData_50F_3.MODEL.Added_Mass.time, simData_50F_3.MODEL.Added_Mass.mass) #label="Added Mass")


ax6.plot(simData_50M_3.MODEL.Hourglass_Energy.time, simData_50M_3.MODEL.Hourglass_Energy.energy)#, label="Hourglass Energy")
ax6.plot(simData_50M_3.MODEL.Internal_Energy.time, simData_50M_3.MODEL.Internal_Energy.energy)#, label="Internal Energy")
ax6.plot(simData_50M_3.MODEL.Kinetic_Energy.time, simData_50M_3.MODEL.Kinetic_Energy.energy)#, label="Kinetic Energy")
ax6.plot(simData_50M_3.MODEL.Total_Energy.time, simData_50M_3.MODEL.Total_Energy.energy)#, label="Total Energy")
ax6.plot(simData_50M_3.MODEL.Added_Mass.time, simData_50M_2.MODEL.Added_Mass.mass)#, label="Added Mass")



fig_energy.tight_layout(pad=0.7)



fig_energy.legend(loc='center left', bbox_to_anchor=(1, 0.5));
<matplotlib.legend.Legend at 0x2ae6fdc0fa0>
../_images/5d65c2701ebad823cadb4a12d6c2996327324c084734b0369c06d3648cfac549.png

Head Kinematics#

Head Rotation#

Hide code cell source
fig_hr, axs = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True,figsize=(5, 10))
fig_hr.suptitle('Head Rotation vs Time')

axs[0].plot(experiment_head_rotation['Time-T1-4.4-lower (ms)'], experiment_head_rotation['Head-Rotation-T1-4.4-lower (deg)'], label="Corridors from experiments", **plotExperiment)
axs[0].plot(experiment_head_rotation['Time-T1-4.4-upper (ms)'], experiment_head_rotation['Head-Rotation-T1-4.4-upper (deg)'], **plotExperiment)
axs[0].set_title('T1 impact at 4.4 m/s')
axs[0].set_ylabel('Head rotation (deg)')

axs[0].plot(simData_50F_2.Bone.Head_COG_ry.time, -np.degrees(simData_50F_2.Bone.Head_COG_ry.displacement), label="VIVA+ 50F", **plot50F)
axs[0].plot(simData_50M_2.Bone.Head_COG_ry.time, -np.degrees(simData_50M_2.Bone.Head_COG_ry.displacement), label="VIVA+ 50M", **plot50M)
#axs[0].plot(simData_50F_2['Bone:Head_COG_ry:time[ms]'], -np.degrees(plotData_T1_4_4['Bone:Head_COG_ry:ry[rad]']))

axs[1].plot(experiment_head_rotation['Time-T1-6.6-lower (ms)'], experiment_head_rotation['Head-Rotation-T1-6.6-lower (deg)'], **plotExperiment)
axs[1].plot(experiment_head_rotation['Time-T1-6.6-upper (ms)'], experiment_head_rotation['Head-Rotation-T1-6.6-upper (deg)'], **plotExperiment)
axs[1].set_title('T1 impact at 6.6 m/s')
axs[1].set_ylabel('Head rotation (deg)')
axs[1].plot(simData_50F_3.Bone.Head_COG_ry.time, -np.degrees(simData_50F_3.Bone.Head_COG_ry.displacement), **plot50F)
axs[1].plot(simData_50M_3.Bone.Head_COG_ry.time, -np.degrees(simData_50M_3.Bone.Head_COG_ry.displacement), **plot50M)
#axs[1].plot(simData_50F_3['Bone:Head_COG_ry:time[ms]'], -np.degrees(plotData_T1_6_6['Bone:Head_COG_ry:ry[rad]']))

axs[2].plot(experiment_head_rotation['Time-T6-lower (ms)'], experiment_head_rotation['Head-Rotation-T6-lower (deg)'], **plotExperiment)
axs[2].plot(experiment_head_rotation['Time-T6-upper (ms)'], experiment_head_rotation['Head-Rotation-T6-upper (deg)'], **plotExperiment)
axs[2].set_title('T6 impact at 4.4 m/s')
axs[2].plot(simData_50F.Bone.Head_COG_ry.time, -np.degrees(simData_50F.Bone.Head_COG_ry.displacement), **plot50F)
axs[2].plot(simData_50M.Bone.Head_COG_ry.time, -np.degrees(simData_50M.Bone.Head_COG_ry.displacement),  **plot50M)

axs[2].set_xlabel('Time (ms)')
axs[2].set_ylabel('Head rotation (deg)');

plt.ylim([0, 80]);
plt.xlim([0, t_lim]);
fig_hr.legend(loc='center left', bbox_to_anchor=(1, 0.5))
fig_hr.tight_layout(pad=0.6)
../_images/6461a9ed94b81c5f5710486216e8aba8f1dc1c60e01e4942ed3e0f9956c97695.png

Head-Torso Rotation#

Hide code cell source
fig_htr, axs = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True,figsize=(5, 10))
fig_htr.suptitle('Head-Torso Rotation vs Time')

axs[0].plot(ex_head_torso_rotation['Time-T1-4.4-lower (ms)'], ex_head_torso_rotation['Head-Torso-Rotation-T1-4.4-lower (deg)'], label="Corridors from experiments", **plotExperiment)
axs[0].plot(ex_head_torso_rotation['Time-T1-4.4-upper (ms)'], ex_head_torso_rotation['Head-Torso-Rotation-T1-4.4-upper (deg)'], **plotExperiment)
axs[0].set_title('T1 impact at 4.4 m/s')
axs[0].set_ylabel('Head rotation (deg)')
# negative sign is used to change the axis system
axs[0].plot(simData_50F_2.Bone.Head_COG_ry.time, -np.degrees(simData_50F_2.Bone.Head_COG_ry.displacement-simData_50F_2.Bone.T1_COG_ry.displacement), label="VIVA+ 50F", **plot50F)
axs[0].plot(simData_50M_2.Bone.Head_COG_ry.time, -np.degrees(simData_50M_2.Bone.Head_COG_ry.displacement-simData_50M_2.Bone.T1_COG_ry.displacement), label="VIVA+ 50M", **plot50M)
#axs[0].plot(plotData_T1_4_4['Bone:Head_COG_ry:time[ms]'], -np.degrees(plotData_T1_4_4['Bone:Head_COG_ry:ry[rad]']-plotData_T1_4_4['Bone:T1_COG_ry:ry[rad]']), color = 'red')

axs[1].plot(ex_head_torso_rotation['Time-T1-6.6-lower (ms)'], ex_head_torso_rotation['Head-Torso-Rotation-T1-6.6-lower (deg)'],**plotExperiment)
axs[1].plot(ex_head_torso_rotation['Time-T1-6.6-upper (ms)'], ex_head_torso_rotation['Head-Torso-Rotation-T1-6.6-upper (deg)'], **plotExperiment)
axs[1].set_title('T1 impact at 6.6 m/s')
axs[1].set_ylabel('Head rotation (deg)')
axs[1].plot(simData_50F_3.Bone.Head_COG_ry.time, -np.degrees(simData_50F_3.Bone.Head_COG_ry.displacement-simData_50F_3.Bone.T1_COG_ry.displacement), **plot50F)
axs[1].plot(simData_50M_3.Bone.Head_COG_ry.time, -np.degrees(simData_50M_3.Bone.Head_COG_ry.displacement-simData_50M_3.Bone.T1_COG_ry.displacement), **plot50M)
#axs[1].plot(plotData_T1_6_6['Bone:Head_COG_ry:time[ms]'], -np.degrees(plotData_T1_6_6['Bone:Head_COG_ry:ry[rad]']-plotData_T1_6_6['Bone:T1_COG_ry:ry[rad]']), color = 'red')

axs[2].plot(ex_head_torso_rotation['Time-T6-lower (ms)'], ex_head_torso_rotation['Head-Torso-Rotation-T6-lower (deg)'], **plotExperiment)
axs[2].plot(ex_head_torso_rotation['Time-T6-upper (ms)'], ex_head_torso_rotation['Head-Torso-Rotation-T6-upper (deg)'], **plotExperiment)
axs[2].set_title('T6 impact at 4.4 m/s')
axs[2].plot(simData_50F.Bone.Head_COG_ry.time, -np.degrees(simData_50F.Bone.Head_COG_ry.displacement-simData_50F.Bone.T1_COG_ry.displacement), **plot50F)
axs[2].plot(simData_50M.Bone.Head_COG_ry.time, -np.degrees(simData_50M.Bone.Head_COG_ry.displacement-simData_50M.Bone.T1_COG_ry.displacement), **plot50M)
#axs[2].plot(plotData_T6['Bone:Head_COG_ry:time[ms]'], -np.degrees(plotData_T6['Bone:Head_COG_ry:ry[rad]']-plotData_T6['Bone:T1_COG_ry:ry[rad]']), color = 'red')

axs[2].set_xlabel('Time (ms)')
axs[2].set_ylabel('Head-Torso rotation (deg)');
fig_htr.legend(loc='center left', bbox_to_anchor=(1, 0.5))
plt.xlim([0, t_lim]);
plt.ylim([-20,100])
(-20.0, 100.0)
../_images/dfeb69624a3e146d89dfb56f4debb25ccc7b233d6dff39bca491e5d38ede573c.png

Head-Torso X-Displacement#

Hide code cell source
fig_htx, axs = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True,figsize=(5, 10))
fig_htx.suptitle('Head-Torso X-Displacement vs Time')

axs[0].plot(ex_head_torso_x_disp['Time-T1-4.4-lower (ms)'], ex_head_torso_x_disp['Head-Torso-x-displacement-T1-4.4-lower (mm)'], label="Corridors from experiments", **plotExperiment)
axs[0].plot(ex_head_torso_x_disp['Time-T1-4.4-upper (ms)'], ex_head_torso_x_disp['Head-Torso-x-displacement-T1-4.4-upper (mm)'], **plotExperiment)
#negative sign is used to change the axis system

htx_simData_50F_2 = simData_50F_2.Bone.Head_COG_x.displacement - simData_50F_2.Bone.T1_COG_x.displacement

axs[0].plot(simData_50F_2.Bone.Head_COG_x.time, htx_simData_50F_2- htx_simData_50F_2.iloc[0], label="VIVA+ 50F", **plot50F)
htx_simData_50M_2 = simData_50M_2.Bone.Head_COG_x.displacement - simData_50M_2.Bone.T1_COG_x.displacement
axs[0].plot(simData_50M_2.Bone.Head_COG_x.time, htx_simData_50M_2- htx_simData_50M_2.iloc[0], label="VIVA+ 50M", **plot50M)
axs[0].set_title('T1 impact at 4.4 m/s')
axs[0].set_ylabel('Head-Torso X-Disp (mm)')

axs[1].plot(ex_head_torso_x_disp['Time-T1-6.6-lower (ms)'], ex_head_torso_x_disp['Head-Torso-x-displacement-T1-6.6-lower (mm)'], **plotExperiment)
axs[1].plot(ex_head_torso_x_disp['Time-T1-6.6-upper (ms)'], ex_head_torso_x_disp['Head-Torso-x-displacement-T1-6.6-upper (mm)'], **plotExperiment)
#htx_T1_6_6_50F = plotData_T1_6_6['Bone:Head_COG_x:x[mm]']-plotData_T1_6_6['Bone:T1_COG_x:x[mm]']
#axs[1].plot(plotData_T1_6_6['Bone:Head_COG_x:time[ms]'], htx_T1_6_6_50F - htx_T1_6_6_50F[0], color = 'red')
htx_simData_50F_3 = simData_50F_3.Bone.Head_COG_x.displacement - simData_50F_3.Bone.T1_COG_x.displacement
axs[1].plot(simData_50F_3.Bone.Head_COG_x.time, htx_simData_50F_3- htx_simData_50F_3.iloc[0], **plot50F)
htx_simData_50M_3 = simData_50M_3.Bone.Head_COG_x.displacement - simData_50M_3.Bone.T1_COG_x.displacement
axs[1].plot(simData_50M_3.Bone.Head_COG_x.time, htx_simData_50M_3- htx_simData_50M_3.iloc[0], **plot50M)
axs[1].set_title('T1 impact at 6.6 m/s')
axs[1].set_ylabel('Head-Torso X-Disp (mm)')

axs[2].plot(ex_head_torso_x_disp['Time-T6-lower (ms)'], ex_head_torso_x_disp['Head-Torso-x-displacement-T6-lower (mm)'], **plotExperiment)
axs[2].plot(ex_head_torso_x_disp['Time-T6-upper (ms)'], ex_head_torso_x_disp['Head-Torso-x-displacement-T6-upper (mm)'], **plotExperiment)
#htx_T6_50F = plotData_T6['Bone:Head_COG_x:x[mm]']-plotData_T6['Bone:T1_COG_x:x[mm]']
#axs[2].plot(plotData_T6['Bone:Head_COG_ry:time[ms]'], htx_T6_50F - htx_T6_50F[0], color = 'red')
htx_simData_50F = simData_50F.Bone.Head_COG_x.displacement - simData_50F.Bone.T1_COG_x.displacement
axs[2].plot(simData_50F.Bone.Head_COG_x.time, htx_simData_50F- htx_simData_50F.iloc[0] ,**plot50F)
htx_simData_50M = simData_50M.Bone.Head_COG_x.displacement - simData_50M.Bone.T1_COG_x.displacement
axs[2].plot(simData_50M.Bone.Head_COG_x.time, htx_simData_50M- htx_simData_50M.iloc[0] , **plot50M)
axs[2].set_title('T6 impact at 4.4 m/s')
axs[2].set_xlabel('Time (ms)')
axs[2].set_ylabel('Head-Torso X-Disp (mm)')
fig_htx.legend(loc='center left', bbox_to_anchor=(1, 0.5))

plt.xlim([0, t_lim]);
plt.ylim([-150, 1]);
../_images/058a1b41f44c37702d8ff0374a1af6581b6b7084477ab93e3c415207cb23b4d0.png

Head-Torso Z-Displacement#

Hide code cell source
fig_htz, axs = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True,figsize=(5, 10))
fig_htz.suptitle('Head-Torso Z-Displacement vs Time')

axs[0].plot(ex_head_torso_z_disp['Time-T1-4.4-lower (ms)'], ex_head_torso_z_disp['Head-Torso-z-displacement-T1-4.4-lower (mm)'], label="Corridors from experiments", **plotExperiment)
axs[0].plot(ex_head_torso_z_disp['Time-T1-4.4-upper (ms)'], ex_head_torso_z_disp['Head-Torso-z-displacement-T1-4.4-upper (mm)'], **plotExperiment)
# negative sign is used to change the axis system
#htz_T1_4_4_50F = (plotData_T1_4_4['Bone:Head_COG_z:z[mm]']-plotData_T1_4_4['Bone:T1_COG_z:z[mm]'])
#axs[0].plot(plotData_T1_4_4['Bone:Head_COG_z:time[ms]'], htz_T1_4_4_50F - htz_T1_4_4_50F[0], color = 'red' )
htx_simData_50F_2 = simData_50F_2.Bone.Head_COG_z.displacement - simData_50F_2.Bone.T1_COG_z.displacement
axs[0].plot(simData_50F_2.Bone.Head_COG_z.time, -(htx_simData_50F_2- htx_simData_50F_2.iloc[0]) , label="VIVA+ 50F", **plot50F)
htx_simData_50M_2 = simData_50M_2.Bone.Head_COG_z.displacement - simData_50M_2.Bone.T1_COG_x.displacement
axs[0].plot(simData_50M_2.Bone.Head_COG_z.time, -(htx_simData_50M_2- htx_simData_50M_2.iloc[0]) , label="VIVA+ 50M", **plot50M)
axs[0].set_title('T1 impact at 4.4 m/s')
axs[0].set_ylabel('Head-Torso Z-Disp (mm)')


axs[1].plot(ex_head_torso_z_disp['Time-T1-6.6-lower (ms)'], ex_head_torso_z_disp['Head-Torso-z-displacement-T1-6.6-lower (mm)'], **plotExperiment)
axs[1].plot(ex_head_torso_z_disp['Time-T1-6.6-upper (ms)'], ex_head_torso_z_disp['Head-Torso-z-displacement-T1-6.6-upper (mm)'], **plotExperiment)
#htz_T1_6_6_50F = (plotData_T1_6_6['Bone:Head_COG_z:z[mm]']-plotData_T1_6_6['Bone:T1_COG_z:z[mm]'])
#axs[1].plot(plotData_T1_6_6['Bone:Head_COG_z:time[ms]'], htz_T1_6_6_50F - htz_T1_6_6_50F[0], color = 'red')
htx_simData_50F_3 = simData_50F_3.Bone.Head_COG_z.displacement - simData_50F_3.Bone.T1_COG_z.displacement
axs[1].plot(simData_50F_3.Bone.Head_COG_z.time, -(htx_simData_50F_3- htx_simData_50F_3.iloc[0]) , **plot50F)
htx_simData_50M_3 = simData_50M_3.Bone.Head_COG_z.displacement - simData_50M_3.Bone.T1_COG_x.displacement
axs[1].plot(simData_50M_3.Bone.Head_COG_z.time, -(htx_simData_50M_3- htx_simData_50M_3.iloc[0])  , **plot50M)
axs[1].set_title('T1 impact at 6.6 m/s')
axs[1].set_ylabel('Head-Torso Z-Disp (mm)')


axs[2].plot(ex_head_torso_z_disp['Time-T6-lower (ms)'], ex_head_torso_z_disp['Head-Torso-z-displacement-T6-lower (mm)'], **plotExperiment)
axs[2].plot(ex_head_torso_z_disp['Time-T6-upper (ms)'], ex_head_torso_z_disp['Head-Torso-z-displacement-T6-upper (mm)'], **plotExperiment)
#htz_T6_50F = (plotData_T6['Bone:Head_COG_z:z[mm]']-plotData_T6['Bone:T1_COG_z:z[mm]'])
##axs[2].plot(head_torso_rotation['Time-T6-lower (ms)'], head_torso_rotation['Head-Torso-Rotation-T6-lower (deg)'])
##axs[2].plot(head_torso_rotation['Time-T6-upper (ms)'], head_torso_rotation['Head-Torso-Rotation-T6-upper (deg)'])
#axs[2].plot(plotData_T6['Bone:Head_COG_z:time[ms]'], htz_T6_50F - htz_T6_50F[0], color = 'red' )
htx_simData_50F = simData_50F.Bone.Head_COG_z.displacement - simData_50F.Bone.T1_COG_z.displacement
axs[2].plot(simData_50F.Bone.Head_COG_z.time, -(htx_simData_50F- htx_simData_50F.iloc[0])  ,**plot50F)
htx_simData_50M = simData_50M.Bone.Head_COG_z.displacement - simData_50M.Bone.T1_COG_x.displacement
axs[2].plot(simData_50M.Bone.Head_COG_z.time, -(htx_simData_50M- htx_simData_50M.iloc[0]) , **plot50M)
##axs[2].plot(head_torso_rotation['Time-T6-lower (ms)'], head_torso_rotation['Head-Torso-Rotation-T6-lower (deg)'])
##axs[2].plot(head_torso_rotation['Time-T6-upper (ms)'], head_torso_rotation['Head-Torso-Rotation-T6-upper (deg)'])



axs[2].set_title('T6 impact at 4.4 m/s')
axs[2].set_xlabel('Time (ms)')
axs[2].set_ylabel('Head-Torso Z-Disp (mm)')

plt.xlim([0, t_lim]);
fig_htz.legend(loc='center left', bbox_to_anchor=(1, 0.5))
<matplotlib.legend.Legend at 0x2ae76740d30>
../_images/831bbff13bd008ac90f5d08f664530f6fe9b9c545d9f550daf404c77919cf807.png

Chest Force and Deflection#

Chest Force vs Deflection#

Hide code cell content
chest_deflection_50F_2 =  simData_50F_2.Bone.T8_COG_x.displacement - simData_50F_2.Bone.Sternum_PX_x.displacement
chest_deflection_50M_2 =  simData_50M_2.Bone.T8_COG_x.displacement - simData_50M_2.Bone.Sternum_PX_x.displacement

chest_deflection_50F_3 =  simData_50F_3.Bone.T8_COG_x.displacement - simData_50F_3.Bone.Sternum_PX_x.displacement
chest_deflection_50M_3 =  simData_50M_3.Bone.T8_COG_x.displacement - simData_50M_3.Bone.Sternum_PX_x.displacement

chest_deflection_50F =  simData_50F.Bone.T8_COG_x.displacement - simData_50F.Bone.Sternum_PX_x.displacement
chest_deflection_50M =  simData_50M.Bone.T8_COG_x.displacement - simData_50M.Bone.Sternum_PX_x.displacement
Hide code cell source
## TODO: Define Deflection!!!
fig_fd, axs = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True,figsize=(5, 10))
fig_fd.suptitle('Chest Force vs Deflection')


axs[0].plot(ex_impact_force_deflection['Deflection-T1-4.4-lower (mm)'], ex_impact_force_deflection['Impact-Force-T1-4.4-lower (kN)'],label="corridors from experiments", **plotExperiment)
axs[0].plot(ex_impact_force_deflection['Deflection-T1-4.4-upper (mm)'], ex_impact_force_deflection['Impact-Force-T1-4.4-upper (kN)'], label="corridors from experiments", **plotExperiment)
axs[0].plot((chest_deflection_50F_2 -chest_deflection_50F_2.iloc[0])[simData_50F_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2], 
            simData_50F_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1][simData_50F_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2] , **plot50F)
axs[0].plot((chest_deflection_50M_2 -chest_deflection_50M_2.iloc[0])[simData_50M_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2], 
            simData_50M_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1][simData_50M_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2] , **plot50M)

axs[0].set_title('T1 impact at 4.4 m/s')
axs[0].set_ylabel('Impact Force (kN)')

axs[1].plot(ex_impact_force_deflection['Deflection-T1-6.6-lower (mm)'], ex_impact_force_deflection['Impact-Force-T1-6.6-lower (kN)'], **plotExperiment)
axs[1].plot(ex_impact_force_deflection['Deflection-T1-6.6-upper (mm)'], ex_impact_force_deflection['Impact-Force-T1-6.6-upper (kN)'], **plotExperiment)
axs[1].plot((chest_deflection_50F_3 -chest_deflection_50F_3.iloc[0])[simData_50F_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2], 
            simData_50F_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1][simData_50F_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2] , **plot50F)
axs[1].plot((chest_deflection_50M_3 -chest_deflection_50M_3.iloc[0])[simData_50M_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2], 
            simData_50M_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1][simData_50M_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2] , **plot50M)

axs[1].set_title('T1 impact at 6.6 m/s')
axs[1].set_ylabel('Impact Force (kN)')

axs[2].plot(ex_impact_force_deflection['Deflection-T6-4.4-lower (mm)'], ex_impact_force_deflection['Impact-Force-T6-4.4-lower (kN)'], **plotExperiment)
axs[2].plot(ex_impact_force_deflection['Deflection-T6-4.4-upper (mm)'], ex_impact_force_deflection['Impact-Force-T6-4.4-upper (kN)'], **plotExperiment)
axs[2].plot((chest_deflection_50F -chest_deflection_50F.iloc[0])[simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2], 
            simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1][simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2] , **plot50F)
axs[2].plot((chest_deflection_50M -chest_deflection_50M.iloc[0])[simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2], 
            simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1][simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1] >0.2] , **plot50M)
axs[2].set_title('T6 impact at 4.4 m/s')

axs[2].set_xlabel('Deflection (mm)')
axs[2].set_ylabel('Impact Force (kN)');

plt.xlim([-0.5, 70]);
../_images/4c8318308fcecf4b196b193bcba9066440478c5e5ba8e4ac7204c482c31b4c7e.png

Impact force vs time#

Hide code cell source
fig_ft, axs = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True,figsize=(5, 10))
fig_ft.suptitle('Chest Force vs Time')

axs[0].plot(ex_impact_force_time['Time-T1-4.4-lower (ms)'], ex_impact_force_time['Impact-Force-4.4-lower-T1 (kN)'],label="corridors from experiments", **plotExperiment)
axs[0].plot(ex_impact_force_time['Time-T1-4.4-upper (ms)'], ex_impact_force_time['Impact-Force-4.4-upper-T1 (kN)'], **plotExperiment)
axs[0].plot(simData_50F_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,0], simData_50F_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1],  label="VIVA+ 50F", **plot50F)
axs[0].plot(simData_50M_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,0], simData_50M_2.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1],  label="VIVA+ 50F", **plot50M)
axs[0].set_title('T1 impact at 4.4 m/s')
axs[0].set_ylabel('Impact Force (kN)')
#axs[0].plot(plotData_T1_4_4['Bone:Head_COG_z:time[ms]'], -plotData_T1_4_4['Bone:Head_COG_z:z[mm]'])

axs[1].plot(ex_impact_force_time['Time-T1-6.6-lower (ms)'], ex_impact_force_time['Impact-Force-lower-6.6-T1 (kN)'], **plotExperiment)
axs[1].plot(ex_impact_force_time['Time-T1-6.6-upper (ms)'], ex_impact_force_time['Impact-Force-6.6-upper-T1 (kN)'], **plotExperiment)
axs[1].plot(simData_50F_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,0], simData_50F_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1],  **plot50F)
axs[1].plot(simData_50M_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,0], simData_50M_3.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1],  **plot50M)
axs[1].set_title('T1 impact at 6.6 m/s')
axs[1].set_ylabel('Impact Force (kN)')

axs[2].plot(ex_impact_force_time['Time-T6-lower (ms)'], ex_impact_force_time['Impact-Force-lower-T6 (kN)'], **plotExperiment)
axs[2].plot(ex_impact_force_time['Time-T6-upper (ms)'], ex_impact_force_time['Impact-Force-upper-T6 (kN)'], **plotExperiment)
axs[2].plot(simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,0], simData_50F.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1],  **plot50F)
axs[2].plot(simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,0], simData_50M.IMPACTOR["Contactforce-impactor-to-HBM-m"].iloc[:,1],  **plot50M)
axs[2].set_title('T6 impact at 4.4 m/s')

axs[2].set_xlabel('Time (ms)')
axs[2].set_ylabel('Impact Force (kN)');

plt.xlim([0, t_lim]);
plt.ylim([0, 8]);
fig_ft.legend(loc='center left', bbox_to_anchor=(1, 0.5))
<matplotlib.legend.Legend at 0x2ae77154ee0>
../_images/5e39eb8fe75c875e9c3661b42b9fa8e43985be82bf0665de05ee4ee65322e895.png

Deflection vs time#

Hide code cell source
fig_dt, axs = plt.subplots(nrows=3, ncols=1, sharex=True, sharey=True,figsize=(5, 10))
fig_dt.suptitle('Deflection vs Time')

axs[0].plot(ex_deflection_time['Time-T1-4.4-lower (ms)'], ex_deflection_time['Deflection-T1-4.4-lower (mm)'],label="corridors from experiments", **plotExperiment)
axs[0].plot(ex_deflection_time['Time-T1-4.4-upper (ms)'], ex_deflection_time['Deflection-T1-4.4-upper (mm)'], **plotExperiment)
axs[0].plot(simData_50F_2.Bone.T8_COG_x.time, chest_deflection_50F_2 -chest_deflection_50F_2.iloc[0],  **plot50F)
axs[0].plot(simData_50M_2.Bone.T8_COG_x.time, chest_deflection_50M_2 -chest_deflection_50M_2.iloc[0], **plot50M)
axs[0].set_title('T1 impact at 4.4 m/s')
axs[0].set_ylabel('Deflection (mm)')

axs[1].plot(ex_deflection_time['Time-T1-6.6-lower (ms)'], ex_deflection_time['Deflection-T1-6.6-lower (mm)'], **plotExperiment)
axs[1].plot(ex_deflection_time['Time-T1-6.6-upper (ms)'], ex_deflection_time['Deflection-T1-6.6-upper (mm)'], **plotExperiment)
axs[1].plot(simData_50F_3.Bone.T8_COG_x.time, chest_deflection_50F_3 -chest_deflection_50F_3.iloc[0],  **plot50F)
axs[1].plot(simData_50M_3.Bone.T8_COG_x.time, chest_deflection_50M_3 -chest_deflection_50M_3.iloc[0], **plot50M)
axs[1].set_title('T1 impact at 6.6 m/s')
axs[1].set_ylabel('Deflection (mm)')

axs[2].plot(ex_deflection_time['Time-T6-lower (ms)'], ex_deflection_time['Deflection-T6-lower (mm)'], **plotExperiment)
axs[2].plot(ex_deflection_time['Time-T6-upper (ms)'], ex_deflection_time['Deflection-T6-upper (mm)'], **plotExperiment)
axs[2].plot(simData_50F.Bone.T8_COG_x.time, chest_deflection_50F -chest_deflection_50F.iloc[0],  **plot50F)
axs[2].plot(simData_50M.Bone.T8_COG_x.time, chest_deflection_50M -chest_deflection_50M.iloc[0], **plot50M)
axs[2].set_title('T6 impact at 4.4 m/s')
#axs[2].plot(plotData_T6['Bone:T8_center_x:time[ms]'], -(chest_deflection-chest_deflection[0]))

axs[2].set_xlabel('Time (ms)')
axs[2].set_ylabel('Deflection (mm)');

plt.xlim([0, t_lim]);
../_images/f4af9b714e77cd3f4e44a219de1aa1292565d200153034b73ce98cdba01bab4e.png