function [cm,cn]=one_hour_mean_adopt(mjd0,mjd,c,adopt);
% Вычисление среднего арифметического за 1 час по 1-минутным данным
%
%   [cm,[cn]]=one_hour_mean_adopt(mjd0,mjd,c,adopt);
%
% mjd0 - юлианскаЯ дата моментов, длЯ которых будет считатьсЯ среднее
%        (mjd0(k)-0.5/24 ... mjd0(k)+0.5/24)
%  mjd - юлианскаЯ дата моментов, длЯ которых имеютсЯ измерениЯ (1-минутные)
%    c - измеренные значениЯ (д.б. заданы на равномерной сетке mjd,
%        с пропусками маркированными как NaN
%adopt - долЯ (в %) измеренных значений, когда среднее значение
%        вычислЯетсЯ
%
%   cm - среднее за час (==NaN, если количество измерений <60)

% 16.02.2005 - замена Inf-условий на NaN
%            - условие вычислениЯ среднего в зависимости от кол-ва
%              реально измеренных значений

% контроль равномерной временной шкалы
if max(diff(mjd))-min(diff(mjd))>1e-6,
    error('!!! ИзмерениЯ заданы не через 1 мин. !!!')
end

c(isinf(c))=NaN;

% вычислЯем средние значениЯ с помощью свертки
% часовые значениЯ = NaN, если полученны по минутным значениЯм =NaN
W=ones(60,1)/60;    % веса длЯ 60-ти минутных значений =1
cm=conv(c,W);       % свертка длиной LENGTH(c)+LENGTH(W)-1.
% выбираем правильный интервал
NW=length(W);
cm=cm(NW:60:length(cm)-NW+1);

knan=find(isnan(cm));  % индексы часовых значений с пропусками
cn=ones(length(cm),1)*60; cn(knan)=NaN;
disp(['Вычислено ' int2str(sum(~isnan(cm))) ' средних без пропусков']) 

if adopt==100, return, end

disp(['ВычислЯем ' int2str(length(knan)) ' средних с пропусками. Ждите...']) 
% вычислЯем среднее при пропусках данных
mjd=mjd(~isnan(c)); c=c(~isnan(c));
for k=1:length(knan),
    if mod(k,100)==0, 
        fprintf('%7d',k), if mod(k,500)==0, fprintf('\n'), end, 
    end
    kk=between(mjd,mjd0(knan(k))-(0.5+30/3600)/24,mjd0(knan(k))+(0.5-30/3600)/24,'11');
    cn(knan(k))=sum(kk);     % кол-во измерений, принЯтых в расчет
    if sum(kk)/60*100>=adopt,     % берем в обработку, если > заданного %
        cm(knan(k))=nanmean(c(kk)); % среднее за час
    end        
end    
