pro read_bin,sct,outname ;this version will read the pct now head_text_out=strcompress(outname+'.txt',/remove_all) head_sav_out=strcompress(outname+'.sav',/remove_all) openw,13,head_text_out openw,14,'pct_test.txt' c=0 ;2 a=0L ;3 - idl size(a) 0 3 1pwd aa=0.0 ;4 b=0D ;5 ;instead, define variables directly te='12345678' ;8 td=strcompress(te+te,/remove_all) ;16 tc=strcompress(td+td,/remove_all) ;32 tb=strcompress(tc+tc,/remove_all) ;64 ta=strcompress(tb+tb,/remove_all) ;128 tf=strcompress(ta+ta+ta+ta,/remove_all) ;512 ;REVIEW- A is integer, not floating point - consider aa rxt=make_array(8,32,value=a) ;rx antenna type descriptors rxd=make_array(3,32,value=a) ;array for rx position and direction rxa=make_array(3,value=a) ;for tx vector dba=make_array(2,64,value=a) ;drive band bounds dbb=make_array(64,value=a) bda=make_array(1024,value=a) ;data and cal baud ba=make_array(8192,value=a) ;base table pa=make_array(256,value=a) ;pulse pattern rxm=make_array(16,value=a) ;rx map ca=make_array(160,value=a) ;coefficients ma=make_array(8,value=a) ;monitor vars ;sct.header ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; readu,11,a sct.header.magic=a printf,13,'magic ',a readu,11,a sct.header.sounding_table_size=a printf,13,'sounding table size ',a readu,11,a sct.header.pulse_table_size=a printf,13,'pulse table size ',a readu,11,a sct.header.raw_data_size=a ;printf,13,'raw data size ',a readu,11,aa sct.header.struct_version=aa ;printf,13,'structure version ',aa ;a readu,11,a sct.header.start_year=a printf,13,'start year ',a readu,11,a sct.header.start_daynumber=a printf,13,'start daynumber ',a readu,11,a sct.header.start_month=a ;printf,13,'start month ',a readu,11,a sct.header.start_day=a printf,13,'start day ',a readu,11,a sct.header.start_hour=a printf,13,'start hour ',a readu,11,a sct.header.start_minute=a printf,13,'start minute ',a readu,11,a sct.header.start_second=a printf,13,' start second ',a readu,11,a sct.header.start_epoch=a ;printf,13,'start epoch ',a taa=ta readu,11,taa sct.header.readme=taa ;printf,13,'readme crap ',taa readu,11,a sct.header.decimation_method=a ;printf,13,'decimation method ',a readu,11,a sct.header.decimation_threshold=a ;printf,13,'decimation thresh hold ',a taa=ta readu,11,taa sct.header.user=taa ;printf,13,'user string ',taa ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;that is all for sct ;read sct.station ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; tbb=tb readu,11,tbb sct.station.file_id=tbb ;printf,13,'file id ',tbb tee=te readu,11,tee sct.station.ursi_id=tee ;printf,13,'ursi id ',tee tcc=tc readu,11,tcc sct.station.rx_name=tcc ;printf,13,'rx name ',tcc readu,11,aa sct.station.rx_latitude=aa ;printf,13,'rx latitude ',aa readu,11,aa sct.station.rx_longitude=aa ;printf,13,'rx longitutde ',aa readu,11,aa sct.station.rx_altitude=aa ;printf,13,'rx altitude ',aa readu,11,a sct.station.rx_count=a ;printf,13,'rx count ',a for l=1,32 do begin tcc=tc readu,11,tcc if (l le 8) then begin ;printf,13,'rx antenna type ',l,' is ',tcc ;rxt -doesn't work tc=32char endif sct.station.rx_antenna_type[l-1]=tcc endfor ;position ;printf,13,'Rx Position X Y Z' for l=1,32 do begin aax=aa aay=aa aaz=aa readu,11,aax readu,11,aay readu,11,aaz if (l le 8) then begin ;printf,13,aax,' ',aay,' ',aaz endif sct.station.rx_position[0,l-1]=aax sct.station.rx_position[1,l-1]=aay sct.station.rx_position[2,l-1]=aaz endfor ;direction ;printf,13,'Rx Direction X Y Z' for l=1,32 do begin aax=aa aay=aa aaz=aa readu,11,aax readu,11,aay readu,11,aaz if (l le 8) then begin ;printf,13,aax,' ',aay,' ',aaz endif sct.station.rx_direction[0,l-1]=aax sct.station.rx_direction[1,l-1]=aay sct.station.rx_direction[2,l-1]=aaz endfor ;rx height ;printf,13,'Rx Height' for l=1,32 do begin readu,11,aa if (l le 8) then begin ;printf,13,aa endif sct.station.rx_height[l-1]=aa endfor ;printf,13,'Rx Cable Length' for l=1,32 do begin readu,11,aa if (l le 8) then begin ;printf,13,aa endif sct.station.rx_cable_length[l-1]=aa endfor ;;; readu,11,aa sct.station.frontend_atten=aa ;printf,13,'frontend attenuation ',aa tcc=tc readu,11,tcc sct.station.tx_name=tcc ;printf,13,'tx name ',tcc readu,11,aa sct.station.tx_latitude=aa ;printf,13,'tx latitude ',aa readu,11,aa sct.station.tx_longitude=aa ;printf,13,'tx longitude ',aa readu,11,aa sct.station.tx_altitude=aa ;printf,13,'tx altitude ',aa tcc=tc readu,11,tcc sct.station.tx_antenna_type=tcc ;printf,13,'tx antenna type ',tcc readu,11,aa sct.station.tx_vector[0]=aa ;printf,13,'tx vector X ',aa readu,11,aa sct.station.tx_vector[1]=aa ;printf,13,'tx vector Y ',aa readu,11,aa sct.station.tx_vector[2]=aa ;printf,13,'tx vector Z ',aa ;;;;;;;;;;;;;; readu,11,aa sct.station.tx_height=aa ;printf,13,'tx height ',aa readu,11,aa sct.station.tx_cable_length=aa ;printf,13,'tx cable length ',aa ;;;;;;;;;;;;;;;; readu,11,a sct.station.drive_band_count=a ;printf,13,'drive band count ',a ;printf,13,'Drive Band Bounds 1' for l=0,63 do begin readu,11,aa sct.station.drive_band_bounds[0,l-1]=aa readu,11,aa sct.station.drive_band_bounds[1,l-1]=aa endfor ;drive band atten for l=0,63 do begin readu,11,aa sct.station.drive_band_atten[l-1]=aa endfor readu,11,a sct.station.rf_control=a ;printf,13,'rf control ',a tcc=tc readu,11,tcc ;printf,13,'reference type ',tcc sct.station.ref_type=tcc tcc=tc readu,11,tcc ;printf,13,'clock type ',tcc sct.station.clock_type=tcc taa=ta readu,11,taa sct.station.user=taa ;printf,13,'user ',taa;sa ;timing tbb=tb readu,11,tbb ;sb sct.timing.file_id=tbb ;printf,13,'file id ',tbb readu,11,aa sct.timing.pri=aa ;printf,13,'sct timing pri ',aa readu,11,a sct.timing.pri_count=a ;printf,13,'pri count ',a readu,11,a sct.timing.ionogram_count=a ;printf,13,'ionogram count ',a readu,11,aa sct.timing.holdoff=aa ;printf,13,'holdoff ',aa readu,11,aa sct.timing.range_gate_offset=aa ;printf,13,'range gate offset ',aa readu,11,a ;printf,13,'gate count ',a sct.timing.gate_count=a readu,11,aa sct.timing.gate_start=aa ;printf,13,'gate start ',aa readu,11,aa sct.timing.gate_end=aa ;printf,13,'gate end ',aa readu,11,aa sct.timing.gate_step=aa ;printf,13,'gate step ',aa readu,11,aa sct.timing.data_start=aa ;printf,13,'data start ',aa readu,11,aa sct.timing.data_width=aa ;printf,13,'data width ',aa readu,11,a sct.timing.data_baud_count=a ;printf,13,'data baud count ',a tbb=tb readu,11,tbb sct.timing.data_wave_file=tbb ;printf,13,'data wave file ',tbb for l=1,1024 do begin readu,11,aa sct.timing.data_baud[0,l-1]=aa ;re part readu,11,aa sct.timing.data_baud[1,l-1]=aa ;im part endfor readu,11,a sct.timing.data_pairs=a ;printf,13,'data pairs ',a readu,11,aa sct.timing.cal_start=aa ;printf,13,'cal start ',aa readu,11,aa sct.timing.cal_width=aa ;printf,13,'cal width ',aa readu,11,a sct.timing.cal_baud_count=a ;printf,13,'cal baud count ',a tbb=tb readu,11,tbb sct.timing.cal_wave_file=tbb ;printf,13,'cal wave file ',tbb for l=1,1024 do begin readu,11,aa sct.timing.cal_baud[0,l-1]=aa readu,11,aa sct.timing.cal_baud[1,l-1]=aa endfor readu,11,a sct.timing.cal_pairs=a ;printf,13,'cal pairs ',a taa=ta readu,11,taa sct.timing.user=taa ;printf,13,'timing user ',taa ;sct.frequency ;;;;;;;;;;;;;;;;;;;;; tbb=tb readu,11,tbb sct.frequency.file_id=tbb ;printf,13,'file id ',tbb readu,11,aa sct.frequency.base_start=aa ;printf,13,'base start ',aa readu,11,aa sct.frequency.base_end=aa ;printf,13,'base end ',aa readu,11,a sct.frequency.base_steps=a ;printf,13,'base steps ',a readu,11,a sct.frequency.tune_type=a ;printf,13,'tune type ',a ;******************************************* ;this index should be pulled from the header ;******************************************* for l=1,8192 do begin readu,11,aa sct.frequency.base_table[l-1]=aa if (aa ne 0.0) then begin ;printf,13,'base table ',l,' ',aa endif endfor readu,11,aa sct.frequency.linear_step=aa ;printf,13,'linear step ',aa readu,11,aa sct.frequency.log_step=aa ;printf,13,'log step ',aa tbb=tb readu,11,tbb sct.frequency.freq_table_id=tbb ;printf,13,'freq table id ',tbb readu,11,a sct.frequency.tune_steps=a ;printf,13,'tune steps ',a readu,11,a sct.frequency.pulse_count=a ;printf,13,'pulse count ',a for l=1,256 do begin readu,11,a sct.frequency.pulse_pattern=a if (a ne 0) then begin ;printf,13,'pulse_pattern ',l,' ',a endif endfor readu,11,aa sct.frequency.pulse_offset=aa ;printf,13,'pulse offset ',aa readu,11,a sct.frequency.ramp_steps=a ;printf,13,'ramp steps ',a readu,11,a sct.frequency.ramp_repeats=a ;printf,13,'ramp repeats ',a for l=1,8192 do begin readu,11,aa sct.frequency.drive_table=aa endfor taa=ta readu,11,taa sct.frequency.user=taa ;printf,13,'user ',taa ;sct.receiver ;;;;;;;;;;;;;;;;;;;;; tbb=tb readu,11,tbb sct.rx.file_id=tbb ;printf,13,'file id ',tbb readu,11,a sct.rx.rx_chan=a ;printf,13,'rx channel ',a for l=1,16 do begin readu,11,a sct.rx.rx_map[l-1]=a ;printf,13,'rx map ',l,' ',a endfor readu,11,a sct.rx.word_format=a ;printf,13,'word format ',a readu,11,a sct.rx.cic2_dec=a ;printf,13,'cic2 dec ',a readu,11,a sct.rx.cic2_interp=a ;printf,13,'cic2 interp ',a readu,11,a sct.rx.cic2_scale=a ;printf,13,'cic2 scale ',a readu,11,a sct.rx.cic5_dec=a ;printf,13,'cic5 dec ',a readu,11,a sct.rx.cic5_scale=a ;printf,13,'cic5 scale ',a tcc=tc readu,11,tcc sct.rx.rcf_type=tcc ;printf,13,'rcf type ',tcc readu,11,a sct.rx.rcf_dec=a ;printf,13,'rcf dec ',a readu,11,a sct.rx.rcf_taps=a ;printf,13,'rcf taps ',a for l=1,160 do begin readu,11,a sct.rx.coefficients[l-1]=a ;printf,13,'receiver coefficients ',l,' ',a endfor readu,11,aa sct.rx.analog_delay=aa ;printf,13,'analog delay ',aa taa=ta readu,11,taa sct.rx.user=taa ;printf,13,'reciever user ',taa ;sct.exciter ;;;;;;;;;;;;;;;;;;;;; tbb=tb readu,11,tbb sct.ex.file_id=tb ;printf,13,'file id ',tbb readu,11,a sct.ex.cic_scale=a ;printf,13,'exciter cic scale ',a readu,11,a sct.ex.cic2_dec=a ;printf,13,'cic2 dec ',a readu,11,a sct.ex.cic2_interp=a ;printf,13,'cic2 interp ',a readu,11,a sct.ex.cic5_interp=a ;printf,13,'cic5 interp ',a tcc=tc readu,11,tcc sct.ex.rcf_type=tcc ;printf,13,'rcf type ',tcc readu,11,a sct.ex.rcf_taps=a ;printf,13,'tcf taps ',a readu,11,a sct.ex.rcf_taps_phase=a ;printf,13,'rcf taps phase ',a for l=1,256 do begin readu,11,a sct.ex.coefficients[l-1]=a if(a ne 0) then begin ;printf,13,'exciter coefficients ',l,' ',a endif endfor readu,11,aa sct.ex.analog_delay=aa ;printf,13,'analog delay ',aa taa=ta readu,11,taa sct.ex.user=taa ;printf,13,'exciter user ',taa ;sct.monitor ;;;;;;;;;;;;;;;;;;;;; for l=1,8 do begin readu,11,a sct.monitor.balun_currents[l-1]=a ;printf,13,'balun current ',l,' ',a endfor for l=1,8 do begin readu,11,a sct.monitor.balun_status[l-1]=a ;printf,13,'balun status ',l,' ',a endfor for l=1,8 do begin readu,11,a sct.monitor.front_end_status[l-1]=a ;printf,13,'front end status ',l,' ',a endfor for l=1,8 do begin readu,11,a sct.monitor.receiver_status[l-1]=a ;printf,13,'receiver status ',l,' ',a endfor readu,11,a ;printf,13,'exciter status 1 ',a sct.monitor.exciter_status[0]=a readu,11,a ;printf,13,'exciter status 2 ',a sct.monitor.exciter_status[1]=a tff=tf readu,11,tff sct.monitor.user=tff ;printf,13,'monitor user ',tff ;PULSE LOOP WILL BE HERE! ngates=sct.timing.gate_count ;pct.proc_range_count ;print,'there are ',ngates,' rangegates ' nrx=sct.rx.rx_chan npulses=sct.timing.pri_count pcta=make_array(npulses,value=a) pctb=make_array(npulses,value=b) pcttb=make_array(npulses,value=tb) ;here is where we must decide to abbreviate I and Q ;for now, we will load full arrays to see how it goes pulse_i=make_array(npulses,ngates,nrx,value=c) ;pulse,gate,rx pulse_q=make_array(npulses,ngates,nrx,value=c) ;l m n pct={record_id:pcta,pri_ut:pctb,pri_time_offset:pctb,base_id:pcta,pulse_id:pcta,ramp_id:pcta,repeat_id:pcta,loop_id:pcta,frequency:pcta,nco_tune_word:pcta,drive_attenuation:pcta,pa_flags:pcta,pa_forward_power:pcta,pa_reflected_power:pcta,pa_vswr:pcta,pa_temperature:pcta,proc_range_count:pcta,proc_noise_level:pcta,user:pcttb} print,'there are ',npulses,' pulses' for l=1,npulses do begin on_ioerror,exit ;print,'pulse number ',l ;NOW READ PULSE CONFIGURATION TABLE readu,11,a printf,14,'record id ',a pct.record_id[l-1]=a readu,11,b printf,14,'pri ut ',b pct.pri_ut[l-1]=b readu,11,b printf,14,'pri time offset ',b pct.pri_time_offset[l-1]=b readu,11,a printf,14,'base id ',a pct.base_id[l-1]=a readu,11,a printf,14,'pulse id ',a pct.pulse_id[l-1]=a readu,11,a printf,14,'ramp id ',a pct.ramp_id[l-1]=a readu,11,a printf,14,'repeat id ',a pct.repeat_id[l-1]=a readu,11,a printf,14,'loop id ',a pct.loop_id[l-1]=a readu,11,aa printf,14,'frequency ',aa pct.frequency[l-1]=aa readu,11,a printf,14,'tune word ',a pct.nco_tune_word[l-1]=a readu,11,aa printf,14,'drive attenuation ',aa pct.drive_attenuation[l-1]=aa readu,11,a printf,14,'pa flags ',a pct.pa_flags[l-1]=a readu,11,aa printf,14,'pa forward power ',aa pct.pa_forward_power[l-1]=aa readu,11,aa printf,14,'pa reflected power ',aa pct.pa_reflected_power[l-1]=aa readu,11,aa printf,14,'pa vswr ',aa pct.pa_vswr[l-1]=aa readu,11,aa printf,14,'pa temperature ',aa pct.pa_temperature[l-1]=aa readu,11,a printf,14,'proc range count ',a pct.proc_range_count[l-1]=a readu,11,aa printf,14,'proc noise level ',aa pct.proc_noise_level[l-1]=aa tbb=tb readu,11,tbb printf,14,'user ',tbb pct.user[l-1]=tbb ;ngates=sct.timing.gate_count ;pct.proc_range_count ;print,'there are ',ngates,' rangegates ' ;nrx=sct.rx.rx_chan for m=1,ngates do begin ;3 do begin ;print,'pulse ',m for n=1,nrx do begin ;for m=1,512 do begin ;loop through each range ;gate in pct - NOT CORRECT IN PCT! value is 512 not 0 readu,11,c aaa=swap_endian(c) pulse_i[l-1,m-1,n-1]=aaa ;print,'I ',n,' ',aaa readu,11,c aaa=swap_endian(c) pulse_q[l-1,m-1,n-1]=aaa ;print,'Q ',n,' ',aaa endfor endfor endfor ;end pulse sct.header.partial_file_flag=0 exit: if (sct.header.max_pulse ne sct.timing.pri_count) then begin sct.header.partial_file_flag=1 endif sct.header.max_pulse=l-1 save,sct,pct,pulse_i,pulse_q,filename=head_sav_out return end