⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 waveclient.java

📁 一个用java写的地震分析软件(无源码)-used to write a seismic analysis software (without source)
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    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 + -