QT Interval Measurement: The PhysioNet/Computing in Cardiology Challenge 2006 1.0.0

function [T_off_out] = preciseT(in_ECG,points)

ekg = slidingavg(in_ECG,5);

T_off_out =0;
for i = 1:length(ekg)-13,
    gradient2(i) = ekg(i+2)-ekg(i);
    gradient4(i) = ekg(i+4)-ekg(i);
    gradient8(i) = ekg(i+8)-ekg(i);
    gradient12(i) = ekg(i+12)-ekg(i);
end
smallG = find(abs(gradient12)<20);
gradient12(smallG) = 0;
clear('smallG');
smallG = find(abs(gradient8)<10);
gradient8(smallG) = 0;
clear('smallG');
smallG = find(abs(gradient4)<10);
gradient4(smallG) = 0;
clear('smallG');
smallG = find(abs(gradient2)<10);
gradient2(smallG) = 0;
clear('smallG');
T_off_possible = zeros(1,length(points));
for i=1:length(points),
    for point_fuzzy = points(i)-2:points(i)+2
        if (i > round(length(points)/2)) && (i < round(length(points)/2)+1)
            if (abs(sum(gradient12(point_fuzzy:point_fuzzy+1))))<30
                if (abs(sum(gradient8(point_fuzzy:point_fuzzy+1))))<20
                    T_off_possible(i) = 0.5;
                    if (abs(sum(gradient4(point_fuzzy:point_fuzzy+1))))<20
                        T_off_possible(i) = 1;
                        if (abs(sum(gradient2(point_fuzzy:point_fuzzy+1))))<20
                            T_off_possible(i) = 2;
                        end
                    end
                end
            end
        else
            if (abs(sum(gradient12(point_fuzzy:point_fuzzy+1))))<30
                if (abs(sum(gradient8(point_fuzzy:point_fuzzy+1))))<20
                    T_off_possible(i) = 0.25;
                    if (abs(sum(gradient4(point_fuzzy:point_fuzzy+1))))<20
                        T_off_possible(i) = 0.5;
                        if (abs(sum(gradient2(point_fuzzy:point_fuzzy+1))))<20
                            T_off_possible(i) = 1;
                        end
                    end
                end
            end
        end
    end
end
T_off_out = T_off_possible;