OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
DbAlgorithm.h
Go to the documentation of this file.
1 /*
2  * DbAlgorithm.h
3  *
4  * Created on: May 2, 2018
5  * Author: Sam Anderson
6  */
7 
8 #ifndef INCLUDE_DBALGORITHM_H_
9 #define INCLUDE_DBALGORITHM_H_
10 
11 #include <DDAlgorithm.h>
12 #include <DDProcess.h>
13 #include <DDOptions.h>
14 #include "deepblue/DbLutNetcdf.h"
15 #include "deepblue/DbMask.h"
16 
17 using namespace std;
18 
20  O488, // m03
21  O550, // m04
22  O670, // m05
23  O865, // m07
24  O1240, // m08
25  O1610, // m10
26  O2250, // m11
28 };
29 
31  NC412, // m01
32  NC488, // m03
33  NC670, // m05
35 };
36 
38  OL412, // m01
39  OL488, // m03
40  OL670, // m05
42 };
43 
48  MIX,
51 };
52 
53 
54 class DbCloudMaskOcean;
55 class DbCloudMaskLand;
56 class DbSmokeMask;
57 class DbHighAltSmokeMask;
58 class DbPyrocbMask;
59 
60 class DbAlgorithm : public DDAlgorithm
61 {
62  friend class DbCloudMaskLand;
63  friend class DbCloudMaskOcean;
64  friend class DbSmokeMask;
65  friend class DbHighAltSmokeMask;
66  friend class DbPyrocbMask;
67 public:
68 
69 // algorithm constants
70 
71  static constexpr int No_byte = 6;
72  static constexpr int Fmax = 150;
73  static constexpr int Lmax = 210;
74  static constexpr int Fbmax = 1500;
75  static constexpr int Lbmax = 2100;
76  static constexpr int No_byte_O = 5;
77  static constexpr float delta = -0.000001;
78  static constexpr float SolarZenithAngleZEPS = 84.000001;
79  static constexpr float NDVI1_CUTOFF = 0.18;
80  static constexpr float NDVI2_CUTOFF = 0.35;
81  static const float xzlog[10];
82  static const float xlog[8];
83  static const float htab[8];
84  static const float ttab[8];
85  static const float ptab[8];
86  static const float gtab[8];
87 
91  DbAlgorithm();
92 
96  virtual ~DbAlgorithm ();
97 
101  virtual int initialize( map<string, ddata*> imap );
102 
106  virtual vector<string> get_products() { return {};};
107 
111  virtual map<string, ddata*> process(vector<size_t> start, vector<size_t> count,
112  map<string, ddata*> imap);
113 
114 
118  int compute_gas_correction();
119 
120  int ler_start_[2];
121  int ler_edge_[2];
123  float cphi_;
124  float cphir_;
125  float phs_;
126  float phsr_;
127 
128  float NC_[DB_NC_BANDS];
129 
132  float glint_refl_;
133  float ndvi_;
134 
141  dbOceanAerosolLUMA* oaLut_[NDBMDL];
144 
145 // dbLUT* db_lut_;
146 // dbNvalxLUT* nv_lut_;
147 // dbViirsSwirVsVisLUT* vsv_lut_;
148 // dbRayleighLUT* ra_lut_;
149 // dbLandcoverLUT* lc_lut_;
150 // dbModisCorrectionsLUT* mc_lut_;
151 // dbModisSwirVsVisLUT* msv_lut_;
152 
153 
154 protected:
155 
159  int initialize_LUT_data( map<string, ddata*> imap );
160 
165  int locate(int size, float y[], float x, int& status);
166 
170  int compute_pressure (float height, float& sigma, float& ps, float& theta);
171 
175  int compute_glint_angle(float& glint_angle);
176 
180  int compute_scatter_angle(float& scat_angle);
181 
182 };
183 
184 
185 class DbAlgOcean : public DbAlgorithm
186 {
187 public:
188 
192  DbAlgOcean();
193 
197  ~DbAlgOcean ();
198 
202  int initialize( map<string, ddata*> imap );
203 
207  vector<string> get_products() { return {"cloud_mask", "quality_flag", "aerosol_type",
208  "l2_flags", "scattering_angle", "chlorophyll", "fmf_550", "angstrom", "aot_380",
209  "aot_490", "aot_550", "aot_670","aot_865", "aot_1240", "aot_1610", "aot_2250"};};
210 
214  map<string, ddata*> process(vector<size_t> start, vector<size_t> count,
215  map<string, ddata*> imap);
216 
217  struct osOut {
218  float aot550;
219  float chl;
220  float fmf;
221  float ae;
222  float ss;
223  float aot[NOWL];
224  short alg_flag;
225  short model_flag;
226  };
227 
228  osOut oOut_[NDBMDL+1];
229 
230  float chl_;
231  float bathy_;
232  short mask_cm_;
234 
236 
237 protected:
238 
242  int initialize_LUT_data();
243 
247  float calc_glint_refl(size_t iy, size_t ix, int& status);
248 
252  int run_inversion(size_t iy, size_t ix, dbOceanAerosolLUMA* lut, osOut* iout);
253 
257  int linfit(int size, float x[], float y[], float r[]);
258 
262  float calc_turbid_residual(float sza, float r488,
263  float r1240, float r1600, float r2250, float r550, int& status );
264 
268  int set_fill_out();
269 };
270 
271 
272 class DbAlgLand : public DbAlgorithm
273 {
274 public:
275 
279  DbAlgLand();
280 
284  ~DbAlgLand ();
285 
289  int initialize( map<string, ddata*> imap );
290 
294  vector<string> get_products() { return {"cloud_mask", "quality_flag", "aerosol_type",
295  "l2_flags", "scattering_angle", "fmf_550", "angstrom", "aot_380",
296  "aot_410", "aot_550", "aot_490", "aot_670"};};
297 
300  map<string, ddata*> process(vector<size_t> start, vector<size_t> count,
301  map<string, ddata*> imap);
302 
306  int algflg_;
307  float cofs_[16];
308 
309  float sca_;
310  float gla_;
311  float amf_;
312  float ler412_;
313  float ler488_;
314  float ler670_;
315  float qdf412_;
316  float qdf488_;
317  float qdf670_;
318  float sr412_;
319  float sr488_;
320  float sr670_;
321  float btd8_;
322  float btd11_;
323  float dstar_;
324 
325  struct lsOut {
326  float aot550;
327  float ae;
328  float ndvi;
329  float aot[NLWL];
330  float ssa[NLWL];
331  float sr[NLWL];
332  short sfc_type;
333  short alg_flag;
335  };
336 
338 
343 
344  short mask_cm_;
345  short mask_smoke_;
348 
349 protected:
350 
351  float densol_[7][4];
352  float denscn_[5][4];
353  int isnow_ = 0;
354  float pcloud_ = 0.7;
355  float pteran_ = 0;
356 
360  int initialize_LUT_data();
361  int initialize_LUT_data( map<string, ddata*> imap );
362 
366  int compute_stdv();
367 
371  int compute_dstar(const size_t iy, const size_t ix);
372 
376  int compute_sr(const size_t iy, const size_t ix);
377 
381  int compute_ler(const size_t iy, const size_t ix);
382 
387  int interx(int i1, int i2, rhot_band w, float& ezero,
388  float& tr, float& sb);
389 
393  int set_fill_out();
394 
395 };
396 
397 #endif /* INCLUDE_DBALGORITHM_H_ */
int r
Definition: decode_rs.h:73
float ler670_
Definition: DbAlgorithm.h:314
@ OMAXBAND
Definition: DbAlgorithm.h:27
short mask_cm_
Definition: DbAlgorithm.h:344
float sr670_
Definition: DbAlgorithm.h:320
@ O488
Definition: DbAlgorithm.h:20
@ O1610
Definition: DbAlgorithm.h:25
int status
Definition: l1_czcs_hdf.c:32
dbTablesLUT * mt_lut_
Definition: DbAlgorithm.h:135
@ O2250
Definition: DbAlgorithm.h:26
float qdf670_
Definition: DbAlgorithm.h:317
@ MIX
Definition: DbAlgorithm.h:48
lsOut lOut_
Definition: DbAlgorithm.h:337
real, dimension(260) sb
float btd8_
Definition: DbAlgorithm.h:321
float qdf488_
Definition: DbAlgorithm.h:316
@ O865
Definition: DbAlgorithm.h:23
@ NC412
Definition: DbAlgorithm.h:31
vector< string > get_products()
Definition: DbAlgorithm.h:207
void initialize(int pixref_flag, int blkref_flag)
Definition: Usds.c:1371
float ler412_
Definition: DbAlgorithm.h:312
LBANDS_ENUM
Definition: DbAlgorithm.h:37
OBANDS_ENUM
Definition: DbAlgorithm.h:19
float glint_refl_
Definition: DbAlgorithm.h:132
float ler488_
Definition: DbAlgorithm.h:313
float sr412_
Definition: DbAlgorithm.h:318
short mask_ha_smoke_
Definition: DbAlgorithm.h:346
@ OL670
Definition: DbAlgorithm.h:40
@ DUST
Definition: DbAlgorithm.h:45
@ O550
Definition: DbAlgorithm.h:21
@ LMAXBAND
Definition: DbAlgorithm.h:41
dbModisSurfReflLimited * msr_lut_
Definition: DbAlgorithm.h:140
float glint_angle_
Definition: DbAlgorithm.h:131
real, dimension(10) xzlog
NCBANDS_ENUM
Definition: DbAlgorithm.h:30
dbViirsSurfReflLimited * vsr_lut_
Definition: DbAlgorithm.h:139
DbCloudMaskOcean * cm_
Definition: DbAlgorithm.h:235
@ NCMAXBAND
Definition: DbAlgorithm.h:34
short mask_cm_osi_
Definition: DbAlgorithm.h:233
dbSurfacePressureLUT * sp_lut_
Definition: DbAlgorithm.h:136
#define DB_NC_BANDS
Definition: DDOptions.h:50
const double delta
@ O1240
Definition: DbAlgorithm.h:24
DbSmokeMask * smoke_
Definition: DbAlgorithm.h:340
float amf_
Definition: DbAlgorithm.h:311
real, dimension(8) xlog
OMODEL_ENUM
Definition: DbAlgorithm.h:44
float sca_
Definition: DbAlgorithm.h:309
dbBathymetryLUT * bath_lut_
Definition: DbAlgorithm.h:142
@ OL412
Definition: DbAlgorithm.h:38
subroutine locate(xx, n, x, j)
dbChlLUT * chl_lut_
Definition: DbAlgorithm.h:143
rhot_band
Definition: DDProcess.h:34
virtual vector< string > get_products()
Definition: DbAlgorithm.h:106
short mask_cm_
Definition: DbAlgorithm.h:232
@ O670
Definition: DbAlgorithm.h:22
vector< string > get_products()
Definition: DbAlgorithm.h:294
@ BEST
Definition: DbAlgorithm.h:49
DbPyrocbMask * pyrocb_
Definition: DbAlgorithm.h:342
short mask_pyrocb_
Definition: DbAlgorithm.h:347
@ NMODEL
Definition: DbAlgorithm.h:50
@ NC670
Definition: DbAlgorithm.h:33
@ MARI
Definition: DbAlgorithm.h:47
float cphir_
Definition: DbAlgorithm.h:124
float dstar_
Definition: DbAlgorithm.h:323
float gla_
Definition: DbAlgorithm.h:310
float qdf412_
Definition: DbAlgorithm.h:315
float sr488_
Definition: DbAlgorithm.h:319
float chl_
Definition: DbAlgorithm.h:230
@ NC488
Definition: DbAlgorithm.h:32
@ OL488
Definition: DbAlgorithm.h:39
@ FINE
Definition: DbAlgorithm.h:46
short mask_smoke_
Definition: DbAlgorithm.h:345
DbHighAltSmokeMask * ha_smoke_
Definition: DbAlgorithm.h:341
DbCloudMaskLand * cm_
Definition: DbAlgorithm.h:339
dbSurfCoeffLimited * scl_lut_
Definition: DbAlgorithm.h:137
float bathy_
Definition: DbAlgorithm.h:231
float scatter_angle_
Definition: DbAlgorithm.h:130
dbGeozoneLUT * gz_lut_
Definition: DbAlgorithm.h:138
float btd11_
Definition: DbAlgorithm.h:322
int count
Definition: decode_rs.h:79