Calculation of fascicle length and pennation angle

by

 

03 Apr 2013 (Updated )

This functions calculates fascicle length and pennation angles of a muscles 3d data set.

DTI_vs_MicroScribe.m
clear all
%% Einlesen der Knochenkoordinaten aus:

%       -Relativbezug "beispiel.xlsc",
%       -Tabellenblatt "Grundkoordinaten" (mit den Koordinaten fr
%        Sprunggelenk, Calcaneus und Fibula)
%       -Zellbereich der jeweiligen Grundkoordinaten fr Sprunggelenk,
%        Fibula, Calcaneus
% Dateipfad einlesen 
Verzeichnis = 'H:\Arbeit\Microscribe\Microscribemappen_neu\';
Dateiname = 'AUMA_links';
Endung = '.xlsx';
filename = [Verzeichnis Dateiname Endung];
%
Fibula = xlsread(filename,'Fibula');            %%%Einlesen der Fibulakoordinaten
Fuss = xlsread(filename,'Fu');            %%%Einlesen der Sprunggelenktkoordinaten
Calcaneus = xlsread(filename,'Calcaneus');       %%%Einlesen der Calcaneuskoordinaten
Faszikel = xlsread(filename,'Rohdaten');            %%%Einlesen der Faszikelkoordinaten
% Achillessehne = xlsread(filename,'Achillessehne');   %%%Einlesen der Achillessehnendaten
Fibulakoepfchensehne= xlsread(filename,'Fibulasehne');   %%%Einlesen der Fibulakpfchensehne
% Aponeurose = xlsread(filename,'AponeuroseDistal');   %%%Einlesen der Aponeurose   
% Malleolus =  xlsread(filename,'Malleolus');   %%%Einlesen der Aponeurose   
% Aponeurosepro = xlsread(filename,'AponeuroseProximal');   %%%Einlesen der

%% Parameter fr Funktionen
ExcelWrite=1;            %%%Excelwrite=1 Exceldatei wird geschrieben, Option= 1 oder 0
urplotten=0;             %%%urplotten=1; Ursprungsdaten werden geplottet, Option= 1 oder 0
transplotten=0;          %%%Option=1 oder 0; transplotten transformierte Daten plotten
polyplotten=0;           %%%Option= 1 oder 2 oder 3; polyplotten=1 LINEARES Polynom; polyplotten=2 Polynom 2.GRADES; polyplotten=3 Polynom 3.Grades

%% Darstellung der orignalen Daten
%%% GrafikUrsprungsdaten(Fibula,Fuss,Calcaneus,Achillessehne,Faszikel,Aponeurose,Fibulakoepfchensehne,plotten)  %%% Sichtbarkeit=on/off
%%% fehlende Variablen mit [] ersetzen
% GrafikUrsprungsdaten(Fibula,Fuss,Calcaneus,Achillessehne,Faszikel,Aponeurose,Fibulakoepfchensehne,urplotten);  %%% plotten=1->plot
GrafikUrsprungsdaten(Fibula,Fuss,Calcaneus,[],Faszikel,[],Fibulakoepfchensehne,urplotten);  %%% plotten=1->plot
%% Korregistrierungspunkte festelegen

FussSpitze = Fuss(end,:);         %%% Der letzte Punkt der Fusskoordinaten, GEGENPRFEN, ob dieser auch realistisch ist
MeanFibula = nanmean(Fibula);           %%% Mittelt einen Punkt aus der Fibula-Punktwolke
MeanCalcaneus = nanmean(Calcaneus);     %%% Mittelwert der Calcaneuskoordinaten

V1 = MeanFibula - MeanCalcaneus;    %%% Translation um den Calcaneusmean, Winkel V1
V2 = FussSpitze - MeanCalcaneus;    %%% Winkel V2

Winkel = acos(dot(V1,V2)./(norm(V1)*norm(V2)));
Winkel = Winkel - pi/2;

%korrespondierende Punkte
%%% Calcaneus [0 0 0], Filbula [1 0 0]. FussSpitze [1 0 1]
Calcaneus_neu = [0 0 0];            %%% Calcaneus soll [0 0 0] sein
Fibula_neu = [norm(V1),0,0];        %%% Fibula soll [0 0 Winkel] um den Winkel (norm(V1)), Winkel zum Calcaneus verschoben werden
FussSpitze_neu = [ -sin(Winkel)*norm(V2), 0 , -cos(Winkel)*norm(V2) ];  

%% Transformation berechnen
transMat = findrigidbodytrans([MeanFibula; FussSpitze; MeanCalcaneus], [Fibula_neu; FussSpitze_neu; Calcaneus_neu]);

%% Daten transformieren

FibulaTrans = [Fibula ones(size(Fibula,1),1)] * transMat(1:3,:)';                       %%% transformierte und rotierte Fibula
FaszikelTrans = [Faszikel ones(size(Faszikel,1),1)] * transMat(1:3,:)';                 %%% transformierte und rotierte Faszikel
FussTrans = [Fuss ones(size(Fuss,1),1)] * transMat(1:3,:)';                             %%% transformierte und rotierte Fussspitze
% AchillessehneTrans = [Achillessehne ones(size(Achillessehne,1),1)] * transMat(1:3,:)';  %%% transformierte und rotierte Achillessehne
FibulakoepfchensehneTrans = [Fibulakoepfchensehne ones(size(Fibulakoepfchensehne,1),1)] * transMat(1:3,:)';  %%% transformierte und rotierte Achillessehne
% AponeuroseTrans = [Aponeurose  ones(size(Aponeurose ,1),1)] * transMat(1:3,:)';            %%% transformierte und rotierte Aponeurose
CalcaneusTrans = [Calcaneus ones(size(Calcaneus,1),1)] * transMat(1:3,:)';

%% Sprunggelenkswinkel (Fibula, Calcaneus, Fussspitze
Sprunggelenkswinkel= acosd((FussSpitze_neu(1,1)*Fibula_neu(1,1)+FussSpitze_neu(1,2)*Fibula_neu(1,2)+FussSpitze_neu(1,3)*Fibula_neu(1,3))/((sqrt(FussSpitze_neu(1,1)^2+FussSpitze_neu(1,2)^2+FussSpitze_neu(1,3)^2))*(sqrt(Fibula_neu(1,1)^2+Fibula_neu(1,2)^2+Fibula_neu(1,3)^2))));
%%% Aufrumen ;-)
% clear V1 V2 Winkel MeanCalcaneus MeanFibula Fibula_neu FussSpitze_neu  transMat ; 

%% Plot der Transformierten Daten
% TransGrafik(FibulaTrans,FussTrans,CalcaneusTrans,Achillessehnetrans,Faszi
% kelTrans,FibulakoepfchensehneTrans,AponeuroseTrans,transplotten);   %%%plotte=1 ->plot
TransGrafik(FibulaTrans,FussTrans,CalcaneusTrans,[],FaszikelTrans,FibulakoepfchensehneTrans,[],transplotten);   %%%plotte=1 ->plot
%% Faszikeldaten erfassen, NaN zhlen, Anzahl (und deskriptive Statistik) der Fasern, 

FaszikelTrans(FaszikelTrans==0)=nan;         %%%Im Datensatz FaszikelTrans die Nullen durch nan ersetzen
FaszikelTransNaN=[nan nan nan; FaszikelTrans ]; %%% Vor die erste Zeile eine Zeile bestehen aus nan(s) einfgen
                                             %%% Grund: spter ablaufende For-SChleife kann nicht bei Null beginnen,
                                             %%% sondern bei 1, dieser muss in unserem Fall nan sein
FaszikelTransNaN(end+1,:)=nan                   %%% Nach der letzten Zeile eine Zeile bestehend aus nan(s) einfgen
anzahl_nans=find(isnan(FaszikelTransNaN(:,1))); %%% Anzahl der nans der Variable FaszikelTrans in der ersten Spalte (alle Zeilen) herausfinden = find
                                             %%% Funktion isnan = zeigt nan(s)
for j=1:size(anzahl_nans,1)-1
    for i=(anzahl_nans(j,1)+1):(anzahl_nans(j+1,1)-1)
        laenge(i,1) = sqrt( (FaszikelTransNaN(i+1,1)-FaszikelTransNaN(i,1))^2 + (FaszikelTransNaN(i+1,2)-FaszikelTransNaN(i,2))^2 + (FaszikelTransNaN(i+1,3)-FaszikelTransNaN(i,3))^2 );
    end
end

laenge(laenge==0)=[];                   %%% Entfernen der entstandenen Nullen
laenge=[nan ; laenge ];                 %%% Vor der ersten Zeile ein nan einfgen
anzahl_nans_laenge=find(isnan(laenge)); %%% Anzahl der nan(s) in der Variable Laenge finden

for k=1:size(anzahl_nans_laenge,1)-1
   l=(anzahl_nans_laenge(k,1)+1):(anzahl_nans_laenge(k+1,1)-1);
   faszikel_laenge(k,1) = sum(laenge(l,1));
end
minimum=min(faszikel_laenge)
maximum=max(faszikel_laenge)
average=mean(faszikel_laenge)
%% Polynome fr Fasertracks X-Z-EBENE
FaszikelTrans = [FaszikelTrans; nan nan nan]; 
FaszikelNaNs = find(isnan(FaszikelTrans(:,1)));  %%% Zeilen in denen bei der Variable Fuss ein NaN steht

for j= 1:length(FaszikelNaNs);
    if j == 1
          Faszikelcell {j,1} = FaszikelTrans(1:FaszikelNaNs(j,:)-1,:);
    else
          Faszikelcell {j,1} = FaszikelTrans(FaszikelNaNs(j-1,:)+1:FaszikelNaNs(j,:)-1,:);
    end
    data=polynomtestlin(Faszikelcell {j,1}(:,1),Faszikelcell {j,1}(:,3));
    Faszikelcell {j,2} = coeffvalues(data);         %%% Polynomkoeffizienten fr LINEARES POLYNOM in 2.Zellenspalte schreiben
    clear data;
    data=polynomtest22(Faszikelcell {j,1}(:,1),Faszikelcell {j,1}(:,3));
    Faszikelcell {j,3} = coeffvalues(data);         %%% Polynomkoeffizienten fr POLYNOM 2.GRADES in 3.Zellenspalte schreiben
    clear data;
    data=polynomtest33(Faszikelcell {j,1}(:,1),Faszikelcell {j,1}(:,3));
    Faszikelcell {j,4} = coeffvalues(data);         %%% Polynomkoeffizienten fr POLYNOM 3.GRADES in 4.Zellenspalte schreiben
    clear data;
end

for j = 1:length(FaszikelNaNs);
    for i = 1:length(Faszikelcell {j,1});
        polydataXZlin(i,1) = Faszikelcell {j,2}(1,1)*Faszikelcell {j,1}(i,1) + Faszikelcell {j,2}(1,2);
        %%% polydataXZlin(i,1) Berechnung neuer Z-Werte entsprechend des LINEAREN POLYNOM
        polydataXZ2(i,1) = Faszikelcell {j,3}(1,1)*Faszikelcell {j,1}(i,1)^2 + Faszikelcell {j,3}(1,2)*Faszikelcell {j,1}(i,1) + Faszikelcell {j,3}(1,3);
        %%% polydataXZ2(i,1) Berechnung neuer Z-Werte entsprechend des POLYNOM 2.Grades
        polydataXZ3(i,1) = Faszikelcell {j,4}(1,1)*Faszikelcell {j,1}(i,1)^3 + Faszikelcell {j,4}(1,2)*Faszikelcell {j,1}(i,1)^2 + Faszikelcell {j,4}(1,3)*Faszikelcell {j,1}(i,1) + Faszikelcell {j,4}(1,4);
        %%% polydataXZ3(i,1) Berechnung neuer Z-Werte entsprechend des POLYNOM 3.GRADES        
    end
    %%% 5. Spalte Faszikelcell NEU aufgrund LINEAREM POLYNOM
    Faszikelcell {j,5}(:,1) = Faszikelcell {j,1}(:,1);  %%% originaler X-Wert
    Faszikelcell {j,5}(:,2) = Faszikelcell {j,1}(:,2);  %%% originaler Y-Wert
    Faszikelcell {j,5}(:,3) = polydataXZlin;
    %%% 6. Spalte Faszikelcell NEU aufgrund POLYNOM 2. GRADES
    Faszikelcell {j,6}(:,1) = Faszikelcell {j,1}(:,1);  %%% originaler X-Wert
    Faszikelcell {j,6}(:,2) = Faszikelcell {j,1}(:,2);  %%% originaler Y-Wert
    Faszikelcell {j,6}(:,3) = polydataXZ2;
    %%% 7. Spalte Faszikelcell NEU aufgrund POLYNOM 3. GRADES
    Faszikelcell {j,7}(:,1) = Faszikelcell {j,1}(:,1);  %%% originaler X-Wert
    Faszikelcell {j,7}(:,2) = Faszikelcell {j,1}(:,2);  %%% originaler Y-Wert
    Faszikelcell {j,7}(:,3) = polydataXZ3;
    clear polydata*;
end
FaserTracks = j;

%% Bestimmtheitsmass/R-scquare fr die Polynome berechnen (fr jeder einzelne Faser der 3 verschiedenen Polynome  X-Z-EBENE
for j = 1:length(FaszikelNaNs);
    for i = 1:length(Faszikelcell {j,1});
        MW1=mean(Faszikelcell{j,1}(:,3));   %%%Mittelwert der Z-Werte ORIGINAL X-Z-EBENE
        MW2=mean(Faszikelcell{j,5}(:,3));   %%%Mittelwert der Z-Werte LINEAR X-Z-EBENE
        MW3=mean(Faszikelcell{j,6}(:,3));   %%%Mittelwert der Z-Werte 2.Grades X-Z-EBENE
        MW4=mean(Faszikelcell{j,7}(:,3));   %%%Mittelwert der Z-Werte 3.Grades X-Z-EBENE
        r(i,1)=(Faszikelcell{j,1}(i,3)- MW1)^2; %%%Quadrierter Fehler ORIGINAL, Anzahl entsprechend der "Faszikellnge" X-Z-EBENE
        r(i,2)=(Faszikelcell{j,5}(i,3)- MW2)^2; %%%Quadrierter Fehler von P.LINEAR, Anzahl entsprechend der "Faszikellnge" X-Z-EBENE
        r(i,3)=(Faszikelcell{j,6}(i,3)- MW3)^2; %%%Quadrierter Fehler von P.2.GRADES, Anzahl entsprechend der "Faszikellnge" X-Z-EBENE
        r(i,4)=(Faszikelcell{j,7}(i,3)- MW4)^2; %%%Quadrierter Fehler von P.3.GRADES, Anzahl entsprechend der "Faszikellnge" X-Z-EBENE
    end
    r1=sum(r(:,1));     %%% Summen der Quadratfehler von ORIGINAL X-Z-EBENE
    r2=sum(r(:,2));     %%% Summen der Quadratfehler von LINEAR X-Z-EBENE
    r3=sum(r(:,3));     %%% Summen der Quadratfehler von 2.GRADES X-Z-EBENE
    r4=sum(r(:,4));     %%% Summen der Quadratfehler von 3.GRADES X-Z-EBENE
    GOFXandZ (j,1)=1-((r1-r2)/r1);
    GOFXandZ (j,2)=1-((r1-r3)/r1);
    GOFXandZ (j,3)=1-((r1-r4)/r1);
    clear MW* r;
end

%%% Mittelwert des Bestimmtheitsmasses fr LINEAR, 1.Zeile (MW,SD,Min,Max)
MittelwertGOFXandZ(1,1)= mean (GOFXandZ(:,1));
MittelwertGOFXandZ(1,2)=std (GOFXandZ(:,1));
MittelwertGOFXandZ(1,3)=min (GOFXandZ(:,1));
MittelwertGOFXandZ(1,4)=max (GOFXandZ(:,1));
%%% Mittelwert des Bestimmtheitsmasses fr Polynom 2.GRADES, 1.Zeile (MW,SD,Min,Max)
MittelwertGOFXandZ(2,1)=mean (GOFXandZ(:,2));
MittelwertGOFXandZ(2,2)=std (GOFXandZ(:,2));
MittelwertGOFXandZ(2,3)=min (GOFXandZ(:,2));
MittelwertGOFXandZ(2,4)=max (GOFXandZ(:,2));
%%% Mittelwert des Bestimmtheitsmasses fr Polynom 3.GRADES,, 1.Zeile (MW,SD,Min,Max)
MittelwertGOFXandZ(3,1)=mean (GOFXandZ(:,3));
MittelwertGOFXandZ(3,2)=std (GOFXandZ(:,3));
MittelwertGOFXandZ(3,3)=min (GOFXandZ(:,3));
MittelwertGOFXandZ(3,4)=max (GOFXandZ(:,3));
% xlswrite('GOFXandZ.xlsx',MittelwertGOFXandZ,[Dateiname],'A2');

%% Fiederungswinkel X-Z Ebene
%% Fiederungswinkel LINEARES POLYNOM in X-Z-EBENE 
for j = 1:length(FaszikelNaNs);
    for i = 1:length(Faszikelcell {j,5});
        polydataW(i,1) =  Faszikelcell {j,2}(1,1);
    end
    clear laengeneu laengeorig a b Faszikelmat*
    WinkelcellXZ {j,1} = atand(polydataW);
    clear polydataW;
    WinkelcellXZ {j,2} = prctile(WinkelcellXZ {j,1}(:,1), [25 50 75]);
    WinkelcellXZ {j,2}(1,4) = min(WinkelcellXZ {j,1}(:,1));
    WinkelcellXZ {j,2}(1,5) = max(WinkelcellXZ {j,1}(:,1));
    WinkelcellXZ {j,3}(1,1) = mean (WinkelcellXZ {j,1}(:,1));
    WinkelcellXZ {j,3}(1,2) = std (WinkelcellXZ {j,1}(:,1));
    WinkelcellXZ {j,10} = prctile(WinkelcellXZ {j,1}(:,1), [50]);
end
%% Fiederungswinkel POLYNOM 2.GRADES in X-Z-EBENE 
for j = 1:length(FaszikelNaNs);
    FaszikelmatX=Faszikelcell {j,6}(:,1);
    [a b]=size(FaszikelmatX);
    laengeorig=1:1:a;
    stuetze=20;
    laengeneu=linspace(1,a,stuetze);% Berechnung der Interpolationsskala
    laengeneu=laengeneu';
    FaszikelmatInt=interp1(laengeorig,FaszikelmatX,laengeneu);  %%%FaszikelmatInt sind die neuen X-Werte (Anzahl=Sttze)
    for i = 1:length(FaszikelmatInt(:,1));
        polydataW(i,1) =  2*Faszikelcell{j,3}(1,1)*FaszikelmatInt(i,1) + Faszikelcell{j,3}(1,2);
    end
    clear laengeneu laengeorig a b Faszikelmat*
    WinkelcellXZ {j,4} = atand(polydataW);
    clear polydataW;
    WinkelcellXZ {j,5} = prctile(WinkelcellXZ {j,4}(:,1), [25 50 75]);
    WinkelcellXZ {j,5}(1,4) = min(WinkelcellXZ {j,4}(:,1));
    WinkelcellXZ {j,5}(1,5) = max(WinkelcellXZ {j,4}(:,1));
    WinkelcellXZ {j,6}(1,1) = mean (WinkelcellXZ {j,4}(:,1));
    WinkelcellXZ {j,6}(1,2) = std (WinkelcellXZ {j,4}(:,1));
    WinkelcellXZ {j,11} = prctile(WinkelcellXZ {j,4}(:,1), [50]);
end
%% Fiederungswinkel POLYNOM 3.GRADES in X-Z-EBENE 
for j = 1:length(FaszikelNaNs);
    FaszikelmatX=Faszikelcell {j,7}(:,1);
    [a b]=size(FaszikelmatX);
    laengeorig=1:1:a;
    stuetze=20;
    laengeneu=linspace(1,a,stuetze);% Berechnung der Interpolationsskala
    laengeneu=laengeneu';
    FaszikelmatInt=interp1(laengeorig,FaszikelmatX,laengeneu);
    for i = 1:length(FaszikelmatInt(:,1));
        polydataW(i,1) =  3*Faszikelcell{j,4}(1,1)*(FaszikelmatInt(i,1))^2+ 2*Faszikelcell{j,4}(1,2)*FaszikelmatInt(i,1) + Faszikelcell{j,4}(1,3);
    end
    clear laengeneu laengeorig a b Faszikelmat*
    WinkelcellXZ {j,7} = atand(polydataW);
    clear polydataW;
    WinkelcellXZ {j,8} = prctile(WinkelcellXZ {j,7}(:,1), [25 50 75]);
    WinkelcellXZ {j,8}(1,4) = min(WinkelcellXZ {j,7}(:,1));
    WinkelcellXZ {j,8}(1,5) = max(WinkelcellXZ {j,7}(:,1));
    WinkelcellXZ {j,9}(1,1) = mean (WinkelcellXZ {j,7}(:,1));
    WinkelcellXZ {j,9}(1,2) = std (WinkelcellXZ {j,7}(:,1));
    WinkelcellXZ {j,12} = prctile(WinkelcellXZ {j,7}(:,1), [50]);
end
%% Polynome fr Fasertracks X-Y-EBENE
for j= 1:length(FaszikelNaNs);
    if j == 1
          Faszikelcell {j,1} = FaszikelTrans(1:FaszikelNaNs(j,:)-1,:);
    else
          Faszikelcell {j,1} = FaszikelTrans(FaszikelNaNs(j-1,:)+1:FaszikelNaNs(j,:)-1,:);
    end
    data=polynomtestlin(Faszikelcell {j,1}(:,1),Faszikelcell {j,1}(:,2));
    Faszikelcell {j,8} = coeffvalues(data);         %%% Polynomkoeffizienten fr LINEARES POLYNOM in 8.Zellenspalte schreiben
    clear data;
    data=polynomtest22(Faszikelcell {j,1}(:,1),Faszikelcell {j,1}(:,2));
    Faszikelcell {j,9} = coeffvalues(data);         %%% Polynomkoeffizienten fr POLYNOM 2.GRADES in 9.Zellenspalte schreiben
    clear data;
    data=polynomtest33(Faszikelcell {j,1}(:,1),Faszikelcell {j,1}(:,2));
    Faszikelcell {j,10} = coeffvalues(data);         %%% Polynomkoeffizienten fr POLYNOM 3.GRADES in 10.Zellenspalte schreiben
    clear data;
end

for j = 1:length(FaszikelNaNs);
    for i = 1:length(Faszikelcell {j,1});
        polydataXYlin(i,1) = Faszikelcell {j,8}(1,1)*Faszikelcell {j,1}(i,1) + Faszikelcell {j,8}(1,2);
        %%% polydataXYlin(i,1) Berechnung neuer Y-Werte entsprechend des LINEAREN POLYNOM
        polydataXY2(i,1) = Faszikelcell {j,9}(1,1)*Faszikelcell {j,1}(i,1)^2 + Faszikelcell {j,9}(1,2)*Faszikelcell {j,1}(i,1) + Faszikelcell {j,9}(1,3);
        %%% polydataXY2(i,1) Berechnung neuer Y-Werte entsprechend des POLYNOM 2.Grades
        polydataXY3(i,1) = Faszikelcell {j,10}(1,1)*Faszikelcell {j,1}(i,1)^3 + Faszikelcell {j,10}(1,2)*Faszikelcell {j,1}(i,1)^2 + Faszikelcell {j,10}(1,3)*Faszikelcell {j,1}(i,1) + Faszikelcell {j,10}(1,4);
        %%% polydataXY3(i,1) Berechnung neuer Y-Werte entsprechend des POLYNOM 3.GRADES        
    end
    %%% 5. Spalte Faszikelcell NEU aufgrund LINEAREM POLYNOM
    Faszikelcell {j,11}(:,1) = Faszikelcell {j,1}(:,1);  %%% originaler X-Wert
    Faszikelcell {j,11}(:,2) = polydataXYlin;            %%% polynomisierter Y-Wert
    Faszikelcell {j,11}(:,3) = Faszikelcell {j,5}(:,3);  %%% polynomisierter Z-Wert
    %%% 6. Spalte Faszikelcell NEU aufgrund POLYNOM 2. GRADES
    Faszikelcell {j,12}(:,1) = Faszikelcell {j,1}(:,1);  %%% originaler X-Wert
    Faszikelcell {j,12}(:,2) = polydataXY2;              %%% polynomisierter Y-Wert
    Faszikelcell {j,12}(:,3) = Faszikelcell {j,6}(:,3);  %%% polynomisierter Z-Wert
    %%% 7. Spalte Faszikelcell NEU aufgrund POLYNOM 3. GRADES
    Faszikelcell {j,13}(:,1) = Faszikelcell {j,1}(:,1);  %%% originaler X-Wert
    Faszikelcell {j,13}(:,2) = polydataXY3;              %%% polynomisierter Y-Wert
    Faszikelcell {j,13}(:,3) = Faszikelcell {j,7}(:,3);  %%% polynomisierter Z-Wert
    clear polydata*;
end

%% Bestimmtheitsmass/R-scquare fr die Polynome berechnen (fr jeder einzelne Faser der 3 verschiedenen Polynome  X-Z-EBENE
for j = 1:length(FaszikelNaNs);
    for i = 1:length(Faszikelcell {j,1});
        MW1=mean(Faszikelcell{j,1}(:,2));   %%%Mittelwert der Y-Werte ORIGINAL
        MW2=mean(Faszikelcell{j,11}(:,2));   %%%Mittelwert der Y-Werte LINEAR
        MW3=mean(Faszikelcell{j,12}(:,2));   %%%Mittelwert der Y-Werte 2.Grades
        MW4=mean(Faszikelcell{j,13}(:,2));   %%%Mittelwert der Y-Werte 3.Grades
        r(i,1)=(Faszikelcell{j,1}(i,2)- MW1)^2; %%%Quadrierter Fehler ORIGINAL, Anzahl entsprechend der "Faszikellnge"
        r(i,2)=(Faszikelcell{j,11}(i,2)- MW2)^2; %%%Quadrierter Fehler von P.LINEAR, Anzahl entsprechend der "Faszikellnge"
        r(i,3)=(Faszikelcell{j,12}(i,2)- MW3)^2; %%%Quadrierter Fehler von P.2.GRADES, Anzahl entsprechend der "Faszikellnge"
        r(i,4)=(Faszikelcell{j,13}(i,2)- MW4)^2; %%%Quadrierter Fehler von P.3.GRADES, Anzahl entsprechend der "Faszikellnge"
    end
    r1=sum(r(:,1));     %%% Summen der Quadratfehler von ORIGINAL
    r2=sum(r(:,2));     %%% Summen der Quadratfehler von LINEAR
    r3=sum(r(:,3));     %%% Summen der Quadratfehler von 2.GRADES
    r4=sum(r(:,4));     %%% Summen der Quadratfehler von 3.GRADES
    GOFXandY (j,1)=1-((r1-r2)/r1);
    GOFXandY (j,2)=1-((r1-r3)/r1);
    GOFXandY (j,3)=1-((r1-r4)/r1);
    clear MW* r;
end

%%% Mittelwert des Bestimmtheitsmasses fr LINEAR, 1.Zeile (MW,SD,Min,Max)
MittelwertGOFXandY(1,1)= mean (GOFXandY(:,1));
MittelwertGOFXandY(1,2)=std (GOFXandY(:,1));
MittelwertGOFXandY(1,3)=min (GOFXandY(:,1));
MittelwertGOFXandY(1,4)=max (GOFXandY(:,1));
%%% Mittelwert des Bestimmtheitsmasses fr Polynom 2.GRADES, 1.Zeile (MW,SD,Min,Max)
MittelwertGOFXandY(2,1)=mean (GOFXandY(:,2));
MittelwertGOFXandY(2,2)=std (GOFXandY(:,2));
MittelwertGOFXandY(2,3)=min (GOFXandY(:,2));
MittelwertGOFXandY(2,4)=max (GOFXandY(:,2));
%%% Mittelwert des Bestimmtheitsmasses fr Polynom 3.GRADES,, 1.Zeile (MW,SD,Min,Max)
MittelwertGOFXandY(3,1)=mean (GOFXandY(:,3));
MittelwertGOFXandY(3,2)=std (GOFXandY(:,3));
MittelwertGOFXandY(3,3)=min (GOFXandY(:,3));
MittelwertGOFXandY(3,4)=max (GOFXandY(:,3));

%% Transformierte und in X-Z-EBENE U N D X-Y-EBENE Polynomisierte Daten (nur Fasern) plotten
% PolyGrafik(FibulaTrans,FussTrans,CalcaneusTrans,AchillessehneTrans,FaszikelNans,Faszikelcell,FaszikelTrans,FibulakoepfchensehneTrans,AponeuroseTrans,polyplotten);   %%%plotten=1 LINEARES Polynom; plotten=2 Polynom 2.GRADES; plotten=3 Polynom 3.Grades
PolyGrafik(FibulaTrans,FussTrans,CalcaneusTrans,[],FaszikelNaNs,Faszikelcell,FaszikelTrans,FibulakoepfchensehneTrans,[],polyplotten);   %%%plotten=1 LINEARES Polynom; plotten=2 Polynom 2.GRADES; plotten=3 Polynom 3.Grades
%% Fiederungswinkel LINEARES POLYNOM in X-Y-EBENE 
for j = 1:length(FaszikelNaNs);
    for i = 1:length(Faszikelcell {j,11});
        polydataW(i,1) =  Faszikelcell {j,8}(1,1);
    end
    clear laengeneu laengeorig a b Faszikelmat*
    WinkelcellXY {j,1} = atand(polydataW);
    clear polydataW;
    WinkelcellXY {j,2} = prctile(WinkelcellXY {j,1}(:,1), [25 50 75]);
    WinkelcellXY {j,2}(1,4) = min(WinkelcellXY {j,1}(:,1));
    WinkelcellXY {j,2}(1,5) = max(WinkelcellXY {j,1}(:,1));
    WinkelcellXY {j,3}(1,1) = mean (WinkelcellXY {j,1}(:,1));
    WinkelcellXY {j,3}(1,2) = std (WinkelcellXY {j,1}(:,1));
    WinkelcellXY {j,10} = prctile(WinkelcellXY {j,1}(:,1), [50]);
end

%% Fiederungswinkel POLYNOM 2.GRADES in X-Y-EBENE 
for j = 1:length(FaszikelNaNs);
    FaszikelmatX=Faszikelcell {j,12}(:,1);
    [a b]=size(FaszikelmatX);
    laengeorig=1:1:a;
    stuetze=20;
    laengeneu=linspace(1,a,stuetze);% Berechnung der Interpolationsskala
    laengeneu=laengeneu';
    FaszikelmatInt=interp1(laengeorig,FaszikelmatX,laengeneu);  %%%FaszikelmatInt sind die neuen X-Werte (Anzahl=Sttze)
    for i = 1:length(FaszikelmatInt(:,1));
        polydataW(i,1) =  2*Faszikelcell{j,9}(1,1)*FaszikelmatInt(i,1) + Faszikelcell{j,9}(1,2);
    end
    clear laengeneu laengeorig a b Faszikelmat*
    WinkelcellXY {j,4} = atand(polydataW);
    clear polydataW;
    WinkelcellXY {j,5} = prctile(WinkelcellXY {j,4}(:,1), [25 50 75]);
    WinkelcellXY {j,5}(1,4) = min(WinkelcellXY {j,4}(:,1));
    WinkelcellXY {j,5}(1,5) = max(WinkelcellXY {j,4}(:,1));
    WinkelcellXY {j,6}(1,1) = mean (WinkelcellXY {j,4}(:,1));
    WinkelcellXY {j,6}(1,2) = std (WinkelcellXY {j,4}(:,1));
    WinkelcellXY {j,11} = prctile(WinkelcellXY {j,4}(:,1), [50]);
end
%% Fiederungswinkel POLYNOM 3.GRADES in X-Y-EBENE 
for j = 1:length(FaszikelNaNs);
    FaszikelmatX=Faszikelcell {j,13}(:,1);
    [a b]=size(FaszikelmatX);
    laengeorig=1:1:a;
    stuetze=20;
    laengeneu=linspace(1,a,stuetze);    %%% Berechnung der Interpolationsskala;
    laengeneu=laengeneu';
    FaszikelmatInt=interp1(laengeorig,FaszikelmatX,laengeneu);
    for i = 1:length(FaszikelmatInt(:,1));
        polydataW(i,1) =  3*Faszikelcell{j,10}(1,1)*(FaszikelmatInt(i,1))^2+ 2*Faszikelcell{j,10}(1,2)*FaszikelmatInt(i,1) + Faszikelcell{j,10}(1,3);
    end
    clear laengeneu laengeorig a b Faszikelmat*
    WinkelcellXY {j,7} = atand(polydataW);
    clear polydataW;
    WinkelcellXY {j,8} = prctile(WinkelcellXY {j,7}(:,1), [25 50 75]);
    WinkelcellXY {j,8}(1,4) = min(WinkelcellXY {j,7}(:,1));
    WinkelcellXY {j,8}(1,5) = max(WinkelcellXY {j,7}(:,1));
    WinkelcellXY {j,9}(1,1) = mean (WinkelcellXY {j,7}(:,1));
    WinkelcellXY {j,9}(1,2) = std (WinkelcellXY {j,7}(:,1));
    WinkelcellXY {j,12} = prctile(WinkelcellXY {j,7}(:,1), [50]);
end
%% Tatschlicher Fiederungswinkel zur Kraftachse (Fibula->Calcaneus)
%%% fr lineares Polynom
for j = 1:length(FaszikelNaNs);
    for i = 1:length(WinkelcellXZ {j,1});
        TatFiedW{j,1}(i,1) = acosd(1/(sqrt(1+(tand(WinkelcellXZ {j,1}(i,1)))^2+(tand(WinkelcellXY {j,1}(i,1)))^2)));
    end
    TatFiedW {j,2} = prctile(TatFiedW {j,1}(:,1), [25 50 75]);
    TatFiedW {j,2}(1,4) = min(TatFiedW {j,1}(:,1));
    TatFiedW {j,2}(1,5) = max(TatFiedW {j,1}(:,1));
    TatFiedW {j,3}(1,1) = mean (TatFiedW {j,1}(:,1));
    TatFiedW {j,3}(1,2) = std (TatFiedW {j,1}(:,1));
    TatFiedW {j,10} = prctile(TatFiedW {j,1}(:,1), [50]);
end
%%% fr Polynom 2.Grades
for j = 1:length(FaszikelNaNs);
    for i = 1:length(WinkelcellXZ {j,4});
        TatFiedW{j,4}(i,1) = acosd(1/(sqrt(1+(tand(WinkelcellXZ {j,4}(i,1)))^2+(tand(WinkelcellXY {j,4}(i,1)))^2)));
    end
    TatFiedW {j,5} = prctile(TatFiedW {j,4}(:,1), [25 50 75]);
    TatFiedW {j,5}(1,4) = min(TatFiedW {j,4}(:,1));
    TatFiedW {j,5}(1,5) = max(TatFiedW {j,4}(:,1));
    TatFiedW {j,6}(1,1) = mean (TatFiedW {j,4}(:,1));
    TatFiedW {j,6}(1,2) = std (TatFiedW {j,4}(:,1));
    TatFiedW {j,11} = prctile(TatFiedW {j,4}(:,1), [50]);    
end
%%% fr Polynom 3.Grades
for j = 1:length(FaszikelNaNs);
    for i = 1:length(WinkelcellXZ {j,7});
        TatFiedW{j,7}(i,1) = acosd(1/(sqrt(1+(tand(WinkelcellXZ {j,7}(i,1)))^2+(tand(WinkelcellXY {j,7}(i,1)))^2)));
    end
    TatFiedW {j,8} = prctile(TatFiedW {j,7}(:,1), [25 50 75]);
    TatFiedW {j,8}(1,4) = min(TatFiedW {j,7}(:,1));
    TatFiedW {j,8}(1,5) = max(TatFiedW {j,7}(:,1));
    TatFiedW {j,9}(1,1) = mean (TatFiedW {j,7}(:,1));
    TatFiedW {j,9}(1,2) = std (TatFiedW {j,7}(:,1));
    TatFiedW {j,12} = prctile(TatFiedW {j,7}(:,1), [50]);    
end

%% Faszikellaengen in Excel schreiben
Excelwrite(faszikel_laenge,WinkelcellXZ,GOFXandZ,WinkelcellXY,GOFXandY,Sprunggelenkswinkel,Dateiname,TatFiedW,ExcelWrite)    %%%schreiben ja->1 nein->0;

Contact us