def test_speckle_correction_constructor(self): """ Test speckle-correction. """ # Get collection with extra bands. s1base = sentinel1.Sentinel1( self.roi, self.sdate, self.edate, correctlia=False, addbands=True, addspeckle=True, addtexture=False, orbit='ascending', ) s1speckle = s1base.get_img_coll() testimg_s1speckle = ee.Image(s1speckle.first()) expected_bands = [ u'VV', u'VH', u'angle', u'VH_RLSPCK', u'VV_RLSPCK', u'DIFF', u'RATIO', u'DIFF_RLSPCK', u'RATIO_RLSPCK' ] compare_bands( self, testimg_s1speckle, expected_bands, {'msg': 'Sentinel 1 with speckle-correction had the wrong bands'})
def test_s1(self): s1seascoll = getS1Plus(self.roi, 2018, True, True) s1seasimg = ee.Image(s1seascoll.first()) expected_bands = [ u'VV', u'VH', u'angle', u'LIA', u'VH_RLSPCK', u'VV_RLSPCK', u'DIFF', u'RATIO', u'DIFF_RLSPCK', u'RATIO_RLSPCK', u'DOY' ] compare_bands(self, s1seasimg, expected_bands, {'msg': 'Test image for S1 had the wrong bands'})
def test_glcm_texture(self): """ Test GLCM texture. """ # Get collection with extra bands. s1base = sentinel1.Sentinel1(self.roi, self.sdate, self.edate) s1glcm = s1base.get_img_coll(correctlia=False, addbands=True, addspeckle=True, addtexture=True, orbit='ascending') testimg_s1glcm = ee.Image(s1glcm.first()) # TODO can we generate this with code # TODO not sure if this is correct expected_bands = [ u'VV', u'VH', u'angle', u'VH_RLSPCK', u'VV_RLSPCK', u'DIFF', u'RATIO', u'DIFF_RLSPCK', u'RATIO_RLSPCK', u'DIFF_asm', u'DIFF_contrast', u'DIFF_corr', u'DIFF_var', u'DIFF_idm', u'DIFF_savg', u'DIFF_svar', u'DIFF_sent', u'DIFF_ent', u'DIFF_dvar', u'DIFF_dent', u'DIFF_imcorr1', u'DIFF_imcorr2', u'DIFF_maxcorr', u'DIFF_diss', u'DIFF_inertia', u'DIFF_shade', u'DIFF_prom', u'DIFF_RLSPCK_asm', u'DIFF_RLSPCK_contrast', u'DIFF_RLSPCK_corr', u'DIFF_RLSPCK_var', u'DIFF_RLSPCK_idm', u'DIFF_RLSPCK_savg', u'DIFF_RLSPCK_svar', u'DIFF_RLSPCK_sent', u'DIFF_RLSPCK_ent', u'DIFF_RLSPCK_dvar', u'DIFF_RLSPCK_dent', u'DIFF_RLSPCK_imcorr1', u'DIFF_RLSPCK_imcorr2', u'DIFF_RLSPCK_maxcorr', u'DIFF_RLSPCK_diss', u'DIFF_RLSPCK_inertia', u'DIFF_RLSPCK_shade', u'DIFF_RLSPCK_prom', u'VH_asm', u'VH_contrast', u'VH_corr', u'VH_var', u'VH_idm', u'VH_savg', u'VH_svar', u'VH_sent', u'VH_ent', u'VH_dvar', u'VH_dent', u'VH_imcorr1', u'VH_imcorr2', u'VH_maxcorr', u'VH_diss', u'VH_inertia', u'VH_shade', u'VH_prom', u'VH_RLSPCK_asm', u'VH_RLSPCK_contrast', u'VH_RLSPCK_corr', u'VH_RLSPCK_var', u'VH_RLSPCK_idm', u'VH_RLSPCK_savg', u'VH_RLSPCK_svar', u'VH_RLSPCK_sent', u'VH_RLSPCK_ent', u'VH_RLSPCK_dvar', u'VH_RLSPCK_dent', u'VH_RLSPCK_imcorr1', u'VH_RLSPCK_imcorr2', u'VH_RLSPCK_maxcorr', u'VH_RLSPCK_diss', u'VH_RLSPCK_inertia', u'VH_RLSPCK_shade', u'VH_RLSPCK_prom', u'VV_asm', u'VV_contrast', u'VV_corr', u'VV_var', u'VV_idm', u'VV_savg', u'VV_svar', u'VV_sent', u'VV_ent', u'VV_dvar', u'VV_dent', u'VV_imcorr1', u'VV_imcorr2', u'VV_maxcorr', u'VV_diss', u'VV_inertia', u'VV_shade', u'VV_prom', u'VV_RLSPCK_asm', u'VV_RLSPCK_contrast', u'VV_RLSPCK_corr', u'VV_RLSPCK_var', u'VV_RLSPCK_idm', u'VV_RLSPCK_savg', u'VV_RLSPCK_svar', u'VV_RLSPCK_sent', u'VV_RLSPCK_ent', u'VV_RLSPCK_dvar', u'VV_RLSPCK_dent', u'VV_RLSPCK_imcorr1', u'VV_RLSPCK_imcorr2', u'VV_RLSPCK_maxcorr', u'VV_RLSPCK_diss', u'VV_RLSPCK_inertia', u'VV_RLSPCK_shade', u'VV_RLSPCK_prom' ] compare_bands( self, testimg_s1glcm, expected_bands, { 'msg': 'Sentinel 1 with speckle-correction and GLCM texture had the wrong bands' })
def test_base_collection(self): """ Test base collection (raw S1 assets). """ # Generate base collection. s1base = sentinel1.Sentinel1(self.roi, self.sdate, self.edate) testimg_base = ee.Image(s1base.coll.first( )) # TODO tests should be agnostic to the underlying implementation expected_bands = [u'VV', u'VH', u'angle'] compare_bands(self, testimg_base, expected_bands, {'msg': 'Sentinel 1 base image had the wrong bands'})
def test_s2(self): s2seascoll = getS2Plus(self.roi, 2018, True) s2seasimg = ee.Image(s2seascoll.first()) expected_bands = [ u'AEROS', u'BLUE', u'GREEN', u'RED', u'RDED1', u'RDED2', u'RDED3', u'NIR', u'RDED4', u'VAPOR', u'CIRRU', u'SWIR1', u'SWIR2', u'QA10', u'QA20', u'QA60', u'QA60_DECODED', u'DOY', u'QA_HOLLST', u'QA_FSEV1', u'NBR1', u'NBR2', u'STI', u'NDTI', u'CRC', u'REIP', u'GCVI', u'RDGCVI1', u'RDGCVI2', u'MTCI', u'MTCI2', u'WDRVI', u'GRWDRVI', u'RDWDRVI', u'RDNDVI1', u'RDNDVI2', u'NDVI' ] compare_bands(self, s2seasimg, expected_bands, {'msg': 'Test image for S2 had the wrong bands'})
def test_base_collection(self): """ Test base collection (raw S2 assets). """ # Generate base collection. s2base = sentinel2.Sentinel2TOA(self.roi, self.sdate, self.edate) testimg_base = ee.Image(s2base.coll.first()) # TODO tests should be agnostic to the underlying implementation expected_bands = [ u'AEROS', u'BLUE', u'GREEN', u'RED', u'RDED1', u'RDED2', u'RDED3', u'NIR', u'RDED4', u'VAPOR', u'CIRRU', u'SWIR1', u'SWIR2', u'QA10', u'QA20', u'QA60' ] compare_bands(self, testimg_base, expected_bands, {'msg': 'Sentinel 2 base image had the wrong bands'})
def test_cloud_mask(self): """ Test Cloud masks. """ # Get collection with extra bands. s2base = sentinel2.Sentinel2TOA(self.roi, self.sdate, self.edate) s2qa = s2base.get_img_coll(addVIs=True, addCloudMasks=True) testimg_s2qa = ee.Image(s2qa.first()) expected_bands = [ u'AEROS', u'BLUE', u'GREEN', u'RED', u'RDED1', u'RDED2', u'RDED3', u'NIR', u'RDED4', u'VAPOR', u'CIRRU', u'SWIR1', u'SWIR2', u'QA10', u'QA20', u'QA60', u'QA60_DECODED', u'DOY', u'QA_HOLLST', u'QA_FSEV1', u'NBR1', u'NBR2', u'STI', u'NDTI', u'CRC', u'REIP', u'GCVI', u'RDGCVI1', u'RDGCVI2', u'MTCI', u'MTCI2', u'WDRVI', u'GRWDRVI', u'RDWDRVI', u'RDNDVI1', u'RDNDVI2', u'NDVI' ] compare_bands(self, testimg_s2qa, expected_bands, {'msg': 'Sentinel 2 with VIs and cloud masks had the wrong bands'})
def test_extra_bands(self): """ Test extra bands (difference and polarization). """ # Get collection with extra bands. s1base = sentinel1.Sentinel1(self.roi, self.sdate, self.edate) s1extra = s1base.get_img_coll(correctlia=False, addbands=True, addspeckle=False, addtexture=False, orbit='ascending') testimg_s1extra = ee.Image(s1extra.first()) expected_bands = [u'VV', u'VH', u'angle', u'DIFF', u'RATIO'] compare_bands(self, testimg_s1extra, expected_bands, {'msg': 'Sentinel 1 with extras had the wrong bands'})
def test_VIs_constructor(self): """ Test VIs. """ # Get collection with extra bands. s2base = sentinel2.Sentinel2TOA( self.roi, self.sdate, self.edate, addVIs=True, addCloudMasks=False, ) s2extra = s2base.get_img_coll() testimg_s2extra = ee.Image(s2extra.first()) expected_bands = [ u'AEROS', u'BLUE', u'GREEN', u'RED', u'RDED1', u'RDED2', u'RDED3', u'NIR', u'RDED4', u'VAPOR', u'CIRRU', u'SWIR1', u'SWIR2', u'QA10', u'QA20', u'QA60', u'NBR1', u'NBR2', u'STI', u'NDTI', u'CRC', u'REIP', u'GCVI', u'RDGCVI1', u'RDGCVI2', u'MTCI', u'MTCI2', u'WDRVI', u'GRWDRVI', u'RDWDRVI', u'RDNDVI1', u'RDNDVI2', u'NDVI' ] compare_bands(self, testimg_s2extra, expected_bands, {'msg': 'Sentinel 2 with VIs had the wrong bands'})
def test_seasonal(self): glcmvars = ['contrast', 'corr', 'var', 'savg', 'prom'] seasmed = sentinel_combined_medians(self.roi, 2018, False, False, True, True, glcmvars) # TODO can we generate this in code. expected_bands = [ u'AEROS_S1', u'BLUE_S1', u'GREEN_S1', u'RED_S1', u'RDED1_S1', u'RDED2_S1', u'RDED3_S1', u'NIR_S1', u'RDED4_S1', u'VAPOR_S1', u'CIRRU_S1', u'SWIR1_S1', u'SWIR2_S1', u'QA10_S1', u'QA20_S1', u'QA60_S1', u'QA60_DECODED_S1', u'DOY_S1', u'QA_HOLLST_S1', u'QA_FSEV1_S1', u'AEROS_S2', u'BLUE_S2', u'GREEN_S2', u'RED_S2', u'RDED1_S2', u'RDED2_S2', u'RDED3_S2', u'NIR_S2', u'RDED4_S2', u'VAPOR_S2', u'CIRRU_S2', u'SWIR1_S2', u'SWIR2_S2', u'QA10_S2', u'QA20_S2', u'QA60_S2', u'QA60_DECODED_S2', u'DOY_S2', u'QA_HOLLST_S2', u'QA_FSEV1_S2', u'AEROS_S3', u'BLUE_S3', u'GREEN_S3', u'RED_S3', u'RDED1_S3', u'RDED2_S3', u'RDED3_S3', u'NIR_S3', u'RDED4_S3', u'VAPOR_S3', u'CIRRU_S3', u'SWIR1_S3', u'SWIR2_S3', u'QA10_S3', u'QA20_S3', u'QA60_S3', u'QA60_DECODED_S3', u'DOY_S3', u'QA_HOLLST_S3', u'QA_FSEV1_S3', u'AEROS_S1_contrast', u'BLUE_S1_contrast', u'GREEN_S1_contrast', u'RED_S1_contrast', u'RDED1_S1_contrast', u'RDED2_S1_contrast', u'RDED3_S1_contrast', u'NIR_S1_contrast', u'RDED4_S1_contrast', u'VAPOR_S1_contrast', u'CIRRU_S1_contrast', u'SWIR1_S1_contrast', u'SWIR2_S1_contrast', u'QA10_S1_contrast', u'QA20_S1_contrast', u'QA60_S1_contrast', u'QA60_DECODED_S1_contrast', u'DOY_S1_contrast', u'QA_HOLLST_S1_contrast', u'QA_FSEV1_S1_contrast', u'AEROS_S2_contrast', u'BLUE_S2_contrast', u'GREEN_S2_contrast', u'RED_S2_contrast', u'RDED1_S2_contrast', u'RDED2_S2_contrast', u'RDED3_S2_contrast', u'NIR_S2_contrast', u'RDED4_S2_contrast', u'VAPOR_S2_contrast', u'CIRRU_S2_contrast', u'SWIR1_S2_contrast', u'SWIR2_S2_contrast', u'QA10_S2_contrast', u'QA20_S2_contrast', u'QA60_S2_contrast', u'QA60_DECODED_S2_contrast', u'DOY_S2_contrast', u'QA_HOLLST_S2_contrast', u'QA_FSEV1_S2_contrast', u'AEROS_S3_contrast', u'BLUE_S3_contrast', u'GREEN_S3_contrast', u'RED_S3_contrast', u'RDED1_S3_contrast', u'RDED2_S3_contrast', u'RDED3_S3_contrast', u'NIR_S3_contrast', u'RDED4_S3_contrast', u'VAPOR_S3_contrast', u'CIRRU_S3_contrast', u'SWIR1_S3_contrast', u'SWIR2_S3_contrast', u'QA10_S3_contrast', u'QA20_S3_contrast', u'QA60_S3_contrast', u'QA60_DECODED_S3_contrast', u'DOY_S3_contrast', u'QA_HOLLST_S3_contrast', u'QA_FSEV1_S3_contrast', u'AEROS_S1_corr', u'BLUE_S1_corr', u'GREEN_S1_corr', u'RED_S1_corr', u'RDED1_S1_corr', u'RDED2_S1_corr', u'RDED3_S1_corr', u'NIR_S1_corr', u'RDED4_S1_corr', u'VAPOR_S1_corr', u'CIRRU_S1_corr', u'SWIR1_S1_corr', u'SWIR2_S1_corr', u'QA10_S1_corr', u'QA20_S1_corr', u'QA60_S1_corr', u'QA60_DECODED_S1_corr', u'DOY_S1_corr', u'QA_HOLLST_S1_corr', u'QA_FSEV1_S1_corr', u'AEROS_S2_corr', u'BLUE_S2_corr', u'GREEN_S2_corr', u'RED_S2_corr', u'RDED1_S2_corr', u'RDED2_S2_corr', u'RDED3_S2_corr', u'NIR_S2_corr', u'RDED4_S2_corr', u'VAPOR_S2_corr', u'CIRRU_S2_corr', u'SWIR1_S2_corr', u'SWIR2_S2_corr', u'QA10_S2_corr', u'QA20_S2_corr', u'QA60_S2_corr', u'QA60_DECODED_S2_corr', u'DOY_S2_corr', u'QA_HOLLST_S2_corr', u'QA_FSEV1_S2_corr', u'AEROS_S3_corr', u'BLUE_S3_corr', u'GREEN_S3_corr', u'RED_S3_corr', u'RDED1_S3_corr', u'RDED2_S3_corr', u'RDED3_S3_corr', u'NIR_S3_corr', u'RDED4_S3_corr', u'VAPOR_S3_corr', u'CIRRU_S3_corr', u'SWIR1_S3_corr', u'SWIR2_S3_corr', u'QA10_S3_corr', u'QA20_S3_corr', u'QA60_S3_corr', u'QA60_DECODED_S3_corr', u'DOY_S3_corr', u'QA_HOLLST_S3_corr', u'QA_FSEV1_S3_corr', u'AEROS_S1_var', u'BLUE_S1_var', u'GREEN_S1_var', u'RED_S1_var', u'RDED1_S1_var', u'RDED2_S1_var', u'RDED3_S1_var', u'NIR_S1_var', u'RDED4_S1_var', u'VAPOR_S1_var', u'CIRRU_S1_var', u'SWIR1_S1_var', u'SWIR2_S1_var', u'QA10_S1_var', u'QA20_S1_var', u'QA60_S1_var', u'QA60_DECODED_S1_var', u'DOY_S1_var', u'QA_HOLLST_S1_var', u'QA_FSEV1_S1_var', u'AEROS_S2_var', u'BLUE_S2_var', u'GREEN_S2_var', u'RED_S2_var', u'RDED1_S2_var', u'RDED2_S2_var', u'RDED3_S2_var', u'NIR_S2_var', u'RDED4_S2_var', u'VAPOR_S2_var', u'CIRRU_S2_var', u'SWIR1_S2_var', u'SWIR2_S2_var', u'QA10_S2_var', u'QA20_S2_var', u'QA60_S2_var', u'QA60_DECODED_S2_var', u'DOY_S2_var', u'QA_HOLLST_S2_var', u'QA_FSEV1_S2_var', u'AEROS_S3_var', u'BLUE_S3_var', u'GREEN_S3_var', u'RED_S3_var', u'RDED1_S3_var', u'RDED2_S3_var', u'RDED3_S3_var', u'NIR_S3_var', u'RDED4_S3_var', u'VAPOR_S3_var', u'CIRRU_S3_var', u'SWIR1_S3_var', u'SWIR2_S3_var', u'QA10_S3_var', u'QA20_S3_var', u'QA60_S3_var', u'QA60_DECODED_S3_var', u'DOY_S3_var', u'QA_HOLLST_S3_var', u'QA_FSEV1_S3_var', u'AEROS_S1_savg', u'BLUE_S1_savg', u'GREEN_S1_savg', u'RED_S1_savg', u'RDED1_S1_savg', u'RDED2_S1_savg', u'RDED3_S1_savg', u'NIR_S1_savg', u'RDED4_S1_savg', u'VAPOR_S1_savg', u'CIRRU_S1_savg', u'SWIR1_S1_savg', u'SWIR2_S1_savg', u'QA10_S1_savg', u'QA20_S1_savg', u'QA60_S1_savg', u'QA60_DECODED_S1_savg', u'DOY_S1_savg', u'QA_HOLLST_S1_savg', u'QA_FSEV1_S1_savg', u'AEROS_S2_savg', u'BLUE_S2_savg', u'GREEN_S2_savg', u'RED_S2_savg', u'RDED1_S2_savg', u'RDED2_S2_savg', u'RDED3_S2_savg', u'NIR_S2_savg', u'RDED4_S2_savg', u'VAPOR_S2_savg', u'CIRRU_S2_savg', u'SWIR1_S2_savg', u'SWIR2_S2_savg', u'QA10_S2_savg', u'QA20_S2_savg', u'QA60_S2_savg', u'QA60_DECODED_S2_savg', u'DOY_S2_savg', u'QA_HOLLST_S2_savg', u'QA_FSEV1_S2_savg', u'AEROS_S3_savg', u'BLUE_S3_savg', u'GREEN_S3_savg', u'RED_S3_savg', u'RDED1_S3_savg', u'RDED2_S3_savg', u'RDED3_S3_savg', u'NIR_S3_savg', u'RDED4_S3_savg', u'VAPOR_S3_savg', u'CIRRU_S3_savg', u'SWIR1_S3_savg', u'SWIR2_S3_savg', u'QA10_S3_savg', u'QA20_S3_savg', u'QA60_S3_savg', u'QA60_DECODED_S3_savg', u'DOY_S3_savg', u'QA_HOLLST_S3_savg', u'QA_FSEV1_S3_savg', u'AEROS_S1_prom', u'BLUE_S1_prom', u'GREEN_S1_prom', u'RED_S1_prom', u'RDED1_S1_prom', u'RDED2_S1_prom', u'RDED3_S1_prom', u'NIR_S1_prom', u'RDED4_S1_prom', u'VAPOR_S1_prom', u'CIRRU_S1_prom', u'SWIR1_S1_prom', u'SWIR2_S1_prom', u'QA10_S1_prom', u'QA20_S1_prom', u'QA60_S1_prom', u'QA60_DECODED_S1_prom', u'DOY_S1_prom', u'QA_HOLLST_S1_prom', u'QA_FSEV1_S1_prom', u'AEROS_S2_prom', u'BLUE_S2_prom', u'GREEN_S2_prom', u'RED_S2_prom', u'RDED1_S2_prom', u'RDED2_S2_prom', u'RDED3_S2_prom', u'NIR_S2_prom', u'RDED4_S2_prom', u'VAPOR_S2_prom', u'CIRRU_S2_prom', u'SWIR1_S2_prom', u'SWIR2_S2_prom', u'QA10_S2_prom', u'QA20_S2_prom', u'QA60_S2_prom', u'QA60_DECODED_S2_prom', u'DOY_S2_prom', u'QA_HOLLST_S2_prom', u'QA_FSEV1_S2_prom', u'AEROS_S3_prom', u'BLUE_S3_prom', u'GREEN_S3_prom', u'RED_S3_prom', u'RDED1_S3_prom', u'RDED2_S3_prom', u'RDED3_S3_prom', u'NIR_S3_prom', u'RDED4_S3_prom', u'VAPOR_S3_prom', u'CIRRU_S3_prom', u'SWIR1_S3_prom', u'SWIR2_S3_prom', u'QA10_S3_prom', u'QA20_S3_prom', u'QA60_S3_prom', u'QA60_DECODED_S3_prom', u'DOY_S3_prom', u'QA_HOLLST_S3_prom', u'QA_FSEV1_S3_prom', u'VV_S1', u'VH_S1', u'angle_S1', u'VH_RLSPCK_S1', u'VV_RLSPCK_S1', u'DIFF_S1', u'RATIO_S1', u'DIFF_RLSPCK_S1', u'RATIO_RLSPCK_S1', u'DOY_S1_1', u'VV_S2', u'VH_S2', u'angle_S2', u'VH_RLSPCK_S2', u'VV_RLSPCK_S2', u'DIFF_S2', u'RATIO_S2', u'DIFF_RLSPCK_S2', u'RATIO_RLSPCK_S2', u'DOY_S2_1', u'VV_S3', u'VH_S3', u'angle_S3', u'VH_RLSPCK_S3', u'VV_RLSPCK_S3', u'DIFF_S3', u'RATIO_S3', u'DIFF_RLSPCK_S3', u'RATIO_RLSPCK_S3', u'DOY_S3_1', u'VV_S1_contrast', u'VH_S1_contrast', u'angle_S1_contrast', u'VH_RLSPCK_S1_contrast', u'VV_RLSPCK_S1_contrast', u'DIFF_S1_contrast', u'RATIO_S1_contrast', u'DIFF_RLSPCK_S1_contrast', u'RATIO_RLSPCK_S1_contrast', u'DOY_S1_contrast_1', u'VV_S2_contrast', u'VH_S2_contrast', u'angle_S2_contrast', u'VH_RLSPCK_S2_contrast', u'VV_RLSPCK_S2_contrast', u'DIFF_S2_contrast', u'RATIO_S2_contrast', u'DIFF_RLSPCK_S2_contrast', u'RATIO_RLSPCK_S2_contrast', u'DOY_S2_contrast_1', u'VV_S3_contrast', u'VH_S3_contrast', u'angle_S3_contrast', u'VH_RLSPCK_S3_contrast', u'VV_RLSPCK_S3_contrast', u'DIFF_S3_contrast', u'RATIO_S3_contrast', u'DIFF_RLSPCK_S3_contrast', u'RATIO_RLSPCK_S3_contrast', u'DOY_S3_contrast_1', u'VV_S1_corr', u'VH_S1_corr', u'angle_S1_corr', u'VH_RLSPCK_S1_corr', u'VV_RLSPCK_S1_corr', u'DIFF_S1_corr', u'RATIO_S1_corr', u'DIFF_RLSPCK_S1_corr', u'RATIO_RLSPCK_S1_corr', u'DOY_S1_corr_1', u'VV_S2_corr', u'VH_S2_corr', u'angle_S2_corr', u'VH_RLSPCK_S2_corr', u'VV_RLSPCK_S2_corr', u'DIFF_S2_corr', u'RATIO_S2_corr', u'DIFF_RLSPCK_S2_corr', u'RATIO_RLSPCK_S2_corr', u'DOY_S2_corr_1', u'VV_S3_corr', u'VH_S3_corr', u'angle_S3_corr', u'VH_RLSPCK_S3_corr', u'VV_RLSPCK_S3_corr', u'DIFF_S3_corr', u'RATIO_S3_corr', u'DIFF_RLSPCK_S3_corr', u'RATIO_RLSPCK_S3_corr', u'DOY_S3_corr_1', u'VV_S1_var', u'VH_S1_var', u'angle_S1_var', u'VH_RLSPCK_S1_var', u'VV_RLSPCK_S1_var', u'DIFF_S1_var', u'RATIO_S1_var', u'DIFF_RLSPCK_S1_var', u'RATIO_RLSPCK_S1_var', u'DOY_S1_var_1', u'VV_S2_var', u'VH_S2_var', u'angle_S2_var', u'VH_RLSPCK_S2_var', u'VV_RLSPCK_S2_var', u'DIFF_S2_var', u'RATIO_S2_var', u'DIFF_RLSPCK_S2_var', u'RATIO_RLSPCK_S2_var', u'DOY_S2_var_1', u'VV_S3_var', u'VH_S3_var', u'angle_S3_var', u'VH_RLSPCK_S3_var', u'VV_RLSPCK_S3_var', u'DIFF_S3_var', u'RATIO_S3_var', u'DIFF_RLSPCK_S3_var', u'RATIO_RLSPCK_S3_var', u'DOY_S3_var_1', u'VV_S1_savg', u'VH_S1_savg', u'angle_S1_savg', u'VH_RLSPCK_S1_savg', u'VV_RLSPCK_S1_savg', u'DIFF_S1_savg', u'RATIO_S1_savg', u'DIFF_RLSPCK_S1_savg', u'RATIO_RLSPCK_S1_savg', u'DOY_S1_savg_1', u'VV_S2_savg', u'VH_S2_savg', u'angle_S2_savg', u'VH_RLSPCK_S2_savg', u'VV_RLSPCK_S2_savg', u'DIFF_S2_savg', u'RATIO_S2_savg', u'DIFF_RLSPCK_S2_savg', u'RATIO_RLSPCK_S2_savg', u'DOY_S2_savg_1', u'VV_S3_savg', u'VH_S3_savg', u'angle_S3_savg', u'VH_RLSPCK_S3_savg', u'VV_RLSPCK_S3_savg', u'DIFF_S3_savg', u'RATIO_S3_savg', u'DIFF_RLSPCK_S3_savg', u'RATIO_RLSPCK_S3_savg', u'DOY_S3_savg_1', u'VV_S1_prom', u'VH_S1_prom', u'angle_S1_prom', u'VH_RLSPCK_S1_prom', u'VV_RLSPCK_S1_prom', u'DIFF_S1_prom', u'RATIO_S1_prom', u'DIFF_RLSPCK_S1_prom', u'RATIO_RLSPCK_S1_prom', u'DOY_S1_prom_1', u'VV_S2_prom', u'VH_S2_prom', u'angle_S2_prom', u'VH_RLSPCK_S2_prom', u'VV_RLSPCK_S2_prom', u'DIFF_S2_prom', u'RATIO_S2_prom', u'DIFF_RLSPCK_S2_prom', u'RATIO_RLSPCK_S2_prom', u'DOY_S2_prom_1', u'VV_S3_prom', u'VH_S3_prom', u'angle_S3_prom', u'VH_RLSPCK_S3_prom', u'VV_RLSPCK_S3_prom', u'DIFF_S3_prom', u'RATIO_S3_prom', u'DIFF_RLSPCK_S3_prom', u'RATIO_RLSPCK_S3_prom', u'DOY_S3_prom_1' ] compare_bands(self, seasmed, expected_bands, { 'msg': 'Test image for sentinel_combined_medians had the wrong bands' })