Genreate a Band object given band metadata

        Args:
            band (dict): dictionary containing metadata for a given band

        Return:
            Band : the loaded Band onject

def GenerateBand(self, band, meta_only=False, cast=False):
        """Genreate a Band object given band metadata

        Args:
            band (dict): dictionary containing metadata for a given band

        Return:
            Band : the loaded Band onject"""

        # Read the band data and add it to dictionary
        if not meta_only:
            fname = band.get('file_name')
            data = self.ReadTif('%s/%s' % (os.path.dirname(self.filename), fname))
            # band['data'] = data # TODO: data is not a properties object so do not set yet

        def FixBitmap(d):
            p = d.get('bitmap_description')
            if p:
                lis = p.get('bit')
                bm = dict()
                # Fix bitmap_description from list of dicts to one dict
                for i in lis:
                    key = i['num']
                    value = i['text']
                    bm[key] = value
                del d['bitmap_description']
                d['bitmap_description'] = bm
            return d

        band = SetProperties(Band, FixBitmap(self.CleanDict(band)))
        if not meta_only:
            if cast:
                # cast as floats and fill bad values with nans
                data = data.astype(np.float32)
                data[data==band.fill_value] = -9999
                if band.valid_range is not None:
                    data[data<band.valid_range.min] = -9999
                    data[data>band.valid_range.max] = -9999
                data[data==-9999] = np.nan
            else:
                data = np.ma.masked_where(data==band.fill_value, data)
                if band.valid_range is not None:
                    data = np.ma.masked_where(data<band.valid_range.min, data)
                    data = np.ma.masked_where(data>band.valid_range.max, data)
            # Flip y axis if requested
            if self.yflip:
                data = np.flip(data, 0)
            band.data = data

        if not meta_only:
            band.validate()

        return band