package edu.hawaii.jmotif.accelerometer;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;
public class TrainSeriesDumper {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File(
"/media/DB/accelerometer/train.csv")));
HashMap<String, BufferedWriter> outputs = new HashMap<String, BufferedWriter>();
HashMap<String, AtomicInteger> seriesCounter = new HashMap<String, AtomicInteger>();
HashMap<String, Long> timestamps = new HashMap<String, Long>();
HashMap<String, ArrayList<APoint>> series = new HashMap<String, ArrayList<APoint>>();
String line = "";
// int counter = 0;
String header = br.readLine();
long oldTS = 0;
while ((line = br.readLine()) != null) {
String[] split = line.split(",");
Long cTS = Double.valueOf(split[0]).longValue();
String deviceId = split[4];
if (!(outputs.containsKey(deviceId))) {
BufferedWriter bw = new BufferedWriter(new FileWriter("/media/DB/accelerometer/train_"
+ deviceId + ".csv"));
bw.write(header + ",seriesId\n");
outputs.put(deviceId, bw);
seriesCounter.put(deviceId, new AtomicInteger(0));
timestamps.put(deviceId, cTS);
series.put(deviceId, new ArrayList<APoint>());
}
if (Math.abs(cTS.longValue() - timestamps.get(deviceId).longValue()) > 11 * 1000) {
seriesCounter.get(deviceId).incrementAndGet();
save(deviceId, series.get(deviceId));
series.put(deviceId, new ArrayList<APoint>());
}
else {
series.get(deviceId).add(new APoint(line));
}
outputs.get(deviceId).write(line + "," + seriesCounter.get(deviceId) + "\n");
// String tstamp = line.split(",")[0];
// DateTime dt = new DateTime(Long.valueOf(tstamp));
// System.out.println(dt);
timestamps.put(deviceId, cTS);
}
for (BufferedWriter bw : outputs.values()) {
bw.close();
}
}
private static void save(String deviceId, ArrayList<APoint> arrayList) throws IOException {
long start = arrayList.get(0).getTs();
long end = arrayList.get(arrayList.size() - 1).getTs();
String fName = "/media/DB/accelerometer/train_series/" + String.valueOf(deviceId) + "_" + start
+ "_" + end + ".csv";
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(fName)));
int counter = 0;
for (APoint p : arrayList) {
String line = p.toFileLine();
if (counter > 0) {
line = line + "," + distance(p, arrayList.get(counter - 1));
}
else {
line = line + ",0.0";
}
bw.write(line + "\n");
counter++;
}
bw.close();
}
private static double distance(APoint p, APoint aPoint) {
return p.distanceTo(aPoint);
}
}