Skip to content

Commit a35d1e3

Browse files
committed
Idepix OLCI/SLSTR: (preliminary) finished after tests including cloud shadow and using OLCI O2a Harmonisation supporting SYN
1 parent a9022bb commit a35d1e3

File tree

5 files changed

+37
-49
lines changed

5 files changed

+37
-49
lines changed

idepix-olcislstr/src/main/java/org/esa/snap/idepix/olcislstr/OlciSlstrClassificationOp.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ public class OlciSlstrClassificationOp extends Operator {
5858

5959
private Band landWaterBand;
6060

61-
// public static final String OLCISLSTR_ALL_NET_NAME = "11x9x6x4x3x2_57.8.net";
6261
public static final String OLCISLSTR_ALL_NET_NAME = "11x10x4x3x2_207.9.net";
6362

6463
private static final double THRESH_LAND_MINBRIGHT1 = 0.3;
@@ -110,7 +109,7 @@ void createTargetProduct() throws OperatorException {
110109
ProductUtils.copyGeoCoding(sourceProduct, targetProduct);
111110
targetProduct.setStartTime(sourceProduct.getStartTime());
112111
targetProduct.setEndTime(sourceProduct.getEndTime());
113-
ProductUtils.copyMetadata(sourceProduct, targetProduct);
112+
// ProductUtils.copyMetadata(sourceProduct, targetProduct);
114113

115114
if (outputSchillerNNValue) {
116115
final Band nnValueBand = targetProduct.addBand(IdepixConstants.NN_OUTPUT_BAND_NAME, ProductData.TYPE_FLOAT32);

idepix-olcislstr/src/main/java/org/esa/snap/idepix/olcislstr/OlciSlstrCtpOp.java

Lines changed: 9 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
import org.esa.snap.core.datamodel.Band;
55
import org.esa.snap.core.datamodel.Product;
66
import org.esa.snap.core.datamodel.ProductData;
7-
import org.esa.snap.core.datamodel.TiePointGrid;
8-
import org.esa.snap.core.gpf.GPF;
7+
import org.esa.snap.core.datamodel.RasterDataNode;
98
import org.esa.snap.core.gpf.OperatorException;
109
import org.esa.snap.core.gpf.OperatorSpi;
1110
import org.esa.snap.core.gpf.Tile;
@@ -23,8 +22,6 @@
2322
import java.awt.*;
2423
import java.io.File;
2524
import java.io.IOException;
26-
import java.util.HashMap;
27-
import java.util.Map;
2825

2926
/**
3027
*
@@ -48,7 +45,6 @@ public class OlciSlstrCtpOp extends BasisOp {
4845

4946
@SourceProduct(alias = "o2CorrProduct",
5047
label = "OLCI O2 Correction product",
51-
optional = true,
5248
description = "OLCI O2 Correction product.")
5349
private Product o2CorrProduct;
5450

@@ -64,10 +60,10 @@ public class OlciSlstrCtpOp extends BasisOp {
6460

6561
static final String DEFAULT_TENSORFLOW_NN_DIR_NAME = "nn_training_20190131_I7x30x30x30x10x2xO1";
6662

67-
private TiePointGrid szaBand;
68-
private TiePointGrid ozaBand;
69-
private TiePointGrid saaBand;
70-
private TiePointGrid oaaBand;
63+
private RasterDataNode szaBand;
64+
private RasterDataNode ozaBand;
65+
private RasterDataNode saaBand;
66+
private RasterDataNode oaaBand;
7167

7268
private Band rad12Band;
7369
private Band solarFlux12Band;
@@ -116,12 +112,11 @@ public void dispose() {
116112
public void doExecute(ProgressMonitor pm) throws OperatorException {
117113
try {
118114
pm.beginTask("Executing CTP processing...", 0);
119-
preProcess();
120115

121-
szaBand = sourceProduct.getTiePointGrid("SZA");
122-
ozaBand = sourceProduct.getTiePointGrid("OZA");
123-
saaBand = sourceProduct.getTiePointGrid("SAA");
124-
oaaBand = sourceProduct.getTiePointGrid("OAA");
116+
szaBand = sourceProduct.getRasterDataNode("SZA");
117+
ozaBand = sourceProduct.getRasterDataNode("OZA");
118+
saaBand = sourceProduct.getRasterDataNode("SAA");
119+
oaaBand = sourceProduct.getRasterDataNode("OAA");
125120

126121
rad12Band = sourceProduct.getBand("Oa12_radiance");
127122
solarFlux12Band = sourceProduct.getBand("solar_flux_band_12");
@@ -197,25 +192,12 @@ public void computeTile(Band targetBand, Tile targetTile, ProgressMonitor pm) th
197192

198193
}
199194

200-
private void preProcess() {
201-
if (o2CorrProduct == null) {
202-
Map<String, Product> o2corrSourceProducts = new HashMap<>();
203-
Map<String, Object> o2corrParms = new HashMap<>();
204-
o2corrParms.put("processOnlyBand13", false);
205-
o2corrParms.put("writeHarmonisedRadiances", false);
206-
o2corrSourceProducts.put("l1bProduct", sourceProduct);
207-
final String o2CorrOpName = "OlciO2aHarmonisation";
208-
o2CorrProduct = GPF.createProduct(o2CorrOpName, o2corrParms, o2corrSourceProducts);
209-
}
210-
}
211-
212195
private Product createTargetProduct() {
213196
Product targetProduct = new Product(sourceProduct.getName(),
214197
sourceProduct.getProductType(),
215198
sourceProduct.getSceneRasterWidth(),
216199
sourceProduct.getSceneRasterHeight());
217200

218-
ProductUtils.copyMetadata(sourceProduct, targetProduct);
219201
ProductUtils.copyGeoCoding(sourceProduct, targetProduct);
220202
ProductUtils.copyFlagCodings(sourceProduct, targetProduct);
221203
ProductUtils.copyFlagBands(sourceProduct, targetProduct, true);

idepix-olcislstr/src/main/java/org/esa/snap/idepix/olcislstr/OlciSlstrOp.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public class OlciSlstrOp extends BasisOp {
9090

9191
private Product olciRad2reflProduct;
9292
private Product ctpProduct;
93+
private Product o2CorrProduct;
9394
private Product waterMaskProduct;
9495

9596
private Map<String, Product> classificationInputProducts;
@@ -136,7 +137,7 @@ private Product createTargetProduct(Product idepixProduct) {
136137
idepixProduct.getSceneRasterWidth(),
137138
idepixProduct.getSceneRasterHeight());
138139

139-
ProductUtils.copyMetadata(idepixProduct, targetProduct);
140+
// ProductUtils.copyMetadata(idepixProduct, targetProduct);
140141
ProductUtils.copyGeoCoding(idepixProduct, targetProduct);
141142
ProductUtils.copyFlagCodings(idepixProduct, targetProduct);
142143
ProductUtils.copyFlagBands(idepixProduct, targetProduct, true);
@@ -172,7 +173,15 @@ private void preProcess() {
172173
waterMaskProduct = GPF.createProduct("LandWaterMask", waterMaskParameters, sourceProduct);
173174

174175
if (computeCloudShadow) {
175-
ctpProduct = OlciSlstrUtils.computeCloudTopPressureProduct(sourceProduct);
176+
Map<String, Product> o2corrSourceProducts = new HashMap<>();
177+
o2corrSourceProducts.put("l1bProduct", sourceProduct);
178+
final String o2CorrOpName = "OlciO2aHarmonisation";
179+
Map<String, Object> o2corrParms = new HashMap<>();
180+
o2corrParms.put("writeHarmonisedRadiances", false);
181+
o2corrParms.put("processOnlyBand13", false);
182+
o2CorrProduct = GPF.createProduct(o2CorrOpName, o2corrParms, o2corrSourceProducts);
183+
184+
ctpProduct = OlciSlstrUtils.computeCloudTopPressureProduct(sourceProduct, o2CorrProduct);
176185
}
177186
}
178187

idepix-olcislstr/src/main/java/org/esa/snap/idepix/olcislstr/OlciSlstrPostProcessOp.java

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package org.esa.snap.idepix.olcislstr;
22

33
import com.bc.ceres.core.ProgressMonitor;
4-
import org.esa.snap.core.datamodel.Band;
5-
import org.esa.snap.core.datamodel.GeoCoding;
6-
import org.esa.snap.core.datamodel.Product;
7-
import org.esa.snap.core.datamodel.TiePointGrid;
4+
import org.esa.snap.core.datamodel.*;
85
import org.esa.snap.core.gpf.Operator;
96
import org.esa.snap.core.gpf.OperatorException;
107
import org.esa.snap.core.gpf.OperatorSpi;
@@ -59,12 +56,12 @@ public class OlciSlstrPostProcessOp extends Operator {
5956
private Band origCloudFlagBand;
6057

6158
private Band ctpBand;
62-
private TiePointGrid szaTPG;
63-
private TiePointGrid saaTPG;
64-
private TiePointGrid ozaTPG;
65-
private TiePointGrid oaaTPG;
66-
private TiePointGrid slpTPG;
67-
private TiePointGrid[] temperatureProfileTPGs;
59+
private RasterDataNode szaTPG;
60+
private RasterDataNode saaTPG;
61+
private RasterDataNode ozaTPG;
62+
private RasterDataNode oaaTPG;
63+
private RasterDataNode slpTPG;
64+
private RasterDataNode[] temperatureProfileTPGs;
6865
private Band altBand;
6966

7067
private GeoCoding geoCoding;
@@ -82,18 +79,18 @@ public void initialize() throws OperatorException {
8279

8380
origCloudFlagBand = olciSlstrCloudProduct.getBand(IdepixConstants.CLASSIF_BAND_NAME);
8481

85-
szaTPG = l1bProduct.getTiePointGrid("SZA");
86-
saaTPG = l1bProduct.getTiePointGrid("SAA");
87-
ozaTPG = l1bProduct.getTiePointGrid("OZA");
88-
oaaTPG = l1bProduct.getTiePointGrid("OAA");
89-
slpTPG = l1bProduct.getTiePointGrid("sea_level_pressure");
82+
szaTPG = l1bProduct.getRasterDataNode("SZA");
83+
saaTPG = l1bProduct.getRasterDataNode("SAA");
84+
ozaTPG = l1bProduct.getRasterDataNode("OZA");
85+
oaaTPG = l1bProduct.getRasterDataNode("OAA");
86+
slpTPG = l1bProduct.getRasterDataNode("sea_level_pressure");
9087

9188
altBand = l1bProduct.getBand(OlciSlstrConstants.OLCI_ALTITUDE_BAND_NAME);
9289

93-
temperatureProfileTPGs = new TiePointGrid[OlciSlstrConstants.referencePressureLevels.length];
90+
temperatureProfileTPGs = new RasterDataNode[OlciSlstrConstants.referencePressureLevels.length];
9491
for (int i = 0; i < OlciSlstrConstants.referencePressureLevels.length; i++) {
9592
temperatureProfileTPGs[i] =
96-
l1bProduct.getTiePointGrid("atmospheric_temperature_profile_pressure_level_" + (i + 1));
93+
l1bProduct.getRasterDataNode("atmospheric_temperature_profile_pressure_level_" + (i + 1));
9794
}
9895

9996

idepix-olcislstr/src/main/java/org/esa/snap/idepix/olcislstr/OlciSlstrUtils.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,10 @@ private static double getHeightFromCtp(double ctp, double p0, double ts) {
185185
}
186186

187187
// todo: RENOVATION: code duplication from OLCI module, move to core
188-
static Product computeCloudTopPressureProduct(Product sourceProduct) {
188+
static Product computeCloudTopPressureProduct(Product sourceProduct, Product o2CorrProduct) {
189189
Map<String, Product> ctpSourceProducts = new HashMap<>();
190190
ctpSourceProducts.put("sourceProduct", sourceProduct);
191+
ctpSourceProducts.put("o2CorrProduct", o2CorrProduct);
191192
Map<String, Object> params = new HashMap<>(2);
192193
params.put("outputCtp", false);
193194
return GPF.createProduct(OperatorSpi.getOperatorAlias(OlciSlstrCtpOp.class), params, ctpSourceProducts);

0 commit comments

Comments
 (0)