adding function that calcualtes number of cardiac cycles and period of cardiac cycle

This commit is contained in:
Aloma Blanch 2020-07-17 17:10:24 -05:00
parent a2fcf7383b
commit bd719e0c11
2 changed files with 43 additions and 10 deletions

View File

@ -5,14 +5,49 @@ Created on Thu Jul 16 15:08:27 2020
@author: Aloma Blanch @author: Aloma Blanch
""" """
import numpy as np import numpy as np
import matplotlib.pyplot as plt
import pandas as pd import pandas as pd
from statistics import mean import matplotlib.pyplot as plt
# from scipy.signal import find_peaks
import matplotlib.transforms as mtransforms import matplotlib.transforms as mtransforms
from math import floor
from statistics import mean
from scipy.signal import find_peaks
def cycle(folder,dt,save_path):
pressure = np.loadtxt(folder + '/PHistRCR.dat',skiprows=2)
N_ts = pressure.shape[0]
T = round(dt*N_ts,3)
time = np.linspace(0,T,N_ts)
# Find peaks, keep only the maximums
peaks, _ = find_peaks(pressure[:,-1])
idx = np.where(pressure[peaks,-1] >= np.mean(pressure))
peaks_loc = peaks[idx]
P_peaks = pressure[peaks,-1][pressure[peaks,-1] >= np.mean(pressure)]
# Rmove the multiple picks found in the same location
idx_del = []
t_pk_loc = time[peaks_loc].tolist()
peak_tdiff = [t_pk_loc[n]-t_pk_loc[n-1] for n in range(1,len(t_pk_loc))]
for i in range(0,len(peak_tdiff)):
if peak_tdiff[i]<= dt*10:
idx_del.append(i)
t_pk_loc[i] = []
peak_tdiff[i] = []
t_pk_loc[:] = [x for x in t_pk_loc if x]
peak_tdiff[:] = [x for x in peak_tdiff if x]
P_peaks = np.delete(P_peaks,idx_del)
fig, ax = plt.subplots()
ax.plot(time,pressure[:,-1]/1333.22,'b')
ax.plot(t_pk_loc, P_peaks/1333.22, "or",label='peak location')
ax.set(xlabel='time [s]', ylabel='Pressure [mmHg]',
title='Pressure at last outlet')
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.legend(loc=0)
# plt.show()
plt.savefig(save_path + '/Pressure_max_n_cycles.pdf')
return (floor(mean(peak_tdiff)*1000)/1000,len(t_pk_loc))
def error_plot(folder,t_step,r_criteria,save_path): def error_plot(folder,t_step,r_criteria,save_path):
# Load iterations and residual error # Load iterations and residual error

10
main.py
View File

@ -20,7 +20,7 @@ import os.path
# from fpdf import FPDF # from fpdf import FPDF
from functions import error_plot, periodicity, pressure, flow, inlet_flow_waveform, rcr from functions import error_plot, periodicity, pressure, flow, inlet_flow_waveform, rcr, cycle
from generatePDF import generatePDF from generatePDF import generatePDF
@ -33,11 +33,6 @@ save_path = folder+'/'+project+'-report'
os.mkdir(save_path) os.mkdir(save_path)
save_pdf = save_path + '/' + project + '-report.pdf' save_pdf = save_path + '/' + project + '-report.pdf'
# Input parameters
T_cyc = 0.477
n_cyc = 5
# Read important parameters from - solver.inp file # Read important parameters from - solver.inp file
mylines = [] # Declare an empty list named mylines. mylines = [] # Declare an empty list named mylines.
with open (project_folder + '/solver.inp', 'rt') as myfile: # Open lorem.txt for reading text data. with open (project_folder + '/solver.inp', 'rt') as myfile: # Open lorem.txt for reading text data.
@ -56,6 +51,9 @@ t_btw_rst = int(mylines[6][37:-1])
# Extracting Outlet Boundary Conditions from - rcrt.dat fle # Extracting Outlet Boundary Conditions from - rcrt.dat fle
Rc_C_Rd = rcr(project_folder) Rc_C_Rd = rcr(project_folder)
# Extracting number of cycles and period of cardiac cycle
(T_cyc,n_cyc) = cycle(folder,dt,save_path)
# Cehcking convergency and periodicity # Cehcking convergency and periodicity
error_plot(folder,dt,rc,save_path) error_plot(folder,dt,rc,save_path)
txt1 = periodicity(project,folder,dt,T_cyc,n_cyc,save_path) txt1 = periodicity(project,folder,dt,T_cyc,n_cyc,save_path)