From 941737a7ab66b605a948203900a0d05f9444fbee Mon Sep 17 00:00:00 2001 From: Jamie Mac Date: Fri, 18 Feb 2022 16:22:34 +0000 Subject: [PATCH] Updates and bug fixes to click train detector and CPOD importer --- .../classification/CTClassifierManager.java | 13 +++-- .../classification/CTClassifierParams.java | 2 +- .../idiClassifier/IDIClassification.java | 2 +- .../idiClassifier/IDIClassifier.java | 8 ++- .../Chi2CTClassification.java | 2 +- .../StandardClassification.java | 15 ++---- .../StandardClassificationJSON.java | 54 +++++++++++++++++++ .../StandardClassifier.java | 42 ++++++++++++--- .../StandardClassifierParams.java | 9 ++++ .../mht/mhtMAT/MHTClassifierMAT.java | 3 +- .../StandardClassifierPane.java | 19 ++++--- src/cpod/fx/CPODSettingsPane.java | 5 ++ .../menuOptions/MLExport/MLClickExport.java | 4 -- .../overlaymark/popUpMenu/TDMenuPane.java | 6 +-- 14 files changed, 142 insertions(+), 42 deletions(-) diff --git a/src/clickTrainDetector/classification/CTClassifierManager.java b/src/clickTrainDetector/classification/CTClassifierManager.java index 45261fdd..1c0af211 100644 --- a/src/clickTrainDetector/classification/CTClassifierManager.java +++ b/src/clickTrainDetector/classification/CTClassifierManager.java @@ -158,7 +158,7 @@ public class CTClassifierManager { //first check the pre-classifier Chi2CTClassification classification = this.preClassifier.classifyClickTrain(ctDataUnit); - Debug.out.println("Pre classifier: " + PamCalendar.formatDateTime(ctDataUnit.getTimeMilliseconds()) + " N. " + ctDataUnit.getSubDetectionsCount() + "UID first: " + ctDataUnit.getSubDetection(0).getUID() ); + System.out.println("Pre classifier: " + PamCalendar.formatDateTime(ctDataUnit.getTimeMilliseconds()) + " N. " + ctDataUnit.getSubDetectionsCount() + "UID first: " + ctDataUnit.getSubDetection(0).getUID() ); if (classification.getSpeciesID()==CTClassifier.NOSPECIES) { System.out.println("No SPECIES: chi^2" + ctDataUnit.getCTChi2()); @@ -189,12 +189,18 @@ public class CTClassifierManager { ctDataUnit.clearClassifiers(); ctDataUnit.setClassificationIndex(-1); + System.out.println("Classify species: Num classifier " + this.cTClassifiers.size()); - for (int i=0; iCTClassifier.NOSPECIES && !hasBeenClssfd) { + System.out.println("Set classiifcation index: " + i); ctDataUnit.setClassificationIndex(i); //set the classification index. hasBeenClssfd = true; } diff --git a/src/clickTrainDetector/classification/CTClassifierParams.java b/src/clickTrainDetector/classification/CTClassifierParams.java index bb746b10..81af2483 100644 --- a/src/clickTrainDetector/classification/CTClassifierParams.java +++ b/src/clickTrainDetector/classification/CTClassifierParams.java @@ -32,7 +32,7 @@ public class CTClassifierParams implements Cloneable, Serializable, ManagedParam public int speciesFlag = 1; /** - * Easy way to know which classifier the parameter class belong to rather than big instancof statement + * Easy way to know which classifier the parameter class belong to rather than big instance of statement */ public CTClassifierType type; diff --git a/src/clickTrainDetector/classification/idiClassifier/IDIClassification.java b/src/clickTrainDetector/classification/idiClassifier/IDIClassification.java index 2c394c7a..11ded86f 100644 --- a/src/clickTrainDetector/classification/idiClassifier/IDIClassification.java +++ b/src/clickTrainDetector/classification/idiClassifier/IDIClassification.java @@ -81,7 +81,7 @@ public class IDIClassification implements CTClassification { @Override public String getSummaryString() { - return String.format("IDI Classifier: Mean IDI %.4f\u00B0/s Median IDI %.4f\u00B0/s Std IDI%.4f\u00B0/s", + return String.format("IDI Classifier: Mean IDI %.5fs Median IDI %.5fs Std IDI%.5fs", meanIDI, medianIDI, stdIDI); } diff --git a/src/clickTrainDetector/classification/idiClassifier/IDIClassifier.java b/src/clickTrainDetector/classification/idiClassifier/IDIClassifier.java index 57b720ed..ce870aeb 100644 --- a/src/clickTrainDetector/classification/idiClassifier/IDIClassifier.java +++ b/src/clickTrainDetector/classification/idiClassifier/IDIClassifier.java @@ -37,7 +37,13 @@ public class IDIClassifier implements CTClassifier { //check IDI classification is passed boolean passesIDI = checkIDIMeasurements(clickTrain); - return null; + int speciesID = CTClassifier.NOSPECIES; + if (passesIDI) { + speciesID = idiParams.speciesFlag; + } + + return new IDIClassification( speciesID, clickTrain.getIDIInfo().medianIDI, clickTrain.getIDIInfo().meanIDI, clickTrain.getIDIInfo().stdIDI); + } @Override diff --git a/src/clickTrainDetector/classification/simplechi2classifier/Chi2CTClassification.java b/src/clickTrainDetector/classification/simplechi2classifier/Chi2CTClassification.java index c478ad3e..22ef818e 100644 --- a/src/clickTrainDetector/classification/simplechi2classifier/Chi2CTClassification.java +++ b/src/clickTrainDetector/classification/simplechi2classifier/Chi2CTClassification.java @@ -50,7 +50,7 @@ public class Chi2CTClassification implements CTClassification { @Override public String getSummaryString() { - return "Simple X\u00b2 Clssfr: Species ID: " + this.getSpeciesID(); + return "X\u00b2 Clssfr: Species ID: " + this.getSpeciesID(); } @Override diff --git a/src/clickTrainDetector/classification/standardClassifier/StandardClassification.java b/src/clickTrainDetector/classification/standardClassifier/StandardClassification.java index 804d169a..554f2b0c 100644 --- a/src/clickTrainDetector/classification/standardClassifier/StandardClassification.java +++ b/src/clickTrainDetector/classification/standardClassifier/StandardClassification.java @@ -1,10 +1,8 @@ package clickTrainDetector.classification.standardClassifier; -import clickTrainDetector.ClickTrainControl; import clickTrainDetector.classification.CTClassification; import clickTrainDetector.classification.CTClassifierType; import clickTrainDetector.classification.ClassifierJSONLogging; -import clickTrainDetector.classification.bearingClassifier.BearingClassifierJSON; /** * A classification object for a standard classification @@ -14,12 +12,6 @@ import clickTrainDetector.classification.bearingClassifier.BearingClassifierJSON */ public class StandardClassification implements CTClassification { - /** - * Reference to the click control. - */ - private ClickTrainControl clickTrainControl; - - /** * The current species ID. */ @@ -31,17 +23,16 @@ public class StandardClassification implements CTClassification { private CTClassification[] ctClassifications; - /** * Standard classifier JSON logging. */ private StandardClassificationJSON standardClassifierJSONLogging; - public StandardClassification(ClickTrainControl clickTrainControl, CTClassification[] ctClassifications, int speciesID) { - this.clickTrainControl=clickTrainControl; + public StandardClassification(CTClassification[] ctClassifications, int speciesID) { this.ctClassifications=ctClassifications; - standardClassifierJSONLogging = new StandardClassificationJSON(); + standardClassifierJSONLogging = new StandardClassificationJSON(ctClassifications); + this.speciesID=speciesID; } diff --git a/src/clickTrainDetector/classification/standardClassifier/StandardClassificationJSON.java b/src/clickTrainDetector/classification/standardClassifier/StandardClassificationJSON.java index 58643085..3016ba2d 100644 --- a/src/clickTrainDetector/classification/standardClassifier/StandardClassificationJSON.java +++ b/src/clickTrainDetector/classification/standardClassifier/StandardClassificationJSON.java @@ -1,9 +1,63 @@ package clickTrainDetector.classification.standardClassifier; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonNode; + +import clickTrainDetector.classification.CTClassification; import clickTrainDetector.classification.SimpleClassifierJSONLogging; + +/** + * Standard classification JSON logging + * + * @author Jamie Macaulay + * + */ public class StandardClassificationJSON extends SimpleClassifierJSONLogging { + private CTClassification[] standardClassifier; + + /** + * Create the JSON logging for standard classifier. + * @param ctClassifications - the standard classifier. + */ + public StandardClassificationJSON(CTClassification[] ctClassifications) { + this.standardClassifier=ctClassifications; + } + + + @Override + public void writeJSONData(JsonGenerator jg, CTClassification ctClassification) { + for (int i=0; i(); - classifiers.add(new Chi2ThresholdClassifier(clickTrainControl, standardClssfrParams.speciesFlag)); + classifiers.add(new Chi2ThresholdClassifier(clickTrainControl, SUB_CLASSIFIER_SPECIESID)); - classifiers.add(new IDIClassifier(clickTrainControl, standardClssfrParams.speciesFlag)); + classifiers.add(new IDIClassifier(clickTrainControl,SUB_CLASSIFIER_SPECIESID)); - classifiers.add(new CTTemplateClassifier(clickTrainControl, standardClssfrParams.speciesFlag)); + classifiers.add(new CTTemplateClassifier(clickTrainControl, SUB_CLASSIFIER_SPECIESID)); - classifiers.add(new BearingClassifier(clickTrainControl, standardClssfrParams.speciesFlag)); + classifiers.add(new BearingClassifier(clickTrainControl, SUB_CLASSIFIER_SPECIESID)); setClassifierParams(); } @@ -101,11 +106,32 @@ public class StandardClassifier implements CTClassifier { @Override public CTClassification classifyClickTrain(CTDataUnit clickTrain) { + int speciesID = standardClssfrParams.speciesFlag; - //all classifiers have to pass. - + System.out.println("Standard Classificiation: " ); - return null; + //all classifiers have to pass. + CTClassification[] ctClassification = new CTClassification[classifiers.size()]; + for (int i=0; iCTClassifier.NOSPECIES && !hasBeenClssfd) { -// System.out.println("Set classiifcation index: " + i); dataUnit.setClassificationIndex(i); //set the classification index. hasBeenClssfd = true; } diff --git a/src/clickTrainDetector/layout/classification/standardClassifier/StandardClassifierPane.java b/src/clickTrainDetector/layout/classification/standardClassifier/StandardClassifierPane.java index 0d621cf5..7393fbeb 100644 --- a/src/clickTrainDetector/layout/classification/standardClassifier/StandardClassifierPane.java +++ b/src/clickTrainDetector/layout/classification/standardClassifier/StandardClassifierPane.java @@ -26,6 +26,8 @@ public class StandardClassifierPane extends SettingsPane{ standardClassifier.getClassifiers().get(ii).getCTClassifierGraphics().getCTClassifierPane().setDisable(!enableSwitch[ii].isSelected()); - label.setDisable(!enableSwitch[ii].isSelected()); + labels[ii].setDisable(!enableSwitch[ii].isSelected()); }); PamHBox hBox = new PamHBox(); hBox.setSpacing(5); - hBox.getChildren().addAll(enableSwitch[i], label); + hBox.getChildren().addAll(enableSwitch[i], labels[i]); - - vBox.getChildren().addAll(hBox, standardClassifier.getClassifiers().get(i).getCTClassifierGraphics().getCTClassifierPane()); } return vBox; } + + private void disableClassifierPane(int ii) { + standardClassifier.getClassifiers().get(ii).getCTClassifierGraphics().getCTClassifierPane().setDisable(!enableSwitch[ii].isSelected()); + labels[ii].setDisable(!enableSwitch[ii].isSelected()); + } @Override public StandardClassifierParams getParams(StandardClassifierParams currParams) { @@ -78,6 +84,7 @@ public class StandardClassifierPane extends SettingsPane { //have a look through the files and check that there are some files to import. for (int i=0; i cp1 = (List) FileUtils.listFiles(folder, new String[]{CPODFileType.values()[i].getText()}, this.subFolder.isSelected()); System.out.println("Files out: " + cp1); files.addAll(cp1); + } + catch (Exception e) { + System.err.println("Current directory does not exist: " + folder ); + } } } diff --git a/src/dataPlotsFX/overlaymark/menuOptions/MLExport/MLClickExport.java b/src/dataPlotsFX/overlaymark/menuOptions/MLExport/MLClickExport.java index 9cb1aa4b..d86e3d7a 100644 --- a/src/dataPlotsFX/overlaymark/menuOptions/MLExport/MLClickExport.java +++ b/src/dataPlotsFX/overlaymark/menuOptions/MLExport/MLClickExport.java @@ -1,15 +1,11 @@ package dataPlotsFX.overlaymark.menuOptions.MLExport; -import com.jmatio.types.MLDouble; import com.jmatio.types.MLInt32; -import com.jmatio.types.MLInt64; import com.jmatio.types.MLInt8; import com.jmatio.types.MLStructure; -import PamUtils.PamUtils; import PamguardMVC.PamDataUnit; import clickDetector.ClickDetection; -import whistlesAndMoans.ConnectedRegionDataUnit; /** * Export a click to a MATLAB structure. diff --git a/src/dataPlotsFX/overlaymark/popUpMenu/TDMenuPane.java b/src/dataPlotsFX/overlaymark/popUpMenu/TDMenuPane.java index 756b5f55..ff2df930 100644 --- a/src/dataPlotsFX/overlaymark/popUpMenu/TDMenuPane.java +++ b/src/dataPlotsFX/overlaymark/popUpMenu/TDMenuPane.java @@ -49,7 +49,7 @@ import pamViewFX.fxStyles.PamStylesManagerFX; */ public class TDMenuPane extends PamBorderPane { - public static final int menuWidth=200; + public static final int MENU_WIDTH=200; /** * The current data units. @@ -333,10 +333,10 @@ public class TDMenuPane extends PamBorderPane { flipPane.getFront().getChildren().add(menuPane); flipPane.getBack().getChildren().add(infoPane); - flipPane.setPrefWidth(menuWidth); + flipPane.setPrefWidth(MENU_WIDTH); PamBorderPane holder = new PamBorderPane(flipPane); - holder.setPrefWidth(menuWidth); + holder.setPrefWidth(MENU_WIDTH); return holder;