OB.DAAC Logo
NASA Logo
Ocean Color Science Software

ocssw V2022
VcstViirsBand.h
Go to the documentation of this file.
1 /*******************************************************************************
2  *
3  * NAME: ViirsBand.h
4  *
5  * DESCRIPTION: Base class for all ViirsBand object classes. Support generic data
6  * and functions that pertain to all VIIRS bands.
7  *
8  * Created on: Aug 25, 2014
9  * Author: Sam Anderson, VCST
10  *
11  *******************************************************************************/
12 
13 #ifndef VIIRSBAND_H_
14 #define VIIRSBAND_H_
15 
16 #include <VcstCmnConsts.h>
17 #include <VcstObc.h>
18 
19 class ViirsBand {
20 public:
21 
27 
32  virtual ~ViirsBand();
33 
38  virtual int initialize();
39 
44  int calibrate();
45 
51  virtual bool precheck_scan(int scan);
52 
57  virtual int calibrate_scan(int scan);
58 
63  virtual int get_l1bdata(float *l1bdata);
64 
69  virtual int initialize_L1A_data();
70 
75  virtual int write_data(const NcFile* nc_output);
76  virtual int write_rsb(const NcFile* nc_output, float *obs_val,
77  unsigned short *short_val, unsigned short *pixelQuality,
78  int8_t *unc_idx, bool bRad);
79  virtual int write_teb(const NcFile* nc_output, float *obs_val,
80  unsigned short *short_val, unsigned int *long_val,
81  unsigned short *pixelQuality, int8_t *unc_idx, bool bRad);
82  virtual int write_cdg(const NcFile* nc_output);
83 
84  // Configuration data
85  // Static constants and arrays
86  static const int processAtNight[Viirs_Bands];
87 
88  // FIR filter configuration
89  static constexpr int NUM_TAPS = 201;
90 
91  // constants
92  static constexpr int RSB_BANDS = 14;
93  static constexpr int TEB_BANDS = 7;
94  static constexpr int MIRROR_SIDE = 2;
95 
96  static constexpr int SATURATED_DN = 4095;
97  static constexpr int MAX_NUM_HISTORY_ORBITS = 480;
98 
99  static constexpr double DEGtoRAD = 0.017453292519943296e0;
100  static constexpr double RADtoDEG = 57.295779513082321e0;
101 
102  static constexpr int C_COEFFS = 4;
103  static constexpr int A_COEFFS = 3;
104  static constexpr int T_FP_LEVELS = 5;
105  static constexpr int T_ELEC_LEVELS = 5;
106 
107  static constexpr unsigned char NIGHT_GRAN = 0;
108  static constexpr unsigned char DAY_GRAN = 1;
109  static constexpr unsigned char MIXED_GRAN = 2;
110 
111  // General Pixel quality Flags
112  static constexpr short NUM_PIXEL_QUALITY_FLAGS = 4;
113 
114  static constexpr unsigned char L1B_PIXEL_QUALITY_GOOD = 0x00; //00000000
115  static constexpr unsigned char L1B_PIXEL_QUALITY_SUBSTITUTE_CAL = 0x01; //0000000x
116  static constexpr unsigned char L1B_PIXEL_QUALITY_OUTOFRANGE_RAD = 0x02; //000000x0
117  static constexpr unsigned char L1B_PIXEL_QUALITY_OUTOFRANGE_RFLBT = 0x02; //000000x0
118  static constexpr unsigned char L1B_PIXEL_QUALITY_ALLSATURATION = 0x04; //00000x00
119  static constexpr unsigned char L1B_PIXEL_QUALITY_TEMP_NOT_NOMINAL = 0x08; //0000x000
120  static constexpr unsigned char L1B_PIXEL_QUALITY_LOWER_MASK = 0x0f; //0000xxxx
121  static constexpr unsigned char L1B_PIXEL_QUALITY_UPPER_MASK = 0xf0; //xxxx0000
122  static constexpr unsigned char L1B_PIXEL_QUALITY_NOT_ALLSATURATION = 0xfb; //xxxxx0xx
123  static constexpr unsigned char L1B_PIXEL_QUALITY_NOT_OUTOFRANGE = 0xfd; //xxxxxx0x
124 
125  // DG Pixel quality Flags
126  static constexpr short NUM_DG_PIXEL_QUALITY_FLAGS = 8;
127  static constexpr short NUM_UADG_PIXEL_QUALITY_FLAGS = 6;
128 
129  static constexpr unsigned char L1B_PIXEL_QUALITY_LOW_GAIN_STATE = 0x10; //000x0000
130  static constexpr unsigned char L1B_PIXEL_QUALITY_MIXED_GAIN_STATE = 0x20; //00x00000
131  static constexpr unsigned char L1B_PIXEL_QUALITY_DG_ANOMALY = 0x40; //0x000000
132  static constexpr unsigned char L1B_PIXEL_QUALITY_SOMESATURATION = 0x80; //x0000000
133 
134  // DNB Pixel quality Flags
135  static constexpr short NUM_DNB_PIXEL_QUALITY_FLAGS = 5;
136  static constexpr unsigned char L1B_PIXEL_QUALITY_DNB_STRAY_LIGHT = 0x10; //000x0000
137 
138  // Bad Pixel quality Flags
139  static constexpr short NUM_BAD_PIXEL_QUALITY_FLAGS = 5;
140  static constexpr short BAD_PIXEL_QUAL_SHIFT = 8;
141 
142  static constexpr unsigned short L1B_PIXEL_QUALITY_BOWTIE = 0x0100; //0000000x00000000
143  static constexpr unsigned short L1B_PIXEL_QUALITY_MISSING = 0x0200; //000000x000000000
144  static constexpr unsigned short L1B_PIXEL_QUALITY_NOCALIBRATE = 0x0400; //00000x0000000000
145  static constexpr unsigned short L1B_PIXEL_QUALITY_DEAD_DETECTOR = 0x0800; //0000x00000000000
146  static constexpr unsigned short L1B_PIXEL_QUALITY_NOISY_DETECTOR = 0x1000; //000x000000000000
147 
152 
153  // Row quality flags
154  static constexpr unsigned char L1B_ROW_QUALITY_SUBSTITUTE_CAL = 0x01; //00000000
155  static constexpr unsigned char L1B_ROW_QUALITY_NO_CALIBRATION = 0x02; //000000x0
156  static constexpr unsigned char L1B_ROW_QUALITY_MOON_IN_SPACE_VIEW = 0x04; //000000x0
157  static constexpr unsigned char L1B_ROW_QUALITY_DG_ANOMALY = 0x08; //0000x000
158  static constexpr unsigned char L1B_ROW_QUALITY_DEAD_DETECTOR = 0x10; //000x0000
159  static constexpr unsigned char L1B_ROW_QUALITY_BB_TEMP_NOT_NOMINAL = 0x20; //00x00000
160  static constexpr unsigned char L1B_ROW_QUALITY_LWIR_TEMP_NOT_NOMINAL = 0x40; //0x000000
161  static constexpr unsigned char L1B_ROW_QUALITY_DNB_STRAY_LIGHT = 0x80; //0x000000
162 
163  // Moon-in-SV processing parameters
164  static constexpr int MOON_IN_SV_SCANS_TO_SKIP_FORWARD = 6;
165  static constexpr int MOON_IN_SV_SCANS_TO_SKIP_BACK = 4;
166 
167  // Fill values
168  static constexpr float L1B_FILL_FLOAT = -999.9f;
169  static constexpr double L1B_FILL_DOUBLE = -999.9L;
170  static constexpr short L1B_FILL_SHORT = -999;
171  static constexpr unsigned short L1B_FILL_USHORT = 65535;
172  static constexpr unsigned int L1B_FILL_UINT_M13 = 327680;
173  static constexpr char L1B_FILL_BYTE = -1;
174  static constexpr unsigned char L1B_FILL_UBYTE = 255;
175 
176  static constexpr float VDNE_FLOAT32_FILL = -999.9f;
177  static constexpr float ELLIPSOID_FLOAT32_FILL = -999.9f;
178  static constexpr float ERR_FLOAT32_FILL = -999.9f;
179  static constexpr float ONBOARD_PT_FLOAT32_FILL = -999.9f;
180  static constexpr float MISS_FLOAT32_FILL = -999.9f;
181  static constexpr float NA_FLOAT32_FILL = -999.9f;
182 
183  // Fill value test thresholds
184 
185  static constexpr float FLOAT_FILL_TEST = -999.0f;
186  static constexpr short SHORT_FILL_TEST = -990;
187  static constexpr char BYTE_FILL_TEST = 0;
188  static constexpr unsigned char UBYTE_FILL_TEST = 247;
189 
190  string band_str_;
191  string ev_var_str_;
192 
193  // float attributes:
194  float obs_fill_value_;
197 
198  // Conversion factors
199  float flt_valid_min_;
202  float flt_add_offset_;
205 
206  // short attributes:
207  unsigned short shrt_fill_value_;
208  unsigned short shrt_valid_min_;
209  unsigned short shrt_valid_max_;
210  unsigned int M13_fill_value_;
211  unsigned int M13_valid_min_;
212  unsigned int M13_valid_max_;
215 
216  // brightness temperature attributes
220 
221  // quality attributes:
223  vector<unsigned short> pixel_quality_flag_masks_;
224 
225  //detector quality flag attributes:
226  vector<unsigned char> detector_quality_flag_;
228 
229  // uncertainty index attributes
230  float uncidx_scale_factor_;
231  unsigned short uncidx_fill_value_;
232  unsigned short uncidx_valid_min_;
233  unsigned short uncidx_valid_max_;
234  vector<unsigned int> uncertainty_index_flag_values_;
235  vector<unsigned int> m13_uncertainty_index_flag_values_;
236 
237  // pointers used for writing output
238  unsigned short *shrtPtr_;
239  unsigned int *longPtr_;
240  unsigned short *qualPtr_;
241  int8_t *uncPtr_;
242  float *radPtr_;
243  float *cdgPtr_;
244 
245 protected:
246 
247  bool bLWIR_;
248 
249  // OBC pointer
250 
252 
253  // Band identifiers
254 
255  VIIRS_BAND_ENUM band_; // Viirs band type
256  VIIRS_TEB_BAND_ENUM teb_band_; // Viirs TEB band type
257  VIIRS_RSB_BAND_ENUM rsb_band_; // Viirs TEB band type
258 
259  short det_432_; // Viirs-wide detector index
260 
265  virtual int initialize_L1B_data();
266 
273  virtual int check_pixel_quality(int band, int scan, int det,
274  short& DN_EV, unsigned short& qual);
275 
276 };
277 
278 #endif /* VIIRSBAND_H_ */
float uncidx_scale_factor_
float flt_valid_max_
virtual bool precheck_scan(int scan)
string band_str_
unsigned short shrt_valid_max_
static constexpr double L1B_FILL_DOUBLE
static constexpr unsigned char L1B_PIXEL_QUALITY_DNB_STRAY_LIGHT
virtual int initialize_L1B_data()
static constexpr unsigned short L1B_PIXEL_QUALITY_BOWTIE
VIIRS_RSB_BAND_ENUM rsb_band_
static constexpr int MOON_IN_SV_SCANS_TO_SKIP_FORWARD
static constexpr unsigned char L1B_ROW_QUALITY_DEAD_DETECTOR
int8_t * uncPtr_
static constexpr char BYTE_FILL_TEST
static constexpr int A_COEFFS
static constexpr unsigned int L1B_FILL_UINT_M13
static constexpr float L1B_FILL_FLOAT
static constexpr unsigned char L1B_PIXEL_QUALITY_MIXED_GAIN_STATE
static constexpr int C_COEFFS
static constexpr short TOTAL_DNB_PIXEL_QUALITY_FLAGS
VIIRS_BAND_ENUM
virtual int calibrate_scan(int scan)
static constexpr float NA_FLOAT32_FILL
int16_t * qual
Definition: l2bin.cpp:86
static constexpr unsigned char UBYTE_FILL_TEST
static constexpr int MIRROR_SIDE
short det_432_
vector< unsigned short > pixel_quality_flag_masks_
MOD_PR01 Production producing one five minute granule of output data in each run It can be configured to produce as many as three five minute granules per run Each execution with one construction record and one date file for each dataset In normal these are created by which splits them out of the hour datasets For LANCE they are created by which merges all session MODIS L0 datasets overlapping the requested time and extracts from the merged data those packets which fall within that time period Each scan of data is stored in the L1A granule that covers the start time of that scan
Definition: MOD_PR01_pr.txt:19
unsigned short * shrtPtr_
static constexpr short BAD_PIXEL_QUAL_SHIFT
virtual int check_pixel_quality(int band, int scan, int det, short &DN_EV, unsigned short &qual)
static constexpr unsigned char L1B_ROW_QUALITY_BB_TEMP_NOT_NOMINAL
static constexpr unsigned char L1B_PIXEL_QUALITY_GOOD
PARAM_TYPE_NONE Default value No parameter is buried in the product name name_prefix is case insensitive string compared to the product name PARAM_TYPE_VIS_WAVE The visible wavelength bands from the sensor are buried in the product name The product name is compared by appending and name_suffix ie aph_412_giop where prod_ix will be set to PARAM_TYPE_IR_WAVE same search method as PARAM_TYPE_VIS_WAVE except only wavelength above are looped through but prod_ix is still based ie aph_2_giop for the second band
static constexpr int RSB_BANDS
static constexpr short NUM_DG_PIXEL_QUALITY_FLAGS
static constexpr float ONBOARD_PT_FLOAT32_FILL
unsigned short uncidx_valid_min_
static constexpr unsigned char L1B_PIXEL_QUALITY_UPPER_MASK
virtual int write_cdg(const NcFile *nc_output)
static constexpr char L1B_FILL_BYTE
static constexpr unsigned char L1B_ROW_QUALITY_SUBSTITUTE_CAL
static constexpr unsigned char NIGHT_GRAN
unsigned short uncidx_valid_max_
virtual int write_rsb(const NcFile *nc_output, float *obs_val, unsigned short *short_val, unsigned short *pixelQuality, int8_t *unc_idx, bool bRad)
static constexpr short L1B_FILL_SHORT
vector< unsigned int > m13_uncertainty_index_flag_values_
static constexpr unsigned short L1B_PIXEL_QUALITY_MISSING
static constexpr unsigned char L1B_PIXEL_QUALITY_OUTOFRANGE_RFLBT
float bt_fill_value_
static const int processAtNight[Viirs_Bands]
Definition: VcstViirsBand.h:96
unsigned int * longPtr_
static constexpr short TOTAL_DG_PIXEL_QUALITY_FLAGS
unsigned int M13_valid_max_
static constexpr int T_ELEC_LEVELS
unsigned short shrt_valid_min_
static constexpr unsigned char L1B_PIXEL_QUALITY_NOT_OUTOFRANGE
virtual int write_data(const NcFile *nc_output)
float shrt_scale_factor_
static constexpr unsigned short L1B_FILL_USHORT
static constexpr int MOON_IN_SV_SCANS_TO_SKIP_BACK
static constexpr unsigned char L1B_ROW_QUALITY_DNB_STRAY_LIGHT
float obs_valid_max_
static constexpr float FLOAT_FILL_TEST
static constexpr unsigned char L1B_PIXEL_QUALITY_SUBSTITUTE_CAL
static constexpr unsigned char L1B_PIXEL_QUALITY_LOWER_MASK
static constexpr int T_FP_LEVELS
float flt_add_offset_
static constexpr short SHORT_FILL_TEST
float bt_valid_max_
static constexpr unsigned char L1B_ROW_QUALITY_MOON_IN_SPACE_VIEW
unsigned short pixel_quality_fill_value_
static constexpr float ELLIPSOID_FLOAT32_FILL
float shrt_add_offset_
static constexpr unsigned char L1B_PIXEL_QUALITY_SOMESATURATION
static constexpr double DEGtoRAD
static constexpr float VDNE_FLOAT32_FILL
float shrt_rad_add_offset_
ViirsBand(VcstObc *pObc, VIIRS_BAND_ENUM band)
float shrt_rad_scale_factor_
float * cdgPtr_
unsigned short shrt_fill_value_
static constexpr short NUM_BAD_PIXEL_QUALITY_FLAGS
int calibrate()
static constexpr short NUM_UADG_PIXEL_QUALITY_FLAGS
float flt_valid_min_
float * radPtr_
static constexpr unsigned char L1B_FILL_UBYTE
static constexpr unsigned short L1B_PIXEL_QUALITY_DEAD_DETECTOR
static constexpr short NUM_DNB_PIXEL_QUALITY_FLAGS
static constexpr unsigned char L1B_PIXEL_QUALITY_DG_ANOMALY
virtual int initialize()
static constexpr unsigned char L1B_ROW_QUALITY_LWIR_TEMP_NOT_NOMINAL
static constexpr double RADtoDEG
float flt_scale_factor_
static constexpr short TOTAL_SG_PIXEL_QUALITY_FLAGS
vector< unsigned int > uncertainty_index_flag_values_
static constexpr float ERR_FLOAT32_FILL
static constexpr unsigned char L1B_PIXEL_QUALITY_TEMP_NOT_NOMINAL
virtual ~ViirsBand()
unsigned short * qualPtr_
static constexpr int TEB_BANDS
virtual int get_l1bdata(float *l1bdata)
unsigned int M13_valid_min_
#define Viirs_Bands
static constexpr short TOTAL_UADG_PIXEL_QUALITY_FLAGS
string ev_var_str_
unsigned int M13_fill_value_
static constexpr int MAX_NUM_HISTORY_ORBITS
float obs_valid_min_
virtual int initialize_L1A_data()
float bt_valid_min_
VcstObc * pObc_
static constexpr unsigned char L1B_PIXEL_QUALITY_NOT_ALLSATURATION
unsigned short uncidx_fill_value_
static constexpr unsigned char L1B_ROW_QUALITY_DG_ANOMALY
VIIRS_TEB_BAND_ENUM teb_band_
static constexpr unsigned char L1B_PIXEL_QUALITY_OUTOFRANGE_RAD
static constexpr unsigned char DAY_GRAN
VIIRS_RSB_BAND_ENUM
static constexpr unsigned char MIXED_GRAN
VIIRS_TEB_BAND_ENUM
static constexpr int SATURATED_DN
unsigned char detector_quality_flag_masks_[8]
static constexpr unsigned char L1B_ROW_QUALITY_NO_CALIBRATION
static constexpr float MISS_FLOAT32_FILL
float obs_fill_value_
vector< unsigned char > detector_quality_flag_
VIIRS_BAND_ENUM band_
static constexpr unsigned char L1B_PIXEL_QUALITY_LOW_GAIN_STATE
static constexpr unsigned short L1B_PIXEL_QUALITY_NOCALIBRATE
static constexpr unsigned short L1B_PIXEL_QUALITY_NOISY_DETECTOR
static constexpr short NUM_PIXEL_QUALITY_FLAGS
static constexpr int NUM_TAPS
Definition: VcstViirsBand.h:99
virtual int write_teb(const NcFile *nc_output, float *obs_val, unsigned short *short_val, unsigned int *long_val, unsigned short *pixelQuality, int8_t *unc_idx, bool bRad)
static constexpr unsigned char L1B_PIXEL_QUALITY_ALLSATURATION