-
gael.alory_legos.obs-mip.fr authoredgael.alory_legos.obs-mip.fr authored
tsg_accuracy.m 3.09 KiB
function [minerror] = tsg_accuracy(hMainFig, PARA, dtTsg)
%
% Give the accuracy of TSG salinity/temperature measurement based on
% SeaBird specifications, to use as the minimum error on measurements
% see http://www.seabird.com/products/spec_sheets/38data.htm
% http://www.seabird.com/products/spec_sheets/3Sdata.htm
% http://www.seabird.com/products/spec_sheets/21data.htm
% http://www.seabird.com/products/spec_sheets/45data.htm
%
% Get the tsg and sample structures from the application
% ------------------------------------------------------
tsg = getappdata( hMainFig, 'tsg_data');
if strcmp( PARA, 'SSTP')
if strcmp( tsg.TYPE_TINT, 'SBE38') | strcmp( tsg.TYPE_TINT, 'SBE3S')
% Accuracy of intake temperature is 0.001�C for SBE38/SBE3S sensors
minerror=0.001;
else
% Assume the same for other sensors
minerror=0.001;
end
end
if strcmp( PARA, 'SSJT')
if strcmp( tsg.TYPE_TSG, 'SBE45')
% Accuracy of jacket temperature is 0.002�C for SBE45 TSG
minerror=0.002;
else
% Accuracy of jacket temperature is 0.01�C for SBE21 TSG
minerror=0.01;
end
end
if strcmp( PARA, 'SSPS')
if strcmp( tsg.TYPE_TSG, 'SBE45')
% Accuracy of temperature/conductivity is 0.002�C/0.005mS/cm for SBE45 TSG
errT=0.002;
errC=0.005;
else
% Accuracy of temperature/conductivity is 0.01�C/0.01mS/cm for SBE21 TSG
errT=0.01;
errC=0.01;
end
if ~isempty( tsg.SSJT_CAL)
T = tsg.SSJT_CAL(dtTsg);
else
T = tsg.SSJT(dtTsg);
end
if ~isempty( tsg.CNDC_CAL)
C = tsg.CNDC_CAL(dtTsg);
else
C = tsg.CNDC(dtTsg);
end
% salinity error is computed from temperature/conductivity errors
% by error propagation in the salinity equation
% see Emery and Thomson, Data analysis methods in phys. oceano., p.273
R=C/sw_c3515();
rt = sw_salrt(T);
Rt=R./rt;
%Rt is a function of C,T
%error on Rt : err(Rt)^2=(d(Rt)/dC*errC)^2+(d(Rt)/dT*errT)^2
dRtdC=1./(rt*sw_c3515());
c68 = 1.00024;
c0 = 0.6766097;
c1 = 2.00564e-2;
c2 = 1.104259e-4;
c3 = -6.9698e-7;
c4 = 1.0031e-9;
dRtdT=c68*R.*(c1+(2*c2+(3*c3+4*c4*T).*T*c68).*T*c68)./(rt.^2);
errRt=sqrt((dRtdC*errC).^2+(dRtdT*errT).^2);
%S is a function of Rt,T
%error on S: err(S)^2=(dS/dRt*errRt)^2+(dS/dT*errT)^2
del_T68 = T * 1.00024 - 15;
Rtx = sqrt(Rt);
a0 = 0.0080;
a1 = -0.1692;
a2 = 25.3851;
a3 = 14.0941;
a4 = -7.0261;
a5 = 2.7081;
b0 = 0.0005;
b1 = -0.0056;
b2 = -0.0066;
b3 = -0.0375;
b4 = 0.0636;
b5 = -0.0144;
k = 0.0162;
dSdRt=(a1+(2*a2+(3*a3+(4*a4+5*a5*Rtx).*Rtx).*Rtx).*Rtx)./(2*Rtx)...
+(del_T68./(1+k*del_T68)).*(b1+(2*b2+(3*b3+(4*b4+5*b5*Rtx).*Rtx).*Rtx).*Rtx)./(2*Rtx);
dSdT=(b0+(b1+(b2+(b3+(b4+b5.*Rtx).*Rtx).*Rtx).*Rtx).*Rtx)./((1+k*del_T68).^2);
errS=sqrt((dSdRt.*errRt).^2+(dSdT.*errT).^2);
minerror=errS;
end
end