📄 waveclient.java
字号:
public int getJasiWaveformDataRaw(org.trinet.jasi.Waveform jasiWaveform) {
if (jasiWaveform == null)
throw new NullPointerException("WaveClient.getJasiWaveformDataRaw(jasi.Waveform) null input parameter");
// Changed jasiWaveform.chan.channel to jasiWaveform.chan.seedchan - DDG 9/7/2000
// Channel chan = new Channel(jasiWaveform.chan.net, jasiWaveform.chan.sta, jasiWaveform.chan.seedchan);
org.trinet.jasi.ChannelName channelId = jasiWaveform.getChannelObj().getChannelName();
Channel chan = new Channel(channelId.getNet(), channelId.getSta(), channelId.getSeedchan());
TimeWindow timeWindow =
new TimeWindow( EpochTime.epochToDate(jasiWaveform.getEpochStart()),
EpochTime.epochToDate(jasiWaveform.getEpochEnd())
);
Waveform wave = new Waveform();
int status = getData(chan, timeWindow, wave);
if (status < TN_SUCCESS) {
if (status == TN_NODATA) return status;
System.err.println("WaveClient.getJasiWaveformDataRaw() getData() error code: " + getStatusMessage(status));
return status;
}
jasiWaveform.format.setValue(Waveform.MINISEED_TYPE);
jasiWaveform.encoding.setValue(Waveform.STEIM1);
jasiWaveform.setSampleRate(wave.getSampleRate());
jasiWaveform.setSegmentList(new ArrayList(SeedReader.getWFSegments(wave.getMiniSEEDPackets())));
return status;
}
/** Retrieves from the server hosts the time-series data for the channel and time specified in the input Waveform instance.
* A WFSegment collection constructed from a FloatTimeSeries collection derived from the original raw data packets (MiniSEED).
* The original packet header format information is not preserved.
* Time-series data returned is truncated at the first time gap if isTruncateAtTimeGap() == true.
* Returns TN_SUCCESS if data was found, else TN_NODATA or other TRINET error code.
* <b>By default data packet headers are checked for data consistency, for faster response disable verification.</b>
* @see #getJasiWaveformDataRaw(org.trinet.jasi.Waveform jasiWaveform)
* @see #setWaveformVerify(boolean)
* @see #isVerifyWaveforms()
* @see #getData(Channel, TimeWindow, Waveform)
* @see org.trinet.jasi.SeedReader#getWFSegments(Collection)
* @exception java.lang.NullPointerException input Waveform null or has null data member
* @exception java.lang.IllegalArgumentException input Waveform channel or time data violate constraints
*/
public int getJasiWaveformDataSeries(org.trinet.jasi.Waveform jasiWaveform) {
if (jasiWaveform == null)
throw new NullPointerException("WaveClient.JasiWaveformDataSeries(jasi.Waveform) null input parameter");
ArrayList timeSeriesList = new ArrayList();
// Changed jasiWaveform.chan.channel to jasiWaveform.chan.seedchan - DDG 9/7/2000
// int status = getData(jasiWaveform.chan.net, jasiWaveform.chan.sta, jasiWaveform.chan.seedchan,
org.trinet.jasi.ChannelName channelId = jasiWaveform.getChannelObj().getChannelName();
double startTime = jasiWaveform.getEpochStart();
double endTime = jasiWaveform.getEpochEnd();
int status = getData(channelId.getNet(), channelId.getSta(), channelId.getSeedchan(),
EpochTime.epochToDate(startTime), (int) Math.round(endTime - startTime),
timeSeriesList);
if (status < TN_SUCCESS) {
if (status == TN_NODATA) return status;
System.err.println("WaveClient.getJasiWaveformDataSeries() getData() error code: " + getStatusMessage(status));
return status;
}
int numberOfElements = timeSeriesList.size();
jasiWaveform.setSegmentList(new ArrayList(numberOfElements));
if (numberOfElements <= 0) return status;
Iterator iter = timeSeriesList.iterator();
final int BYTES_PER_SAMPLE = 4;
org.trinet.jasi.WFSegment wfSeg = null;
while (iter.hasNext()) {
FloatTimeSeries ts = (FloatTimeSeries) iter.next();
wfSeg = new org.trinet.jasi.WFSegment();
wfSeg.bytesPerSample = BYTES_PER_SAMPLE;
wfSeg.setChannelObj(jasiWaveform.getChannelObj());
wfSeg.setStart(EpochTime.dateToEpoch(ts.startTimestamp));
wfSeg.setEnd(EpochTime.dateToEpoch(ts.endTimestamp));
//deprecated wfSeg.lenSecs = wfSeg.tend - wfSeg.tstart;
//deprecated wfSeg.length = ts.samples.length * BYTES_PER_SAMPLE;
wfSeg.samplesExpected = ts.samples.length;
wfSeg.setSampleInterval(ts.getSampleRate()); // wfSeg.lenSecs/(wfSeg.getSampleCount() - 1));
wfSeg.setTimeSeries(ts.samples);
jasiWaveform.getSegmentList().add(wfSeg);
}
if (wfSeg != null) jasiWaveform.setSampleRate(Math.rint(1.0/wfSeg.getSampleInterval()));
jasiWaveform.format.setValue(Waveform.MINISEED_TYPE);
jasiWaveform.encoding.setValue(Waveform.STEIM1);
return status;
}
/** Requests timeseries data for the specified input Channel and TimeWindow time range.
* Inputs the data returned in the server response, if any, to the input Waveform object.
* The passed Waveform object should be constructed with the default Waveform constructor.
* Trims the returned data at the first time gap if isTruncateAtTimeGap() == true.
* Returns TN_SUCCESS if successful, else TN_NODATA, or an error code.
* <b>By default data packet headers are checked for data consistency, for faster response disable verification.</b>
* @see #setWaveformVerify(boolean)
* @see #isVerifyWaveforms()
* @exception java.lang.NullPointerException null input parameter
*/
public int getData(Channel chan, TimeWindow timeWindow, Waveform waveform) {
if (chan == null)
throw new NullPointerException("WaveClient.getData(Channel, TimeWindow, Waveform) null Channel parameter");
if (timeWindow == null)
throw new NullPointerException("WaveClient.getData(Channel, TimeWindow, Waveform) null TimeWindow parameter");
if (waveform == null)
throw new NullPointerException("WaveClient.getData(Channel, TimeWindow, Waveform) null Waveform parameter");
int retVal = TN_SUCCESS;
Collection dataSegmentList = new TreeSet();
// Request all available data from each server
// Collection connList = getServerPollList(timeWindow.getStartTimestamp().getTime());
Collection connList = servers.values();
Iterator iter = connList.iterator();
while (iter.hasNext()) {
TCPConnClient conn = (TCPConnClient) iter.next();
System.err.println("WaveClient getData() Polling server: " + conn.socket.toString());
retVal = doGetData(conn, chan, timeWindow, dataSegmentList);
if (retVal < TN_SUCCESS && retVal != TN_NODATA ) {
System.err.println("WaveClient.getData() doGetData returned error code:" + getStatusMessage(retVal));
// return retVal; // ignore error, continue iterating for now.
}
else System.err.println("WaveClient doGetData() returned status code:" + getStatusMessage(retVal));
// The following ordering of the packets assumes:
// 1) Multiple servers may have data packets for the specified channel.
// 2) The SEED packets for a particular time window of data are identical across all wave servers.
// 3) Each wave server could be missing one or more packets that other servers may possess.
// Check if the request has been satisfied
if (haveRequestedData(timeWindow, dataSegmentList, chan.sampleRate)) break; // done with request
else System.err.println("WaveClient don't have all requested data: " + conn.socket.toString());
}
if (dataSegmentList.isEmpty()) {
return TN_NODATA;
}
// dataSegmentList = new ArrayList(dataSegmentList); // pass as defined, a Set, or convert to a List?
try {
waveform.setData(dataSegmentList, verifyWaveforms); // set verifyWaveforms false to speed up transfer
}
catch (WaveformDataException ex) {
System.err.println("Error WaveClient.getData() Unable to construct modify waveform object");
System.err.println(ex.getMessage());
ex.printStackTrace();
return TN_FAILURE;
}
catch (Exception ex) {
System.err.println("Error WaveClient.getData() caught exception");
ex.printStackTrace();
return TN_FAILURE;
}
// Trim to the first data include time tear if necessary
if (isTruncateAtTimeGap() && waveform.hasTimeGaps() ) {
waveform.trimAtFirstGap();
}
return TN_SUCCESS;
}
/** Requests the sample rate for the specified input seismic Channel.
* Sets the Channel sample rate to the data returned in the server response, if any.
* Returns TN_SUCCESS if successful, else TN_NODATA, or an error code.
* @exception java.lang.NullPointerException null input parameter
*/
public int getSampleRate(Channel chan) {
if (chan == null)
throw new NullPointerException("WaveClient.getSampleRate(Channel) null input Channel reference");
int retVal = TN_SUCCESS;
chan.sampleRate = 0.0;
// Request all available data from each server
// Collection connList = getServerPollList();
Collection connList = servers.values();
Iterator iter = connList.iterator();
while (iter.hasNext()) {
retVal = doGetSampleRate((TCPConnClient) iter.next(), chan);
if (retVal == TN_SUCCESS) return TN_SUCCESS;
}
return retVal; // TN_NODATA;
}
/** Requests a list of Channel objects describing known seismic channels for which timeseries data is available.
* Clears the input Channel list and appends the data returned in the server response, if any, to this list.
* Returns TN_SUCCESS if successful, else TN_NODATA, or an error code.
* @exception java.lang.NullPointerException null input parameter
*/
public int getChannels(Collection channelList) {
if (channelList == null)
throw new NullPointerException("WaveClient.getChannels(Collection) null input collection reference");
int retVal = TN_SUCCESS;
// Clear out any existing channels in the list
channelList.clear();
TreeSet channelSet = new TreeSet();
// Request all available data from each server
// Collection connList = getServerPollList();
Collection connList = servers.values();
Iterator iter = connList.iterator();
while (iter.hasNext()) {
retVal = doGetChannels((TCPConnClient) iter.next(), channelSet);
if (retVal < TN_SUCCESS && retVal != TN_NODATA ) {
System.err.println("WaveClient.getChannels() doGetChannels returned error code:" + getStatusMessage(retVal));
// return retVal; // continue for now.
}
}
if (channelSet.isEmpty()) return TN_NODATA;
iter = channelSet.iterator();
while (iter.hasNext()) {
channelList.add(iter.next());
}
return TN_SUCCESS;
}
/** Requests a list of TimeWindow objects describing the available timeseries for the input seismic Channel.
* Clears the input TimeWindow list and appends the data returned in the server response, if any, to this list.
* Returns TN_SUCCESS if successful, else TN_NODATA, or an error code.
* @exception java.lang.NullPointerException null input parameter
*/
public int getTimes(Channel chan, Collection timeWindowList) {
if (chan == null)
throw new NullPointerException("WaveClient.getTimes(Channel, Collection) null input Channel reference");
if (timeWindowList == null)
throw new NullPointerException("WaveClient.getTimes(Collection) null input collection reference");
// Clear out the existing time windows
timeWindowList.clear();
// Request all available data from each server
// Collection connList = getServerPollList();
Collection connList = servers.values();
Iterator iter = connList.iterator();
int retVal = TN_SUCCESS;
while (iter.hasNext()) {
TCPConnClient conn = (TCPConnClient) iter.next();
retVal = doGetTimes(conn, chan, timeWindowList);
if (retVal < TN_SUCCESS && retVal != TN_NODATA ) {
System.err.println("WaveClient.getTimes() doGetTimes returned error code:" + getStatusMessage(retVal));
// return retVal; // continue for now.
}
}
if (timeWindowList.isEmpty()) return TN_NODATA;
// Verify that the list of time windows is valid
if (! verifyTimeWindows(timeWindowList)) {
System.err.println( "Error WaveClient.getTimes() time window list failed verification");
return TN_FAILURE;
}
// Retrieve the sample rate for this channel
if (getSampleRate(chan) < TN_SUCCESS) {
System.err.println("Error WaveClient.getTimes() cannot retrieve sample rate");
return TN_FAILURE;
}
// Merge adjacent time windows using sample rate
mergeTimeWindows(timeWindowList, chan.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -