From 9432eae265b35d3411128125539e879164e1e157 Mon Sep 17 00:00:00 2001 From: cssprad1 Date: Wed, 21 Dec 2022 13:57:58 -0500 Subject: [PATCH] Fixed MCD and QA excl --- model/BurnScarMap.py | 6 ++--- model/QAMap.py | 4 +-- model/SevenClass.py | 9 ++++--- model/Utils.py | 4 ++- model/tests/test_BurnScarMap.py | 46 ++++++++++++++++++++++++++++----- 5 files changed, 53 insertions(+), 16 deletions(-) diff --git a/model/BurnScarMap.py b/model/BurnScarMap.py index 067ce0c..7837596 100644 --- a/model/BurnScarMap.py +++ b/model/BurnScarMap.py @@ -14,6 +14,7 @@ class BurnScarMap(object): DTYPE = np.uint8 COLS = 2400 ROWS = 2400 + EXCLUSION_TILES = ['v00', 'v01', 'v14', 'v15', 'v16', 'v17'] # ------------------------------------------------------------------------- # generateAnnualBurnScarMap @@ -30,8 +31,7 @@ def generateAnnualBurnScarMap( # Test to see if tile in list of tiles which do not # need a burn scar product. - inclusionDays = Utils.INCLUSIONS.get(tile[3:]) - exclusionDays = Utils.EXCLUSIONS.get(tile[3:]) + exclusionTile = tile[3:] in BurnScarMap.EXCLUSION_TILES try: subdirhdfs = BurnScarMap._getAllFiles( @@ -40,7 +40,7 @@ def generateAnnualBurnScarMap( subdir, 'Burn Date', 'Uncertainty') for subdir in subdirhdfs] except FileNotFoundError: msg = 'MCD64A1 not found for {}.'.format(tile) - if exclusionDays or inclusionDays: + if exclusionTile: if logger: logger.info(msg + ' Using empty burn scar product.') burnScarMapList = [] diff --git a/model/QAMap.py b/model/QAMap.py index ff955c3..1132954 100644 --- a/model/QAMap.py +++ b/model/QAMap.py @@ -92,7 +92,7 @@ def generateQA( # ------------------------------------------------------------------------- @staticmethod def _getGMTEDArray(tile, demDir): - exclusionDays = Utils.EXCLUSIONS.get(tile[3:]) + exclusionTile = tile[3:] in Utils.QA_ANTARCTIC_EXCLUSION try: demSearchTerm = 'GMTED.{}.slope.tif'.format(tile) demSlopeDatasetPath = QAMap._getStaticDatasetPath( @@ -101,7 +101,7 @@ def _getGMTEDArray(tile, demDir): demSlopeDataArray = demSlopeDataset.GetRasterBand( 1).ReadAsArray() except FileNotFoundError as initialException: - if exclusionDays: + if exclusionTile: demSlopeDataArray = np.zeros( (BandReader.COLS, BandReader.ROWS), dtype=QAMap.DTYPE) diff --git a/model/SevenClass.py b/model/SevenClass.py index 8ec08ae..1711abc 100644 --- a/model/SevenClass.py +++ b/model/SevenClass.py @@ -15,7 +15,7 @@ class SevenClassMap(object): TIF_BASE_NAME = 'Master_7class_maxextent_' DTYPE = np.uint8 - NODATA = 253 + NODATA = 250 # ------------------------------------------------------------------------- # generateSevenClass @@ -43,9 +43,9 @@ def generateSevenClass( outputSevenClassArray = np.zeros((BandReader.COLS, BandReader.ROWS)) - exclusionDays = Utils.EXCLUSIONS.get(tile[3:]) + exclusionTile = tile[3:] in Utils.QA_ANTARCTIC_EXCLUSION - if exclusionDays: + if exclusionTile: if logger: msg = 'Antarctic tiles have no seven class. Filling nodata.' @@ -57,7 +57,8 @@ def generateSevenClass( staticSevenPath = SevenClassMap._getStaticSevenClassPath( staticSevenClassDir, tile) staticSevenDataset = gdal.Open(staticSevenPath) - staticSevenArray = staticSevenDataset.GetRasterBand(1).ReadAsArray() + staticSevenArray = \ + staticSevenDataset.GetRasterBand(1).ReadAsArray() restArray = annualProductArray.copy() diff --git a/model/Utils.py b/model/Utils.py index 9c09b64..be3e5fc 100644 --- a/model/Utils.py +++ b/model/Utils.py @@ -17,12 +17,14 @@ class Utils(object): 'v01': DayRange(161, 256), 'v02': DayRange(145, 288), 'v03': DayRange(129, 304)} - + EXCLUSIONS = {'v17': DayRange(177, 256), 'v16': DayRange(161, 256), 'v15': DayRange(145, 288), 'v14': DayRange(129, 304)} + QA_ANTARCTIC_EXCLUSION = ['v17', 'v16', 'v15'] + # ------------------------------------------------------------------------- # getImageName # ------------------------------------------------------------------------- diff --git a/model/tests/test_BurnScarMap.py b/model/tests/test_BurnScarMap.py index 6868094..1daa738 100644 --- a/model/tests/test_BurnScarMap.py +++ b/model/tests/test_BurnScarMap.py @@ -22,8 +22,12 @@ class BurnScarTestCase(unittest.TestCase): # testHandleMcdError # ------------------------------------------------------------------------- def testHandleMcdError(self): - tile0 = 'h16v01' - tile1 = 'h13v14' + tile0 = 'h20v00' + tile1 = 'h16v01' + tile2 = 'h15v14' + tile3 = 'h13v15' + tile4 = 'h13v16' + tile5 = 'h13v17' dummyDir = tempfile.gettempdir() streamHandler = logging.StreamHandler(sys.stdout) @@ -35,17 +39,42 @@ def testHandleMcdError(self): self.assertTrue(os.path.exists(burnScarOutputPathTile0)) - burnScarOutputPathTile0 = BurnScarMap.generateAnnualBurnScarMap( + burnScarOutputPathTile1 = BurnScarMap.generateAnnualBurnScarMap( 'MOD', 2020, tile=tile1, mcdDir='Test', classifierName='rf', outDir=dummyDir, logger=logger) - self.assertTrue(os.path.exists(burnScarOutputPathTile0)) + self.assertTrue(os.path.exists(burnScarOutputPathTile1)) + + burnScarOutputPathTile2 = BurnScarMap.generateAnnualBurnScarMap( + 'MOD', 2020, tile=tile2, mcdDir='Test', + classifierName='rf', outDir=dummyDir, logger=logger) + + self.assertTrue(os.path.exists(burnScarOutputPathTile2)) + + burnScarOutputPathTile3 = BurnScarMap.generateAnnualBurnScarMap( + 'MOD', 2020, tile=tile3, mcdDir='Test', + classifierName='rf', outDir=dummyDir, logger=logger) + + self.assertTrue(os.path.exists(burnScarOutputPathTile3)) + + burnScarOutputPathTile4 = BurnScarMap.generateAnnualBurnScarMap( + 'MOD', 2020, tile=tile4, mcdDir='Test', + classifierName='rf', outDir=dummyDir, logger=logger) + + self.assertTrue(os.path.exists(burnScarOutputPathTile4)) + + burnScarOutputPathTile5 = BurnScarMap.generateAnnualBurnScarMap( + 'MOD', 2020, tile=tile5, mcdDir='Test', + classifierName='rf', outDir=dummyDir, logger=logger) + + self.assertTrue(os.path.exists(burnScarOutputPathTile5)) # ------------------------------------------------------------------------- # testHandleMcdError # ------------------------------------------------------------------------- def testThrowMcdError(self): - tile = 'h09v05' + tile0 = 'h16v02' + tile1 = 'h17v13' dummyDir = tempfile.gettempdir() streamHandler = logging.StreamHandler(sys.stdout) @@ -53,5 +82,10 @@ def testThrowMcdError(self): with self.assertRaises(FileNotFoundError): BurnScarMap.generateAnnualBurnScarMap( - 'MOD', 2020, tile=tile, mcdDir='Test', + 'MOD', 2020, tile=tile0, mcdDir='Test', + classifierName='rf', outDir=dummyDir, logger=logger) + + with self.assertRaises(FileNotFoundError): + BurnScarMap.generateAnnualBurnScarMap( + 'MOD', 2020, tile=tile1, mcdDir='Test', classifierName='rf', outDir=dummyDir, logger=logger)