/**
   * This method copies selected tie point grids to a downscaled target product
   *
   * @param sourceProduct - the source product
   * @param targetProduct - the target product
   * @param scalingFactor - factor of downscaling
   */
  public static void copyDownscaledTiePointGrids(
      Product sourceProduct, Product targetProduct, float scalingFactor) {
    // Add tie point grids for sun/view zenith/azimuths. Get data from AATSR bands.
    final Band szaBand =
        sourceProduct.getBand("sun_elev_nadir_" + SynergyConstants.INPUT_BANDS_SUFFIX_AATSR);
    final Band saaBand =
        sourceProduct.getBand("sun_azimuth_nadir_" + SynergyConstants.INPUT_BANDS_SUFFIX_AATSR);
    final Band latitudeBand =
        sourceProduct.getBand("latitude_" + SynergyConstants.INPUT_BANDS_SUFFIX_AATSR);
    final Band longitudeBand =
        sourceProduct.getBand("longitude_" + SynergyConstants.INPUT_BANDS_SUFFIX_AATSR);
    final Band altitudeBand =
        sourceProduct.getBand("altitude_" + SynergyConstants.INPUT_BANDS_SUFFIX_AATSR);

    final Band szaDownscaledBand = downscaleBand(szaBand, scalingFactor);
    final Band saaDownscaledBand = downscaleBand(saaBand, scalingFactor);
    final Band latitudeDownscaledBand = downscaleBand(latitudeBand, scalingFactor);
    final Band longitudeDownscaledBand = downscaleBand(longitudeBand, scalingFactor);
    final Band altitudeDownscaledBand = downscaleBand(altitudeBand, scalingFactor);

    addTpg(targetProduct, szaDownscaledBand, "sun_zenith");
    addTpg(targetProduct, saaDownscaledBand, "sun_azimuth");
    // unscaled latitude/longitude TPGs were added by 'copyGeoCoding', we have to remove them before
    // downscaling
    targetProduct.removeTiePointGrid(targetProduct.getTiePointGrid("latitude"));
    targetProduct.removeTiePointGrid(targetProduct.getTiePointGrid("longitude"));
    addTpg(targetProduct, latitudeDownscaledBand, "latitude");
    addTpg(targetProduct, longitudeDownscaledBand, "longitude");
    addTpg(targetProduct, altitudeDownscaledBand, "altitude");
  }