diff --git a/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java b/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java
index 9228a994ba..5581a1faf4 100644
--- a/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java
+++ b/cdm/core/src/main/java/ucar/nc2/dataset/VariableDS.java
@@ -944,7 +944,7 @@ private void createEnhancements() {
this.normalizer = Normalizer.createFromVariable(this);
}
Attribute classifierAtt = findAttribute(CDM.CLASSIFY);
- if (classifierAtt != null && this.enhanceMode.contains(Enhance.ApplyClassifier) && dataType.isFloatingPoint()) {
+ if (classifierAtt != null && this.enhanceMode.contains(Enhance.ApplyClassifier) && dataType.isNumeric()) {
this.classifier = Classifier.createFromVariable(this);
}
}
diff --git a/cdm/core/src/main/java/ucar/nc2/filter/Classifier.java b/cdm/core/src/main/java/ucar/nc2/filter/Classifier.java
index 15103529d2..650b273d59 100644
--- a/cdm/core/src/main/java/ucar/nc2/filter/Classifier.java
+++ b/cdm/core/src/main/java/ucar/nc2/filter/Classifier.java
@@ -15,51 +15,21 @@ public class Classifier implements Enhancement {
public static Classifier createFromVariable(VariableDS var) {
try {
Array arr = var.read();
- DataType type = var.getDataType();
- return createFromArray(arr, type);
+ // DataType type = var.getDataType();
+ return emptyClassifier();
} catch (IOException e) {
return emptyClassifier();
}
}
- public static Classifier createFromArray(Array arr, DataType type) {
- /** what is the type of array? */
- return new Classifier(arr, type);
-
- }
-
public static Classifier emptyClassifier() {
emptyClassifier = new Classifier();
return emptyClassifier;
}
- /** wEmpty in case data not good */
+ /** Enough of a constructor */
public Classifier() {}
- private Classifier(Array arr, DataType type) {
- classifier = new Classifier();
- /** how about doubles? */
-
- }
-
- /** Classify integer array */
- public int[] classifyIntArray(Array arr) {
- classifiedArray = new int[(int) arr.getSize()];
- int i = 0;
- IndexIterator iterArr = arr.getIndexIterator();
- while (iterArr.hasNext()) {
- Number value = (Number) iterArr.getObjectNext();
- if (value.intValue() < 0) {
- classifiedArray[i] = 0;
- } else {
- classifiedArray[i] = 1;
- }
- i++;
- }
-
- return classifiedArray;
- }
-
/** Classify double array */
public int[] classifyDoubleArray(Array arr) {
int[] classifiedArray = new int[(int) arr.getSize()];
@@ -68,30 +38,8 @@ public int[] classifyDoubleArray(Array arr) {
while (iterArr.hasNext()) {
Number value = (Number) iterArr.getObjectNext();
if (!Double.isNaN(value.doubleValue())) {
- if (value.doubleValue() < 0) {
- classifiedArray[i] = 0;
- } else {
- classifiedArray[i] = 1;
- }
- }
- i++;
- }
- return classifiedArray;
- }
- /** Classify float array */
- public int[] classifyFloatArray(Array arr) {
- int[] classifiedArray = new int[(int) arr.getSize()];
- int i = 0;
- IndexIterator iterArr = arr.getIndexIterator();
- while (iterArr.hasNext()) {
- Number value = (Number) iterArr.getObjectNext();
- if (!Float.isNaN(value.floatValue())) {
- if (value.floatValue() < 0) {
- classifiedArray[i] = 0;
- } else {
- classifiedArray[i] = 1;
- }
+ classifiedArray[i] = classifyArray(value.doubleValue());
}
i++;
}
@@ -111,47 +59,12 @@ public int classifyArray(double val) {
return classifiedVal;
}
- /** for a single float */
- public int classifyArray(float val) {
- if (val >= 0) {
- classifiedVal = 1;
- } else {
- classifiedVal = 0;
- }
-
- return classifiedVal;
- }
-
- /** for a single int ? */
- public int classifyArray(int val) {
- if (val >= 0) {
- classifiedVal = 1;
- } else {
- classifiedVal = 0;
- }
-
- return classifiedVal;
- }
-
- /**
- * Method to classify int array
- * maybe not needed if enhancement applied only to doubles and floats?
- */
-
-
-
@Override
public double convert(double val) {
- return classifier.classifyArray(val);
+ return emptyClassifier.classifyArray(val);
}
- public double convert(float val) {
- return classifier.classifyArray(val);
- }
- public double convert(int val) {
- return classifier.classifyArray(val);
- }
}
diff --git a/cdm/core/src/test/data/ncml/enhance/testClassifier.ncml b/cdm/core/src/test/data/ncml/enhance/testClassifier.ncml
index 8d21e2f8f1..b649675d99 100644
--- a/cdm/core/src/test/data/ncml/enhance/testClassifier.ncml
+++ b/cdm/core/src/test/data/ncml/enhance/testClassifier.ncml
@@ -40,6 +40,15 @@
1 2 3 4 5
+
+
+ -1.0 -2.0 -3.0 -4.0 -5.0
+
+
+
+ 1.0 -2.0 0.0 4.0 -5.0
+
+
diff --git a/cdm/core/src/test/java/ucar/nc2/filter/TestClassifier.java b/cdm/core/src/test/java/ucar/nc2/filter/TestClassifier.java
index 91ec9a23cf..967861064e 100644
--- a/cdm/core/src/test/java/ucar/nc2/filter/TestClassifier.java
+++ b/cdm/core/src/test/java/ucar/nc2/filter/TestClassifier.java
@@ -6,41 +6,8 @@
public class TestClassifier {
- @Test
- public void testClassifyIntArray_AllPositive() {
- Classifier classifier = new Classifier();
- int[] input = {1, 2, 3};
- int[] expected = {1, 1, 1};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyIntArray(DATA));
- }
- @Test
- public void testClassifyIntArray_AllNegative() {
- Classifier classifier = new Classifier();
- int[] input = {-1, -2, -3};
- int[] expected = {0, 0, 0};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyIntArray(DATA));
- }
- @Test
- public void testClassifyIntArray_Mixed() {
- Classifier classifier = new Classifier();
- int[] input = {-1, 2, -3, 4};
- int[] expected = {0, 1, 0, 1};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyIntArray(DATA));
- }
-
- @Test
- public void testClassifyIntArray_WithZero() {
- Classifier classifier = new Classifier();
- int[] input = {0, -1, 1, 0, 0, 0};
- int[] expected = {1, 0, 1, 1, 1, 1};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyIntArray(DATA));
- }
/** test doubles */
@Test
@@ -81,43 +48,4 @@ public void testClassifyDoubleArray_WithZero() {
- /** testing with floats */
- @Test
- public void testClassifyFloatArray_AllPositive() {
- Classifier classifier = new Classifier();
- float[] input = {1.1f, 2.2f, 3.3f};
- int[] expected = {1, 1, 1};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyFloatArray(DATA));
- }
-
- @Test
- public void testClassifyFloatArray_AllNegative() {
- Classifier classifier = new Classifier();
- float[] input = {-1.1f, -2.2f, -3.3f};
- int[] expected = {0, 0, 0};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyFloatArray(DATA));
- }
-
- @Test
- public void testClassifyFloatArray_Mixed() {
- Classifier classifier = new Classifier();
- float[] input = {-1.1f, 2.2f, -3.3f, 4.4f};
- int[] expected = {0, 1, 0, 1};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyFloatArray(DATA));
- }
-
- @Test
- public void testClassifyFloatArray_WithZero() {
- Classifier classifier = new Classifier();
- float[] input = {0.0f, -1.1f, 1.1f};
- int[] expected = {1, 0, 1};
- Array DATA = Array.makeFromJavaArray(input);
- assertArrayEquals(expected, classifier.classifyFloatArray(DATA));
- }
-
-
-
}
diff --git a/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhanceClassifier.java b/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhanceClassifier.java
index c324dbae64..00fac9b05d 100644
--- a/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhanceClassifier.java
+++ b/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhanceClassifier.java
@@ -22,8 +22,7 @@ public class TestEnhanceClassifier {
public static final Array DATA_all_zeroes = Array.makeFromJavaArray(all_zeroes);
public static final int[] mixNumbers = {1, 0, 1, 1, 0};
public static final Array DATA_mixNumbers = Array.makeFromJavaArray(mixNumbers);
- public static final int[] inttest = {1, 2, 3, 4, 5};
- public static final Array DATA_inttest = Array.makeFromJavaArray(inttest);
+
/** test on doubles, all positives, all negatives and a mixed array */
@Test
@@ -59,8 +58,8 @@ public void testEnhanceClassifier_doubles() throws IOException {
@Test
public void testEnhanceClassifier_floats() throws IOException {
try (NetcdfFile ncfile = NetcdfDatasets.openDataset(dataDir + "testClassifier.ncml", true, null)) {
- Variable floatPositives = ncfile.findVariable("floatPositives");
+ Variable floatPositives = ncfile.findVariable("floatPositives");
assertThat((Object) floatPositives).isNotNull();
assertThat(floatPositives.getDataType()).isEqualTo(DataType.FLOAT);
assertThat(floatPositives.attributes().hasAttribute("classify")).isTrue();
@@ -95,9 +94,21 @@ public void testEnhanceClassifier_integers() throws IOException {
assertThat(IntegerPositives.getDataType()).isEqualTo(DataType.INT);
assertThat(IntegerPositives.attributes().hasAttribute("classify")).isTrue();
Array dataIntegers = IntegerPositives.read();
- assertThat(nearlyEquals(dataIntegers, DATA_inttest)).isTrue();
-
-
+ assertThat(nearlyEquals(dataIntegers, DATA_all_ones)).isTrue();
+
+ Variable intNegatives = ncfile.findVariable("intNegatives");
+ assertThat((Object) intNegatives).isNotNull();
+ assertThat(intNegatives.getDataType()).isEqualTo(DataType.INT);
+ assertThat(intNegatives.attributes().hasAttribute("classify")).isTrue();
+ Array dataintNegatives = intNegatives.read();
+ assertThat(nearlyEquals(dataintNegatives, DATA_all_zeroes)).isTrue();
+
+ Variable intMix = ncfile.findVariable("intMix");
+ assertThat((Object) intMix).isNotNull();
+ assertThat(intMix.getDataType()).isEqualTo(DataType.INT);
+ assertThat(intMix.attributes().hasAttribute("classify")).isTrue();
+ Array dataintMix = intMix.read();
+ assertThat(nearlyEquals(dataintMix, DATA_mixNumbers)).isTrue();
}
}