code: def run(self):
          
  
          self.output('PanSharpened Image processing started for bands %s' % '-'.join(map(str, self.bands)),
                      normal=True, arrow=True)
  
          bands = self._read_bands()
          image_data = self._get_image_data()
  
          new_bands = self._generate_new_bands(image_data['shape'])
  
          bands[:3] = self._rescale(bands[:3])
          new_bands.append(numpy.empty(image_data['shape'], dtype=numpy.uint16))
  
          self._warp(image_data, bands, new_bands)
  
          # Bands are no longer needed
          del bands
  
          # Calculate pan band
          pan = self._pansize(new_bands)
          del self.bands[self.band8]
          del new_bands[self.band8]
  
          rasterio_options = {
              'driver': 'GTiff',
              'width': image_data['shape'][1],
              'height': image_data['shape'][0],
              'count': 3,
              'dtype': numpy.uint8,
              'nodata': 0,
              'transform': image_data['dst_transform'],
              'photometric': 'RGB',
              'crs': self.dst_crs
          }
  
          return self._write_to_file(new_bands, pan, **rasterio_options)
docs: Executes the pansharpen image processing.
          :returns:
              (String) the path to the processed image