pro segment_interp_t,segments,t,spincount,t_last,spinphase,spinper,segflag,eclipse_delta_phi,mask=mask
n = n_elements(segments)
spincount = dblarr(n)
t_last = dblarr(n)
spinphase = dblarr(n)
spinper = dblarr(n)
segflag = segments[*].segflags
eclipse_delta_phi = dblarr(n)
dt = dblarr(n)
fracspins = dblarr(n)
intspins = dblarr(n)
bp = dblarr(n)
phi_lastpulse = dblarr(n)
tlast_dt = dblarr(n)
if ~keyword_set(mask) then mask=1
if n_elements(mask) eq 1 then begin
mask = replicate(mask,n)
endif
idx1 = where(t lt segments[*].t1,c1)
idx2 = where(t gt segments[*].t2,c2)
branch1_idx = where(abs(segments[*].c) lt 1D-12,branch1_c,complement=branch1_cidx,ncomplement=branch1_nc)
branch2_idx = where(((segments[*].segflags AND mask) EQ mask) AND (segments[*].idpu_spinper GT 1.0D))
idx3 = where(t ge segments[*].t1 and t le segments[*].t2,c3)
if c1 gt 0 then begin
dt [idx1]= segments[idx1].t1 - t[idx1]
spinper[idx1] = 360.0D/segments[idx1].b
fracspins[idx1] = dt[idx1]/spinper[idx1]
intspins[idx1] = ceil(fracspins[idx1])
spinphase[idx1] = (intspins[idx1]-fracspins[idx1])*360.0D
spincount[idx1] = segments[idx1].c1 - intspins[idx1]
t_last[idx1] = segments[idx1].t1 - intspins[idx1]*spinper[idx1]
endif
if c2 gt 0 then begin
dt[idx2] = t[idx2]-segments[idx2].t2
bp[idx2] = segments[idx2].b + 2.0D*segments[idx2].c*(segments[idx2].t2-segments[idx2].t1)
spinper[idx2] = 360.0D/bp[idx2]
fracspins[idx2]=dt[idx2]/spinper[idx2]
idx2_branch = ssl_set_intersection(idx2,branch2_idx)
if idx2_branch[0] ne -1 then begin
model_phi = fracspins[idx2_branch]*360.0D
idpu_bp = 360.0D/segments[idx2_branch].idpu_spinper
idpu_phi = dt[idx2_branch]*idpu_bp
eclipse_delta_phi[idx2_branch] = segments[idx2_branch].initial_delta_phi + (model_phi - idpu_phi)
endif
intspins[idx2] = floor(fracspins[idx2])
spinphase[idx2] = (fracspins[idx2]-intspins[idx2])*360.0D
spincount[idx2] = segments[idx2].c2 + intspins[idx2]
t_last[idx2] = segments[idx2].t2 + intspins[idx2]*spinper[idx2]
endif
if c3 gt 0 then begin
dt[idx3] = t[idx3]-segments[idx3].t1
phi = segments[idx3].b*dt[idx3] + segments[idx3].c*dt[idx3]*dt[idx3]
bp[idx3] = segments[idx3].b+2.0D*segments[idx3].c*dt[idx3]
spinper[idx3] = 360.0D/bp[idx3]
spinphase[idx3] = phi mod 360.0D
fracspins[idx3] = phi/360.0D
spincount[idx3] = floor(fracspins[idx3])
phi_lastpulse[idx3] = spincount[idx3]*360.0D
if branch1_c gt 0 then begin
tlast_dt[branch1_idx] = phi_lastpulse[branch1_idx]/segments[branch1_idx].b
endif
if branch1_nc gt 0 then begin
tlast_dt[branch1_cidx] = (-segments[branch1_cidx].b + sqrt(segments[branch1_cidx].b^2 - $
4.0*segments[branch1_cidx].c*(-phi_lastpulse[branch1_cidx]))) / $
(2.0*segments[branch1_cidx].c)
endif
idx3_branch = ssl_set_intersection(idx3,branch2_idx)
if idx3_branch[0] ne -1 then begin
model_phi = fracspins[idx3_branch]*360.0D
idpu_bp = 360.0D/segments[idx3_branch].idpu_spinper
idpu_phi = dt[idx3_branch]*idpu_bp
eclipse_delta_phi[idx3_branch] = segments[idx3_branch].initial_delta_phi + (model_phi - idpu_phi)
endif
t_last[idx3] = segments[idx3].t1 + tlast_dt[idx3]
spincount[idx3] = spincount[idx3]+segments[idx3].c1
endif
end