public static double[] getObs(ObjFunc of, Date start, Date end, CSTable tobs, String columnName, int timeStep, int startMonth,
            boolean[] periodMask, boolean[] sdMask) {
        double[] obsval;
        // System.out.println("CacheValid = " + of.getCacheValid());
        if (of.getCacheValid()) {
            obsval = of.getCacheData();
            if (showCacheStats) {
                usedCache++;
            }

            // Randomally check data
            Random r = new Random();
            if (r.nextInt(100) < checkCachePercentage) {
                //System.out.print(" Verifying cache data validity");
                double[] obsval_orig = DataIO.getColumnDoubleValuesInterval(start, end, tobs, columnName, timeStep, startMonth, periodMask, sdMask);
                checkCache(obsval, obsval_orig);
            }
        } else {
            obsval = DataIO.getColumnDoubleValuesInterval(start, end, tobs, columnName, timeStep, startMonth, periodMask, sdMask);
            if (showCacheStats) {
                readData++;
            }
        }

        of.setcache(obsval);
        return obsval;
    }