    protected void configureTargetProduct(ProductConfigurer productConfigurer) {
        productConfigurer.copyMetadata();
        productConfigurer.copyTimeCoding();
        productConfigurer.copyGeoCoding();
        productConfigurer.copyTiePointGrids();
        Product targetProduct = productConfigurer.getTargetProduct();
        targetProduct.setName(sourceProduct.getName());
        if (doRadToRefl) {
            targetProduct.setProductType(String.format("%s_REFL", sourceProduct.getProductType()));
            targetProduct.setAutoGrouping("reflec");
        } else {
            targetProduct.setProductType(sourceProduct.getProductType());
            targetProduct.setAutoGrouping("radiance");
        }
        targetProduct.setDescription("MERIS L1b Radiometric Correction");
        for (final Band sourceBand : sourceProduct.getBands()) {
            if (sourceBand.getSpectralBandIndex() != -1) {
                final String targetBandName;
                final String targetBandDescription;
                final int dataType;
                final String unit;
                final double scalingFactor;
                final double scalingOffset;
                if (doRadToRefl) {
                    targetBandName = sourceBand.getName().replace("radiance", "reflec");
                    targetBandDescription = "Radiometry-corrected TOA reflectance";
                    dataType = ProductData.TYPE_FLOAT32;
                    unit = UNIT_DL;
                    scalingFactor = 1.0;
                    scalingOffset = 0;
                } else {
                    targetBandName = sourceBand.getName();
                    targetBandDescription = "Radiometry-corrected TOA radiance";
                    dataType = sourceBand.getDataType();
                    unit = sourceBand.getUnit();
                    scalingFactor = sourceBand.getScalingFactor();
                    scalingOffset = sourceBand.getScalingOffset();
                }
                final Band targetBand = targetProduct.addBand(targetBandName, dataType);
                targetBand.setScalingFactor(scalingFactor);
                targetBand.setScalingOffset(scalingOffset);
                targetBand.setDescription(targetBandDescription);
                targetBand.setUnit(unit);
                targetBand.setValidPixelExpression(sourceBand.getValidPixelExpression());
                ProductUtils.copySpectralBandProperties(sourceBand, targetBand);
            }
        }
        productConfigurer.copyBands(MERIS_DETECTOR_INDEX_DS_NAME, MERIS_L1B_FLAGS_DS_NAME);
        for (final Band sourceBand : sourceProduct.getBands()) {
            if (sourceBand.getSpectralBandIndex() == -1 && !targetProduct.containsBand(sourceBand.getName())) {
                productConfigurer.copyBands(sourceBand.getName());
            }
        }
    }

    protected void configureTargetProduct(ProductConfigurer productConfigurer) {
        productConfigurer.copyMetadata();
        productConfigurer.copyTimeCoding();
        productConfigurer.copyTiePointGrids(); 
        productConfigurer.copyGeoCoding();
        Product targetProduct = productConfigurer.getTargetProduct();
        targetProduct.setName(sourceProduct.getName());
        if (doRadToRefl) {
            targetProduct.setProductType(String.format("%s_REFL", sourceProduct.getProductType()));
            targetProduct.setAutoGrouping("reflec");
        } else {
            targetProduct.setProductType(sourceProduct.getProductType());
            targetProduct.setAutoGrouping("radiance");
        }
        targetProduct.setDescription("MERIS L1b Radiometric Correction");
        for (final Band sourceBand : sourceProduct.getBands()) {
            if (sourceBand.getSpectralBandIndex() != -1) {
                final String targetBandName;
                final String targetBandDescription;
                final int dataType;
                final String unit;
                final double scalingFactor;
                final double scalingOffset;
                if (doRadToRefl) {
                    targetBandName = sourceBand.getName().replace("radiance", "reflec");
                    targetBandDescription = "Radiometry-corrected TOA reflectance";
                    dataType = ProductData.TYPE_FLOAT32;
                    unit = UNIT_DL;
                    scalingFactor = 1.0;
                    scalingOffset = 0;
                } else {
                    targetBandName = sourceBand.getName();
                    targetBandDescription = "Radiometry-corrected TOA radiance";
                    dataType = sourceBand.getDataType();
                    unit = sourceBand.getUnit();
                    scalingFactor = sourceBand.getScalingFactor();
                    scalingOffset = sourceBand.getScalingOffset();
                }
                final Band targetBand = targetProduct.addBand(targetBandName, dataType);
                targetBand.setScalingFactor(scalingFactor);
                targetBand.setScalingOffset(scalingOffset);
                targetBand.setDescription(targetBandDescription);
                targetBand.setUnit(unit);
                targetBand.setValidPixelExpression(sourceBand.getValidPixelExpression());
                ProductUtils.copySpectralBandProperties(sourceBand, targetBand);
            }
        }
        productConfigurer.copyBands(MERIS_DETECTOR_INDEX_DS_NAME, MERIS_L1B_FLAGS_DS_NAME);
        for (final Band sourceBand : sourceProduct.getBands()) {
            if (sourceBand.getSpectralBandIndex() == -1 && !targetProduct.containsBand(sourceBand.getName())) {
                productConfigurer.copyBands(sourceBand.getName());
            }
        }
    }
