PhysioNet Cardiovascular Signal Toolbox 1.0.0

function [F1, StartIdxSQIwindows] = bsqi(ann1,ann2,HRVparams)
%	OVERVIEW:
%       Measure SQI of ECG signals by comparing two peak detection
%       annotation files.
%   INPUT:
%       ann1         =  first annotation file
%       ann2         =  second annotation file
%       HRVparams    =  settings file 
%   OUTPUT:
%       output = sqi of each window
%   DEPENDENCIES & LIBRARIES:
%       run_sqi.m
%       HRV_toolbox https://github.com/cliffordlab/hrv_toolbox
%   REFERENCE: 
%	REPO:       
%       https://github.com/cliffordlab/Physionet-HRV-toolbox-for-MATLAB/tree/master/Tools
%   ORIGINAL SOURCE AND AUTHORS:     
%       Written by Adriana N. Vest
%       Dependent scripts written by various authors 
%       (see functions for details)       
%	COPYRIGHT (C) 2017 
%   LICENSE:    
%       This software is offered freely and without warranty under 
%       the GNU (v3 or later) public license. See license file for
%       more information
%
%   01-30-2018 - Modified by Giulia Da Poian (GDP): initialize F1 vector 
%               (vector of NaN), removed unused variables
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if nargin < 3
    HRVparams = initialize_HRVparams;
end

windowlength = HRVparams.sqi.windowlength;
threshold = HRVparams.sqi.TimeThreshold;
margin = HRVparams.sqi.margin;
fs = HRVparams.Fs;

ann1 = ann1(:)./fs;
ann2 = ann2(:)./fs;

endtime = max([ann1(end), ann2(end)]);
time = (1/HRVparams.Fs):(1/HRVparams.Fs):endtime;


%% 1. Create Windows
StartIdxSQIwindows = CreateWindowRRintervals(time, [], HRVparams,'sqi');

% Initialize Vectors
F1 = nan(1,length(StartIdxSQIwindows));

%% 2. Calculate SQI for Window
for seg = 1:length(StartIdxSQIwindows)
    % Check window for sufficient data
    if ~isnan(StartIdxSQIwindows(seg))
        % Isolate data in this window
        try
            idx_ann1_in_win = find(ann1 >= StartIdxSQIwindows(seg) & ann1 < StartIdxSQIwindows(seg) + windowlength);
            %idx_ann2_in_win = find(ann1 >= windows_all(i_win) & ann1 < windows_all(i_win) + windowlength);
        
            % Normalize timing of annotation data to the windows
            a1 = ann1(idx_ann1_in_win) - StartIdxSQIwindows(seg);
            a2 = ann2 - StartIdxSQIwindows(seg);
        
            F1(seg) = run_sqi(a1,a2,threshold,margin,windowlength,fs); % GDP : remove unused variables Se,PPV,Nb
        catch
        end
    end
end