; This procedure will read the empirical database searching to extract ; ion densities across a specified time period. ; ;------------------------------------------------------------------------------ ; define the common block to pass the data structures around ;------------------------------------------------------------------------------- ; common data_structures, record_1, record_2, record_3 ; ;------------------------------------------------------------------------------ ; 1 of 3 record variables definitions ;------------------------------------------------------------------------------- ; record_1 = { $ yydoy : 0L, $ hhmmss : 0L, $ time : 0L, $ oa_data : fltarr(9), $ kp : 0, $ ftenp7 : 0.0, $ flag_gen : 0B, $ temp_pz : fltarr(5), $ flags_pz : bytarr(5), $ temp_mz : fltarr(5), $ flags_mz : bytarr(5), $ temp_z : fltarr(5), $ flags_z : bytarr(5), $ den_temp : fltarr(5), $ pot_temp : fltarr(5), $ chisqr_temp : fltarr(5), $ flags_temp : bytarr(5), $ avg_pot : 0.0, $ pot_flag : 0B, $ den_pot : fltarr(5), $ temp_rd : fltarr(5), $ chisqr_pot : fltarr(5), $ flags_pot : bytarr(5), $ fill_1 : bytarr(3) $ } ; ;------------------------------------------------------------------------------ ; 2 of 3 record variables definitions ;------------------------------------------------------------------------------ ; record_2 = { $ temp_pz_lo : fltarr(5), $ temp_mz_lo : fltarr(5), $ temp_z_lo : fltarr(5), $ flags_z_lo : bytarr(5), $ den_temp_lo : fltarr(5), $ pot_temp_lo : fltarr(5), $ chisqr_temp_lo : fltarr(5), $ flags_temp_lo : bytarr(5), $ avg_pot_lo : 0.0, $ pot_flag_lo : 0B, $ den_pot_lo : fltarr(5), $ temp_rd_lo : fltarr(5), $ chisqr_pot_lo : fltarr(5), $ flags_pot_lo : bytarr(5), $ fill_2_lo : bytarr(68) $ } ; ;------------------------------------------------------------------------------ ; 3 of 3 record variables definitions ;------------------------------------------------------------------------------ ; record_3 = { $ temp_pz_hi : fltarr(5), $ temp_mz_hi : fltarr(5), $ temp_z_hi : fltarr(5), $ flags_z_hi : bytarr(5), $ den_temp_hi : fltarr(5), $ pot_temp_hi : fltarr(5), $ chisqr_temp_hi : fltarr(5), $ flags_temp_hi : bytarr(5), $ avg_pot_hi : 0.0, $ pot_flag_hi : 0B, $ den_pot_hi : fltarr(5), $ temp_rd_hi : fltarr(5), $ chisqr_pot_hi : fltarr(5), $ flags_pot_hi : bytarr(5), $ fill_3_hi : bytarr(68) $ } ;------------------------------------------------------------------------------ ; read in conversion table to go from doy to month/day openr,5,'doy_moday_leap.txt' doy_leap=lonarr(2,366) readf,5,doy_leap close,5 openr,5,'doy_moday_notleap.txt' doy_notleap=lonarr(2,365) readf,5,doy_notleap close,5 ; get interpolated Kp values to add into output file openr,14,'e:\space science data\kp_ap\kp_interpolated_1981_1984.txt' yr=0 doy=0 hr=0 mn=0 kptemp=0.0 kp=fltarr(300000) kptime=dblarr(300000) i=-1L while not eof(14) do begin readf,14,format='(i4,1x,i3,1x,i2,1x,i2,3x,f6.1)',yr,doy,hr,mn,kptemp if ( (yr mod 4) eq 0 ) then begin mon=doy_leap[0,(doy-1)] day=doy_leap[1,(doy-1)] endif else begin mon=doy_notleap[0,(doy-1)] day=doy_notleap[1,(doy-1)] endelse i=i+1 kptime[i]=julday(mon, day, yr, hr, mn, 0L) kp[i]=kptemp endwhile kptime=kptime[0:i] kp=kp[0:i] ; ;------------------------------------------------------------------------------ ; ask the user for the time period for extracting RIMS densities syr=0L sdoy=0L shr=0L smn=0L eyr=0L edoy=0L ehr=0L emn=0L read,'Enter start year, doy, hour, minute as "19xx,xxx,xx,xx": ',syr,sdoy,shr,smn read,'Enter end year, doy, hour, minute as "19xx,xxx,xx,xx": ',eyr,edoy,ehr,emn if ( (syr mod 4) eq 0 ) then begin smon=doy_leap[0,(sdoy-1)] sday=doy_leap[1,(sdoy-1)] endif else begin smon=doy_notleap[0,(sdoy-1)] sday=doy_notleap[1,(sdoy-1)] endelse if ( (eyr mod 4) eq 0 ) then begin emon=doy_leap[0,(edoy-1)] eday=doy_leap[1,(edoy-1)] endif else begin emon=doy_notleap[0,(edoy-1)] eday=doy_notleap[1,(edoy-1)] endelse stime=julday(smon, sday, syr, shr, smn, 0L) etime=julday(emon, eday, eyr, ehr, emn, 0L) ; construct name of output file ofile='DE1RIMS_N_' + strtrim(string(syr, form='(i4.4)'),2) + '_' $ + strtrim(string(sdoy,form='(i3.3)'),2) + '_' $ + strtrim(string(shr, form='(i2.2)'),2) $ + strtrim(string(smn, form='(i2.2)'),2) + '_' $ + strtrim(string(eyr, form='(i4.4)'),2) + '_' $ + strtrim(string(edoy,form='(i3.3)'),2) + '_' $ + strtrim(string(ehr, form='(i2.2)'),2) $ + strtrim(string(emn, form='(i2.2)'),2) + '_kp.txt' openw,6,ofile ;------------------------------------------------------------------------------ ; open the input data file ;------------------------------------------------------------------------------ ; openr, fp_i, 'empclt_merge_dat.xdr', /get_lun, /xdr ; ;------------------------------------------------------------------------------ ; flag=0 while (not EOF(fp_i)) and (flag eq 0) do begin ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; read_empclt_data, fp_i ; ; print, record_1.yydoy, record_1.hhmmss, record_1.kp, record_1.ftenp7, $ ; record_1.flag_gen, record_1.temp_pz(0), record_1.temp_pz(1) ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; ; get current Julian date year=record_1.yydoy/1000 doy=record_1.yydoy - year*1000 year=year+1900 if ( (year mod 4) eq 0 ) then begin month=doy_leap[0,(doy-1)] day=doy_leap[1,(doy-1)] endif else begin month=doy_notleap[0,(doy-1)] day=doy_notleap[1,(doy-1)] endelse hour=record_1.hhmmss/10000 mmss=record_1.hhmmss - hour*10000 minute=mmss/100 second=mmss - minute*100 time=julday(month, day, year, hour, minute, second) if (time ge stime) then begin if (time le etime) then begin ; get closest Kp value delmin=min(abs(time-kptime),minloc) kpvalue=kp[minloc] ; For oa_data ; (9x) re, smlong_sc, smlat_sc, smlat_sun, calc_mlt, shell_l,bfsm(x,y,z) (9xr4) if (record_1.den_pot(0) gt 0.0) then begin re=record_1.oa_data[0] smlat=record_1.oa_data[2] smmlt=record_1.oa_data[4] Lshell=record_1.oa_data[5] stddev=abs(record_3.den_pot_hi-record_2.den_pot_lo)/2.0 printf,6,record_1.yydoy,record_1.hhmmss,re,smlat,smmlt,Lshell, $ record_1.den_pot,stddev, kpvalue, $ form='(i5.5,1x,i6.6,1x,4(f8.3),1x,5(f8.1,1x),4(f8.1,1x),f8.1, f5.1)' if (min(stddev) lt 0.0) then stop endif endif else flag=1 endif ; write densities into a file if within the selected time range. ; if (record_1.temp_z(0) gt 0.0) then begin ; ; if (record_1.temp_z(0) gt 0.0) then $ ; print, record_1.yydoy, record_1.hhmmss, $ ; record_2.temp_pz_lo(0), record_1.temp_pz(0), record_3.temp_pz_hi(0) ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; endwhile ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; free_lun, fp_i ; ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ; close,/all end