diff -r 000000000000 -r 0a450563f904 savearch.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/savearch.m Tue Oct 20 16:23:49 2009 -0400 @@ -0,0 +1,219 @@ +%====================================================================== +% S A V E A R C H . M +% doc: Wed Jan 7 16:51:58 2009 +% dlm: Fri Mar 5 15:49:49 2010 +% (c) 2009 A.M. Thurnherr +% uE-Info: 180 13 NIL 0 0 72 0 2 8 NIL ofnI +%====================================================================== + +% CHANGES BY ANT: +% Jan 7, 2009: - tightened use of exist() + +function [da]=savearch(dr,d,p,ps,f,att) +% function [da]=savearch(dr,d,p,ps,f,att) +% +% store LADCP result LADCP archive format +% +p=setdefv(p,'ladcp_station',NaN); +p=setdefv(p,'ladcp_cast',1); +g=gregoria(d.time_jul(1)); +p=setdefv(p,'ref_year',g(1)); +year0=julian([p.ref_year,0,0,0,0,0]); + + + da.GEN_Velocity_Units = 'm/s'; + da.GEN_LADCP_station = p.ladcp_station; + da.GEN_LADCP_cast = p.ladcp_cast; + da.GEN_Profile_start_decimal_day = d.time_jul(1)-year0; + +[m,ii]=min(d.z); + da.GEN_Profile_bottom_decimal_day = d.time_jul(ii)-year0; + da.GEN_Profile_end_decimal_day = d.time_jul(end)-year0; + + da.GEN_Profile_start_longitude = p.poss(3)+p.poss(4)/60; + da.GEN_Profile_end_longitude = p.pose(3)+p.pose(4)/60; + da.GEN_Profile_start_latitude = p.poss(1)+p.poss(2)/60; + da.GEN_Profile_end_latitude = p.pose(1)+p.pose(2)/60; + + da.GEN_Ocean_depth_m = round(p.zbottom); + da.GEN_Profile_max_depth_m = round(p.maxdepth); + da.GEN_Magnetic_deviation_deg = p.drot; + + da.BAR_ref_U = dr.ubar; + da.BAR_ref_V = dr.vbar; + da.BAR_ref_error = 2*p.nav_error/p.dt_profile; + da.BAR_tide_U = NaN; + da.BAR_tide_V = NaN; + da.INPUT_SADCP_profile_avail = existf(dr,'u_sadcp'); + da.INPUT_Pegasus_profile_avail = 0; + da.INPUT_Bottom_track_profile_avail = (p.btrk_used>0 & existf(dr,'zbot')); + da.INPUT_Nav_time_series_avail = length(f.nav)>1 ; + da.INPUT_CTD_time_series_avail = length(f.ctd)>1 ; + + da.BAR_ref_descr = []; + if ps.barofac>0, da.BAR_ref_descr= [da.BAR_ref_descr,'[Navigation]']; end + if ps.botfac>0 & existf(dr,'zbot'), + da.BAR_ref_descr= [da.BAR_ref_descr,'[Bottom-track]']; + end + if ps.dragfac>0, da.BAR_ref_descr= [da.BAR_ref_descr,'[CTD-drag]']; end + if ps.sadcpfac>0, da.BAR_ref_descr= [da.BAR_ref_descr,'[SADCP]']; end + if length(da.BAR_ref_descr) < 1; da.BAR_ref_descr='[NA]'; end + da.BAR_tide_model= '[NA]'; + +% down instrument information + + da.LADCP_dn_hard_type=['[RDI-',int2str(d.down.Frequency),'BB]']; + if round(d.down.Frequency)==300 + da.LADCP_dn_hard_type=['[RDI-',int2str(d.down.Frequency),'WH]']; + end + if existf(d.down,'NarrowBand') + da.LADCP_dn_hard_type=['[RDI-',int2str(d.down.Frequency),'NB]']; + end + da.LADCP_dn_hard_freq_kHz = d.down.Frequency; + da.LADCP_dn_hard_SN = p.down_sn; + da.LADCP_dn_hard_FV = d.down.Firm_Version; + da.LADCP_dn_hard_TNO = '[convex4]'; + da.LADCP_dn_hard_beam_ang_deg = d.down.Beam_angle; + da.LADCP_dn_hard_comp_type = '[RDI]'; + da.LADCP_dn_hard_general_comments = ' '; + + da.LADCP_dn_conf_blank_intvl_m = d.down.Blank/100; + da.LADCP_dn_conf_bin_len_m = d.down.Cell_length/100; + da.LADCP_dn_conf_pulse_len_m = d.down.Pulse_length/100; + da.LADCP_dn_conf_number_bins = length(d.izd); + da.LADCP_dn_conf_ping_stagr = '[NA]'; + da.LADCP_dn_conf_ping_trns_intvl_sec = d.down.Time_Pings; + da.LADCP_dn_conf_number_pings = d.down.Pings_per_Ensemble; + da.LADCP_dn_conf_vel_ambiguity = p.ambiguity; + da.LADCP_dn_conf_single_ping_acc = d.down.Single_Ping_Err; + da.LADCP_dn_xmit_cur = p.xmc(1); + da.LADCP_dn_xmit_vol = p.xmv(1); + da.LADCP_dn_xmit_pings = p.nping_total(1); + da.LADCP_dn_beam_range = p.dn_range; + if d.down.Coordinates==3 + da.LADCP_dn_conf_coord_system='[earth]'; + elseif d.down.Coordinates==1 + da.LADCP_dn_conf_coord_system='[beam]'; + else + da.LADCP_dn_conf_coord_system='[unknown]'; + end + da.LADCP_dn_conf_bottom_trkr=p.btrk_used; + if isfinite(p.zbottom) & p.btrk_used>0 & d.down.Up==0 + da.LADCP_dn_btrk_u_bias = p.btrk_u_bias; + da.LADCP_dn_btrk_v_bias = p.btrk_v_bias; + da.LADCP_dn_btrk_u_std = p.btrk_u_std; + da.LADCP_dn_btrk_v_std = p.btrk_v_std; + end + da.LADCP_dn_conf_general_comments=' '; + +if length(f.ladcpup)>1 +% up instrument information + + da.LADCP_up_hard_type=['[RDI-',int2str(d.up.Frequency),'BB]']; + if round(d.up.Frequency)==300 + da.LADCP_up_hard_type=['[RDI-',int2str(d.up.Frequency),'WH]']; + end + da.LADCP_up_hard_freq_kHz = d.up.Frequency; + da.LADCP_up_hard_SN = p.up_sn; + da.LADCP_up_hard_FV = d.up.Firm_Version; + da.LADCP_up_hard_TNO = '[convex4]'; + da.LADCP_up_hard_beam_ang_deg = d.up.Beam_angle; + da.LADCP_up_hard_comp_type = '[RDI]'; + da.LADCP_up_hard_general_comments =' '; + + da.LADCP_up_conf_blank_intvl_m = d.up.Blank/100; + da.LADCP_up_conf_bin_len_m = d.up.Cell_length/100; + da.LADCP_up_conf_pulse_len_m = d.up.Pulse_length/100; + da.LADCP_up_conf_number_bins = length(d.izd); + da.LADCP_up_conf_ping_stagr = '[NA]'; + da.LADCP_up_conf_ping_trns_intvl_sec = d.up.Time_Pings; + da.LADCP_up_conf_number_pings = d.up.Pings_per_Ensemble; + da.LADCP_up_conf_vel_ambiguity = p.ambiguity; + da.LADCP_up_conf_single_ping_acc = d.up.Single_Ping_Err; + da.LADCP_up_xmit_cur = p.xmc(2); + da.LADCP_up_xmit_vol = p.xmv(2); + da.LADCP_up_xmit_pings = p.nping_total(2); + da.LADCP_up_beam_range = p.up_range; + + if p.rotup2down==2 + da.LADCP_up_compass='[velocity-match]'; + elseif p.rotup2down==1 + da.LADCP_up_compass='[down-compass]'; + else + da.LADCP_up_compass='[up-compass]'; + end + if d.up.Coordinates==3 + da.LADCP_up_conf_coord_system='[earth]'; + elseif d.up.Coordinates==1 + da.LADCP_up_conf_coord_system='[beam]'; + else + da.LADCP_up_conf_coord_system='[unknown]'; + end + da.LADCP_up_conf_general_comments=' '; +end + + da.GEN_LADCP_ensemble_time_mean_sec=mean(diff(d.time_jul*24*3600)); + da.GEN_LADCP_ensemble_time_std_sec=std(diff(d.time_jul*24*3600)); + da.GEN_conf_general_comments =' '; + + da.GEN_Matlab_version=version; + da.GEN_Processing_personnel= p.whoami; + da.GEN_Processing_date=date; + da.GEN_Proc_methodology= '[inverse]'; + da.GEN_Software_orig= p.software; + % da.Sound_sp_calc= (choose one) + if d.soundc==1 + if existf(d,'ctdprof_ss') | existf(d,'ctd_ss') + da.GEN_Sound_sp_calc= '[CTD]'; + else + da.GEN_Sound_sp_calc= '[T-P]'; + end + else + da.GEN_Sound_sp_calc= '[NA]'; + end + % da.Depth_source: (choose one) + % + da.GEN_Depth_source= '[w]'; + if p.ladcpdepth==2 + da.GEN_Depth_source= '[w&surface&bottom]'; + end + if isfinite(p.zpar(2)) + da.GEN_Depth_source(end)=[]; + da.GEN_Depth_source= [da.GEN_Depth_source,'&Pmax]']; + end + if p.ctddepth==1 + da.GEN_Depth_source= '[measured P (CTD)]'; + end + +jok = cumprod(size(find(~isnan(d.rw)))); +j = cumprod(size(find(isnan(d.re) & ~isnan(d.rw)))); + da.GEN_Percent_3beam=round(j*100/jok); + da.GEN_Editing_parm_descr=p.outlier; + da.GEN_Inverse_weight_bottom=ps.botfac; + da.GEN_Inverse_weight_navigation=ps.barofac; + da.GEN_Inverse_weight_smooth=ps.smoofac; + da.GEN_Proc_general_comments=' '; + + +if exist([f.res,'.log'],'file') + diary off + id=fopen([f.res,'.log']); + da.LOG_Inverse_log=setstr(fread(id))'; + fclose(id); +end + +% save to matlab file +if p.savemat + disp(['save ',[f.res,'.ladcp.mat'],' da dr att']) + eval(['save ',[f.res,'.ladcp.mat'],' da dr att']) +end + +% save to netcdf file if you have NETCDF libary +if exist('netcdf','file') & p.savecdf + dr.tim=dr.tim-year0; + disp([' save levelII results in LADCP cdffile: ',f.res,'.nc']) + ladcp2cdf([f.res,'.nc'],dr,da,p,ps,f,att) +else + disp('install NETCDF libary to get the netcdf LADC archive output') +end +