function DATA2 = Propagate(T1,X1,VX1,DATA1,T2,X2,flag,method,MaxShift,startend);
% function DATA2 = Propagate(T1,X1,VX1,DATA1,T2,X2,flag,method,MaxShift);
% propagates DATA1 from X1 to X2
% DATA1 is measured at spacecraft at X1 at time tags T1
% each column of DATA1 is a set of measurements at times T1 by the source spacecraft
%   !!!! THIS IS VERY IMPORTANT !!!!
% VX1 is the solar wind velocity in the units of X1 / T1
% e.g. if X1 is in Re and T1 in is seconds, then VX1 should be in Re/sec
%   !!!! THIS IS VERY IMPORTANT !!!!
% The destination spacecraft is at X2 at times T2
% DATA2 will be the quantities in DATA1 propagated to times T2
% flag, method, and MaxShift are arguments passed to Synchronize,
%  so see the helps for Synchronize.
% X1 and X2 may be either column vectors (for moving spacecraft)
% or either may be a scalar (for fixed spacecraft, like the Earth or L1)
% T1 and T2 must be column vectors.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% givens
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
secperday = 86400.0;

if ~isnan(flag),
   % convert the flags to nans
   T1(T1==flag) = nan;
   X1(X1==flag) = nan;
   VX1(VX1==flag) = nan;
   DATA1(DATA1==flag) = nan;
   X2(X2==flag) = nan;
end

% stretch scalars appropriately
if length(X1) == 1,
   X1 = X1*ones(size(T1));
end

if length(VX1) == 1,
   VX1 = VX1*ones(size(T1));
end

if length(X2) == 1,
   X2 = X2*ones(size(T1));
end

% put the X2 onto time tags T1
%X2 = Synchronize(T2,X2,T1,nan,method,MaxShift);
T1X2 = [T1,X2];


% propagate from X1 to X2, AT = Arrival Time
AT = T1+(X2-X1)./(VX1*secperday);
keyboard
% find overtaken solar wind parcels
Ikeep = find(isfinite(AT));
s = 0;
while any(s <= 0),
   s = [1;diff(AT(Ikeep))];
   Ikeep = Ikeep(s>0);
end

% remove overtaken
AT = AT(Ikeep);
DATA1 = DATA1(Ikeep,:);

% resynchronize onto T2 timetags
%DATA2 = Synchronize(AT,DATA1,T2,nan,method,MaxShift);
ATDATA1 = [AT,DATA1];
DATATEMP = degapint(ATDATA1,1.0e+25,datenum('00:01:00'),startend,datenum('00:10:00'));
DATA2=DATATEMP(:,2);

if ~isnan(flag),
   % convert the nans to flags
   DATA2(~isfinite(DATA2)) = flag;
end

