pro thm_spinmodel__cleanup
ptr_free,self.segs_ptr
ptr_free,self.spincorr_times
ptr_free,self.spincorr_vals
return
end
function thm_spinmodel::init,probe=probe,suffix=suffix,midfix=midfix,eclipse=eclipse
sname=probe
self.probe=probe
self.lastseg = -1L
if (n_elements(midfix) EQ 0) then begin
munge=''
endif else begin
munge=midfix
endelse
if (n_elements(suffix) EQ 0) then begin
munge2=''
endif else begin
munge2=suffix
endelse
if (n_elements(eclipse) EQ 0) then eclipse=0
if (eclipse EQ 0) then begin
munge3=''
endif else begin
munge3='ecl_'
endelse
prefix='th' + sname + munge + '_spin_' + munge3
std_prefix='th' + sname + munge + '_spin_'
spinper_var=prefix + 'spinper' + munge2
time_var=prefix + 'time' + munge2
tend_var=prefix + 'tend' + munge2
c_var=prefix + 'c'+ munge2
nspins_var=prefix + 'nspins' + munge2
npts_var=prefix + 'npts' + munge2
maxgap_var=prefix + 'maxgap' + munge2
phaserr_var=prefix + 'phaserr' + munge2
spincorr_var=std_prefix + 'correction' + munge2
initial_delta_phi_var=prefix + 'initial_delta_phi' + munge2
idpu_spinper_var=prefix + 'idpu_spinper' + munge2
segflags_var=prefix + 'segflags' + munge2
fgm_corr_tend_var=prefix + 'fgm_corr_tend' + munge2
fgm_corr_offset_var=prefix + 'fgm_corr_offset' + munge2
get_data,tend_var,tstart,tend,index=n
if (n EQ 0) then begin
dprint,'spinmodel_post_process: tplot variable not found: '+tend_var
return, 0
endif
get_data,spinper_var,dummy,spinper,index=n
if (n EQ 0) then begin
dprint,'spinmodel_post_process: tplot variable not found: '+spinper_var
return, 0
endif
get_data,c_var,dummy,c,index=n
if (n EQ 0) then begin
dprint,'spinmodel_post_process: tplot variable not found: '+c_var
return, 0
endif
get_data,nspins_var,dummy,nspins,index=n
if (n EQ 0) then begin
dprint,'spinmodel_post_process: tplot variable not found: '+nspins_var
return, 0
endif
get_data,npts_var,dummy,npts,index=n
if (n EQ 0) then begin
dprint,'spinmodel_post_process: tplot variable not found: '+npts_var
return, 0
endif
get_data,maxgap_var,dummy,maxgap,index=n
if (n EQ 0) then begin
dprint,'spinmodel_post_process: tplot variable not found: '+maxgap_var
return, 0
endif
get_data,phaserr_var,dummy,phaserr,index=n
if (n EQ 0) then begin
dprint,'spinmodel_post_process: tplot variable not found: '+phaserr_var
return, 0
endif
get_data,spincorr_var,tp_spincorr_times,tp_spincorr_vals,index=n
if (n EQ 0) then begin
dprint,'Using dummy values for spin phase correction'
tp_spincorr_times=[0.0D,1.0D]
tp_spincorr_vals=[0.0,0.0]
endif else begin
dprint,'Found spin phase correction variables'
endelse
self.spincorr_times = ptr_new(tp_spincorr_times)
self.spincorr_vals = ptr_new(tp_spincorr_vals)
get_data,initial_delta_phi_var,dummy,initial_delta_phi,index=n_delta_phi
get_data,idpu_spinper_var,dummy,idpu_spinper,index=n_idpu_spinper
get_data,segflags_var,dummy,segflags,index=n_segflags
if ( (n_delta_phi EQ 0) OR (n_idpu_spinper EQ 0) OR (n_segflags EQ 0)) then begin
dprint,'Eclipse delta-phi variables not found, using defaults.'
initial_delta_phi = dblarr(n_elements(tstart))
idpu_spinper = dblarr(n_elements(tstart))
segflags = intarr(n_elements(tstart))
endif else begin
dprint,'Eclipse delta-phi variables successfully loaded.'
endelse
get_data,fgm_corr_tend_var,data=fgm_corr_tend,index=n_fgm_corr_tend
get_data,fgm_corr_offset_var,data=fgm_corr_offset,index=n_fgm_corr_offset
seg_count=n_elements(tstart)
if (spinper[0] EQ 0) then begin
mymsg='spinper[0] = 0 for probe ' + sname + ', probably due to empty tplot variable.'
dprint,mymsg
return, 0
endif
if (seg_count GT 1) then begin
shifted_array=tstart[1:seg_count-1]
seams=where(shifted_array NE tend,seamcount)
endif else begin
seamcount=0
endelse
rec_count=seg_count
seg_count = seg_count + seamcount
self.capacity = seg_count
segs = replicate({spinmodel_segment, t1:0.0D, t2:0.0D, c1:0L, c2:0L,$
b:120.0D, c:0.0D, npts:0L, maxgap:0.0D, phaserr:0.0D,$
initial_delta_phi:0.0D, idpu_spinper:0.0D, segflags: 0L},$
seg_count)
self.segs_ptr = ptr_new(segs)
for i = 0L,rec_count-1L,1L do begin
nextseg={spinmodel_segment,t1:tstart[i], t2:tend[i], c1:0L, c2:nspins[i],$
b:360.0D/spinper[i], c:c[i], npts:npts[i], maxgap: maxgap[i],$
phaserr:phaserr[i],initial_delta_phi:initial_delta_phi[i],$
idpu_spinper:idpu_spinper[i],segflags:segflags[i]}
self->addseg,nextseg
endfor
if ( (n_fgm_corr_tend EQ 0) OR (n_fgm_corr_offset EQ 0) OR (eclipse NE 2)) then begin
dprint,'No FGM pseudo-DSL offset corrections applied.'
endif else begin
dprint,'Applying FGM pseudo-DSL offset corrections.'
for i=0,n_elements(fgm_corr_tend.x)-1 do begin
tr=[fgm_corr_tend.x[i], fgm_corr_tend.y[i]]
dp_offset=fgm_corr_offset.y[i]
self->adjust_delta_phi,trange=tr,delta_phi_offset=dp_offset
endfor
endelse
return, 1
end
pro thm_spinmodel__define
self = {thm_spinmodel, probe:'a', capacity: 0L, lastseg:-1L,$
index_n: 0L, index_t: 0L, segs_ptr: ptr_new(), $
spincorr_times: ptr_new(), spincorr_vals: ptr_new() }
end