16 return 1-log10(0.9*
x-12.5);
20 return log10(0.9*
x-12.5);
23 static int firstCall = 1;
24 static int ib[4]={-1,-1,-1,-1};
28 static float virtual_coef_A[2],virtual_coef_B[2],virtual_rat;
33 float Rrs510A,Rrs510B,mbr,brdi,poc_mbr,poc_brdi,w_mbr,w_brdi;
35 static float mbr_coef[4],brdi_coef[6];
45 const char *subsensorDir;
47 if ((filedir = getenv(
"OCDATAROOT")) ==
NULL) {
48 printf(
"-E- %s: OCDATAROOT env variable undefined.\n", __FILE__);
61 strcat(
filename,
"poc_stramski_hybrid.json");
68 printf(
"the file %s not exist\n",
filename);
78 wv=json_object_get(json,
"poc_wave");
79 line=json_string_value(wv);
91 wv=json_object_get(json,
"poc_mbr_coef");
92 line=json_string_value(wv);
95 mbr_coef[
i++]=atof(
line);
101 wv=json_object_get(json,
"poc_brdi_coef");
102 line=json_string_value(wv);
105 brdi_coef[
i++]=atof(
line);
124 virtual_coef_A[0]=-0.00008;
125 virtual_coef_A[1]= 1.085;
126 virtual_coef_B[0]=-0.00041 ;
127 virtual_coef_B[1]= 1.104;
131 virtual_coef_A[0]=-0.0000004 ;
132 virtual_coef_A[1]= 1.068;
133 virtual_coef_B[0]=-0.00130;
134 virtual_coef_B[1]= 1.291;
138 virtual_coef_A[0]=-0.000070;
139 virtual_coef_A[1]= 1.096 ;
140 virtual_coef_B[0]=-0.00094;
141 virtual_coef_B[1]= 1.221;
145 printf(
"-E- %s line %d: coefficients to calculate virtual Rrs(510) are not defined for Stramski hybrid POC\n",
157 if (ib[0] < 0 || ib[1] < 0|| ib[3] < 0) {
158 printf(
"-E- %s line %d: required bands not available for Stramski hybrid POC\n",
164 for(
i=0;
i<nwave;
i++){
165 if(ib[
i]>0 &&
Rrs[ib[
i]]<0)
171 Rrs_temp[
i]=
Rrs[ib[
i]];
174 Rrs_temp[
i]=
Rrs[ib[
i]];
175 Rrs_temp[3]=
Rrs[ib[3]];
179 Rrs510A=virtual_coef_A[0]+virtual_coef_A[1]*Rrs_temp[1];
181 Rrs510B=virtual_coef_B[0]+virtual_coef_B[1]*Rrs_temp[2];
183 Rrs510B=virtual_coef_B[0]+virtual_coef_B[1]*Rrs_temp[3];
185 Rrs_temp[2]=virtual_rat*Rrs510A+(1-virtual_rat)*Rrs510B;
189 ratio[
i]=Rrs_temp[
i]/Rrs_temp[3];
192 if(isnan(ratio[0])||isnan(ratio[1])||isnan(ratio[2]))
193 mbr=
MAX(
MAX(ratio[0],ratio[1]),ratio[2]);
194 else if(ratio[2]<1.2 && Rrs_temp[2]>Rrs_temp[1]&&Rrs_temp[2]>Rrs_temp[0])
195 mbr=
MAX(
MAX(ratio[0],ratio[1]),ratio[2]);
197 mbr=
MAX(ratio[0],ratio[1]);
200 mbr=
MAX(
MAX(ratio[0],ratio[1]),ratio[2]);
205 poc_mbr+=mbr_coef[
i]*pow(mbr,
i);
206 poc_mbr=pow(10.,poc_mbr);
208 brdi=(Rrs_temp[0]-Rrs_temp[3])/Rrs_temp[1];
211 poc_brdi+=brdi_coef[
i]*pow(brdi,
i);
212 poc_brdi=pow(10.,poc_brdi);
216 else if(poc_brdi<15.)
218 else if(poc_brdi>25.)
233 w_mbr=(w_mbr+(1-w_brdi))*0.5;
241 poc=poc_brdi*w_brdi+poc_mbr*w_mbr;