/**
   * Compute the raw matrix for an instance run set
   *
   * @param data the data the instance runs
   * @return the raw matrix
   */
  private final IMatrix __computeInstanceRuns(final IInstanceRuns data) {
    final _List list;
    final DimensionTransformation xIn, yIn;
    final Transformation yOut;
    final IDimension timeDim, goalDim;

    xIn = this.getXAxisTransformation();
    try (final TransformationFunction xInFunc = xIn.use(data)) {
      yIn = this.getYAxisInputTransformation();
      try (final TransformationFunction yInFunc = yIn.use(data)) {
        yOut = this.getYAxisOutputTransformation();
        try (final TransformationFunction yOutFunc = yOut.use(data)) {

          timeDim = xIn.getDimension();
          goalDim = yIn.getDimension();

          if (goalDim.getDataType().isInteger() && yInFunc.isLongArithmeticAccurate()) {
            if (timeDim.getDataType().isInteger()) {
              list =
                  new _LongTimeLongGoal(
                      timeDim, goalDim, this.m_criterion, yInFunc, this.m_goalValueLong);
            } else {
              list =
                  new _DoubleTimeLongGoal(
                      timeDim, goalDim, this.m_criterion, yInFunc, this.m_goalValueLong);
            }
          } else {
            if (timeDim.getDataType().isInteger()) {
              list =
                  new _LongTimeDoubleGoal(
                      timeDim, goalDim, this.m_criterion, yInFunc, this.m_goalValueDouble);
            } else {
              list =
                  new _DoubleTimeDoubleGoal(
                      timeDim, goalDim, this.m_criterion, yInFunc, this.m_goalValueDouble);
            }
          }

          for (final IRun run : data.getData()) {
            list._addRun(run);
          }

          return list._toMatrix(xInFunc, yOutFunc);
        }
      }
    }
  }