Due to the lapse in federal government funding, NASA is not updating this website. We sincerely regret this inconvenience.
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