[GRASS-SVN] r61856 - grass/trunk/imagery/i.modis.qc
svn_grass at osgeo.org
svn_grass at osgeo.org
Wed Sep 10 23:25:06 PDT 2014
Author: ychemin
Date: 2014-09-10 23:25:06 -0700 (Wed, 10 Sep 2014)
New Revision: 61856
Modified:
grass/trunk/imagery/i.modis.qc/main.c
Log:
Added Internal Climatology for MOD09CMG and MYD09CMG
Modified: grass/trunk/imagery/i.modis.qc/main.c
===================================================================
--- grass/trunk/imagery/i.modis.qc/main.c 2014-09-11 05:59:25 UTC (rev 61855)
+++ grass/trunk/imagery/i.modis.qc/main.c 2014-09-11 06:25:06 UTC (rev 61856)
@@ -166,6 +166,7 @@
"mod09A1s;%s;"
"mod09CMG;%s;"
"mod09CMGs;%s;"
+ "mod09CMGi;%s;"
"mod11A1;%s;"
"mod11A2;%s;"
"mod13A2;%s;"
@@ -176,13 +177,14 @@
_("surf. refl. 500m 8-days, State QA"),
_("surf. refl. 5000m daily"),
_("surf. refl. 5000m daily, State QA"),
+ _("surf. refl. 5000m daily, Internal Climatology"),
_("LST 1km daily (Day/Night)"),
_("LST 1km 8-days (Day/Night)"),
_("VI 1km 16-days"),
_("Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"),
_("Brdf-Albedo Quality (BRDF SDS) 1km 8-days"));
productname->descriptions = desc_productname;
- productname->options = "mod09Q1,mod09A1,mod09A1s,mod09CMG,mod09CMGs,mod11A1,mod11A2,mod13A2,mcd43B2,mcd43B2q";
+ productname->options = "mod09Q1,mod09A1,mod09A1s,mod09CMG,mod09CMGs,mod09CMGi,mod11A1,mod11A2,mod13A2,mcd43B2,mcd43B2q";
productname->answer = "mod13A2";
qcname = G_define_option();
@@ -217,6 +219,20 @@
"land_water;%s;"
"mod35_snow_ice;%s;"
"pixel_adjacent_to_cloud;%s;"
+ "icm_cloudy;%s;"
+ "icm_clear;%s;"
+ "icm_high_clouds;%s;"
+ "icm_low_clouds;%s;"
+ "icm_snow;%s;"
+ "icm_fire;%s;"
+ "icm_sun_glint;%s;"
+ "icm_dust;%s;"
+ "icm_cloud_shadow;%s;"
+ "icm_pixel_is_adjacent_to_cloud;%s;"
+ "icm_cirrus;%s;"
+ "icm_pan_flag;%s;"
+ "icm_criteria_for_aerosol_retrieval;%s;"
+ "icm_aot_has_clim_val;%s;"
"modland_qa;%s;"
"vi_usefulness;%s;"
"aerosol_quantity;%s;"
@@ -244,17 +260,31 @@
_("mod11A2: Average Emissivity Error Classes"),
_("mod11A2: MODIS Land General Quality Assessment"),
_("mod11A2: Average LST Error Classes"),
+ _("mod09*s: StateQA Aerosol Quantity"),
+ _("mod09*s: StateQA BRDF Correction Performed"),
+ _("mod09*s: StateQA Cirrus Detected"),
+ _("mod09*s: StateQA Cloud Shadow"),
+ _("mod09*s: StateQA Cloud State"),
+ _("mod09*s: StateQA Internal Cloud Algorithm"),
+ _("mod09*s: StateQA Internal Fire Algorithm"),
_("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
- _("mod09*s: StateQA Internal Snow Mask"),
+ _("mod09*s: StateQA Land Water"),
+ _("mod09*s: StateQA mod35 Snow Ice"),
+ _("mod09*s: StateQA Pixel Adjacent to Cloud"),
+ _("mod09*i: Internal CM: Cloudy"),
+ _("mod09*i: Internal CM: Clear"),
+ _("mod09*i: Internal CM: High Clouds"),
+ _("mod09*i: Internal CM: Low Clouds"),
+ _("mod09*i: Internal CM: Snow"),
+ _("mod09*i: Internal CM: Fire"),
+ _("mod09*i: Internal CM: Sun Glint"),
+ _("mod09*i: Internal CM: Dust"),
+ _("mod09*i: Internal CM: Cloud Shadow"),
+ _("mod09*i: Internal CM: Pixel is Adjacent to Cloud"),
+ _("mod09*i: Internal CM: Cirrus"),
+ _("mod09*i: Internal CM: Pan Flag"),
+ _("mod09*i: Internal CM: Criteria for Aerosol Retrieval"),
+ _("mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."),
_("mod13A2: MODIS Land General Quality Assessment"),
_("mod13A2: Quality estimation of the pixel"),
_("mod13A2: Quantity range of Aerosol"),
@@ -269,7 +299,7 @@
_("mcd43B2: Quality of BRDF correction performed"),
_("mcd43B2q: Quality of BRDF correction performed"));
qcname->descriptions = desc_qcname;
- qcname->options = "adjcorr,atcorr,cloud,data_quality,diff_orbit_from_500m,modland_qa,mandatory_qa_11A1,data_quality_flag_11A1,emis_error_11A1,lst_error_11A1,data_quality_flag_11A2,emis_error_11A2,mandatory_qa_11A2,lst_error_11A2,aerosol_quantity,brdf_correction_performed,cirrus_detected,cloud_shadow,cloud_state,internal_cloud_algorithm,internal_fire_algorithm,internal_snow_mask,land_water,mod35_snow_ice,pixel_adjacent_to_cloud,modland_qa,vi_usefulness,aerosol_quantity,pixel_adjacent_to_cloud,brdf_correction_performed,mixed_clouds,land_water,possible_snow_ice,possible_shadow,platform,land_water,sun_z_angle_at_local_noon,brdf_correction_performed";
+ qcname->options = "adjcorr,atcorr,cloud,data_quality,diff_orbit_from_500m,modland_qa,mandatory_qa_11A1,data_quality_flag_11A1,emis_error_11A1,lst_error_11A1,data_quality_flag_11A2,emis_error_11A2,mandatory_qa_11A2,lst_error_11A2,aerosol_quantity,brdf_correction_performed,cirrus_detected,cloud_shadow,cloud_state,internal_cloud_algorithm,internal_fire_algorithm,internal_snow_mask,land_water,mod35_snow_ice,pixel_adjacent_to_cloud,icm_cloudy,icm_clear,icm_high_clouds,icm_low_clouds,icm_snow,icm_fire,icm_sun_glint,icm_dust,icm_cloud_shadow,icm_pixel_is_adjacent_to_cloud,icm_cirrus,icm_pan_flag,icm_criteria_for_aerosol_retrieval,icm_aot_has_clim_val,modland_qa,vi_usefulness,aerosol_quantity,pixel_adjacent_to_cloud,brdf_correction_performed,mixed_clouds,land_water,possible_snow_ice,possible_shadow,platform,land_water,sun_z_angle_at_local_noon,brdf_correction_performed";
qcname->answer = "modland_qa";
input_band = G_define_option();
@@ -277,7 +307,7 @@
input_band->type = TYPE_STRING;
input_band->required = NO;
input_band->description =
- _("Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7], mcd43B2q=[1-7])");
+ _("Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/y]d09CMG=[1-7], mcd43B2q=[1-7])");
desc_input_band = NULL;
G_asprintf(&desc_input_band,
"1;%s;2;%s;3;%s;4;%s;5;%s;6;%s;7;%s",
@@ -315,24 +345,31 @@
G_fatal_error(_("mod09Q1 product only has 2 bands"));
}
- /*mod09A1*/
- if ((strcmp(qcflag, "cirrus_detected") && !(strcmp(product, "mod09A1s"))) ||
- (strcmp(qcflag, "cloud_shadow") && !(strcmp(product, "mod09A1s"))) ||
- (strcmp(qcflag, "cloud_state") && !(strcmp(product, "mod09A1s"))) ||
- (strcmp(qcflag, "internal_cloud_algorithm") && !(strcmp(product, "mod09A1s"))) ||
- (strcmp(qcflag, "internal_fire_algorithm") && !(strcmp(product, "mod09A1s"))) ||
- (strcmp(qcflag, "internal_snow_mask") && !(strcmp(product, "mod09A1s"))) ||
- (strcmp(qcflag, "mod35_snow_ice") && !(strcmp(product, "mod09A1s"))))
- G_fatal_error(_("This bit flag is only available for MOD09A1s @ 500m products"));
+ /*mod09A1 stateqa or mod09CMG stateqa*/
+ if ((strcmp(qcflag, "cirrus_detected") && ( !(strcmp(product, "mod09A1s")) || !(strcmp(product, "mod09CMGs")) )) ||
+ (strcmp(qcflag, "cloud_shadow") && ( !(strcmp(product, "mod09A1s")) || !(strcmp(product, "mod09CMGs")) )) ||
+ (strcmp(qcflag, "cloud_state") && ( !(strcmp(product, "mod09A1s")) || !(strcmp(product, "mod09CMGs")) )) ||
+ (strcmp(qcflag, "internal_cloud_algorithm") && ( !(strcmp(product, "mod09A1s")) || !(strcmp(product, "mod09CMGs")) ))||
+ (strcmp(qcflag, "internal_fire_algorithm") && ( !(strcmp(product, "mod09A1s")) || !(strcmp(product, "mod09CMGs")) )) ||
+ (strcmp(qcflag, "internal_snow_mask") && ( !(strcmp(product, "mod09A1s")) || !(strcmp(product, "mod09CMGs")) )) ||
+ (strcmp(qcflag, "mod35_snow_ice") && ( !(strcmp(product, "mod09A1s")) || !(strcmp(product, "mod09CMGs")) )))
+ G_fatal_error(_("This bit flag is only available for MOD09A1s @ 500m or MOD09CMG @ 5000m products"));
/*mod09CMG*/
- if ((strcmp(qcflag, "cirrus_detected") && !(strcmp(product, "mod09CMGi"))) ||
- (strcmp(qcflag, "cloud_shadow") && !(strcmp(product, "mod09CMGi"))) ||
- (strcmp(qcflag, "cloud_state") && !(strcmp(product, "mod09CMGi"))) ||
- (strcmp(qcflag, "internal_cloud_algorithm") && !(strcmp(product, "mod09CMGi"))) ||
- (strcmp(qcflag, "internal_fire_algorithm") && !(strcmp(product, "mod09CMGi"))) ||
- (strcmp(qcflag, "internal_snow_mask") && !(strcmp(product, "mod09CMGi"))) ||
- (strcmp(qcflag, "mod35_snow_ice") && !(strcmp(product, "mod09CMGi"))))
+ if ((strcmp(qcflag, "icm_cloudy") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_clear") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_high_clouds") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_low_clouds") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_snow") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_fire") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_sun_glint") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_dust") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_cloud_shadow") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_pixel_is_adjacent_to_cloud") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_cirrus") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_pan_flag") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_criteria_for_aerosol_retrieval") && !(strcmp(product, "mod09CMGi"))) ||
+ (strcmp(qcflag, "icm_aot_has_clim_val") && !(strcmp(product, "mod09CMGi"))))
G_fatal_error(_("This bit flag is only available for mod09CMGi @ 5000m products"));
/*mod13A2*/
@@ -500,6 +537,11 @@
else if (!strcmp(product, "mod09CMGs"))
{
/* NOTE: we simply reuse the MOD09A1s functions - TODO: check if appropriate */
+ /* NOTE: Not sure it is appropriate=> https://lpdaac.usgs.gov/products/modis_products_table/myd09cmg*/
+ /* NOTE: 0-1: MOD35 cloud, 2: cloud shadow, 3-5: land/water flag, 6-7: aerosol Quantity*/
+ /* NOTE: 8-9: cirrus detected, 10: internal cloud algorithm flag, 11: internal fire algorithm flag*/
+ /* NOTE: 12: MOD35 snow/ice, 13: Pixel is adjacent to cloud, 14: BRDF correction is performed*/
+ /* NOTE: 15:internal snow algorithm flag*/
if (!strcmp(qcflag, "cloud_state"))
/*calculate mod09A1s cloud state flag */
c = mod09A1sa(c);
@@ -534,6 +576,52 @@
/*calculate mod09A1s internal snow mask flag */
c = mod09A1sk(c);
}
+ else if (!strcmp(product, "mod09CMGi"))
+ {
+ /* Internal Climatology for MOD09CMG or MYD09CMG */
+ if (!strcmp(qcflag, "icm_cloudy"))
+ /*calculate mod09A1i cloudy */
+ c = mod09CMGia(c);
+ if (!strcmp(qcflag, "icm_clear"))
+ /*calculate mod09A1i clear flag */
+ c = mod09CMGib(c);
+ if (!strcmp(qcflag, "icm_high_clouds"))
+ /*calculate mod09A1i high clouds flag */
+ c = mod09CMGic(c);
+ if (!strcmp(qcflag, "icm_low_clouds"))
+ /*calculate mod09A1s low clouds flag */
+ c = mod09CMGid(c);
+ if (!strcmp(qcflag, "icm_snow"))
+ /*calculate mod09A1i snow flag */
+ c = mod09CMGie(c);
+ if (!strcmp(qcflag, "icm_fire"))
+ /*calculate mod09A1i fire flag */
+ c = mod09CMGif(c);
+ if (!strcmp(qcflag, "icm_sun_glint"))
+ /*calculate mod09A1i sun glint flag */
+ c = mod09CMGig(c);
+ if (!strcmp(qcflag, "icm_dust"))
+ /*calculate mod09A1i dust flag */
+ c = mod09CMGih(c);
+ if (!strcmp(qcflag, "icm_cloud_shadow"))
+ /*calculate mod09A1i cloud shadow flag */
+ c = mod09CMGii(c);
+ if (!strcmp(qcflag, "icm_pixel_is_adjacent_to_cloud"))
+ /*calculate mod09A1i pixel is adjacent to cloud flag */
+ c = mod09CMGij(c);
+ if (!strcmp(qcflag, "icm_cirrus"))
+ /*calculate mod09A1i cirrus flag */
+ c = mod09CMGik(c);
+ if (!strcmp(qcflag, "icm_pan_flag"))
+ /*calculate mod09A1i pan flag */
+ c = mod09CMGil(c);
+ if (!strcmp(qcflag, "icm_criteria_for_aerosol_retrieval"))
+ /*calculate mod09A1i criteria for aerosol retrieval flag */
+ c = mod09CMGim(c);
+ if (!strcmp(qcflag, "icm_aot_has_clim_val"))
+ /*calculate mod09A1i aot has clim val flag */
+ c = mod09CMGin(c);
+ }
else if (!strcmp(product, "mod13A2"))
{
if (!strcmp(qcflag, "modland_qa"))
More information about the grass-commit
mailing list