package edu.sc.seis.sod.process.waveform;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import org.w3c.dom.Element;
import edu.iris.Fissures.model.UnitImpl;
import edu.iris.Fissures.network.ChannelIdUtil;
import edu.iris.Fissures.network.ChannelImpl;
import edu.iris.Fissures.seismogramDC.LocalSeismogramImpl;
import edu.sc.seis.fissuresUtil.cache.CacheEvent;
import edu.sc.seis.fissuresUtil.display.configuration.DOMHelper;
import edu.sc.seis.fissuresUtil.xml.SeismogramFileTypes;
import edu.sc.seis.sod.ConfigurationException;
public class AsciiWriter extends AbstractSeismogramWriter {
public static final String DEFAULT_FILE_TEMPLATE = DEFAULT_FILE_TEMPLATE_WO_EXT+".txt";
public AsciiWriter(Element el) throws ConfigurationException {
this(extractWorkingDir(el),
extractFileTemplate(el, DEFAULT_FILE_TEMPLATE),
extractPrefix(el),
DOMHelper.hasElement(el, "storeSeismogramsInDB"));
}
public AsciiWriter(String workingDir, String fileTemplate, String prefix, boolean storeSeismogramsInDB)
throws ConfigurationException {
super(workingDir, fileTemplate, prefix, storeSeismogramsInDB);
// TODO Auto-generated constructor stub
}
@Override
public SeismogramFileTypes getFileType() {
return SeismogramFileTypes.SIMPLE_ASCII;
}
@Override
public void write(String location, LocalSeismogramImpl seis, ChannelImpl chan, CacheEvent ev) throws Exception {
File f = new File(location);
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(f)));
writer.println("# "+ChannelIdUtil.toStringNoDates(chan.getId())+" "+seis.getNumPoints()+" "+seis.getSampling().getPeriod()+" "+seis.getBeginTime()+" "+seis.getUnit()+winEOL);
if (SHAKEheader) {
writer.println(seis.getNumPoints()+" "+seis.getSampling().getPeriod().getValue(UnitImpl.SECOND));
}
if(seis.can_convert_to_long()) {
int[] asInts = seis.get_as_longs();
for(int i = 0; i < asInts.length; i++) {
writer.println(asInts[i]+winEOL);
}
} else if(seis.can_convert_to_float()) {
DecimalFormat df = new DecimalFormat(format);
float[] asFloats = seis.get_as_floats();
for(int i = 0; i < asFloats.length; i++) {
writer.print(df.format(asFloats[i]));
if (i % columns == columns-1) {
writer.println(winEOL);
}
}
}
writer.close();
AbstractSeismogramWriter.addBytesWritten(f.length());
}
int columns = 2;
String format = " +0.000000E00 ; -0.000000E00 ";
boolean SHAKEheader = true;
String winEOL = "";
// String winEOL = "\r";
}