cdm/src/main/java/ucar/nc2/ft/point/standard/plug/CFpointObs.java
protected TableConfig getTrajectoryConfig(NetcdfDataset ds, EncodingInfo info, Formatter errlog) throws IOException {
    if (!identifyEncodingTraj(ds, info, errlog)) return null;

    TableConfig trajTable = makeStructTable(ds, FeatureType.TRAJECTORY, info, errlog);
    if (trajTable == null) return null;
    trajTable.feature_id = identifyIdVariableName(ds, CF.FeatureType.trajectory);
    if (trajTable.feature_id == null) {
      errlog.format("CFpointObs getTrajectoryConfig cant find a trajectoy id %n");
    }

    // obs table
    //Dimension obsDim = time.getDimension(time.getRank() - 1); // may be time(time) or time(traj, obs)

    TableConfig obsConfig = null;
    switch (info.encoding) {
      case single:
        obsConfig = makeSingle(ds, info.childDim, errlog);
        break;
      case multidim:
        obsConfig = makeMultidimInner(ds, trajTable, info.childDim, info, errlog);
        if (info.time.getRank() == 1) { // join time(obs) or time(time)
          obsConfig.addJoin(new JoinArray(info.time, JoinArray.Type.raw, 0));
          obsConfig.time = info.time.getFullName();
        }
        break;
      case raggedContiguous:
        trajTable.numRecords = info.ragged_rowSize.getFullName();
        obsConfig = makeRaggedContiguousChildTable(ds, info.parentDim, info.childDim, info.childStruct, errlog);
        break;
      case raggedIndex:
        obsConfig = makeRaggedIndexChildTable(ds, info.parentDim, info.childDim, info.ragged_parentIndex, errlog);
        break;
      case flat:
        throw new UnsupportedOperationException("CFpointObs: trajectory flat encoding");
    }
    if (obsConfig == null) return null;

    trajTable.addChild(obsConfig);
    return trajTable;
  }
protected TableConfig getTrajectoryConfig(NetcdfDataset ds, EncodingInfo info, Formatter errlog) throws IOException {
    if (!identifyEncodingTraj(ds, info, errlog)) return null;

    TableConfig trajTable = makeStructTable(ds, FeatureType.TRAJECTORY, info, errlog);
    if (trajTable == null) return null;
    trajTable.feature_id = identifyIdVariableName(ds, CF.FeatureType.trajectory);
    if (trajTable.feature_id == null) {
      errlog.format("CFpointObs getTrajectoryConfig cant find a trajectoy id %n");
    }

    // obs table
    //Dimension obsDim = time.getDimension(time.getRank() - 1); // may be time(time) or time(traj, obs)

    TableConfig obsConfig = null;
    switch (info.encoding) {
      case single:
        obsConfig = makeSingle(ds, info.childDim, errlog);
        break;
      case multidim:
        obsConfig = makeMultidimInner(ds, trajTable, info.childDim, info, errlog);
        if (info.time.getRank() == 1) { // join time(obs) or time(time)
          obsConfig.addJoin(new JoinArray(info.time, JoinArray.Type.raw, 0));
          obsConfig.time = info.time.getFullName();
        }
        break;
      case raggedContiguous:
        trajTable.numRecords = info.ragged_rowSize.getFullName();
        obsConfig = makeRaggedContiguousChildTable(ds, info.parentDim, info.childDim, info.childStruct, errlog);
        break;
      case raggedIndex:
        obsConfig = makeRaggedIndexChildTable(ds, info.parentDim, info.childDim, info.ragged_parentIndex, errlog);
        break;
      case flat:
        throw new UnsupportedOperationException("CFpointObs: trajectory flat encoding");
    }
    if (obsConfig == null) return null;

    trajTable.addChild(obsConfig);
    return trajTable;
  }
//