Skip to content

Commit 15dbc39

Browse files
committed
finished pre-processing
1 parent 56a7052 commit 15dbc39

File tree

14 files changed

+298
-27
lines changed

14 files changed

+298
-27
lines changed

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/AirtProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ class AirtProvider {
1515
void open(File airtFile) {
1616
airtMap = new HashMap<>();
1717

18+
if (airtFile == null) {
19+
return;
20+
}
21+
1822
try (final FileReader fileReader = new FileReader(airtFile)) {
1923
final BufferedReader bufferedReader = new BufferedReader(fileReader);
2024
String line;

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/BAROProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ class BAROProvider {
1313
void open(File baroFile) {
1414
baroMap = new HashMap<>();
1515

16+
if (baroFile == null) {
17+
return;
18+
}
19+
1620
try (final FileReader fileReader = new FileReader(baroFile)) {
1721
final BufferedReader bufferedReader = new BufferedReader(fileReader);
1822
String line;

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/Configuration.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@ class Configuration {
1010
String rhFileName;
1111
String windFileName;
1212
String baroFileName;
13+
String rainFileName;
14+
String posFileName;
15+
float nominalLon;
16+
float nominalLat;
1317
}

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/POSProvider.java

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,18 @@
1010
class POSProvider {
1111

1212
private POSRecord[] posArray;
13+
private float nominalLon;
14+
private float nominalLat;
15+
16+
void open(File posFile, float nominalLon, float nominalLat) {
17+
this.nominalLon = nominalLon;
18+
this.nominalLat = nominalLat;
19+
20+
if (posFile == null) {
21+
posArray = new POSRecord[0];
22+
return;
23+
}
1324

14-
void open(File posFile) {
1525
final ArrayList<POSRecord> posRecords = new ArrayList<>();
1626

1727
try (final FileReader fileReader = new FileReader(posFile)) {
@@ -39,7 +49,36 @@ void open(File posFile) {
3949
}
4050

4151
POSRecord get(int date) {
42-
return null;
43-
// todo 1 tb/tb continue here
52+
for (int i = 0; i < posArray.length; i++) {
53+
if (posArray[i].date < date) {
54+
continue;
55+
}
56+
57+
if (posArray[i].date == date) {
58+
return posArray[i];
59+
}
60+
61+
if (i > 0) {
62+
return interpolate(posArray[i - 1], posArray[i], date);
63+
} else {
64+
return posArray[0];
65+
}
66+
}
67+
68+
final POSRecord posRecord = new POSRecord();
69+
posRecord.lon = nominalLon;
70+
posRecord.lat = nominalLat;
71+
return posRecord;
72+
}
73+
74+
static POSRecord interpolate(POSRecord before, POSRecord after, int date) {
75+
final POSRecord posRecord = new POSRecord();
76+
posRecord.date = date;
77+
78+
final float factor = (float) (date - before.date) / (float) (after.date - before.date);
79+
80+
posRecord.lon = before.lon + factor * (after.lon - before.lon);
81+
posRecord.lat = before.lat + factor * (after.lat - before.lat);
82+
return posRecord;
4483
}
4584
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.bc.fiduceo.reader.insitu.tao.preproc;
2+
3+
import java.io.BufferedReader;
4+
import java.io.File;
5+
import java.io.FileReader;
6+
import java.io.IOException;
7+
import java.util.HashMap;
8+
9+
class RAINProvider {
10+
11+
private HashMap<Integer, RAINRecord> rainMap;
12+
13+
void open(File rainFile) {
14+
rainMap = new HashMap<>();
15+
16+
if (rainFile == null){
17+
return;
18+
}
19+
20+
try (final FileReader fileReader = new FileReader(rainFile)) {
21+
final BufferedReader bufferedReader = new BufferedReader(fileReader);
22+
String line;
23+
while ((line = bufferedReader.readLine()) != null) {
24+
if (!Character.isDigit(line.charAt(0))) {
25+
continue;
26+
}
27+
28+
final RAINRecord rainRecord = new RAINRecord();
29+
final String[] tokens = TaoPreProcessor.tokenize(line);
30+
rainRecord.date = TaoPreProcessor.toUnixEpoch(tokens[0], tokens[1]);
31+
rainRecord.RAIN = tokens[2];
32+
rainRecord.Q = tokens[3];
33+
rainRecord.M = tokens[4];
34+
35+
rainMap.put(rainRecord.date, rainRecord);
36+
}
37+
} catch (IOException e) {
38+
throw new RuntimeException(e);
39+
}
40+
}
41+
42+
RAINRecord get(int date) {
43+
RAINRecord sstRecord = rainMap.get(date);
44+
if (sstRecord == null) {
45+
sstRecord = new RAINRecord();
46+
sstRecord.date = date;
47+
sstRecord.RAIN = "-9.99";
48+
sstRecord.Q = "9";
49+
sstRecord.M = "D";
50+
}
51+
52+
return sstRecord;
53+
}
54+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.bc.fiduceo.reader.insitu.tao.preproc;
2+
3+
class RAINRecord {
4+
5+
int date;
6+
String RAIN;
7+
String Q;
8+
String M;
9+
}

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/RHProvider.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ class RHProvider {
1515
void open(File rhFile) {
1616
rhMap = new HashMap<>();
1717

18+
if (rhFile == null) {
19+
return;
20+
}
21+
1822
try (final FileReader fileReader = new FileReader(rhFile)) {
1923
final BufferedReader bufferedReader = new BufferedReader(fileReader);
2024
String line;

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/SSTProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package com.bc.fiduceo.reader.insitu.tao.preproc;
22

3-
import org.esa.snap.core.util.StringUtils;
4-
53
import java.io.BufferedReader;
64
import java.io.File;
75
import java.io.FileReader;
@@ -15,6 +13,10 @@ class SSTProvider {
1513
void open(File sstFile) {
1614
sstMap = new HashMap<>();
1715

16+
if (sstFile == null){
17+
return;
18+
}
19+
1820
try (final FileReader fileReader = new FileReader(sstFile)) {
1921
final BufferedReader bufferedReader = new BufferedReader(fileReader);
2022
String line;

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/TAORecord.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
class TAORecord {
44
int date;
5+
String lon;
6+
String lat;
57
String SSS;
68
String SST;
79
String AIRT;
810
String RH;
911
String WSPD;
1012
String WDIR;
1113
String BARO;
14+
String RAIN;
1215
String Q;
1316
String M;
1417

1518
String toLine() {
16-
return date + " " + SSS + " " + SST + " " + AIRT + " " + RH + " " + WSPD + " " + WDIR + " " + BARO + " " +Q + " " + M;
19+
return date + " " + lon + " " + lat + " " + SSS + " " + SST + " " + AIRT + " " + RH + " " + WSPD + " " + WDIR + " " + BARO + " " + RAIN + " " + Q + " " + M;
1720
}
1821
}

core/src/main/java/com/bc/fiduceo/reader/insitu/tao/preproc/TaoPreProcessor.java

Lines changed: 51 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,33 +13,43 @@ public static void main(String[] args) throws IOException {
1313
final Configuration configuration = new Configuration();
1414
configuration.sourceDir = "C:\\Satellite\\CIMR\\TAO_buoy";
1515
configuration.targetDir = "C:\\Satellite\\CIMR\\TAO_merged";
16-
configuration.filePrefix = "TAO_T0N110W";
17-
configuration.sssFileName = "TAO_T0N110W_D_SALT_hourly.ascii";
18-
configuration.sstFileName = "TAO_T0N110W_D_SST_10min.ascii";
19-
configuration.airtFileName = "TAO_T0N110W_D_AIRT_10min.ascii";
20-
configuration.rhFileName = "TAO_T0N110W_D_RH_10min.ascii";
21-
configuration.windFileName = "TAO_T0N110W_D_WIND_10min.ascii";
22-
configuration.baroFileName = "TAO_T0N110W_D_BARO_hourly.ascii";
16+
configuration.filePrefix = "TAO_T2N180W";
17+
configuration.sssFileName = "TAO_T2N180W_D_SALT_hourly.ascii";
18+
configuration.sstFileName = "TAO_T2N180W_D_SST_10min.ascii";
19+
configuration.airtFileName = "TAO_T2N180W_D_AIRT_10min.ascii";
20+
configuration.rhFileName = "TAO_T2N180W_D_RH_10min.ascii";
21+
configuration.windFileName = "TAO_T2N180W_D_WIND_10min.ascii";
22+
configuration.baroFileName = null;
23+
configuration.rainFileName = null;
24+
configuration.posFileName = "TAO_T2N180W_R_POS.ascii";
25+
configuration.nominalLon = -180.f;
26+
configuration.nominalLat = 2.f;
2327

2428
// --- read all we need ---
2529
final File sourceDir = new File(configuration.sourceDir);
2630
final File sssFile = new File(sourceDir, configuration.sssFileName);
2731

2832
final HashMap<String, List<SSSRecord>> sssMap = parseSSSFile(sssFile);
2933
final SSTProvider sstProvider = new SSTProvider();
30-
sstProvider.open(new File(sourceDir, configuration.sstFileName));
34+
sstProvider.open(getFile(sourceDir, configuration.sstFileName));
3135

3236
final AirtProvider airtProvider = new AirtProvider();
33-
airtProvider.open(new File(sourceDir, configuration.airtFileName));
37+
airtProvider.open(getFile(sourceDir, configuration.airtFileName));
3438

3539
final RHProvider rhProvider = new RHProvider();
36-
rhProvider.open(new File(sourceDir, configuration.rhFileName));
40+
rhProvider.open(getFile(sourceDir, configuration.rhFileName));
3741

3842
final WINDProvider windProvider = new WINDProvider();
39-
windProvider.open(new File(sourceDir, configuration.windFileName));
43+
windProvider.open(getFile(sourceDir, configuration.windFileName));
4044

4145
final BAROProvider baroProvider = new BAROProvider();
42-
baroProvider.open(new File(sourceDir, configuration.baroFileName));
46+
baroProvider.open(getFile(sourceDir, configuration.baroFileName));
47+
48+
final RAINProvider rainProvider = new RAINProvider();
49+
rainProvider.open(getFile(sourceDir, configuration.rainFileName));
50+
51+
final POSProvider posProvider = new POSProvider();
52+
posProvider.open(getFile(sourceDir, configuration.posFileName), configuration.nominalLon, configuration.nominalLat);
4353

4454
final HashMap<String, List<TAORecord>> taoMap = new HashMap<>();
4555

@@ -54,8 +64,13 @@ public static void main(String[] args) throws IOException {
5464
String M = "";
5565
String Q = "";
5666

57-
// salinity
67+
// date and place
5868
taoRecord.date = sssRecord.date;
69+
final POSRecord posRecord = posProvider.get(taoRecord.date);
70+
taoRecord.lon = Float.toString(posRecord.lon);
71+
taoRecord.lat = Float.toString(posRecord.lat);
72+
73+
// salinity
5974
taoRecord.SSS = sssRecord.SSS;
6075
M = M.concat(sssRecord.M);
6176
Q = Q.concat(sssRecord.Q);
@@ -91,6 +106,12 @@ public static void main(String[] args) throws IOException {
91106
M = M.concat(baroRecord.M);
92107
Q = Q.concat(baroRecord.Q);
93108

109+
// rainfall
110+
final RAINRecord rainRecord = rainProvider.get(sssRecord.date);
111+
taoRecord.RAIN = rainRecord.RAIN;
112+
M = M.concat(rainRecord.M);
113+
Q = Q.concat(rainRecord.Q);
114+
94115
taoRecord.M = M;
95116
taoRecord.Q = Q;
96117

@@ -132,6 +153,13 @@ public static void main(String[] args) throws IOException {
132153
}
133154
}
134155

156+
private static File getFile(File sourceDir, String fileName) {
157+
if (StringUtils.isNotNullAndNotEmpty(fileName)) {
158+
return new File(sourceDir, fileName);
159+
}
160+
return null;
161+
}
162+
135163
private static PrintWriter switchWriter(Configuration configuration, DecimalFormat format, PrintWriter writer, String filePrefix, int currentYear, int currentMonth) throws IOException {
136164
if (writer != null) {
137165
writer.flush();
@@ -150,7 +178,9 @@ private static PrintWriter switchWriter(Configuration configuration, DecimalForm
150178
throw new IOException("unable to create file: " + targetFile.getAbsolutePath());
151179
}
152180

153-
return new PrintWriter(targetFile);
181+
final PrintWriter printWriter = new PrintWriter(targetFile);
182+
printWriter.println("# utc longitude latitude SSS SST AIRT RH WSPD WDIR BARO RAIN M Q");
183+
return printWriter;
154184
}
155185

156186
private static HashMap<String, List<SSSRecord>> parseSSSFile(File sssFile) {
@@ -184,7 +214,13 @@ private static HashMap<String, List<SSSRecord>> parseSSSFile(File sssFile) {
184214
if (tokens.length == 12) {
185215
sssRecord.Q = tokens[10].substring(0, 1);
186216
sssRecord.M = tokens[11].substring(0, 1);
187-
} else if (tokens.length == 5) {
217+
} else if (tokens.length == 9) {
218+
sssRecord.Q = tokens[7].substring(0, 1);
219+
sssRecord.M = tokens[8].substring(0, 1);
220+
} else if (tokens.length == 6) {
221+
sssRecord.Q = tokens[4].substring(0, 1);
222+
sssRecord.M = tokens[5].substring(0, 1);
223+
}else if (tokens.length == 5) {
188224
sssRecord.Q = tokens[3];
189225
sssRecord.M = tokens[4];
190226
} else {

0 commit comments

Comments
 (0)