CPSbopkc
Jump to navigation
Jump to search
function inde = cpsbopkc(string,depth_width,infile) %bopkc determines the attenuation coefficients for spectral data. The user %specifies the channel and depth window over which to perform the %regression. Originally used with binned data, it determines the k value %for each depth z. Regression is calculated using Kd = -dlnEd(ed,lu,etc)/dz %looks like ln(Edz(z)) = ln(Ed0-) - Kdz %modified 1-30-2014 added pitch and roll critery for window %modified 2-8-2014 pts to pts2 goodpts %modified 2-8-2014 badflag line 272 and 308 %modified 2-8-2014 retain first winminus(opens depth window a couple %modified 2-13-2014 medfit was putting NAN's for some values. replaced NAN %with -9.9E35 %points) %get windows %test for good z fit %declare vars for regression %find boundary conditions for Tschebyshev test % %[rowindex,time_atindex,depth_atindex] = index1(infile); infp = fopen(infile,'r'); dpcnt = 0; while feof(infp) ~= 1 ln = fgets(infp); if strncmp(ln,'<data>',6) ==1 break end if strncmp(ln,'<derived_parameters>',20) ==1 dpcnt = dpcnt+1; end end ct =0; frewind(infp); while feof(infp) ~=1 %used when making new list_ac9 tu = fgets(infp); ct = ct+1;%counts number lines end %==End of get cast params== %======================================================================== %==Check if done before== %return boolean holder if bopkc was run before %make sure it was binned frewind(infp); donebf = 'n'; binned = 'n'; while ~feof(infp) ln = fgets(infp); if (strncmp(ln,'bopkc',6)) ==1 donebf ='y'; break end if strncmp(ln,'bin_1.0_1depth',14) ==1 binned = 'y'; end end % % % if binned == 'n' commented on 11/23/2013 finally getting rid of % % % binned headers % % % disp('file is not binned') % % % return % % % end %======================================================================= %==End check if done before== %======================================================================= %=================================================== %==Find index for parameter== %=================================================== %if can't be found, abort linecounter =1; frewind(infp); for i = 1:ct %check for header indexes checkline = fgets(infp); if strncmp(checkline,'<sampled_parameters>',20) ==1 startparam = linecounter; end if strncmp(checkline,'<derived_parameters>',20) ==1 blankind = linecounter; end if strncmp(checkline,'<data>',6) == 1 dataind = linecounter; endparam = linecounter; end if strncmp(checkline,'<filters_used>',14) ==1 filterind = linecounter; end linecounter = linecounter +1; end ext = 0; i=1; %for i = 1:ct%size(varargin,2) was for pulling multiple locations frewind(infp); %============================================================ %==========make the data file================================ %============================================================ dfile = strcat('temp',infile); dfd = fopen(dfile,'W+'); for linc = 1:ct lllc = fgets(infp); if linc > dataind fprintf(dfd,lllc); end if linc == filterind -1 break end end frewind(infp); fclose(dfd); % return %==========end make datafile================================= %============================================================ %========================== %master loop for all channels %========================== for count = 1:ct varcheck = fgets(infp); vari = string; %<=========== if strncmp('LuZDepth',varcheck,6) ==1 %changed 12-3-12 dep = count - startparam; end if strncmp('EdZPitch',varcheck,8) ==1 %changed 1-14-14 pitch = count - startparam; end if strncmp('EdZRoll',varcheck,7) ==1 %changed 1-14-14 roll = count - startparam; end if strncmp(varcheck,'<derived_parameters>',20) ==1; ext =1; end if strncmp(varcheck,vari,length(vari)) ==1 %finds the variables index pull(i) = count - startparam; i = i+1; end end %end %==End of find index== %======================================================================== %==Read all data== %load depth into a sepparate variable %get size of data field %datafilepref = strrep(infile(1),'b','binmat'); just changed %datafile = strcat(datafilepref,infile(2:end)); just changed 5-10-2012 datafile = dfile; m = load(datafile,'.ASC'); depth = m(:,dep); pitch_a = m(:,pitch); roll_a = m(:,roll); %==End read all data %======================================================================== %==Do the meat, calculate K== %qualifiers %delta needs to be less than depscale %if delta>= abs(depint) winplus =i (the deepest value for depth, input to %function) %================initialize start = 0; data = m(:,pull(1)); winminus =1; winplus =-1; allvals = []; inde = []; nextk =0; g =1; am = []; bm= []; abdevm = []; badline =1; %================= %========================================================== %=====window loop ===================== %=================================================== % if strncmp(string,'1Lu665',6) ==1 % keyboard % end while g <= length(depth) %master loop counter delta = m(g,dep); if delta < -9.0E35 badline = badline +1; b = -9.9E35; %%%%% 9-10-12 inde = [inde,b];%%%%%%%%%%%%%%%%%%%%added 9-10-12 %dbq winminus = badline; g = g+1; %%%%%commented 9-10-12 continue %%%%%commented 9-10-12 end if start == 0 && winplus == -1; %only done first through to get start location % winminus =g; if depth(winminus) < -999 winminus = winminus +1; end if delta >= abs(depth(winminus) + depth_width/2) %for starting out. nextk = g; end start = nextk; %+ depth_width/2 if delta >= abs(depth(winminus) + depth_width) %if passing half window size. winplus = g; % disp('breaking') pause g = g+1; break else % disp('first incr') %=g; %playing with this 2-15-2013 wat just start: g =g+1; b = -9.9E35; inde = [inde,b]; size(inde); continue end end if start ~= 0 %if not first time through the loop delta = depth_width/2; condition = depth(start) - delta; %checking for this "window min" ptr =start; while ptr ~= 0 %starts in center of bin and works down if winplus ~= -1 %retians first winminus from first go-through if depth(ptr) <= condition winminus = ptr; break end end ptr = ptr -1; end ptr =start; %resets ptr from center and works up. condition = depth(ptr) + delta; while ptr <= length(depth) %+1 if depth(ptr) >= condition winplus = ptr; break end ptr = ptr +1; end start = start +1; end %================================================= %=================end window loop=========== %================================================= %===check if window is good ======== pts = 1; badflag =0; for z = winminus:winplus if data(z) == -9.9E35 || depth(z) == -9.9E35 || data(z) <= 0 || pitch_a(z) >=10 || roll_a(z) >= 10 % badflag =1; % b = -9.9E35; %uncommented 1-15-13 %inde = [inde,b]; %uncommented 1-15-13 % continue % pitch_a(z) % roll_a(z) % depth(z) % data(z) % keyboard else goodpts(pts,:) = z; end pts = pts + 1; end pts = length(goodpts); if pts <2 %error if not enough points keyboard if badflag ==1 %continue else disp('error need more pts to calculate') keyboard end end goodpts(find(goodpts ==0)) = []; pts2 = length(goodpts); %actual number of good points after cleanup up from line above x = depth(goodpts); % declare x and y for gregression y = log(data(goodpts)); %y_L = log(data(goodpts)); n = size(x,1); % plot((y),-x); Hanging on this ?????????????????? 10/28/2013 % xlabel('channel'); % ylabel('depth (m)'); [abdev,a,b,siga,sigb] = deal(0); %==============run the medfit script ====================== %========================================================== % % %if badflag ==0 [a,b,abdev] = medfit(x,y,pts2,a,b,abdev); if winplus - winminus < 10%strncmp(string,'1Lu665',6) ==1 so computation window does not exceed winplus. % winminus % winplus % keyboard b = -9.9E35; end % % %else % % % b = -9.9E35; % % %end goodpts = []; %clear this for next iteration of loop if delta < -9.0E35 b = -9.9E35; pause end %=====assign values gotten from medfit============ %====================== if isnan(b) %added 2-12-2014 b = -9.9E35; end inde = [inde,-b]; %====================== % disp('second incrim') g = g+1; end %pause(5)
back to C-OPS/CERBERUS Mfiles