From ece177944213c5aa7955ec440f02c44f9c6fc433 Mon Sep 17 00:00:00 2001 From: Leo Date: Tue, 25 Jun 2024 14:39:32 -0500 Subject: [PATCH] fix pr comments --- .../main/java/ucar/nc2/filter/Classifier.java | 46 +++++++++---------- .../ncml/enhance/testAddToClassifier.ncml | 8 ++-- .../ucar/nc2/ncml/TestEnhanceClassifier.java | 3 +- 3 files changed, 27 insertions(+), 30 deletions(-) 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 42fa157bd7..6d631d56a9 100644 --- a/cdm/core/src/main/java/ucar/nc2/filter/Classifier.java +++ b/cdm/core/src/main/java/ucar/nc2/filter/Classifier.java @@ -1,47 +1,45 @@ package ucar.nc2.filter; -import java.io.IOException; import ucar.ma2.Array; import ucar.ma2.IndexIterator; -import ucar.nc2.NetcdfFile; import ucar.nc2.Variable; -import ucar.nc2.dataset.NetcdfDatasets; -import ucar.nc2.dataset.VariableDS; +import ucar.nc2.constants.CDM; import ucar.nc2.Attribute; import java.util.ArrayList; import java.util.List; -import java.util.Arrays; + public class Classifier implements Enhancement { - private Classifier classifier = null; - private static Classifier emptyClassifier; private int classifiedVal; private List AttCat; private List rules = new ArrayList<>(); - public static Classifier createFromVariable(VariableDS var) { - try { - Array arr = var.read(); - return emptyClassifier(); - } catch (IOException e) { - return emptyClassifier(); - } - } - - public static Classifier emptyClassifier() { - emptyClassifier = new Classifier(); - return emptyClassifier; + // Constructor with no arguments + public Classifier() { + this.AttCat = new ArrayList<>(); + this.rules = new ArrayList<>(); } - /** Enough of a constructor */ - public Classifier() {} - + // Constructor with attributes public Classifier(List AttCat) { this.AttCat = AttCat; this.rules = loadClassificationRules(); + } + + // Factory method to create a Classifier from a Variable + public static Classifier createFromVariable(Variable var) { + + List attributes = var.getAttributes(); + + if (var.attributes().hasAttribute(CDM.RANGE_CAT)) { + return new Classifier(attributes); + } else { + return new Classifier(); + } } + public int[] classifyWithAttributes(Array arr) { int[] classifiedArray = new int[(int) arr.getSize()]; IndexIterator iterArr = arr.getIndexIterator(); @@ -95,7 +93,7 @@ public int classifyArrayAttribute(double val) { } // Method to load classification rules from the attributes - public List loadClassificationRules() { + private List loadClassificationRules() { for (Attribute attribute : this.AttCat) { int[] rule = stringToIntArray(attribute.getStringValue()); this.rules.add(rule); @@ -105,7 +103,7 @@ public List loadClassificationRules() { @Override public double convert(double val) { - return emptyClassifier.classifyArray(val); + return classifyArray(val); } public static int[] stringToIntArray(String str) { diff --git a/cdm/core/src/test/data/ncml/enhance/testAddToClassifier.ncml b/cdm/core/src/test/data/ncml/enhance/testAddToClassifier.ncml index 2e16ea0f15..596be01b54 100644 --- a/cdm/core/src/test/data/ncml/enhance/testAddToClassifier.ncml +++ b/cdm/core/src/test/data/ncml/enhance/testAddToClassifier.ncml @@ -8,10 +8,10 @@ - - - - + + + + -500000 NaN -10 0 1 2 3 11 25 29 NaN 100 150 121 102 199999 12211 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 6a10ff03b1..a0b223027b 100644 --- a/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhanceClassifier.java +++ b/cdm/core/src/test/java/ucar/nc2/ncml/TestEnhanceClassifier.java @@ -127,8 +127,7 @@ public void testEnhanceClassifier_classification() throws IOException { assertThat((Object) Classify_Specsx).isNotNull(); assertThat(!Classify_Specsx.attributes().isEmpty()).isTrue(); Array Data = Classify_Specsx.read(); - List Whatever = Classify_Specsx.getAttributes(); - Classifier classifier = new Classifier(Whatever); + Classifier classifier = Classifier.createFromVariable(Classify_Specsx); int[] ClassifiedArray = classifier.classifyWithAttributes(Data); assertThat(nearlyEquals(Array.makeFromJavaArray(ClassifiedArray), CLASSIFICATION_TEST)).isTrue();