public Counter add(String name) { Counter c = new Counter(name); counters.add(c); map.put(name, c); return c; }
public boolean count(String name, Comparable value) { Counter counter = map.get(name); return counter.count(value); }
this.resolution = (endValue - startValue) / ncoords; Counters.Counter resol = new Counters.Counter("resol"); boolean isContiguous = true; for (int i = 0; i < values.length - 2; i += 2) { double diff = values[i + 2] - values[i]; // difference of consecutive starting interval values // LOOK roundoff resol.count(diff); if (isContiguous && !Misc.nearlyEquals(values[i+1], values[i+2])) // difference of this ending interval values with next starting value isContiguous = false; Comparable resolMode = resol.getMode(); if (resolMode != null) { double modeValue = ((Number) resolMode).doubleValue();
private boolean isRegular(Counters.Counter resol) { if (resol.getUnique() == 1) return true; // all same resolution, or n == 1 Comparable mode = resol.getMode(); Number modeNumber = (Number) mode; if (modeNumber == null || modeNumber.intValue() == 0) return false; int modeCount = 0; int nonModeCount = 0; for (Comparable value : resol.getValues()) { if (value.compareTo(mode) == 0) modeCount = resol.getCount(value); else { Number valueNumber = (Number) value; // non mode must be a multiple of mode - means there are some missing values int rem = (valueNumber.intValue() % modeNumber.intValue()); if (rem != 0) return false; int multiple = (valueNumber.intValue() / modeNumber.intValue()); nonModeCount += (multiple - 1) * resol.getCount(value); } } if (modeCount == 0) return true; // cant happen i think // only tolerate these many missing values double ratio = (nonModeCount / (double) modeCount); return ratio < missingTolerence; }
public void show(Formatter f) { java.util.List<Comparable> list = new ArrayList<>(set.keySet()); f.format("%n%s (%d)%n", name, list.size()); Collections.sort(list); if (showRange) { int n = list.size(); if (n == 0) f.format("none%n"); else f.format(" %10s - %10s: count = %d%n", list.get(0), list.get(n - 1), getUnique()); } else { Comparable prev = null; for (Comparable key : list) { int count = set.get(key); boolean isHashDup = (prev != null) && key.hashCode() == prev.hashCode(); boolean isNameDup = (prev != null) && key.toString().equals(prev.toString()); f.format(" %s %10s: count = %d%n", isHashDup != isNameDup ? "*" : " ", key, count); prev = key; } } }
private void setSpacingFromPointValues() { assert (values.length == ncoords); this.startValue = values[0]; this.endValue = values[ncoords - 1]; this.resolution = (ncoords == 1) ? 0.0 : (endValue - startValue) / (ncoords - 1); if (ncoords == 1) { this.spacing = CoverageCoordAxis.Spacing.regularPoint; values = null; return; } this.resolution = (endValue - startValue) / (ncoords - 1); Counters.Counter resol = new Counters.Counter("resol"); for (int i = 0; i < values.length - 1; i++) { double diff = values[i + 1] - values[i]; resol.count(diff); } Comparable resolMode = resol.getMode(); if (resolMode != null) this.resolution = ((Number) resolMode).doubleValue(); boolean isRegular = isRegular(resol); this.spacing = isRegular ? CoverageCoordAxis.Spacing.regularPoint : CoverageCoordAxis.Spacing.irregularPoint; if (isRegular) values = null; }
public void reset() { for (Counter c : counters) c.reset(); }
public void show(Formatter f) { for (Counter c : counters) c.show(f); }
public Counters makeSubCounters() { Counters result = new Counters(); for (Counter c : counters) { result.add(c.getName()); } return result; }