Squashed commit of the following:

commit db037c6d29
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri May 12 15:37:21 2023 +0100

    Fixing SUD order

commit c95579d04f
Merge: bf5f0dac 88b03420
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri May 12 10:03:58 2023 +0100

    Merge branch 'main' of https://github.com/PAMGuard/PAMGuard.git into main

commit bf5f0daca5
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri May 12 10:03:30 2023 +0100

    NI Playback bug

    Fix bug in NI playback which threw an exception if no devices were
    present and configured in NI-MAX

commit 88b034207a
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon May 8 15:44:26 2023 +0100

    Merge pull request #42 from PAMGuard/main (#106)

commit 29f0bf7e48
Merge: f5ff9da8 2953d82b
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon May 8 15:43:46 2023 +0100

    Merge branch 'main' into main

commit f5ff9da8dd
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon May 8 15:23:31 2023 +0100

    updated x3 repo

    Updated X3 to use CRC checks on data. Affects a small number of sud
    files.

commit af82147f9e
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri May 5 14:14:22 2023 +0100

    Bug fix

    Bug fix in binary store checks

commit a7cacc108f
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Thu May 4 13:39:50 2023 +0100

    update to X3 repo

commit 36cd0af0bc
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed May 3 19:17:36 2023 +0100

    updated x3 library

commit 56cb06ea1c
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed May 3 19:10:07 2023 +0100

    Batch and X3 updates (#105)

    * Update FileListWorker.java

    * Support batch processing

    Multicast controller and a couple of additional commands to work with
    the batch processing plugin.

    * Database float unpack

    Better unpacking checks of floats coming back from the database

    * Batch changes

    Changes in support of batch processing

    * Small changes for batch processing

    * update X3 to get Detector parameters

    X3 and PAMguard updated to get and save the SoundTrap click detector
    parameters.

commit 2953d82b58
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed May 3 19:06:45 2023 +0100

    update X3 to get Detector parameters

    X3 and PAMguard updated to get and save the SoundTrap click detector
    parameters.

commit f74bb5eb89
Merge: 795b32e4 317f8726
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon Apr 24 13:29:09 2023 +0100

    Merge pull request #41 from PAMGuard/main

    updated x3

commit 317f87265a
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon Apr 24 12:49:19 2023 +0100

    Updated x3

    updated SUD reader to handle and unexpectedchunkID.

commit 96d18b85a7
Merge: 73282b9a 6a0c9b55
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Apr 19 09:08:58 2023 +0100

    Merge branch 'main' of https://github.com/PAMGuard/PAMGuard

commit 73282b9a71
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Apr 19 09:07:54 2023 +0100

    checking nan sample rate in ST Click detector

commit 6a0c9b55d1
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Apr 19 09:05:25 2023 +0100

    Improvements for batch processing (#104)

    * Update FileListWorker.java

    * Support batch processing

    Multicast controller and a couple of additional commands to work with
    the batch processing plugin.

    * Database float unpack

    Better unpacking checks of floats coming back from the database

    * Batch changes

    Changes in support of batch processing

    * Small changes for batch processing

commit 795b32e440
Merge: e3a7dc3a 57bae3c3
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Thu Apr 13 17:11:28 2023 +0100

    Merge pull request #40 from PAMGuard/main

    merge fix in reprocess manager

commit e3a7dc3ad1
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Thu Apr 13 17:06:53 2023 +0100

    Small changes for batch processing

commit 57bae3c39c
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Thu Apr 13 17:05:40 2023 +0100

    Fix reprocess manager

    Stop it responding with stupid questions when there are no part complete
    stores.

commit 87db5ae6ab
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri Apr 7 18:36:51 2023 +0100

    Merge batch support (#103)

    * Update FileListWorker.java

    * Support batch processing

    Multicast controller and a couple of additional commands to work with
    the batch processing plugin.

    * Database float unpack

    Better unpacking checks of floats coming back from the database

    * Batch changes

    Changes in support of batch processing

commit f97977a1ea
Merge: fff36a90 7ae7739b
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri Apr 7 18:36:07 2023 +0100

    Merge pull request #39 from PAMGuard/main

    Batch Processing (#102)

commit fff36a904b
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri Apr 7 18:32:18 2023 +0100

    Batch changes

    Changes in support of batch processing

commit 7ae7739b22
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri Apr 7 18:25:27 2023 +0100

    Batch Processing (#102)

    * Update FileListWorker.java

    * Support batch processing

    Multicast controller and a couple of additional commands to work with
    the batch processing plugin.

    * Database float unpack

    Better unpacking checks of floats coming back from the database

commit 30fbc6d290
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Thu Apr 6 21:43:20 2023 +0100

    Database float unpack

    Better unpacking checks of floats coming back from the database

commit a2da810690
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Thu Apr 6 16:44:47 2023 +0100

    Support batch processing

    Multicast controller and a couple of additional commands to work with
    the batch processing plugin.

commit 2bb8c0b164
Merge: da21d54d ed776704
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Apr 5 19:36:10 2023 +0100

    Merge branch 'main' of https://github.com/douggillespie/PAMGuard

commit da21d54d3e
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Apr 5 19:35:48 2023 +0100

    Update FileListWorker.java

commit ed77670458
Merge: 16e8184a 42d560f9
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Apr 5 19:33:16 2023 +0100

    Merge pull request #38 from PAMGuard/main

    Merge in from main

commit 42d560f91b
Merge: 629f4309 16e8184a
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Apr 5 19:33:05 2023 +0100

    Merge branch 'main' into main

commit 629f430988
Author: stabbutt <100229685+stabbutt@users.noreply.github.com>
Date:   Wed Apr 5 01:37:17 2023 -0700

    Merge SMRUC Fork to PG Main Fork (#101)

    * Fix network sender since it was hopelessly out of date and did not send
    data in the correct format. OK now, though only tested on NARW.

    * Fix network sender since it was hopelessly out of date and did not send
    data in the correct format. OK now, though only tested on NARW.

    * Mods to support command line and Network control of PAMGuard and to
    retrieve summary information from some modules.

    * Fix issue #80: recording path command line override

    * Allow RUNNOTHING bearing calculations

    * Quick solution to issue #88.

    * Added logic to allow run nothing direct PAMGuard control for SMRU
    Consulting batch processing

    * Mistake in merge, committing changes from PAMGuard Main to SMRU Fork

    * Run nothing updates for preventing thread leaks on bash

    * Synchronize with Pamguard Main at PAMGuard/Pamguard:main commit 3573eaa
    on 1/24/23

    * Added network sender global arguments for port, ipaddress, station Id1,
    station Id2

    * Added runtime arguments for network send configuration

    * Fix typo in tag 'netSend' rather than 'newSend'

    * Fixed typo. set port to port, not to address

    ---------

    Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

commit 74066712b8
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Apr 4 18:04:13 2023 +0100

    Fix Data export bug

    Bug causing npe when exporting data to database. Fixed problem.

    And better error messages in some thrown exceptions to make it easier to
    identify where errors are occurring.

commit 16e8184a23
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Mar 1 16:43:08 2023 +0000

    Batch processing

    Updates to support batch processing control

commit 5f9d29e131
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Feb 21 16:01:50 2023 +0000

    Reprocessing

    Ironed out a few bugs in restarting processing.

commit f910d80517
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon Feb 20 17:15:54 2023 +0000

    Reprocessing options

    Analysis of input and output files and can restart from where it left
    off when processing an offline dataset.

commit f64deecbd5
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri Feb 17 11:12:08 2023 +0000

    Fix but in filedata

    Stops errors (and returns 0) if an invalid user data format is used.

commit e4c4c95340
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Feb 7 17:35:01 2023 +0000

    Synchronizing object packing

    Synchronize object packing between the binary store and the network
    sender since we're having trouble with these two users of data
    overwriting each others work in progress.

commit ac004ab9cc
Author: Jamie Mac <macster110@gmail.com>
Date:   Thu Feb 2 14:05:24 2023 +0000

    Deep learning bug fixes.  (#95)

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Create click_train_help.md

    * Update click_train_help.md

    * Screenshots

    * Update click_train_help.md

    * Update click_train_help.md

    * Update click_train_help.md

    * More screenshots

    * Add screenshots

    * Update click_train_help.md

    * Add classifier screenshot

    * Update click_train_help.md

    * Update click_train_help.md

    * Update click_train_help.md

    * Updates and bug fixes to click train detector and CPOD importer

    * Update click_train_help.md

    * Update POM with latest jdl4pam

    * Add screenshots for click train detector help

    * Screenshots

    * Update click_train_help.md

    * Defult option for CPOD and porpoise to click train detector.

    Also a minor

    * Update pom.xml

    * Bug fix for raw spectrogram in TDDisplayFX

    * Update KetosClassifier.java

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Create click_train_help.md

    * Update click_train_help.md

    * Screenshots

    * Update click_train_help.md

    * More screenshots

    * Update click_train_help.md

    * Update click_train_help.md

    * Add screenshots

    * Add classifier screenshot

    * Update click_train_help.md

    * Updates and bug fixes to click train detector and CPOD importer

    * Update click_train_help.md

    * Update click_train_help.md

    * Update click_train_help.md

    * Update click_train_help.md

    * Add screenshots for click train detector help

    * Screenshots

    * Update click_train_help.md

    * Defult option for CPOD and porpoise to click train detector.

    Also a minor

    * Bug fix for raw spectrogram in TDDisplayFX

    * Update KetosClassifier.java

    * Fix standard classifier JSON logging

    * Update click_train_help.md

    * Fixed bug in sweep classifier when using SoundTrap click detections

    * Added some colour averaging in the TFDisplayFX spectrgoram

    * Bug fix for rainbow click bearings

    Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

    * Google humpback whale deep learning classifier

    Google's humpback whale deep learning classifier can now be imported.
    Updated TDisplayFX to make the data selection panes cleaner and clearer.
    Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

    * Updated the prediction plots on time display

    Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

    * Updates to TDisplayFX

    yFIshmael now owrks with TDisplayFX
    TDisplayFX UI changes to make simpler.
    Some abstraction for drawing lines on TDisplayFX

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Create click_train_help.md

    * Update click_train_help.md

    * Screenshots

    * Update click_train_help.md

    * More screenshots

    * Update click_train_help.md

    * Update click_train_help.md

    * Add screenshots

    * Add classifier screenshot

    * Update click_train_help.md

    * Updates and bug fixes to click train detector and CPOD importer

    * Update click_train_help.md

    * Update click_train_help.md

    * Update click_train_help.md

    * Update click_train_help.md

    * Add screenshots for click train detector help

    * Screenshots

    * Update click_train_help.md

    * Defult option for CPOD and porpoise to click train detector.

    Also a minor

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Create click_train_help.md

    * Update click_train_help.md

    * Update click_train_help.md

    * Updates and bug fixes to click train detector and CPOD importer

    * Bug fix for raw spectrogram in TDDisplayFX

    * Update KetosClassifier.java

    * Fix standard classifier JSON logging

    * Fixed bug in sweep classifier when using SoundTrap click detections

    * Added some colour averaging in the TFDisplayFX spectrgoram

    * Bug fix for rainbow click bearings

    Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

    * Google humpback whale deep learning classifier

    Google's humpback whale deep learning classifier can now be imported.
    Updated TDisplayFX to make the data selection panes cleaner and clearer.
    Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

    * Updated the prediction plots on time display

    Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

    * Updates to TDisplayFX

    yFIshmael now owrks with TDisplayFX
    TDisplayFX UI changes to make simpler.
    Some abstraction for drawing lines on TDisplayFX

    * Merge fixes to click train detector

    * Bug fix to UI

    * Updates to FX GUI

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Screenshots

    * Updates and bug fixes to click train detector and CPOD importer

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Updates and bug fixes to click train detector and CPOD importer

    * Fix standard classifier JSON logging

    * Merge fixes to click train detector

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Screenshots

    * Updates and bug fixes to click train detector and CPOD importer

    * Updates to click train detector

    New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
    CPOD data can now build average waveforms.
    CPOD click trains can be viewed in TDisplayFX pop up menu displays
    Fixed Peak Frequency symbol chooser so it saves the colour box settings

    * Screenshots

    * Updates and bug fixes to click train detector and CPOD importer

    * Fix standard classifier JSON logging

    * Google humpback whale deep learning classifier

    Google's humpback whale deep learning classifier can now be imported.
    Updated TDisplayFX to make the data selection panes cleaner and clearer.
    Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

    * Bug fix to UI

    * Bug fixes to FX GUI

    * Updates to click train detector

    * Squashed commit of the following:

    commit 9f998165ee
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon May 2 19:40:24 2022 +0100

        Updates to support ContactCollator plugin (#33)

        * Change synchronization on RawDataTransforms soit uses the owner data
        holder, not itself for synchronization. Otherwise you get thread locks.

        * fix problem in SummaryComand

        * Update command line options

        * Change synchronization on RawDataTransforms soit uses the owner data
        holder, not itself for synchronization. Otherwise you get thread locks.

        * Update command line options

        * Update DecimatorParams.java

        * couple of updates to support new contact collator plugin

        * Sorting out sample rate info in clip display to support Contact Collator
        plugin

        * FLAC Speed

        Improve flac speed

        * Update .gitignore

        * Update .gitignore

        * Updates to support new features in Contact Collator

        * Small update to RawDatautils to handle null data

    * Updates to click train detector

    * Squashed commit of the following:

    commit 62b020b320
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sat May 14 06:52:20 2022 +0100

        Add a new offlinefileslist function

    commit 3a9a5311aa
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Apr 27 09:43:31 2022 +0100

        Update .gitignore

    commit 9f998165ee
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon May 2 19:40:24 2022 +0100

        Updates to support ContactCollator plugin (#33)

        * Change synchronization on RawDataTransforms soit uses the owner data
        holder, not itself for synchronization. Otherwise you get thread locks.

        * fix problem in SummaryComand

        * Update command line options

        * Change synchronization on RawDataTransforms soit uses the owner data
        holder, not itself for synchronization. Otherwise you get thread locks.

        * Update command line options

        * Update DecimatorParams.java

        * couple of updates to support new contact collator plugin

        * Sorting out sample rate info in clip display to support Contact Collator
        plugin

        * FLAC Speed

        Improve flac speed

        * Update .gitignore

        * Update .gitignore

        * Updates to support new features in Contact Collator

        * Small update to RawDatautils to handle null data

    * Updated data selector for click train detector

    * Click train detector updates and bug fixes

    Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

    Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

    * Bug fix and improvements for Ketos

    Ketos models now automatically set the correct sample length when loaded.

    Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

    * Updates to deep learning and FX GUI

    Added some more example sounds to deep learning UI.

    Updated click detector in the FX GUI.

    * PAMGuard FX sound output update

    * Updates to FX GUI

    * Updates to FX GUI

    * Update RawDataTransforms.java

    * Fixes to FX UI

    * Squashed commit of the following:

    commit 11ba8bf91e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Aug 4 11:45:47 2022 +0100

        MErge from DG Branch (#47)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

        * Click detector display fixes

        1. ICI not displaying correctly
        2. Component sizes in display dialog on hres monitors

        * Work on batch processing, after testing of options to autostart,
        autoexit and set wav file folder, database and binary store.

        * Update MHTClickTrainAlgorithm.java

        Fix unsynchronised access to a datablock in click train detector which was causing index errors.

        * Revamp of offline process messaging and control

        Includes some databsae logging of completed tasks

        * Offline task logging

        Bit more work, including notes and database storage of task
        reprocessing. Guess this could all become 'proper' PAMGuard data and be
        shown in a table on the display but that not priority enough.

        * Dialog packing

        Fix a couple of dialogs which don't back well on HDPI monitors

        * UDP Control

        Added multiport functionality

    commit 9a9f542d95
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Aug 4 11:42:45 2022 +0100

        Merge DG to Main (#46)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

        * Click detector display fixes

        1. ICI not displaying correctly
        2. Component sizes in display dialog on hres monitors

        * Work on batch processing, after testing of options to autostart,
        autoexit and set wav file folder, database and binary store.

        * Update MHTClickTrainAlgorithm.java

        Fix unsynchronised access to a datablock in click train detector which was causing index errors.

        * Revamp of offline process messaging and control

        Includes some databsae logging of completed tasks

        * Offline task logging

        Bit more work, including notes and database storage of task
        reprocessing. Guess this could all become 'proper' PAMGuard data and be
        shown in a table on the display but that not priority enough.

        * Dialog packing

        Fix a couple of dialogs which don't back well on HDPI monitors

        * UDP Control

        Added multiport functionality

    commit 49cd547aee
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Aug 4 11:40:29 2022 +0100

        Merge DG branch (#45)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

        * Click detector display fixes

        1. ICI not displaying correctly
        2. Component sizes in display dialog on hres monitors

        * Work on batch processing, after testing of options to autostart,
        autoexit and set wav file folder, database and binary store.

        * Update MHTClickTrainAlgorithm.java

        Fix unsynchronised access to a datablock in click train detector which was causing index errors.

        * Revamp of offline process messaging and control

        Includes some databsae logging of completed tasks

        * Offline task logging

        Bit more work, including notes and database storage of task
        reprocessing. Guess this could all become 'proper' PAMGuard data and be
        shown in a table on the display but that not priority enough.

        * Dialog packing

        Fix a couple of dialogs which don't back well on HDPI monitors

        * UDP Control

        Added multiport functionality

    commit 016cfd0da5
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Aug 4 11:35:06 2022 +0100

        Dialog positioning

        New functions to better positions dialogs on screen

    commit c9f2ab3e97
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Aug 1 11:13:24 2022 +0100

        puch to main (#44)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

        * Click detector display fixes

        1. ICI not displaying correctly
        2. Component sizes in display dialog on hres monitors

        * Work on batch processing, after testing of options to autostart,
        autoexit and set wav file folder, database and binary store.

        * Update MHTClickTrainAlgorithm.java

        Fix unsynchronised access to a datablock in click train detector which was causing index errors.

        * Revamp of offline process messaging and control

        Includes some databsae logging of completed tasks

        * Offline task logging

        Bit more work, including notes and database storage of task
        reprocessing. Guess this could all become 'proper' PAMGuard data and be
        shown in a table on the display but that not priority enough.

        * Dialog packing

        Fix a couple of dialogs which don't back well on HDPI monitors

    commit 55f5a3fcf1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Aug 1 10:59:36 2022 +0100

        Group detections menu

        Small changes to limit the number of menu items in "Add to existing
        group" to a maximum of 25 entries.

    commit b3f6c0e665
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Jul 29 10:50:45 2022 +0100

        Handle -nogui option in PamWorker

        PamWorker used to catalog files at startup (if a file folder input
        system is used). This creates a progress dialog. Stop it appearing in
        -nogui operations.

    commit 8569b6b579
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Jul 22 08:30:47 2022 +0100

        Click display fixes (#41)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

        * Click detector display fixes

        1. ICI not displaying correctly
        2. Component sizes in display dialog on hres monitors

    commit 128a512ff6
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Jul 19 16:37:57 2022 +0100

        Another attempt at stopping it crashing on a headless system

        Dealing with displays that get created for clickangle vetos and a call
        to the gui in the click train detector.

    commit 6eaa6e4978
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Jul 19 08:20:07 2022 +0100

        nogoi fix for headless systems. (#40)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

    commit 9fdd30556b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Jul 12 15:53:07 2022 +0100

        Variable sound output level (#39)

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

    * Bug fixes to click train detector

    Fixed bug with number of coasts in the MHT Kernel
    Added an option for amplitude to have a maximum
    Removed print statements.

    * Bug fix for click train logging

    The size of the string classifers field was dynamically set - this was a bug.

    * Bug fixes to the click train detector

    Bearing classifier section now updates properly when dialog reopened
    Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

    * Squashed commit of the following:

    commit 5a37bfe915
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Aug 19 08:17:06 2022 +0100

        Changes from DG branch (#50)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

        * Click detector display fixes

        1. ICI not displaying correctly
        2. Component sizes in display dialog on hres monitors

        * Work on batch processing, after testing of options to autostart,
        autoexit and set wav file folder, database and binary store.

        * Update MHTClickTrainAlgorithm.java

        Fix unsynchronised access to a datablock in click train detector which was causing index errors.

        * Revamp of offline process messaging and control

        Includes some databsae logging of completed tasks

        * Offline task logging

        Bit more work, including notes and database storage of task
        reprocessing. Guess this could all become 'proper' PAMGuard data and be
        shown in a table on the display but that not priority enough.

        * Dialog packing

        Fix a couple of dialogs which don't back well on HDPI monitors

        * UDP Control

        Added multiport functionality

        * Java version

        Changes unpacker to deal with non numeric characters on Linux

        * Fix to getVersion()

        So new version of this command should now work on Linux and Windows.

        * Multiport test

        Quick tester for multiport comms

        * Spectrogram display

        Stop spectrogram display continually recreating panels since it was
        unsubscribing discarded ones and sometimes causing crash in observable
        notifications.

        * Backup manager bug

        Error if no database. Fixed.

    commit b08e86e330
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Wed Aug 17 09:16:52 2022 +0100

        Bug fix for click train detector (#49)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

    commit ef0330173b
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Mon Aug 8 10:32:19 2022 +0100

        Click trian detector fixes (#48)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

    * Update DLModelWorker.java

    * Create matched_click_classifer_help.md

    * Update help files for matched click classifier

    * Update matched_click_classifer_help.md

    * Update matched_click_classifer_help.md

    * New screenshots got help files

    * New screenshot

    * Update matched_click_classifer_help.md

    New help file for the matched click classified.

    * Update matched_click_classifer_help.md

    * Squashed commit of the following:

    commit 6b15b3d536
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Aug 23 15:21:28 2022 +0100

        Change min java version to 11 which should be ok on some embedded
        systems.

    commit 4b3a37636b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Aug 23 14:30:46 2022 +0100

        CTD Fixes

        Couple more fixes to menus and datablock selection

    commit c641c58e4f
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Tue Aug 23 14:19:28 2022 +0100

        Bug fixes to click train detector (#51)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised …

    * Bug fixes to the matched click classifier

    The matched click classifier was not working when an in built click classifier was used. This was caused by an index out of bounds exception in the alarm system.

    Added new features;
    * The Time base display now exports sample rate to .mat files.
    * Bug fix file separator on time base display so it works on mac and Linux
    * Matched click classifier imports the first click in a list of click structures as a template.
    * Changed default length for restricted bins to 2048.

    * Add picture for help file

    * Update matched_click_classifer_help.md

    * Update matched_click_classifer_help.md

    * Squashed commit of the following:

    commit b01cb4d100
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Sep 13 11:19:31 2022 +0100

        Fix bug in 3DOffline task

        Problems with making catalogue of offline tasks. not important for now,
        but needs revisiting.

    commit ae6e2f947b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Sep 13 09:12:34 2022 +0100

        Merge Dougs fork (#53)

        * Variable sound output level

        Mods to SoundPlayback module to allow additional parameters. Implemented
        system for NI cards to allow changes to selected output voltage range
        meaning output can be boosted to level higher than current default.

        * Code to support nogui operations when no screens present on headless
        system

        * Fix problem of nogui headless operation trying to access screen size.

        * Click detector display fixes

        1. ICI not displaying correctly
        2. Component sizes in display dialog on hres monitors

        * Work on batch processing, after testing of options to autostart,
        autoexit and set wav file folder, database and binary store.

        * Update MHTClickTrainAlgorithm.java

        Fix unsynchronised access to a datablock in click train detector which was causing index errors.

        * Revamp of offline process messaging and control

        Includes some databsae logging of completed tasks

        * Offline task logging

        Bit more work, including notes and database storage of task
        reprocessing. Guess this could all become 'proper' PAMGuard data and be
        shown in a table on the display but that not priority enough.

        * Dialog packing

        Fix a couple of dialogs which don't back well on HDPI monitors

        * UDP Control

        Added multiport functionality

        * Java version

        Changes unpacker to deal with non numeric characters on Linux

        * Fix to getVersion()

        So new version of this command should now work on Linux and Windows.

        * Multiport test

        Quick tester for multiport comms

        * Spectrogram display

        Stop spectrogram display continually recreating panels since it was
        unsubscribing discarded ones and sometimes causing crash in observable
        notifications.

        * Backup manager bug

        Error if no database. Fixed.

        * Daylight saving problem

        Fix daylight saving problem in generation of timestamps in SQLTypes. See long explanation in SQLTypes.java. Only occurred in the hour after daylight saving starts.

    commit cd89c65d7c
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Sep 13 09:07:11 2022 +0100

        Fix synchronization problem in RawDataTransfroms

    commit 6b15b3d536
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Aug 23 15:21:28 2022 +0100

        Change min java version to 11 which should be ok on some embedded
        systems.

    commit 4b3a37636b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Aug 23 14:30:46 2022 +0100

        CTD Fixes

        Couple more fixes to menus and datablock selection

    commit c641c58e4f
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Tue Aug 23 14:19:28 2022 +0100

        Bug fixes to click train detector (#51)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+…

    * Fixes to click train detector and deep learning

    * Squashed commit of the following:

    commit 313ce0c46f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Sep 21 15:55:12 2022 +0100

        Help update (#60)

        * Plugin Help

        Small change to Help system so that plugins under development can more
        easily display their help

        * PamModel update

        Notes on how to add a plugin to the model during the plugin development
        phase.

        * Click Train Detector Help

        * Help for backup manager

    commit 290f2fbb95
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Sep 21 15:54:01 2022 +0100

        Click Train Detector help (#59)

        * Plugin Help

        Small change to Help system so that plugins under development can more
        easily display their help

        * PamModel update

        Notes on how to add a plugin to the model during the plugin development
        phase.

        * Click Train Detector Help

        * Help for backup manager

    commit 6aefbc124b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Sep 20 17:34:30 2022 +0100

        Merge from DG fork (#58)

        * Plugin Help

        Small change to Help system so that plugins under development can more
        easily display their help

        * PamModel update

        Notes on how to add a plugin to the model during the plugin development
        phase.

    commit eb176a4568
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 15 17:10:09 2022 +0100

        Merge from dg (#57)

    commit dee7e1d52e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 15 17:08:32 2022 +0100

        Merge pull request #13 from PAMGuard/main (#56)

    commit 1ed74bebe3
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 15 17:06:22 2022 +0100

        Merge pull request #13 from PAMGuard/main (#55)

    commit fbe39a7416
    Merge: 0114c80 425dd21
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 15 17:05:16 2022 +0100

        Merge branch 'main' into main

    commit 425dd21d9f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 15 17:01:45 2022 +0100

        Data selector for whistle classifier

        Added standard data selection options to whistle classifier output, and
        also made it a 'Detector' type for down stream data connections

    commit 0114c80d61
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 15 16:59:37 2022 +0100

        Work on click train detector help

    commit c8e271734f
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Thu Sep 15 09:18:48 2022 +0100

        Bug fixes to matched click classifier (#54)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher t…

    * fix bug in TDOA

    * Squashed commit of the following:

    commit 149dfab281
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Sep 30 09:56:13 2022 +0100

        Work on bug fixes in CTD classifier (#72)

    commit 91a704b07a
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Sep 30 09:54:33 2022 +0100

        Work on bug fixes in CTD classifier (#71)

    commit d01576c855
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Sep 30 09:53:51 2022 +0100

        Work on bug fixes in CTD classifier (#70)

    commit 11bed6ffba
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 29 14:56:29 2022 +0100

        Work on bug fixes in CTD classifier (#69)

    commit fccc0a715d
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Sep 29 14:54:30 2022 +0100

        Work on bug fixes in CTD classifier

    commit 5983f30ded
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Sep 27 16:44:12 2022 +0100

        Delete C:\temp\PamGuardTesting 2_02_04f\PAMBinary directory

        Get rid of a folder of pgdf files that Jamie had added to the repo

    commit 075aceb4aa
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Tue Sep 27 16:41:05 2022 +0100

        Click train detector bug fix (#68)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

          …

    * Click train fixes

    * Fixes to click train detector

    * Squashed commit of the following:

    commit 3a452936c0
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Sep 30 14:50:33 2022 +0100

        Fixes from DG (#74)

        * Work on bug fixes in CTD classifier

        * couple of final neatenings up of CTD

    commit 4015461fbc
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Fri Sep 30 14:23:17 2022 +0100

        Fixes to click train detector (#73)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

          …

    * Fix to click train detector

    NO_SPECIES flag was not being in standard classifier so beaked whales were being classified.

    * Getting sud files working

    * .sud decompression implemented

    Sud decompression implemented in real time and viewer mode. .sudx files hold a file map which is reloaded allowing rapid scrolling of sud files in viewer mode.

    * Rewrite how PAMGuard manages Audio Files

    PAMGuard audio file management is a mess (sorry Doug) requiring changes to code in at least 3 separate classes to make a new type of audio file work in real time and viewer mode.

    Have consolidated all audio file stuff into a PamAudioFileManager class which has a static getInstance() function. Any new type of audio file added in future (e.g. next is probably AudioMoth triggered recordings) then all that is needed is the Interface PamAudioFileloader to be satisfied and added to PamAudioFileManager list of audio file loaders.

    * Bug fix for sud in viewer mode and FX updates

    Fixed bug in sud file where IO exception occurred at the end of a file in viewer mode.

    Updates to click detector dialog in FX GUI.

    Updates to example sound factory.

    * Some more work on FX GUI

    * Added some validators in FX GUI

    ValidatorFX is awesome

    * Updates to FX GUI

    * Squashed commit of the following:

    commit 67060016c2
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Oct 21 12:26:42 2022 +0100

        REsolve issues in binayUIDFunctions

    commit 61c3d80f30
    Merge: 1de5ec6 4473d1b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Oct 21 12:23:08 2022 +0100

        Merge branch 'main' of https://github.com/PAMGuard/PAMGuard.git into main

    commit 1de5ec6e11
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Oct 21 12:22:09 2022 +0100

        Change error reporting in Binary UID functions

        Message on screen rather than stack trace since it's normal when a psfx
        moves to a different pc

    commit 4473d1b1bf
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Oct 21 11:12:04 2022 +0100

        Merge from DG (#77)

        * Work on bug fixes in CTD classifier

        * couple of final neatenings up of CTD

        * DWV Import

        Fixed DWV importer so that a binary file is still created if a DWV file
        doesn't exist. this is totally normal in quiet conditions, so the
        correct thing to do is to generate a binary file with no data so that
        effort is correctly recorded.

        * Error reporting in -nogui

        A lot of warnings were being issued and trying to use the default window
        which caused a null pointer when running -nogui. This is fixed by a) not
        trying to access frames which are null and b) changing the PAMWarning
        system to write messages to terminal rather than open a dialog.

    commit 63cc66a4b1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Oct 18 17:04:16 2022 +0100

        Merge from DG (#76)

        * Work on bug fixes in CTD classifier

        * couple of final neatenings up of CTD

        * DWV Import

        Fixed DWV importer so that a binary file is still created if a DWV file
        doesn't exist. this is totally normal in quiet conditions, so the
        correct thing to do is to generate a binary file with no data so that
        effort is correctly recorded.

    commit e4faed5cfc
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Oct 4 11:18:37 2022 +0100

        Add exitnosave command

        Add command for UDP or terminal control which will exit PAMGuard without
        first saving the settings

    commit f4f7cc59b6
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Mon Oct 3 14:30:22 2022 +0100

        Fix to click trian detector (#75)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
               …

    * Updated the maven repo with new sud file changes

    * Updates to FX GUI and new X3 repo

    * Update .gitignore

    * Squashed commit of the following:

    commit 5b1cc760d8
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Nov 16 09:12:55 2022 +0000

        Quick fix of calibration data for ST Click detector.

        Was getting a 5V input from it's bespoke acquisition, whereas needs 2.

    commit 3f5e4e4a79
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 21:08:40 2022 +0000

        Final final 2.02.06

        Don't believe it until you see that tag

    commit 890230a6ff
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:49:06 2022 +0000

        Final final readme 2.02.06

    commit 05268d810d
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:40:44 2022 +0000

        Version 2.02.06 (#87)

        (hopefully)

    commit 7d7ecb9545
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:39:37 2022 +0000

        Version 2.02.06 (#86)

        (hopefully)

    commit 76e8467201
    Merge: d2f74f60 ac280e1b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:37:14 2022 +0000

        Merge branch 'main' of https://github.com/PAMGuard/PAMGuard.git into main

    commit d2f74f606e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:36:49 2022 +0000

        readme for 2.02.06

    commit ac280e1b6f
    Author: m2oswald <45486636+m2oswald@users.noreply.github.com>
    Date:   Tue Nov 15 15:41:43 2022 +0000

        updates to Rocca module (#85)

        * allow Rocca to run without classifiers

        Fixed bug that threw an error if no classifier files were specified in Rocca Params dialog

        * add rocca switch to enable dev mode

        currently only shows/hides extra buttons in the Params dialog, but will
        extend to more options in the future

        * Fix memory issue with RoccaContourDataBlocks not being released for
        garbage collection

        Set RoccaContourDataBlock objects to null and stop PamObserver Timer to
        force release

    commit 655a546764
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:56:00 2022 +0000

        Update X3 Jar

    commit 96cd32034f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:55:37 2022 +0000

        Delete x3-2.2.0.pom

    commit bf90443b1b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:55:28 2022 +0000

        Delete x3-2.2.0.jar

    commit 22d32b4682
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:54:15 2022 +0000

        Update x3 jar file

    commit 14c5cf5afe
    Merge: ccd0fc79 376a9f0f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:49:36 2022 +0000

        Merge branch 'main' into main

    commit 376a9f0f0e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 14:30:04 2022 +0000

        Reinstate x3 jar

    commit 93193638b1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 14:29:37 2022 +0000

        Last changes to x3

    commit ccd0fc7965
    Author: m2oswald <45486636+m2oswald@users.noreply.github.com>
    Date:   Mon Nov 14 11:00:15 2022 +0000

        small updates to Rocca (#84)

        * allow Rocca to run without classifiers

        Fixed bug that threw an error if no classifier files were specified in Rocca Params dialog

        * add rocca switch to enable dev mode

        currently only shows/hides extra buttons in the Params dialog, but will
        extend to more options in the future

    commit ea32c5cdcb
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 13 17:41:13 2022 +0000

        SUD Files (#83)

        * Adding comments to table definitions.

        Update tabledefs so tableitems can have descriptions. Useful to the
        coder, but can also export formal xms schema for each table.

        * Writing xml schema

        Writing xml schema for PAMGuard database with annotations as complex
        types

        * Working SUD click extractor

        Seems to be mostly working and can generate PAMGuard click files
        automatically when processing SUD files using the soundtrap click
        detector

        * Small changes to SUD in PAMGuard

        * Better SUD timing

        Using latest microsecond time extraction from SUD unpack

        * SUD Processing

        Extraction of SUD file clicks with SoundTrap Click Detector. Timing now
        correct. Added some help pages.

        * Functional SUD Reader and SUD Click Extractor

        All seems working. Seems to throw the odd exception at end of file, but
        works OK.

    commit f08cf4ffd7
    Merge: d3277be3 4a75afc4
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 13 17:38:59 2022 +0000

        Merge pull request #29 from PAMGuard/main

        Memory leak fix

    commit d3277be3b1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 13 17:37:53 2022 +0000

        Functional SUD Reader and SUD Click Extractor

        All seems working. Seems to throw the odd exception at end of file, but
        works OK.

    commit d1af000040
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sat Nov 12 19:21:57 2022 +0000

        SUD Processing

        Extraction of SUD file clicks with SoundTrap Click Detector. Timing now
        correct. Added some help pages.

    commit 4a75afc414
    Merge: 3b053ff3 fe0fe11f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 11 20:59:10 2022 +0000

        Merge branch 'main' of https://github.com/PAMGuard/PAMGuard.git into main

    commit 3b053ff342
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 11 20:58:42 2022 +0000

        Memory leak

        Fix viewer memory leak whereby background measurements weren't being
        cleared between data loads, so eventually ran out of memory.

    commit 068a8b1a27
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 11 08:56:03 2022 +0000

        Better SUD timing

        Using latest microsecond time extraction from SUD unpack

    commit ee24c0ab6b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Nov 10 17:21:37 2022 +0000

        Small changes to SUD in PAMGuard

    commit 87cd2cd41f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Nov 10 15:20:15 2022 +0000

        Working SUD click extractor

        Seems to be mostly working and can generate PAMGuard click files
        automatically when processing SUD files using the soundtrap click
        detector

    commit 61dd6ef4d1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 8 16:42:57 2022 +0000

        Writing xml schema

        Writing xml schema for PAMGuard database with annotations as complex
        types

    commit fcdb64e467
    Merge: a72e68c2 fe0fe11f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 8 10:44:01 2022 +0000

        Merge pull request #28 from PAMGuard/main

        Fix to issue #80 (#81)

    commit fe0fe11faf
    Author: stabbutt <100229685+stabbutt@users.noreply.github.com>
    Date:   Tue Nov 8 01:02:52 2022 -0800

        Fix to issue #80 (#81)

        * Fix network sender since it was hopelessly out of date and did not send
        data in the correct format. OK now, though only tested on NARW.

        * Fix network sender since it was hopelessly out of date and did not send
        data in the correct format. OK now, though only tested on NARW.

        * Mods to support command line and Network control of PAMGuard and to
        retrieve summary information from some modules.

        * Fix issue #80: recording path command line override

        * Allow RUNNOTHING bearing calculations

        Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

    commit a72e68c26a
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 7 17:15:04 2022 +0000

        Adding comments to table definitions.

        Update tabledefs so tableitems can have descriptions. Useful to the
        coder, but can also export formal xms schema for each table.

    commit 3e717bd207
    Merge: aa7f18ea d2e69c50
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 4 15:09:47 2022 +0000

        Merge pull request #27 from PAMGuard/main

        Merge SUD changes from main

    commit d2e69c507e
    Merge: 4f734b77 aa7f18ea
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 4 15:09:40 2022 +0000

        Merge branch 'main' into main

    commit aa7f18eaa2
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Nov 2 10:09:30 2022 +0000

        SAIL CArd warnings

        Don't display in dialog when in nogui mode. Write to terminal

    commit 4f734b7775
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Mon Oct 31 13:43:15 2022 +0000

        Added sud file capability  (#78)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisp…

    * Bug fixes for DL module

    Fix lack of prediction lines when prediction pane first initialized in TDdisplayFX.

    Fixed transform pane causing array out of bounds exception when loading old settings.l

    * Deep learning memory leak fix

    Fixed a memory leak whereby reloading the model every file (even if the model is closed) caused a memory leak.

    * Updates to FX GUI

    * Merge from upstream/main

    * Commit for pull request

    * Bug fix deep learning classifier

    The number of class names was not being read from import file- fixed

    * Squashed commit of the following:

    commit 30cd72e2e5
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Jan 20 11:59:49 2023 +0000

        Update dependency-reduced-pom.xml

    commit b5cf955cba
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Jan 20 11:57:57 2023 +0000

        Fix bug in Click Detector target motion analysis

        Was crashing if not all click in event were loaded.

    commit 269398890e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Jan 19 17:53:59 2023 +0000

        2.02.07b

        Fix ICI display bug in click detector

    commit a89279ef81
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Jan 18 11:06:03 2023 +0000

        V2.02.07a dB levels bug fix

        Fixed bug in some level calculations where a channel map instead of a
        single channel was being passed to the function performing the calcs.
        Was OK if hydrophones had same gain, but got it wrong if they were
        different.

    commit e169ccb1a7
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Jan 10 11:17:44 2023 +0000

        Version 2.02.07

        Final readme, POM and version numbering for release 2.02.07

    commit 44da3ffb57
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Jan 10 10:45:33 2023 +0000

        Fix alarm module so it correctly uses Data Selectors

    commit 8642834c1e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Jan 6 17:07:34 2023 +0000

        Embryonic data units

        Data units flagged as embryonic don't get saved when first added to a
        data block. will get saved when embryonic flag set false and an update
        sent to the datablock. Useful when developing tracks which may continue
        to grow as more data become available.

    commit b1016c0cc8
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Dec 21 19:08:55 2022 +0000

        Hide tool tips

        Use Esc key to hide all Swing tooltips for 6 seconds. Works across
        PAMGuard.

    commit 4322b2d42b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 19 13:55:27 2022 +0000

        Hide tooltips

        Added option to help menu to hide all tooltips in the GUI.

    commit 407e9d9d08
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 19 13:54:40 2022 +0000

        Random Mystecete

        Added a random Mystecete type call (random tonals < 1kHz) to the
        simulator, which are vaguely humpback like sounds.

    commit 0d48118487
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 19 13:53:44 2022 +0000

        Fix streamer problem

        Was not remembering the types (Fixed, Sensor, Default) of data being
        used for sensor orientation of streamers.

    commit bd0bed350c
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 12 17:02:49 2022 +0000

        Update version info to 2.02.06b

    commit 4e0eab5d75
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 12 17:02:26 2022 +0000

        Grid movement

        Fix bug that threw null pointer if grid movement used on a simulated
        object without a set name.

    commit d27e4fb19f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 12 17:01:47 2022 +0000

        click Offline toolbar

        Make it show option to show only event clicks even if there are no click
        classifications

    commit fc9c70ad78
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 12 17:01:06 2022 +0000

        Fix Gebco grid data overlay offset

    commit 1be8a5ee83
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Dec 12 17:00:19 2022 +0000

        Fixed Landmarks

        Debug so they don't disappear whenever viewer data are reloaded.

    commit e7a67d33cf
    Merge: 6995bee c32d172
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 27 14:44:48 2022 +0000

        Merge branch 'main' of https://github.com/PAMGuard/PAMGuard.git into main

    commit 6995bee65b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 27 14:44:19 2022 +0000

        Logger LatLong

        Fix a couple of issues which threw and error in the event of a bad NMEA
        string.

    commit c32d172000
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 21 09:13:59 2022 +0000

        ROCCA Fix (#90)

        * Version 2.02.06

        (hopefully)

        * ROCCA Memory leak

        Another attempt at healing ROCCA memory leak

    commit 3203a0a50f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 18 10:52:50 2022 +0000

        Remove a few terminal outputs

        Mostly with file analysis, to reduce junk on terminal

    commit 6f6f7407ca
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 18 09:55:17 2022 +0000

        Ishmael bugs

        couple of places where PamDatablock.getLastUnit() was being used without
        synchronization and the unit was being deleted between the line checking
        there was a unit there and a line attempting to use the unit. Now
        correctly synched so will get a unit you can use, or null.

    commit 35ee1e3dfc
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Nov 17 19:00:45 2022 +0000

        Slipped in a last fix

        after release to correctly size components in PamModel viewer which
        weren't showing on hiDef correctly.

    commit 5b1cc760d8
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Nov 16 09:12:55 2022 +0000

        Quick fix of calibration data for ST Click detector.

        Was getting a 5V input from it's bespoke acquisition, whereas needs 2.

    commit 3f5e4e4a79
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 21:08:40 2022 +0000

        Final final 2.02.06

        Don't believe it until you see that tag

    commit 890230a6ff
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:49:06 2022 +0000

        Final final readme 2.02.06

    commit 05268d810d
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:40:44 2022 +0000

        Version 2.02.06 (#87)

        (hopefully)

    commit 7d7ecb9545
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:39:37 2022 +0000

        Version 2.02.06 (#86)

        (hopefully)

    commit 76e8467201
    Merge: d2f74f6 ac280e1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:37:14 2022 +0000

        Merge branch 'main' of https://github.com/PAMGuard/PAMGuard.git into main

    commit d2f74f606e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 15 17:36:49 2022 +0000

        readme for 2.02.06

    commit ac280e1b6f
    Author: m2oswald <45486636+m2oswald@users.noreply.github.com>
    Date:   Tue Nov 15 15:41:43 2022 +0000

        updates to Rocca module (#85)

        * allow Rocca to run without classifiers

        Fixed bug that threw an error if no classifier files were specified in Rocca Params dialog

        * add rocca switch to enable dev mode

        currently only shows/hides extra buttons in the Params dialog, but will
        extend to more options in the future

        * Fix memory issue with RoccaContourDataBlocks not being released for
        garbage collection

        Set RoccaContourDataBlock objects to null and stop PamObserver Timer to
        force release

    commit 655a546764
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:56:00 2022 +0000

        Update X3 Jar

    commit 96cd32034f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:55:37 2022 +0000

        Delete x3-2.2.0.pom

    commit bf90443b1b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:55:28 2022 +0000

        Delete x3-2.2.0.jar

    commit 22d32b4682
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:54:15 2022 +0000

        Update x3 jar file

    commit 14c5cf5afe
    Merge: ccd0fc7 376a9f0
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 15:49:36 2022 +0000

        Merge branch 'main' into main

    commit 376a9f0f0e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 14:30:04 2022 +0000

        Reinstate x3 jar

    commit 93193638b1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 14 14:29:37 2022 +0000

        Last changes to x3

    commit ccd0fc7965
    Author: m2oswald <45486636+m2oswald@users.noreply.github.com>
    Date:   Mon Nov 14 11:00:15 2022 +0000

        small updates to Rocca (#84)

        * allow Rocca to run without classifiers

        Fixed bug that threw an error if no classifier files were specified in Rocca Params dialog

        * add rocca switch to enable dev mode

        currently only shows/hides extra buttons in the Params dialog, but will
        extend to more options in the future

    commit ea32c5cdcb
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 13 17:41:13 2022 +0000

        SUD Files (#83)

        * Adding comments to table definitions.

        Update tabledefs so tableitems can have descriptions. Useful to the
        coder, but can also export formal xms schema for each table.

        * Writing xml schema

        Writing xml schema for PAMGuard database with annotations as complex
        types

        * Working SUD click extractor

        Seems to be mostly working and can generate PAMGuard click files
        automatically when processing SUD files using the soundtrap click
        detector

        * Small changes to SUD in PAMGuard

        * Better SUD timing

        Using latest microsecond time extraction from SUD unpack

        * SUD Processing

        Extraction of SUD file clicks with SoundTrap Click Detector. Timing now
        correct. Added some help pages.

        * Functional SUD Reader and SUD Click Extractor

        All seems working. Seems to throw the odd exception at end of file, but
        works OK.

    commit f08cf4ffd7
    Merge: d3277be 4a75afc
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 13 17:38:59 2022 +0000

        Merge pull request #29 from PAMGuard/main

        Memory leak fix

    commit d3277be3b1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sun Nov 13 17:37:53 2022 +0000

        Functional SUD Reader and SUD Click Extractor

        All seems working. Seems to throw the odd exception at end of file, but
        works OK.

    commit d1af000040
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Sat Nov 12 19:21:57 2022 +0000

        SUD Processing

        Extraction of SUD file clicks with SoundTrap Click Detector. Timing now
        correct. Added some help pages.

    commit 4a75afc414
    Merge: 3b053ff fe0fe11
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 11 20:59:10 2022 +0000

        Merge branch 'main' of https://github.com/PAMGuard/PAMGuard.git into main

    commit 3b053ff342
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 11 20:58:42 2022 +0000

        Memory leak

        Fix viewer memory leak whereby background measurements weren't being
        cleared between data loads, so eventually ran out of memory.

    commit 068a8b1a27
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 11 08:56:03 2022 +0000

        Better SUD timing

        Using latest microsecond time extraction from SUD unpack

    commit ee24c0ab6b
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Nov 10 17:21:37 2022 +0000

        Small changes to SUD in PAMGuard

    commit 87cd2cd41f
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Thu Nov 10 15:20:15 2022 +0000

        Working SUD click extractor

        Seems to be mostly working and can generate PAMGuard click files
        automatically when processing SUD files using the soundtrap click
        detector

    commit 61dd6ef4d1
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 8 16:42:57 2022 +0000

        Writing xml schema

        Writing xml schema for PAMGuard database with annotations as complex
        types

    commit fcdb64e467
    Merge: a72e68c fe0fe11
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Tue Nov 8 10:44:01 2022 +0000

        Merge pull request #28 from PAMGuard/main

        Fix to issue #80 (#81)

    commit fe0fe11faf
    Author: stabbutt <100229685+stabbutt@users.noreply.github.com>
    Date:   Tue Nov 8 01:02:52 2022 -0800

        Fix to issue #80 (#81)

        * Fix network sender since it was hopelessly out of date and did not send
        data in the correct format. OK now, though only tested on NARW.

        * Fix network sender since it was hopelessly out of date and did not send
        data in the correct format. OK now, though only tested on NARW.

        * Mods to support command line and Network control of PAMGuard and to
        retrieve summary information from some modules.

        * Fix issue #80: recording path command line override

        * Allow RUNNOTHING bearing calculations

        Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

    commit a72e68c26a
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Mon Nov 7 17:15:04 2022 +0000

        Adding comments to table definitions.

        Update tabledefs so tableitems can have descriptions. Useful to the
        coder, but can also export formal xms schema for each table.

    commit 3e717bd207
    Merge: aa7f18e d2e69c5
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 4 15:09:47 2022 +0000

        Merge pull request #27 from PAMGuard/main

        Merge SUD changes from main

    commit d2e69c507e
    Merge: 4f734b7 aa7f18e
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Fri Nov 4 15:09:40 2022 +0000

        Merge branch 'main' into main

    commit aa7f18eaa2
    Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
    Date:   Wed Nov 2 10:09:30 2022 +0000

        SAIL CArd warnings

        Don't display in dialog when in nogui mode. Write to terminal

    commit 4f734b7775
    Author: Jamie Mac <macster110@gmail.com>
    Date:   Mon Oct 31 13:43:15 2022 +0000

        Added sud file capability  (#78)

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * More screenshots

        * Add screenshots

        * Update click_train_help.md

        * Add classifier screenshot

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update POM with latest jdl4pam

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Update pom.xml

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Update click_train_help.md

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Screenshots

        * Update click_train_help.md

        * More screenshots

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots

        * Add classifier screenshot

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Add screenshots for click train detector help

        * Screenshots

        * Update click_train_help.md

        * Defult option for CPOD and porpoise to click train detector.

        Also a minor

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Create click_train_help.md

        * Update click_train_help.md

        * Update click_train_help.md

        * Updates and bug fixes to click train detector and CPOD importer

        * Bug fix for raw spectrogram in TDDisplayFX

        * Update KetosClassifier.java

        * Fix standard classifier JSON logging

        * Fixed bug in sweep classifier when using SoundTrap click detections

        * Added some colour averaging in the TFDisplayFX spectrgoram

        * Bug fix for rainbow click bearings

        Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Updated the prediction plots on time display

        Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

        * Updates to TDisplayFX

        yFIshmael now owrks with TDisplayFX
        TDisplayFX UI changes to make simpler.
        Some abstraction for drawing lines on TDisplayFX

        * Merge fixes to click train detector

        * Bug fix to UI

        * Updates to FX GUI

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Merge fixes to click train detector

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Updates to click train detector

        New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
        CPOD data can now build average waveforms.
        CPOD click trains can be viewed in TDisplayFX pop up menu displays
        Fixed Peak Frequency symbol chooser so it saves the colour box settings

        * Screenshots

        * Updates and bug fixes to click train detector and CPOD importer

        * Fix standard classifier JSON logging

        * Google humpback whale deep learning classifier

        Google's humpback whale deep learning classifier can now be imported.
        Updated TDisplayFX to make the data selection panes cleaner and clearer.
        Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

        * Bug fix to UI

        * Bug fixes to FX GUI

        * Updates to click train detector

        * Squashed commit of the following:

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updates to click train detector

        * Squashed commit of the following:

        commit 62b020b320
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Sat May 14 06:52:20 2022 +0100

            Add a new offlinefileslist function

        commit 3a9a5311aa
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Wed Apr 27 09:43:31 2022 +0100

            Update .gitignore

        commit 9f998165ee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon May 2 19:40:24 2022 +0100

            Updates to support ContactCollator plugin (#33)

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * fix problem in SummaryComand

            * Update command line options

            * Change synchronization on RawDataTransforms soit uses the owner data
            holder, not itself for synchronization. Otherwise you get thread locks.

            * Update command line options

            * Update DecimatorParams.java

            * couple of updates to support new contact collator plugin

            * Sorting out sample rate info in clip display to support Contact Collator
            plugin

            * FLAC Speed

            Improve flac speed

            * Update .gitignore

            * Update .gitignore

            * Updates to support new features in Contact Collator

            * Small update to RawDatautils to handle null data

        * Updated data selector for click train detector

        * Click train detector updates and bug fixes

        Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

        Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

        * Bug fix and improvements for Ketos

        Ketos models now automatically set the correct sample length when loaded.

        Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

        * Updates to deep learning and FX GUI

        Added some more example sounds to deep learning UI.

        Updated click detector in the FX GUI.

        * PAMGuard FX sound output update

        * Updates to FX GUI

        * Updates to FX GUI

        * Update RawDataTransforms.java

        * Fixes to FX UI

        * Squashed commit of the following:

        commit 11ba8bf91e
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:45:47 2022 +0100

            MErge from DG Branch (#47)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 9a9f542d95
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:42:45 2022 +0100

            Merge DG to Main (#46)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 49cd547aee
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:40:29 2022 +0100

            Merge DG branch (#45)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

        commit 016cfd0da5
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Thu Aug 4 11:35:06 2022 +0100

            Dialog positioning

            New functions to better positions dialogs on screen

        commit c9f2ab3e97
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 11:13:24 2022 +0100

            puch to main (#44)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

        commit 55f5a3fcf1
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Mon Aug 1 10:59:36 2022 +0100

            Group detections menu

            Small changes to limit the number of menu items in "Add to existing
            group" to a maximum of 25 entries.

        commit b3f6c0e665
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 29 10:50:45 2022 +0100

            Handle -nogui option in PamWorker

            PamWorker used to catalog files at startup (if a file folder input
            system is used). This creates a progress dialog. Stop it appearing in
            -nogui operations.

        commit 8569b6b579
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Jul 22 08:30:47 2022 +0100

            Click display fixes (#41)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

        commit 128a512ff6
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 16:37:57 2022 +0100

            Another attempt at stopping it crashing on a headless system

            Dealing with displays that get created for clickangle vetos and a call
            to the gui in the click train detector.

        commit 6eaa6e4978
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 19 08:20:07 2022 +0100

            nogoi fix for headless systems. (#40)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

        commit 9fdd30556b
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Tue Jul 12 15:53:07 2022 +0100

            Variable sound output level (#39)

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

        * Bug fixes to click train detector

        Fixed bug with number of coasts in the MHT Kernel
        Added an option for amplitude to have a maximum
        Removed print statements.

        * Bug fix for click train logging

        The size of the string classifers field was dynamically set - this was a bug.

        * Bug fixes to the click train detector

        Bearing classifier section now updates properly when dialog reopened
        Fixed rare bug when garbage bot attempts to find the last data unit in a list of zero units.

        * Squashed commit of the following:

        commit 5a37bfe915
        Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
        Date:   Fri Aug 19 08:17:06 2022 +0100

            Changes from DG branch (#50)

            * Variable sound output level

            Mods to SoundPlayback module to allow additional parameters. Implemented
            system for NI cards to allow changes to selected output voltage range
            meaning output can be boosted to level higher than current default.

            * Code to support nogui operations when no screens present on headless
            system

            * Fix problem of nogui headless operation trying to access screen size.

            * Click detector display fixes

            1. ICI not displaying correctly
            2. Component sizes in display dialog on hres monitors

            * Work on batch processing, after testing of options to autostart,
            autoexit and set wav file folder, database and binary store.

            * Update MHTClickTrainAlgorithm.java

            Fix unsynchronised access to a datablock in click train detector which was causing index errors.

            * Revamp of offline process messaging and control

            Includes some databsae logging of completed tasks

            * Offline task logging

            Bit more work, including notes and database storage of task
            reprocessing. Guess this could all become 'proper' PAMGuard data and be
            shown in a table on the display but that not priority enough.

            * Dialog packing

            Fix a couple of dialogs which don't back well on HDPI monitors

            * UDP Control

            Added multiport functionality

            * Java version

            Changes unpacker to deal with non numeric characters on Linux

            * Fix to getVersion()

            So new version of this command should now work on Linux and Windows.

            * Multiport test

            Quick tester for multiport comms

            * Spectrogram display

            Stop spectrogram display continually recreating panels since it was
            unsubscribing discarded ones and sometimes causing crash in observable
            notifications.

            * Backup manager bug

            Error if no database. Fixed.

        commit b08e86e330
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Wed Aug 17 09:16:52 2022 +0100

            Bug fix for click train detector (#49)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * More screenshots

            * Add screenshots

            * Update click_train_help.md

            * Add classifier screenshot

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update POM with latest jdl4pam

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Update pom.xml

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Update click_train_help.md

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Screenshots

            * Update click_train_help.md

            * More screenshots

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots

            * Add classifier screenshot

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Add screenshots for click train detector help

            * Screenshots

            * Update click_train_help.md

            * Defult option for CPOD and porpoise to click train detector.

            Also a minor

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Create click_train_help.md

            * Update click_train_help.md

            * Update click_train_help.md

            * Updates and bug fixes to click train detector and CPOD importer

            * Bug fix for raw spectrogram in TDDisplayFX

            * Update KetosClassifier.java

            * Fix standard classifier JSON logging

            * Fixed bug in sweep classifier when using SoundTrap click detections

            * Added some colour averaging in the TFDisplayFX spectrgoram

            * Bug fix for rainbow click bearings

            Bug fix when rainbow clicks are imported mean bearings cannot be calculated - was an array size issue in DelayGroup

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Updated the prediction plots on time display

            Deep learning prediciton plots on the time display have now been updated to have some colour options and also act as a legend.

            * Updates to TDisplayFX

            yFIshmael now owrks with TDisplayFX
            TDisplayFX UI changes to make simpler.
            Some abstraction for drawing lines on TDisplayFX

            * Merge fixes to click train detector

            * Bug fix to UI

            * Updates to FX GUI

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Merge fixes to click train detector

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX pop up menu displays
            Fixed Peak Frequency symbol chooser so it saves the colour box settings

            * Screenshots

            * Updates and bug fixes to click train detector and CPOD importer

            * Fix standard classifier JSON logging

            * Google humpback whale deep learning classifier

            Google's humpback whale deep learning classifier can now be imported.
            Updated TDisplayFX to make the data selection panes cleaner and clearer.
            Updated the TDisplayFX so that predicitons from deep learning models now have some display options e.g. changing colour.

            * Bug fix to UI

            * Bug fixes to FX GUI

            * Updates to click train detector

            * Squashed commit of the following:

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updates to click train detector

            * Squashed commit of the following:

            commit 62b020b320
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Sat May 14 06:52:20 2022 +0100

                Add a new offlinefileslist function

            commit 3a9a5311aa
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Wed Apr 27 09:43:31 2022 +0100

                Update .gitignore

            commit 9f998165ee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon May 2 19:40:24 2022 +0100

                Updates to support ContactCollator plugin (#33)

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * fix problem in SummaryComand

                * Update command line options

                * Change synchronization on RawDataTransforms soit uses the owner data
                holder, not itself for synchronization. Otherwise you get thread locks.

                * Update command line options

                * Update DecimatorParams.java

                * couple of updates to support new contact collator plugin

                * Sorting out sample rate info in clip display to support Contact Collator
                plugin

                * FLAC Speed

                Improve flac speed

                * Update .gitignore

                * Update .gitignore

                * Updates to support new features in Contact Collator

                * Small update to RawDatautils to handle null data

            * Updated data selector for click train detector

            * Click train detector updates and bug fixes

            Fixed very annoying bug which meant templates did not show properly when the dialog was first opened in swing.

            Added feature to simple classifier were % of clicks of one click classification (or other data selector paramter) can be used to classify.

            * Bug fix and improvements for Ketos

            Ketos models now automatically set the correct sample length when loaded.

            Bug fix for the TDisplayFX - null pointer exception if no class names loaded and sorted recently introduced bug in drawing predictions.

            * Updates to deep learning and FX GUI

            Added some more example sounds to deep learning UI.

            Updated click detector in the FX GUI.

            * PAMGuard FX sound output update

            * Updates to FX GUI

            * Updates to FX GUI

            * Update RawDataTransforms.java

            * Fixes to FX UI

            * Squashed commit of the following:

            commit 11ba8bf91e
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:45:47 2022 +0100

                MErge from DG Branch (#47)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 9a9f542d95
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:42:45 2022 +0100

                Merge DG to Main (#46)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 49cd547aee
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:40:29 2022 +0100

                Merge DG branch (#45)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

                * UDP Control

                Added multiport functionality

            commit 016cfd0da5
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Thu Aug 4 11:35:06 2022 +0100

                Dialog positioning

                New functions to better positions dialogs on screen

            commit c9f2ab3e97
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 11:13:24 2022 +0100

                puch to main (#44)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

                * Work on batch processing, after testing of options to autostart,
                autoexit and set wav file folder, database and binary store.

                * Update MHTClickTrainAlgorithm.java

                Fix unsynchronised access to a datablock in click train detector which was causing index errors.

                * Revamp of offline process messaging and control

                Includes some databsae logging of completed tasks

                * Offline task logging

                Bit more work, including notes and database storage of task
                reprocessing. Guess this could all become 'proper' PAMGuard data and be
                shown in a table on the display but that not priority enough.

                * Dialog packing

                Fix a couple of dialogs which don't back well on HDPI monitors

            commit 55f5a3fcf1
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Mon Aug 1 10:59:36 2022 +0100

                Group detections menu

                Small changes to limit the number of menu items in "Add to existing
                group" to a maximum of 25 entries.

            commit b3f6c0e665
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 29 10:50:45 2022 +0100

                Handle -nogui option in PamWorker

                PamWorker used to catalog files at startup (if a file folder input
                system is used). This creates a progress dialog. Stop it appearing in
                -nogui operations.

            commit 8569b6b579
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Fri Jul 22 08:30:47 2022 +0100

                Click display fixes (#41)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

                * Click detector display fixes

                1. ICI not displaying correctly
                2. Component sizes in display dialog on hres monitors

            commit 128a512ff6
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 16:37:57 2022 +0100

                Another attempt at stopping it crashing on a headless system

                Dealing with displays that get created for clickangle vetos and a call
                to the gui in the click train detector.

            commit 6eaa6e4978
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 19 08:20:07 2022 +0100

                nogoi fix for headless systems. (#40)

                * Variable sound output level

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

                * Code to support nogui operations when no screens present on headless
                system

                * Fix problem of nogui headless operation trying to access screen size.

            commit 9fdd30556b
            Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
            Date:   Tue Jul 12 15:53:07 2022 +0100

                Variable sound output level (#39)

                Mods to SoundPlayback module to allow additional parameters. Implemented
                system for NI cards to allow changes to selected output voltage range
                meaning output can be boosted to level higher than current default.

            * Bug fixes to click train detector

            Fixed bug with number of coasts in the MHT Kernel
            Added an option for amplitude to have a maximum
            Removed print statements.

            * Bug fix for click train logging

            The size of the string classifers field was dynamically set - this was a bug.

            Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

        commit ef0330173b
        Author: Jamie Mac <macster110@gmail.com>
        Date:   Mon Aug 8 10:32:19 2022 +0100

            Click trian detector fixes (#48)

            * Updates to click train detector

            New GUI for click train classification - more intuitive and allows users to build more powerful classifiers.
            CPOD data can now build average waveforms.
            CPOD click trains can be viewed in TDisplayFX p…

    * More work on FX click classifier

    * Bug fixes to deep learning module

    ---------

    Co-authored-by: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>

commit e4de847b5d
Merge: 85d25401 a7745c3b
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon Jan 30 08:36:28 2023 +0000

    Merge branch 'main' of https://github.com/PAMGuard/PAMGuard into main

commit 85d25401a1
Merge: 738c9ab6 7baf6dce
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Fri Jan 27 14:43:24 2023 +0000

    Merge pull request #37 from PAMGuard/main

    Couple of fixes

commit 738c9ab6dc
Merge: 358770b4 3573eaa4
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Jan 25 16:32:11 2023 +0000

    Merge pull request #36 from PAMGuard/main

    Merging from PM Main

commit 358770b485
Merge: 75b05a25 3203a0a5
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Sun Nov 20 21:04:48 2022 +0000

    Merge pull request #35 from PAMGuard/main

    Last fixes just after release 2.02.06

commit 75b05a25e6
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Sun Nov 20 21:00:00 2022 +0000

    ROCCA Memory leak

    Another attempt at healing ROCCA memory leak

commit 6f3992dc2d
Merge: 842509b9 5b1cc760
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Wed Nov 16 12:09:19 2022 +0000

    Merge pull request #34 from PAMGuard/main

    V2.02.06

commit 842509b9da
Merge: edfc5c90 7d7ecb95
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Nov 15 17:39:59 2022 +0000

    Merge pull request #33 from PAMGuard/main

    Version 2.02.06 (#86)

commit edfc5c9083
Merge: 48410970 76e84672
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Nov 15 17:39:11 2022 +0000

    Merge pull request #32 from PAMGuard/main

    Readme for 2.02.06

commit 484109703e
Merge: 22531824 e6740e15
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Nov 15 17:34:57 2022 +0000

    Merge branch 'main' of https://github.com/douggillespie/PAMGuard.git into main

commit 2253182438
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Nov 15 17:34:10 2022 +0000

    Version 2.02.06

    (hopefully)

commit e6740e1534
Merge: 49f7bb60 ac280e1b
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Tue Nov 15 15:45:41 2022 +0000

    Merge pull request #31 from PAMGuard/main

    X£ and ROCCA updates

commit 49f7bb6094
Merge: 376a9f0f 14c5cf5a
Author: Douglas Gillespie <50671166+douggillespie@users.noreply.github.com>
Date:   Mon Nov 14 15:49:46 2022 +0000

    Merge pull request #30 from PAMGuard/main

    Rocca update from Mike
This commit is contained in:
Jamie Mac 2023-05-15 17:22:50 +01:00
parent af51ea66a6
commit ac85571bf0
109 changed files with 4046 additions and 1018 deletions

30
.gitignore vendored
View File

@ -41,33 +41,3 @@ settings.xml
.classpath .classpath
.classpath .classpath
.classpath .classpath
.metadata/version.ini
.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml
.metadata/.plugins/org.eclipse.ui.intro/introstate
.metadata/.plugins/org.eclipse.tips.ide/dialog_settings.xml
.metadata/.plugins/org.eclipse.oomph.setup/workspace.setup
.metadata/.plugins/org.eclipse.m2e.logback/logback.2.1.100.20230106-1511.xml
.metadata/.plugins/org.eclipse.m2e.core/workspaceState.ser
.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml
.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml
.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml
.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat
.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache
.metadata/.plugins/org.eclipse.jdt.core/javaLikeNames.txt
.metadata/.plugins/org.eclipse.jdt.core/externalFilesCache
.metadata/.plugins/org.eclipse.jdt.core/assumedExternalFilesCache
.metadata/.plugins/org.eclipse.egit.core/.org.eclipse.egit.core.cmp/.settings/org.eclipse.core.resources.prefs
.metadata/.plugins/org.eclipse.e4.workbench/workbench.xmi
.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs
.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs
.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs
.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs
.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs
.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs
.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources
.metadata/.plugins/org.eclipse.core.resources/.root/1.tree
.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version
.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index
.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version
.metadata/.plugins/org.eclipse.core.resources/.projects/.org.eclipse.egit.core.cmp/.location
.metadata/.lock

View File

@ -388,7 +388,10 @@ PamguardBeta_ViewerMode.exe):</p>
<h1><a name="_LATEST_VERSION_2.02.03"></a><a name="_VERSION_2.02.07_January"></a><em><span <h1><a name="_LATEST_VERSION_2.02.03"></a><a name="_VERSION_2.02.07_January"></a><em><span
style='font-size:12.0pt;font-family:"Cambria",serif;font-style:normal'><a style='font-size:12.0pt;font-family:"Cambria",serif;font-style:normal'><a
href="#_Latest_Version_2.02.07">LATEST VERSION 2.02.07 January 2023</a></span></em></h1> href="#_Latest_Version_2.02.08">LATEST VERSION 2.02.08 May 2023</a></span></em></h1>
<h1><em><span style='font-size:12.0pt;font-family:"Cambria",serif;font-style:
normal'><a href="#_Latest_Version_2.02.07">Version 2.02.07 January 2023</a></span></em></h1>
<h1><em><span style='font-size:12.0pt;font-family:"Cambria",serif;font-style: <h1><em><span style='font-size:12.0pt;font-family:"Cambria",serif;font-style:
normal'><a href="#_Latest_Version_2.02.06">Version 2.02.06 November 2022</a></span></em></h1> normal'><a href="#_Latest_Version_2.02.06">Version 2.02.06 November 2022</a></span></em></h1>
@ -450,14 +453,35 @@ Version 2.00.10 June 2017</a></span></h1>
<h1><span style='font-size:12.0pt'><a href="#_Older_Versions">Older Versions</a></span></h1> <h1><span style='font-size:12.0pt'><a href="#_Older_Versions">Older Versions</a></span></h1>
<h1><a name="_Latest_Version_2.02.03_1"></a><a name="_Latest_Version_2.02.05"></a><a <h1><a name="_Latest_Version_2.02.03_1"></a><a name="_Latest_Version_2.02.05"></a><a
name="_Latest_Version_2.02.06"></a><a name="_Latest_Version_2.02.07"></a><span name="_Latest_Version_2.02.06"></a><a name="_Latest_Version_2.02.07"></a><a
lang=EN-US>Latest Version 2.02.07 January 2023</span></h1> name="_Latest_Version_2.02.08"></a><span lang=EN-US>Latest Version 2.02.08 May
2023</span></h1>
<h2><span lang=EN-US>Bug Fixes</span></h2> <h2><span lang=EN-US>Bug Fixes</span></h2>
<p class=MsoNormal><span lang=EN-US>Use of localization sensor and orientation data <p class=MsoNormal><span lang=EN-US>ROCCA Memory Leak: A memory leak in ROCCA,
for static hydrophones had a bug whereby it would continually forget angle which mostly occurred when processing large datasets of many offline files, has
offsets applied to static hydrophones in viewer mode. This is now fixed. </span></p> been fixed.</span></p>
<h2><span lang=EN-US>New Features</span></h2>
<p class=MsoNormal><span lang=EN-US>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. </span></p>
<p class=MsoNormal><span lang=EN-US>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. </span></p>
<h1><span lang=EN-US>Version 2.02.07 January 2023</span></h1>
<h2><span lang=EN-US>Bug Fixes</span></h2>
<p class=MsoNormal><span lang=EN-US>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. </span></p>
<p class=MsoNormal><span lang=EN-US>Click tool bar: Correctly shows event <p class=MsoNormal><span lang=EN-US>Click tool bar: Correctly shows event
selection options even if no species classification options are in place. </span></p> selection options even if no species classification options are in place. </span></p>
@ -467,8 +491,8 @@ selection options even if no species classification options are in place. </span
mode. Now fixed. </span></p> mode. Now fixed. </span></p>
<p class=MsoNormal><span lang=EN-US>ROCCA: Fixed (another) memory leak which <p class=MsoNormal><span lang=EN-US>ROCCA: Fixed (another) memory leak which
caused PAMGuard to crash when processing large data sets with the ROCCA caused PAMGuard to crash when processing large data sets with the ROCCA classifier.
classifier. </span></p> </span></p>
<p class=MsoNormal><span lang=EN-US>Ishmael Modules: Fixed bug which <p class=MsoNormal><span lang=EN-US>Ishmael Modules: Fixed bug which
occasionally caused crashes when processing many files offline. </span></p> occasionally caused crashes when processing many files offline. </span></p>
@ -1169,8 +1193,8 @@ Bug 441. Plot coordinate calculations incorrect in PamAxis.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>10. </span><span <p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>10. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span>Bug 442. BT Display does not change click symbol color when Colour lang=EN-US> </span>Bug 442. BT Display does not change click symbol color when
By Superdetection is selected.</p> Colour By Superdetection is selected.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>11. </span><span <p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>11. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
@ -1194,7 +1218,8 @@ Spectrogram display.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>15. </span><span <p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>15. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
Bug 447. Viewer mode throws exception when trying to load beamformer localisations</p> Bug 447. Viewer mode throws exception when trying to load beamformer
localisations</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>16. </span><span <p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>16. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
@ -1207,8 +1232,8 @@ Bug 449. Rocca Encounter Stats output file calculating incorrect values.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>18. </span><span <p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>18. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span>Bug 450. Ishmael Detectors subscribing to FFTDataBlock twice, lang=EN-US> </span>Bug 450. Ishmael Detectors subscribing to FFTDataBlock
meaning they process each data unit 2x doubling the output.</p> twice, meaning they process each data unit 2x doubling the output.</p>
<p class=MsoNormal><b><span lang=EN-US>Upgrades</span></b></p> <p class=MsoNormal><b><span lang=EN-US>Upgrades</span></b></p>
@ -1596,9 +1621,9 @@ lang=EN-US> </span>Added decimal degrees option to latitude/longitude dialog.</p
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>2. </span><span <p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>2. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span>Added option in the Click Delay parameters to restrict the number lang=EN-US> </span>Added option in the Click Delay parameters to restrict the
of initial samples used in the calculation. This can be useful for cleaning up number of initial samples used in the calculation. This can be useful for
delays in the presence of echoes and small time delays.</p> cleaning up delays in the presence of echoes and small time delays.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>3. </span><span <p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>3. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span> lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
@ -1971,8 +1996,8 @@ User is now able to specify Soundtrap date/time format</p>
<h1><a name="_Latest_Beta_Version_2.00.11"></a><span lang=EN-US>Beta Version <h1><a name="_Latest_Beta_Version_2.00.11"></a><span lang=EN-US>Beta Version
2.00.11 October 2017</span></h1> 2.00.11 October 2017</span></h1>
<p class=MsoNormal><span lang=EN-US>PAMGuard Version 2 contains major updates. You <p class=MsoNormal><span lang=EN-US>PAMGuard Version 2 contains major updates.
should read and understand the notes listed for <a You should read and understand the notes listed for <a
href="#_Latest_Beta_Version_2.00.10">Beta Version 2.00.10</a> before proceeding href="#_Latest_Beta_Version_2.00.10">Beta Version 2.00.10</a> before proceeding
with installation and use of this version.</span></p> with installation and use of this version.</span></p>
@ -2126,8 +2151,8 @@ to colour them by the colour assigned to the group. </span></p>
<h3><span lang=EN-US>Using Old PAMGuard Configurations</span></h3> <h3><span lang=EN-US>Using Old PAMGuard Configurations</span></h3>
<p class=MsoNormal><span lang=EN-US>Old PAMGuard configurations will work with the <p class=MsoNormal><span lang=EN-US>Old PAMGuard configurations will work with
new version. However please note the following:</span></p> the new version. However please note the following:</span></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-36.0pt'><span <p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-36.0pt'><span
lang=EN-US>1.</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lang=EN-US>1.</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -3147,8 +3172,8 @@ correctly calculated in real world coordinates. </p>
<p class=MsoNormal><i>Wild ArcGIS Interface</i> (Maps and Mapping group)</p> <p class=MsoNormal><i>Wild ArcGIS Interface</i> (Maps and Mapping group)</p>
<p class=MsoNormal>This module, developed by Michael Oswald / SWFSC, allows <p class=MsoNormal>This module, developed by Michael Oswald / SWFSC, allows
PAMGuard to output data in a format suitable for display in the WILD ArcGIS PAMGuard to output data in a format suitable for display in the WILD ArcGIS marine
marine mammal survey package. See online help for details. </p> mammal survey package. See online help for details. </p>
<p class=MsoNormal><i>Alarms</i> (Utilities Group)</p> <p class=MsoNormal><i>Alarms</i> (Utilities Group)</p>
@ -3288,8 +3313,8 @@ whistle.</p>
forms which did not display correctly in 'night' mode. </li> forms which did not display correctly in 'night' mode. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Bug fix in simulator. No longer <li class=MsoNormal style='margin-bottom:0cm'>Bug fix in simulator. No longer
stops or fails to start generating sounds. </li> stops or fails to start generating sounds. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Bug in calculated spectrum levels <li class=MsoNormal style='margin-bottom:0cm'>Bug in calculated spectrum
if data were decimated (<a levels if data were decimated (<a
href="http://sourceforge.net/p/pamguard/bugs/187/">http://sourceforge.net/p/pamguard/bugs/187/</a>) href="http://sourceforge.net/p/pamguard/bugs/187/">http://sourceforge.net/p/pamguard/bugs/187/</a>)
. Did not affect band level calculations. </li> . Did not affect band level calculations. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Bug in noise band monitor. <li class=MsoNormal style='margin-bottom:0cm'>Bug in noise band monitor.
@ -3373,9 +3398,9 @@ databases.</p>
<p class=MsoNormal style='margin-left:36.0pt'>National Instruments cards: Added <p class=MsoNormal style='margin-left:36.0pt'>National Instruments cards: Added
code in support of the new x-series devices. </p> code in support of the new x-series devices. </p>
<p class=MsoNormal style='margin-left:36.0pt'>ASIO sound cards: Added support for <p class=MsoNormal style='margin-left:36.0pt'>ASIO sound cards: Added support
a new open source ASIO driver system (jasiohost). The old system has been left for a new open source ASIO driver system (jasiohost). The old system has been
in place for now while we assess users response to the newer system. </p> left in place for now while we assess users response to the newer system. </p>
<p class=MsoNormal style='margin-left:36.0pt'><i>AIS</i></p> <p class=MsoNormal style='margin-left:36.0pt'><i>AIS</i></p>
@ -3450,14 +3475,14 @@ have implemented database storage for output of these modules. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Radar Display: A bug which stopped the radar display from correctly </span>Radar Display: A bug which stopped the radar display from correctly displaying
displaying bearings to whistles from arrays containing more than two hydrophone bearings to whistles from arrays containing more than two hydrophone elements
elements has been fixed. </p> has been fixed. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Database Speed: A substantial rewriting of some of the indexing methods in </span>Database Speed: A substantial rewriting of some of the indexing methods
the database module has led to a significant increase in the speed at which in the database module has led to a significant increase in the speed at which
data are written to the database (orders of magnitude for large databases). data are written to the database (orders of magnitude for large databases).
This is having a significant impact on the overall reliability of the software. This is having a significant impact on the overall reliability of the software.
Other changes have increased the speed (again by orders of magnitude) at which Other changes have increased the speed (again by orders of magnitude) at which
@ -3564,8 +3589,8 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Bearings can be calculated using the envelope of the waveform rather </span>Bearings can be calculated using the envelope of the waveform rather than
than the full waveform. The waveform or envelope can also be filtered prior to the full waveform. The waveform or envelope can also be filtered prior to
bearing calculation.</p> bearing calculation.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
@ -3698,11 +3723,11 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<p class=MsoNormal>2. Improved offline viewer functionality. </p> <p class=MsoNormal>2. Improved offline viewer functionality. </p>
<p class=MsoNormal>The offline viewer is much improved with better data scrolling <p class=MsoNormal>The offline viewer is much improved with better data
and the ability to view data either stored in the database or the binary scrolling and the ability to view data either stored in the database or the
storage system. Work has stated on functions which read and use data stored in binary storage system. Work has stated on functions which read and use data
audio files. This is currently limited to re-calculating and displaying stored in audio files. This is currently limited to re-calculating and
displaying spectrogram data during viewer mode operation.&nbsp; </p> displaying displaying spectrogram data during viewer mode operation.&nbsp; </p>
<p class=MsoNormal>3. Heading sensor readout</p> <p class=MsoNormal>3. Heading sensor readout</p>
@ -3721,8 +3746,8 @@ frequency division (i.e. previous versions would convert well from 96kHz to
<p class=MsoNormal><b>Bug fixes</b></p> <p class=MsoNormal><b>Bug fixes</b></p>
<p class=MsoNormal>1. Placement of axes on some displays (array manager and <p class=MsoNormal>1. Placement of axes on some displays (array manager and depth
depth side panel). Problem in 1.9.01 Beta now fixed. </p> side panel). Problem in 1.9.01 Beta now fixed. </p>
<p class=MsoNormal>2. Fixed problems of NMEA read out not restarting after a <p class=MsoNormal>2. Fixed problems of NMEA read out not restarting after a
serial drop out. NMEA now restarts correctly. </p> serial drop out. NMEA now restarts correctly. </p>
@ -3799,12 +3824,12 @@ re-label those channels 0,1,2,3. </p>
numbering scheme. For instance, if you had a configuration which worked in real numbering scheme. For instance, if you had a configuration which worked in real
time using channels 7 and 8 of a sound card, you could not use that same time using channels 7 and 8 of a sound card, you could not use that same
configuration to analyse wav files, which would always read their data as configuration to analyse wav files, which would always read their data as
channels 0 and 1. Similarly if you switched sound cards, you may have to reconfigure channels 0 and 1. Similarly if you switched sound cards, you may have to
every detector and several of the displays to handle the changes in channel reconfigure every detector and several of the displays to handle the changes in
numbering. </p> channel numbering. </p>
<p class=MsoNormal>I have spent a considerable amount of time trying to work out <p class=MsoNormal>I have spent a considerable amount of time trying to work
a better system for handling channel numbering in PAMGUARD and have decided 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 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 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 3,4,5 and 6, within PAMGUARD, everywhere apart from the Sound acquisition
@ -3997,10 +4022,10 @@ synchronisation.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Wigner time-frequency plot for the click detector. Clicks are NOT </span>Wigner time-frequency plot for the click detector. Clicks are NOT automatically
automatically displayed in the Winger window as they are for the waveform and displayed in the Winger window as they are for the waveform and spectrum
spectrum windows since the Wigner transformation is very time consuming. Clicks windows since the Wigner transformation is very time consuming. Clicks will be
will be displayed if you select them with the mouse.</p> displayed if you select them with the mouse.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -4392,9 +4417,9 @@ a serial port </p>
<p class=MsoNormal>New Likelihood detector. </p> <p class=MsoNormal>New Likelihood detector. </p>
<p class=MsoNormal>The likelihood detector module is an implementation of a likelihood <p class=MsoNormal>The likelihood detector module is an implementation of a
ratio test with flexible algorithms and configuration to estimate likelihood. likelihood ratio test with flexible algorithms and configuration to estimate
It is </p> likelihood. It is </p>
<p class=MsoNormal>suitable for detecting both short duration Odontocete clicks <p class=MsoNormal>suitable for detecting both short duration Odontocete clicks
(Sperm, Beaked, etc.) as well as moderate duration Mysticete calls (Humpback, (Sperm, Beaked, etc.) as well as moderate duration Mysticete calls (Humpback,
@ -4676,8 +4701,7 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<h2>0.5b&nbsp;&nbsp;&nbsp; 31 August 2007 </h2> <h2>0.5b&nbsp;&nbsp;&nbsp; 31 August 2007 </h2>
<p class=MsoNormal>Requires Java 6 Update 2 <p class=MsoNormal>Requires Java 6 Update 2 (http://java.com/en/download/manual.jsp)</p>
(http://java.com/en/download/manual.jsp)</p>
<p class=MsoNormal>Major new features include:</p> <p class=MsoNormal>Major new features include:</p>
@ -4720,8 +4744,8 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<p class=MsoNormal>&nbsp;</p> <p class=MsoNormal>&nbsp;</p>
<p class=MsoNormal><a name="_Toc312065304"></a><a name="_Toc312063949"></a><span <p class=MsoNormal><a name="_Toc312065304"></a><a name="_Toc312063949"></a><span
class=Heading2Char><span style='font-size:13.0pt'>1.0Beta 22 Jan 2008 - class=Heading2Char><span style='font-size:13.0pt'>1.0Beta 22 Jan 2008 - Pamguard
Pamguard starts two releases, core and beta release</span></span>, </p> starts two releases, core and beta release</span></span>, </p>
<p class=MsoNormal>this is the beta release</p> <p class=MsoNormal>this is the beta release</p>
@ -4739,8 +4763,8 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Multi animal click tracking with least squares fit calculation of </span>Multi animal click tracking with least squares fit calculation of position
position on map</p> on map</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family: <p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

View File

@ -4,7 +4,7 @@
<groupId>org.pamguard</groupId> <groupId>org.pamguard</groupId>
<artifactId>Pamguard</artifactId> <artifactId>Pamguard</artifactId>
<name>Pamguard Java12+</name> <name>Pamguard Java12+</name>
<version>2.02.07b</version> <version>2.02.07ab</version>
<description>Pamguard for Java 12+, using Maven to control dependcies</description> <description>Pamguard for Java 12+, using Maven to control dependcies</description>
<url>www.pamguard.org</url> <url>www.pamguard.org</url>
<organization> <organization>

328
pom.xml
View File

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>org.pamguard</groupId> <groupId>org.pamguard</groupId>
<artifactId>Pamguard</artifactId> <artifactId>Pamguard</artifactId>
<version>2.02.07b</version> <version>2.02.07ab</version>
<name>Pamguard Java12+</name> <name>Pamguard Java12+</name>
<description>Pamguard for Java 12+, using Maven to control dependcies</description> <description>Pamguard for Java 12+, using Maven to control dependcies</description>
<url>www.pamguard.org</url> <url>www.pamguard.org</url>
@ -22,8 +22,6 @@
<build> <build>
<sourceDirectory>src</sourceDirectory> <sourceDirectory>src</sourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
<resources> <resources>
<resource> <resource>
<directory>src</directory> <directory>src</directory>
@ -33,23 +31,25 @@
</excludes> </excludes>
</resource> </resource>
</resources> </resources>
<plugins> <plugins>
<plugin> <plugin>
<!-- original maven compiler definition - uses the JRE's javac compiler, <!-- original maven compiler definition - uses the JRE's javac compiler, not the one Eclipse uses
not the one Eclipse uses <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <artifactId>maven-compiler-plugin</artifactId>
<configuration> <release>13</release> </configuration> --> <version>3.8.0</version>
<configuration>
<release>13</release>
</configuration>
-->
<!-- attempt to use the Eclipse JDT compiler, so that the errors match <!-- attempt to use the Eclipse JDT compiler, so that the errors match when building
when building https://stackoverflow.com/questions/38070326/java-generics-compiler-error-not-shown-in-eclipse https://stackoverflow.com/questions/38070326/java-generics-compiler-error-not-shown-in-eclipse
https://wiki.eclipse.org/JDT/FAQ#Can_I_use_JDT_outside_Eclipse_to_compile_Java_code.3F https://wiki.eclipse.org/JDT/FAQ#Can_I_use_JDT_outside_Eclipse_to_compile_Java_code.3F
https://wiki.eclipse.org/Tycho/FAQ#Can_I_use_the_Tycho_compiler_support_in_non-OSGi_projects.2C_too.3F --> https://wiki.eclipse.org/Tycho/FAQ#Can_I_use_the_Tycho_compiler_support_in_non-OSGi_projects.2C_too.3F
-->
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version> <version>3.8.1</version>
<configuration> <configuration>
<!-- set compiler to use Java version 11 API https://docs.oracle.com/javase/9/tools/javac.htm#JSWOR627 --> <!-- set compiler to use Java version 11 API https://docs.oracle.com/javase/9/tools/javac.htm#JSWOR627 -->
@ -83,12 +83,11 @@
</plugin> </plugin>
<!-- Maven Shade plugin - for creating the uberjar / fatjar --> <!-- Maven Shade plugin - for creating the uberjar / fatjar -->
<!-- see http://maven.apache.org/plugins/maven-shade-plugin/index.html <!-- see http://maven.apache.org/plugins/maven-shade-plugin/index.html for details -->
for details -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version> <version>3.2.1</version>
<configuration> <configuration>
<transformers> <transformers>
<transformer <transformer
@ -103,23 +102,20 @@
</goals> </goals>
<configuration> <configuration>
<transformers> <transformers>
<transformer <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries> <manifestEntries>
<Main-Class>pamguard.Pamguard</Main-Class> <Main-Class>pamguard.Pamguard</Main-Class>
<Class-Path>.</Class-Path> <!-- this is from the orig ant build file --> <Class-Path>.</Class-Path> <!-- this is from the orig ant build file -->
<SplashScreen-Image>Resources/pgBlankSplash.png</SplashScreen-Image> <!-- this is from the orig ant build file --> <SplashScreen-Image>Resources/pgBlankSplash.png</SplashScreen-Image> <!-- this is from the orig ant build file -->
</manifestEntries> </manifestEntries>
</transformer> </transformer>
<transformer <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
</transformers> </transformers>
<filters> <filters>
<filter> <filter>
<artifact>*:*</artifact> <artifact>*:*</artifact>
<excludes> <excludes>
<exclude>META-INF/*.SF</exclude> <!-- get rid of manifests from library jars - also done in orig ant build <exclude>META-INF/*.SF</exclude> <!-- get rid of manifests from library jars - also done in orig ant build file -->
file -->
<exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude> <exclude>META-INF/*.RSA</exclude>
</excludes> </excludes>
@ -138,12 +134,11 @@
<version>0.5.1</version> <version>0.5.1</version>
</plugin> </plugin>
<!-- The Maven dependency plugin, which can copy all dependencies into <!-- The Maven dependency plugin, which can copy all dependencies into a temp folder for jdeps analysis -->
a temp folder for jdeps analysis -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId> <artifactId>maven-dependency-plugin</artifactId>
<version>3.5.0</version> <version>3.1.1</version>
<executions> <executions>
<execution> <execution>
<id>copy-dependencies</id> <id>copy-dependencies</id>
@ -159,42 +154,35 @@
</configuration> </configuration>
</execution> </execution>
<!-- this deletes all the dependencies in the local repository and downloads <!-- this deletes all the dependencies in the local repository and downloads them again.
them again. Run a Maven > Update after doing this in order to properly reset Run a Maven > Update after doing this in order to properly reset the dependencies. Also, you
the dependencies. Also, you will need to add the 3 jar files (x3, JasioHost will need to add the 3 jar files (x3, JasioHost and jave) back into the local repository after
and jave) back into the local repository after running this command --> running this command -->
<!-- I'm not sure why, but every time I try to run the shade:shade build <!-- I'm not sure why, but every time I try to run the shade:shade build to create a
to create a fatjar it first runs this, which deletes all of the dependencies fatjar it first runs this, which deletes all of the dependencies and completely fails.
and completely fails. I think it has something to do with the lifecycle mapping, I think it has something to do with the lifecycle mapping, but that's beyond my Maven
but that's beyond my Maven abilities right now. I can't even remember why abilities right now.
I added this in the first place, so I'm going to comment it out <execution> I can't even remember why I added this in the first place, so I'm going to comment
<id>purge-local-dependencies</id> <phase>process-sources</phase> <goals> it out
<goal>purge-local-repository</goal> </goals> <configuration> </configuration> <execution>
</execution> --> <id>purge-local-dependencies</id>
<phase>process-sources</phase>
<goals>
<goal>purge-local-repository</goal>
</goals>
<configuration>
</configuration>
</execution>
-->
</executions> </executions>
</plugin> </plugin>
<!-- Allows Maven to run JUnit tests -->
<!-- Note that for some reason surefire 3.0.0 does not seem to work.
It fails to find or run any of the unit tests - no idea why. -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
</plugin>
</plugins> </plugins>
<pluginManagement> <pluginManagement>
<plugins> <plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
only. It has no influence on the Maven build itself. -->
<plugin> <plugin>
<groupId>org.eclipse.m2e</groupId> <groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId> <artifactId>lifecycle-mapping</artifactId>
@ -245,9 +233,8 @@
<!-- ************************* Extra Repositories ************************************* --> <!-- ************************* Extra Repositories ************************************* -->
<repositories> <repositories>
<!-- Project repo to hold the custom jar files that are not available in <!-- Project repo to hold the custom jar files that are not available in Maven. Do
Maven. Do this so that we don't have to do the extra step of manually installing this so that we don't have to do the extra step of manually installing jar files in the local repo -->
jar files in the local repo -->
<repository> <repository>
<id>repo</id> <id>repo</id>
<releases> <releases>
@ -261,19 +248,21 @@
</repository> </repository>
<!-- Repo for Jamie's code --> <!-- Repo for Jamie's code -->
<!-- IMPORTANT: SOMEHOW THIS REPO INTERFERES WITH THE JAVAFX DEPENDENCIES. <!-- IMPORTANT: SOMEHOW THIS REPO INTERFERES WITH THE
Don't understand how, but it does. If Maven is not downloading the JavaFX JAVAFX DEPENDENCIES. Don't understand how, but it
dependencies and is instead throwing errors, try commenting out this repository. does. If Maven is not downloading the JavaFX dependencies
Let Maven download the JavaFX files, and then uncomment this repo again. and is instead throwing errors, try commenting out this
repository. Let Maven download the JavaFX files, and
then uncomment this repo again.
Same thing seems to be occurring if I try to update the postgresql library. --> Same thing seems to be occurring if I try to update the postgresql library. -->
<!-- <repository> --> <!-- <repository> -->
<!-- <snapshots> --> <!-- <snapshots> -->
<!-- <enabled>false</enabled> --> <!-- <enabled>false</enabled> -->
<!-- </snapshots> --> <!-- </snapshots> -->
<!-- <id>central</id> --> <!-- <id>central</id> -->
<!-- <name>a0u0ltozdsehx-artifactory-primary-0-releases</name> --> <!-- <name>a0u0ltozdsehx-artifactory-primary-0-releases</name> -->
<!-- <url>https://jmachund.jfrog.io/artifactory/jpam2</url> --> <!-- <url>https://jmachund.jfrog.io/artifactory/jpam2</url> -->
<!-- </repository> --> <!-- </repository> -->
<!-- Repo for netCDF --> <!-- Repo for netCDF -->
<repository> <repository>
@ -285,8 +274,15 @@
<url>https://artifacts.unidata.ucar.edu/repository/unidata-all/</url> <url>https://artifacts.unidata.ucar.edu/repository/unidata-all/</url>
</repository> </repository>
<!-- <repository> <snapshots> <enabled>false</enabled> </snapshots> <id>geomajas</id> <!--
<name>geomajas</name> <url>http://maven.geomajas.org/</url> </repository> --> <repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>geomajas</id>
<name>geomajas</name>
<url>http://maven.geomajas.org/</url>
</repository>-->
<!-- Repo for Renjin Script Engine --> <!-- Repo for Renjin Script Engine -->
<repository> <repository>
@ -318,23 +314,6 @@
<!-- ************************* Dependencies ************************************* --> <!-- ************************* Dependencies ************************************* -->
<dependencies> <dependencies>
<!-- https://mvnrepository.com/artifact/junit/junit Testing framework for
PAMGuard -->
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.9.2</version>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-runner</artifactId>
<version>1.9.2</version>
<scope>test</scope>
</dependency>
<!--jpam project - utilities --> <!--jpam project - utilities -->
<dependency> <dependency>
<groupId>io.github.macster110</groupId> <groupId>io.github.macster110</groupId>
@ -342,15 +321,15 @@
<version>0.0.56</version> <version>0.0.56</version>
</dependency> </dependency>
<!--jpam project - Deep learning java library DG has commented this out <!--jpam project - Deep learning java library
since there are problems with access to the maven repo on JDJM's Github. DG has commented this out since there are problems with access to the maven repo
For now a jar file is included in the build and we'll go back to Maven when on JDJM's Github. For now a jar file is included in the build and we'll go back to
we can ... DG 15 Jan 2022. Repo for jpam code- this used for deep learning Maven when we can ... DG 15 Jan 2022.
[15:17] Jamie MacAulay --> Repo for jpam code- this used for deep learning [15:17] Jamie MacAulay-->
<dependency> <dependency>
<groupId>io.github.macster110</groupId> <groupId>io.github.macster110</groupId>
<artifactId>jdl4pam</artifactId> <artifactId>jdl4pam</artifactId>
<version>0.0.96</version> <version>0.0.94</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/gov.nist.math/jama --> <!-- https://mvnrepository.com/artifact/gov.nist.math/jama -->
@ -361,11 +340,12 @@
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls --> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
<!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND INSTEAD <!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND
THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN INTERFERENCE WITH JAMIE'S INSTEAD THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN
REPOSITORY. I'm not sure why this happens, but it does. To fix, comment out INTERFERENCE WITH JAMIE'S REPOSITORY. I'm not sure why this happens,
the repository (in the <repositories> section above, let Maven download the but it does. To fix, comment out the repository (in
JavaFX files, and then uncomment the repository again. --> the <repositories> section above, let Maven download the JavaFX
files, and then uncomment the repository again. -->
<dependency> <dependency>
<groupId>org.openjfx</groupId> <groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId> <artifactId>javafx-controls</artifactId>
@ -373,11 +353,12 @@
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-swing --> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-swing -->
<!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND INSTEAD <!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND
THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN INTERFERENCE WITH JAMIE'S INSTEAD THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN
REPOSITORY. I'm not sure why this happens, but it does. To fix, comment out INTERFERENCE WITH JAMIE'S REPOSITORY. I'm not sure why this happens,
the repository (in the <repositories> section above, let Maven download the but it does. To fix, comment out the repository (in
JavaFX files, and then uncomment the repository again. --> the <repositories> section above, let Maven download the JavaFX
files, and then uncomment the repository again. -->
<dependency> <dependency>
<groupId>org.openjfx</groupId> <groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId> <artifactId>javafx-swing</artifactId>
@ -385,11 +366,12 @@
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-media --> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-media -->
<!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND INSTEAD <!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND
THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN INTERFERENCE WITH JAMIE'S INSTEAD THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN
REPOSITORY. I'm not sure why this happens, but it does. To fix, comment out INTERFERENCE WITH JAMIE'S REPOSITORY. I'm not sure why this happens,
the repository (in the <repositories> section above, let Maven download the but it does. To fix, comment out the repository (in
JavaFX files, and then uncomment the repository again. --> the <repositories> section above, let Maven download the JavaFX
files, and then uncomment the repository again. -->
<dependency> <dependency>
<groupId>org.openjfx</groupId> <groupId>org.openjfx</groupId>
<artifactId>javafx-media</artifactId> <artifactId>javafx-media</artifactId>
@ -397,18 +379,19 @@
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web --> <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web -->
<!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND INSTEAD <!-- IMPORTANT - IF MAVEN IS NOT DOWNLOADING THE JAVAFX FILES AND
THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN INTERFERENCE WITH JAMIE'S INSTEAD THROWING AN ERROR, IT MIGHT BE BECAUSE THERE IS AN
REPOSITORY. I'm not sure why this happens, but it does. To fix, comment out INTERFERENCE WITH JAMIE'S REPOSITORY. I'm not sure why this happens,
the repository (in the <repositories> section above, let Maven download the but it does. To fix, comment out the repository (in
JavaFX files, and then uncomment the repository again. --> the <repositories> section above, let Maven download the JavaFX
files, and then uncomment the repository again. -->
<dependency> <dependency>
<groupId>org.openjfx</groupId> <groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId> <artifactId>javafx-web</artifactId>
<version>${javafx.version}</version> <version>${javafx.version}</version>
</dependency> </dependency>
<!-- Decorates JavaFX components --> <!-- Decorates JavaFX components-->
<dependency> <dependency>
<groupId>net.synedra</groupId> <groupId>net.synedra</groupId>
<artifactId>validatorfx</artifactId> <artifactId>validatorfx</artifactId>
@ -494,8 +477,8 @@
</dependency> </dependency>
<!-- https://search.maven.org/artifact/org.kordamp.ikonli/ikonli-javafx/12.2.0/jar --> <!-- https://search.maven.org/artifact/org.kordamp.ikonli/ikonli-javafx/12.2.0/jar -->
<!-- Icon symbol pack to replace FontAwesome. This is the core library, <!-- Icon symbol pack to replace FontAwesome. This is the core library, and the
and the actual symbol packs need to be added separately (see below) --> actual symbol packs need to be added separately (see below) -->
<dependency> <dependency>
<groupId>org.kordamp.ikonli</groupId> <groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-javafx</artifactId> <artifactId>ikonli-javafx</artifactId>
@ -503,8 +486,13 @@
</dependency> </dependency>
<!-- Ikonli FontAwesome5 font pack https://kordamp.org/ikonli/cheat-sheet-fontawesome5.html --> <!-- Ikonli FontAwesome5 font pack https://kordamp.org/ikonli/cheat-sheet-fontawesome5.html -->
<!-- <dependency> <groupId>org.kordamp.ikonli</groupId> <artifactId>ikonli-fontawesome5-pack</artifactId> <!--
<version>12.2.0</version> </dependency> --> <dependency>
<groupId>org.kordamp.ikonli</groupId>
<artifactId>ikonli-fontawesome5-pack</artifactId>
<version>12.2.0</version>
</dependency>
-->
<!-- Ikonli MaterialDesign2 (Latest) font pack https://kordamp.org/ikonli/cheat-sheet-materialdesign2.html --> <!-- Ikonli MaterialDesign2 (Latest) font pack https://kordamp.org/ikonli/cheat-sheet-materialdesign2.html -->
<dependency> <dependency>
@ -553,11 +541,22 @@
</dependency> </dependency>
<!-- NOT SURE IF WE NEED THE JAXB LIBRARIES HERE - NO ERRORS WHEN REMOVED <!-- NOT SURE IF WE NEED THE JAXB LIBRARIES HERE - NO ERRORS WHEN REMOVED
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <dependency>
<version>2.3.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <groupId>javax.xml.bind</groupId>
<artifactId>jaxb-core</artifactId> <version>2.3.0.1</version> </dependency> <artifactId>jaxb-api</artifactId>
<dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version>
<version>2.3.2</version> </dependency> --> </dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.2</version>
</dependency>
-->
<!-- https://mvnrepository.com/artifact/org.jflac/jflac-codec --> <!-- https://mvnrepository.com/artifact/org.jflac/jflac-codec -->
<dependency> <dependency>
@ -637,8 +636,7 @@
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java --> <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java -->
<!-- this is needed so that tensorflow models run properly (used in Deep <!-- this is needed so that tensorflow models run properly (used in Deep Learning plugin) -->
Learning plugin) -->
<!-- NOTE it is important this is included before edu.ucar.netcdfAll so <!-- NOTE it is important this is included before edu.ucar.netcdfAll so
that this version is used instead of the internal version - exclusions do that this version is used instead of the internal version - exclusions do
not seem to work otherwise --> not seem to work otherwise -->
@ -649,8 +647,7 @@
</dependency> </dependency>
<!-- https://docs.unidata.ucar.edu/netcdf-java/5.2/userguide/using_netcdf_java_artifacts.html --> <!-- https://docs.unidata.ucar.edu/netcdf-java/5.2/userguide/using_netcdf_java_artifacts.html -->
<!-- exclusions have been added here to fix problem with Deep Learning <!-- exclusions have been added here to fix problem with Deep Learning plugin - see above -->
plugin - see above -->
<dependency> <dependency>
<groupId>edu.ucar</groupId> <groupId>edu.ucar</groupId>
<artifactId>netcdfAll</artifactId> <artifactId>netcdfAll</artifactId>
@ -691,8 +688,8 @@
<version>0.9.2725</version> <version>0.9.2725</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api this one is <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api
only needed to get rid of an annoying warning that shows up during startup --> this one is only needed to get rid of an annoying warning that shows up during startup -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId> <artifactId>slf4j-api</artifactId>
@ -701,8 +698,8 @@
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop this one is <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop
only needed to get rid of an annoying warning that shows up during startup --> this one is only needed to get rid of an annoying warning that shows up during startup -->
<dependency> <dependency>
<groupId>org.slf4j</groupId> <groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId> <artifactId>slf4j-nop</artifactId>
@ -712,18 +709,24 @@
<!-- https://mvnrepository.com/artifact/org.docx4j/docx4j-JAXB-ReferenceImpl --> <!-- https://mvnrepository.com/artifact/org.docx4j/docx4j-JAXB-ReferenceImpl -->
<!-- note that we are excluding slf4j-api here, because if we don't then <!-- note that we are excluding slf4j-api here, because if we don't then one of the
one of the transitive dependencies of docx4j (jcl-over-slf4j) will try to transitive dependencies of docx4j (jcl-over-slf4j) will try to load an older
load an older version of slf4j-api, resulting in a weird warning/error that version of slf4j-api, resulting in a weird warning/error that shows up every time that
shows up every time that PAMGuard start up --> PAMGuard start up -->
<!-- DONT BOTHER WITH EXCLUSION, DOESN'T MAKE THE ERROR GO AWAY. Leaving <!-- DONT BOTHER WITH EXCLUSION, DOESN'T MAKE THE ERROR GO AWAY. Leaving code here
code here just in case the older version does cause a conflict at some point --> just in case the older version does cause a conflict at some point -->
<dependency> <dependency>
<groupId>org.docx4j</groupId> <groupId>org.docx4j</groupId>
<artifactId>docx4j-JAXB-ReferenceImpl</artifactId> <artifactId>docx4j-JAXB-ReferenceImpl</artifactId>
<version>11.1.3</version> <version>11.1.3</version>
<!-- <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <!--
</exclusion> </exclusions> --> <exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
-->
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc --> <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
@ -754,23 +757,37 @@
<version>1.5.2</version> <version>1.5.2</version>
</dependency> </dependency>
<!-- Jave2 (https://github.com/a-schild/jave2) - fork of original jave <!-- Jave2 (https://github.com/a-schild/jave2) - fork of original jave from sauronsoft. A LOT bigger; the win64 files alone are > 60Mb compared
from sauronsoft. A LOT bigger; the win64 files alone are > 60Mb compared to 14Mb originally. Since the old one worked fine, let's stick with it for now and save the space
to 14Mb originally. Since the old one worked fine, let's stick with it for <dependency>
now and save the space <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId> <groupId>ws.schild</groupId>
<version>2.7.1</version> </dependency> <dependency> <groupId>ws.schild</groupId> <artifactId>jave-core</artifactId>
<artifactId>jave-nativebin-win64</artifactId> <version>2.7.1</version> </dependency> --> <version>2.7.1</version>
</dependency>
<dependency>
<groupId>ws.schild</groupId>
<artifactId>jave-nativebin-win64</artifactId>
<version>2.7.1</version>
</dependency>
-->
<!-- https://mvnrepository.com/artifact/it.sauronsoftware/jave DOESN'T <!-- https://mvnrepository.com/artifact/it.sauronsoftware/jave
WORK - NOT IN THE ICM REPOSITORY ANYMORE. STICK WITH ORIG JAR FILE <dependency> DOESN'T WORK - NOT IN THE ICM REPOSITORY ANYMORE. STICK WITH ORIG JAR FILE
<groupId>it.sauronsoftware</groupId> <artifactId>jave</artifactId> <version>1.0.2</version> <dependency>
</dependency> --> <groupId>it.sauronsoftware</groupId>
<artifactId>jave</artifactId>
<version>1.0.2</version>
</dependency>
-->
<!-- not in Maven repository --> <!-- not in Maven repository
you may need to copy files from your downloaded PAMGuard source code, e.g. C:\Users\*yourreposfolder*\source\repos\PAMGuardPAMGuard\repo\pamguard\org\x3\2.2.2 to
C:\Users\*yourusername*\.m2\repository\pamguard\org\x3\2.2.2
-->
<dependency> <dependency>
<groupId>pamguard.org</groupId> <groupId>pamguard.org</groupId>
<artifactId>x3</artifactId> <artifactId>x3</artifactId>
<version>2.2.0</version> <version>2.2.2</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/it.sauronsoftware/jave --> <!-- https://mvnrepository.com/artifact/it.sauronsoftware/jave -->
@ -788,8 +805,13 @@
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml --> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml -->
<!-- <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <!--
<version>2.10.1</version> </dependency> --> <dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.10.1</version>
</dependency>
-->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency> <dependency>

View File

@ -0,0 +1,4 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Mon Apr 24 10:32:52 BST 2023
x3-2.2.1.jar>=
x3-2.2.1.pom>=

Binary file not shown.

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>pamguard.org</groupId>
<artifactId>x3</artifactId>
<version>2.2.1</version>
<description>POM was created from install:install-file</description>
</project>

View File

@ -0,0 +1,4 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Mon May 08 15:05:07 BST 2023
x3-2.2.2.jar>=
x3-2.2.2.pom>=

View File

@ -0,0 +1,15 @@
#Sat May 06 19:10:45 BST 2023
bedatadriven|https\://nexus.bedatadriven.com/content/groups/public/|javadoc=1683396645122
repo|file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardPAMGuard/repo|javadoc=1683137958887
repo|file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo|javadoc=1683137015763
talan|https\://nexus.talanlabs.com/content/repositories/releases/|sources=1683368185314
bedatadriven|https\://nexus.bedatadriven.com/content/groups/public/|sources=1683368185314
unidata-all|https\://artifacts.unidata.ucar.edu/repository/unidata-all/|sources=1683368185314
repo|file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardTethys/repo|sources=1683368185314
repo|file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo|sources=1683136978098
repo|file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardPAMGuard/repo|sources=1683137602295
talan|https\://nexus.talanlabs.com/content/repositories/releases/|javadoc=1683396645122
central|https\://repo1.maven.org/maven2|sources=1683368185314
unidata-all|https\://artifacts.unidata.ucar.edu/repository/unidata-all/|javadoc=1683396645122
repo|file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardTethys/repo|javadoc=1683396645122
central|https\://repo1.maven.org/maven2|javadoc=1683396645122

View File

@ -0,0 +1,16 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Sat May 06 19:10:45 BST 2023
@default-talan-https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1683137015553
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo/.error=
https\://repo1.maven.org/maven2/.error=
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardPAMGuard/repo/.lastUpdated=1683137958884
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardTethys/repo/.lastUpdated=1683396645119
https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error=
https\://nexus.bedatadriven.com/content/groups/public/.error=
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardTethys/repo/.error=
https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1683137015146
https\://repo1.maven.org/maven2/.lastUpdated=1683137015762
https\://nexus.talanlabs.com/content/repositories/releases/.error=Could not transfer artifact pamguard.org\:x3\:jar\:javadoc\:2.2.2 from/to talan (https\://nexus.talanlabs.com/content/repositories/releases/)\: Access denied to https\://nexus.talanlabs.com/content/repositories/releases/pamguard/org/x3/2.2.2/x3-2.2.2-javadoc.jar. Error code 401, Unauthorized
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo/.lastUpdated=1683137014154
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardPAMGuard/repo/.error=
https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1683137015343

View File

@ -0,0 +1,16 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Sat May 06 11:16:25 BST 2023
@default-talan-https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1683136977699
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo/.error=
https\://repo1.maven.org/maven2/.error=
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardPAMGuard/repo/.lastUpdated=1683137602291
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardTethys/repo/.lastUpdated=1683368185312
https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error=
https\://nexus.bedatadriven.com/content/groups/public/.error=
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardTethys/repo/.error=
https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1683136976818
https\://repo1.maven.org/maven2/.lastUpdated=1683136978096
https\://nexus.talanlabs.com/content/repositories/releases/.error=Could not transfer artifact pamguard.org\:x3\:jar\:sources\:2.2.2 from/to talan (https\://nexus.talanlabs.com/content/repositories/releases/)\: Access denied to https\://nexus.talanlabs.com/content/repositories/releases/pamguard/org/x3/2.2.2/x3-2.2.2-sources.jar. Error code 401, Unauthorized
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo/.lastUpdated=1683136975590
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardPAMGuard/repo/.error=
https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1683136977227

Binary file not shown.

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>pamguard.org</groupId>
<artifactId>x3</artifactId>
<version>2.2.2</version>
<description>POM was created from install:install-file</description>
</project>

View File

@ -0,0 +1,12 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Thu May 04 11:43:09 BST 2023
@default-talan-https\://nexus.talanlabs.com/content/repositories/releases/.lastUpdated=1683196988926
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo/.error=
https\://repo1.maven.org/maven2/.error=
file\://C\:\\Users\\dg50\\source\\repos\\PAMGuardDG/repo/.lastUpdated=1683196987083
https\://artifacts.unidata.ucar.edu/repository/unidata-all/.error=
https\://nexus.bedatadriven.com/content/groups/public/.error=
https\://nexus.bedatadriven.com/content/groups/public/.lastUpdated=1683196988663
https\://artifacts.unidata.ucar.edu/repository/unidata-all/.lastUpdated=1683196988452
https\://repo1.maven.org/maven2/.lastUpdated=1683196989198
https\://nexus.talanlabs.com/content/repositories/releases/.error=Could not transfer artifact pamguard.org\:x3\:pom\:2.2.2 from/to talan (https\://nexus.talanlabs.com/content/repositories/releases/)\: Access denied to https\://nexus.talanlabs.com/content/repositories/releases/pamguard/org/x3/2.2.2/x3-2.2.2.pom. Error code 401, Unauthorized

View File

@ -62,6 +62,8 @@ import Acquisition.sud.SUDNotificationManager;
import Array.ArrayManager; import Array.ArrayManager;
import Array.PamArray; import Array.PamArray;
import Array.Preamplifier; import Array.Preamplifier;
import PamController.DataInputStore;
import PamController.InputStoreInfo;
import PamController.OfflineFileDataStore; import PamController.OfflineFileDataStore;
import PamController.PamControlledUnit; import PamController.PamControlledUnit;
import PamController.PamControlledUnitGUI; import PamController.PamControlledUnitGUI;
@ -71,6 +73,8 @@ import PamController.PamControllerInterface;
import PamController.PamGUIManager; import PamController.PamGUIManager;
import PamController.PamSettingManager; import PamController.PamSettingManager;
import PamController.PamSettings; import PamController.PamSettings;
import PamController.RawInputControlledUnit;
import PamController.fileprocessing.StoreStatus;
import PamModel.PamModel; import PamModel.PamModel;
import PamModel.SMRUEnable; import PamModel.SMRUEnable;
import PamUtils.FrequencyFormat; import PamUtils.FrequencyFormat;
@ -100,7 +104,7 @@ import PamguardMVC.dataOffline.OfflineDataLoadInfo;
* @see Acquisition.DaqSystem * @see Acquisition.DaqSystem
* *
*/ */
public class AcquisitionControl extends PamControlledUnit implements PamSettings, OfflineFileDataStore { public class AcquisitionControl extends RawInputControlledUnit implements PamSettings, OfflineFileDataStore, DataInputStore {
protected ArrayList<DaqSystem> systemList; protected ArrayList<DaqSystem> systemList;
@ -849,4 +853,39 @@ public class AcquisitionControl extends PamControlledUnit implements PamSettings
return sudNotificationManager; return sudNotificationManager;
} }
@Override
public int getRawInputType() {
DaqSystem system = acquisitionProcess.getRunningSystem();
if (system == null) {
return RAW_INPUT_UNKNOWN;
}
else {
return system.isRealTime() ? RAW_INPUT_REALTIME : RAW_INPUT_FILEARCHIVE;
}
}
@Override
public InputStoreInfo getStoreInfo(boolean detail) {
return getDaqProcess().getStoreInfo(detail);
}
@Override
public boolean setAnalysisStartTime(long startTime) {
return getDaqProcess().setAnalysisStartTime(startTime);
}
/**
* Very specific command handler for batch status which will only work
* with the folderinputSystem.
* @return
*/
public String getBatchStatus() {
DaqSystem runningSystem = getAcquisitionProcess().getRunningSystem();
if (runningSystem instanceof FolderInputSystem) {
return ((FolderInputSystem) runningSystem).getBatchStatus();
}
else {
return null;
}
}
} }

View File

@ -1,7 +1,9 @@
package Acquisition; package Acquisition;
import java.awt.Window;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -19,7 +21,13 @@ import Filters.FilterBand;
import Filters.FilterParams; import Filters.FilterParams;
import Filters.FilterType; import Filters.FilterType;
import Filters.IirfFilter; import Filters.IirfFilter;
import PamController.DataInputStore;
import PamController.InputStoreInfo;
import PamController.OfflineDataStore;
import PamController.PamControlledUnit;
import PamController.PamController; import PamController.PamController;
import PamController.fileprocessing.ReprocessManager;
import PamController.fileprocessing.StoreStatus;
import PamController.status.BaseProcessCheck; import PamController.status.BaseProcessCheck;
import PamController.status.ProcessCheck; import PamController.status.ProcessCheck;
import PamDetection.RawDataUnit; import PamDetection.RawDataUnit;
@ -36,7 +44,10 @@ import PamguardMVC.PamProcess;
import PamguardMVC.PamRawDataBlock; import PamguardMVC.PamRawDataBlock;
import PamguardMVC.RequestCancellationObject; import PamguardMVC.RequestCancellationObject;
import PamguardMVC.dataOffline.OfflineDataLoadInfo; import PamguardMVC.dataOffline.OfflineDataLoadInfo;
import dataGram.DatagramManager;
import dataMap.OfflineDataMapPoint;
import pamScrollSystem.AbstractScrollManager; import pamScrollSystem.AbstractScrollManager;
import pamScrollSystem.ViewLoadObserver;
/** /**
* Data acquisition process for all types of input device. * Data acquisition process for all types of input device.
@ -54,7 +65,7 @@ import pamScrollSystem.AbstractScrollManager;
* @see PamguardMVC.PamDataUnit * @see PamguardMVC.PamDataUnit
* *
*/ */
public class AcquisitionProcess extends PamProcess { public class AcquisitionProcess extends PamProcess implements DataInputStore {
public static final int LASTDATA = 2; // don't use zero since need to see if no notification has been received. public static final int LASTDATA = 2; // don't use zero since need to see if no notification has been received.
@ -524,11 +535,11 @@ public class AcquisitionProcess extends PamProcess {
return; return;
} }
systemPrepared = runningSystem.prepareSystem(acquisitionControl); systemPrepared = runningSystem.prepareSystem(acquisitionControl);
} }
@Override @Override
public void setSampleRate(float sampleRate, boolean notify) { public void setSampleRate(float sampleRate, boolean notify) {
acquisitionControl.acquisitionParameters.sampleRate = sampleRate; acquisitionControl.acquisitionParameters.sampleRate = sampleRate;
@ -1224,5 +1235,27 @@ public class AcquisitionProcess extends PamProcess {
return daqStatusDataBlock; return daqStatusDataBlock;
} }
@Override
public InputStoreInfo getStoreInfo(boolean detail) {
if (runningSystem instanceof DataInputStore) {
return ((DataInputStore) runningSystem).getStoreInfo(detail);
}
else {
return null;
}
}
@Override
public boolean setAnalysisStartTime(long startTime) {
if (runningSystem instanceof DataInputStore) {
return ((DataInputStore) runningSystem).setAnalysisStartTime(startTime);
}
else {
return false;
}
}
} }

View File

@ -558,7 +558,10 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe
// if (fileInputParameters.recentFiles == null) return false; // if (fileInputParameters.recentFiles == null) return false;
// if (fileInputParameters.recentFiles.size() < 1) return false; // if (fileInputParameters.recentFiles.size() < 1) return false;
// String fileName = fileInputParameters.recentFiles.get(0); // String fileName = fileInputParameters.recentFiles.get(0);
return runFileAnalysis(); if (runFileAnalysis() == false) {
return false;
}
return true;
} }
public File getCurrentFile() { public File getCurrentFile() {
@ -737,6 +740,8 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe
@Override @Override
public boolean startSystem(AcquisitionControl daqControl) { public boolean startSystem(AcquisitionControl daqControl) {
if (audioStream == null) return false; if (audioStream == null) return false;
dontStop = true; dontStop = true;
@ -1146,6 +1151,7 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe
protected void fileListComplete() { protected void fileListComplete() {
if (GlobalArguments.getParam(PamController.AUTOEXIT) != null) { if (GlobalArguments.getParam(PamController.AUTOEXIT) != null) {
System.out.println("All sound files processed, PAMGuard can close on " + PamController.AUTOEXIT); System.out.println("All sound files processed, PAMGuard can close on " + PamController.AUTOEXIT);
PamController.getInstance().setPamStatus(PamController.PAM_COMPLETE);
PamController.getInstance().batchProcessingComplete(); PamController.getInstance().batchProcessingComplete();
} }
} }

View File

@ -33,6 +33,8 @@ import pamguard.GlobalArguments;
import Acquisition.pamAudio.PamAudioFileManager; import Acquisition.pamAudio.PamAudioFileManager;
import Acquisition.pamAudio.PamAudioFileFilter; import Acquisition.pamAudio.PamAudioFileFilter;
import Acquisition.pamAudio.PamAudioSystem; import Acquisition.pamAudio.PamAudioSystem;
import PamController.DataInputStore;
import PamController.InputStoreInfo;
import PamController.PamControlledUnitSettings; import PamController.PamControlledUnitSettings;
import PamController.PamController; import PamController.PamController;
import PamController.PamSettings; import PamController.PamSettings;
@ -48,6 +50,7 @@ import PamView.dialog.PamGridBagContraints;
import PamView.dialog.PamLabel; import PamView.dialog.PamLabel;
import PamView.panel.PamPanel; import PamView.panel.PamPanel;
import PamView.panel.PamProgressBar; import PamView.panel.PamProgressBar;
import PamguardMVC.debug.Debug;
/** /**
* Read multiple files in sequence. Options exist to either pause and * Read multiple files in sequence. Options exist to either pause and
@ -57,7 +60,7 @@ import PamView.panel.PamProgressBar;
* @author Doug Gillespie * @author Doug Gillespie
* *
*/ */
public class FolderInputSystem extends FileInputSystem implements PamSettings{ public class FolderInputSystem extends FileInputSystem implements PamSettings, DataInputStore {
// Timer timer; // Timer timer;
public static final String daqType = "File Folder Acquisition System"; public static final String daqType = "File Folder Acquisition System";
@ -116,7 +119,7 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{
if (folderInputParameters == null) if (folderInputParameters == null)
setFolderInputParameters(new FolderInputParameters(getSystemType())); setFolderInputParameters(new FolderInputParameters(getSystemType()));
// PamSettingManager.getInstance().registerSettings(this); //calling super already registers this in the FileInputSystem constructor // PamSettingManager.getInstance().registerSettings(this); //calling super already registers this in the FileInputSystem constructor
checkComandLine(); // checkComandLine();
makeSelFileList(); makeSelFileList();
newFileTimer = new Timer(1000, new RestartTimer()); newFileTimer = new Timer(1000, new RestartTimer());
newFileTimer.setRepeats(false); newFileTimer.setRepeats(false);
@ -126,18 +129,24 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{
/** /**
* Check to see if acquisition source folder was set in the command line. * Check to see if acquisition source folder was set in the command line.
*/ */
private void checkComandLine() { private String[] checkComandLineFolder() {
String globalFolder = GlobalArguments.getParam(GlobalWavFolderArg); String globalFolder = GlobalArguments.getParam(GlobalWavFolderArg);
Debug.out.println("Checking -wavfilefolder option: is " + globalFolder);
if (globalFolder == null) { if (globalFolder == null) {
return; return null;
} }
// see if it at least exists, though will we want to do this for Network folders ? // see if it at least exists, though will we want to do this for Network folders ?
File aFile = new File(globalFolder); File aFile = new File(globalFolder);
if (aFile.exists() == false) { if (aFile.exists() == false) {
System.err.println("Command line folder does not exist: " + globalFolder); System.err.printf("Command line wav folder \"%s\" does not exist", globalFolder);
// return null;
} }
String[] selList = {globalFolder}; String[] selList = {globalFolder};
folderInputParameters.setSelectedFiles(selList); // folderInputParameters.setSelectedFiles(selList);
// need to immediately make the allfiles list since it's about to get used by the reprocess manager
// need to worry about how to wait for this since it's starting in a different thread.
//makeSelFileList();
return selList;
} }
/** /**
@ -290,15 +299,24 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{
} }
/** /**
* Make a list of wav files within a folder. * Make a list of wav files within a folder. In some circumstances this can be a list
* of actual files in a folder. Also needs to handle the possibility of it using
* a globally set folder name.
* @return flag to indicate...nothing? * @return flag to indicate...nothing?
*/ */
public int makeSelFileList() { public int makeSelFileList() {
String[] selection = checkComandLineFolder();
if (selection == null) {
if (fileInputParameters.recentFiles == null || fileInputParameters.recentFiles.size() < 1) { if (fileInputParameters.recentFiles == null || fileInputParameters.recentFiles.size() < 1) {
return 0; return 0;
} }
String[] selection = folderInputParameters.getSelectedFiles(); selection = folderInputParameters.getSelectedFiles();
}
if (selection.length > 0) {
System.out.println("FolderInputSystem.makeSelFileList(): Searching for sound files in " + selection[0]);
}
return makeSelFileList(selection); return makeSelFileList(selection);
} }
@ -827,5 +845,93 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{
folderInputPane.setParams(folderInputParameters); folderInputPane.setParams(folderInputParameters);
} }
@Override
public InputStoreInfo getStoreInfo(boolean detail) {
if (allFiles == null || allFiles.size() == 0) {
return null;
}
WavFileType firstFile = allFiles.get(0);
long firstFileStart = getFileStartTime(firstFile.getAbsoluteFile());
WavFileType lastFile = allFiles.get(allFiles.size()-1);
long lastFileStart = getFileStartTime(lastFile.getAbsoluteFile());
lastFile.getAudioInfo();
long lastFileEnd = (long) (lastFileStart + lastFile.getDurationInSeconds()*1000.);
InputStoreInfo storeInfo = new InputStoreInfo(acquisitionControl, allFiles.size(), firstFileStart, lastFileStart, lastFileEnd);
if (detail) {
long[] allFileStarts = new long[allFiles.size()];
for (int i = 0; i < allFiles.size(); i++) {
allFileStarts[i] = getFileStartTime(allFiles.get(i).getAbsoluteFile());
if (allFileStarts[i] < firstFileStart) {
// System.out.printf("Swap first file from %s to %s\n", firstFile.getName(), allFiles.get(i).getName());
firstFile = allFiles.get(i);
firstFileStart = allFileStarts[i];
}
if (allFileStarts[i] > lastFileEnd) {
// System.out.printf("Swap last file from %s to %s\n", lastFile.getName(), allFiles.get(i).getName());
lastFile = allFiles.get(i);
lastFileEnd = allFileStarts[i] + (long) (lastFile.getDurationInSeconds()*1000.);
}
}
storeInfo.setFirstFileStart(firstFileStart); // just incase changed.
storeInfo.setLastFileEnd(lastFileEnd); // just incase changed
storeInfo.setFileStartTimes(allFileStarts);
}
return storeInfo;
}
@Override
public boolean setAnalysisStartTime(long startTime) {
/**
* Called from the reprocess manager just before PAMGuard starts with a time
* we want to process from. This should be equal to the start of one of the files
* so all we have to do (in principle) is to set the currentfile to that index and
* processing will continue from there.
*/
if (allFiles == null || allFiles.size() == 0) {
System.out.println("Daq setanal start time: no files to check against");
return false;
}
System.out.printf("setAnalysisStarttTime: checking %d files for start time of %s\n", allFiles.size(), PamCalendar.formatDBDateTime(startTime));
/*
* If the starttime is maxint then there is nothing to do, but we do need to set the file index
* correctly to not over confuse the batch processing system.
*/
long lastFileTime = getFileStartTime(allFiles.get(allFiles.size()-1).getAbsoluteFile());
if (startTime > lastFileTime) {
currentFile = allFiles.size();
System.out.println("Folder Acquisition processing is complete and no files require processing");
return true;
}
for (int i = 0; i < allFiles.size(); i++) {
long fileStart = getFileStartTime(allFiles.get(i).getAbsoluteFile());
if (fileStart >= startTime) {
currentFile = i;
PamCalendar.setSoundFile(true);
if (startTime > 0) {
PamCalendar.setSessionStartTime(startTime);
System.out.printf("Sound Acquisition start processing at file %s time %s\n", allFiles.get(i).getName(),
PamCalendar.formatDBDateTime(fileStart));
}
return true;
}
}
return false;
}
/**
* Get a status update for batch processing.
*/
public String getBatchStatus() {
int nFiles = 0;
if (allFiles != null) {
nFiles = allFiles.size();
}
int generalStatus = PamController.getInstance().getPamStatus();
File currFile = getCurrentFile();
String bs = String.format("%d,%d,%d,%s", nFiles,currentFile,generalStatus,currFile);
return bs;
}
} }

View File

@ -284,9 +284,12 @@ public class StandardFileDate implements FileDate, PamSettings {
} catch (ParseException e) { } catch (ParseException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
// e.printStackTrace(); // e.printStackTrace();
System.out.println(e.getMessage()); System.out.println("StandardfileDate.forcedDataFormat:" + e.getMessage());
} //throws ParseException if no match } //throws ParseException if no match
setLastFormat(forcedDateFormat); setLastFormat(forcedDateFormat);
if (d == null) {
return 0;
}
return d.getTime(); return d.getTime();
} }

View File

@ -17,6 +17,7 @@ import Acquisition.pamAudio.PamAudioFileManager;
import Acquisition.pamAudio.PamAudioFileLoader; import Acquisition.pamAudio.PamAudioFileLoader;
import Acquisition.pamAudio.PamAudioFileFilter; import Acquisition.pamAudio.PamAudioFileFilter;
import PamController.OfflineFileDataStore; import PamController.OfflineFileDataStore;
import PamController.fileprocessing.StoreStatus;
import PamguardMVC.PamDataBlock; import PamguardMVC.PamDataBlock;
import PamguardMVC.dataOffline.OfflineDataLoadInfo; import PamguardMVC.dataOffline.OfflineDataLoadInfo;
import dataMap.OfflineDataMap; import dataMap.OfflineDataMap;
@ -188,5 +189,4 @@ public class OfflineWavFileServer extends OfflineFileServer<FileDataMapPoint> {
} }
} }

View File

@ -368,7 +368,7 @@ abstract public class IshLocProcess extends PamProcess implements SpectrogramMar
selectionSams = daqBlock.getSamples(startSam, (int)durationSam, channelMap); selectionSams = daqBlock.getSamples(startSam, (int)durationSam, channelMap);
} }
catch (RawDataUnavailableException e) { catch (RawDataUnavailableException e) {
System.out.println(e.getMessage()); System.out.println("RawDataUnavailableException in IshLocProcess:" + e.getMessage());
// if the raw data has already been discarded, adjust the natural lifetime to try and avoid this in the future // if the raw data has already been discarded, adjust the natural lifetime to try and avoid this in the future
int newTime; int newTime;

View File

@ -287,7 +287,7 @@ public final class SSHSession implements UserInfo {
out.write(k); out.write(k);
out.flush(); out.flush();
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("IOException in SSHSession.write: " + e.getMessage());
} }
} }
@ -349,7 +349,7 @@ public final class SSHSession implements UserInfo {
} }
} }
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("Error in SSHSession.pump: " + e.getMessage());
} finally { } finally {
closeQuietly(in); closeQuietly(in);
closeQuietly(out); closeQuietly(out);

View File

@ -203,7 +203,7 @@ public class AcquireNmeaData extends PamProcess implements ActionListener, Modul
try { try {
pjSerialComm = PJSerialComm.openSerialPort(params.serialPortName, params.serialPortBitsPerSecond); pjSerialComm = PJSerialComm.openSerialPort(params.serialPortName, params.serialPortBitsPerSecond);
} catch (PJSerialException e) { } catch (PJSerialException e) {
System.out.println(e.getMessage()); System.out.println("PJSerialException in AcquireNMEAData" + e.getMessage());
// WarnOnce.sho // WarnOnce.sho
return; return;
} }

View File

@ -0,0 +1,31 @@
package PamController;
/**
* Functions for a data input store. There is a fair bit of overlap for this and
* OfflineDataStore, but the OfflineDataStore is really about stuff that can provide
* data offline which needs mapping. This is specifically about data which will be input
* during 'normal operation, i.e. sound acquisition and Tritech sonar data
* (a plugin, but coming down the tracks at us all).
* @author dg50
* @see OfflineDataStore
* @See DataOutputStore
*
*/
public interface DataInputStore {
/**
* Get information about the input store (e.g. start times of all files).
* @param detail
* @return information about data input.
*/
public InputStoreInfo getStoreInfo(boolean detail);
/**
* Set an analysis start time. This might get called just before
* processing starts, in which case
* @param startTime
* @return ok if no problems.
*/
public boolean setAnalysisStartTime(long startTime);
}

View File

@ -0,0 +1,32 @@
package PamController;
import PamController.fileprocessing.StoreStatus;
/**
* Functions for a data output store. there is a fair bit of overlap for this and
* OfflineDataStore, but the OfflineDataStore is really about stuff that can provide
* data offline which needs mapping. This is specifically about data which will be stored
* during 'normal operation, i.e. binary and database modules.
* @author dg50
* @see OfflineDataStore
* @See DataInputStore
*
*/
public interface DataOutputStore extends OfflineDataStore {
/**
* Get the store status, i.e. does it exist, does it contain data, if so over what date range,
* etc.
* @param getDetail
* @return
*/
public StoreStatus getStoreStatus(boolean getDetail);
/**
* Delete all data from a given time, in all data streams.
* @param timeMillis time to delete from (anything >= this time)
* @return true if it seems to have worked OK. False if any errors (e.g. database or file system error).
*/
public boolean deleteDataFrom(long timeMillis);
}

View File

@ -0,0 +1,102 @@
package PamController;
import PamUtils.PamCalendar;
public class InputStoreInfo {
private DataInputStore dataInputStore;
private int nFiles;
private long firstFileStart, lastFileStart, lastFileEnd;
private long[] fileStartTimes;
public InputStoreInfo(DataInputStore dataInputStore, int nFiles, long firstFileStart, long lastFileStart, long lastFileEnd) {
super();
this.dataInputStore = dataInputStore;
this.nFiles = nFiles;
this.firstFileStart = firstFileStart;
this.lastFileStart = lastFileStart;
this.lastFileEnd = lastFileEnd;
}
/**
* @return the nFiles
*/
public int getnFiles() {
return nFiles;
}
/**
* @return the firstFileStart
*/
public long getFirstFileStart() {
return firstFileStart;
}
/**
* @return the lastFileStart
*/
public long getLastFileStart() {
return lastFileStart;
}
/**
* @return the lastFileEnd
*/
public long getLastFileEnd() {
return lastFileEnd;
}
@Override
public String toString() {
return String.format("%s: %d files. First start %s, last start %s, last end %s", dataInputStore.getClass().getName(), nFiles,
PamCalendar.formatDBDateTime(firstFileStart), PamCalendar.formatDBDateTime(lastFileStart),
PamCalendar.formatDBDateTime(lastFileEnd));
}
/**
* @return the dataInputStore
*/
public DataInputStore getDataInputStore() {
return dataInputStore;
}
/**
* Set the start times of all files in data set.
* @param allFileStarts
*/
public void setFileStartTimes(long[] allFileStarts) {
this.fileStartTimes = allFileStarts;
}
/**
* @return the fileStartTimes
*/
public long[] getFileStartTimes() {
return fileStartTimes;
}
/**
* @param firstFileStart the firstFileStart to set
*/
public void setFirstFileStart(long firstFileStart) {
this.firstFileStart = firstFileStart;
}
/**
* @param lastFileStart the lastFileStart to set
*/
public void setLastFileStart(long lastFileStart) {
this.lastFileStart = lastFileStart;
}
/**
* @param lastFileEnd the lastFileEnd to set
*/
public void setLastFileEnd(long lastFileEnd) {
this.lastFileEnd = lastFileEnd;
}
}

View File

@ -2,6 +2,7 @@ package PamController;
import java.awt.Window; import java.awt.Window;
import PamController.fileprocessing.StoreStatus;
import dataGram.DatagramManager; import dataGram.DatagramManager;
import dataMap.OfflineDataMapPoint; import dataMap.OfflineDataMapPoint;
import pamScrollSystem.ViewLoadObserver; import pamScrollSystem.ViewLoadObserver;
@ -52,7 +53,7 @@ public interface OfflineDataStore {
/** /**
* Moved this function over from binary data store. * Moved this function over from binary data store.
* Many storage systems may notbe able to do this, but some might ! * Many storage systems may not be able to do this, but some might !
* @param dataBlock * @param dataBlock
* @param dmp * @param dmp
* @return * @return
@ -63,4 +64,5 @@ public interface OfflineDataStore {
* @return the datagramManager * @return the datagramManager
*/ */
public DatagramManager getDatagramManager(); public DatagramManager getDatagramManager();
} }

View File

@ -55,10 +55,11 @@ import generalDatabase.DBControlUnit;
import javafx.application.Platform; import javafx.application.Platform;
import javafx.stage.Stage; import javafx.stage.Stage;
import Array.ArrayManager; import Array.ArrayManager;
import PamController.command.MultiportController; import PamController.command.MulticastController;
import PamController.command.NetworkController; import PamController.command.NetworkController;
import PamController.command.TerminalController; import PamController.command.TerminalController;
import PamController.command.WatchdogComms; import PamController.command.WatchdogComms;
import PamController.fileprocessing.ReprocessManager;
import PamController.masterReference.MasterReferencePoint; import PamController.masterReference.MasterReferencePoint;
import PamController.settings.output.xml.PamguardXMLWriter; import PamController.settings.output.xml.PamguardXMLWriter;
import PamController.settings.output.xml.XMLWriterDialog; import PamController.settings.output.xml.XMLWriterDialog;
@ -119,6 +120,7 @@ public class PamController implements PamControllerInterface, PamSettings {
public static final int PAM_STALLED = 3; public static final int PAM_STALLED = 3;
public static final int PAM_INITIALISING = 4; public static final int PAM_INITIALISING = 4;
public static final int PAM_STOPPING = 5; public static final int PAM_STOPPING = 5;
public static final int PAM_COMPLETE = 6;
// status' for RunMode = RUN_PAMVIEW // status' for RunMode = RUN_PAMVIEW
public static final int PAM_LOADINGDATA = 2; public static final int PAM_LOADINGDATA = 2;
@ -256,8 +258,8 @@ public class PamController implements PamControllerInterface, PamSettings {
if (pamBuoyGlobals.getNetworkControlPort() != null) { if (pamBuoyGlobals.getNetworkControlPort() != null) {
networkController = new NetworkController(this); networkController = new NetworkController(this);
} }
if (pamBuoyGlobals.getMultiportAddress() != null) { if (pamBuoyGlobals.getMulticastAddress() != null) {
new MultiportController(this); new MulticastController(this);
} }
guiFrameManager = PamGUIManager.createGUI(this, object); guiFrameManager = PamGUIManager.createGUI(this, object);
@ -705,7 +707,7 @@ public class PamController implements PamControllerInterface, PamSettings {
Platform.exit(); Platform.exit();
// terminate the JVM // terminate the JVM
System.exit(0); System.exit(getPamStatus());
} }
/** /**
@ -1022,6 +1024,24 @@ public class PamController implements PamControllerInterface, PamSettings {
return foundUnits; return foundUnits;
} }
/**
* Get an Array list of PamControlledUnits of a particular class (exact matches only).
* @param unitClass PamControlledUnit class
* @return List of current instances of this class.
*/
public ArrayList<PamControlledUnit> findControlledUnits(Class unitClass, boolean includeSubClasses) {
if (includeSubClasses == false) {
return findControlledUnits(unitClass);
}
ArrayList<PamControlledUnit> foundUnits = new ArrayList<>();
for (int i = 0; i < getNumControlledUnits(); i++) {
if (unitClass.isAssignableFrom(pamControlledUnits.get(i).getClass())) {
foundUnits.add(pamControlledUnits.get(i));
}
}
return foundUnits;
}
/** /**
* Check whether a controlled unit exists based on it's name. * Check whether a controlled unit exists based on it's name.
* @param the controlled unit name e.g. "my crazy click detector", not the default name. * @param the controlled unit name e.g. "my crazy click detector", not the default name.
@ -1191,6 +1211,23 @@ public class PamController implements PamControllerInterface, PamSettings {
return false; return false;
} }
/*
*
* This needs to be called after prepareproces.
* Now we do some extra checks on the stores to see if we want to overwite data,
* carry on from where we left off, etc.
*/
if (saveSettings && getRunMode() == RUN_NORMAL) { // only true on a button press or network start.
ReprocessManager reprocessManager = new ReprocessManager();
boolean goonthen = reprocessManager.checkOutputDataStatus();
if (goonthen == false) {
System.out.println("Data processing will not start since you've chosen not to overwrite existing output data");
pamStop();
setPamStatus(PAM_IDLE);
return false;
}
}
if (saveSettings) { if (saveSettings) {
saveSettings(PamCalendar.getSessionStartTime()); saveSettings(PamCalendar.getSessionStartTime());
} }
@ -1277,7 +1314,12 @@ public class PamController implements PamControllerInterface, PamSettings {
@Override @Override
public void run() { public void run() {
long t1 = System.currentTimeMillis();
while (checkRunStatus()) { while (checkRunStatus()) {
long t2 = System.currentTimeMillis();
if (t2 - t1 > 5000) {
System.out.printf("Stopping, but stuck in loop for CheckRunStatus for %3.1fs\n", (double) (t2-t1)/1000.);
}
try { try {
Thread.sleep(10); Thread.sleep(10);
} catch (InterruptedException e) { } catch (InterruptedException e) {

View File

@ -1752,10 +1752,10 @@ public class PamSettingManager {
fIs.close(); fIs.close();
fOs.close(); fOs.close();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
System.out.println(e.getMessage()); System.out.println("FileNotFound exception in PamSettingsManager: " + e.getMessage());
return false; return false;
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("IO exception in PamSettingsManager: " + e.getMessage());
return false; return false;
} }
return true; return true;

View File

@ -31,12 +31,12 @@ public class PamguardVersionInfo {
* Version number, major version.minorversion.sub-release. * Version number, major version.minorversion.sub-release.
* Note: can't go higher than sub-release 'f' * Note: can't go higher than sub-release 'f'
*/ */
static public final String version = "2.02.07b"; static public final String version = "2.02.07f";
/** /**
* Release date * Release date
*/ */
static public final String date = "19 January 2023"; static public final String date = "4 April 2023";
// /** // /**
// * Release type - Beta or Core // * Release type - Beta or Core

View File

@ -0,0 +1,21 @@
package PamController;
public abstract class RawInputControlledUnit extends PamControlledUnit {
public static final int RAW_INPUT_UNKNOWN = 0;
public static final int RAW_INPUT_FILEARCHIVE = 1;
public static final int RAW_INPUT_REALTIME = 2;
public RawInputControlledUnit(String unitType, String unitName) {
super(unitType, unitName);
}
/**
* Type of data input, which can be one of RAW_INPUT_UNKNOWN (0),
* RAW_INPUT_FILEARCHIVE (1), or RAW_INPUT_REALTIME (2)
* @return
*/
public abstract int getRawInputType();
}

View File

@ -0,0 +1,64 @@
package PamController.command;
import networkTransfer.send.NetworkSender;
import pamguard.GlobalArguments;
public class BatchCommand extends ExtCommand {
public static final String commandId = "batchcommand";
private CommandManager commandManager;
public BatchCommand(CommandManager commandManager) {
super(commandId, true);
this.commandManager = commandManager;
}
@Override
public String execute(String command) {
/**
* this should have to identifiers. If they match the identifiers of
* this pamguard instance, then the command part is passed back to the manager
* otherwise it is ignored.
*/
if (command == null) {
return null;
}
String[] bits = command.split(" ");
if (bits.length < 4) {
return null;
}
int id1 = 0;
int id2 = 0;
int expId1 = 0, expId2 = 0;
try {
id1 = Integer.valueOf(bits[1]);
id2 = Integer.valueOf(bits[2]);
}
catch (NumberFormatException e) {
System.out.println("Invalid BatchCommand: " + command);
return null;
}
String nid1 = GlobalArguments.getParam(NetworkSender.ID1);
String nid2 = GlobalArguments.getParam(NetworkSender.ID2);
if (bits[1].trim().equals(nid1) == false) {
return null;
}
// now trim the string to the end of the third comma and send on the rest
int comPos = -1;
for (int i = 0; i < 3; i++) {
comPos = command.indexOf(" ", comPos+1);
if (comPos < 0) {
return null;
}
}
String trueCommand = command.substring(comPos);
trueCommand = trueCommand.trim();
// System.out.printf(">>>>>>>>>>>>>>>>>>> Batchcommand execute \"%s\" in command manager %s\n", trueCommand, commandManager.getClass().getName());
if (commandManager.interpretCommand(trueCommand)) {
// return commandManager.get
}
return null;
}
}

View File

@ -0,0 +1,31 @@
package PamController.command;
import Acquisition.AcquisitionControl;
import PamController.PamController;
import pamViewFX.PamControlledGUIFX;
/**
* Command to get PAMGuard to send back the batch processing status.
*
* @author dg50
*
*/
public class BatchStatusCommand extends ExtCommand {
public static final String commandId = "batchstatus";
public BatchStatusCommand() {
super(commandId, true);
// TODO Auto-generated constructor stub
}
@Override
public String execute(String command) {
AcquisitionControl daqControl = (AcquisitionControl) PamController.getInstance().findControlledUnit(AcquisitionControl.class, null);
if (daqControl == null) {
return null;
}
return daqControl.getBatchStatus();
}
}

View File

@ -40,6 +40,8 @@ public abstract class CommandManager extends PamControlledUnit {
commandsList.add(new HelpCommand(this)); commandsList.add(new HelpCommand(this));
commandsList.add(new GetXMLSettings()); commandsList.add(new GetXMLSettings());
commandsList.add(new SetXMLSettings()); commandsList.add(new SetXMLSettings());
commandsList.add(new BatchStatusCommand());
commandsList.add(new BatchCommand(this));
} }
@ -81,16 +83,16 @@ public abstract class CommandManager extends PamControlledUnit {
} }
ExtCommand extCommand = findCommand(command); ExtCommand extCommand = findCommand(command);
if (extCommand == null) { if (extCommand == null) {
sendData("Cmd \"" + commandString + "\" Not Recognised."); sendData(extCommand, "Cmd \"" + commandString + "\" Not Recognised.");
return false; return false;
} }
if (extCommand.canExecute() == false) { if (extCommand.canExecute() == false) {
sendData("Cmd \"" + command + "\" Cannot Execute."); sendData(extCommand, "Cmd \"" + command + "\" Cannot Execute.");
// sendData(" Cmd return string = " + extCommand.getReturnString()); // sendData(" Cmd return string = " + extCommand.getReturnString());
return false; return false;
} }
String output = extCommand.executeCommand(commandString); String output = extCommand.executeCommand(commandString);
sendData(output); sendData(extCommand,output);
return true; return true;
@ -154,9 +156,10 @@ public abstract class CommandManager extends PamControlledUnit {
/** /**
* Reply to data called from InterpredData * Reply to data called from InterpredData
* @param extCommand
* @param dataString * @param dataString
* @return true if replay successful * @return true if replay successful
*/ */
abstract public boolean sendData(String dataString); abstract public boolean sendData(ExtCommand extCommand, String dataString);
} }

View File

@ -10,15 +10,20 @@ import PamController.PamSettingManager;
*/ */
public class ExitCommand extends ExtCommand { public class ExitCommand extends ExtCommand {
public static final String commandId = "Exit";
public ExitCommand() { public ExitCommand() {
super("Exit", false); super(commandId, false);
} }
@Override @Override
public String execute(String command) { public String execute(String command) {
PamController.getInstance().pamStop(); PamController.getInstance().pamStop();
PamSettingManager.getInstance().saveFinalSettings(); PamSettingManager.getInstance().saveFinalSettings();
System.exit(0); PamController pamController = PamController.getInstance();
pamController.pamClose();
// shut down the JavaFX thread and the JVM
pamController.shutDownPamguard();
return getName(); return getName();
} }

View File

@ -25,7 +25,7 @@ public class HelpCommand extends ExtCommand {
out += "\n"; out += "\n";
} }
} }
commandManager.sendData(out); commandManager.sendData(this, out);
return getName(); return getName();
} }

View File

@ -12,12 +12,14 @@ import java.nio.charset.StandardCharsets;
import PamController.PamController; import PamController.PamController;
import PamController.pamBuoyGlobals; import PamController.pamBuoyGlobals;
import networkTransfer.send.NetworkSender;
import pamguard.GlobalArguments;
public class MultiportController extends CommandManager { public class MulticastController extends CommandManager {
//The multicast addresses are in the range 224.0.0.0 through 239.255.255.255 //The multicast addresses are in the range 224.0.0.0 through 239.255.255.255
private static String unitName = "Multiport Controller"; private static String unitName = "Multicast Controller";
private PamController pamController; private PamController pamController;
private String mAddress; private String mAddress;
private int mPort; private int mPort;
@ -29,11 +31,11 @@ public class MultiportController extends CommandManager {
private byte[] byteBuffer = new byte[MAX_COMMAND_LENGTH]; private byte[] byteBuffer = new byte[MAX_COMMAND_LENGTH];
private DatagramPacket lastDatagram; private DatagramPacket lastDatagram;
public MultiportController(PamController pamController) { public MulticastController(PamController pamController) {
super(pamController, unitName); super(pamController, unitName);
this.pamController = pamController; this.pamController = pamController;
this.mAddress = pamBuoyGlobals.getMultiportAddress(); this.mAddress = pamBuoyGlobals.getMulticastAddress();
this.mPort = pamBuoyGlobals.getMuliportPort(); this.mPort = pamBuoyGlobals.getMulticastPort();
Thread t = new Thread(new ListenerThread()); Thread t = new Thread(new ListenerThread());
t.start(); t.start();
@ -83,17 +85,35 @@ public class MultiportController extends CommandManager {
private void processDatagram(DatagramPacket datagram) { private void processDatagram(DatagramPacket datagram) {
lastDatagram = datagram; lastDatagram = datagram;
String str = new String(datagram.getData(), 0, datagram.getLength()); String str = new String(datagram.getData(), 0, datagram.getLength());
// str = str.substring(0, datagram.getLength()); str = str.substring(0, datagram.getLength());
System.out.println("Datagram received \"" + str + "\""); // System.out.println("Datagram received \"" + str + "\"");
interpretCommand(str); interpretCommand(str);
} }
@Override @Override
public boolean sendData(String dataString) { public boolean sendData(ExtCommand extCommand, String dataString) {
if (dataString == null || dataString.length() == 0) {
return false;
}
DatagramPacket senderInfo = lastDatagram; DatagramPacket senderInfo = lastDatagram;
System.out.printf("Send back data \"%s\" to %s port %d\n", dataString, senderInfo.getAddress(), senderInfo.getPort()); String commandName;
if (extCommand == null) {
commandName = "Unknown";
}
else {
commandName = extCommand.getName();
}
// System.out.printf("Send back data \"%s\" to %s port %d\n", dataString, senderInfo.getAddress(), senderInfo.getPort());
/*
* for multicast, we need to send a slightly different string back which has the station id as part of
* the returned string. These will be 0 if they weren't passed in at the command line.
*/
String id1 = GlobalArguments.getParam(NetworkSender.ID1);
String id2 = GlobalArguments.getParam(NetworkSender.ID2);
String bigString = String.format("%s,%s,%s,%s", commandName, id1, id2, dataString);
// dataString += "\n"; // dataString += "\n";
DatagramPacket packet = new DatagramPacket(dataString.getBytes(), dataString.length()); DatagramPacket packet = new DatagramPacket(bigString.getBytes(), bigString.length());
packet.setAddress(senderInfo.getAddress()); packet.setAddress(senderInfo.getAddress());
packet.setPort(senderInfo.getPort()); packet.setPort(senderInfo.getPort());
try { try {

View File

@ -124,16 +124,14 @@ public class NetworkController extends CommandManager {
} }
} }
@Override
public boolean sendData(String dataString) { public boolean sendData(ExtCommand extCommand, String dataString) {
DatagramPacket packet = new DatagramPacket(dataString.getBytes(), dataString.length()); DatagramPacket packet = new DatagramPacket(dataString.getBytes(), dataString.length());
packet.setAddress(udpPacket.getAddress()); packet.setAddress(udpPacket.getAddress());
packet.setPort(udpPacket.getPort()); packet.setPort(udpPacket.getPort());
try { try {
receiveSocket.send(packet); receiveSocket.send(packet);
// receiveSocket.
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
return false; return false;
} }

View File

@ -17,7 +17,7 @@ public class TerminalController extends CommandManager {
} }
@Override @Override
public boolean sendData(String dataString) { public boolean sendData(ExtCommand extcommand, String dataString) {
System.out.println(dataString); System.out.println(dataString);
return true; return true;
} }

View File

@ -46,7 +46,7 @@ public class ExternalCapture extends ExternalController {
} }
} }
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("IOError in ExternalCapture.readInputStream: " + e.getMessage());
} }
} }

View File

@ -0,0 +1,116 @@
package PamController.fileprocessing;
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Window;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.border.TitledBorder;
import PamUtils.PamCalendar;
import PamView.dialog.PamDialog;
import PamView.dialog.PamGridBagContraints;
import PamView.dialog.warn.WarnOnce;
import PamView.panel.PamAlignmentPanel;
public class ReprocessChoiceDialog extends PamDialog {
private static final long serialVersionUID = 1L;
private static ReprocessChoiceDialog singleInstance;
private JRadioButton[] choiceButtons;
private ReprocessStoreChoice chosenChoice = null;
private StoreChoiceSummary choiceSummary;
private ReprocessChoiceDialog(Window parentFrame, StoreChoiceSummary choiceSummary) {
super(parentFrame, "Existing Output Data", false);
this.choiceSummary = choiceSummary;
JPanel mainPanel = new JPanel(new BorderLayout());
JPanel infoPanel = new JPanel(new GridBagLayout());
infoPanel.setBorder(new TitledBorder("Data Summary"));
mainPanel.add(infoPanel, BorderLayout.NORTH);
GridBagConstraints c = new PamGridBagContraints();
c.gridx = c.gridy = 0;
String inStr = String.format("Input data dates: %s to %s", PamCalendar.formatDBDateTime(choiceSummary.getInputStartTime()),
PamCalendar.formatDBDateTime(choiceSummary.getInputEndTime()));
infoPanel.add(new JLabel(inStr), c);
c.gridy++;
String outStr = String.format("Output data dates: %s to %s", PamCalendar.formatDBDateTime(choiceSummary.getOutputStartTime()),
PamCalendar.formatDBDateTime(choiceSummary.getOutputEndTime()));
infoPanel.add(new JLabel(outStr), c);
String stateStr;
if (choiceSummary.isProcessingComplete()) {
stateStr = "Processing appears to be complete";
}
else {
stateStr = "Processing appears to be partially complete";
}
c.gridy++;
infoPanel.add(new JLabel(stateStr), c);
JPanel choicePanel = new PamAlignmentPanel(new GridBagLayout(), BorderLayout.WEST);
choicePanel.setBorder(new TitledBorder("Chose what to do"));
c = new PamGridBagContraints();
mainPanel.add(BorderLayout.SOUTH, choicePanel);
List<ReprocessStoreChoice> userChoices = choiceSummary.getChoices();
choiceButtons = new JRadioButton[userChoices.size()];
ButtonGroup bg = new ButtonGroup();
for (int i = 0; i < userChoices.size(); i++) {
ReprocessStoreChoice aChoice = userChoices.get(i);
choiceButtons[i] = new JRadioButton(aChoice.toString());
choiceButtons[i].setToolTipText(aChoice.getToolTip());
choicePanel.add(choiceButtons[i], c);
c.gridy++;
}
setDialogComponent(mainPanel);
getCancelButton().setVisible(false);
}
public static ReprocessStoreChoice showDialog(Window parentFrame, StoreChoiceSummary choices) {
// if (singleInstance == null || singleInstance.getOwner() != parentFrame) {
singleInstance = new ReprocessChoiceDialog(parentFrame, choices);
// }
singleInstance.setVisible(true);
return singleInstance.chosenChoice;
}
@Override
public boolean getParams() {
List<ReprocessStoreChoice> userChoices = choiceSummary.getChoices();
for (int i = 0; i < choiceButtons.length; i++) {
if (choiceButtons[i].isSelected()) {
chosenChoice = userChoices.get(i);
break;
}
}
if (chosenChoice == ReprocessStoreChoice.OVERWRITEALL) {
String w = "Are you sure you want to delete / overwrite all existing output data ?";
int ans = WarnOnce.showWarning("Overwrite existing data", w, WarnOnce.OK_CANCEL_OPTION);
if (ans == WarnOnce.CANCEL_OPTION) {
return false;
}
}
return chosenChoice != null;
}
@Override
public void cancelButtonPressed() {
chosenChoice = null;
}
@Override
public void restoreDefaultSettings() {
// TODO Auto-generated method stub
}
}

View File

@ -0,0 +1,285 @@
package PamController.fileprocessing;
import java.util.ArrayList;
import PamController.DataInputStore;
import PamController.DataOutputStore;
import PamController.InputStoreInfo;
import PamController.OfflineDataStore;
import PamController.PamControlledUnit;
import PamController.PamController;
import PamController.PamGUIManager;
import PamController.RawInputControlledUnit;
import PamUtils.PamCalendar;
import PamView.dialog.warn.WarnOnce;
import pamguard.GlobalArguments;
/**
* Set of functions to help decide what to do when reprocessing.
* These are probably all called from AcquisitionProcess, but it's easier to have them in their own class.
* @author dg50
*
*/
public class ReprocessManager {
/**
public ReprocessManager() {
// TODO Auto-generated constructor stub
}
/*
* run checks on the output data storage system. If data already exist in the output
* we may not want to start again.
*/
public boolean checkOutputDataStatus() {
StoreChoiceSummary choiceSummary = null;
if (isOfflineFiles()) {
choiceSummary = checkIOFilesStatus();
}
else {
/*
* don't really need to do anything for real time processing since adding
* more data to existing stores is normal behaviour.
*/
return true;
}
if (choiceSummary == null) {
return true;
}
if (choiceSummary.getInputStoreInfo() == null) {
return true;
}
// need to decide what to do based on the list of possible choices.
ReprocessStoreChoice choice = chosePartStoreAction(choiceSummary);
/**
* Need to call this even though we aren't reprocessing so that
* the Folderinput stream reports correctly on how many files have
* been processed.
*/
boolean setupOK = setupInputStream(choiceSummary, choice);
if (choice == ReprocessStoreChoice.DONTSSTART) {
return false;
}
boolean deleteOK = deleteOldData(choiceSummary, choice);
return true;
}
private boolean setupInputStream(StoreChoiceSummary choiceSummary, ReprocessStoreChoice choice) {
// work out the first file index and send it to the appropriate input module.
long deleteFrom = getDeleteFromTime(choiceSummary, choice);
ArrayList<PamControlledUnit> inputStores = PamController.getInstance().findControlledUnits(DataInputStore.class, true);
if (inputStores == null || inputStores.size() == 0) {
return false;
}
InputStoreInfo inputInfo = null;
boolean OK = true;
for (PamControlledUnit aPCU : inputStores) {
DataInputStore inputStore = (DataInputStore) aPCU;
OK &= inputStore.setAnalysisStartTime(deleteFrom);
// System.out.println("Input store info: " + inputInfo);
}
return OK;
}
/**
* Just gets on and does it. The user should already have been asked what they
* want to do, so don't ask again.
* @param choiceSummary
* @param choice
*/
private boolean deleteOldData(StoreChoiceSummary choiceSummary, ReprocessStoreChoice choice) {
long deleteFrom = getDeleteFromTime(choiceSummary, choice);
// go through the data stores and tell them to delete from that time.
if (deleteFrom == Long.MAX_VALUE) {
return false;
}
ArrayList<PamControlledUnit> outputStores = PamController.getInstance().findControlledUnits(DataOutputStore.class, true);
boolean partStores = false;
boolean ok = true;
for (PamControlledUnit aPCU : outputStores) {
DataOutputStore offlineStore = (DataOutputStore) aPCU;
ok &= offlineStore.deleteDataFrom(deleteFrom);
}
return ok;
}
private long getDeleteFromTime(StoreChoiceSummary choiceSummary, ReprocessStoreChoice choice) {
if (choice == null) {
return Long.MAX_VALUE; // I don't think this can happen, but you never know.
}
Long t = null;
switch (choice) {
case CONTINUECURRENTFILE:
t = choiceSummary.getInputTimeForIndex(choiceSummary.getFileIndexBefore(choiceSummary.getOutputEndTime()));
break;
case CONTINUENEXTFILE:
t = choiceSummary.getInputTimeForIndex(choiceSummary.getFileIndexAfter(choiceSummary.getOutputEndTime()));
break;
case DONTSSTART: // we should'nt get here with this option.
return Long.MAX_VALUE;
case OVERWRITEALL:
return 0; // delete from start. (
case STARTNORMAL: // we should'nt get here with this option.
return Long.MAX_VALUE;
default:
break;
}
if (t == null) {
// shouldn't happen, don't do any deleteing
return Long.MAX_VALUE;
}
else {
return t;
}
}
/**
* Check the output of current files and databases and return a flag to PamController saying whether or
* not processing should actually start, possibly overwriting, or if we need to not start to avoid overwriting.
* @return true if processing should start.
*/
private StoreChoiceSummary checkIOFilesStatus() {
/**
* Get information about the input.
*
*/
ArrayList<PamControlledUnit> inputStores = PamController.getInstance().findControlledUnits(DataInputStore.class, true);
if (inputStores == null || inputStores.size() == 0) {
return new StoreChoiceSummary(null, ReprocessStoreChoice.STARTNORMAL);
}
InputStoreInfo inputInfo = null;
for (PamControlledUnit aPCU : inputStores) {
DataInputStore inputStore = (DataInputStore) aPCU;
inputInfo = inputStore.getStoreInfo(true);
// System.out.println("Input store info: " + inputInfo);
}
StoreChoiceSummary choiceSummary = new StoreChoiceSummary(inputInfo);
if (inputInfo == null || inputInfo.getFileStartTimes() == null) {
choiceSummary.addChoice(ReprocessStoreChoice.STARTNORMAL);
return choiceSummary;
}
ArrayList<PamControlledUnit> outputStores = PamController.getInstance().findControlledUnits(DataOutputStore.class, true);
boolean partStores = false;
int nOutputStores = 0;
for (PamControlledUnit aPCU : outputStores) {
DataOutputStore offlineStore = (DataOutputStore) aPCU;
StoreStatus status = offlineStore.getStoreStatus(false);
nOutputStores++;
if (status == null) {
continue;
}
if (status.getStoreStatus() == StoreStatus.STATUS_HASDATA) {
status = offlineStore.getStoreStatus(true); // get more detail.
partStores = true;
System.out.printf("Storage %s already contains some data\n", offlineStore.getDataSourceName());
choiceSummary.testOutputEndTime(status.getLastDataTime());
choiceSummary.testOutputStartTime(status.getFirstDataTime());
}
}
if (partStores == false) {
// choiceSummary.addChoice(ReprocessStoreChoice.STARTNORMAL);
return null; // no part full stores, so can start without questions
}
if (choiceSummary.getInputStartTime() >= choiceSummary.getOutputEndTime()) {
/*
* looks like it's new data that starts after the end of the current store,
* so there is no need to do anything.
*/
choiceSummary.addChoice(ReprocessStoreChoice.STARTNORMAL);
return choiceSummary;
}
/*
* If we land here, it looks like we have overlapping data. so need to make a decision
* First, check to see if processing has actually completed which will be the case if
* the data time and the end of the files are the same.
*/
choiceSummary.addChoice(ReprocessStoreChoice.DONTSSTART);
choiceSummary.addChoice(ReprocessStoreChoice.OVERWRITEALL);
if (choiceSummary.isProcessingComplete() == false) {
choiceSummary.addChoice(ReprocessStoreChoice.CONTINUECURRENTFILE);
choiceSummary.addChoice(ReprocessStoreChoice.CONTINUENEXTFILE);
}
return choiceSummary;
}
/**
* Either opens a dialog to ask the user, or uses a choice entered into the command line for nogui mode.
* Decide what to do with stores that already have data. Can return continue from end or overwrite
* in which case stores will be deleted and we'll start again. The chosen action will need to be
* communicated to the various inputs.
* @param choices
*/
private ReprocessStoreChoice chosePartStoreAction(StoreChoiceSummary choices) {
/**
* Do we really have to deal with multiple inputs ? Can I envisage a situation where there is
* ever more than one input going at any one time ? not really, but should I add code
* to make sure that there really can be only one ? i.e. two daq's would be allowed for real
* time processing, but only one for offline ? could do all I guess by looking at sources of
* all output data blocks and doing it on a case by case basis. All we have to do here though
* is to get an answer about what to do.
*/
// see if we've got a global parameter passed in as an argument
String arg = GlobalArguments.getParam(ReprocessStoreChoice.paramName);
if (arg != null) {
ReprocessStoreChoice choice = ReprocessStoreChoice.valueOf(arg);
if (choice == null) {
String warn = String.format("Reprocessing storage input parameter %s value \"%s\" is not a recognised value", ReprocessStoreChoice.paramName, arg);
WarnOnce.showWarning("Invalid input parameter", warn, WarnOnce.WARNING_MESSAGE);
}
if (choice == ReprocessStoreChoice.CONTINUECURRENTFILE || choice == ReprocessStoreChoice.CONTINUENEXTFILE) {
if (choices.isProcessingComplete()) {
return ReprocessStoreChoice.DONTSSTART;
}
}
return choice;
}
if (PamGUIManager.getGUIType() == PamGUIManager.NOGUI) {
System.out.println("In Nogui mode you should set a choice as to how to handle existing storage overwrites. Using default of overwriting everything");
return ReprocessStoreChoice.OVERWRITEALL;
}
// otherwise we'll need to show a dialog to let the user decide what to do
ReprocessStoreChoice choice = ReprocessChoiceDialog.showDialog(PamController.getMainFrame(), choices);
return choice;
}
/**
* Return true if we seem to be reprocessing offline files.
* Note that this might be the Tritech data as well as the sound acquisition so
* have added an abstract intermediate class on the controlled units so we can check them all.
* @return
*/
public boolean isOfflineFiles() {
ArrayList<PamControlledUnit> sources = PamController.getInstance().findControlledUnits(RawInputControlledUnit.class, true);
if (sources == null) {
return false;
}
for (PamControlledUnit pcu : sources) {
RawInputControlledUnit rawPCU = (RawInputControlledUnit) pcu;
if (rawPCU.getRawInputType() == RawInputControlledUnit.RAW_INPUT_FILEARCHIVE) {
return true;
}
}
return false;
}
}

View File

@ -0,0 +1,53 @@
package PamController.fileprocessing;
/**
* Choices on what to do when re-processing data and finding that output data already exist.
* @author dg50
*
*/
public enum ReprocessStoreChoice {
STARTNORMAL, CONTINUECURRENTFILE, CONTINUENEXTFILE, OVERWRITEALL, DONTSSTART;
public static final String paramName = "-reprocessoption";
@Override
public String toString() {
switch (this) {
case STARTNORMAL:
return "Start normally. Note risk of overwriting!";
case CONTINUECURRENTFILE:
return "Continue from start of last input file processed";
case CONTINUENEXTFILE:
return "Continue from start of next input file to process";
case DONTSSTART:
return "Don't start processing";
case OVERWRITEALL:
return "Overwrite existing output data";
default:
break;
}
return null;
}
public String getToolTip() {
switch (this) {
case STARTNORMAL:
return "No risk of data overlap, so system will start normally";
case CONTINUECURRENTFILE:
return "System will work out how far data processing has got and continue from the start of the file it stopped in";
case CONTINUENEXTFILE:
return "System will work out how far data processing has got and continue from the start of the file AFTER the one it stopped in";
case DONTSSTART:
return "Processing will not start. Select alternative storage locations / databases and try again";
case OVERWRITEALL:
return "Overwrite existing output data. Existing data will be deleted";
default:
break;
}
return null;
}
}

View File

@ -0,0 +1,234 @@
package PamController.fileprocessing;
import java.util.ArrayList;
import java.util.List;
import PamController.InputStoreInfo;
/**
* Summary information about the data stores.
* @author dg50
*
*/
public class StoreChoiceSummary {
private long outputEndTime;
private long outputStartTime;
private List<ReprocessStoreChoice> choices = new ArrayList<>();
private InputStoreInfo inputStoreInfo;
public StoreChoiceSummary(InputStoreInfo info, ReprocessStoreChoice singleChoice) {
this.inputStoreInfo = info;
addChoice(singleChoice);
}
public StoreChoiceSummary(long outputEndTime, InputStoreInfo inputStoreInfo) {
super();
this.outputEndTime = outputEndTime;
this.inputStoreInfo = inputStoreInfo;
}
public StoreChoiceSummary(InputStoreInfo inputInfo) {
this.inputStoreInfo = inputInfo;
}
/**
* Get the number of choices. If it's only one, then there
* isn't a lot to do. If it's >1, then need a decision in the
* form of a command line instruction or a user dialog.
* @return number of choices.
*/
public int getNumChoices() {
return choices.size();
}
/**
* Is processing complete, i.e. last time in output matches last time
* in input data.
* @return true if processing appears to be complete.
*/
public boolean isProcessingComplete() {
if (inputStoreInfo == null) {
return false;
}
long inputEnd = getInputEndTime();
long outputEnd = getOutputEndTime();
long diff = inputEnd-outputEnd;
return (diff < 1000);
}
/**
* Add a reasonable choice to what the user can select to do.
* @param choice
*/
public void addChoice(ReprocessStoreChoice choice) {
choices.add(choice);
}
/**
* @return the start time of the first input file
*/
public Long getInputStartTime() {
if (inputStoreInfo == null) {
return null;
}
return inputStoreInfo.getFirstFileStart();
}
/**
* @return the start time of the first input file
*/
public Long getInputEndTime() {
if (inputStoreInfo == null) {
return null;
}
return inputStoreInfo.getLastFileEnd();
}
/**
* @return the outputEndTime
*/
public long getOutputEndTime() {
return outputEndTime;
}
/**
* Set the last data time, but only if the passed value
* is not null and is bigger than the current value.
* @param lastDataTime
* @return largest of current and passed value.
*/
public long testOutputEndTime(Long lastDataTime) {
if (lastDataTime == null) {
return this.getOutputEndTime();
}
setOutputEndTime(Math.max(outputEndTime, lastDataTime));
return getOutputEndTime();
}
/**
* Set the last data time, but only if the passed value
* is not null and is bigger than the current value.
* @param lastDataTime
* @return largest of current and passed value.
*/
public long testOutputStartTime(Long firstDataTime) {
if (firstDataTime == null) {
return this.getOutputStartTime();
}
if (outputStartTime == 0 || firstDataTime < outputStartTime) {
outputStartTime = firstDataTime;
}
return getOutputStartTime();
}
/**
* @param outputEndTime the outputEndTime to set
*/
public void setOutputEndTime(long outputEndTime) {
this.outputEndTime = outputEndTime;
}
/**
* @return the inputStoreInfo
*/
public InputStoreInfo getInputStoreInfo() {
return inputStoreInfo;
}
/**
* @param inputStoreInfo the inputStoreInfo to set
*/
public void setInputStoreInfo(InputStoreInfo inputStoreInfo) {
this.inputStoreInfo = inputStoreInfo;
}
/**
* @return the choices
*/
public List<ReprocessStoreChoice> getChoices() {
return choices;
}
/**
* @return the outputStartTime
*/
public long getOutputStartTime() {
return outputStartTime;
}
/**
* @param outputStartTime the outputStartTime to set
*/
public void setOutputStartTime(long outputStartTime) {
this.outputStartTime = outputStartTime;
}
/**
* Get the index of the file that starts before or exactly at the given time.
* @param inputEndTime
* @return index of file, or -1 if none found.
*/
public int getFileIndexBefore(Long inputEndTime) {
if (inputStoreInfo == null) {
return -1;
}
long[] fileStarts = inputStoreInfo.getFileStartTimes();
if (fileStarts == null) {
return -1;
}
for (int i = fileStarts.length-1; i>= 0; i--) {
if (fileStarts[i] <= inputEndTime) {
return i;
}
}
return -1;
}
/**
* Get the start time in millis of a file for the given index.
* @param fileIndex
* @return file time, or null if no file available.
*/
public Long getInputTimeForIndex(int fileIndex) {
if (inputStoreInfo == null) {
return null;
}
long[] fileStarts = inputStoreInfo.getFileStartTimes();
if (fileStarts == null) {
return null;
}
if (fileIndex < 0 || fileIndex >= fileStarts.length) {
return null;
}
return fileStarts[fileIndex];
}
/**
* Get the index of the file that starts after the given time.
* @param inputEndTime
* @return index of file, or -1 if none found.
*/
public int getFileIndexAfter(Long inputEndTime) {
if (inputStoreInfo == null) {
return -1;
}
long[] fileStarts = inputStoreInfo.getFileStartTimes();
if (fileStarts == null) {
return -1;
}
for (int i = 0; i < fileStarts.length; i++) {
if (fileStarts[i] > inputEndTime) {
return i;
}
}
return -1;
}
}

View File

@ -0,0 +1,115 @@
package PamController.fileprocessing;
import java.io.File;
import PamController.OfflineDataStore;
/**
* Class to carry information about an OfflineDataStore. Used when restarting offline
* processing to help work out if we should overwrite, start again, etc.
* @author dg50
*
*/
abstract public class StoreStatus {
public static final int STATUS_MISSING = 1;
public static final int STATUS_EMPTY = 2;
public static final int STATUS_HASDATA = 3;
private OfflineDataStore offlineDataStore;
/**
* Time of first data, may be null if detail not asked for or if
* hasData is false.
*/
private Long firstDataTime;
/**
* Time of last data, may be null if detail not asked for or if
* hasData is false.
*/
private Long lastDataTime;
/**
* General status flag.
*/
private int storeStatus;
public StoreStatus(OfflineDataStore offlineDataStore) {
this.offlineDataStore = offlineDataStore;
}
/**
* Get the amount of free space for this storage.
* @return free space in bytes.
*/
public abstract long getFreeSpace();
public long getFreeSpace(String currDir) {
if (currDir == null) {
return 0;
}
File dirFile = new File(currDir);
long space = 0;
try {
space = dirFile.getUsableSpace();
}
catch (SecurityException e) {
System.out.printf("Security exception getting space for %s: \n%s\n", currDir, e.getMessage());
}
return space;
}
/**
* @return the firstDataTime
*/
public Long getFirstDataTime() {
return firstDataTime;
}
/**
* @param firstDataTime the firstDataTime to set
*/
public void setFirstDataTime(Long firstDataTime) {
this.firstDataTime = firstDataTime;
}
/**
* @return the lastDataTime
*/
public Long getLastDataTime() {
return lastDataTime;
}
/**
* @param lastDataTime the lastDataTime to set
*/
public void setLastDataTime(Long lastDataTime) {
this.lastDataTime = lastDataTime;
}
/**
* @return the storeStatus
*/
public int getStoreStatus() {
return storeStatus;
}
/**
* @param storeStatus the storeStatus to set
*/
public void setStoreStatus(int storeStatus) {
this.storeStatus = storeStatus;
}
/**
* @return the offlineDataStore
*/
public OfflineDataStore getOfflineDataStore() {
return offlineDataStore;
}
}

View File

@ -14,9 +14,9 @@ public class pamBuoyGlobals {
// public static Integer useGstreamer = 0; // public static Integer useGstreamer = 0;
// public static boolean useNetworkCont = false; // public static boolean useNetworkCont = false;
private static Integer networkControlPort = null; private static Integer networkControlPort = null;
private static String multiportAddress; private static String multicastAddress;
// private static boolean useDSP = false; // private static boolean useDSP = false;
private static int muliportPort; private static int mulicastPort;
/** /**
* @return the networkControlPort * @return the networkControlPort
@ -33,28 +33,28 @@ private static int muliportPort;
} }
/** /**
* Set parameters for mulitport configutation. * Set parameters for mulitport configuration.
* @param mAddr * @param mAddr
* @param mPort * @param mPort
*/ */
public static void setMultiportConfig(String mAddr, int mPort) { public static void setMultiportConfig(String mAddr, int mPort) {
multiportAddress = mAddr; multicastAddress = mAddr;
muliportPort = mPort; mulicastPort = mPort;
} }
/** /**
* @return the multiportAddress * @return the multiportAddress
*/ */
public static String getMultiportAddress() { public static String getMulticastAddress() {
return multiportAddress; return multicastAddress;
} }
/** /**
* @return the muliportPort * @return the muliportPort
*/ */
public static int getMuliportPort() { public static int getMulticastPort() {
return muliportPort; return mulicastPort;
} }

View File

@ -662,7 +662,7 @@ public class PamguardXMLWriter implements PamSettings {
} }
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Error in PamguardXMLWriter.writeArray: " + e.getMessage());
} }
return null; return null;
} }
@ -704,7 +704,7 @@ public class PamguardXMLWriter implements PamSettings {
return e; return e;
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Error in PamguardXMLWriter.writeObjectArray: " + e.getMessage());
} }
return null; return null;
} }
@ -729,7 +729,7 @@ public class PamguardXMLWriter implements PamSettings {
// el.appendChild(e); // el.appendChild(e);
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Error in PamguardXMLWriter.writePrimativeArray: " + e.getMessage());
} }
return null; return null;
} }

View File

@ -460,8 +460,6 @@ final public class PamModel implements PamModelInterface, PamSettings {
mi.setModulesMenuGroup(utilitiesGroup); mi.setModulesMenuGroup(utilitiesGroup);
mi.setMaxNumber(1); mi.setMaxNumber(1);
/* /*
* ************* End Utilities Group ******************* * ************* End Utilities Group *******************
*/ */

View File

@ -108,7 +108,7 @@ public class FileFunctions {
return attrib; return attrib;
} }
catch (Error e) { catch (Error e) {
System.out.println(e.getMessage()); System.out.println("Error in FileFunctions.getAttributes: " + e.getMessage());
return 0; return 0;
} }
} }

View File

@ -47,6 +47,8 @@ public class PamCalendar {
public static TimeZone defaultTimeZone = TimeZone.getTimeZone("UTC"); public static TimeZone defaultTimeZone = TimeZone.getTimeZone("UTC");
private static TimeZone localTimeZone = TimeZone.getDefault();
public static final long millisPerDay = 1000L*24L*3600L; public static final long millisPerDay = 1000L*24L*3600L;
/** /**
@ -174,8 +176,9 @@ public class PamCalendar {
} }
public static TimeZone getDisplayTimeZone(boolean useLocal) { public static TimeZone getDisplayTimeZone(boolean useLocal) {
return TimeZone.getTimeZone("UTC"); // return TimeZone.getTimeZone("UTC");
// return useLocal ? CalendarControl.getInstance().getChosenTimeZone() : defaultTimeZone; // return useLocal ? CalendarControl.getInstance().getChosenTimeZone() : defaultTimeZone;
return useLocal ? localTimeZone : defaultTimeZone;
} }
public static String formatDateTime(Date date) { public static String formatDateTime(Date date) {

View File

@ -8,6 +8,7 @@ import PamUtils.PamFileFilter;
import PamUtils.worker.PamWorkProgressMessage; import PamUtils.worker.PamWorkProgressMessage;
import PamUtils.worker.PamWorkWrapper; import PamUtils.worker.PamWorkWrapper;
import PamUtils.worker.PamWorker; import PamUtils.worker.PamWorker;
import PamguardMVC.debug.Debug;
/** /**
* Class to list files in one or more directories. * Class to list files in one or more directories.
@ -64,6 +65,9 @@ public abstract class FileListWorker<T extends File> implements PamWorkWrapper<F
this.fileList = rootList; this.fileList = rootList;
this.subFolders = subFolders; this.subFolders = subFolders;
this.useOldIfPossible = useOldIfPossible; this.useOldIfPossible = useOldIfPossible;
for (int i = 0; i < rootList.length; i++) {
Debug.out.println(">>>>>>>>Starting file search in " + rootList[i]);
}
if (noChange(rootList, subFolders, useOldIfPossible)) { if (noChange(rootList, subFolders, useOldIfPossible)) {
SwingUtilities.invokeLater(new Runnable() { SwingUtilities.invokeLater(new Runnable() {
@Override @Override
@ -162,6 +166,7 @@ public abstract class FileListWorker<T extends File> implements PamWorkWrapper<F
private void addFiles(PamWorker<FileListData<T>> pamWorker, FileListData<T> newFileList, File folder) { private void addFiles(PamWorker<FileListData<T>> pamWorker, FileListData<T> newFileList, File folder) {
newFileList.addFolder(); newFileList.addFolder();
pamWorker.update(new PamWorkProgressMessage(-1, "Searching folder " + folder.getAbsolutePath())); pamWorker.update(new PamWorkProgressMessage(-1, "Searching folder " + folder.getAbsolutePath()));
Debug.out.println(">>>> Searching for files in abs path " + folder.getAbsolutePath());
// System.out.println(folder.getAbsolutePath()); // System.out.println(folder.getAbsolutePath());
File[] moreFiles = folder.listFiles(fileFilter); File[] moreFiles = folder.listFiles(fileFilter);
if (moreFiles == null) { if (moreFiles == null) {
@ -175,6 +180,7 @@ public abstract class FileListWorker<T extends File> implements PamWorkWrapper<F
T newFile = createFile(moreFiles[i]); T newFile = createFile(moreFiles[i]);
eachFileTask(newFile); eachFileTask(newFile);
newFileList.addFile(newFile); newFileList.addFile(newFile);
Debug.out.println("Adding file " + newFile.getAbsolutePath());
if (i%100 == 0) { if (i%100 == 0) {
sayProgress(pamWorker, newFileList, folder); sayProgress(pamWorker, newFileList, folder);
} }

View File

@ -55,9 +55,19 @@ public class WavFileType extends File {
* @return the audioInfo * @return the audioInfo
*/ */
public AudioFormat getAudioInfo() { public AudioFormat getAudioInfo() {
if (audioInfo == null) {
audioInfo = getAudioFormat();
}
return audioInfo; return audioInfo;
} }
/**
* Get the audio format.
* @return the audio format.
*/
private AudioFormat getAudioFormat() {
return getAudioFormat(this);
}
/** /**
* Get the audio format. * Get the audio format.

View File

@ -5,6 +5,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ArrayList;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JMenuItem; import javax.swing.JMenuItem;
@ -49,6 +50,14 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
private SwingTableColumnWidths columnWidths; private SwingTableColumnWidths columnWidths;
/**
* Most work will run off a copy of the data.
* Makes it easier to include data selectors, etc.
*/
private ArrayList<T> dataUnitCopy;
private Object copySynch = new Object();
public DataBlockTableView(PamDataBlock<T> pamDataBlock, String displayName) { public DataBlockTableView(PamDataBlock<T> pamDataBlock, String displayName) {
this.pamDataBlock = pamDataBlock; this.pamDataBlock = pamDataBlock;
this.displayName = displayName; this.displayName = displayName;
@ -97,6 +106,13 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
} }
} }
/**
* Call the table data changed function to update table values.
*/
public void fireTableDataChanged() {
blockTableModel.fireTableDataChanged();
}
public JComponent getComponent() { public JComponent getComponent() {
return tablePanel; return tablePanel;
} }
@ -141,11 +157,23 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
String tip = null; String tip = null;
java.awt.Point p = e.getPoint(); java.awt.Point p = e.getPoint();
int rowIndex = rowAtPoint(p); int rowIndex = rowAtPoint(p);
// int column = columnAtPoint(p);
// System.out.println("Get tooltip for row " + rowIndex + " column" + column);
if (rowIndex < 0) {
return null;
}
int colIndex = columnAtPoint(p); int colIndex = columnAtPoint(p);
int realColumnIndex = convertColumnIndexToModel(colIndex); int realColumnIndex = convertColumnIndexToModel(colIndex);
try {
T dataUnit = getDataUnit(rowIndex); T dataUnit = getDataUnit(rowIndex);
return DataBlockTableView.this.getToolTipText(dataUnit, realColumnIndex); return DataBlockTableView.this.getToolTipText(dataUnit, realColumnIndex);
} }
catch (Exception ex) {
// I once got an index out of bounds here, or it might have been
// a concurrent modification exception ? Either way return null;
return null;
}
}
} }
/** /**
@ -201,21 +229,31 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
* @return data unit for the table row. * @return data unit for the table row.
*/ */
private final T getDataUnit(int tableRow) { private final T getDataUnit(int tableRow) {
synchronized (pamDataBlock.getSynchLock()) { synchronized (copySynch) {
int rowIndex = getDataIndexForRow(tableRow); int rowIndex = getDataIndexForRow(tableRow);
if (rowIndex < 0) return null; if (rowIndex < 0) return null;
return pamDataBlock.getDataUnit(rowIndex, PamDataBlock.REFERENCE_CURRENT); if (dataUnitCopy == null) {
return null;
}
return dataUnitCopy.get(tableRow);
// return pamDataBlock.getDataUnit(rowIndex, PamDataBlock.REFERENCE_CURRENT);
} }
} }
/** /**
* Get the number of rows in the table - default behaviour is the * Get the number of rows in the table - default behaviour is the
* number of rows in the datablock, but this may be overridded if * number of rows in the datablock, but this may be overridden if
* data are being selected in a different way. * data are being selected in a different way.
* @return numer of table rows to show. * @return number of table rows to show.
*/ */
public int getRowCount() { public int getRowCount() {
return pamDataBlock.getUnitsCount(); if (dataUnitCopy == null) {
updatePamData();
if (dataUnitCopy == null) {
return 0;
}
}
return dataUnitCopy.size();
} }
/** /**
@ -227,7 +265,10 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
* @return * @return
*/ */
public int getDataIndexForRow(int tableRow) { public int getDataIndexForRow(int tableRow) {
int nRow = pamDataBlock.getUnitsCount(); if (dataUnitCopy == null) {
return tableRow;
}
int nRow = dataUnitCopy.size();
if (!isViewer) { if (!isViewer) {
tableRow = nRow-tableRow-1; tableRow = nRow-tableRow-1;
} }
@ -244,12 +285,14 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
@Override @Override
public void addData(PamObservable o, PamDataUnit arg) { public void addData(PamObservable o, PamDataUnit arg) {
blockTableModel.fireTableDataChanged(); DataBlockTableView.this.updatePamData();
// blockTableModel.fireTableDataChanged();
} }
@Override @Override
public void updateData(PamObservable observable, PamDataUnit pamDataUnit) { public void updateData(PamObservable observable, PamDataUnit pamDataUnit) {
blockTableModel.fireTableDataChanged(); DataBlockTableView.this.updatePamData();
// blockTableModel.fireTableDataChanged();
} }
@Override @Override
@ -258,6 +301,15 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
} }
} }
private void updatePamData() {
synchronized (copySynch) {
dataUnitCopy = pamDataBlock.getDataCopy();
}
blockTableModel.fireTableDataChanged();
}
private class MouseAction extends MouseAdapter { private class MouseAction extends MouseAdapter {
/* (non-Javadoc) /* (non-Javadoc)
@ -304,7 +356,11 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
* @return Array of multiple rows selected. * @return Array of multiple rows selected.
*/ */
public T[] getMultipleSelectedRows() { public T[] getMultipleSelectedRows() {
synchronized(pamDataBlock.getSynchLock()) { if (dataUnitCopy == null) {
return null;
}
// synchronized(pamDataBlock.getSynchLock()) { // synch not needed with data copy.
synchronized (copySynch) {
int[] selRows = testTable.getSelectedRows(); int[] selRows = testTable.getSelectedRows();
if (selRows == null) { if (selRows == null) {
return null; return null;
@ -337,12 +393,14 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
@Override @Override
public void scrollValueChanged(AbstractPamScroller abstractPamScroller) { public void scrollValueChanged(AbstractPamScroller abstractPamScroller) {
blockTableModel.fireTableDataChanged(); // blockTableModel.fireTableDataChanged();
updatePamData();
} }
@Override @Override
public void scrollRangeChanged(AbstractPamScroller pamScroller) { public void scrollRangeChanged(AbstractPamScroller pamScroller) {
blockTableModel.fireTableDataChanged(); // blockTableModel.fireTableDataChanged();
updatePamData();
} }
} }

View File

@ -2078,6 +2078,9 @@ public class PamDataBlock<Tunit extends PamDataUnit> extends PamObservable {
/* /*
* Doesnt notify it's own parent to avoid an infinite loop * Doesnt notify it's own parent to avoid an infinite loop
*/ */
if (Float.isNaN(sampleRate)) {
System.out.println("NaN sample rate being set in " + getLongDataName());
}
if (notify) { if (notify) {
for (int i = 0; i < countObservers(); i++) { for (int i = 0; i < countObservers(); i++) {
if (getPamObserver(i).getObserverObject() != parentProcess) { if (getPamObserver(i).getObserverObject() != parentProcess) {

View File

@ -46,6 +46,7 @@ import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory; import javax.xml.xpath.XPathFactory;
import org.apache.commons.io.comparator.NameFileComparator;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@ -391,7 +392,7 @@ public class binaryUIDFunctions {
// System.out.println("Warning - no " + filePrefix + " binary files found in " + binStore.getBinaryStoreSettings().getStoreLocation()); // System.out.println("Warning - no " + filePrefix + " binary files found in " + binStore.getBinaryStoreSettings().getStoreLocation());
return maxUID; return maxUID;
} }
Collections.sort(binFiles); Collections.sort(binFiles, NameFileComparator.NAME_COMPARATOR);
// loop through the binary files from the last one to the first, and stop as // loop through the binary files from the last one to the first, and stop as
// soon as we find // soon as we find

View File

@ -177,6 +177,7 @@ public class RWEProcess extends PamProcess {
minSoundType = rweControl.rweParameters.minSoundType; minSoundType = rweControl.rweParameters.minSoundType;
classifier.setSoundData(getSampleRate(), sourceDataBlock.getFftLength(), classifier.setSoundData(getSampleRate(), sourceDataBlock.getFftLength(),
sourceDataBlock.getFftHop()); sourceDataBlock.getFftHop());
// System.out.println("Create right whale channel process " + iChannel);
} }

View File

@ -225,6 +225,11 @@ public class AlarmProcess extends PamProcess {
} }
@Override
public void updateData(PamObservable o, PamDataUnit arg) {
newData(o, arg);
}
public boolean setupAlarm() { public boolean setupAlarm() {
dataSource = PamController.getInstance().getDataBlock(PamDataUnit.class, alarmControl.alarmParameters.dataSourceName); dataSource = PamController.getInstance().getDataBlock(PamDataUnit.class, alarmControl.alarmParameters.dataSourceName);
if (dataSource == null) { if (dataSource == null) {

View File

@ -94,7 +94,7 @@ public class PlaySound extends AlarmAction implements PamSettings {
double secs = fl/sr*1000; double secs = fl/sr*1000;
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Error in PlaySound.playSound:" + e.getMessage());
return false; return false;
} }
return true; return true;
@ -114,10 +114,10 @@ public class PlaySound extends AlarmAction implements PamSettings {
System.out.println(f.getMessage()); System.out.println(f.getMessage());
return currentClip = null; return currentClip = null;
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("IOError in PlaySound.prepareClip: " + e.getMessage());
return currentClip = null; return currentClip = null;
} catch (LineUnavailableException e) { } catch (LineUnavailableException e) {
System.out.println(e.getMessage()); System.out.println("LineUnavailableException in PlaySound.prepareClip: " + e.getMessage());
return currentClip = null; return currentClip = null;
} }
currentFile = soundFile; currentFile = soundFile;

View File

@ -118,7 +118,7 @@ public abstract class BackupStream implements PamSettings, BackupFunction {
try { try {
ok = doAction(backupManager, action, item); ok = doAction(backupManager, action, item);
} catch (BackupException e) { } catch (BackupException e) {
System.out.println(e.getMessage()); System.out.println("Error in BackupStream.runAction:" + e.getMessage());
backupManager.updateProgress(new BackupProgress(this, action, STATE.PROBLEM, toDoList.size(), backupManager.updateProgress(new BackupProgress(this, action, STATE.PROBLEM, toDoList.size(),
iDone, "Error " + e.getMessage())); iDone, "Error " + e.getMessage()));
ok = false; //otherwise, OK stays true! This will leave a true null entry in the database, so file will be selected next time around ok = false; //otherwise, OK stays true! This will leave a true null entry in the database, so file will be selected next time around

View File

@ -42,6 +42,8 @@ public abstract class BinaryDataSource {
private BackgroundBinaryWriter backgroundBinaryWriter; private BackgroundBinaryWriter backgroundBinaryWriter;
public static final Object packSynchObject = new Object();
/** /**
* Create a binary data source. These are used both to store data in binary * Create a binary data source. These are used both to store data in binary
* files, and possibly also to send data to other PAMguard instances over the network. * files, and possibly also to send data to other PAMguard instances over the network.
@ -224,12 +226,14 @@ public abstract class BinaryDataSource {
* Then pack the data * Then pack the data
*/ */
BinaryObjectData data; BinaryObjectData data;
synchronized (packSynchObject) {
if (pamDataUnit instanceof BackgroundDataUnit) { if (pamDataUnit instanceof BackgroundDataUnit) {
data = getBackgroundBinaryWriter().packBackgroundData((BackgroundDataUnit) pamDataUnit); data = getBackgroundBinaryWriter().packBackgroundData((BackgroundDataUnit) pamDataUnit);
} }
else { else {
data = getPackedData(pamDataUnit); data = getPackedData(pamDataUnit);
} }
}
/* /*
* Then put it back to how it was a moment ago. * Then put it back to how it was a moment ago.
*/ */

View File

@ -118,6 +118,8 @@ public class BinaryOutputStream {
boolean open = openPGDFFile(outputFile); boolean open = openPGDFFile(outputFile);
// System.out.println("Open outout file " + outputFile.getAbsolutePath());
if (open) { if (open) {
addToDataMap(outputFile); addToDataMap(outputFile);
} }
@ -260,6 +262,7 @@ public class BinaryOutputStream {
public synchronized boolean closeFile() { public synchronized boolean closeFile() {
boolean ok = true; boolean ok = true;
// System.out.println("Close output file " + mainFileName);
if (dataOutputStream != null) { if (dataOutputStream != null) {
if (currentDataMapPoint != null) { if (currentDataMapPoint != null) {
currentDataMapPoint.setBinaryFooter(footer); currentDataMapPoint.setBinaryFooter(footer);

View File

@ -36,6 +36,8 @@ import dataGram.DatagramManager;
import dataMap.OfflineDataMap; import dataMap.OfflineDataMap;
import dataMap.OfflineDataMapPoint; import dataMap.OfflineDataMapPoint;
import PamController.AWTScheduler; import PamController.AWTScheduler;
import PamController.DataInputStore;
import PamController.DataOutputStore;
import PamController.OfflineDataStore; import PamController.OfflineDataStore;
import PamController.PamControlledUnit; import PamController.PamControlledUnit;
import PamController.PamControlledUnitGUI; import PamController.PamControlledUnitGUI;
@ -49,6 +51,7 @@ import PamController.PamSettingsGroup;
import PamController.PamSettingsSource; import PamController.PamSettingsSource;
import PamController.StorageOptions; import PamController.StorageOptions;
import PamController.StorageParameters; import PamController.StorageParameters;
import PamController.fileprocessing.StoreStatus;
import PamController.status.ModuleStatus; import PamController.status.ModuleStatus;
import PamController.status.QuickRemedialAction; import PamController.status.QuickRemedialAction;
import PamModel.SMRUEnable; import PamModel.SMRUEnable;
@ -89,7 +92,7 @@ import binaryFileStorage.layoutFX.BinaryStoreGUIFX;
* *
*/ */
public class BinaryStore extends PamControlledUnit implements PamSettings, public class BinaryStore extends PamControlledUnit implements PamSettings,
PamSettingsSource, OfflineDataStore { PamSettingsSource, DataOutputStore {
public static final String fileType = "pgdf"; public static final String fileType = "pgdf";
@ -1113,6 +1116,8 @@ PamSettingsSource, OfflineDataStore {
String lastFailedStream = null; String lastFailedStream = null;
private BinaryStoreStatusFuncs binaryStoreStatusFuncs;
public boolean removeMapPoint(File aFile, ArrayList<PamDataBlock> streams) { public boolean removeMapPoint(File aFile, ArrayList<PamDataBlock> streams) {
BinaryHeaderAndFooter bhf = getFileHeaderAndFooter(aFile); BinaryHeaderAndFooter bhf = getFileHeaderAndFooter(aFile);
if (bhf == null || bhf.binaryHeader == null) { if (bhf == null || bhf.binaryHeader == null) {
@ -1355,6 +1360,26 @@ PamSettingsSource, OfflineDataStore {
return newFile; return newFile;
} }
/**
* Find the noise file to match a given data file.
* @param dataFile data file.
* @param checkExists check the file exists and if it doens't return null
* @return index file to go with the data file.
*/
public File findNoiseFile(File dataFile, boolean checkExists) {
// String filePath = dataFile.getAbsolutePath();
// // check that the last 4 characters are "pgdf"
// int pathLen = filePath.length();
// String newPath = filePath.substring(0, pathLen-4) + indexFileType;
File newFile = swapFileType(dataFile, noiseFileType);
if (checkExists) {
if (newFile.exists() == false) {
return null;
}
}
return newFile;
}
/** /**
* Create an index file (pgdx) name from a data file (pgdf) file name * Create an index file (pgdx) name from a data file (pgdf) file name
* @param dataFile data file name * @param dataFile data file name
@ -1488,7 +1513,7 @@ PamSettingsSource, OfflineDataStore {
* @param folder folder to search * @param folder folder to search
* @param filter file filter * @param filter file filter
*/ */
private void listDataFiles(ArrayList<File> fileList, File folder, PamFileFilter filter) { public void listDataFiles(ArrayList<File> fileList, File folder, PamFileFilter filter) {
File[] newFiles = folder.listFiles(filter); File[] newFiles = folder.listFiles(filter);
if (newFiles == null) { if (newFiles == null) {
return; return;
@ -1684,7 +1709,7 @@ PamSettingsSource, OfflineDataStore {
* @param binaryObjectData * @param binaryObjectData
* @param dataSink * @param dataSink
*/ */
private void unpackAnnotationData(int fileVersion, PamDataUnit createdUnit, BinaryObjectData binaryObjectData, BinaryDataSink dataSink) { protected void unpackAnnotationData(int fileVersion, PamDataUnit createdUnit, BinaryObjectData binaryObjectData, BinaryDataSink dataSink) {
//System.out.println("Hello annotation " + binaryObjectData.getAnnotationDataLength()); //System.out.println("Hello annotation " + binaryObjectData.getAnnotationDataLength());
if (binaryObjectData.getAnnotationDataLength() == 0) { if (binaryObjectData.getAnnotationDataLength() == 0) {
@ -2211,7 +2236,7 @@ PamSettingsSource, OfflineDataStore {
private boolean reportError(String string) { boolean reportError(String string) {
System.out.println(string); System.out.println(string);
return false; return false;
} }
@ -2379,6 +2404,7 @@ PamSettingsSource, OfflineDataStore {
} }
else { else {
reportError("No valid header in file " + file.getAbsolutePath()); reportError("No valid header in file " + file.getAbsolutePath());
inputStream.closeFile();
return null; return null;
} }
@ -2509,4 +2535,17 @@ PamSettingsSource, OfflineDataStore {
return binaryStoreSettings.getNoiseStoreType(); return binaryStoreSettings.getNoiseStoreType();
} }
@Override
public StoreStatus getStoreStatus(boolean getDetail) {
if (binaryStoreStatusFuncs == null) {
binaryStoreStatusFuncs = new BinaryStoreStatusFuncs(this);
}
return binaryStoreStatusFuncs.getStoreStatus(getDetail);
}
@Override
public boolean deleteDataFrom(long timeMillis) {
BinaryStoreDeleter storeDeleter = new BinaryStoreDeleter(this);
return storeDeleter.deleteDataFrom(timeMillis);
}
} }

View File

@ -0,0 +1,369 @@
package binaryFileStorage;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.io.comparator.NameFileComparator;
import PamUtils.PamCalendar;
import PamUtils.PamFileFilter;
import PamguardMVC.DataUnitBaseData;
import PamguardMVC.PamDataBlock;
import PamguardMVC.PamDataUnit;
public class BinaryStoreDeleter {
private static final int FILE_DELETE_ERROR = 1;
private static final int FILE_TOO_EARLY = 2;
private static final int FILE_DELETED = 3;
private static final int FILE_PARTIAL_DELETE = 4;
private BinaryStore binaryStore;
private FileFilter directoryFilter;
private BinaryStoreStatusFuncs binaryStoreStatusFuncs;
public BinaryStoreDeleter(BinaryStore binaryStore) {
this.binaryStore = binaryStore;
directoryFilter = new DirectoryFilter();
binaryStoreStatusFuncs = new BinaryStoreStatusFuncs(binaryStore);
}
public boolean deleteDataFrom(long timeMillis) {
if (timeMillis == 0) {
return deleteEverything();
}
else {
return deleteFrom(timeMillis);
}
}
private class DirectoryFilter implements java.io.FileFilter {
@Override
public boolean accept(File pathname) {
return pathname.isDirectory();
}
}
private boolean deleteEverything() {
ArrayList<File> fileList = new ArrayList<File>();
String root = binaryStore.binaryStoreSettings.getStoreLocation();
if (root == null) {
return false;
}
File rootFolder = new File(root);
PamFileFilter binaryDataFilter = new PamFileFilter("Binary Data Files", BinaryStore.fileType);
binaryDataFilter.addFileType(BinaryStore.indexFileType);
binaryDataFilter.addFileType(BinaryStore.noiseFileType);
binaryDataFilter.setAcceptFolders(true);
binaryStore.listDataFiles(fileList, rootFolder, binaryDataFilter);
int errors = 0;
for (File aFile : fileList) {
try {
aFile.delete();
}
catch (Exception e) {
errors++;
}
}
deleteEmptyFolders();
return errors == 0;
}
private boolean deleteFrom(long timeMillis) {
/*
* need to go through the data one stream at a time so that
* we can pick files off from the end of the list.
*/
ArrayList<PamDataBlock> streams = BinaryStore.getStreamingDataBlocks(true);
int errors = 0;
for (PamDataBlock aBlock : streams) {
boolean ok = deleteFrom(aBlock, timeMillis);
if (!ok) {
errors++;
}
}
deleteEmptyFolders();
return false;
}
private boolean deleteFrom(PamDataBlock aBlock, long timeMillis) {
System.out.printf("Deleting binary data for %s from %s\n", aBlock.getDataName(), PamCalendar.formatDBDateTime(timeMillis));
BinaryDataSource dataSource = aBlock.getBinaryDataSource();
if (dataSource == null) {
return true; // don't see how this can happen.
}
// first deal with pgdf and pgdx files, then noise.
String filePrefix = dataSource.createFilenamePrefix();
List<File> binFiles = binaryStore.listAllFilesWithPrefix(filePrefix);
if (binFiles == null || binFiles.isEmpty()) {
return true; // nothing to delete.
}
Collections.sort(binFiles, NameFileComparator.NAME_COMPARATOR);
for (int i = binFiles.size()-1; i >= 0; i--) {
int ans = deleteFileFrom(aBlock, binFiles.get(i), timeMillis);
if (ans == FILE_TOO_EARLY) {
break;
}
}
return true;
}
/**
* Delete a specific file from a specific time. If the start of the file
* is after timeMillis, delete the entire file, otherwise it will have
* to be a partial delete.
* @param aBlock
* @param file
* @param timeMillis
* @return
*/
private int deleteFileFrom(PamDataBlock aBlock, File dataFile, long timeMillis) {
File indexFile = binaryStore.findIndexFile(dataFile, true);
if (indexFile == null) {
indexFile = dataFile;
}
File noiseFile = binaryStore.findNoiseFile(dataFile, true);
// get the header.
boolean headOk = false;
BinaryHeader binaryHead = new BinaryHeader();
try {
FileInputStream fis = new FileInputStream(indexFile);
DataInputStream dis = new DataInputStream(new BufferedInputStream(fis));
headOk = binaryHead.readHeader(dis);
fis.close();
}
catch (IOException e) {
headOk = false;
}
if (headOk == false || binaryHead.getDataDate() >= timeMillis) {
boolean deleteOk = deleteFileSet(dataFile);
return deleteOk ? FILE_DELETED : FILE_DELETE_ERROR;
}
/**
* Now need to see if the file is earlier than we want, in which case we return
* immediately and won't look at any more files.
*/
BinaryFooter fileEnd = binaryStoreStatusFuncs.findLastData(dataFile);
if (fileEnd == null) {
// the file has no footer and no data, so must be corrupt, so delete it.
boolean deleteOk = deleteFileSet(dataFile);
return deleteOk ? FILE_DELETED : FILE_DELETE_ERROR;
}
if (fileEnd.getDataDate() <= timeMillis) {
/*
* this file is earlier than our delete time, so we don't want to delete it
* and need to send a message saying not to delete anything else either.
*/
return FILE_TOO_EARLY;
}
/**
* If we land here, it looks like we're in the realm of needing to partially delete
* a file / set of data and noise files. What a pain ! Will need to do
* the deleting and update the index file. f** knows what to do about a
* serialized datamap.
*/
partialCopyFile(aBlock, dataFile, timeMillis);
if (indexFile != null) {
partialCopyFile(aBlock, indexFile, timeMillis);
}
if (noiseFile != null) {
partialCopyFile(aBlock, noiseFile, timeMillis);
}
return FILE_PARTIAL_DELETE;
}
private boolean partialCopyFile(PamDataBlock aBlock, File dataFile, long timeMillis) {
System.out.printf("Partial delete of file %s from %s\n", dataFile.getAbsoluteFile(), PamCalendar.formatDBDateTime(timeMillis));
try {
BinaryInputStream inputStream = new BinaryInputStream(binaryStore, aBlock);
if (inputStream.openFile(dataFile) == false) {
return false;
}
BinaryDataSource dataSource = aBlock.getBinaryDataSource();
File tempFile = new File(dataFile.getAbsolutePath() + ".tmp");
BinaryOutputStream outputStream = new BinaryOutputStream(binaryStore, aBlock);
dataSource.setBinaryStorageStream(outputStream);
BinaryObjectData binaryObjectData;
BinaryHeader bh = inputStream.readHeader();
if (bh==null) {
return false;
}
outputStream.writeHeader(bh.getDataDate(), bh.getAnalysisDate());
ModuleHeader mh = null;
BinaryFooter bf = null;
int inputFormat = bh.getHeaderFormat();
while ((binaryObjectData = inputStream.readNextObject(inputFormat)) != null) {
switch (binaryObjectData.getObjectType()) {
case BinaryTypes.FILE_FOOTER:
// this is unlikely to happen, since we'll probably already have found an index file.
bf = new BinaryFooter();
bf.readFooterData(binaryObjectData.getDataInputStream(), inputFormat);
bf.setDataDate(timeMillis);
outputStream.writeFileFooter(bf);
break;
case BinaryTypes.MODULE_HEADER:
mh = dataSource.sinkModuleHeader(binaryObjectData, bh);
outputStream.writeModuleHeader();
break;
case BinaryTypes.MODULE_FOOTER:
ModuleFooter mf = dataSource.sinkModuleFooter(binaryObjectData, bh, mh);
outputStream.writeModuleFooter();
break;
case BinaryTypes.DATAGRAM:
// dataSource.
break;
default: // should be data.
DataUnitBaseData baseData = binaryObjectData.getDataUnitBaseData();
if (baseData == null) {
continue;
}
if (baseData.getTimeMilliseconds() > timeMillis) {
continue;
}
/*
* otherwise we need to store this data unit. I think we can just copy in the
* existing binary data to the new file non ? Might mess the datagram slightly,
* but that is only in the index file and can sort itself out.
* better to make a data unit and then rewrite it I think.
*/
PamDataUnit dataUnit = dataSource.sinkData(binaryObjectData, bh, inputFormat);
if (dataUnit != null) {
dataUnit.getBasicData().mergeBaseData(binaryObjectData.getDataUnitBaseData());
binaryStore.unpackAnnotationData(bh.getHeaderFormat(), dataUnit, binaryObjectData, null);
dataSource.saveData(dataUnit);
}
}
}
outputStream.closeFile();
inputStream.closeFile();
/*
* Now file final stage - copy the temp file in place of the
* original file.
*/
boolean deletedOld = false;
try {
deletedOld = dataFile.delete();
}
catch (SecurityException e) {
System.out.println("Error deleting old pgdf file: " + dataFile.getAbsolutePath());
e.printStackTrace();
}
boolean renamedNew = false;
try {
renamedNew = tempFile.renameTo(dataFile);
}
catch (SecurityException e) {
System.out.println("Error renaming new pgdf file: " + tempFile.getAbsolutePath() +
" to " + dataFile.getAbsolutePath());
e.printStackTrace();
}
if (renamedNew == false) {
if (deletedOld == false) {
binaryStore.reportError("Unable to delete " + dataFile.getAbsolutePath());
}
return binaryStore.reportError(String.format("Unable to rename %s to %s",
tempFile.getAbsolutePath(), dataFile.getAbsolutePath()));
}
return true;
}
catch (Exception ex) {
return false;
}
}
/**
* Delete a set of files, including main data file, index file and noise file.
* @param dataFile
* @return
*/
private boolean deleteFileSet(File dataFile) {
System.out.printf("Deleting full file set for %s\n", dataFile.getAbsoluteFile());
boolean deleteOk = true;
try {
File indexFile = binaryStore.findIndexFile(dataFile, true);
File noiseFile = binaryStore.findNoiseFile(dataFile, true);
deleteOk &= dataFile.delete();
if (indexFile != null) {
deleteOk &= indexFile.delete();
}
if (noiseFile != null) {
deleteOk &= noiseFile.delete();
}
}
catch (Exception e) {
deleteOk = false;
}
System.out.printf("Deleting full file set %s for %s\n", deleteOk?"OK":"Error", dataFile.getAbsoluteFile());
return deleteOk;
}
private void deleteEmptyFolders() {
String root = binaryStore.binaryStoreSettings.getStoreLocation();
if (root == null) {
return;
}
/**
* Iterate through the root folder first and then call a
* recursive function to delete sub folders. this will stop the
* root folder from being deleted, but sub folders will get deleted if
* they have no files (of any type) in them.
*/
File rootFolder = new File(root);
File[] subFolders = rootFolder.listFiles(directoryFilter);
if (subFolders == null) {
return;
}
for (int i = 0; i < subFolders.length; i++) {
deleteEmptyFolders(subFolders[i]);
}
}
private void deleteEmptyFolders(File file) {
File[] subFolders = file.listFiles(directoryFilter);
for (int i = 0; i < subFolders.length; i++) {
deleteEmptyFolders(subFolders[i]);
}
// see if there is anything at all in this folder
File[] remaining = file.listFiles();
if (remaining.length == 0) {
try {
file.delete();
}
catch (Exception e) {
System.out.printf("Binary folder %s cannot be deleted: %s\n", file.getAbsolutePath(), e.getMessage());
}
}
}
}

View File

@ -46,7 +46,7 @@ public class BinaryStoreProcess extends PamProcess {
startTime = PamCalendar.getTimeInMillis(); startTime = PamCalendar.getTimeInMillis();
long round = binaryStore.binaryStoreSettings.fileSeconds * 1000; long round = binaryStore.binaryStoreSettings.fileSeconds * 1000;
nextFileTime = (startTime/round) * round + round; nextFileTime = (startTime/round) * round + round;
System.out.println("Next file start at " + PamCalendar.formatDateTime(nextFileTime)); // System.out.println("Next file start at " + PamCalendar.formatDateTime(nextFileTime));
timer = new Timer(); timer = new Timer();
timer.schedule(new FileTimerTask(), 1000, 1000); timer.schedule(new FileTimerTask(), 1000, 1000);

View File

@ -0,0 +1,169 @@
package binaryFileStorage;
import PamController.fileprocessing.StoreStatus;
public class BinaryStoreStatus extends StoreStatus {
private BinaryStore binaryStore;
private BinaryHeader firstHeader;
private BinaryFooter lastFooter;
private BinaryFooter lastData;
public BinaryStoreStatus(BinaryStore binaryStore) {
super(binaryStore);
this.binaryStore = binaryStore;
}
public BinaryStoreStatus(BinaryStore binaryStore, BinaryHeader firstHead, BinaryFooter lastFoot,
BinaryFooter lastData) {
super(binaryStore);
this.binaryStore = binaryStore;
this.firstHeader = firstHead;
this.lastFooter = lastFoot;
this.lastData = lastData;
}
@Override
public Long getFirstDataTime() {
if (firstHeader != null) {
return firstHeader.getDataDate();
}
return null;
}
@Override
public Long getLastDataTime() {
if (lastData != null) {
return lastData.getDataDate();
}
if (lastFooter != null) {
return lastFooter.getDataDate();
}
return null;
}
/**
* @return the firstHeader
*/
public BinaryHeader getFirstHeader() {
return firstHeader;
}
/**
* @param firstHeader the firstHeader to set
*/
public void setFirstHeader(BinaryHeader firstHeader) {
this.firstHeader = firstHeader;
if (firstHeader != null) {
setFirstDataTime(firstHeader.getDataDate());
}
else {
setFirstDataTime(null);
}
}
/**
* @return the lastFooter
*/
public BinaryFooter getLastFooter() {
return lastFooter;
}
/**
* @param lastFooter the lastFooter to set
*/
public void setLastFooter(BinaryFooter lastFooter) {
this.lastFooter = lastFooter;
}
/**
* @return the lastData
*/
public BinaryFooter getLastData() {
return lastData;
}
/**
* @param lastData the lastData to set
*/
public void setLastData(BinaryFooter lastData) {
this.lastData = lastData;
if (lastData != null) {
setLastDataTime(lastData.getDataDate());
}
else {
setLastDataTime(null);
}
}
@Override
public long getFreeSpace() {
return getFreeSpace(binaryStore.getBinaryStoreSettings().getStoreLocation());
}
/**
* Looking overall for first header, last footers, etc.
* @param blockStatus
*/
public void considerBlockStatus(BinaryStoreStatus blockStatus) {
if (blockStatus == null) {
return;
}
considerFirstHeader(blockStatus.firstHeader);
considerLastFooter(blockStatus.lastFooter);
considerLastData(blockStatus.lastData);
}
/**
* Take a footer for last data with the later date
* @param footer
*/
private void considerLastData(BinaryFooter footer) {
if (footer == null || footer.getDataDate() == 0) {
return;
}
if (lastData == null || lastData.getDataDate() == 0) {
lastData = footer;
}
if (footer.getDataDate() > lastData.getDataDate()) {
lastData = footer;
}
}
/**
* Take a footer for last footer with the later date
* @param footer
*/
private void considerLastFooter(BinaryFooter footer) {
if (footer == null || footer.getDataDate() == 0) {
return;
}
if (lastFooter == null || lastFooter.getDataDate() == 0) {
lastFooter = footer;
}
if (footer.getDataDate() > lastFooter.getDataDate()) {
lastFooter = footer;
}
}
/**
* Take a header for the first header with the earliest date.
* @param header
*/
private void considerFirstHeader(BinaryHeader header) {
if (header == null || header.getDataDate() == 0) {
return;
}
if (this.firstHeader == null || firstHeader.getDataDate() == 0) {
this.firstHeader = header;
}
if (header.getDataDate() < firstHeader.getDataDate()) {
firstHeader = header;
}
}
}

View File

@ -0,0 +1,287 @@
package binaryFileStorage;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.io.comparator.NameFileComparator;
import PamController.fileprocessing.StoreStatus;
import PamUtils.PamFileFilter;
import PamguardMVC.DataUnitBaseData;
import PamguardMVC.PamDataBlock;
/**
* Set of functions used at restarts to determine the status of the binary store.
* @author dg50
*
*/
public class BinaryStoreStatusFuncs {
private BinaryStore binaryStore;
public BinaryStoreStatusFuncs(BinaryStore binaryStore) {
this.binaryStore = binaryStore;
}
public StoreStatus getStoreStatus(boolean getDetail) {
BinaryStoreStatus binStoreStatus = new BinaryStoreStatus(binaryStore);
binStoreStatus.setStoreStatus(checkStoreStatus());
if (getDetail && binStoreStatus.getStoreStatus() == StoreStatus.STATUS_HASDATA) {
binStoreStatus = getStoreDetail(binStoreStatus);
}
return binStoreStatus;
}
private BinaryStoreStatus getStoreDetail(BinaryStoreStatus binStoreStatus) {
// go through every stream and find it's first and last data times.
long lastTime = Long.MIN_VALUE;
long firstTime = Long.MAX_VALUE;
ArrayList<PamDataBlock> streams = BinaryStore.getStreamingDataBlocks(true);
for (PamDataBlock aBlock : streams) {
BinaryDataSource dataSource = aBlock.getBinaryDataSource();
if (dataSource == null) {
continue;
}
BinaryStoreStatus blockStatus = getStreamStartEnd(dataSource);
if (blockStatus == null) {
continue;
}
binStoreStatus.considerBlockStatus(blockStatus);
}
return binStoreStatus;
}
private BinaryStoreStatus getStreamStartEnd(BinaryDataSource dataSource) {
String filePrefix = dataSource.createFilenamePrefix();
List<File> binFiles = binaryStore.listAllFilesWithPrefix(filePrefix);
if (binFiles == null || binFiles.isEmpty()) {
return null;
}
Collections.sort(binFiles, NameFileComparator.NAME_COMPARATOR);
BinaryHeader firstHead = findFirstHeader(binFiles);
BinaryFooter lastFoot = findLastFooter(binFiles);
BinaryFooter lastData = findLastData(binFiles);
BinaryStoreStatus storeStatus = new BinaryStoreStatus(binaryStore, firstHead, lastFoot, lastData);
return storeStatus;
}
/**
* Get the last footer. This may be in the last file, but may not be if things
* crashed and the last file didn't get completed, i nwhich case it will be in
* the file before.
* @param binFiles
* @return
*/
private BinaryFooter findLastFooter(List<File> binFiles) {
for (int i = binFiles.size()-1; i>=0; i--) {
File aFile = binFiles.get(i);
/*
* if the last file was completed correctly, it will have an index file. If there isn't
* an index file it's very unlikely there will be a footer in the main file
*/
File indexFile = binaryStore.findIndexFile(aFile, true);
if (indexFile == null) {
continue;
}
BinaryHeaderAndFooter headAndFoot = binaryStore.readHeaderAndFooter(indexFile);
if (headAndFoot != null && headAndFoot.binaryFooter != null) {
return headAndFoot.binaryFooter;
}
}
return null;
}
/**
* Get the last time of any data, whether it's from a header, footer, or actual data.
* @param binFiles
* @return
*/
private BinaryFooter findLastData(List<File> binFiles) {
for (int i = binFiles.size()-1; i>=0; i--) {
File aFile = binFiles.get(i);
BinaryFooter bf = findLastData(aFile);
if (bf != null) {
return bf;
}
}
return null;
}
/**
* Get the last data in a file. Hopefully this comes
* from the footer, but it might have to look at all data if
* the footer is absent or the index file missing.
* @param aFile
* @return
*/
public BinaryFooter findLastData(File aFile) {
Long lastUID = null;
Long lastTime = null;
Long firstUID = null;
File indexFile = binaryStore.findIndexFile(aFile, true);
if (indexFile != null) {
BinaryHeaderAndFooter headAndFoot = binaryStore.readHeaderAndFooter(indexFile);
if (headAndFoot != null && headAndFoot.binaryFooter != null) {
return headAndFoot.binaryFooter;
}
}
/*
* otherwise it would seem that we've a file without a valid end, so unpack it and
* get the UID and time of the last item in the file. Can return these in the form of
* a BinaryFooter since it's pretty much the same information needed.
*/
BinaryInputStream inputStream = new BinaryInputStream(binaryStore, null);
try {
// need to work through the file now.
if (inputStream.openFile(aFile) == false) {
return null;
};
BinaryObjectData binaryObjectData;
BinaryHeader bh = inputStream.readHeader();
if (bh==null) {
inputStream.closeFile();
return null;
}
int inputFormat = bh.getHeaderFormat();
while ((binaryObjectData = inputStream.readNextObject(inputFormat)) != null) {
if (binaryObjectData.getTimeMilliseconds() != 0) {
lastTime = binaryObjectData.getTimeMilliseconds();
}
BinaryFooter bf;
switch (binaryObjectData.getObjectType()) {
case BinaryTypes.FILE_FOOTER:
// this is unlikely to happen, since we'll probably already have found an index file.
bf = new BinaryFooter();
if (bf.readFooterData(binaryObjectData.getDataInputStream(), inputFormat)) {
if (bf.getDataDate() != 0) {
inputStream.closeFile();
return bf;
}
}
break;
case BinaryTypes.MODULE_HEADER:
break;
case BinaryTypes.MODULE_FOOTER:
break;
case BinaryTypes.DATAGRAM:
break;
default: // should be data.
DataUnitBaseData baseData = binaryObjectData.getDataUnitBaseData();
if (baseData != null) {
if (baseData.getTimeMilliseconds() != 0) {
lastTime = baseData.getTimeMilliseconds();
}
if (baseData.getUID() != 0) {
lastUID = baseData.getUID();
if (firstUID == null) {
firstUID = lastUID;
}
}
}
}
}
}
catch (Exception e) {
System.out.printf("Corrupt data file %s: %s\n", aFile, e.getMessage());
// return null;
}
try {
if (inputStream != null) {
inputStream.closeFile();
}
}
catch (Exception e) {
}
if (lastTime != null && lastUID != null) {
BinaryFooter bf = new BinaryFooter();
bf.setHighestUID(lastUID);
bf.setLowestUID(firstUID);
bf.setDataDate(lastTime);
bf.setFileEndReason(BinaryFooter.END_CRASHED);
return bf;
}
else {
return null;
}
}
/**
* Get the first header. This can be read from a data file whether or not there was a
* valid index file created.
* @param binFiles
* @return
*/
private BinaryHeader findFirstHeader(List<File> binFiles) {
BinaryHeader binaryHead = new BinaryHeader();
DataInputStream dis = null;
for (File aFile : binFiles) {
try {
dis = new DataInputStream(new BufferedInputStream(new FileInputStream(aFile)));
}
catch (IOException e) {
binaryHead = null;
continue;
}
try {
dis.close();
}
catch (IOException e) {
}
}
return binaryHead;
}
/**
* first simple status check to see if there are any files there at all.
*/
private int checkStoreStatus() {
String currDir = binaryStore.binaryStoreSettings.getStoreLocation();
if (currDir == null) {
return StoreStatus.STATUS_MISSING;
}
File currfolder = new File(currDir);
if (currfolder.exists() == false) {
return StoreStatus.STATUS_MISSING;
}
// look for files in the folder.
boolean hasFiles = hasAnyFiles(currfolder);
if (hasFiles) {
return StoreStatus.STATUS_HASDATA;
}
else {
return StoreStatus.STATUS_EMPTY;
}
}
private boolean hasAnyFiles(File currFolder) {
PamFileFilter filefilter = new PamFileFilter("data files", ".pgdf");
File[] list = currFolder.listFiles(filefilter);
if (list == null) {
return false;
}
for (int i = 0; i < list.length; i++) {
if (list[i].isDirectory()) {
if (hasAnyFiles(list[i])) {
return true;
}
}
if (list[i].getAbsolutePath().endsWith(".pgdf")) {
return true;
}
}
return false;
}
}

View File

@ -1086,6 +1086,9 @@ public class ClickControl extends PamControlledUnit implements PamSettings {
} }
public ClickDisplayManager getDisplayManager(){ public ClickDisplayManager getDisplayManager(){
if (tabPanelControl == null) {
return null;
}
return tabPanelControl.clickDisplayManager; return tabPanelControl.clickDisplayManager;
} }

View File

@ -1809,7 +1809,7 @@ public class ClickDetector extends PamProcess {
newClick.setStartSample(newClick.getStartSample() - firstFilterDelay - secondFilterDelay); newClick.setStartSample(newClick.getStartSample() - firstFilterDelay - secondFilterDelay);
waveDataError = false; waveDataError = false;
} catch (RawDataUnavailableException e) { } catch (RawDataUnavailableException e) {
System.out.println("RawDataUnavailableException"); System.out.println(" Click Detector RawDataUnavailableException");
System.out.println(e.getMessage()); System.out.println(e.getMessage());
} }
for (int k = 0; k < nChannels; k++) { for (int k = 0; k < nChannels; k++) {

View File

@ -291,7 +291,7 @@ public class ClipProcess extends SpectrogramMarkProcess {
try { try {
rawData = rawDataBlock.getSamples(startSample, numSamples, channelMap); rawData = rawDataBlock.getSamples(startSample, numSamples, channelMap);
} catch (RawDataUnavailableException e) { } catch (RawDataUnavailableException e) {
System.out.println(e.getMessage()); System.out.println("RawDataUnavailableException in ClipProcess.spectrogramNotification :" + e.getMessage());
return false; return false;
} }
if (rawData == null) { if (rawData == null) {

View File

@ -19,6 +19,7 @@ import PamController.PamControlledUnitSettings;
import PamController.PamController; import PamController.PamController;
import PamController.PamSettingManager; import PamController.PamSettingManager;
import PamController.PamSettings; import PamController.PamSettings;
import PamController.fileprocessing.StoreStatus;
import PamView.PamDetectionOverlayGraphics; import PamView.PamDetectionOverlayGraphics;
import PamView.PamSymbol; import PamView.PamSymbol;
import PamguardMVC.PamDataBlock; import PamguardMVC.PamDataBlock;

View File

@ -10,6 +10,7 @@ import java.util.List;
import com.opencsv.CSVReader; import com.opencsv.CSVReader;
import com.opencsv.exceptions.CsvException; import com.opencsv.exceptions.CsvException;
import PamController.fileprocessing.StoreStatus;
import d3.calibration.CalFileReader; import d3.calibration.CalFileReader;
import d3.calibration.CalibrationInfo; import d3.calibration.CalibrationInfo;
import d3.calibration.CalibrationSet; import d3.calibration.CalibrationSet;
@ -487,4 +488,5 @@ public class D3Control extends OfflineFileControl {
public D3DataPlotProvider getD3DataPlotProvider() { public D3DataPlotProvider getD3DataPlotProvider() {
return d3DataPlotProvider; return d3DataPlotProvider;
} }
} }

View File

@ -199,7 +199,7 @@ public class DbHtDialog extends PamDialog {
params.calculateFilterThings(currentSampleRate); params.calculateFilterThings(currentSampleRate);
} }
catch (DbHtException e) { catch (DbHtException e) {
System.out.println(e.getMessage()); System.out.println("Error in DbHtDialog.updateEverything: " + e.getMessage());
return; return;
} }
double[] f = params.getFilterFrequencies(currentSampleRate); double[] f = params.getFilterFrequencies(currentSampleRate);

View File

@ -45,6 +45,7 @@ import PamController.PamController;
import PamController.PamControllerInterface; import PamController.PamControllerInterface;
import PamController.PamSettingManager; import PamController.PamSettingManager;
import PamController.PamSettings; import PamController.PamSettings;
import PamController.fileprocessing.StoreStatus;
import PamguardMVC.PamDataBlock; import PamguardMVC.PamDataBlock;
import PamguardMVC.PamDataUnit; import PamguardMVC.PamDataUnit;
import PamguardMVC.PamProcess; import PamguardMVC.PamProcess;

View File

@ -1110,7 +1110,7 @@ public class DifarProcess extends PamProcess {
rawData[0] = rawDataAll[0]; // is fine since getSamples was fed a channel map. rawData[0] = rawDataAll[0]; // is fine since getSamples was fed a channel map.
} }
} catch (RawDataUnavailableException e) { } catch (RawDataUnavailableException e) {
System.out.println(e.getMessage()); System.out.println("Error in DifarProcess.difarTrigger" + e.getMessage());
return; return;
} }
if (rawData[0] == null) { if (rawData[0] == null) {

View File

@ -17,6 +17,7 @@ import PamController.PamControlledUnitSettings;
import PamController.PamController; import PamController.PamController;
import PamController.PamSettingManager; import PamController.PamSettingManager;
import PamController.PamSettings; import PamController.PamSettings;
import PamController.fileprocessing.StoreStatus;
import PamUtils.PamUtils; import PamUtils.PamUtils;
import PamguardMVC.PamDataBlock; import PamguardMVC.PamDataBlock;
import PamguardMVC.PamProcess; import PamguardMVC.PamProcess;
@ -197,5 +198,6 @@ public class BeamformControl extends PamControlledUnit implements PamSettings, O
// TODO Auto-generated method stub // TODO Auto-generated method stub
return beamformProcess; return beamformProcess;
} }
} }

View File

@ -98,7 +98,7 @@ public class NativeDemux extends GreenridgeDemux {
return true; return true;
} }
catch (UnsatisfiedLinkError e) { catch (UnsatisfiedLinkError e) {
System.out.println(e.getMessage()); System.out.println("Error in NativeDemux.loadLibrary" + e.getMessage());
return false; return false;
} }
} }

View File

@ -412,8 +412,9 @@ PamSettingsSource {
} }
if (dbParameters.getUseAutoCommit() == false) { // if (dbParameters.getUseAutoCommit() == false) {
JMenuItem commitItem = new JMenuItem("Commit Changes"); JMenuItem commitItem = new JMenuItem("Commit Changes");
commitItem.setEnabled(dbParameters.getUseAutoCommit() == false);
commitItem.setToolTipText("Immediately commit recent changes to the database"); commitItem.setToolTipText("Immediately commit recent changes to the database");
commitItem.addActionListener(new ActionListener() { commitItem.addActionListener(new ActionListener() {
@Override @Override
@ -422,7 +423,7 @@ PamSettingsSource {
} }
}); });
menu.add(commitItem); menu.add(commitItem);
} // }
if (SMRUEnable.isEnable()) { if (SMRUEnable.isEnable()) {
JMenuItem speedMenu = new JMenuItem("Test database speed"); JMenuItem speedMenu = new JMenuItem("Test database speed");

View File

@ -18,12 +18,14 @@ import generalDatabase.backup.DatabaseBackupStream;
import pamScrollSystem.ViewLoadObserver; import pamScrollSystem.ViewLoadObserver;
import pamViewFX.pamTask.PamTaskUpdate; import pamViewFX.pamTask.PamTaskUpdate;
import PamController.AWTScheduler; import PamController.AWTScheduler;
import PamController.DataOutputStore;
import PamController.OfflineDataStore; import PamController.OfflineDataStore;
import PamController.PamControlledUnit; import PamController.PamControlledUnit;
import PamController.PamController; import PamController.PamController;
import PamController.PamControllerInterface; import PamController.PamControllerInterface;
import PamController.PamGUIManager; import PamController.PamGUIManager;
import PamController.PamSettingManager; import PamController.PamSettingManager;
import PamController.fileprocessing.StoreStatus;
import PamController.status.ModuleStatus; import PamController.status.ModuleStatus;
import PamController.status.QuickRemedialAction; import PamController.status.QuickRemedialAction;
import PamguardMVC.PamDataBlock; import PamguardMVC.PamDataBlock;
@ -39,7 +41,7 @@ import backupmanager.BackupInformation;
* @see DBControl * @see DBControl
* *
*/ */
public class DBControlUnit extends DBControl implements OfflineDataStore { public class DBControlUnit extends DBControl implements DataOutputStore {
@ -492,5 +494,15 @@ public class DBControlUnit extends DBControl implements OfflineDataStore {
return backupInformation; return backupInformation;
} }
@Override
public StoreStatus getStoreStatus(boolean getDetail) {
return getDbProcess().getStoreStatus(this, getDetail);
}
@Override
public boolean deleteDataFrom(long timeMillis) {
return getDbProcess().deleteDataFrom(timeMillis);
}
} }

View File

@ -1,6 +1,9 @@
package generalDatabase; package generalDatabase;
import generalDatabase.ColumnMetaData.METACOLNAMES; import generalDatabase.ColumnMetaData.METACOLNAMES;
import generalDatabase.clauses.FixedClause;
import generalDatabase.clauses.FromClause;
import generalDatabase.clauses.PAMSelectClause;
import generalDatabase.pamCursor.PamCursor; import generalDatabase.pamCursor.PamCursor;
import generalDatabase.ucanAccess.UCanAccessSystem; import generalDatabase.ucanAccess.UCanAccessSystem;
@ -14,6 +17,7 @@ import java.io.InputStreamReader;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.ResultSetMetaData; import java.sql.ResultSetMetaData;
import java.sql.SQLException; import java.sql.SQLException;
@ -21,6 +25,7 @@ import java.sql.SQLWarning;
import java.sql.Statement; import java.sql.Statement;
import java.sql.Types; import java.sql.Types;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
import javax.swing.JFrame; import javax.swing.JFrame;
@ -39,6 +44,7 @@ import loggerForms.formdesign.FormEditor;
import PamController.PamControlledUnit; import PamController.PamControlledUnit;
import PamController.PamController; import PamController.PamController;
import PamController.PamFolders; import PamController.PamFolders;
import PamController.fileprocessing.StoreStatus;
import PamUtils.PamCalendar; import PamUtils.PamCalendar;
import PamUtils.PamFileChooser; import PamUtils.PamFileChooser;
import PamView.dialog.warn.WarnOnce; import PamView.dialog.warn.WarnOnce;
@ -1435,4 +1441,141 @@ public class DBProcess extends PamProcess {
} }
} }
/**
* Get the store status for use with pre-process checks.
* @param getDetail get full details of start and end times.
* @return database store status.
*/
public StoreStatus getStoreStatus(DBControlUnit dbControlUnit, boolean getDetail) {
DatabaseStoreStatus dbStoreStatus = new DatabaseStoreStatus(dbControlUnit);
// and work out if any tables have anything in them already ...
int status = 0;
if (dbControlUnit.getConnection() == null) {
status = StoreStatus.STATUS_MISSING;
}
else {
boolean anyData = hasAnyOutputData();
if (anyData) {
status = StoreStatus.STATUS_HASDATA;
}
else {
status = StoreStatus.STATUS_EMPTY;
}
}
if (status == StoreStatus.STATUS_HASDATA && getDetail) {
getStoreLimits(dbStoreStatus);
}
dbStoreStatus.setStoreStatus(status);
return dbStoreStatus;
}
private void getStoreLimits(DatabaseStoreStatus dbStoreStatus) {
ArrayList<PamDataBlock> allDataBlocks = PamController.getInstance().getDataBlocks();
PamTableDefinition tableDefinition;
SQLLogging logging;
// for each datablock, check that the process can log (ignoring GPS process)
for (int i = 0; i < allDataBlocks.size(); i++) {
PamDataBlock aBlock = allDataBlocks.get(i);
logging = aBlock.getLogging();
if (logging == null) {
continue;
}
if (aBlock.getMixedDirection() != PamDataBlock.MIX_INTODATABASE) {
continue; // don't want things like GPS data.
}
getStoreLimits(aBlock, dbStoreStatus);
}
}
/**
* Get first and last records for a table.
* @param aBlock
* @param dbStoreStatus
*/
private void getStoreLimits(PamDataBlock aBlock, DatabaseStoreStatus dbStoreStatus) {
// TODO Auto-generated method stub
SQLLogging logging = aBlock.getLogging();
PamConnection con = databaseControll.getConnection();
SQLTypes sqlTypes = con.getSqlTypes();
String q1 = String.format("SELECT MIN(UTC) FROM %s",sqlTypes.formatTableName(logging.getTableDefinition().getTableName()));
Long t = getUTC(con, q1);
dbStoreStatus.testFirstDataTime(t);
String q2 = String.format("SELECT MAX(UTC) FROM %s",sqlTypes.formatTableName(logging.getTableDefinition().getTableName()));
Long t2 = getUTC(con, q2);
dbStoreStatus.testLastDataTime(t2);
}
private Long getUTC(PamConnection con, String qStr) {
Object utcObject = null;
try {
PreparedStatement stmt = con.getConnection().prepareStatement(qStr);
ResultSet result = stmt.executeQuery();
if (result.next()) {
utcObject = result.getObject(1);
}
result.close();
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
if (utcObject == null) {
return null;
}
Long millis = SQLTypes.millisFromTimeStamp(utcObject);
return millis;
}
/**
* Is there any data in any output tables ?
* @return
*/
private boolean hasAnyOutputData() {
ArrayList<PamDataBlock> allDataBlocks = PamController.getInstance().getDataBlocks();
PamTableDefinition tableDefinition;
SQLLogging logging;
// for each datablock, check that the process can log (ignoring GPS process)
for (int i = 0; i < allDataBlocks.size(); i++) {
PamDataBlock aBlock = allDataBlocks.get(i);
logging = aBlock.getLogging();
if (logging == null) {
continue;
}
if (aBlock.getMixedDirection() != PamDataBlock.MIX_INTODATABASE) {
continue; // don't want things like GPS data.
}
// get a record count.
Integer count = logging.countTableItems(null);
if (count != null && count > 0) {
return true;
}
}
return false;
}
public boolean deleteDataFrom(long timeMillis) {
ArrayList<PamDataBlock> allDataBlocks = PamController.getInstance().getDataBlocks();
PamTableDefinition tableDefinition;
SQLLogging logging;
// for each datablock, check that the process can log (ignoring GPS process)
boolean ok = true;
for (int i = 0; i < allDataBlocks.size(); i++) {
PamDataBlock aBlock = allDataBlocks.get(i);
logging = aBlock.getLogging();
if (logging == null) {
continue;
}
PAMSelectClause clause = new FromClause(timeMillis);
ok &= logging.deleteData(clause);
}
return ok;
}
} }

View File

@ -190,7 +190,7 @@ public class DBSpeedTest {
dropStmt.execute(); dropStmt.execute();
} catch (SQLException e) { } catch (SQLException e) {
// e.printStackTrace(); // e.printStackTrace();
System.out.println(e.getMessage()); System.out.println("Error in DBSpeedTest testSpeed2:" + e.getMessage());
} }
} }
try { try {

View File

@ -0,0 +1,43 @@
package generalDatabase;
import PamController.fileprocessing.StoreStatus;
public class DatabaseStoreStatus extends StoreStatus {
private DBControlUnit dbControl;
public DatabaseStoreStatus(DBControlUnit dbControl) {
super(dbControl);
this.dbControl = dbControl;
}
@Override
public long getFreeSpace() {
String name = dbControl.getDatabaseName(); // may not have the path, which is what we need.
return getFreeSpace(name); // this may not work, particularly for server based systems.
}
public void testFirstDataTime(Long t) {
if (t == null) {
return;
}
if (getFirstDataTime() == null) {
setFirstDataTime(t);
}
if (t < getFirstDataTime()) {
setFirstDataTime(t);
}
}
public void testLastDataTime(Long t) {
if (t == null) {
return;
}
if (getLastDataTime() == null) {
setLastDataTime(t);
}
if (t > getLastDataTime()) {
setLastDataTime(t);
}
}
}

View File

@ -13,7 +13,7 @@ import PamUtils.PamCalendar;
* tables. Also used to prepare Sql statements for writing and * tables. Also used to prepare Sql statements for writing and
* reading back data. * reading back data.
* *
* I did a bit of redifining what columns are used for on 4 Oct, 2012. * I did a bit of redefining what columns are used for on 4 Oct, 2012.
* PCLocalTime was a UTC time from the PC of the time analysis took place. * PCLocalTime was a UTC time from the PC of the time analysis took place.
* When running in real time, this would be the same as the data in the UTC column * When running in real time, this would be the same as the data in the UTC column
* (give or take the odd second for data to get through the system). I've now defined * (give or take the odd second for data to get through the system). I've now defined

View File

@ -225,7 +225,10 @@ public class PamTableItem implements Cloneable {
// } // }
public String getDeblankedStringValue() { public String getDeblankedStringValue() {
if (sqlType != Types.CHAR || value == null) { // if (sqlType != Types.CHAR || value == null) {
// return null;
// }
if (value instanceof String == false) {
return null; return null;
} }
return ((String) value).trim(); return ((String) value).trim();
@ -485,6 +488,15 @@ public class PamTableItem implements Cloneable {
if (value == null) { if (value == null) {
return Float.NaN; return Float.NaN;
} }
if (value instanceof String) {
try {
double val = Double.valueOf((String) value);
return (float) val;
}
catch (NumberFormatException ex) {
return Float.NaN;
}
}
if (value.getClass() == Double.class) { if (value.getClass() == Double.class) {
double dVal = (Double) value; double dVal = (Double) value;
return (float) dVal; return (float) dVal;

View File

@ -635,11 +635,20 @@ public abstract class SQLLogging {
if (pamConn == null) { if (pamConn == null) {
return null; return null;
} }
SQLTypes sqlTypes = pamConn.getSqlTypes(); SQLTypes sqlTypes = pamConn.getSqlTypes();
//the clause contains 'WHERE' so it's possible to make a null one. //the clause contains 'WHERE' so it's possible to make a null one.
String qStr = String.format("SELECT COUNT(%s.Id) FROM %s %s", String qStr;
if (pamViewParameters == null) {
qStr = String.format("SELECT COUNT(Id) FROM %s",
pamTableDefinition.getTableName());
}
else {
qStr = String.format("SELECT COUNT(%s.Id) FROM %s %s",
pamTableDefinition.getTableName(),
pamTableDefinition.getTableName(), pamTableDefinition.getTableName(),
pamViewParameters.getSelectClause(sqlTypes)); pamViewParameters.getSelectClause(sqlTypes));
}
int count = 0; int count = 0;
try { try {
PreparedStatement stmt = pamConn.getConnection().prepareStatement(qStr); PreparedStatement stmt = pamConn.getConnection().prepareStatement(qStr);

View File

@ -103,7 +103,10 @@ public class SqliteSystem extends DBSystem implements PamSettings {
if (commandName == null) { if (commandName == null) {
return; return;
} }
setDatabaseName(commandName); File commandFile = new File(commandName);
// check the file end is of the right type. Some batch systems may not get this right.
commandFile = PamFileFilter.checkFileEnd(commandFile, "sqlite3", true);
setDatabaseName(commandFile.getAbsolutePath());
} }
/** /**
@ -276,7 +279,9 @@ public class SqliteSystem extends DBSystem implements PamSettings {
{ {
if(connection != null){ if(connection != null){
// if (USEAUTOCOMMIT == false) { // if (USEAUTOCOMMIT == false) {
if (connection.getConnection().getAutoCommit()) {
connection.getConnection().commit(); connection.getConnection().commit();
}
// } // }
connection.getConnection().close(); connection.getConnection().close();
} }
@ -303,6 +308,30 @@ public class SqliteSystem extends DBSystem implements PamSettings {
return true; return true;
} }
@Override
public boolean checkDatabaseExists(String dbName) {
String commandName = GlobalArguments.getParam(DBControl.GlobalDatabaseNameArg);
if (commandName != null) {
return checkCommandLineDatabase();
}
return super.checkDatabaseExists(dbName);
}
private boolean checkCommandLineDatabase() {
String commandName = GlobalArguments.getParam(DBControl.GlobalDatabaseNameArg);
if (commandName == null) {
return false;
}
File dbFile = new File(commandName);
dbFile = PamFileFilter.checkFileEnd(dbFile, ".sqlite3", true);
commandName = dbFile.getAbsolutePath();
if (dbFile.exists() == false) {
// create a new database without asking.
createNewDatabase(commandName);
}
return dbFile.exists();
}
@Override @Override
public String getDatabaseName() { public String getDatabaseName() {
/* /*
@ -311,6 +340,9 @@ public class SqliteSystem extends DBSystem implements PamSettings {
*/ */
String commandName = GlobalArguments.getParam(DBControl.GlobalDatabaseNameArg); String commandName = GlobalArguments.getParam(DBControl.GlobalDatabaseNameArg);
if (commandName != null) { if (commandName != null) {
File dbFile = new File(commandName);
dbFile = PamFileFilter.checkFileEnd(dbFile, ".sqlite3", true);
commandName = dbFile.getAbsolutePath();
return commandName; return commandName;
} }

View File

@ -261,7 +261,13 @@ public class ContourFinder {
* Note that binData is padded, whiteData isn't. * Note that binData is padded, whiteData isn't.
*/ */
GPLContour newContour = new GPLContour(iT-1, iF-1+gplProcess.binLo, whiteData[iT-1][iF-1], energyData[iT-1][iF-1]); GPLContour newContour = new GPLContour(iT-1, iF-1+gplProcess.binLo, whiteData[iT-1][iF-1], energyData[iT-1][iF-1]);
try {
findAdjacentPoints(newContour, iT, iF, binData, whiteData, energyData, con); findAdjacentPoints(newContour, iT, iF, binData, whiteData, energyData, con);
}
catch (StackOverflowError e) {
System.out.println("Stack overflow in GPLContour.findRegion for bloated contour size " + newContour.getArea());
System.out.println("The contour is incomplete, but has not been discarded");
}
return newContour; return newContour;
} }
@ -282,6 +288,10 @@ public class ContourFinder {
* Separate loops to get above and to sides, NOT diagonal matches. * Separate loops to get above and to sides, NOT diagonal matches.
* could also easily change to connect 8 instead of connect 4. * could also easily change to connect 8 instead of connect 4.
*/ */
if (newContour.getArea() >= 500) {
System.out.println("GPL Contour size exceeds maximum value of 500 points so ceasing to grow it");
return;
}
binData[currT][currF] = 0; // set current point to 0 so it doesn't get found again binData[currT][currF] = 0; // set current point to 0 so it doesn't get found again
int nX = binData.length-1; int nX = binData.length-1;
int nY = binData[0].length-1; int nY = binData[0].length-1;

View File

@ -217,7 +217,7 @@ public class HyperbolicLocaliser extends TOADBaseAlgorithm {
// answer2 = rightMatrix.times(leftInverse.transpose()); // answer2 = rightMatrix.times(leftInverse.transpose());
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Error in HyperbolicLocaliser.processTOADsPlane: " + e.getMessage());
// Matrix m = leftMatrix.transpose(); // Matrix m = leftMatrix.transpose();
// m = m.inverse(); // m = m.inverse();
return null; return null;
@ -254,7 +254,7 @@ public class HyperbolicLocaliser extends TOADBaseAlgorithm {
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Error2 in HyperbolicLocaliser.processTOADsPlane: " + e.getMessage());
} }
// now need to rotate back from the plane that we're in to get back to the original position. // now need to rotate back from the plane that we're in to get back to the original position.
@ -736,7 +736,7 @@ public class HyperbolicLocaliser extends TOADBaseAlgorithm {
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Error in HyperbolicLocaliser.processTOADs3D: " + e.getMessage());
} }
LatLong pos = geometry.getReferenceGPS().addDistanceMeters(centre.getCoordinate(0)+answer.get(0,0), LatLong pos = geometry.getReferenceGPS().addDistanceMeters(centre.getCoordinate(0)+answer.get(0,0),

View File

@ -146,7 +146,7 @@ public class ToadSimplexLocaliser extends TOADBaseAlgorithm {
try { try {
result = optimiser.optimize(chiFunc, goal, start); result = optimiser.optimize(chiFunc, goal, start);
} catch (OptimizationException | FunctionEvaluationException | IllegalArgumentException e) { } catch (OptimizationException | FunctionEvaluationException | IllegalArgumentException e) {
System.out.println(e.getMessage()); System.out.println("Error in TOADSimplexLocaliser.processTOADs: " + e.getMessage());
nFails++; nFails++;
System.out.printf("%d fails out of %d = %3.2f%%\n", nFails, nCalls, (double) nFails * 100. / nCalls); System.out.printf("%d fails out of %d = %3.2f%%\n", nFails, nCalls, (double) nFails * 100. / nCalls);
resultChiData[iStart] = null; resultChiData[iStart] = null;

View File

@ -129,7 +129,7 @@ public class EmulatorStream {
try { try {
emSocket.getOutputStream().write(data); emSocket.getOutputStream().write(data);
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("Error in EmulatorStream.sendPamCommand: " + e.getMessage());
} }
} }
private boolean openSocket() { private boolean openSocket() {
@ -137,9 +137,9 @@ public class EmulatorStream {
try { try {
emSocket = new Socket(sktParams.ipAddress, sktParams.portNumber); emSocket = new Socket(sktParams.ipAddress, sktParams.portNumber);
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
System.out.println(e.getMessage()); System.out.println("UnknownHostException in EmulatorStream.sendPamCommand: " + e.getMessage());
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("IOException in EmulatorStream.sendPamCommand: " + e.getMessage());
} }
if (emSocket != null) { if (emSocket != null) {
status.socketStatus = emSocket.isConnected(); status.socketStatus = emSocket.isConnected();

View File

@ -458,7 +458,7 @@ public class NetworkReceiver extends PamControlledUnit implements PamSettings, N
// checkExistingThreads(clientSocket, rxThread); // checkExistingThreads(clientSocket, rxThread);
} }
} catch (IOException e) { } catch (IOException e) {
System.out.println(e.getMessage()); System.out.println("IOException in NeetworkReceiver" + e.getMessage());
} }
} }

View File

@ -75,7 +75,10 @@ public class NetworkObjectPacker {
BinaryDataSource binarySource = dataBlock.getBinaryDataSource(); BinaryDataSource binarySource = dataBlock.getBinaryDataSource();
int dataType2 = dataBlock.getQuickId(); int dataType2 = dataBlock.getQuickId();
BinaryObjectData packedObject = binarySource.getPackedData(dataUnit); BinaryObjectData packedObject = null;
synchronized (BinaryDataSource.packSynchObject) {
packedObject = binarySource.getPackedData(dataUnit);
}
byte[] data = packedObject.getData(); byte[] data = packedObject.getData();
int duDataLength = data.length + 12; int duDataLength = data.length + 12;
DataUnitBaseData baseData = dataUnit.getBasicData(); DataUnitBaseData baseData = dataUnit.getBasicData();

View File

@ -23,10 +23,12 @@ import javax.swing.SwingWorker;
import networkTransfer.emulator.NetworkEmulator; import networkTransfer.emulator.NetworkEmulator;
import networkTransfer.receive.NetworkReceiver; import networkTransfer.receive.NetworkReceiver;
import pamguard.GlobalArguments;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import Acquisition.FolderInputSystem;
import PamController.PamControlledUnit; import PamController.PamControlledUnit;
import PamController.PamControlledUnitSettings; import PamController.PamControlledUnitSettings;
import PamController.PamController; import PamController.PamController;
@ -45,6 +47,11 @@ import PamguardMVC.PamDataBlock;
*/ */
public class NetworkSender extends PamControlledUnit implements PamSettings { public class NetworkSender extends PamControlledUnit implements PamSettings {
public static final String ADDRESS = "-netSend.address";
public static final String PORT = "-netSend.port";
public static final String ID1 = "-netSend.id1";
public static final String ID2 = "-netSend.id2";
protected NetworkSendParams networkSendParams = new NetworkSendParams(); protected NetworkSendParams networkSendParams = new NetworkSendParams();
private NetworkEmulator networkEmulator; private NetworkEmulator networkEmulator;
private boolean initialisationComplete = false; private boolean initialisationComplete = false;
@ -169,6 +176,28 @@ public class NetworkSender extends PamControlledUnit implements PamSettings {
public boolean restoreSettings( public boolean restoreSettings(
PamControlledUnitSettings pamControlledUnitSettings) { PamControlledUnitSettings pamControlledUnitSettings) {
networkSendParams = ((NetworkSendParams) pamControlledUnitSettings.getSettings()).clone(); networkSendParams = ((NetworkSendParams) pamControlledUnitSettings.getSettings()).clone();
String address = GlobalArguments.getParam(ADDRESS);
String portString = GlobalArguments.getParam(PORT);
String id1String = GlobalArguments.getParam(ID1);
String id2String = GlobalArguments.getParam(ID2);
if (address != null) {
networkSendParams.ipAddress = address; // remember it.
}
if(portString != null) {
networkSendParams.portNumber = Integer.valueOf(portString);
}
if(id1String!=null) {
networkSendParams.stationId1 = Integer.valueOf(id1String);
}
if(id2String!=null) {
networkSendParams.stationId1 = Integer.valueOf(id2String);
}
return (networkSendParams != null); return (networkSendParams != null);
} }
@ -452,7 +481,7 @@ public class NetworkSender extends PamControlledUnit implements PamSettings {
return true; return true;
} catch (IOException e) { } catch (IOException e) {
// e.printStackTrace(); // e.printStackTrace();
System.out.println(e.getMessage()); System.out.println("IOException in NeetworkSender.writeByteData: " + e.getMessage());
currStatus = "Socket Closed"; currStatus = "Socket Closed";
return false; return false;
} }
@ -465,7 +494,7 @@ public class NetworkSender extends PamControlledUnit implements PamSettings {
return true; return true;
} catch (IOException e) { } catch (IOException e) {
// e.printStackTrace(); // e.printStackTrace();
System.out.println(e.getMessage()); System.out.println("IOException in NeetworkSender.writeStringData" + e.getMessage());
currStatus = "Socket Closed"; currStatus = "Socket Closed";
return false; return false;
} }
@ -513,7 +542,7 @@ public class NetworkSender extends PamControlledUnit implements PamSettings {
tcpWriter.close(); tcpWriter.close();
} catch (IOException e) { } catch (IOException e) {
// e.printStackTrace(); // e.printStackTrace();
System.out.println(e.getMessage()); System.out.println("IOException in NeetworkSender.closeconnection" + e.getMessage());
} }
tcpSocket = null; tcpSocket = null;
tcpWriter = null; tcpWriter = null;

View File

@ -127,7 +127,8 @@ public class NIFilePlayback implements FilePlaybackDevice, PamSettings {
@Override @Override
public boolean preparePlayback(PlaybackParameters playbackParameters) { public boolean preparePlayback(PlaybackParameters playbackParameters) {
if (niDeviceLUT == null || niDeviceLUT.length <= playbackParameters.deviceNumber) { if (niDeviceLUT == null || niDeviceLUT.length <= playbackParameters.deviceNumber
|| playbackParameters.deviceNumber < 0) {
return false; return false;
} }
int bn = niDeviceLUT[playbackParameters.deviceNumber]; int bn = niDeviceLUT[playbackParameters.deviceNumber];

View File

@ -68,7 +68,7 @@ public class SerialOutput {
SerialPort.NO_PARITY, SerialPort.NO_PARITY,
SerialPort.FLOW_CONTROL_DISABLED); // disable flow control, since this is the RXTX default and it's not specified above SerialPort.FLOW_CONTROL_DISABLED); // disable flow control, since this is the RXTX default and it's not specified above
} catch (PJSerialException e) { } catch (PJSerialException e) {
System.out.println(e.getMessage()); System.out.println("PJSerialException in SerialOutput: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
return false; return false;
} }

View File

@ -22,8 +22,6 @@ import dataMap.OfflineDataMapPoint;
*/ */
public class DataCopyTask<T extends PamDataUnit> extends OfflineTask<T> { public class DataCopyTask<T extends PamDataUnit> extends OfflineTask<T> {
private PamDataBlock<T> pamDataBlock;
private SQLLogging sqlLogging; private SQLLogging sqlLogging;
private BinaryDataSource binaryDataSource; private BinaryDataSource binaryDataSource;
@ -40,7 +38,6 @@ public class DataCopyTask<T extends PamDataUnit> extends OfflineTask<T> {
*/ */
public DataCopyTask(PamDataBlock<T> pamDataBlock) { public DataCopyTask(PamDataBlock<T> pamDataBlock) {
super(pamDataBlock); super(pamDataBlock);
this.pamDataBlock = pamDataBlock;
this.sqlLogging = pamDataBlock.getLogging(); this.sqlLogging = pamDataBlock.getLogging();
this.binaryDataSource = pamDataBlock.getBinaryDataSource(); this.binaryDataSource = pamDataBlock.getBinaryDataSource();
setParentDataBlock(pamDataBlock); setParentDataBlock(pamDataBlock);
@ -77,7 +74,7 @@ public class DataCopyTask<T extends PamDataUnit> extends OfflineTask<T> {
@Override @Override
public String getName() { public String getName() {
return "Copy " + pamDataBlock.getDataName() + " To database"; return "Copy " + getDataBlock().getDataName() + " To database";
} }
@Override @Override

View File

@ -458,5 +458,4 @@ public abstract class OfflineTask<T extends PamDataUnit> {
} }
} }

View File

@ -250,7 +250,7 @@ public class PamAxisPane2 extends StackPane {
// } // }
} }
catch (Exception e) { catch (Exception e) {
System.out.println(e.getMessage()); System.out.println("Exception in PamAxisPanel2.ScaledNumberFormatter: " + e.getMessage());
e.printStackTrace(); e.printStackTrace();
return "Err"; return "Err";
} }

View File

@ -29,6 +29,7 @@ import PamController.PamGUIManager;
import PamController.PamSettingManager; import PamController.PamSettingManager;
import PamController.PamguardVersionInfo; import PamController.PamguardVersionInfo;
import PamController.pamBuoyGlobals; import PamController.pamBuoyGlobals;
import PamController.fileprocessing.ReprocessStoreChoice;
import PamModel.SMRUEnable; import PamModel.SMRUEnable;
import PamUtils.FileFunctions; import PamUtils.FileFunctions;
import PamUtils.PamExceptionHandler; import PamUtils.PamExceptionHandler;
@ -42,6 +43,7 @@ import PamguardMVC.debug.Debug;
import binaryFileStorage.BinaryStore; import binaryFileStorage.BinaryStore;
import dataPlotsFX.JamieDev; import dataPlotsFX.JamieDev;
import generalDatabase.DBControl; import generalDatabase.DBControl;
import networkTransfer.send.NetworkSender;
import rocca.RoccaDev; import rocca.RoccaDev;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -123,6 +125,7 @@ public class Pamguard {
String InputPsf = "NULL"; String InputPsf = "NULL";
// set up the system to output to both a log file and the console window. Also // set up the system to output to both a log file and the console window. Also
// set up a monitor to check for the size of the folder every hour - if it gets // set up a monitor to check for the size of the folder every hour - if it gets
// too big, just stop logging the messages // too big, just stop logging the messages
@ -136,6 +139,14 @@ public class Pamguard {
// TimeZone.setDefault(PamCalendar.defaultTimeZone); // TimeZone.setDefault(PamCalendar.defaultTimeZone);
System.out.println("**********************************************************"); System.out.println("**********************************************************");
// print out the entire command line
if (args != null && args.length > 0) {
System.out.printf("Command line options: ");
for (int i = 0; i < args.length; i++) {
System.out.printf("\"%s\" ", args[i]);
}
System.out.printf("\n");
}
try { try {
// get the java runnable file name. // get the java runnable file name.
// http://stackoverflow.com/questions/4294522/jar-file-name-form-java-code // http://stackoverflow.com/questions/4294522/jar-file-name-form-java-code
@ -209,22 +220,25 @@ public class Pamguard {
} }
else if (anArg.equalsIgnoreCase("-nogui")) { else if (anArg.equalsIgnoreCase("-nogui")) {
PamGUIManager.setType(PamGUIManager.NOGUI); PamGUIManager.setType(PamGUIManager.NOGUI);
System.out.println("no gui operation.");
} }
/////////////// else if (anArg.equalsIgnoreCase("-psf") || anArg.equalsIgnoreCase("-psfx")) {
else if (anArg.equalsIgnoreCase("-psf")) {
String autoPsf = args[iArg++]; String autoPsf = args[iArg++];
PamSettingManager.remote_psf = autoPsf; PamSettingManager.remote_psf = autoPsf;
System.out.println("Running using settings from " + autoPsf); System.out.println("Running using settings from " + autoPsf);
} }
else if (anArg.equalsIgnoreCase("-port")) { else if (anArg.equalsIgnoreCase("-port")) {
// port id to open a udp port to receive commands // port id to open a udp port to receive commands
pamBuoyGlobals.setNetworkControlPort(Integer.parseInt(args[iArg++])); String port = args[iArg++];
pamBuoyGlobals.setNetworkControlPort(Integer.parseInt(port));
System.out.println("Setting UDP control port " + port);
} }
else if (anArg.equalsIgnoreCase("-mport")) { else if (anArg.equalsIgnoreCase("-multicast") || anArg.equalsIgnoreCase("-mport")) {
// multicast control (for multiple PAMGuards) // multicast control (for multiple PAMGuards)
String mAddr = args[iArg++]; String mAddr = args[iArg++];
int mPort = Integer.parseInt(args[iArg++]); int mPort = Integer.parseInt(args[iArg++]);
pamBuoyGlobals.setMultiportConfig(mAddr, mPort); pamBuoyGlobals.setMultiportConfig(mAddr, mPort);
System.out.printf("Setting multicast control addr %s port %d\n", mAddr, mPort);
} }
else if (anArg.equalsIgnoreCase("-nolog")) { else if (anArg.equalsIgnoreCase("-nolog")) {
System.out.println("Disabling log file from command line switch..."); System.out.println("Disabling log file from command line switch...");
@ -232,23 +246,56 @@ public class Pamguard {
} }
else if (anArg.equalsIgnoreCase(BinaryStore.GlobalFolderArg)) { else if (anArg.equalsIgnoreCase(BinaryStore.GlobalFolderArg)) {
// output folder for binary files. // output folder for binary files.
GlobalArguments.setParam(BinaryStore.GlobalFolderArg, args[iArg++]); String binFolder = args[iArg++];
GlobalArguments.setParam(BinaryStore.GlobalFolderArg, binFolder);
System.out.println("Setting output folder for binary files to " + binFolder);
} }
else if (anArg.equalsIgnoreCase(DBControl.GlobalDatabaseNameArg)) { else if (anArg.equalsIgnoreCase(DBControl.GlobalDatabaseNameArg)) {
// database file name // database file name
GlobalArguments.setParam(DBControl.GlobalDatabaseNameArg, args[iArg++]); String dbName = args[iArg++];
GlobalArguments.setParam(DBControl.GlobalDatabaseNameArg, dbName);
System.out.println("Setting output database file to " + dbName);
} }
else if (anArg.equalsIgnoreCase(FolderInputSystem.GlobalWavFolderArg)) { else if (anArg.equalsIgnoreCase(FolderInputSystem.GlobalWavFolderArg)) {
// source folder for wav files (or other supported sound files) // source folder for wav files (or other supported sound files)
GlobalArguments.setParam(FolderInputSystem.GlobalWavFolderArg, args[iArg++]); String wavFolder = args[iArg++];
GlobalArguments.setParam(FolderInputSystem.GlobalWavFolderArg, wavFolder);
System.out.println("Setting input wav file folder to " + wavFolder);
} }
else if (anArg.equalsIgnoreCase(PamController.AUTOSTART)) { else if (anArg.equalsIgnoreCase(PamController.AUTOSTART)) {
// auto start processing. // auto start processing.
GlobalArguments.setParam(PamController.AUTOSTART, PamController.AUTOSTART); GlobalArguments.setParam(PamController.AUTOSTART, PamController.AUTOSTART);
System.out.println("Setting autostart ON");
} }
else if (anArg.equalsIgnoreCase(PamController.AUTOEXIT)) { else if (anArg.equalsIgnoreCase(PamController.AUTOEXIT)) {
// auto exit at end of processing. // auto exit at end of processing.
GlobalArguments.setParam(PamController.AUTOEXIT, PamController.AUTOEXIT); GlobalArguments.setParam(PamController.AUTOEXIT, PamController.AUTOEXIT);
System.out.println("Setting autoexit ON");
}
else if (anArg.equalsIgnoreCase(NetworkSender.ADDRESS)) {
// auto exit at end of processing.
GlobalArguments.setParam(NetworkSender.ADDRESS, args[iArg++]);
}
else if (anArg.equalsIgnoreCase(NetworkSender.ID1)) {
// auto exit at end of processing.
GlobalArguments.setParam(NetworkSender.ID1, args[iArg++]);
}
else if (anArg.equalsIgnoreCase(NetworkSender.ID2)) {
// auto exit at end of processing.
GlobalArguments.setParam(NetworkSender.ID2, args[iArg++]);
}
else if (anArg.equalsIgnoreCase(NetworkSender.PORT)) {
// auto exit at end of processing.
GlobalArguments.setParam(NetworkSender.PORT, args[iArg++]);
}
else if (anArg.equalsIgnoreCase(ReprocessStoreChoice.paramName)) {
String arg = args[iArg++];
ReprocessStoreChoice choice = ReprocessStoreChoice.valueOf(arg);
if (choice == null) {
String warn = String.format("Reprocessing storage input parameter %s value \"%s\" is not a recognised value", ReprocessStoreChoice.paramName, arg);
WarnOnce.showWarning("Invalid input parameter", warn, WarnOnce.WARNING_MESSAGE);
}
GlobalArguments.setParam(ReprocessStoreChoice.paramName, arg);
} }
else if (anArg.equalsIgnoreCase("-help")) { else if (anArg.equalsIgnoreCase("-help")) {
System.out.println("--PamGuard Help"); System.out.println("--PamGuard Help");

View File

@ -192,7 +192,7 @@ public class RoccaContour {
(currentStartSample, fftLength, channelMap ); (currentStartSample, fftLength, channelMap );
} }
catch (RawDataUnavailableException e) { catch (RawDataUnavailableException e) {
System.out.println(e.getMessage()); System.out.println("RawDataUnavailableException in ROCCAContour.generateContour: " + e.getMessage());
currentRawData = null; currentRawData = null;
} }
/* every now and then the FFTDataUnit start sample doesn't match up /* every now and then the FFTDataUnit start sample doesn't match up
@ -237,7 +237,7 @@ public class RoccaContour {
nextRawData = rawDataBlockIn.getSamples(nextStartSample, fftLength, channelMap ); nextRawData = rawDataBlockIn.getSamples(nextStartSample, fftLength, channelMap );
} }
catch (RawDataUnavailableException e) { catch (RawDataUnavailableException e) {
System.out.println(e.getMessage()); System.out.println("RawDataUnavailableException (2) in ROCCAContour.generateContour: " + e.getMessage());
nextRawData = null; nextRawData = null;
} }
nextFFT = nextFFTDataUnit.getFftData(); nextFFT = nextFFTDataUnit.getFftData();

View File

@ -2333,7 +2333,7 @@ public class RoccaSpecPopUp extends javax.swing.JPanel {
} }
} }
catch (RawDataUnavailableException e) { catch (RawDataUnavailableException e) {
System.out.println(e.getMessage()); System.out.println("RawDataUnavailableException in ROCCASpecPopUp: " + e.getMessage());
} }
if (rawDataValues==null) { if (rawDataValues==null) {

Some files were not shown because too many files have changed in this diff Show More