Difference between revisions of "BscalcE angQ"
Jump to navigation
Jump to search
| Line 1: | Line 1: | ||
| − | <pre>function valaccume = bscalcE_angQ(string,depscale,depint,infile) | + | <pre> |
| + | function valaccume = bscalcE_angQ(string,depscale,depint,infile) | ||
%Created by Erik Stassinos 3/2012 | %Created by Erik Stassinos 3/2012 | ||
%This function uses a robust regression algorithm to calculate | %This function uses a robust regression algorithm to calculate | ||
| Line 370: | Line 371: | ||
| − | <\pre> | + | <\pre> |
back to [[C-OPS/CERBERUS Mfiles]] | back to [[C-OPS/CERBERUS Mfiles]] | ||
Revision as of 12:09, 13 February 2014
function valaccume = bscalcE_angQ(string,depscale,depint,infile)
%Created by Erik Stassinos 3/2012
%This function uses a robust regression algorithm to calculate
%regression line, its stats, and Ed(-0)
%historically input arguments have been(-r 1ed488 # # infile)
%The numbers for the depth window were picked to give the best regression
%for light availability in Plumes and Blumes proc. List of params is in
%/home/data65/pb/PRR/SOFT prr_params.
% -r 1ed412 1 12
% -r 1ed443 1 12
% -r 1ed490 1 12
% -r 1ed510 1 12
% -r 1ed555 1 12
% -r 1ed665 1 10
% -r 1lu412 1 12
% -r 1lu443 1 12
% -r 1lu490 1 12
% -r 1lu510 1 12
% -r 1lu555 1 12
% -r 1lu665 1 10
%==Get the cast params===
%check if up of downcast
%get stuff from castid matrix
%count number of derived params
%channels ={'1Ed412','1Ed443','1Ed490','1Ed510','1Ed555','1Ed665','1Lu412','1Lu443','1Lu490','1Lu510','1Lu5551','1Lu665'}
%scale = [1,1,1,1,1,1,1,1,1,1,1,1];
%interval = [12,12,12,12,12,10,12,12,12,12,12,10]
%s = struct('channel',channels,'scale',scale,'interval',interval)
%s(L).channel,s(L).scale,s(L).interval
infile
string
[rowindex,time_atindex,depth_atindex] = index1(infile);
infp = fopen(infile,'r');
dpcnt = 0;
while feof(infp) ~= 1
ln = fgets(infp);
if strncmp(ln,'',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 bscal was run before
%make sure it was binned
frewind(infp);
donebf = 'n';
binned = 'n';
while ~feof(infp)
ln = fgets(infp);
if (strncmp(ln,'bscalc',6)) ==1
donebf ='y';
break
end
if strncmp(ln,'bin_1.0_1depth',14) ==1
binned = 'y';
end
end
% % % if binned == 'n'
% % % disp('file is not binned') commented 11/15/2013
% % % 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
while ~feof(infp)
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,'',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('0Depth',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('LuZDepth',varcheck,8) ==1 %changed 6-26-13
dep = count - startparam;
end
if strncmp(varcheck,'<derived_parameters>',20) ==1;
ext =1;
end
if strncmp(varcheck,vari,length(vari)) ==1
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);
%check if up or downcast
if mean(depth(end-5:end)) < mean(depth(1:5))
m = flipud(m); %upcast matrix
depth = flipud(depth);
end
%==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)
start = 0;
data = m(:,pull(1));
winminus =-1;
winplus =-1;
allvals = [];
valaccume = [];
%filterout =[];
for g = 1:size(m,1) % changed from length(m) 9-18-2012
delta = m(g,dep);
if delta < -9.0E35
continue
end
if winminus == -1
if data(g) ~= -9.9E35 && delta >= depscale
winminus = g;
end
end
if winplus ==-1
if delta >= abs(depint)
winplus = g;
else
continue
end
end
%===check if window is good
pts = 1;
if winminus == -1 || winplus == -1 %==== added 9-18-2012 to deal with crappy casts where entire channel is flagged ES
disp('something wrong with the data')
data(pts) = -9.9E35;
format SHORT %changed 1-3-2013
allvals = [allvals; 'n = ',num2str(-9.9E35),' b0 = ', num2str(-9.9E35),' b1 = ', num2str(-9.9E35),' min = ', num2str(-9.9E35),' max = ', num2str(-9.9E35),' mean = ', num2str(-9.9E35),' stdDev = ', num2str(-9.9E35),' var = ', num2str(-9.9E35),' uncertainty = ', num2str(-9.9E35),' abdev = ', num2str(-9.9E35)];
valaccume = [valaccume;allvals]; %changed 1-3-2013
return %continue 1-3-2013
end
for z = winminus:winplus
if data(z) == -9.9E35 || depth(z) == -9.9E35 || data(z) <= 0 || pitch_a(z) >=10 || roll_a(z) >= 10
% if pitch_a(z) >=10 || roll_a(z) >= 10
% pitch_a(z)
% roll_a(z)
% pause
% end
continue
else
goodpts(pts,:) = z;
end
pts = pts + 1;
end
pts = length(goodpts);
if pts <2
disp('error need more pts to calculate')
end
x = depth(goodpts);
y = log(data(goodpts));
%y_L = log(data(goodpts));
n = size(x,1);
plot((y),-x);
xlabel('channel');
ylabel('depth (m)');
abdev = 0;
a = 0;
b = 0;
%winplus
%winminus
[a,b,abdev] = medfit(x,y,pts,a,b,abdev); %do fitting of datapoints
% B = robustfit(x,y)
%fitresult = fit((x),(y),'poly1')
intcp = exp(a);
slp = exp(b);
stdval = exp(std(y));
minval = exp(min(y));
maxval = exp(max(y));
meann = exp(mean(y));
syb = 0;
sy2 =0;
yht = [];
lt2 =0;
sx2 =0;
for lt = 1:pts%length(y)
syb = syb+y(lt); %sum of the y
sy2 = sy2 + y(lt)*y(lt);%sum of y squared
sx2 = sx2 + x(lt)*x(lt);
end
for lt2=1:length(y)
yht(lt2) = a + (b*x(lt2));
end
lt2=0;
xb =0;
SumS =0;
for lt2 =1:pts%length(y)
SumS = SumS + (y(lt2) - yht(lt2))^2;
xb = xb + (x(lt2) - mean(x))^2;
end
SumS = SumS/(pts -2);
Sbo = sqrt(SumS*(sx2/(pts*xb)));
varr = exp(log(stdval)^2);
clear SumS
tstatistic = tval((100+95)*.005,n);
unc = exp(tstatistic*Sbo);
allvals = [allvals; 'n = ',num2str(n),' b0 = ', num2str(intcp),' b1 = ', num2str(slp),' min = ', num2str(minval),' max = ', num2str(maxval),' mean = ', num2str(meann),' stdDev = ', num2str(stdval),' var = ', num2str(varr),' uncertainty = ', num2str(unc),' abdev = ', num2str(abdev)];
%allvals2 = ['n = ',num2str(n),' b0 = ', num2str(slp),' b1 = ', num2str(intcp),' min = ', num2str(minval),' max = ', num2str(maxval),' mean = ', num2str(meann),' stdDev = ', num2str(stdval),' var = ', num2str(varr),' uncertainty = ', num2str(unc),' abdev = ', num2str(abdev)]
%filterout = [filterout; string,num2str(depscale),num2str(depint)]
valaccume = [valaccume;allvals];
if winplus && winminus ~=-1
clear ct
clear slope_polyfit
clear y
clear x
clear intercept_polyfit
return
end
end
delete dfile
fclose all
%==End of do the meat
%========================================================================
%==Creat the output file done by bscalcloop
function t = tval(p,df)
%adapted from Peizer & Pratt JASA, vol63, p1416
%computes t-statistic val
%there are tables to verify
t = 0;
clear a
positive = p >= 0.5;
if p>0
p = 1.0 - p;
else
p = p;
end
if (p <= 0.0 || df <= 0)
t = 999;
elseif (p == 0.5)
t = 0.0;
elseif (df == 1)
t = 1.0 / tan((p + p) * 1.57079633);
elseif (df == 2)
t = sqrt(1.0 / ((p + p) * (1.0 - p)) - 2.0);
else
ddf = df;
a = sqrt(log(1.0 / (p * p)));
aa = a * a;
a = a - ((2.515517 + (0.802853 * a) + (0.010328 * aa))/(1.0 + (1.432788 * a) + (0.189269 * aa) + (0.001308 * aa * a)));
t = ddf - 0.666666667 + 1.0 / (10.0 * ddf);
t = sqrt(ddf * (exp(a * a * (ddf - 0.833333333) / (t * t)) - 1.0));
end
if t>0
t=t;
else
t=-t;
end
<\pre>
back to C-OPS/CERBERUS Mfiles