savearch.m
changeset 0 0a450563f904
child 11 d71acdec556a
--- /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) <T> <T-P> <T-P-S> <NA> <unconfirmed> 
+ 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) <w> <w&Pmax> <measured P (CTD)>
+ %                <measured P (other)> <NA> <unconfirmed>
+ 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 
+