Location: Peripheral airways matlab/CellML @ 30e6db7fb82a / Peripheral_matlab_dell_updated / coup.jl

Author:
aram148 <42922407+aram148@users.noreply.github.com>
Date:
2022-07-26 11:49:42+12:00
Desc:
updated documentation and renamed model
Permanent Source URI:
https://models.fieldml.org/workspace/7e5/rawfile/30e6db7fb82a9bb715b0121cdfc131c19e5cb2ff/Peripheral_matlab_dell_updated/coup.jl

using PyPlot

## This model incorporates the Hai-Murphy crossbridge ODEs to the BG-AW-heterogeneity
## model being developed.

function coup(order,kappa)#,rinitial)
tic()

numBr = 2^order - 1;     # number of airways
numOrd1 = (numBr+1)/2
# initial values for airways [mm]
rimax = [0.296 0.318 0.337 0.358 0.384 0.414 0.445 0.484 0.539 0.608 ...
    0.692 0.793 0.913 1.052 1.203 1.374]
rinitial=[]
for k=1:order
    rinitial=[rinitial rimax[k]*ones(2^(order-k),1)]'
end
rinitial=rinitial+0.01*rand(1,length(rinitial))'; # peturbation of rinitial

M = 1; Mp = 0; AMp = 0; AM = 0

RR0= [M Mp AMp AM]'
r[:,1]=rinitial; #airways, order 1 : order n
uv[:,1] = zeros(numBr,1); # pressure in airway
vv[:,1] = zeros(numBr,1); # airflow within the airway
vds[:,1] = zeros((numBr+1)/2,1); # airflow entering alveoli
RR[:,1] = RR0
y0 = [r[:,1] uv[:,1] vv[:,1] vds[:,1] RR[:,1]]'; #ICs vector

#Stepwise kappa value
    tspan = range(0,100,length=1000)


    parm = kappa


    # Set numerical accuracy options for ODE solver
    options = odeset("RelTol', 1e-08, 'AbsTol', 1e-08, 'MaxStep", 0.1)

    [t,NN]=ode15s(@(t,y) seven_airway[t,y,order,parm], tspan, y0, options)
    U = zeros(length(NN),length(r)); # pressure including viscous damping
    UVDOT = zeros(length(NN),length(r))
    VVDOT = zeros(length(NN),length(r)); #airflow
    force = zeros(length(NN),length(r))
    phosphorylation = zeros(length(NN),length(r))
    pmid = zeros(length(NN),length(r))
    for j = 1:length(NN)
        [U[j,:],UVDOT[j,:],VVDOT[j,:],force[j,:],phosphorylation[j,:],pmid[j,:]] = seven_airway2[t[j],NN[j,:],order,parm]
    end
toc()
# CM=jet[length(rinitial)]
r_new = NN[:,1:numBr]
air = zeros(length(NN),length(r))
for i=1:length(rinitial)
    for j = 1:length(t)
     if r_new[j,i] <= 0.01
       air[j,i]=0
      else()
       air[j,i]=1
     end
    end

end
for i = 1:(numOrd1)
#     figure(1)
#     subplot(order,order,i)
#     plot(t,r_new[:,i])
#     title(sprintf("Radius of airway [#d]",i))
# #
# #     figure(2)
# #     subplot(order,10,i)
# # #     M[i] = findpeaks[r_new[:,i]]
# #     DataInv[:,i] = 1.01*max(r_new[:,i]) - r_new[:,i]
# #     [Minima_P(i},MinIIdx{i)] = findpeaks[DataInv[:,i]]
# #     abc = r_new[:,i];
# #     Minima_P[i] = abc[MinIIdx[i]];
# #     plot(t[MinIIdx(i}],Minima_P{i),"-o")
#
    figure(2)
    subplot(order,order,i)
    plot(t,VVDOT[:,i])
    title(sprintf("Flow in airway [#d]",i))
# # #
#     figure(3)
#     subplot(order,order,i)
#     plot(t,U[:,i])
#     title(sprintf("Pressure in airway [#d]",i))
#
#     figure(5)
#     subplot(order,order,i)
#     plot(t,pmid[:,i])
end
# #
# #
# legendStr = cell(1,length(rinitial))
# for i = 1:length(legendStr)
#     legendStr[i] = sprintf("r_[#d]",i)
#
# end
# legend(legendStr,"Location','BestOutside")
# ## Measure for state of heterogeniety
x = cell(1,numOrd1)
for i = 1:length(x)
    x[i] = air[:,i]
end
summ = zeros(1,length(x[1]))
for i = 1:length(x)
    switch i
        case 1
            neighbour_diff = sqrt((x(:,i) - x(:,end))^2 + (x(:,i) - x(:,i+1))^2)
        case length(x)
            neighbour_diff = sqrt((x(:,i) - x(:,i-1))^2 + (x(:,i) - x(:,1))^2)
        otherwise()
            neighbour_diff = sqrt((x(:,i) - x(:,i-1))^2 + (x(:,i) - x(:,i+1))^2)
    end
    summ = summ + neighbour_diff'


end
summ=summ/(2^(order-3)*4*sqrt(2))

y=cell(1,numOrd1)
 for k=1:length(y)
     y[k]=VVDOT[:,k]
 end
    flow_sum = zeros(1,length(y[1]))

    for ii = 1:length(y)
      switch ii
          case 1
              neighbour_diff1 = sqrt((y(:,ii) - y(:,end))^2 + (y(:,ii) - y(:,ii+1))^2)
          case length(y)
              neighbour_diff1 = sqrt((y(:,ii) - y(:,ii-1))^2 + (y(:,ii) - y(:,1))^2)
          otherwise()
              neighbour_diff1 = sqrt((y(:,ii) - y(:,ii-1))^2 + (y(:,ii) - y(:,ii+1))^2)
      end
     flow_sum = flow_sum + neighbour_diff1'


return [t,NN,air,U,UVDOT,VVDOT,force,phosphorylation,summ,flow_sum]
end
flow_sum=flow_sum./numOrd1


# ## graphing airways
node1 = zeros(1,numBr)
    node2 = zeros(1,numBr)

    # e.g. for an order 4: node1 = [1 2 2 3 3 4 4 5 5 6 6 7 7 8 8]
    node1[1] = 1
    for i = 1:(numBr-1)/2
        node1[2*i:2*i+1] = [i+1 i+1]
    end

    # e.g. for an order 4: node2 = [2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
    for i = 1:numBr
        node2[i] = i+1
    end

    ind = zeros(1,numBr)
    for i = 1:numBr
        ind[i] = i
    end
#     figure()
    A=reverse(air[end,:], dims = 2)

    figure(4)
    G = graph[node1,node2,A]
    h=plot(G,"LineWidth",2)
    h.EdgeCData=A
    labelnode[h,[node1 node2],'']
    labeledge[h,ind,G.Edges.Weight[ind]]
    colormap jet



# for i = 1:8
# subplot(4,2,i)
# plot(time,VVDOT[:,i])
# title(sprintf("Flow of airway [#d]",i))
# end

end