function HFR_data_timing,dd,hh,n2_file=n2_file,lis_file=lis_file,$
seconds_of_day=seconds_of_day,verbose=verbose
tABC=[ [[273,264,242],[364,365.5,356],[399,395,378],[896,892,864]], $
[[546,530,504],[728,733,737],[798,792,782],[1690,1680,1660]], $
[[1089,1056,1008],[1456,1464.5,1474],[1596,1580,1560],[3280,3260,3220]], $
[[2180,2110,2003],[2905,2925,2945],[3192,3160,3120],[6420,6400,6340]] ]
tABC=float(tABC)
tH1_1=[[21.2,24.5,25.8,27.4,56.8],[36.4,42.8,45.7,49,98], $
[66.8,80,85.9,91.8,181],[128.3,154,165.5,178,347.4]]
tH1_2=[[20.1,23.1,24.6,26.2,50.4],[34.7,41.9,41.45,47.5,90.2], $
[65.5,78.2,84.1,91.2,171.7],[125.9,153.6,163.3,175.7,336.7]]
tH2_1=[[12.5,14.2,14.75,15.6,34.9],[20.2,23.5,24.9,26.4,55.5], $
[35.3,42,44.9,47.6,96.1],[65.7,79,84.8,90.5,178]]
tH2_2=[[12.3,13.9,14.75,15.2,29.6],[20.3,23.4,25,26.2,50.3], $
[35.2,41.4,44.3,47.3,90.4],[66,78,84.5,89.5,172]]
if keyword_set(verbose) then verbose=1b else verbose=0b
if keyword_set(n2_file) then n2_in=1 else n2_in=0
if keyword_set(lis_file) then lis_in=1 else lis_in=0
if n2_in then begin
dd = long(strmid(n2_file,9,7,/rev))
hh = fix(strmid(n2_file,1,/rev))
endif
dd1 = dd
hh1 = hh
dd2 = dd
hh2 = hh+1
if ~n2_in then begin
p=make_file_list(dd1,hh1,dd2,hh2,level='n2')
if ptr_valid(p) then begin
n2_file = *p
ptr_free,p
endif else begin
message,/info,'No N2 file available for this period.'
message,/info,'Aborting.'
return,-1
endelse
endif
if ~lis_in then begin
p = make_file_list(dd1, hh1, dd2, hh2, level='lis')
if ptr_valid(p) then begin
lis_file = *p
ptr_free,p
endif else begin
message,/info,'No LIS file available for this period.'
message,/info,'Aborting.'
return,-1
endelse
endif
message,/info,'Loading N2 data...'
read_data_binary,n2_file,n2,level='n2'
message,/info,'Loading OpMode data...'
read_data_opmode,dd1,hh1,dd2,hh2,opmode,time_list=time_list
sweep_times = uniq_list(n2.t97,rev=rti)
n_sweep = n_elements(sweep_times)
sweep_nsample = lonarr(n_sweep)
for i=0l,n_sweep-1l do sweep_nsample(i) = rti(i+1l)-rti(i)
if keyword_set(seconds_of_day) then begin
accurate_t97 = (n2.t97 mod 1.d0)*86400.d0
endif else begin
accurate_t97 = n2.t97
endelse
n_opmode = n_elements(opmode)
n_sweep_filled = 0l
n_sweep_errors = 0l
for iopmode=0,n_opmode-1 do begin
if verbose then begin
message,/info,'----------------------------------------------------------------------------------------------------------------------'
message,/info,'Mode: '+opmode(iopmode).lis
message,/info,'----------------------------------------------------------------------------------------------------------------------'
endif
ABC = opmode(iopmode).abc
HF1 = opmode(iopmode).hf1
HF2 = opmode(iopmode).hf2
nABC = ABC.nsteps * ABC.nfreqs * (ABC.df+1)
nABC_rc = ABC.rc * nABC
nHF1 = HF1.nsteps * HF1.nfreqs * (HF1.df+1)
nHF1_rc = HF1.rc * nHF1
nHF2 = HF2.nsteps * HF2.nfreqs * (HF2.df+1)
nHF2_rc = HF2.rc * nHF2
n_timing = opmode(iopmode).rc*(nABC_rc + nHF1_rc + nHF2_rc)
if verbose then begin
message,/info,' Global repeat count = '+string(opmode(iopmode).rc)
message,/info,' Number of Sample in Sweep = '+string(n_timing)
message,/info,'---- ABC'
message,/info,' RepCnt = '+string(ABC.rc)
message,/info,' Nsteps = '+string(ABC.nsteps)
message,/info,' Nfreqs = '+string(ABC.nfreqs)
message,/info,' IntegT = '+string(ABC.integ)
message,/info,' DfMode = '+(['no','yes'])(ABC.df)
message,/info,' NSampl = '+string(nABC_rc)
message,/info,'---- HF1'
message,/info,' RepCnt = '+string(HF1.rc)
message,/info,' Nsteps = '+string(HF1.nsteps)
message,/info,' Nfreqs = '+string(HF1.nfreqs)
message,/info,' IntegT = '+string(HF1.integ)
message,/info,' DfMode = '+(['no','yes'])(HF1.df)
message,/info,' NSampl = '+string(nHF1_rc)
message,/info,'---- HF2'
message,/info,' RepCnt = '+string(HF2.rc)
message,/info,' Nsteps = '+string(HF2.nsteps)
message,/info,' Nfreqs = '+string(HF2.nfreqs)
message,/info,' IntegT = '+string(HF2.integ)
message,/info,' DfMode = '+(['no','yes'])(HF2.df)
message,/info,' NSampl = '+string(nHF2_rc)
message,/info,'----------------------------------------------------------------------------------------------------------------------'
message,/info,' Building timing...'
endif
sweep_timing = dblarr(n_timing)
i0 = 0l
t0 = 0.
for orc=0,opmode(iopmode).rc-1 do begin
for irc=0,ABC.rc-1 do begin
m=long(alog(ABC.integ/125.)/alog(2.)+0.5)
j=long(alog(ABC.nfreqs/8.)/alog(2.)+0.5)
if ABC.nant eq 1 then k=0
if ABC.nant eq 2 and (ABC.auto eq 1 or ABC.cross eq 1) then k=1
if ABC.nant eq 2 and (ABC.auto eq 1 and ABC.cross eq 1) then k=2
if ABC.df eq 1 then k=3
tmp_sweep_timing = (rebin(reform(tABC(j,k,m)*dindgen(ABC.nsteps)/3.,1,1,ABC.nsteps),ABC.df+1,ABC.nfreqs,ABC.nsteps))(*)
i1 = i0+n_elements(tmp_sweep_timing)
sweep_timing(i0:i1-1) = t0 + tmp_sweep_timing
i0 = i1
t0 += tABC(j,k,m)
endfor
for irc=0,HF1.rc-1 do begin
m=long(alog(HF1.integ/20.)/alog(2.)+0.5)
if HF1.nant eq 1 then k=0
if HF1.nant eq 2 and (HF1.auto eq 0 and HF1.cross eq 0) then k=1
if HF1.nant eq 2 and (HF1.auto eq 1 or HF1.cross eq 1) then k=2
if HF1.nant eq 2 and (HF1.auto eq 1 and HF1.cross eq 1) then k=3
if HF1.df eq 1 then k=4
tmp_sweep_timing = fltarr(HF1.df+1,HF1.nfreqs) + 5.d-3 + (tH1_1(k,m) - tH1_2(k,m))
if HF1.df eq 1 then tmp_sweep_timing(1,*) = tmp_sweep_timing(1,*) + (tH1_2(k,m)-5.e-3)/2.
tmp_sweep_timing = tmp_sweep_timing(*)
i1 = i0+n_elements(tmp_sweep_timing)
sweep_timing(i0:i1-1) = t0 + tmp_sweep_timing
i0 = i1
t0 += tH1_1(k,m)
for istep = 0,HF1.nsteps-2 do begin
tmp_sweep_timing = fltarr(HF1.df+1,HF1.nfreqs) + 5.d-3
if HF1.df eq 1 then tmp_sweep_timing(1,*) = tmp_sweep_timing(1,*) + (tH1_2(k,m)-5.e-3)/2.
tmp_sweep_timing = tmp_sweep_timing(*)
i1 = i0+n_elements(tmp_sweep_timing)
sweep_timing(i0:i1-1) = t0 + tmp_sweep_timing
i0 = i1
t0 += tH1_2(k,m)
endfor
endfor
for irc=0,HF2.rc-1 do begin
m=long(alog(HF2.integ/10.)/alog(2.)+0.5)
if HF2.nant eq 1 then k=0
if HF2.nant eq 2 and (HF2.auto eq 0 and HF2.cross eq 0) then k=1
if HF2.nant eq 2 and (HF2.auto eq 1 or HF2.cross eq 1) then k=2
if HF2.nant eq 2 and (HF2.auto eq 1 and HF2.cross eq 1) then k=3
if HF2.df eq 1 then k=4
tmp_sweep_timing = fltarr(HF2.df+1,HF2.nfreqs) + 5.d-3 + (tH2_1(k,m) - tH2_2(k,m))
if HF2.df eq 1 then tmp_sweep_timing(1,*) = tmp_sweep_timing(1,*) + (tH2_2(k,m)-5.e-3)/2.
tmp_sweep_timing = tmp_sweep_timing(*)
i1 = i0+n_elements(tmp_sweep_timing)
sweep_timing(i0:i1-1) = t0 + tmp_sweep_timing
i0 = i1
t0 += tH2_1(k,m)
for istep = 0,HF2.nsteps-2 do begin
tmp_sweep_timing = fltarr(HF2.df+1,HF2.nfreqs) + 5.d-3
if HF2.df eq 1 then tmp_sweep_timing(1,*) = tmp_sweep_timing(1,*) + (tH2_2(k,m)-5.e-3)/2.
tmp_sweep_timing = tmp_sweep_timing(*)
i1 = i0+n_elements(tmp_sweep_timing)
sweep_timing(i0:i1-1) = t0 + tmp_sweep_timing
i0 = i1
t0 += tH2_2(k,m)
endfor
endfor
endfor
if keyword_set(seconds_of_day) then sweep_timing /=1.d3 else sweep_timing /=86400.d3
if verbose then begin
message,/info,' Filling timing data...'
message,/info,' - sweep# n:data mode'
endif
nfill = 0l
nerrs = 0l
wopmode = where(time_list.opmode_index eq iopmode, cnt_opmode)
for k_opmode=0,cnt_opmode-1 do begin
wsweep = where(sweep_times ge time_list(wopmode(k_opmode)).t97_in and $
sweep_times lt time_list(wopmode(k_opmode)).t97_out, cnt_sweep)
for k_sweep=0,cnt_sweep-1 do begin
if verbose then message,/info,string(format='(" ",I8.8," ",I3.3," ",I3.3)',wsweep(k_sweep),sweep_nsample(wsweep(k_sweep)),i0)
if sweep_nsample(wsweep(k_sweep)) ne i0 then begin
nerrs++
if verobose then message,/info,'Warning: computed timing not consistent with data !'
endif else begin
accurate_t97(rti(rti(wsweep(k_sweep)):rti(wsweep(k_sweep)+1)-1)) += sweep_timing
nfill++
endelse
endfor
endfor
if verbose then begin
if (nfill+nerrs) eq 0 then message,/info,' no data found for this mode.' else $
message,/info,' --- '+string(nfill)+' sweeps treated ('+string(nerrs)+' errors)'
endif
n_sweep_filled += nfill
n_sweep_errors += nerrs
endfor
if verbose then begin
message,/info,'----------------------------------------------------------------------------------------------------------------------'
message,/info,' Final report: '+string(n_sweep_filled)+'/'+string(n_sweep)+' sweep treated ('+string(n_sweep_errors)+' errors)'
message,/info,'----------------------------------------------------------------------------------------------------------------------'
endif
return, accurate_t97
end