示例#1
0
    private PlugInChannelMap handleRegistration(PlugInChannelMap picm) throws Exception {
      // 	picm.PutTime( (System.currentTimeMillis()/1000.0), 0.0);

      try {
        if (((picm.GetName(0).equals("...")) || (picm.GetName(0).equals("*")))) {

          double otime = ctreader.oldTime(sourceFolder);
          double ntime = ctreader.newTime(sourceFolder);
          if (debug)
            System.err.println(
                "handleRegistration picm[0]: "
                    + picm.GetName(0)
                    + ", oldtime: "
                    + otime
                    + ", newtime: "
                    + ntime);

          picm.PutTime(otime, ntime - otime);
          if (regPicm
              != null) { // round about way to cache registration. actual RBNB pre-register does not
            // provide time limits
            if (debug) System.err.println("returning pre-fetched registration...");
            picm.Clear();
            for (int i = 0; i < regPicm.NumberOfChannels(); i++) {
              picm.Add(regPicm.GetName(i));
              picm.PutDataAsString(i, regString(regPicm.GetName(i)));
              picm.PutMime(i, "text/xml");
            }
            return picm; // return pre-fetched registration
          }

          ArrayList<String> chanlist = ctreader.listChans(sourceFolder);
          if (chanlist == null) {
            throw (new Exception("Oops, no channels for sourceFolder: " + sourceFolder));
          }
          picm.Clear();
          for (int i = 0; i < chanlist.size(); i++) {
            int j = picm.Add(chanlist.get(i));
            if (debug) System.err.println("register[" + j + "]: " + picm.GetName(j));
            picm.PutDataAsString(i, regString(chanlist.get(i)));
            picm.PutMime(i, "text/xml");
          }
        } else {
          CTmap ctmap = PI2CTmap(picm); // ignore time limits registration request
          double otime = ctreader.oldTime(sourceFolder, ctmap);
          double ntime = ctreader.newTime(sourceFolder, ctmap);
          picm.PutTime(otime, ntime - otime);
          if (debug)
            System.err.println(
                "handleRegistration picm[0]: "
                    + picm.GetName(0)
                    + ", oldtime: "
                    + otime
                    + ", newtime: "
                    + ntime);

          int nchan = picm.NumberOfChannels();
          if (debug)
            System.err.println("reg-request channel: " + picm.GetName(0) + ", num: " + nchan);
          for (int i = 0; i < nchan; i++) { // put start/end time for each channel individually?
            picm.PutDataAsString(i, regString(picm.GetName(i)));
            picm.PutMime(i, "text/xml");
          }
        }
      } catch (Exception e) {
        System.err.println("handleRegistration exception: " + e);
        e.printStackTrace();
      }
      //	 plugin.Flush(picm);
      return (picm);
    }
示例#2
0
    public PlugInChannelMap CT2PImap(
        PlugInChannelMap picm, CTmap ctmap, double tget, double tdur, String tmode) {
      int nchan = ctmap.size();
      try {
        for (int i = 0; i < nchan; i++) {
          String cname = ctmap.getName(i);
          picm.Add(cname);
          CTdata td;
          //					if(tmode.equals("absolute")) td = ctmap.getTimeData(cname, tget, tdur);	// use
          // tget,tdur for trim
          //					else						 td = ctmap.getTimeData(cname);
          if (debug)
            System.err.println(
                "getTimeData, tget: " + tget + ", tdur: " + tdur + ", tmode: " + tmode);
          //					td = ctmap.getTimeData(cname, tget, tdur, tmode);
          td = ctmap.getTimeData(cname); // already trimmed MJM 4/27/16
          if (debug)
            System.err.println(
                "cname: "
                    + cname
                    + ", fileType: "
                    + CTinfo.fileType(cname, typeDefault)
                    + ", td.size: "
                    + td.size());
          if (td == null || td.size() == 0) continue; // no data found this time

          td.setSwap(swapFlag);
          char fileType = CTinfo.fileType(cname, typeDefault);

          if (fileType != 'B') picm.PutTimes(td.getTime()); // doesn't work with byte[][]
          //				System.err.println("PutTimes len: "+td.getTime().length);
          switch (fileType) {
            case 'F':
              picm.PutDataAsFloat64(i, td.getDataAsFloat64());
              break;
            case 'f':
              picm.PutDataAsFloat32(i, td.getDataAsFloat32());
              break;
            case 'I':
              picm.PutDataAsInt64(i, td.getDataAsInt64());
              break;
            case 'i':
              picm.PutDataAsInt32(i, td.getDataAsInt32());
              break;
            case 'j':
              picm.PutDataAsInt16(i, td.getDataAsInt16());
              break;
            case 'n':
              picm.PutDataAsFloat32(i, td.getDataAsNumericF32());
              break;
            case 'N':
              picm.PutDataAsFloat64(i, td.getDataAsNumericF64());
              break;
            case 'B':
            default:
              if (debug) System.err.println("PutByte[] len: " + td.size());
              double[] time = td.getTime();
              byte[][] bdata = td.getData();
              for (int j = 0; j < td.size(); j++) {
                picm.PutTime(time[j], 0.);
                picm.PutDataAsByteArray(i, bdata[j]);
              }
              break;
          }
        }
      } catch (Exception e) {
        System.err.println("CTplugin Exception: " + e);
        //				e.printStackTrace();
        return null;
      }
      return picm;
    }
  // **********************  PlugInTemplate Overrides  *************************//
  protected void processRequest(ChannelMap fwdData, PlugInChannelMap out) throws SAPIException {
    if (fwdData.NumberOfChannels() == 0) return;

    // Override member defaults with dynamic options:
    int minDecimation = this.minDecimation, maxSamples = this.maxSamples;
    boolean antiAlias = this.antiAlias;

    java.util.Properties opts = getRequestOptions();
    String temp;
    if ((temp = opts.getProperty("minDecimation")) != null) minDecimation = Integer.parseInt(temp);
    if ((temp = opts.getProperty("maxSamples")) != null) maxSamples = Integer.parseInt(temp);
    if ((temp = opts.getProperty("antiAlias")) != null) antiAlias = "true".equals(temp);

    // 2007/08/15  WHF  maxSamples applies to all channels:
    // 2007/08/15  WHF  Changed their mind.  Uncomment to re-enable.
    /*if (fwdData.NumberOfChannels() == 0) return;
    maxSamples /= fwdData.NumberOfChannels();
    if (maxSamples < 1) maxSamples = 1; */

    for (int index = 0; index < fwdData.NumberOfChannels(); ++index) {
      Object data;

      // Will add if necessary, otherwise just a lookup:
      int outIndex = out.Add(fwdData.GetName(index));

      // data = GetDataAsArray.get(fwdData, index);
      data = fwdData.GetDataAsArray(index);
      if (data == null) {
        System.err.println("ResamplePlugIn: Unsupported datatype.");
        continue;
      }

      int npts = Array.getLength(data);

      if (npts <= maxSamples && minDecimation < 2) {
        // length okay, just copy:
        out.PutTimeRef(fwdData, index);
        out.PutDataRef(outIndex, fwdData, index);
        continue;
      }

      // Calculate the decimation factor for this set:
      int ndeci = (int) Math.ceil(((double) npts) / maxSamples);
      if (ndeci < minDecimation) ndeci = minDecimation;

      double[] ddata = null;
      if (antiAlias) {
        if (fwdData.GetType(index) == ChannelMap.TYPE_FLOAT64) {
          ddata = (double[]) data;
        } else {
          ddata = new double[npts];
          for (int ii = 0; ii < npts; ++ii) ddata[ii] = Array.getDouble(data, ii);
        }
        double[] dataOut = new double[ddata.length];
        Filter lowPass = new Filter(1.0 / ndeci);
        lowPass.filter(ddata, dataOut);
        data = dataOut;
      }

      Object result = decimate(data, ndeci);
      out.PutTime(fwdData.GetTimeStart(index), fwdData.GetTimeDuration(index));
      if (antiAlias) {
        out.PutDataAsFloat64(outIndex, (double[]) result);
      } else {
        switch (fwdData.GetType(index)) {
          case ChannelMap.TYPE_FLOAT32:
            out.PutDataAsFloat32(outIndex, (float[]) result);
            break;

          case ChannelMap.TYPE_FLOAT64:
            out.PutDataAsFloat64(outIndex, (double[]) result);
            break;

          case ChannelMap.TYPE_INT16:
            out.PutDataAsInt16(outIndex, (short[]) result);
            break;

          case ChannelMap.TYPE_INT32:
            out.PutDataAsInt32(outIndex, (int[]) result);
            break;

          case ChannelMap.TYPE_INT64:
            out.PutDataAsInt64(outIndex, (long[]) result);
            break;

          case ChannelMap.TYPE_INT8:
            out.PutDataAsInt8(outIndex, (byte[]) result);
            break;
        }
      }
    }
  }