package com.isti.traceview.data;
import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import org.apache.log4j.Logger;
import com.isti.traceview.TraceViewException;
/**
* File SEGY data source
* @author Max Kokoulin
*
*/
public class SourceFileSEGY extends SourceFile implements Serializable {
private static final long serialVersionUID = 1L;
private static final Logger logger = Logger.getLogger(SourceFileSEGY.class);
public SourceFileSEGY(File file) {
super(file);
logger.info("Created: " + this);
}
public FormatType getFormatType(){
return FormatType.SEGY;
}
public Set<RawDataProvider> parse(DataModule dataModule) {
Set<RawDataProvider> ret = new HashSet<RawDataProvider>();
try {
SegyTimeSeries segy = new SegyTimeSeries();
segy.readHeader(getFile().getCanonicalPath());
RawDataProvider channel = dataModule.getOrAddChannel(segy.getChannel(), DataModule.getOrAddStation(segy.getStation()), segy.getNetwork(), "");
ret.add(channel);
Segment segment = new Segment(this, 0, segy.getTimeRange().getStartTime(), segy.getRateMicroSampPerSec()/1000.0, segy.getNumSamples(), 0);
channel.addSegment(segment);
} catch (IOException e) {
logger.error("IO error: ", e);
} catch (TraceViewException e) {
logger.error("IO error: ", e);
}
return ret;
}
public void load(Segment segment){
int[] data = null;
try {
SegyTimeSeries segy = new SegyTimeSeries();
segy.read(getFile());
data = new int[segment.getSampleCount()];
int i = 0;
for (float val: segy.y) {
data[i++]=new Float(val).intValue();
}
} catch (IOException e) {
logger.error("IOException:", e);
//throw new RuntimeException(e);
System.exit(0);
} catch (TraceViewException e) {
logger.error("TraceViewException:", e);
//throw new RuntimeException(e);
System.exit(0);
}
for (int value: data) {
segment.addDataPoint(value);
}
}
public String toString() {
return "SourceFileSEGY: file " + (getFile() == null ? "absent" : getFile().getName()) + ";";
}
}