From af5d21df5f3a4b709a9665757d1426acdf5eaef1 Mon Sep 17 00:00:00 2001 From: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com> Date: Fri, 26 May 2023 10:28:54 +0100 Subject: [PATCH 1/6] updated readme --- README.html | 294 +++++++++--------- .../settings/SettingsImport.java | 21 +- src/PamModel/PamModuleInfo.java | 1 + 3 files changed, 174 insertions(+), 142 deletions(-) diff --git a/README.html b/README.html index a8b1ad86..8db4cc01 100644 --- a/README.html +++ b/README.html @@ -463,11 +463,22 @@ name="_Latest_Version_2.02.08">Latest Version 2.02.08 May which mostly occurred when processing large datasets of many offline files, has been fixed.

+

Data Map: “Scroll To Data” pop-up menu, +which didn’t always scroll to the correct place, is now fixed.

+ +

Bearing Localiser offline: If reprocessing +bearings, the localizer was not correctly loading required raw or FFT data to +input to the cross correlation algorithm. This is now fixed so that you can +reprocess bearings in viewer mode.

+ +

Map files: Added additional exception +handlers to handle corrupt map files.

+

New Features

Restart Options: When you restart -processing of offline files, if output data already exist (binary data of -within database tables) you will be asked if you want to overwrite the data, cancel, +processing of offline files, if output data already exist (binary data of within +database tables) you will be asked if you want to overwrite the data, cancel, or try to continue from where to left off.

Updated SoundTrap sud file interface so @@ -486,13 +497,12 @@ angle offsets applied to static hydrophones in viewer mode. This is now fixed. <

Click tool bar: Correctly shows event selection options even if no species classification options are in place.

-

Fixed Landmarks: Earlier versions were -‘losing’ these every time PAMGuard started or new data were loaded in viewer -mode. Now fixed.

+

Fixed Landmarks: Earlier versions were ‘losing’ +these every time PAMGuard started or new data were loaded in viewer mode. Now +fixed.

-

ROCCA: Fixed (another) memory leak which -caused PAMGuard to crash when processing large data sets with the ROCCA classifier. -

+

ROCCA: Fixed (another) memory leak which caused +PAMGuard to crash when processing large data sets with the ROCCA classifier.

Ishmael Modules: Fixed bug which occasionally caused crashes when processing many files offline.

@@ -551,8 +561,8 @@ low DPI screens.

Complete rewrite of the classification system to have nested classifiers which can be enabled or disabled.

-

Changes to classification GUI to -accommodate the new classification system.

+

Changes to classification GUI to accommodate +the new classification system.

Addition of data selectors to the minimum number of clicks accepted by the classifier. This allows the click-by-click @@ -581,8 +591,8 @@ description of the algorithm, screen grabs and examples.

Help documentation for Matched Click Classifier

-

Database logging of offline tasks (such as -click re-classification, bearing calculation, etc.)

+

Database logging of offline tasks (such as click +re-classification, bearing calculation, etc.)

Data selector for Whistle Classifier module

@@ -657,9 +667,8 @@ the TF FX display to crash if no data were displayed.

See major release notes for V 2.02.01 below.

-

Bug 495: TD FX display throws -NullPointerException if user has removed all data units and then moves mouse -over display area.

+

Bug 495: TD FX display throws NullPointerException +if user has removed all data units and then moves mouse over display area.

Version 2.02.01 October 2021

@@ -682,11 +691,11 @@ font-family:"Times New Roman",serif'> 

File Format Change

-

Changes have been made to the binary file format to support -the output of additional noise outputs for certain detectors (See below). -Binary files created with this version will not be compatible with earlier -versions 2.01.### and below. This version will read and may convert earlier -format binary files.

+

Changes have been made to the binary file format to support the +output of additional noise outputs for certain detectors (See below). Binary +files created with this version will not be compatible with earlier versions +2.01.### and below. This version will read and may convert earlier format +binary files.

 

@@ -816,20 +825,20 @@ decimating/upsampling by a non-integer amount

16.        Noise Level Outputs - as an aid to performance diagnosis, some detectors -(currently the GPL, Click Detector and Whistle and Moan Detector) are outputting -additional noise metrics to their binary output files. These can be read with -the PAMGuard -Matlab library and used to diagnose system performance in varying noise -conditions. Improved displays within PAMGuard for these noise metrics will be -included in a future release.

+(currently the GPL, Click Detector and Whistle and Moan Detector) are +outputting additional noise metrics to their binary output files. These can be +read with the PAMGuard +Matlab library and used to diagnose system performance in varying noise conditions. +Improved displays within PAMGuard for these noise metrics will be included in a +future release.

17.        An implementation of the Generalized Power Law Detector, developed by Tyler -Helble ([Helble et al., ‘A generalized power-law detection algorithm for humpback -whale vocalizationsĂ‚Â’, The Journal of the Acoustical Society of America, vol. -131, no. 4, pp. 2682–2699, 2012) is now available. For details, see the -online help

+Helble ([Helble et al., ‘A generalized power-law detection algorithm for +humpback whale vocalizations’, The Journal of the Acoustical Society of +America, vol. 131, no. 4, pp. 2682–2699, 2012) is now available. For +details, see the online help

18.        @@ -941,9 +950,10 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb lang=EN-US> Better auto-scaling in Ishmael Detector graphics window.

7.        -Change to Windows temporary folder location, to get around Windows Security -settings that were preventing some modules from working properly.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Change to Windows temporary folder location, to get around +Windows Security settings that were preventing some modules from working +properly.

@@ -1171,8 +1181,8 @@ lang=EN-US> Bug 436. Bug in Serial Port interface was occassionally causing PAMGuard to crash without error message.

5.        -Bug 437. Right whale detector crashing if no input was set.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Bug 437. Right whale detector crashing if no input was set.

6.        @@ -1244,8 +1254,8 @@ classify clicks.

2.        Added option in Sound Acquisition settings dialog to -override filename time stamp and use PC local time instead.

+lang=EN-US> Added option in Sound Acquisition settings dialog to override +filename time stamp and use PC local time instead.

3.        Added adaptive noise filter to Ishmael Detectors.

5.        Many upgrades to the Sound Playback module, including a -high-pass filter, gain control, and the ability to mix wavefrom and envelope -data together to listen to high-frequency clicks and dolphin whistles at the -same time.

+lang=EN-US> Many upgrades to the Sound Playback module, including a high-pass +filter, gain control, and the ability to mix wavefrom and envelope data +together to listen to high-frequency clicks and dolphin whistles at the same +time.

6.        @@ -1621,9 +1631,9 @@ lang=EN-US> Added decimal degrees option to latitude/longitude dialog.

2.        Added option in the Click Delay parameters to restrict the -number of initial samples used in the calculation. This can be useful for -cleaning up delays in the presence of echoes and small time delays.

+lang=EN-US> Added option in the Click Delay parameters to restrict the number +of initial samples used in the calculation. This can be useful for cleaning up +delays in the presence of echoes and small time delays.

3.        @@ -1721,10 +1731,10 @@ lang=EN-US> Better way of coupling scrollers in User Display panels - see new options in main menu.

2.        -Added Matched Template Click Classifier. Classifies clicks based on an ideal -template to match and a template to reject. An example of this is to classify -beaked whale clicks in an environment with dolphin clicks.

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Added Matched Template Click Classifier. Classifies clicks +based on an ideal template to match and a template to reject. An example of +this is to classify beaked whale clicks in an environment with dolphin clicks.

3.        @@ -1736,10 +1746,10 @@ lang=EN-US> Added ability to read differential GPS data.

5.        Added check for duplicate settings in the psf file when -exiting Pamguard. If duplicate settings are found, user is given the option to -leave them in the psf or get rid of them. Duplicate settings are ignored by -Pamguard, but can cause the psf file to grow large over time.

+lang=EN-US> Added check for duplicate settings in the psf file when exiting +Pamguard. If duplicate settings are found, user is given the option to leave +them in the psf or get rid of them. Duplicate settings are ignored by Pamguard, +but can cause the psf file to grow large over time.

6.        @@ -1884,8 +1894,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb

5.        -Bug 359. Pamguard crashes when selecting auto-scale option in Noise -Monitor module

+Bug 359. Pamguard crashes when selecting auto-scale option in Noise Monitor +module

6.        @@ -1912,8 +1922,8 @@ Beta versions

11.        -Bug 366. Rocca manual whistle contour extraction throws error when -trying to classify a boxed whistle

+Bug 366. Rocca manual whistle contour extraction throws error when trying +to classify a boxed whistle

Upgrades

@@ -1988,8 +1998,8 @@ invalid parameters. Have added diagnostics to prevent this.

Upgrades

1.        -User is now able to specify Soundtrap date/time format

+lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       User is now able to specify Soundtrap date/time format

@@ -2035,8 +2045,8 @@ Upgraded jFLAC library to fix.

7.       -Bug 332. Fixed problem with secondary maps (those not in the main -display) not displaying detections.

+Bug 332. Fixed problem with secondary maps (those not in the main display) +not displaying detections.

8.       @@ -2161,10 +2171,10 @@ so they will no longer work with older PAMGuard versions.

2.                   -Display colour options will be lost and most data displayed -on the map may default to black. This is due to the above changes to how -colours are managed. Changing back to the colours of your choice is relatively -simple through the PAMGuard GUI.

+Display colour options will be lost and most data +displayed on the map may default to black. This is due to the above changes to +how colours are managed. Changing back to the colours of your choice is +relatively simple through the PAMGuard GUI.

 

@@ -2324,8 +2334,8 @@ both 64 bit and 32 bit installations. PAMGuard psf files are now registered in the Windows Registry, so double-clicking on a psf file should run PAMGuard in normal mode (as opposed to Viewer or Mixed modes). Note that the Windows Registry can only hold a single executable reference for psf files; therefore, -for users with multiple installations of PAMGuard, double-clicking on a psf -will run the most-recently installed version of PAMGuard on the system.

+for users with multiple installations of PAMGuard, double-clicking on a psf will +run the most-recently installed version of PAMGuard on the system.

Version 1.15.08 November 2016

@@ -2358,10 +2368,10 @@ high sample rate.

2.       -Bug 305. Date and Time not being correctly -extracted from wav files created using SoundTrap recorders. Fixed by correctly -finding and unpacking information in the accompanying xml log files that come -with SoundTrap files.

+Bug 305. Date and Time not being correctly extracted +from wav files created using SoundTrap recorders. Fixed by correctly finding +and unpacking information in the accompanying xml log files that come with +SoundTrap files.

Version 1.15.06 November 2016

@@ -2488,8 +2498,8 @@ detector has been tidied up so that there are a) All Click, b) Tracked Clicks lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       When tracking online, all the click marking information is written to the same database tables as are used for offline target motion -analysis. This means than when reviewing data offline, the tracks created in real -time are now available for review and further analysis.

+analysis. This means than when reviewing data offline, the tracks created in +real time are now available for review and further analysis.

4.       @@ -2591,9 +2601,9 @@ changes in future releases. New PAMGuard releases will always be able to open older binary files, however, with previous PAMGuard releases if a newer file format was opened, then PAMGuard was unable to check that the file format was newer and would attempt to read the files and might even corrupt them. Now it -will recognise that it cannot open the files, display appropriate error -messages and not attempt to read the files. NOTE that at this time there are no -planned file format changes and that this is purely a future proofing exercise.

+will recognise that it cannot open the files, display appropriate error messages +and not attempt to read the files. NOTE that at this time there are no planned +file format changes and that this is purely a future proofing exercise.

7.        @@ -2719,8 +2729,8 @@ same click multiple times

1.       -Bug 253. Database import fails when Access database -contains queries. Fixed.

+Bug 253. Database import fails when Access database contains +queries. Fixed.

2.       @@ -2794,13 +2804,13 @@ for details.

3.       -GPS Loading into PAMGuard Viewer. This has been -modified so that the rules governing GPS data collection and storage also apply -when loading data from the database. For instance, if you've stored all GPS -data, you've probably got a record every second in the database which can -create memory overflows if you try to load a lot of data in the viewer. You can -now tell PAMGuard to only load a data point every n seconds which will reduce -the number of points loaded. Useful when making large scale overview maps of a +GPS Loading into PAMGuard Viewer. This has been modified +so that the rules governing GPS data collection and storage also apply when +loading data from the database. For instance, if you've stored all GPS data, +you've probably got a record every second in the database which can create +memory overflows if you try to load a lot of data in the viewer. You can now +tell PAMGuard to only load a data point every n seconds which will reduce the +number of points loaded. Useful when making large scale overview maps of a survey.

4.http://dev.mysql.com/downloads/mysq

6.              -Changed Rocca Measurement menu item to open a window -containing click events, instead of a submenu listing click events.  Using -a window simplifies multiple event selections

+Changed Rocca Measurement menu item to open a window containing +click events, instead of a submenu listing click events.  Using a window +simplifies multiple event selections

7.              @@ -3099,8 +3109,9 @@ to read on a time. Fixed

Menu Layout

-

The PAMGuard menus have been rearranged into a more intuitive -grouping which we believe will help users find functionality more easily.

+

The PAMGuard menus have been rearranged into a more +intuitive grouping which we believe will help users find functionality more +easily.

'Detection' menu has been renamed to 'Settings' since many menu items within this menu were not directly to do with 'Detection'.

@@ -3172,8 +3183,8 @@ correctly calculated in real world coordinates.

Wild ArcGIS Interface (Maps and Mapping group)

This module, developed by Michael Oswald / SWFSC, allows -PAMGuard to output data in a format suitable for display in the WILD ArcGIS marine -mammal survey package. See online help for details.

+PAMGuard to output data in a format suitable for display in the WILD ArcGIS +marine mammal survey package. See online help for details.

Alarms (Utilities Group)

@@ -3230,9 +3241,9 @@ different. Details are available in the online help.

Can now read raw audio data direct from FLAC files. FLAC is a lossless compression -algorithm for audio data. Files, or folders of files are accessed in the same -way as WAV and AIFF files in the Sound Acquisition module. In a future release -we also hope to provide support for writing FLAC files from the sound recorder +algorithm for audio data. Files, or folders of files are accessed in the same way +as WAV and AIFF files in the Sound Acquisition module. In a future release we +also hope to provide support for writing FLAC files from the sound recorder module.

Sound Recorder Module

@@ -3290,8 +3301,8 @@ whistle.

  • Ishmael Detector configuration. It was impossible to correctly configure these detectors and configuration settings were not being saved correctly. This has now been rectified.
  • -
  • Logger forms input of character - data. Was causing an exception when character input fields were cleared.
  • +
  • Logger forms input of character data. + Was causing an exception when character input fields were cleared.
  • Click detector inter click interval display was not working in viewer mode. This has been rectified.
  • Configuration loading. This has @@ -3370,8 +3381,8 @@ to these menus to provide additional information to users.  

    the radar display so that bearings can be shown relative to either the vessel or to true North.

    -

    Better control of data in viewer -mode, making is easy to scroll through and view data for short time periods.

    +

    Better control of data in viewer mode, +making is easy to scroll through and view data for short time periods.

    GPS

    @@ -3475,9 +3486,9 @@ have implemented database storage for output of these modules.

    '         -Radar Display: A bug which stopped the radar display from correctly displaying -bearings to whistles from arrays containing more than two hydrophone elements -has been fixed.

    +Radar Display: A bug which stopped the radar display from correctly +displaying bearings to whistles from arrays containing more than two hydrophone +elements has been fixed.

    '         @@ -3589,8 +3600,8 @@ Symbol'>''         -Bearings can be calculated using the envelope of the waveform rather than -the full waveform. The waveform or envelope can also be filtered prior to +Bearings can be calculated using the envelope of the waveform rather +than the full waveform. The waveform or envelope can also be filtered prior to bearing calculation.

    '         -Whistle classifier has some new features in the classifier training -panel. It is also now possible to export training data files directly from -binary data files.

    +Whistle classifier has some new features in the classifier training panel. +It is also now possible to export training data files directly from binary data +files.

    '         @@ -3746,8 +3757,8 @@ frequency division (i.e. previous versions would convert well from 96kHz to

    Bug fixes

    -

    1. Placement of axes on some displays (array manager and depth -side panel). Problem in 1.9.01 Beta now fixed.

    +

    1. Placement of axes on some displays (array manager and +depth side panel). Problem in 1.9.01 Beta now fixed.

    2. Fixed problems of NMEA read out not restarting after a serial drop out. NMEA now restarts correctly.

    @@ -3782,9 +3793,9 @@ become too bit to fit on a screen.

    PAMGUARD display.

    Windows Installer now sets permissions on PAMGUARD folder so -that don't need to be an administrator in order to create new files in that -directory. Prevents problems especially under Vista/Windows 7 when saving psfs -and recording sounds to the default directory. 

    +that don't need to be an administrator in order to create new files in that directory. +Prevents problems especially under Vista/Windows 7 when saving psfs and +recording sounds to the default directory. 

    Version 1.9.00 Beta April 2010

    @@ -3948,13 +3959,13 @@ channels are assigned to a hydrophone.

    '         -Play back of high frequency wav files through National Instruments (NI) -cards: When analysing wav files, sound can be output at high frequency -(depending on the specification of the NI card). The primary motivation for -this has been to develop a test bed for high frequency sound acquisition -whereby we can play 500kHz recordings of harbour porpoise out of an NI card on -one machine, into NI cards on a different machine which are testing high -frequency versions of the click detector.

    +Play back of high frequency wav files through National Instruments (NI) cards: +When analysing wav files, sound can be output at high frequency (depending on +the specification of the NI card). The primary motivation for this has been to +develop a test bed for high frequency sound acquisition whereby we can play +500kHz recordings of harbour porpoise out of an NI card on one machine, into NI +cards on a different machine which are testing high frequency versions of the +click detector.

    '         @@ -4022,10 +4033,10 @@ synchronisation.

    '         -Wigner time-frequency plot for the click detector. Clicks are NOT automatically -displayed in the Winger window as they are for the waveform and spectrum -windows since the Wigner transformation is very time consuming. Clicks will be -displayed if you select them with the mouse.

    +Wigner time-frequency plot for the click detector. Clicks are NOT +automatically displayed in the Winger window as they are for the waveform and +spectrum windows since the Wigner transformation is very time consuming. Clicks +will be displayed if you select them with the mouse.

    '         @@ -4039,13 +4050,13 @@ Symbol'>'''         -Channel lists in output data streams of Decimator and other modules fixed, -so that when channel numbers change, downstream modules configurations get the -correct list of available channels.

    +Channel lists in output data streams of Decimator and other modules +fixed, so that when channel numbers change, downstream modules configurations +get the correct list of available channels.

    '         @@ -4701,7 +4712,8 @@ Symbol'>''1.0Beta 22 Jan 2008 - Pamguard -starts two releases, core and beta release,

    +class=Heading2Char>1.0Beta 22 Jan 2008 - +Pamguard starts two releases, core and beta release,

    this is the beta release

    @@ -4763,8 +4775,8 @@ Symbol'>''         -Multi animal click tracking with least squares fit calculation of position -on map

    +
    Multi animal click tracking with least squares fit calculation of +position on map

    '         @@ -4819,10 +4831,10 @@ configurable user displays which support real time scrolling spectrograms and radar displays. Detection and localisation information can be optionally displayed on the map display.Map enhancements include improved scrolling whereby the user can click and drag to pan the area. PamGuard can now interface -with MySQL database servers and users can easily select which information is -logged. (This replaces the previous 'flat-file' logging feature). A simulation -module allows virtual vocalising animals to be placed on the map to assist in -training and development. Extensive online user help has been added to PamGuard +with MySQL database servers and users can easily select which information is logged. +(This replaces the previous 'flat-file' logging feature). A simulation module +allows virtual vocalising animals to be placed on the map to assist in training +and development. Extensive online user help has been added to PamGuard Application

    0.03b - first version used in a real 'at sea' environment.18/08/06

    diff --git a/src/PamController/settings/SettingsImport.java b/src/PamController/settings/SettingsImport.java index ac4736a9..2269b3f7 100644 --- a/src/PamController/settings/SettingsImport.java +++ b/src/PamController/settings/SettingsImport.java @@ -1,5 +1,6 @@ package PamController.settings; +import java.io.ByteArrayInputStream; import java.io.EOFException; import java.io.File; import java.io.FileInputStream; @@ -14,6 +15,7 @@ import PamController.PamController; import PamController.PamSettingManager; import PamController.PamSettings; import PamController.PamSettingsGroup; +import PamModel.PamModel; import PamModel.PamModuleInfo; import PamModel.SMRUEnable; import PamView.dialog.PamFileBrowser; @@ -226,7 +228,13 @@ public class SettingsImport { ownerClass = Class.forName(aSet.getOwnerClassName()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block - e.printStackTrace(); +// e.printStackTrace(); + // this is happening since the ownerclassname is not set correctly in psfx files + // so we have to deserialise the data to find the class. +// ownerClass = getClassFromData(aSet.getSerialisedByteArray()); +// ownerClass = PamModuleInfo.findModuleClass(aSet.getUnitType()); + } + if (ownerClass == null) { continue; } if (PamControlledUnit.class.isAssignableFrom(ownerClass)) { @@ -263,6 +271,17 @@ public class SettingsImport { return groupedSettings; } + + private Class getClassFromData(byte[] data) { + try { + ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data)); + Object obj = ois.readObject(); + return obj.getClass(); + } catch (Exception e) { + return null; + } + + } private SettingsImportGroup findGroup(ArrayList groupedSettings, String unitName) { for (SettingsImportGroup iG:groupedSettings) { diff --git a/src/PamModel/PamModuleInfo.java b/src/PamModel/PamModuleInfo.java index 1f4edc3a..8284e145 100644 --- a/src/PamModel/PamModuleInfo.java +++ b/src/PamModel/PamModuleInfo.java @@ -282,6 +282,7 @@ public class PamModuleInfo implements PamDependent{ return moduleClass; } + public static JMenu getModulesMenu(Frame parentFrame) { From d24687dfe9de27a6adb00b5ef8f0576e87f6f2dd Mon Sep 17 00:00:00 2001 From: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com> Date: Fri, 26 May 2023 17:07:18 +0100 Subject: [PATCH 2/6] changes to plugins small change in function that finds plugins to make it easier to add temporary ones while developing. --- src/PamController/PamguardVersionInfo.java | 2 +- src/PamModel/PamModel.java | 36 +++------------------- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/src/PamController/PamguardVersionInfo.java b/src/PamController/PamguardVersionInfo.java index b83f6404..3cf926b6 100644 --- a/src/PamController/PamguardVersionInfo.java +++ b/src/PamController/PamguardVersionInfo.java @@ -36,7 +36,7 @@ public class PamguardVersionInfo { /** * Release date */ - static public final String date = "9 May 2023"; + static public final String date = "26 May 2023"; // /** // * Release type - Beta or Core diff --git a/src/PamModel/PamModel.java b/src/PamModel/PamModel.java index 4ce627dc..8c2b3bda 100644 --- a/src/PamModel/PamModel.java +++ b/src/PamModel/PamModel.java @@ -45,14 +45,10 @@ import fftManager.FFTDataUnit; import fftManager.PamFFTControl; import group3dlocaliser.Group3DLocaliserControl; import meygenturbine.MeygenTurbine; -import networkTransfer.receive.BuoyStatusDataUnit; -import networkTransfer.receive.NetworkReceiver; import printscreen.PrintScreenControl; import rockBlock.RockBlockControl; import turbineops.TurbineOperationControl; import GPS.GpsDataUnit; -import Map.MapController; -import Map.gridbaselayer.GridbaseControl; import NMEA.NMEADataUnit; import PamController.PamControlledUnitSettings; import PamController.PamController; @@ -66,7 +62,6 @@ import PamguardMVC.PamDataBlock; import analogarraysensor.ArraySensorControl; import backupmanager.BackupManager; import beamformer.continuous.BeamFormerControl; -import beamformer.localiser.BeamFormLocaliserControl; import bearinglocaliser.BearingLocaliserControl; import binaryFileStorage.SecondaryBinaryStore; import cepstrum.CepstrumControl; @@ -1067,7 +1062,7 @@ final public class PamModel implements PamModelInterface, PamSettings { // clear the current list pluginList.clear(); daqList.clear(); - + /* * If developing a new PAMPlugin in eclipse, the easiest way to do it is to make a new * Eclipse project for your plugin code. Within that project, copy this PamModel class @@ -1082,7 +1077,6 @@ final public class PamModel implements PamModelInterface, PamSettings { * When you export the code for your plugin to a jar file, remember to NOT inlcude the copy of * PamModel ! */ - // Load up whatever default classloader was used to create this class. Must use the same classloader // for all plugins, or else we will not be able to create proper dependencies between them or be able @@ -1150,30 +1144,11 @@ final public class PamModel implements PamModelInterface, PamSettings { // to add that URL to the default classloader path. URL newURL = jarList.get(i).toURI().toURL(); - // original method -// Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); -// method.setAccessible(true); -// method.invoke(cl, newURL); - - // first fix attempt - create a brand new URLClassLoader. As expected, we get a ClassCastException when trying - // to load the parameters so we can't save params using this method -// URL[] newURLArray = new URL[1]; -// newURLArray[0] = newURL; -// cl = new URLClassLoader(newURLArray); // second attempt - custom class loader with the system app loader specified as the parent. Loads controlled unit, but // as before it doesn't load the parameters classLoader.addURL(newURL); - // third attempt -// Class genericClass = cl.getClass(); -// Method method = genericClass.getSuperclass().getDeclaredMethod("addURL", new Class[] {URL.class}); -// method.setAccessible(true); -// method.invoke(cl, new Object[] {newURL}); - - - - // Save the name of the class to the global pluginBeingLoaded variable, and load the class. this.setPluginBeingLoaded(className); // Class c = cl.loadClass(className); @@ -1254,9 +1229,8 @@ final public class PamModel implements PamModelInterface, PamSettings { "for help.

    " + "This plug-in will not be available for loading"; String help = null; - int ans = WarnOnce.showWarning(PamController.getMainFrame(), title, msg, WarnOnce.WARNING_MESSAGE, help, e1); + int ans = WarnOnce.showWarning(PamController.getInstance().getGuiFrameManager().getFrame(0), title, msg, WarnOnce.WARNING_MESSAGE, help, e1); System.err.println("Exception while loading " + className); - System.err.println(e1.getMessage()); continue; } } @@ -1269,7 +1243,7 @@ final public class PamModel implements PamModelInterface, PamSettings { "for help.

    " + "This plug-in will not be available for loading"; String help = null; - int ans = WarnOnce.showWarning(PamController.getMainFrame(), title, msg, WarnOnce.WARNING_MESSAGE, help, ex); + int ans = WarnOnce.showWarning(PamController.getInstance().getGuiFrameManager().getFrame(0), title, msg, WarnOnce.WARNING_MESSAGE, help, ex); System.err.println("Exception while loading " + jarList.get(i).getName()); continue; } @@ -1294,7 +1268,7 @@ final public class PamModel implements PamModelInterface, PamSettings { // instantiate the plugin control class using the custom class loader try { - File classFile = new File(pf.getJarFile()); +// File classFile = new File(pf.getJarFile()); //URLClassLoader cl = new URLClassLoader(new URL[]{classFile.toURI().toURL()}); // mi = PamModuleInfo.registerControlledUnit(pf.getClassName(), pf.getDescription(),cl); mi = PamModuleInfo.registerControlledUnit(pf.getClassName(), pf.getDescription(),classLoader); @@ -1360,7 +1334,7 @@ final public class PamModel implements PamModelInterface, PamSettings { "for help.

    " + "This plug-in will not be available for loading"; String help = null; - int ans = WarnOnce.showWarning(PamController.getMainFrame(), title, msg, WarnOnce.WARNING_MESSAGE, help, e1); + int ans = WarnOnce.showWarning(PamController.getInstance().getGuiFrameManager().getFrame(0), title, msg, WarnOnce.WARNING_MESSAGE, help, e1); System.err.println("Exception while loading " + pf.getDefaultName()); pluginList.remove(pf); continue; From a8699086cee8eaadf8d8ddc8e0dbae410afe4c20 Mon Sep 17 00:00:00 2001 From: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com> Date: Tue, 30 May 2023 14:59:53 +0100 Subject: [PATCH 3/6] GPS NMEA Initials Add a wildcard option so that GPS will use any valid RMC or GGA string irrespective of the first to characters of the string name. --- src/Acquisition/filetypes/SUDFileType.java | 2 +- src/GPS/GPSControl.java | 25 +++++++++++++ src/GPS/GPSParameters.java | 2 ++ src/GPS/GPSParametersDialog.java | 34 ++++++++++++------ src/GPS/ProcessNmeaData.java | 21 +++++------ src/GPS/UpdateClockDialog.java | 5 +-- .../mapping/NMEA/docs/ConfiguringGPS.html | 5 ++- .../mapping/NMEA/docs/images/GPSOptions1.png | Bin 16360 -> 13783 bytes 8 files changed, 70 insertions(+), 24 deletions(-) diff --git a/src/Acquisition/filetypes/SUDFileType.java b/src/Acquisition/filetypes/SUDFileType.java index 80fd0a36..ef1d8a7a 100644 --- a/src/Acquisition/filetypes/SUDFileType.java +++ b/src/Acquisition/filetypes/SUDFileType.java @@ -22,7 +22,7 @@ public class SUDFileType extends SoundFileType { if (isShown) { return; } - WarnOnce.showWarning("SoundTrap SUD Files", sudInfoText, WarnOnce.OK_OPTION); +// WarnOnce.showWarning("SoundTrap SUD Files", sudInfoText, WarnOnce.OK_OPTION); isShown = true; } diff --git a/src/GPS/GPSControl.java b/src/GPS/GPSControl.java index d4434f5a..4bbca604 100644 --- a/src/GPS/GPSControl.java +++ b/src/GPS/GPSControl.java @@ -245,6 +245,31 @@ public class GPSControl extends PamControlledUnit implements PamSettings, Positi public GpsDataUnit getShipPosition(long timeMilliseconds) { return getGpsDataBlock().getClosestUnitMillis(timeMilliseconds); } + /** + * Do we want this string ? It will be either RMC or GGA and may want wildcarding + * @param stringId + * @return + */ + public boolean wantString(String stringId) { + if (stringId == null || stringId.length() < 6) { + return false; + } + if (gpsControl.gpsParameters.allowWildcard) { + String lastBit = stringId.substring(3, 6); + switch (gpsControl.gpsParameters.mainString) { + case GPSParameters.READ_RMC: + return lastBit.equals("RMC"); + case GPSParameters.READ_GGA: + return lastBit.equals("GGA"); + default: + return false; + } + } + else { + String wantedString = gpsControl.getWantedString(); + return stringId.equals(wantedString); + } + } /** * Get the name of the string we're wanting. diff --git a/src/GPS/GPSParameters.java b/src/GPS/GPSParameters.java index 1046907f..719a59ca 100644 --- a/src/GPS/GPSParameters.java +++ b/src/GPS/GPSParameters.java @@ -59,6 +59,8 @@ public class GPSParameters implements Serializable, Cloneable, ManagedParameters public String rmcInitials = "GP"; public String ggaInitials = "GP"; + public boolean allowWildcard = true; + /** * Attempt to read true heading information */ diff --git a/src/GPS/GPSParametersDialog.java b/src/GPS/GPSParametersDialog.java index 73180239..6c54f139 100644 --- a/src/GPS/GPSParametersDialog.java +++ b/src/GPS/GPSParametersDialog.java @@ -149,9 +149,9 @@ public class GPSParametersDialog extends PamDialog { } } public static GPSParameters showDialog(Frame parentFrame, GPSParameters gpsParameters) { - if (parentFrame != lastFrame || gpsParametersDialog == null) { +// if (parentFrame != lastFrame || gpsParametersDialog == null) { gpsParametersDialog = new GPSParametersDialog(parentFrame); - } +// } gpsParametersDialog.gpsParameters = gpsParameters.clone(); gpsParametersDialog.setParams(); gpsParametersDialog.setVisible(true); @@ -335,6 +335,7 @@ public class GPSParametersDialog extends PamDialog { JRadioButton ggaString; JTextField rmcInitials; JTextField ggaInitials; + JCheckBox allowWildcard; public MainStringPanel() { super(); setBorder(new TitledBorder("Main Nav' data string")); @@ -344,9 +345,17 @@ public class GPSParametersDialog extends PamDialog { c.fill = GridBagConstraints.HORIZONTAL; ButtonGroup buttonGroup = new ButtonGroup(); - + + c.gridx = 0; + c.gridy++; + c.gridwidth = 5; + this.add(allowWildcard = new JCheckBox("Allow any string initials"), c); + allowWildcard.setToolTipText("Use RMC or GGA data from any source independent of the string initials (e.g. GP, GN, etc.)"); + c.gridy ++; + c.gridwidth = 1; + c.gridx=0; addComponent(this, new JLabel("RMC String"), c); - c.gridx++; + c.gridx ++; addComponent(this, rmcString = new JRadioButton(""), c); c.gridx++; addComponent(this, rmcInitials = new JTextField(2), c); @@ -355,6 +364,7 @@ public class GPSParametersDialog extends PamDialog { c.gridx = 0; c.gridy ++; + c.gridwidth = 1; addComponent(this, new JLabel("GGA String"), c); c.gridx++; addComponent(this, ggaString = new JRadioButton(""), c); @@ -363,6 +373,7 @@ public class GPSParametersDialog extends PamDialog { c.gridx++; addComponent(this, new JLabel(" GGA"), c); + allowWildcard.addActionListener(this); rmcString.addActionListener(this); ggaString.addActionListener(this); buttonGroup.add(rmcString); @@ -374,10 +385,12 @@ public class GPSParametersDialog extends PamDialog { ggaString.setSelected(gpsParameters.mainString == GPSParameters.READ_GGA); rmcInitials.setText(gpsParameters.rmcInitials); ggaInitials.setText(gpsParameters.ggaInitials); + allowWildcard.setSelected(gpsParameters.allowWildcard); enableControls(); } public boolean getParams() { + gpsParameters.allowWildcard = allowWildcard.isSelected(); if (ggaString.isSelected()) { gpsParameters.mainString = GPSParameters.READ_GGA; } @@ -385,12 +398,12 @@ public class GPSParametersDialog extends PamDialog { gpsParameters.mainString = GPSParameters.READ_RMC; } gpsParameters.rmcInitials = rmcInitials.getText(); - if (gpsParameters.rmcInitials.length() != 2) { - return false; + if (gpsParameters.rmcInitials.length() != 2 && !gpsParameters.allowWildcard) { + return showWarning("Expecting a two character identifier for RMC strings"); } gpsParameters.ggaInitials = ggaInitials.getText(); - if (gpsParameters.ggaInitials.length() != 2) { - return false; + if (gpsParameters.ggaInitials.length() != 2 && !gpsParameters.allowWildcard) { + return showWarning("Expecting a two character identifier for GGA strings"); } return true; } @@ -400,8 +413,9 @@ public class GPSParametersDialog extends PamDialog { } private void enableControls() { - rmcInitials.setEnabled(rmcString.isSelected()); - ggaInitials.setEnabled(ggaString.isSelected()); + boolean wild = allowWildcard.isSelected(); + rmcInitials.setEnabled(rmcString.isSelected() & !wild); + ggaInitials.setEnabled(ggaString.isSelected() & !wild); } diff --git a/src/GPS/ProcessNmeaData.java b/src/GPS/ProcessNmeaData.java index ca1d4cd3..b293a0c6 100644 --- a/src/GPS/ProcessNmeaData.java +++ b/src/GPS/ProcessNmeaData.java @@ -57,7 +57,7 @@ public class ProcessNmeaData extends PamProcess { private GpsLogger gpsLogger; - private String wantedString = "$GPRMC"; +// private String wantedString = "$GPRMC"; private GpsDataUnit previousUnit = null; @@ -161,7 +161,7 @@ public class ProcessNmeaData extends PamProcess { @Override public void noteNewSettings() { findNMEADataBlock(); - setWantedString(); +// setWantedString(); double minRate = Math.max(.2, 1./gpsController.gpsParameters.readInterval); processCheck.getOutputCounter().setMinRate(minRate); } @@ -179,7 +179,8 @@ public class ProcessNmeaData extends PamProcess { StringBuffer nmeaString = nmeaData.getCharData(); String stringId = NMEADataBlock.getSubString(nmeaString, 0); - if (stringId.equalsIgnoreCase(wantedString)) { +// if (stringId.equalsIgnoreCase(wantedString)) { + if (gpsController.wantString(stringId)) { gpsData = new GpsData(nmeaString, gpsController.gpsParameters.mainString); // GpsData constructor which // unpacks the string. if (gpsData.isDataOk()) { @@ -316,13 +317,13 @@ public class ProcessNmeaData extends PamProcess { super.clearOldData(); } - public String getWantedString() { - return wantedString; - } - - public void setWantedString() { - wantedString = gpsController.getWantedString(); - } +// public String getWantedString() { +// return wantedString; +// } +// +// public void setWantedString() { +// wantedString = gpsController.getWantedString(); +// } public GPSControl getGpsController() { return gpsController; diff --git a/src/GPS/UpdateClockDialog.java b/src/GPS/UpdateClockDialog.java index 9c266b64..03a33bf1 100644 --- a/src/GPS/UpdateClockDialog.java +++ b/src/GPS/UpdateClockDialog.java @@ -221,9 +221,8 @@ public class UpdateClockDialog extends JDialog implements ActionListener, PamObs // NMEADataBlock nmeaDataBlock = (NMEADataBlock) o; NMEADataUnit nmeaDataUnit = (NMEADataUnit) arg; StringBuffer nmeaData = nmeaDataUnit.getCharData(); - String wantedString = gpsControl.getWantedString(); String stringId = NMEADataBlock.getSubString(nmeaData, 0); - if (wantedString.equals(stringId) == false) { + if (gpsControl.wantString(stringId) == false) { return; } if (gpsControl.gpsParameters.mainString == GPSParameters.READ_GGA) { @@ -232,6 +231,8 @@ public class UpdateClockDialog extends JDialog implements ActionListener, PamObs newRMCData(nmeaData); } } + + @Override public void updateData(PamObservable observable, PamDataUnit pamDataUnit) { // TODO Auto-generated method stub diff --git a/src/help/mapping/NMEA/docs/ConfiguringGPS.html b/src/help/mapping/NMEA/docs/ConfiguringGPS.html index 29bc1eda..6c2e9ce6 100644 --- a/src/help/mapping/NMEA/docs/ConfiguringGPS.html +++ b/src/help/mapping/NMEA/docs/ConfiguringGPS.html @@ -36,7 +36,10 @@ From the Detection Menu, select GPS>GPS Options

    On very rare occasions, if the GPS data have been multiplexed through some other instruments, the first two characters of the string identifier are changed. If this is the case, it may also be necessary to set these -so that the GPS module can identify the appropriate data. +so that the GPS module can identify the appropriate data. As an alternative, select the "Allow and string initials" option +which will use any valid RMC or GGA string. Note however, that with a complex NMEA system there may be more than one GPS and +it is better to select only strings from the most accurate

    +

    Read Options

    Three options for reading and storing GPS data are available.

    diff --git a/src/help/mapping/NMEA/docs/images/GPSOptions1.png b/src/help/mapping/NMEA/docs/images/GPSOptions1.png index 02f26ec156b1d66c02ef0421d82a2d6354d65d81..339640518e6b0a1fff47b881a8c73d595c475d28 100644 GIT binary patch literal 13783 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 literal 16360 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 From 62148351c6a8b5247608aa9398abc8256ae0c531 Mon Sep 17 00:00:00 2001 From: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com> Date: Tue, 30 May 2023 15:27:29 +0100 Subject: [PATCH 4/6] Release V2.02.08 --- README.html | 386 +++++++++++---------- src/PamController/PamguardVersionInfo.java | 2 +- 2 files changed, 195 insertions(+), 193 deletions(-) diff --git a/README.html b/README.html index 8db4cc01..601738b5 100644 --- a/README.html +++ b/README.html @@ -471,38 +471,44 @@ bearings, the localizer was not correctly loading required raw or FFT data to input to the cross correlation algorithm. This is now fixed so that you can reprocess bearings in viewer mode.

    -

    Map files: Added additional exception -handlers to handle corrupt map files.

    +

    Map files: Added additional exception handlers +to handle corrupt map files.

    New Features

    Restart Options: When you restart -processing of offline files, if output data already exist (binary data of within -database tables) you will be asked if you want to overwrite the data, cancel, -or try to continue from where to left off.

    +processing of offline files, if output data already exist (binary data of +within database tables) you will be asked if you want to overwrite the data, +cancel, or try to continue from where to left off.

    Updated SoundTrap sud file interface so that PAMGuard now extracts and stores the Click Detector settings from the sud files and stores them within the PAMGuard configuration. This does not affect processing, but is important for record keeping.

    +

    GPS options to use any valid RMC or GGA +string. Not all GPS receivers output their RMC data as GPRMC – e.g. some may +output as GNRMC. A new option allows the GPS module to use any string, whatever +the first two characters of the string name may be.

    +

    Version 2.02.07 January 2023

    Bug Fixes

    Use of localization sensor and orientation -data for static hydrophones had a bug whereby it would continually ‘forget’ -angle offsets applied to static hydrophones in viewer mode. This is now fixed.

    +data for static hydrophones had a bug whereby it would continually ‘forget’ angle +offsets applied to static hydrophones in viewer mode. This is now fixed.

    Click tool bar: Correctly shows event selection options even if no species classification options are in place.

    -

    Fixed Landmarks: Earlier versions were ‘losing’ -these every time PAMGuard started or new data were loaded in viewer mode. Now -fixed.

    +

    Fixed Landmarks: Earlier versions were +‘losing’ these every time PAMGuard started or new data were loaded in viewer +mode. Now fixed.

    -

    ROCCA: Fixed (another) memory leak which caused -PAMGuard to crash when processing large data sets with the ROCCA classifier.

    +

    ROCCA: Fixed (another) memory leak which +caused PAMGuard to crash when processing large data sets with the ROCCA +classifier.

    Ishmael Modules: Fixed bug which occasionally caused crashes when processing many files offline.

    @@ -519,10 +525,10 @@ generates random chirps between around 200 and 800Hz, roughly the frequency you’d expect sound from higher frequency baleen whales, such as humpbacks, to vocalise at.   

    -

    Hiding tool tips. A menu item to -permanently turn off all tool tips, or tap the ‘Esc’ key to turn them off for 6 -seconds if they are getting in the way, particularly when trying to interact -with displays using the mouse.

    +

    Hiding tool tips. A menu item to permanently +turn off all tool tips, or tap the ‘Esc’ key to turn them off for 6 seconds if +they are getting in the way, particularly when trying to interact with displays +using the mouse.

    Version 2.02.06 November 2022

    @@ -545,9 +551,9 @@ whistle classification module.

    SoundTrap autonomous recorders from Ocean Instruments, you no longer need to decompress the SoundTrap files prior to processing. This will save time and a lot of disk space. Extraction of clicks from the inbuilt SoundTrap Click -detector can also happen while processing SUD file data with other detectors, -thereby streamlining the whole processing chain. Read the online Help for -details.   

    +detector can also happen while processing SUD file data with other detectors, thereby +streamlining the whole processing chain. Read the online Help for details. +  

    Version 2.02.05 October 2022

    @@ -561,8 +567,8 @@ low DPI screens.

    Complete rewrite of the classification system to have nested classifiers which can be enabled or disabled.

    -

    Changes to classification GUI to accommodate -the new classification system.

    +

    Changes to classification GUI to +accommodate the new classification system.

    Addition of data selectors to the minimum number of clicks accepted by the classifier. This allows the click-by-click @@ -591,8 +597,8 @@ description of the algorithm, screen grabs and examples.

    Help documentation for Matched Click Classifier

    -

    Database logging of offline tasks (such as click -re-classification, bearing calculation, etc.)

    +

    Database logging of offline tasks (such as +click re-classification, bearing calculation, etc.)

    Data selector for Whistle Classifier module

    @@ -667,8 +673,9 @@ the TF FX display to crash if no data were displayed.

    See major release notes for V 2.02.01 below.

    -

    Bug 495: TD FX display throws NullPointerException -if user has removed all data units and then moves mouse over display area.

    +

    Bug 495: TD FX display throws +NullPointerException if user has removed all data units and then moves mouse +over display area.

    Version 2.02.01 October 2021

    @@ -679,23 +686,23 @@ understand the notes listed for Beta Version 2.00.10 before proceeding with installation and use of this version.

    -

    This version of PAMGuard has been bundled with Java 16 -(OpenJDK release), so you will not need to install a java runtime engine -separately. PSFX files generated in previous beta releases (2.xx.xx) should be -compatible with this version, and vice-versa. PSF files generated in core -releases (1.15.xx) can be loaded in this version, but will be converted to PSFX -files when PAMGuard exits.

    +

    This version of PAMGuard has been bundled with Java 16 (OpenJDK +release), so you will not need to install a java runtime engine separately. +PSFX files generated in previous beta releases (2.xx.xx) should be compatible +with this version, and vice-versa. PSF files generated in core releases +(1.15.xx) can be loaded in this version, but will be converted to PSFX files +when PAMGuard exits.

     

    File Format Change

    -

    Changes have been made to the binary file format to support the -output of additional noise outputs for certain detectors (See below). Binary -files created with this version will not be compatible with earlier versions -2.01.### and below. This version will read and may convert earlier format -binary files.

    +

    Changes have been made to the binary file format to support +the output of additional noise outputs for certain detectors (See below). +Binary files created with this version will not be compatible with earlier +versions 2.01.### and below. This version will read and may convert earlier +format binary files.

     

    @@ -732,8 +739,8 @@ params

    3.       Bug -  492. Data Model does not update button//tooltip text when underlying -data changes

    +  492. Data Model does not update button//tooltip text when underlying data +changes

    4.       Bug @@ -809,9 +816,9 @@ Update whistle and moan detector to better handle small stubs or spurs coming off the side of whistles

    13.        -Extend the Hyperbolic Localiser to handle 2D planar arrays (previously limited -to 3D volumetric arrays)

    +lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       Extend the Hyperbolic Localiser to handle 2D planar arrays +(previously limited to 3D volumetric arrays)

    14.        @@ -828,17 +835,17 @@ Noise Level Outputs - as an aid to performance diagnosis, some detectors (currently the GPL, Click Detector and Whistle and Moan Detector) are outputting additional noise metrics to their binary output files. These can be read with the PAMGuard -Matlab library and used to diagnose system performance in varying noise conditions. -Improved displays within PAMGuard for these noise metrics will be included in a -future release.

    +Matlab library and used to diagnose system performance in varying noise +conditions. Improved displays within PAMGuard for these noise metrics will be +included in a future release.

    17.        -An implementation of the Generalized Power Law Detector, developed by Tyler -Helble ([Helble et al., ‘A generalized power-law detection algorithm for -humpback whale vocalizationsĂ‚Â’, The Journal of the Acoustical Society of -America, vol. 131, no. 4, pp. 2682–2699, 2012) is now available. For -details, see the online help

    +lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>       An implementation of the Generalized Power Law Detector, +developed by Tyler Helble ([Helble et al., ‘A generalized power-law +detection algorithm for humpback whale vocalizationsĂ‚Â’, The Journal of the +Acoustical Society of America, vol. 131, no. 4, pp. 2682–2699, 2012) is now +available. For details, see the online help

    18.        @@ -859,11 +866,11 @@ understand the notes listed for Beta Version 2.00.10 before proceeding with installation and use of this version.

    -

    This version of PAMGuard has been bundled with Java 13 -(release 13.0.1). PSFX files generated in previous beta releases (2.xx.xx) -should be compatible with this version, and vice-versa. PSF files generated in -core releases (1.15.xx) can be loaded in this version, but will be converted to -PSFX files when PAMGuard exits.

    +

    This version of PAMGuard has been bundled with Java 13 (release +13.0.1). PSFX files generated in previous beta releases (2.xx.xx) should be +compatible with this version, and vice-versa. PSF files generated in core +releases (1.15.xx) can be loaded in this version, but will be converted to PSFX +files when PAMGuard exits.

    Bug Fixes

    @@ -951,9 +958,8 @@ lang=EN-US> Better auto-scaling in Ishmael Detector graphics window.

    7.        Change to Windows temporary folder location, to get around -Windows Security settings that were preventing some modules from working -properly.

    +lang=EN-US> Change to Windows temporary folder location, to get around Windows +Security settings that were preventing some modules from working properly.

    @@ -1009,8 +1015,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb

    8.       Bug -  460. Click Detector BT Display vertical axis shows all zeroes when -zooming out

    +  460. Click Detector BT Display vertical axis shows all zeroes when zooming +out

    9.       Bug @@ -1254,8 +1260,8 @@ classify clicks.

    2.        Added option in Sound Acquisition settings dialog to override -filename time stamp and use PC local time instead.

    +lang=EN-US> Added option in Sound Acquisition settings dialog to +override filename time stamp and use PC local time instead.

    3.       

    10.        Add option to the Map module's Plot Overlay Options dialog, -to show events occuring in the future (look +lang=EN-US> Add option to the Map module's Plot Overlay Options dialog, to +show events occuring in the future (look ahead) instead of the default display of events which have already occurred. Can make it easier to match up the map with clicks seen in the Click Detector display.

    @@ -1472,10 +1478,10 @@ lang=EN-US> Added adaptive noise filter to Ishmael Detectors.

    5.        Many upgrades to the Sound Playback module, including a high-pass -filter, gain control, and the ability to mix wavefrom and envelope data -together to listen to high-frequency clicks and dolphin whistles at the same -time.

    +lang=EN-US> Many upgrades to the Sound Playback module, including a +high-pass filter, gain control, and the ability to mix wavefrom and envelope +data together to listen to high-frequency clicks and dolphin whistles at the +same time.

    6.        @@ -1615,9 +1621,9 @@ from many channels.

    3.        -Bugs 398 and 399. Click Detector, FFT Engine and Filter modules were -losing source during startup, if the source selected was not the first raw data -source in the list.

    +Bugs 398 and 399. Click Detector, FFT Engine and Filter modules were losing +source during startup, if the source selected was not the first raw data source +in the list.

    4.        @@ -1631,9 +1637,9 @@ lang=EN-US> Added decimal degrees option to latitude/longitude dialog.

    2.        Added option in the Click Delay parameters to restrict the number -of initial samples used in the calculation. This can be useful for cleaning up -delays in the presence of echoes and small time delays.

    +lang=EN-US> Added option in the Click Delay parameters to restrict the +number of initial samples used in the calculation. This can be useful for +cleaning up delays in the presence of echoes and small time delays.

    3.        @@ -1732,9 +1738,9 @@ see new options in main menu.

    2.        Added Matched Template Click Classifier. Classifies clicks -based on an ideal template to match and a template to reject. An example of -this is to classify beaked whale clicks in an environment with dolphin clicks.

    +lang=EN-US> Added Matched Template Click Classifier. Classifies clicks based +on an ideal template to match and a template to reject. An example of this is +to classify beaked whale clicks in an environment with dolphin clicks.

    3.        @@ -1746,10 +1752,10 @@ lang=EN-US> Added ability to read differential GPS data.

    5.        Added check for duplicate settings in the psf file when exiting -Pamguard. If duplicate settings are found, user is given the option to leave -them in the psf or get rid of them. Duplicate settings are ignored by Pamguard, -but can cause the psf file to grow large over time.

    +lang=EN-US> Added check for duplicate settings in the psf file when +exiting Pamguard. If duplicate settings are found, user is given the option to +leave them in the psf or get rid of them. Duplicate settings are ignored by +Pamguard, but can cause the psf file to grow large over time.

    6.        @@ -1894,8 +1900,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &nb

    5.        -Bug 359. Pamguard crashes when selecting auto-scale option in Noise Monitor -module

    +Bug 359. Pamguard crashes when selecting auto-scale option in Noise +Monitor module

    6.        @@ -1922,8 +1928,8 @@ Beta versions

    11.        -Bug 366. Rocca manual whistle contour extraction throws error when trying -to classify a boxed whistle

    +Bug 366. Rocca manual whistle contour extraction throws error when +trying to classify a boxed whistle

    Upgrades

    @@ -2045,8 +2051,8 @@ Upgraded jFLAC library to fix.

    7.       -Bug 332. Fixed problem with secondary maps (those not in the main display) -not displaying detections.

    +Bug 332. Fixed problem with secondary maps (those not in the main +display) not displaying detections.

    8.       @@ -2091,9 +2097,9 @@ Added circular movement option to source simulation

    Beta Version 2.00.10 June 2017

    -

    PAMGuard Version 2 contains major updates. -You should read and understand these notes before proceeding with installation -and use of this version. These changes have been funded under contract to NOAA +

    PAMGuard Version 2 contains major updates. You +should read and understand these notes before proceeding with installation and +use of this version. These changes have been funded under contract to NOAA Fisheries, contract no. WE-133F-16-SE-1126.

    Binary File Structural Changes

    @@ -2230,14 +2236,14 @@ switches/parameters to be included in *.ini files.

    1.       -Bug 308. Map Overlay Control. Storage of data -saying what get's plotted on each map and for how long became corrupted and the -list grew to a ridiculous size. Code has been put in place to a) stop it -happening again and b) to repair any configuration files which are corrupted. -Corrupted files will be slow to load, slow to save and will be > several -megabytes in size. It may be necessary to delete the PamguardSettings table in -any databases since these too may have become oversized which will slow down -viewer mode PAMGuard start-up.

    +Bug 308. Map Overlay Control. Storage of data saying +what get's plotted on each map and for how long became corrupted and the list +grew to a ridiculous size. Code has been put in place to a) stop it happening +again and b) to repair any configuration files which are corrupted. Corrupted +files will be slow to load, slow to save and will be > several megabytes in +size. It may be necessary to delete the PamguardSettings table in any databases +since these too may have become oversized which will slow down viewer mode +PAMGuard start-up.

    2.       @@ -2334,8 +2340,8 @@ both 64 bit and 32 bit installations. PAMGuard psf files are now registered in the Windows Registry, so double-clicking on a psf file should run PAMGuard in normal mode (as opposed to Viewer or Mixed modes). Note that the Windows Registry can only hold a single executable reference for psf files; therefore, -for users with multiple installations of PAMGuard, double-clicking on a psf will -run the most-recently installed version of PAMGuard on the system.

    +for users with multiple installations of PAMGuard, double-clicking on a psf +will run the most-recently installed version of PAMGuard on the system.

    Version 1.15.08 November 2016

    @@ -2368,10 +2374,10 @@ high sample rate.

    2.       -Bug 305. Date and Time not being correctly extracted -from wav files created using SoundTrap recorders. Fixed by correctly finding -and unpacking information in the accompanying xml log files that come with -SoundTrap files.

    +Bug 305. Date and Time not being correctly +extracted from wav files created using SoundTrap recorders. Fixed by correctly +finding and unpacking information in the accompanying xml log files that come +with SoundTrap files.

    Version 1.15.06 November 2016

    @@ -2527,9 +2533,9 @@ the future.

    Logger Form Design

    -

    A GUI driven system for designing Logger forms has been -released. Currently, this feature has no online help, but is reasonably -intuitive compared to the old method of typing directly into the database.

    +

    A GUI driven system for designing Logger forms has been released. +Currently, this feature has no online help, but is reasonably intuitive +compared to the old method of typing directly into the database.

    Improved Number handling

    @@ -2601,9 +2607,9 @@ changes in future releases. New PAMGuard releases will always be able to open older binary files, however, with previous PAMGuard releases if a newer file format was opened, then PAMGuard was unable to check that the file format was newer and would attempt to read the files and might even corrupt them. Now it -will recognise that it cannot open the files, display appropriate error messages -and not attempt to read the files. NOTE that at this time there are no planned -file format changes and that this is purely a future proofing exercise.

    +will recognise that it cannot open the files, display appropriate error +messages and not attempt to read the files. NOTE that at this time there are no +planned file format changes and that this is purely a future proofing exercise.

    7.        @@ -2804,13 +2810,13 @@ for details.

    3.       -GPS Loading into PAMGuard Viewer. This has been modified -so that the rules governing GPS data collection and storage also apply when -loading data from the database. For instance, if you've stored all GPS data, -you've probably got a record every second in the database which can create -memory overflows if you try to load a lot of data in the viewer. You can now -tell PAMGuard to only load a data point every n seconds which will reduce the -number of points loaded. Useful when making large scale overview maps of a +GPS Loading into PAMGuard Viewer. This has been +modified so that the rules governing GPS data collection and storage also apply +when loading data from the database. For instance, if you've stored all GPS +data, you've probably got a record every second in the database which can +create memory overflows if you try to load a lot of data in the viewer. You can +now tell PAMGuard to only load a data point every n seconds which will reduce +the number of points loaded. Useful when making large scale overview maps of a survey.

    4.

    3.        -Bug 248. Crash in hydrophone array manager. Bug in -array manager would crash PAMGuard when the click detector was configured with -more channels than the sound acquisition system (almost impossible to achieve, -but someone managed it).

    +Bug 248. Crash in hydrophone array manager. Bug in array +manager would crash PAMGuard when the click detector was configured with more +channels than the sound acquisition system (almost impossible to achieve, but +someone managed it).

    4.        @@ -2907,8 +2913,8 @@ writing results files. Fixed.

    7.        -Bug 237. Logger forms not saving data to database after sound -acquisition starts. Fixed.

    +Bug 237. Logger forms not saving data to database after sound acquisition +starts. Fixed.

    8.        @@ -2951,22 +2957,22 @@ which is useful when using PAMGuard for demonstration purposes.

    lang=EN-US>4.              The sound File and Folder audio input systems now have an optional time zone setting. Note that PAMGuard analysis should still all be taking place in -UTC and that this option is intended to allow the conversion of file times -which were not recorded as UTC into UTC and not the other way around. Use the -option with caution !

    +UTC and that this option is intended to allow the conversion of file times which +were not recorded as UTC into UTC and not the other way around. Use the option +with caution !

    5.              -The Open Office Database system has been removed from the list of -available options since it is not reliable. If you require a free database -solution we recommend you use the MySql Community Server The Open Office Database system has been removed from the list of available +options since it is not reliable. If you require a free database solution we +recommend you use the MySql Community Server http://dev.mysql.com/downloads/mysql/

    6.              -Changed Rocca Measurement menu item to open a window containing -click events, instead of a submenu listing click events.  Using a window -simplifies multiple event selections

    +Changed Rocca Measurement menu item to open a window +containing click events, instead of a submenu listing click events.  Using +a window simplifies multiple event selections

    7.              @@ -3109,9 +3115,8 @@ to read on a time. Fixed

    Menu Layout

    -

    The PAMGuard menus have been rearranged into a more -intuitive grouping which we believe will help users find functionality more -easily.

    +

    The PAMGuard menus have been rearranged into a more intuitive +grouping which we believe will help users find functionality more easily.

    'Detection' menu has been renamed to 'Settings' since many menu items within this menu were not directly to do with 'Detection'.

    @@ -3241,9 +3246,9 @@ different. Details are available in the online help.

    Can now read raw audio data direct from FLAC files. FLAC is a lossless compression -algorithm for audio data. Files, or folders of files are accessed in the same way -as WAV and AIFF files in the Sound Acquisition module. In a future release we -also hope to provide support for writing FLAC files from the sound recorder +algorithm for audio data. Files, or folders of files are accessed in the same +way as WAV and AIFF files in the Sound Acquisition module. In a future release +we also hope to provide support for writing FLAC files from the sound recorder module.

    Sound Recorder Module

    @@ -3301,8 +3306,8 @@ whistle.

  • Ishmael Detector configuration. It was impossible to correctly configure these detectors and configuration settings were not being saved correctly. This has now been rectified.
  • -
  • Logger forms input of character data. - Was causing an exception when character input fields were cleared.
  • +
  • Logger forms input of character + data. Was causing an exception when character input fields were cleared.
  • Click detector inter click interval display was not working in viewer mode. This has been rectified.
  • Configuration loading. This has @@ -3381,8 +3386,8 @@ to these menus to provide additional information to users.  

    the radar display so that bearings can be shown relative to either the vessel or to true North.

    -

    Better control of data in viewer mode, -making is easy to scroll through and view data for short time periods.

    +

    Better control of data in viewer +mode, making is easy to scroll through and view data for short time periods.

    GPS

    @@ -3391,9 +3396,9 @@ other data sources for the PAMGuard viewer.

    Database

    -

    Can now copy data from binary -storage to the database offline for any module having both binary and database -storage.

    +

    Can now copy data from binary storage +to the database offline for any module having both binary and database storage. +

    Can create a blank MS Access database (2007 and later *.accdb formats only).

    @@ -3544,8 +3549,8 @@ start-up.

    '         Bug in Noise Monitor. Version 1.11.01 would crash if only a subset of -channels were selected, e.g. if you only measured noise on channel 0 of a two -channel configuration. This bug is now fixed

    +channels were selected, e.g. if you only measured noise on channel 0 of a two channel +configuration. This bug is now fixed

    Version 1.11.01 Beta April 2012

    @@ -3693,9 +3698,9 @@ the correct data stream. This has been fixed.

    '         -Whistle classifier has some new features in the classifier training panel. -It is also now possible to export training data files directly from binary data -files.

    +Whistle classifier has some new features in the classifier training +panel. It is also now possible to export training data files directly from +binary data files.

    '         @@ -3793,9 +3798,9 @@ become too bit to fit on a screen.

    PAMGUARD display.

    Windows Installer now sets permissions on PAMGUARD folder so -that don't need to be an administrator in order to create new files in that directory. -Prevents problems especially under Vista/Windows 7 when saving psfs and -recording sounds to the default directory. 

    +that don't need to be an administrator in order to create new files in that +directory. Prevents problems especially under Vista/Windows 7 when saving psfs +and recording sounds to the default directory. 

    Version 1.9.00 Beta April 2010

    @@ -3820,8 +3825,8 @@ of channel numbering was only implemented several years into the PAMGUARD project, it was never fully implemented or well supported by the different modules which resulted in a number of bugs which could cause confusion as to which hydrophones were being used during localisation or during calibrated -measurement. The situation tended to only arise with a small number of ASIO -sound cards such as the RME Fireface 400 on which the most useful inputs, the +measurement. The situation tended to only arise with a small number of ASIO sound +cards such as the RME Fireface 400 on which the most useful inputs, the balanced line inputs, are hardware channels 4,5,6 and 7 on the back of the instrument. (On the Fireface 800, the balanced line inputs are channels 0 to 7). When using the National Instruments system, data were always sent into the @@ -3844,14 +3849,13 @@ out a better system for handling channel numbering in PAMGUARD and have decided that the only practical thing to do is to force all software channel numbering back to a zero indexed system. i.e. even if you read out hardware channels 3,4,5 and 6, within PAMGUARD, everywhere apart from the Sound acquisition -dialog, you will see them listed as channels 0,1,2 and 3.  The -consequences of doing this are mainly very good. Most users will not notice any -changes. For those who need for some reason to read channel numbers not -starting at zero things will be more stable. However, when you go to a new -version with this new feature, it will be necessary to reconfigure all the -modules in any existing configurations. To do this, open the configuration -dialog for each module in turn and select the correct, zero indexed, channel -number.

    +dialog, you will see them listed as channels 0,1,2 and 3.  The consequences +of doing this are mainly very good. Most users will not notice any changes. For +those who need for some reason to read channel numbers not starting at zero +things will be more stable. However, when you go to a new version with this new +feature, it will be necessary to reconfigure all the modules in any existing +configurations. To do this, open the configuration dialog for each module in +turn and select the correct, zero indexed, channel number.

    Other Changes / new features

    @@ -3908,8 +3912,8 @@ existing configurations.

    Sound acquisition

    -

    Changes made for a previous Mac build now incorporated into -main Beta branch. This should allow for basic 2 channel sound acquisition using +

    Changes made for a previous Mac build now incorporated into main +Beta branch. This should allow for basic 2 channel sound acquisition using Macs.

    Bug Fixes

    @@ -3959,13 +3963,13 @@ channels are assigned to a hydrophone.

    '         -Play back of high frequency wav files through National Instruments (NI) cards: -When analysing wav files, sound can be output at high frequency (depending on -the specification of the NI card). The primary motivation for this has been to -develop a test bed for high frequency sound acquisition whereby we can play -500kHz recordings of harbour porpoise out of an NI card on one machine, into NI -cards on a different machine which are testing high frequency versions of the -click detector.

    +Play back of high frequency wav files through National Instruments (NI) +cards: When analysing wav files, sound can be output at high frequency +(depending on the specification of the NI card). The primary motivation for +this has been to develop a test bed for high frequency sound acquisition +whereby we can play 500kHz recordings of harbour porpoise out of an NI card on +one machine, into NI cards on a different machine which are testing high +frequency versions of the click detector.

    '         @@ -4050,13 +4054,13 @@ Symbol'>'''1.0Beta 22 Jan 2008 - -Pamguard starts two releases, core and beta release,

    +class=Heading2Char>1.0Beta 22 Jan 2008 - Pamguard +starts two releases, core and beta release,

    this is the beta release

    @@ -4831,10 +4833,10 @@ configurable user displays which support real time scrolling spectrograms and radar displays. Detection and localisation information can be optionally displayed on the map display.Map enhancements include improved scrolling whereby the user can click and drag to pan the area. PamGuard can now interface -with MySQL database servers and users can easily select which information is logged. -(This replaces the previous 'flat-file' logging feature). A simulation module -allows virtual vocalising animals to be placed on the map to assist in training -and development. Extensive online user help has been added to PamGuard +with MySQL database servers and users can easily select which information is +logged. (This replaces the previous 'flat-file' logging feature). A simulation +module allows virtual vocalising animals to be placed on the map to assist in +training and development. Extensive online user help has been added to PamGuard Application

    0.03b - first version used in a real 'at sea' environment.18/08/06

    diff --git a/src/PamController/PamguardVersionInfo.java b/src/PamController/PamguardVersionInfo.java index 3cf926b6..3723aacb 100644 --- a/src/PamController/PamguardVersionInfo.java +++ b/src/PamController/PamguardVersionInfo.java @@ -36,7 +36,7 @@ public class PamguardVersionInfo { /** * Release date */ - static public final String date = "26 May 2023"; + static public final String date = "30 May 2023"; // /** // * Release type - Beta or Core From d207325b2da7bca21436f9e7542b3f80fa4582f5 Mon Sep 17 00:00:00 2001 From: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com> Date: Wed, 31 May 2023 12:41:17 +0100 Subject: [PATCH 5/6] Handle corrupt sud files Better handling of corrupt sud files which will not return a valid audioinputstream. These will be gracelessly skipped during analysis. --- src/Acquisition/FolderInputSystem.java | 36 +++++++++++++------ src/Acquisition/pamAudio/SudAudioFile.java | 6 ++-- .../pamAudio/SudAudioFileReader.java | 3 +- 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/Acquisition/FolderInputSystem.java b/src/Acquisition/FolderInputSystem.java index 3eed96ec..f3a33ed4 100644 --- a/src/Acquisition/FolderInputSystem.java +++ b/src/Acquisition/FolderInputSystem.java @@ -104,9 +104,13 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings, D boolean ans = super.prepareInputFile(); if (ans == false && ++currentFile < allFiles.size()) { System.out.println("Failed to open sound file. Try again with file " + allFiles.get(currentFile).getName()); - + /* + * jumping striaght to the next file messes it up if it thinks the files + * are continuous, so we HAVE to stop and restart. + */ +// return prepareInputFile(); PamController.getInstance().pamStop(); - PamController.getInstance().startLater(); + PamController.getInstance().startLater(false); } return ans; } @@ -614,16 +618,16 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings, D long currFileEnd = 0; if (currentFile >= 0) { try { - WavFileType currentWav = allFiles.get(currentFile); - currFileStart = getFileStartTime(currentWav.getAbsoluteFile()); - if (audioStream != null) { - fileSamples = audioStream.getFrameLength(); - currFileLength = (long) (fileSamples * 1000 / audioStream.getFormat().getFrameRate()); - currFileEnd = currFileStart + currFileLength; - } + WavFileType currentWav = allFiles.get(currentFile); + currFileStart = getFileStartTime(currentWav.getAbsoluteFile()); + if (audioStream != null) { + fileSamples = audioStream.getFrameLength(); + currFileLength = (long) (fileSamples * 1000 / audioStream.getFormat().getFrameRate()); + currFileEnd = currFileStart + currFileLength; + } } catch (Exception e) { - + } } if (currFileEnd == 0) { @@ -648,7 +652,17 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings, D } setFolderProgress(); // sayEta(); - ans = prepareInputFile(); + /* + * I think that here, we just need a check of the file. the prepareInputFile in + * this class will (on failure) move straight to the next file and also issue a + * stop/start, which is not good if it's trying a continuous file, where this is + * being called, if false is returned it should manage moving onto the next file by + * itself if we use the super.prep .... + */ + ans = super.prepareInputFile(); + if (ans == false) { + return false; + } currentFileStart = System.currentTimeMillis(); // if (ans && audioFormat.getSampleRate() != currentSampleRate && currentFile > 0) { // acquisitionControl.getDaqProcess().setSampleRate(currentSampleRate = audioFormat.getSampleRate(), true); diff --git a/src/Acquisition/pamAudio/SudAudioFile.java b/src/Acquisition/pamAudio/SudAudioFile.java index b496301d..70c3eb46 100644 --- a/src/Acquisition/pamAudio/SudAudioFile.java +++ b/src/Acquisition/pamAudio/SudAudioFile.java @@ -48,9 +48,9 @@ public class SudAudioFile extends WavAudioFile { } // don't do anything and it will try the built in Audiosystem catch (UnsupportedAudioFileException e) { - System.err.println("Could not open sud file: not a supported file " + soundFile.getName()); - - e.printStackTrace(); + System.err.println("UnsupportedAudioFileException: Could not open sud file: not a supported file " + soundFile.getName()); + System.err.println(e.getMessage()); +// e.printStackTrace(); } catch (IOException e) { System.err.println("Could not open sud file: IO Exception: " + soundFile.getName()); diff --git a/src/Acquisition/pamAudio/SudAudioFileReader.java b/src/Acquisition/pamAudio/SudAudioFileReader.java index ba407e54..07de8053 100644 --- a/src/Acquisition/pamAudio/SudAudioFileReader.java +++ b/src/Acquisition/pamAudio/SudAudioFileReader.java @@ -46,7 +46,8 @@ public class SudAudioFileReader { try { sudAudioInputStream = SudAudioInputStream.openInputStream(file, sudParams, false); } catch (Exception e) { - e.printStackTrace(); + String msg = String.format("Corrupt sud file %s: %s", file.getName(), e.getMessage()); + throw new UnsupportedAudioFileException(msg); } return sudAudioInputStream; } From 8274f00db4625c0ce410b43818f6cf2be5b996f0 Mon Sep 17 00:00:00 2001 From: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com> Date: Fri, 9 Jun 2023 12:26:42 +0100 Subject: [PATCH 6/6] Group3D localiser dialog Small fix to group3d localiser to correctly enable settings button in dialog when the dialog is reopened --- src/Localiser/detectionGroupLocaliser/TMGroupLocInfo.java | 7 +++++++ src/PamController/PamguardVersionInfo.java | 2 +- src/group3dlocaliser/dialog/GroupLocSettingPaneFX.java | 8 ++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Localiser/detectionGroupLocaliser/TMGroupLocInfo.java b/src/Localiser/detectionGroupLocaliser/TMGroupLocInfo.java index ace2b8aa..5ceef849 100644 --- a/src/Localiser/detectionGroupLocaliser/TMGroupLocInfo.java +++ b/src/Localiser/detectionGroupLocaliser/TMGroupLocInfo.java @@ -810,6 +810,9 @@ public class TMGroupLocInfo implements GroupLocInfo { for (int i = 0; i < nSubDetections; i++) { localisation = getParentDetection().getSubDetection(i).getLocalisation(); + if (localisation == null) { + continue; + } angles = localisation.getAngles(); angleErrors = localisation.getAngleErrors(); @@ -879,6 +882,10 @@ public class TMGroupLocInfo implements GroupLocInfo { totalVectors += nVectors; } + if (totalVectors == 0) { + return; + } + //now create the separate arrays for different ambiguities. /** * diff --git a/src/PamController/PamguardVersionInfo.java b/src/PamController/PamguardVersionInfo.java index 3723aacb..cc7a70bd 100644 --- a/src/PamController/PamguardVersionInfo.java +++ b/src/PamController/PamguardVersionInfo.java @@ -31,7 +31,7 @@ public class PamguardVersionInfo { * Version number, major version.minorversion.sub-release. * Note: can't go higher than sub-release 'f' */ - static public final String version = "2.02.08"; + static public final String version = "2.02.08a"; /** * Release date diff --git a/src/group3dlocaliser/dialog/GroupLocSettingPaneFX.java b/src/group3dlocaliser/dialog/GroupLocSettingPaneFX.java index 3efc949b..da7f91c7 100644 --- a/src/group3dlocaliser/dialog/GroupLocSettingPaneFX.java +++ b/src/group3dlocaliser/dialog/GroupLocSettingPaneFX.java @@ -173,6 +173,9 @@ public class GroupLocSettingPaneFX extends SettingsPane{ algoOptsButton.setDisable(true); return; } + // also enable / disable the more options button ... + algoOptsButton.setDisable(localiserAlgorithm.hasParams() == false); + /** * Need to immediately tell the algorithm which input we're using so that it can * show the correct settings... @@ -208,10 +211,7 @@ public class GroupLocSettingPaneFX extends SettingsPane{ // newPane.setDetectionSource(sourcePanel.getSource()); } algorithmSourcePane = newPane; - - // also enable / disable the more options button ... - algoOptsButton.setDisable(localiserAlgorithm.hasParams() == false); - + repackDialog(); }