Skip to content

Commit 9718b36

Browse files
committed
added option to change matchup dimension name, cleanup
1 parent 35fd327 commit 9718b36

22 files changed

+211
-151
lines changed

CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* added support for Windsat Coriolis data
33
* added conda environment
44
* extended workflow to run without scheduler on plain console
5+
* Added option to use different name for matchup dimension in post processing
56

67
### Updates from version 1.5.6 to 1.5.7
78
* added support for SMOS L1C daily aggregated products

post-processing-tool/src/main/java/com/bc/fiduceo/post/PostProcessing.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,15 @@
1818
*/
1919
package com.bc.fiduceo.post;
2020

21+
import com.bc.fiduceo.FiduceoConstants;
2122
import com.bc.fiduceo.archive.Archive;
2223
import com.bc.fiduceo.archive.ArchiveConfig;
2324
import com.bc.fiduceo.core.SystemConfig;
2425
import com.bc.fiduceo.log.FiduceoLogger;
2526
import com.bc.fiduceo.reader.ReaderCache;
2627
import com.bc.fiduceo.reader.ReaderFactory;
2728
import com.bc.fiduceo.util.NetCDFUtils;
29+
import org.esa.snap.core.util.StringUtils;
2830
import ucar.ma2.InvalidRangeException;
2931
import ucar.nc2.NetcdfFile;
3032
import ucar.nc2.NetcdfFileWriter;
@@ -123,4 +125,13 @@ protected static String getSourceFileName(Variable fileNameVar, int position, in
123125
}
124126
return sourceFileName;
125127
}
128+
129+
protected String getMatchupDimensionName() {
130+
String matchupDimensionName = context.getProcessingConfig().getMatchupDimensionName();
131+
if (StringUtils.isNullOrEmpty(matchupDimensionName)) {
132+
matchupDimensionName = FiduceoConstants.MATCHUP_COUNT;
133+
}
134+
135+
return matchupDimensionName;
136+
}
126137
}

post-processing-tool/src/main/java/com/bc/fiduceo/post/PostProcessingContext.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,32 +18,28 @@
1818
*/
1919
package com.bc.fiduceo.post;
2020

21-
import com.bc.fiduceo.core.SystemConfig;
2221
import com.bc.fiduceo.tool.ToolContext;
23-
import com.bc.fiduceo.util.TempFileUtils;
2422

2523
import java.nio.file.Path;
26-
import java.util.Date;
2724

2825
public final class PostProcessingContext extends ToolContext {
2926

3027
private PostProcessingConfig processingConfig;
3128
private Path mmdInputDirectory;
3229

30+
public PostProcessingConfig getProcessingConfig() {
31+
return processingConfig;
32+
}
3333

3434
public void setProcessingConfig(PostProcessingConfig processingConfig) {
3535
this.processingConfig = processingConfig;
3636
}
3737

38-
public PostProcessingConfig getProcessingConfig() {
39-
return processingConfig;
38+
public Path getMmdInputDirectory() {
39+
return mmdInputDirectory;
4040
}
4141

4242
public void setMmdInputDirectory(Path mmdInputDirectory) {
4343
this.mmdInputDirectory = mmdInputDirectory;
4444
}
45-
46-
public Path getMmdInputDirectory() {
47-
return mmdInputDirectory;
48-
}
4945
}

post-processing-tool/src/main/java/com/bc/fiduceo/post/plugin/airs/AddAirsSpectrum.java

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,20 +27,12 @@
2727
import ucar.ma2.DataType;
2828
import ucar.ma2.IndexIterator;
2929
import ucar.ma2.InvalidRangeException;
30-
import ucar.nc2.Attribute;
31-
import ucar.nc2.Dimension;
32-
import ucar.nc2.NetcdfFile;
33-
import ucar.nc2.NetcdfFileWriter;
34-
import ucar.nc2.Variable;
30+
import ucar.nc2.*;
3531
import ucar.nc2.constants.CDM;
3632

3733
import java.io.IOException;
3834
import java.nio.file.Paths;
39-
import java.util.ArrayList;
40-
import java.util.Arrays;
41-
import java.util.HashMap;
42-
import java.util.List;
43-
import java.util.Map;
35+
import java.util.*;
4436

4537
import static com.bc.fiduceo.reader.airs.AIRS_Constants.AIRS_NUM_CHANELS;
4638

@@ -54,8 +46,8 @@ public class AddAirsSpectrum extends PostProcessing {
5446
private final String targetRadiancesVariableName;
5547
private final String targetCalFlagVariableName;
5648
private final String targetSpaceViewDeltaVariableName;
57-
private Dimension[] cutOutDims;
5849
private final Map<String, Variable> variablesMap;
50+
private Dimension[] cutOutDims;
5951

6052
AddAirsSpectrum(String srcVariableName_fileName, String srcVariableName_processingVersion,
6153
String srcVariableName_x, String srcVariableName_y, String srcVariableName_cutOutReference,
@@ -73,6 +65,15 @@ public class AddAirsSpectrum extends PostProcessing {
7365
variablesMap = new HashMap<>();
7466
}
7567

68+
// @todo 2 tb/se write the test 2019-01-30
69+
// package access for testing only se 2018-08-31
70+
static List<ucar.nc2.Dimension> addSpectrumDimension(NetcdfFileWriter writer, Dimension[] cutOutDimensions) {
71+
final List<Dimension> targetDimensions = new ArrayList<>(Arrays.asList(cutOutDimensions));
72+
final ucar.nc2.Dimension airsChannel = writer.addDimension(null, "airs_channel", AIRS_NUM_CHANELS);
73+
targetDimensions.add(airsChannel);
74+
return targetDimensions;
75+
}
76+
7677
@Override
7778
protected void prepare(NetcdfFile reader, NetcdfFileWriter writer) {
7879
cutOutDims = get2dCutOutDimensions(reader);
@@ -93,7 +94,8 @@ protected void compute(NetcdfFile reader, NetcdfFileWriter writer) throws IOExce
9394
final Array xArray = xVariable.read();
9495
final Array yArray = yVariable.read();
9596

96-
final int matchup_count = NetCDFUtils.getDimensionLength(FiduceoConstants.MATCHUP_COUNT, reader);
97+
final String matchupDimensionName = getMatchupDimensionName();
98+
final int matchup_count = NetCDFUtils.getDimensionLength(matchupDimensionName, reader);
9799
final int fileNameSize = NetCDFUtils.getDimensionLength(FiduceoConstants.FILE_NAME, reader);
98100
final int processingVersionSize = NetCDFUtils.getDimensionLength(FiduceoConstants.PROCESSING_VERSION, reader);
99101
for (int i = 0; i < matchup_count; i++) {
@@ -192,15 +194,6 @@ protected void initReaderCache() {
192194
readerCache = createReaderCache(getContext());
193195
}
194196

195-
// @todo 2 tb/se write the test 2019-01-30
196-
// package access for testing only se 2018-08-31
197-
static List<ucar.nc2.Dimension> addSpectrumDimension(NetcdfFileWriter writer, Dimension[] cutOutDimensions) {
198-
final List<Dimension> targetDimensions = new ArrayList<>(Arrays.asList(cutOutDimensions));
199-
final ucar.nc2.Dimension airsChannel = writer.addDimension(null, "airs_channel", AIRS_NUM_CHANELS);
200-
targetDimensions.add(airsChannel);
201-
return targetDimensions;
202-
}
203-
204197
// @todo 2 tb/se write the test 2019-01-30
205198
// package access for testing only se 2018-08-31
206199
void addSpectrumVariables(NetcdfFileWriter writer, List<Dimension> targetDimensions) {

post-processing-tool/src/main/java/com/bc/fiduceo/post/plugin/amsr/AddAmsr2ScanDataQuality.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,7 @@
88
import ucar.ma2.ArrayByte;
99
import ucar.ma2.DataType;
1010
import ucar.ma2.InvalidRangeException;
11-
import ucar.nc2.Attribute;
12-
import ucar.nc2.Dimension;
13-
import ucar.nc2.NetcdfFile;
14-
import ucar.nc2.NetcdfFileWriter;
15-
import ucar.nc2.Variable;
11+
import ucar.nc2.*;
1612

1713
import java.io.IOException;
1814
import java.nio.file.Paths;
@@ -29,7 +25,8 @@ void configure(Configuration configuration) {
2925

3026
@Override
3127
protected void prepare(NetcdfFile reader, NetcdfFileWriter writer) {
32-
final Dimension matchupDimension = reader.findDimension(FiduceoConstants.MATCHUP_COUNT);
28+
final String matchupDimensionName = getMatchupDimensionName();
29+
final Dimension matchupDimension = reader.findDimension(matchupDimensionName);
3330

3431
final Dimension scanDataQualityDimension = writer.addDimension(null, "scan_data_quality", 512);
3532
final List<Dimension> dimensions = new ArrayList<>();
@@ -47,7 +44,8 @@ protected void compute(NetcdfFile reader, NetcdfFileWriter writer) throws IOExce
4744
final Variable yVariable = NetCDFUtils.getVariable(reader, configuration.yCoordinateVariableName);
4845
final Array yArray = yVariable.read();
4946

50-
final int matchup_count = NetCDFUtils.getDimensionLength(FiduceoConstants.MATCHUP_COUNT, reader);
47+
final String matchupDimensionName = getMatchupDimensionName();
48+
final int matchup_count = NetCDFUtils.getDimensionLength(matchupDimensionName, reader);
5149
final int fileNameSize = NetCDFUtils.getDimensionLength(FiduceoConstants.FILE_NAME, reader);
5250
final int processingVersionSize = NetCDFUtils.getDimensionLength(FiduceoConstants.PROCESSING_VERSION, reader);
5351
final Variable targetVariable = NetCDFUtils.getVariable(writer, configuration.targetVariableName);

post-processing-tool/src/main/java/com/bc/fiduceo/post/plugin/avhrr_fcdr/AddAvhrrCorrCoeffs.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.util.List;
2323

2424
import static com.bc.fiduceo.FiduceoConstants.FILE_NAME;
25-
import static com.bc.fiduceo.FiduceoConstants.MATCHUP_COUNT;
2625

2726
class AddAvhrrCorrCoeffs extends PostProcessing {
2827

@@ -170,7 +169,8 @@ protected void compute(NetcdfFile reader, NetcdfFileWriter writer) throws IOExce
170169
}
171170

172171
private ArrayList<FileDescription> extractUniqueInputFileNames(NetcdfFile reader, int filenameSize) throws IOException, InvalidRangeException {
173-
final int matchupCount = NetCDFUtils.getDimensionLength(MATCHUP_COUNT, reader);
172+
final String matchupDimensionName = getMatchupDimensionName();
173+
final int matchupCount = NetCDFUtils.getDimensionLength(matchupDimensionName, reader);
174174
final Variable filenameVariable = NetCDFUtils.getVariable(reader, configuration.fileNameVariableName);
175175
final Variable versionVariable = NetCDFUtils.getVariable(reader, configuration.versionVariableName);
176176
final ArrayList<FileDescription> fileList = new ArrayList<>();

post-processing-tool/src/main/java/com/bc/fiduceo/post/plugin/caliop/sst_wp100/CALIOP_SST_WP100_CLay_PP.java

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,30 +110,25 @@ protected void compute(NetcdfFile reader, NetcdfFileWriter writer) throws IOExce
110110
final Variable targetVarX = NetCDFUtils.getVariable(writer, targetVarNameX);
111111
final Variable targetVarY = NetCDFUtils.getVariable(writer, targetVarNameY);
112112

113-
final String sensorName = CALIOP_SST_WP100_CLay_ReaderPlugin.SENSOR_NAME;
114-
final int mcSize = NetCDFUtils.getDimensionLength(FiduceoConstants.MATCHUP_COUNT, reader);
113+
final String matchupDimensionName = getMatchupDimensionName();
114+
final int mcSize = NetCDFUtils.getDimensionLength(matchupDimensionName, reader);
115115

116116
final Interval interval_1 = new Interval(1, ny);
117117
final Interval interval_10 = new Interval(10, ny);
118118

119+
final String sensorName = CALIOP_SST_WP100_CLay_ReaderPlugin.SENSOR_NAME;
119120
for (int mu = 0; mu < mcSize; mu++) {
120121
final int[] writeOrigin = {mu, 0, 0};
121122
final int y = yArr[mu];
122123
String sourceFileName = getSourceFileName(mu);
123124
sourceFileName = toCLaySourceFileName(sourceFileName);
124125
final Reader caliopReader = readerCache.getReaderFor(sensorName, Paths.get(sourceFileName), processingVersion);
125126
final List<Variable> variables = caliopReader.getVariables();
126-
int c = 0;
127+
127128
for (Variable variable : variables) {
128129
final String shortName = variable.getShortName();
129130
final int shape1 = variable.getShape(1);
130131
final Variable targetVar = variableMap.get(shortName);
131-
if (mu == 0) {
132-
System.out.println(++c);
133-
System.out.println("CAL ... shortName = " + shortName);
134-
System.out.println(" targetName = " + targetVar.getShortName());
135-
System.out.println(" shape1 = " + shape1);
136-
}
137132
final Interval interval;
138133
final int centerX;
139134
if (shape1 == 1) {

post-processing-tool/src/main/java/com/bc/fiduceo/post/plugin/era5/Era5PostProcessing.java

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.bc.fiduceo.post.plugin.era5;
22

3-
import com.bc.fiduceo.FiduceoConstants;
43
import com.bc.fiduceo.post.PostProcessing;
54
import org.esa.snap.core.util.StringUtils;
65
import ucar.ma2.Array;
@@ -146,29 +145,6 @@ static boolean isValidLat(float lat) {
146145
return lat >= -90.f && lat <= 90.f;
147146
}
148147

149-
@Override
150-
protected void prepare(NetcdfFile reader, NetcdfFileWriter writer) {
151-
final Dimension matchupCountDimension = reader.findDimension(FiduceoConstants.MATCHUP_COUNT);
152-
if (matchupCountDimension == null) {
153-
throw new RuntimeException("Expected dimension not present in file: " + FiduceoConstants.MATCHUP_COUNT);
154-
}
155-
156-
final Era5Collection collection = getEra5Collection(configuration);
157-
writer.addGlobalAttribute("era5-collection", collection.toString());
158-
159-
final SatelliteFieldsConfiguration satFieldsConfig = configuration.getSatelliteFields();
160-
if (satFieldsConfig != null) {
161-
satelliteFields = new SatelliteFields();
162-
satelliteFields.prepare(satFieldsConfig, reader, writer, collection);
163-
}
164-
165-
final MatchupFieldsConfiguration matchupFieldsConfig = configuration.getMatchupFields();
166-
if (matchupFieldsConfig != null) {
167-
matchupFields = new MatchupFields();
168-
matchupFields.prepare(matchupFieldsConfig, reader, writer, collection);
169-
}
170-
}
171-
172148
// package access for testing only tb 2021-01-12
173149
static Era5Collection getEra5Collection(Configuration configuration) {
174150
String collection = configuration.getEra5Collection();
@@ -189,6 +165,32 @@ static Era5Collection getEra5Collection(Configuration configuration) {
189165
throw new IllegalArgumentException("Unable to detect ERA5 collection from datapath. Please configure explicitly.");
190166
}
191167

168+
@Override
169+
protected void prepare(NetcdfFile reader, NetcdfFileWriter writer) {
170+
final String matchupDimensionName = getMatchupDimensionName();
171+
final Dimension matchupCountDimension = reader.findDimension(matchupDimensionName);
172+
if (matchupCountDimension == null) {
173+
throw new RuntimeException("Expected dimension not present in file: " + matchupDimensionName);
174+
}
175+
176+
final Era5Collection collection = getEra5Collection(configuration);
177+
writer.addGlobalAttribute("era5-collection", collection.toString());
178+
179+
final SatelliteFieldsConfiguration satFieldsConfig = configuration.getSatelliteFields();
180+
if (satFieldsConfig != null) {
181+
satFieldsConfig.setMatchupDimensionName(getMatchupDimensionName());
182+
satelliteFields = new SatelliteFields();
183+
satelliteFields.prepare(satFieldsConfig, reader, writer, collection);
184+
}
185+
186+
final MatchupFieldsConfiguration matchupFieldsConfig = configuration.getMatchupFields();
187+
if (matchupFieldsConfig != null) {
188+
matchupFieldsConfig.setMatchupDimensionName(getMatchupDimensionName());
189+
matchupFields = new MatchupFields();
190+
matchupFields.prepare(matchupFieldsConfig, reader, writer, collection);
191+
}
192+
}
193+
192194
@Override
193195
protected void compute(NetcdfFile reader, NetcdfFileWriter writer) throws IOException, InvalidRangeException {
194196
if (satelliteFields != null) {

post-processing-tool/src/main/java/com/bc/fiduceo/post/plugin/era5/FieldsConfiguration.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@
44

55
class FieldsConfiguration {
66

7+
private String matchupDimensionName;
8+
9+
String getMatchupDimensionName() {
10+
return matchupDimensionName;
11+
}
12+
13+
void setMatchupDimensionName(String matchupDimensionName) {
14+
this.matchupDimensionName = matchupDimensionName;
15+
}
16+
717
protected String expand(String variableName, String key, String replacement) {
818
if (StringUtils.isNullOrEmpty(replacement)) {
919
return variableName;

post-processing-tool/src/main/java/com/bc/fiduceo/post/plugin/era5/MatchupFields.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ void compute(Configuration config, NetcdfFile reader, NetcdfFileWriter writer) t
9595
// for all nwp variables
9696
// - get variable
9797
// - get data array
98-
final int numMatches = NetCDFUtils.getDimensionLength(FiduceoConstants.MATCHUP_COUNT, reader);
98+
final int numMatches = NetCDFUtils.getDimensionLength(matchupConfig.getMatchupDimensionName(), reader);
9999
final int[] nwpShape = new int[]{1, 1, 1};
100100
final int[] nwpOffset = new int[]{0, 0, 0};
101101
final Index timeIndex = targetTimeArray.getIndex();
@@ -180,7 +180,7 @@ private void addTimeVariable(MatchupFieldsConfiguration matchupFieldsConfig, Lis
180180
List<Dimension> getDimensions(MatchupFieldsConfiguration matchupFieldsConfig, NetcdfFileWriter writer, NetcdfFile reader) {
181181
final ArrayList<Dimension> dimensions = new ArrayList<>();
182182

183-
final Dimension matchupDim = reader.findDimension(FiduceoConstants.MATCHUP_COUNT);
183+
final Dimension matchupDim = reader.findDimension(matchupFieldsConfig.getMatchupDimensionName());
184184
dimensions.add(matchupDim);
185185

186186
final int time_steps_past = matchupFieldsConfig.get_time_steps_past();

0 commit comments

Comments
 (0)