Skip to content

Commit d0f2a5c

Browse files
committed
ERa section started
1 parent 72477fb commit d0f2a5c

File tree

7 files changed

+229
-26
lines changed

7 files changed

+229
-26
lines changed

core/src/main/java/com/bc/fiduceo/reader/insitu/sic_cci/ANTXXXISectionParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class ANTXXXISectionParser extends ReferenceSectionParser {
2020
List<Variable> getVariables() {
2121
final List<Variable> variables = new ArrayList<>();
2222

23-
createReferenceCommonVariables(variables);
23+
createCommonVariables(variables);
2424

2525
List<Attribute> attributes = new ArrayList<>();
2626
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(byte.class)));
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,49 @@
11
package com.bc.fiduceo.reader.insitu.sic_cci;
22

3+
import com.bc.fiduceo.util.NetCDFUtils;
4+
import com.bc.fiduceo.util.VariableProxy;
5+
import ucar.ma2.DataType;
6+
import ucar.nc2.Attribute;
37
import ucar.nc2.Variable;
48

59
import java.text.ParseException;
10+
import java.util.ArrayList;
611
import java.util.List;
712

13+
import static com.bc.fiduceo.util.NetCDFUtils.*;
14+
815
abstract class AbstractSectionParser {
916

1017
static final int[] SCALAR = new int[1];
1118

1219
abstract List<Variable> getVariables();
1320

1421
abstract Section parse(String[] tokens) throws ParseException;
22+
23+
static void createCommonVariables(List<Variable> variables) {
24+
createCommonVariables(variables, "");
25+
}
26+
27+
static void createCommonVariables(List<Variable> variables, String prefix) {
28+
List<Attribute> attributes = new ArrayList<>();
29+
attributes.add(new Attribute(CF_UNITS_NAME, "degree_east"));
30+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
31+
attributes.add(new Attribute(CF_STANDARD_NAME, "longitude"));
32+
variables.add(new VariableProxy(prefix + "longitude", DataType.FLOAT, attributes));
33+
34+
attributes = new ArrayList<>();
35+
attributes.add(new Attribute(CF_UNITS_NAME, "degree_north"));
36+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
37+
attributes.add(new Attribute(CF_STANDARD_NAME, "latitude"));
38+
variables.add(new VariableProxy(prefix + "latitude", DataType.FLOAT, attributes));
39+
40+
attributes = new ArrayList<>();
41+
attributes.add(new Attribute(CF_UNITS_NAME, "seconds since 1970-01-01"));
42+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(int.class)));
43+
attributes.add(new Attribute(CF_STANDARD_NAME, "time"));
44+
variables.add(new VariableProxy(prefix + "time", DataType.INT, attributes));
45+
46+
attributes = new ArrayList<>();
47+
variables.add(new VariableProxy(prefix + "reference-id", DataType.CHAR, attributes));
48+
}
1549
}

core/src/main/java/com/bc/fiduceo/reader/insitu/sic_cci/DMISIC0SectionParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class DMISIC0SectionParser extends ReferenceSectionParser {
1919
List<Variable> getVariables() {
2020
final List<Variable> variables = new ArrayList<>();
2121

22-
createReferenceCommonVariables(variables);
22+
createCommonVariables(variables);
2323

2424
final List<Attribute> attributes = new ArrayList<>();
2525
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));

core/src/main/java/com/bc/fiduceo/reader/insitu/sic_cci/DTUSIC1SectionParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class DTUSIC1SectionParser extends ReferenceSectionParser {
2020
List<Variable> getVariables() {
2121
final List<Variable> variables = new ArrayList<>();
2222

23-
createReferenceCommonVariables(variables);
23+
createCommonVariables(variables);
2424

2525
List<Attribute> attributes = new ArrayList<>();
2626
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.bc.fiduceo.reader.insitu.sic_cci;
2+
3+
import com.bc.fiduceo.util.NetCDFUtils;
4+
import com.bc.fiduceo.util.VariableProxy;
5+
import ucar.ma2.DataType;
6+
import ucar.nc2.Attribute;
7+
import ucar.nc2.Variable;
8+
9+
import java.text.ParseException;
10+
import java.util.ArrayList;
11+
import java.util.List;
12+
13+
import static com.bc.fiduceo.util.NetCDFUtils.*;
14+
15+
class ERASectionParser extends AbstractSectionParser {
16+
17+
final private String type;
18+
19+
public ERASectionParser(String type) {
20+
this.type = type;
21+
}
22+
23+
@Override
24+
List<Variable> getVariables() {
25+
final List<Variable> variables = new ArrayList<>();
26+
final String prefix = type + "_";
27+
28+
createCommonVariables(variables, prefix);
29+
30+
ArrayList<Attribute> attributes = new ArrayList<>();
31+
variables.add(new VariableProxy(prefix + "upstreamfile", DataType.CHAR, attributes));
32+
33+
attributes = new ArrayList<>();
34+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
35+
attributes.add(new Attribute(CF_STANDARD_NAME, "air_pressure_at_mean_sea_level"));
36+
attributes.add(new Attribute(CF_UNITS_NAME, "Pa"));
37+
variables.add(new VariableProxy(prefix + "msl", DataType.FLOAT, attributes));
38+
39+
attributes = new ArrayList<>();
40+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
41+
attributes.add(new Attribute(CF_LONG_NAME, "10 metre u-wind component"));
42+
attributes.add(new Attribute(CF_UNITS_NAME, "m s-1"));
43+
variables.add(new VariableProxy(prefix + "u10", DataType.FLOAT, attributes));
44+
45+
attributes = new ArrayList<>();
46+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
47+
attributes.add(new Attribute(CF_LONG_NAME, "10 metre v-wind component"));
48+
attributes.add(new Attribute(CF_UNITS_NAME, "m s-1"));
49+
variables.add(new VariableProxy(prefix + "v10", DataType.FLOAT, attributes));
50+
51+
attributes = new ArrayList<>();
52+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
53+
attributes.add(new Attribute(CF_STANDARD_NAME, "wind_speed"));
54+
attributes.add(new Attribute(CF_UNITS_NAME, "m s-1"));
55+
variables.add(new VariableProxy(prefix + "ws", DataType.FLOAT, attributes));
56+
57+
attributes = new ArrayList<>();
58+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
59+
attributes.add(new Attribute(CF_LONG_NAME, "2 m air temperature"));
60+
attributes.add(new Attribute(CF_UNITS_NAME, "K"));
61+
variables.add(new VariableProxy(prefix + "t2m", DataType.FLOAT, attributes));
62+
63+
attributes = new ArrayList<>();
64+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
65+
attributes.add(new Attribute(CF_LONG_NAME, "Skin temperature"));
66+
attributes.add(new Attribute(CF_UNITS_NAME, "K"));
67+
variables.add(new VariableProxy(prefix + "skt", DataType.FLOAT, attributes));
68+
69+
attributes = new ArrayList<>();
70+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
71+
attributes.add(new Attribute(CF_LONG_NAME, "Ice temperature layer 1"));
72+
attributes.add(new Attribute(CF_UNITS_NAME, "K"));
73+
variables.add(new VariableProxy(prefix + "istl1", DataType.FLOAT, attributes));
74+
75+
attributes = new ArrayList<>();
76+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
77+
attributes.add(new Attribute(CF_LONG_NAME, "Ice temperature layer 2"));
78+
attributes.add(new Attribute(CF_UNITS_NAME, "K"));
79+
variables.add(new VariableProxy(prefix + "istl2", DataType.FLOAT, attributes));
80+
81+
attributes = new ArrayList<>();
82+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
83+
attributes.add(new Attribute(CF_LONG_NAME, "Ice temperature layer 3"));
84+
attributes.add(new Attribute(CF_UNITS_NAME, "K"));
85+
variables.add(new VariableProxy(prefix + "istl3", DataType.FLOAT, attributes));
86+
87+
attributes = new ArrayList<>();
88+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
89+
attributes.add(new Attribute(CF_LONG_NAME, "Ice temperature layer 4"));
90+
attributes.add(new Attribute(CF_UNITS_NAME, "K"));
91+
variables.add(new VariableProxy(prefix + "istl4", DataType.FLOAT, attributes));
92+
93+
attributes = new ArrayList<>();
94+
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
95+
attributes.add(new Attribute(CF_STANDARD_NAME, "sea_surface_temperature"));
96+
attributes.add(new Attribute(CF_UNITS_NAME, "K"));
97+
variables.add(new VariableProxy(prefix + "sst", DataType.FLOAT, attributes));
98+
99+
return variables;
100+
}
101+
102+
@Override
103+
Section parse(String[] tokens) throws ParseException {
104+
throw new RuntimeException("not implemented");
105+
}
106+
}

core/src/main/java/com/bc/fiduceo/reader/insitu/sic_cci/ReferenceSectionParser.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,4 @@ Date parseTime(String line) throws ParseException {
2828
final ProductData.UTC utcTime = ProductData.UTC.parse(timeString, DATE_PATTERN);
2929
return utcTime.getAsDate();
3030
}
31-
32-
static void createReferenceCommonVariables(List<Variable> variables) {
33-
List<Attribute> attributes = new ArrayList<>();
34-
attributes.add(new Attribute(CF_UNITS_NAME, "degree_east"));
35-
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
36-
attributes.add(new Attribute(CF_STANDARD_NAME, "longitude"));
37-
variables.add(new VariableProxy("longitude", DataType.FLOAT, attributes));
38-
39-
attributes = new ArrayList<>();
40-
attributes.add(new Attribute(CF_UNITS_NAME, "degree_north"));
41-
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(float.class)));
42-
attributes.add(new Attribute(CF_STANDARD_NAME, "latitude"));
43-
variables.add(new VariableProxy("latitude", DataType.FLOAT, attributes));
44-
45-
attributes = new ArrayList<>();
46-
attributes.add(new Attribute(CF_UNITS_NAME, "seconds since 1970-01-01"));
47-
attributes.add(new Attribute(CF_FILL_VALUE_NAME, NetCDFUtils.getDefaultFillValue(int.class)));
48-
attributes.add(new Attribute(CF_STANDARD_NAME, "time"));
49-
variables.add(new VariableProxy("time", DataType.INT, attributes));
50-
51-
attributes = new ArrayList<>();
52-
variables.add(new VariableProxy("reference-id", DataType.CHAR, attributes));
53-
}
5431
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package com.bc.fiduceo.reader.insitu.sic_cci;
2+
3+
import org.junit.Test;
4+
import ucar.ma2.DataType;
5+
import ucar.nc2.Variable;
6+
7+
import java.util.List;
8+
9+
import static org.junit.Assert.assertEquals;
10+
11+
public class ERASectionParserTest {
12+
13+
@Test
14+
public void testGetVariables_ERA() {
15+
final ERASectionParser parser = new ERASectionParser("ERA");
16+
final List<Variable> variables = parser.getVariables();
17+
18+
// @todo 1 tb/tb reactivate 2022-11-09
19+
//assertEquals(4, variables.size());
20+
21+
Variable variable = variables.get(0);
22+
assertEquals("ERA_longitude", variable.getShortName());
23+
assertEquals(DataType.FLOAT, variable.getDataType());
24+
25+
variable = variables.get(4);
26+
assertEquals("ERA_upstreamfile", variable.getShortName());
27+
assertEquals(DataType.CHAR, variable.getDataType());
28+
29+
variable = variables.get(6);
30+
assertEquals("ERA_u10", variable.getShortName());
31+
assertEquals(DataType.FLOAT, variable.getDataType());
32+
33+
variable = variables.get(8);
34+
assertEquals("ERA_ws", variable.getShortName());
35+
assertEquals(DataType.FLOAT, variable.getDataType());
36+
37+
variable = variables.get(10);
38+
assertEquals("ERA_skt", variable.getShortName());
39+
assertEquals(DataType.FLOAT, variable.getDataType());
40+
41+
variable = variables.get(12);
42+
assertEquals("ERA_istl2", variable.getShortName());
43+
assertEquals(DataType.FLOAT, variable.getDataType());
44+
45+
variable = variables.get(14);
46+
assertEquals("ERA_istl4", variable.getShortName());
47+
assertEquals(DataType.FLOAT, variable.getDataType());
48+
}
49+
50+
@Test
51+
public void testGetVariables_ERA5() {
52+
final ERASectionParser parser = new ERASectionParser("ERA5");
53+
final List<Variable> variables = parser.getVariables();
54+
55+
// @todo 1 tb/tb reactivate 2022-11-09
56+
//assertEquals(4, variables.size());
57+
58+
Variable variable = variables.get(1);
59+
assertEquals("ERA5_latitude", variable.getShortName());
60+
assertEquals(DataType.FLOAT, variable.getDataType());
61+
62+
variable = variables.get(5);
63+
assertEquals("ERA5_msl", variable.getShortName());
64+
assertEquals(DataType.FLOAT, variable.getDataType());
65+
66+
variable = variables.get(7);
67+
assertEquals("ERA5_v10", variable.getShortName());
68+
assertEquals(DataType.FLOAT, variable.getDataType());
69+
70+
variable = variables.get(9);
71+
assertEquals("ERA5_t2m", variable.getShortName());
72+
assertEquals(DataType.FLOAT, variable.getDataType());
73+
74+
variable = variables.get(11);
75+
assertEquals("ERA5_istl1", variable.getShortName());
76+
assertEquals(DataType.FLOAT, variable.getDataType());
77+
78+
variable = variables.get(13);
79+
assertEquals("ERA5_istl3", variable.getShortName());
80+
assertEquals(DataType.FLOAT, variable.getDataType());
81+
82+
variable = variables.get(15);
83+
assertEquals("ERA5_sst", variable.getShortName());
84+
assertEquals(DataType.FLOAT, variable.getDataType());
85+
}
86+
}

0 commit comments

Comments
 (0)