This commit is contained in:
Jamie Mac 2022-02-23 12:28:38 +00:00
commit 664f47144c
42 changed files with 704 additions and 286 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>PamGuard Working</name>
<name>PamGuard Main</name>
<comment></comment>
<projects>
</projects>

View File

@ -308,9 +308,10 @@ name="_Toc312065297"></a><a name="_Toc312063942"></a>ABOUT PAMGuard</h1>
<p class=MsoNormal>The PAMGUARD project develops software to help detect,
locate and classify marine mammals using Passive Acoustic Monitoring.</p>
<p class=MsoNormal>See <a href="http://www.pamguard.org">http://www.pamguard.org</a>
and <a href="http://sourceforge.net/projects/pamguard">http://sourceforge.net/projects/pamguard</a>&nbsp;
</p>
<p class=MsoNormal>See <a href="http://www.pamguard.org">http://www.pamguard.org</a></p>
<p class=MsoNormal>Code is not on GitHub at <a
href="https://github.com/PAMGuard">https://github.com/PAMGuard</a>. </p>
<h1><a name="_Toc444450391"></a><a name="_Toc444450027"></a><a
name="_Toc312065298"></a><a name="_Toc312063943"></a>LICENSE</h1>
@ -347,12 +348,6 @@ href="https://java.com/en/download/manual.jsp">https://java.com/en/download/manu
<p class=MsoNormal>Note that the interface to Microsoft Access databases is not
supported in the 64 bit version or when using a 32 bit Java 8. </p>
<p class=MsoNormal>It is absolutely fine to run a 32 bit PAMGuard and a 32 bit
JVM on a 64 bit computer. It is also fine to have both 32 bit and 64 bit
versions of both Java and PAMGuard installed on the same machine. <a
name="_Toc312065327"></a><a name="_Toc312063970"></a>The same .psf
configuration files will work with both 32 and 64 bit versions. </p>
<h1><a name="_Toc444450029"></a><a name="_Toc444450393"></a>STARTING PAMGUARD</h1>
<p class=MsoNormal>On Windows, the installers will create shortcuts in the
@ -390,8 +385,12 @@ PamguardBeta_ViewerMode.exe):</p>
<p class=MsoNormal><em><span style='font-family:"Calibri",sans-serif'>&nbsp;</span></em></p>
<h1><em><span style='font-family:"Cambria",serif;font-style:normal'><a
href="#_Latest_Version_2.02.02">LATEST VERSION 2.02.02 October 2021</a></span></em></h1>
<h1><a name="_LATEST_VERSION_2.02.03"></a><em><span style='font-size:12.0pt;
font-family:"Cambria",serif;font-style:normal'><a
href="#_Latest_Version_2.02.03_1">LATEST VERSION 2.02.03 February 2022</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.02">Version 2.02.02 October 2021</a></span></em></h1>
<h1><a name="_Version_2.02.01_October"></a><span style='font-size:12.0pt'><a
href="#_Latest_Version_2.02.01">Version 2.02.01 October 2021</a></span></h1>
@ -494,9 +493,46 @@ Beta December 2014</a></span></h1>
<h1><span style='font-size:12.0pt'><a href="#_Toc444450402">Older Versions</a></span></h1>
<h1><a name="_Latest_Version_2.02.03_1"></a><span lang=EN-US>Latest Version
2.02.03 February 2022</span></h1>
<p class=MsoNormal>Some minor bug fixes following our migration to GitHub. Note
that the older Bug numbers only refer to bugs reported on the SVN site. New
bugs and issues are logged on GitHub at <a
href="https://github.com/PAMGuard/PAMGuard/issues">https://github.com/PAMGuard/PAMGuard/issues</a>.
GitHub issue number are referred to with a # symbol</p>
<p class=MsoNormal>#6 Threading Hydrophone Locator: was not working correctly
in the latest release V2.02.02. The problem was particularly apparent in Viewer
mode but may have given false array locations in normal mode under some
circumstances. This has been fixed</p>
<p class=MsoNormal>#11 Matched Click Classifier: fixed bug which caused crash
running in real time. Added template names based on file names. </p>
<p class=MsoNormal>#13 Merging files when offline processing file folders: Had
an error introduced in last release which caused it to fail to recognise gaps
between files, meaning that some output data (i.e. after a gap) would have an
incorrect time stamp. This did not affect data if the merge contiguous files
option was not selected. </p>
<p class=MsoNormal>#14 Logger forms data were not plotting correctly. This was
due to the required data selection functions not being fully implemented. This
is now fixed and it should be possible to select what to plot based on
selections from drop down lists within any form.</p>
<p class=MsoNormal>&nbsp;</p>
<p class=MsoNormal>Note that updates have also been made to the Matlab
interface to PAMGuard binary files, which has now also been migrated to GitHub
at <a href="https://github.com/PAMGuard/PAMGuardMatlab">https://github.com/PAMGuard/PAMGuardMatlab</a>.
</p>
<h1>&nbsp;</h1>
<h1><a name="_Latest_Beta_Version_2.02.01"></a><a name="_Latest_Version_2.02.02"></a><span
lang=EN-US><!-- ************************************************************************************************************************** --><!-- ************************************************************************************************************************** -->Latest
Version 2.02.02 October 2021</span></h1>
lang=EN-US><!-- ************************************************************************************************************************** --><!-- ************************************************************************************************************************** -->Version
2.02.02 October 2021</span></h1>
<p class=MsoNormal><span lang=EN-US>Minor bug fix to V2.02.01 which would cause
the TF FX display to crash if no data were displayed.</span></p>
@ -552,9 +588,9 @@ href="http://www.pamguard.org/downloads.php?cat_id=3">here</a>.</p>
lang=EN-US> </span></p>
<p class=MsoNormal>This module has been renamed “Detection Grouper”, so as to
avoid confusion with the Group 3D localizer. This is because the Detection Grouper
is more for organizing data into groups to be localized than it is for doing
localization.</p>
avoid confusion with the Group 3D localizer. This is because the Detection
Grouper is more for organizing data into groups to be localized than it is for
doing localization.</p>
<p class=MsoNormal><b><span lang=EN-US>Minor Bug Fixes</span></b><span
lang=EN-US> </span></p>
@ -599,8 +635,9 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nb
Upgrade database system to work with MySQL 8.0 </p>
<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>
Improvements to datamap display, to ensure even small images will be shown </p>
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>Improvements to datamap display, to ensure even small images
will be shown </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>4. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
@ -654,8 +691,8 @@ new CPOD features </p>
<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>
Better interpolation of data by the Decimator when decimating/upsampling by a non-integer
amount </p>
Better interpolation of data by the Decimator when decimating/upsampling by a
non-integer amount </p>
<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>
@ -671,9 +708,9 @@ included in a future release. </p>
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
An implementation of the Generalized Power Law Detector, developed by Tyler
Helble ([Helble et al., A generalized power-law detection algorithm for
humpback whale vocalizations, The Journal of the Acoustical Society of America,
vol. 131, no. 4, pp. 26822699, 2012) is now available. For details, see the
online help </p>
humpback whale vocalizations, The Journal of the Acoustical Society of
America, vol. 131, no. 4, pp. 26822699, 2012) is now available. For details,
see the online help </p>
<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>
@ -796,9 +833,8 @@ August 2020</span></h1>
<p class=MsoNormal><b>If you are upgrading from a PAMGuard core release
(1.15.xx), PAMGuard Version 2 contains major updates. 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 with installation and use of this
version.</b></p>
understand the notes listed for <a href="#_Latest_Beta_Version_2.00.10">Beta Version
2.00.10</a> before proceeding with installation and use of this version.</b></p>
<p class=MsoNormal>This version of PAMGuard has been bundled with Java 13
(release 13.0.1). PSFX files generated in previous beta releases (2.xx.xx)
@ -961,8 +997,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nb
Added beaked whale to sim sounds </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>13. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
Added ctrl-p hotkey to print-screen button. </p>
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 ctrl-p hotkey to print-screen button. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>14. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
@ -985,11 +1021,11 @@ understand the notes listed for <a href="#_Latest_Beta_Version_2.00.10">Beta
Version 2.00.10</a> before proceeding with installation and use of this
version.</b></p>
<p class=MsoNormal>This version of PAMGuard has been bundled with Java 13 (release
13.0.1). PSFX files generated in previous beta releases (2.xx.xx) should be
compatible with this version, and vice-versa. PSF files generated in core
releases (1.15.xx) can be loaded in this version, but will be converted to PSFX
files when PAMGuard exits.</p>
<p class=MsoNormal>This version of PAMGuard has been bundled with Java 13
(release 13.0.1). PSFX files generated in previous beta releases (2.xx.xx)
should be compatible with this version, and vice-versa. PSF files generated in
core releases (1.15.xx) can be loaded in this version, but will be converted to
PSFX files when PAMGuard exits.</p>
<p class=MsoNormal><b><span lang=EN-US>Bug Fixes</span></b></p>
@ -1077,8 +1113,9 @@ process each data unit 2x doubling the output.</p>
<p class=MsoNormal><b><span lang=EN-US>Upgrades</span></b></p>
<p class=MsoListParagraph style='text-indent:-18.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;</span>
Added functionality to TD display to allow users to manually classify clicks. </p>
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 functionality to TD display to allow users to manually
classify clicks. </p>
<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>
@ -1191,8 +1228,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nb
New display for Gebco Netcdf bathymetry maps.</p>
<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>
Difar enhancements based on recent field testing.</p>
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>Difar enhancements based on recent field testing.</p>
<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>
@ -1312,10 +1349,10 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nb
Send Email option added to Alarm module.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>7. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
Added ability to scale the PAMGuard display (go to <em><span style='font-family:
"Calibri",sans-serif'>Help &gt; Set Display Scaling Factor</span></em> to
adjust the scale). This, in conjunction with the built-in Windows Display
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 ability to scale the PAMGuard display (go to <em><span
style='font-family:"Calibri",sans-serif'>Help &gt; Set Display Scaling Factor</span></em>
to adjust the scale). This, in conjunction with the built-in Windows Display
Scaling feature, will hopefully help with issues sometimes found when using
4k/UHD/high-DPI displays. At the moment this does not fix the JavaFX
components, but we're working on that.</p>
@ -1567,8 +1604,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nb
Added zoom in/out to Raw Data plugin display in spectrogram.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>4. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
Added ability to read differential GPS data.</p>
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 ability to read differential GPS data.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>5. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
@ -1664,9 +1701,10 @@ settings window was opened.</p>
<p class=MsoNormal><b><span lang=EN-US>Upgrades</span></b></p>
<p class=MsoListParagraph style='text-indent:-18.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;</span>
Soundtrap module - bug fixes and more intuitive user interface when importing
Soundtrap data. Also changed the default date/time format to ISO8601 standard.</p>
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>Soundtrap module - bug fixes and more intuitive user
interface when importing Soundtrap data. Also changed the default date/time
format to ISO8601 standard.</p>
<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>
@ -1761,8 +1799,8 @@ and encouraged to manually fix the database.</p>
<!-- ************************************************************************************************************************** -->
<h1><a name="_Latest_Beta_Version_2.00.12"></a><span lang=EN-US>Beta Version
2.00.12 January 2018</span></h1>
<h1><a name="_Latest_Beta_Version_2.00.12"></a><span lang=EN-US>Beta Version 2.00.12
January 2018</span></h1>
<p class=MsoNormal><span lang=EN-US>PAMGuard Version 2 contains major updates.
You should read and understand the notes listed for <a
@ -1789,8 +1827,8 @@ discarded, and could cause memory issues in large datasets.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>4.</span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Bug 342. Rocca was not properly loading a previously-saved EncounterStats
file.</p>
</span>Bug 342. Rocca was not properly loading a previously-saved
EncounterStats file.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>5.</span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -1888,9 +1926,9 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nb
Updates/bug fixes to the landmark module. </p>
<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>
Added a simulated white noise source which can be moved around in the same way
as other sources. </p>
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 a simulated white noise source which can be moved
around in the same way as other sources. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>4. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
@ -2007,10 +2045,9 @@ relatively simple through the PAMGuard GUI. </span></p>
<p class=MsoListParagraph style='text-indent:-18.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;
</span><span lang=EN-US>Bug 317. Rocca Module Data Purging.</span><span
lang=EN-US> </span>The ROCCA module was not performing data purging when using
classifiers developed for Hawaii/Temperate Pacific/North Atlantic datasets.
This has been corrected.</p>
</span><span lang=EN-US>Bug 317. Rocca Module Data Purging. </span>The ROCCA
module was not performing data purging when using classifiers developed for
Hawaii/Temperate Pacific/North Atlantic datasets. This has been corrected.</p>
<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;
@ -2066,8 +2103,8 @@ after the contour was recalculated. This has been corrected.</p>
<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>Bug 310. When exiting Viewer mode, PAMGuard queries the user whether
they are sure they want to exit without saving even though they selected <em><span
</span>Bug 310. When exiting Viewer mode, PAMGuard queries the user whether they
are sure they want to exit without saving even though they selected <em><span
style='font-family:"Calibri",sans-serif'>Save and Exit</span></em>. Corrected,
and added an <em><span style='font-family:"Calibri",sans-serif'>Exit without
Save</span></em> option.</p>
@ -2230,11 +2267,11 @@ was used. This is fixed. </p>
<p class=MsoListParagraph style='margin-left:40.5pt;text-indent:-22.5pt'>5.<span
style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Bug 295. If a click has a total length of a single sample, the code
attempting to estimate the time delay between channels would crash. This is now
fixed. This could only occur if both pre sample and post sample were set to 0
in the click detector, which is generally not a good idea, so this bug may have
been there for some time, it's just that no one noticed before. Fixed</p>
</span>Bug 295. If a click has a total length of a single sample, the code attempting
to estimate the time delay between channels would crash. This is now fixed.
This could only occur if both pre sample and post sample were set to 0 in the
click detector, which is generally not a good idea, so this bug may have been
there for some time, it's just that no one noticed before. Fixed</p>
<p class=MsoListParagraph style='margin-left:40.5pt;text-indent:-22.5pt'>6.<span
style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -2347,9 +2384,9 @@ the future. </span></p>
<p class=MsoNormal><i>Logger Form Design</i></p>
<p class=MsoNormal>A GUI driven system for designing Logger forms has been
released. Currently, this feature has no online help, but is reasonably
intuitive compared to the old method of typing directly into the database. </p>
<p class=MsoNormal>A GUI driven system for designing Logger forms has been released.
Currently, this feature has no online help, but is reasonably intuitive
compared to the old method of typing directly into the database. </p>
<p class=MsoNormal><i><span lang=EN-US>Improved Number handling</span></i></p>
@ -2421,9 +2458,9 @@ changes in future releases. New PAMGuard releases will always be able to open
older binary files, however, with previous PAMGuard releases if a newer file
format was opened, then PAMGuard was unable to check that the file format was
newer and would attempt to read the files and might even corrupt them. Now it
will recognise that it cannot open the files, display appropriate error
messages and not attempt to read the files. NOTE that at this time there are no
planned file format changes and that this is purely a future proofing exercise.</p>
will recognise that it cannot open the files, display appropriate error messages
and not attempt to read the files. NOTE that at this time there are no planned
file format changes and that this is purely a future proofing exercise.</p>
<p class=MsoListParagraph style='margin-left:38.25pt;text-indent:-20.25pt'>7.<span
style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -2510,11 +2547,11 @@ version 1.15.00 32 bit. Both using identical Java core software but linking to
different libraries for control of sound input devices. </span></p>
<p class=MsoNormal><span lang=EN-US>This is the first release of a 64 bit
version of PAMGuard. As with the 32 bit version a number of C language
libraries are required to interface to external sound cards and other data
acquisition devices. These have been extensively tested on several different
computers, but may not be as stable as the 32 bit versions. Please report any
problems immediately to the PAMGuard team. </span></p>
version of PAMGuard. As with the 32 bit version a number of C language libraries
are required to interface to external sound cards and other data acquisition
devices. These have been extensively tested on several different computers, but
may not be as stable as the 32 bit versions. Please report any problems
immediately to the PAMGuard team. </span></p>
<p class=MsoNormal><b><span lang=EN-US>Other Changes</span></b></p>
@ -2577,9 +2614,9 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nb
</span>Bug 262. Access to SQLite database conversion. This would fail when
tables were present which were not created by PAMGuard. &nbsp;Fixes have been
put in place for spaces in the table name or for not having an 'Id' column.
Fixes have not been implemented for spaces in a column name or use of a reserved
word as a column name, however if either of these problems do exist it will no
longer crash but issue a clear warning and carry onto the next table.</p>
Fixes have not been implemented for spaces in a column name or use of a
reserved word as a column name, however if either of these problems do exist it
will no longer crash but issue a clear warning and carry onto the next table.</p>
<p class=MsoNormal style='margin-left:18.0pt'><span lang=EN-US>&nbsp;</span></p>
@ -2588,8 +2625,8 @@ name="_Toc312065299"></a><a name="_Toc312063944"></a><a name="_Toc312065300"></a
name="_Toc312063945"></a>Version 1.14.00 Beta, September 2015</h1>
<p class=MsoNormal>The format of configuration files has changed for version
1.14.00. Older configurations will load with this new version, but
configurations saved with 1.14.00 may not open correctly with earlier versions.</p>
1.14.00. Older configurations will load with this new version, but configurations
saved with 1.14.00 may not open correctly with earlier versions.</p>
<p class=MsoNormal>PAMGuard Versions 1.14.00 and above will work with Java 8.
PAMGuard will continue to work with Java 7, but support for Java 7 will be
@ -2656,9 +2693,9 @@ displaying in the viewer. This is now fixed. </span></p>
<p class=MsoListParagraph style='margin-left:38.25pt;text-indent:-20.25pt'><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;&nbsp;
</span><span lang=EN-US>Bug 248. Crash in hydrophone array manager. Bug in
array manager would crash PAMGuard when the click detector was configured with
more channels than the sound acquisition system (almost impossible to achieve,
but someone managed it). </span></p>
array manager would crash PAMGuard when the click detector was configured with more
channels than the sound acquisition system (almost impossible to achieve, but
someone managed it). </span></p>
<p class=MsoListParagraph style='margin-left:38.25pt;text-indent:-20.25pt'><span
lang=EN-US>4.</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -2752,9 +2789,9 @@ lang=EN-US>1.</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times N
</span>Spectrogram annotation marks. A simple system for marking spectrograms
during real time analysis has been incorporated. To use it, add the module, in
the spectrogram settings, select the annotation marks in the 'Mark Observers'
tab of the spectrogram configuration dialog, and also right click on the
spectrogram and select to display the annotations. Annotations are saved to the
database so you will also need a database module in your configuration. &nbsp;</p>
tab of the spectrogram configuration dialog, and also right click on the spectrogram
and select to display the annotations. Annotations are saved to the database so
you will also need a database module in your configuration. &nbsp;</p>
<p class=MsoListParagraph style='margin-left:47.25pt;text-indent:-29.25pt'><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -2777,9 +2814,9 @@ option with caution !</p>
<p class=MsoListParagraph style='margin-left:47.25pt;text-indent:-29.25pt'><span
lang=EN-US>5.</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;
</span>The Open Office Database system has been removed from the list of
available options since it is not reliable. If you require a free database
solution we recommend you use the MySql Community Server <a
</span>The Open Office Database system has been removed from the list of available
options since it is not reliable. If you require a free database solution we
recommend you use the MySql Community Server <a
href="http://dev.mysql.com/downloads/mysql/">http://dev.mysql.com/downloads/mysql/</a></p>
<p class=MsoListParagraph style='margin-left:47.25pt;text-indent:-29.25pt'><span
@ -2859,9 +2896,9 @@ be specified by the user in the Rocca Parameters dialog Notes tab.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'>1.<span style='font-size:
7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Bug
209. Map zoom level. This was zoomed right into a range of about 1m when new
maps were created. This is now fixed and it starts with a default range of 10km
on the display. </p>
209. Map zoom level. This was zoomed right into a range of about 1m when new maps
were created. This is now fixed and it starts with a default range of 10km on
the display. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'>2.<span style='font-size:
7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Bug
@ -2888,8 +2925,9 @@ total loss of the PAMGuard configuration in viewer mode and has been rectified.
7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>Bug
218. SAIL Acquisition card would hang the system. This has also been fixed. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'>7.&nbsp;&nbsp;&nbsp; Bug 219.
Problems displaying Offline Click Events in the Viewer map have been fixed. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'>7.&nbsp;&nbsp;&nbsp; Bug
219. Problems displaying Offline Click Events in the Viewer map have been
fixed. </p>
<p class=MsoNormal>&nbsp;</p>
@ -2987,9 +3025,9 @@ sonobuoys. See online help for details.&nbsp; </p>
<p class=MsoNormal>This module, developed by Jamie Macaulay of St Andrews
University estimates the 3D localisation of clicks using a variety of
algorithms. It's primarily been developed to track harbour porpoise in three
dimensions over scales of 10's of metres. While currently only working with output
from the click detector, we hope eventually to extend its use to whistles as
well. </p>
dimensions over scales of 10's of metres. While currently only working with
output from the click detector, we hope eventually to extend its use to
whistles as well. </p>
<p class=MsoNormal><i>Accelerometer Readout</i> (Sensors group)</p>
@ -3037,8 +3075,8 @@ audio output from high frequency data. See online help for details. </p>
long term spectral average of audio data for a spectrogram display. See online
help for details. </p>
<p class=MsoNormal><i>Echo Detector and Sperm Whale IPI Computation</i> (Beta only,
Sound Measurements Group)</p>
<p class=MsoNormal><i>Echo Detector and Sperm Whale IPI Computation</i> (Beta
only, Sound Measurements Group)</p>
<p class=MsoNormal>These two modules, developed by Brian Miller of the
Australian Antarctic Division can be used to estimate the inter pulse interval
@ -3059,10 +3097,11 @@ different. Details are available in the online help. </p>
<p class=MsoNormal><i>FLAC File Support</i></p>
<p class=MsoNormal>Can now read raw audio data direct from FLAC files. <a
href="http://en.wikipedia.org/wiki/FLAC">FLAC</a> is a lossless compression algorithm
for audio data. Files, or folders of files are accessed in the same way as WAV
and AIFF files in the Sound Acquisition module. In a future release we also
hope to provide support for writing FLAC files from the sound recorder module. </p>
href="http://en.wikipedia.org/wiki/FLAC">FLAC</a> is a lossless compression
algorithm for audio data. Files, or folders of files are accessed in the same
way as WAV and AIFF files in the Sound Acquisition module. In a future release
we also hope to provide support for writing FLAC files from the sound recorder
module. </p>
<p class=MsoNormal><i>Sound Recorder Module</i></p>
@ -3075,8 +3114,8 @@ Millisecond time is also now included in the output file names. </p>
<p class=MsoNormal>Datagram options in Viewer have been improved so that the
user has to verify the time binning for datagrams the first time the viewer is
run and can also change the time bins from the File menu (See the File/BinaryStore/Datagram
options menu. </p>
run and can also change the time bins from the File menu (See the
File/BinaryStore/Datagram options menu. </p>
<p class=MsoNormal><i>Viewer Configuration</i></p>
@ -3128,8 +3167,8 @@ whistle.</p>
longer possible to change configurations once PAMGuard has been launched
and pressing 'Cancel' on the select dialog causes PAMGuard to exit. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Airgun display. If this was
included in the PAMGuard model before the GPS module it would hang PAMGuard.
This has been rectified. </li>
included in the PAMGuard model before the GPS module it would hang
PAMGuard. This has been rectified. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Fixed occasional exceptions in
the sound output modules when playing back from files. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Fixed exceptions in spectrogram
@ -3148,8 +3187,8 @@ whistle.</p>
. Did not affect band level calculations. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Bug in noise band monitor.
Crashed when sample rate was exactly 2kHz. Fixed </li>
<li class=MsoNormal style='margin-bottom:0cm'>Memory leak in click detector.
Severe memory leak when processing clicks in viewer mode now fixed. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Memory leak in click detector. Severe
memory leak when processing clicks in viewer mode now fixed. </li>
<li class=MsoNormal style='margin-bottom:0cm'>Flickering of click display (<a
href="http://sourceforge.net/p/pamguard/bugs/191/">http://sourceforge.net/p/pamguard/bugs/191/</a>)
now fixed. </li>
@ -3206,8 +3245,8 @@ mode, making is easy to scroll through and view data for short time periods. </p
<p class=MsoNormal style='margin-left:36.0pt'><i>GPS</i></p>
<p class=MsoNormal style='margin-left:36.0pt'>Function to import GPS data from
other data sources for the PAMGuard viewer. </p>
<p class=MsoNormal style='margin-left:36.0pt'>Function to import GPS data from other
data sources for the PAMGuard viewer. </p>
<p class=MsoNormal style='margin-left:36.0pt'><i>Database</i></p>
@ -3306,18 +3345,18 @@ have implemented database storage for output of these modules. </p>
<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;
</span>Radar Display: A bug which stopped the radar display from correctly displaying
bearings to whistles from arrays containing more than two hydrophone elements
has been fixed. </p>
</span>Radar Display: A bug which stopped the radar display from correctly
displaying bearings to whistles from arrays containing more than two hydrophone
elements has been fixed. </p>
<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;
</span>Database Speed: A substantial rewriting of some of the indexing methods
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).
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
data are read back into PAMGuard when using the viewer. </p>
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). 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 data
are read back into PAMGuard when using the viewer. </p>
<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;
@ -3420,8 +3459,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:
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
than the full waveform. The waveform or envelope can also be filtered prior to
</span>Bearings can be calculated using the envelope of the waveform rather than
the full waveform. The waveform or envelope can also be filtered prior to
bearing calculation.</p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span style='font-family:
@ -3519,8 +3558,8 @@ binary data files. </p>
<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;
</span>The hydrophone localisation systems have been updated to better use information
from true and magnetic heading sensors.</p>
</span>The hydrophone localisation systems have been updated to better use
information from true and magnetic heading sensors.</p>
<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;
@ -3577,8 +3616,8 @@ frequency division (i.e. previous versions would convert well from 96kHz to
<p class=MsoNormal><b>Bug fixes</b></p>
<p class=MsoNormal>1. Placement of axes on some displays (array manager and
depth side panel). Problem in 1.9.01 Beta now fixed. </p>
<p class=MsoNormal>1. Placement of axes on some displays (array manager and depth
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
serial drop out. NMEA now restarts correctly. </p>
@ -3639,17 +3678,17 @@ hardware numbers and software numbers in every PAMGUARD module. Since this type
of channel numbering was only implemented several years into the PAMGUARD
project, it was never fully implemented or well supported by the different
modules which resulted in a number of bugs which could cause confusion as to
which hydrophones were being used during localisation or during calibrated measurement.
The situation tended to only arise with a small number of ASIO sound cards such
as the RME Fireface 400 on which the most useful inputs, the balanced line
inputs, are hardware channels 4,5,6 and 7 on the back of the instrument. (On
the Fireface 800, the balanced line inputs are channels 0 to 7). When using the
National Instruments system, data were always sent into the rest of PAMGUARD
with sequential channel numbering starting at 0. This was required in order to
support multiple NI Daq boards where it is possible to read for example channel
0 and 1 on two different devices, so to uniquely identify channels in the rest
of PAMGUARD, the only rational thing to do was to re-label those channels
0,1,2,3. </p>
which hydrophones were being used during localisation or during calibrated
measurement. The situation tended to only arise with a small number of ASIO
sound cards such as the RME Fireface 400 on which the most useful inputs, the
balanced line inputs, are hardware channels 4,5,6 and 7 on the back of the
instrument. (On the Fireface 800, the balanced line inputs are channels 0 to
7). When using the National Instruments system, data were always sent into the
rest of PAMGUARD with sequential channel numbering starting at 0. This was
required in order to support multiple NI Daq boards where it is possible to
read for example channel 0 and 1 on two different devices, so to uniquely
identify channels in the rest of PAMGUARD, the only rational thing to do was to
re-label those channels 0,1,2,3. </p>
<p class=MsoNormal>There have been other annoyances with the ASIO channel
numbering scheme. For instance, if you had a configuration which worked in real
@ -3984,11 +4023,11 @@ 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:
Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>New menu functionality by right clicking on any of the tabs of the main tab
control will allow the user to copy the tab contents to the system clipboard
from where it can be copied into other programs (e.g. Word, Powerpoint,
etc.).Some modules, such as the map, have this implemented in other menus
(right click) and also allow printing.&nbsp; </p>
</span>New menu functionality by right clicking on any of the tabs of the main
tab control will allow the user to copy the tab contents to the system
clipboard from where it can be copied into other programs (e.g. Word,
Powerpoint, etc.).Some modules, such as the map, have this implemented in other
menus (right click) and also allow printing.&nbsp; </p>
<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;
@ -4020,9 +4059,9 @@ now been fixed. </p>
<p class=MsoNormal>Decimator was calculating incorrect filter coefficients
(coefficients were based on the output sample rate, not the input sample rate,
so it's likely that actual filtering of data was minimal). This is now rectified.
Ishmael matched filter. Would crash if template file not correctly loaded. Now
issues a warning message to the terminal and does not crash. </p>
so it's likely that actual filtering of data was minimal). This is now
rectified. Ishmael matched filter. Would crash if template file not correctly
loaded. Now issues a warning message to the terminal and does not crash. </p>
<p class=MsoNormal>Spelling correction on user input form (Sumbit - Submit)</p>
@ -4159,8 +4198,8 @@ start-up takes slightly longer than previously. </p>
<p class=MsoNormal><b>Outstanding bugs</b></p>
<p class=MsoNormal>The patch panel is known to crash if output channel numbers from
the patch panel a higher than the highest input channel number of the data
<p class=MsoNormal>The patch panel is known to crash if output channel numbers
from the patch panel a higher than the highest input channel number of the data
acquisition.&nbsp; </p>
<p class=MsoNormal><b>Bug fixes</b></p>
@ -4532,7 +4571,8 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<h2>0.5b&nbsp;&nbsp;&nbsp; 31 August 2007 </h2>
<p class=MsoNormal>Requires Java 6 Update 2 (http://java.com/en/download/manual.jsp)</p>
<p class=MsoNormal>Requires Java 6 Update 2
(http://java.com/en/download/manual.jsp)</p>
<p class=MsoNormal>Major new features include:</p>
@ -4575,8 +4615,8 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<p class=MsoNormal>&nbsp;</p>
<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 - Pamguard
starts two releases, core and beta release</span></span>, </p>
class=Heading2Char><span style='font-size:13.0pt'>1.0Beta 22 Jan 2008 -
Pamguard starts two releases, core and beta release</span></span>, </p>
<p class=MsoNormal>this is the beta release</p>
@ -4594,8 +4634,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:
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 position
on map</p>
</span>Multi animal click tracking with least squares fit calculation of
position on map</p>
<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;

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">
<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>
<stringAttribute key="M2_GOALS" value="package shade:shade"/>
<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>
<booleanAttribute key="M2_OFFLINE" value="false"/>
<stringAttribute key="M2_PROFILES" value=""/>
<listAttribute key="M2_PROPERTIES"/>
<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>
<booleanAttribute key="M2_SKIP_TESTS" value="true"/>
<intAttribute key="M2_THREADS" value="1"/>
<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>
<stringAttribute key="M2_USER_SETTINGS" value=""/>
<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_ATTR_USE_ARGFILE" value="false"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_SHOW_CODEDETAILS_IN_EXCEPTION_MESSAGES" value="true"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_CLASSPATH_ONLY_JAR" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-13/"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-mx6000m&#13;&#10;-Djava.library.path=lib64"/>
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/PamGuard Main}"/>
</launchConfiguration>

View File

@ -0,0 +1,16 @@
To build an executable jar file from the PAMGuard source using Eclipse, you need to use this build configuration
'Build PAMGuard.launch'
You cannot simply export the project as a runnable jar file, or you will not get the required Maven dependencies.
To use this with Eclipse, from your workspace, select File, then import, then in the list of things to be imported select
Run/Debug Launch Configurations, hit Next
Then in the Import Launch Configurations panel, browse to this folder. Select the folder (not a specific file)
then in the left panel, select the folder, then in the right panel the configuration you wish to import
(i.e. Build PAMGuard.launch) and hit Finish
Then go to 'Run Configurations' and find the launch in the 'Maven Builds' section. You'll probably have to change the
Base directory at the top of the panel to select the right project within your workspace.
Once that's done, you can Run the configuration. It will take a while to get all the Maven dependencies and will output
a runnable jar file into the 'targets' folder in your workspace.
The name and version number of the created files are taken from the POM.xml file, so edit that if you want a different name.
For unknown reasons, it makes three files. They are all the same, you can delete the ones starting with 'original-' and
ending with '-shared'

View File

@ -2,9 +2,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.pamguard</groupId>
<artifactId>PamguardBeta</artifactId>
<artifactId>Pamguard</artifactId>
<name>Pamguard Java12+</name>
<version>2.02.02</version>
<version>2.02.03</version>
<description>Pamguard for Java 12+, using Maven to control dependcies</description>
<url>www.pamguard.org</url>
<organization>
@ -191,11 +191,6 @@
<id>central</id>
<url>https://repo1.maven.org/maven2</url>
</repository>
<repository>
<snapshots />
<id>github</id>
<url>https://maven.pkg.github.com/macster110/jpam</url>
</repository>
</repositories>
<reporting>
<plugins>

View File

@ -3,8 +3,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.pamguard</groupId>
<artifactId>PamguardBeta</artifactId>
<version>2.02.02</version>
<artifactId>Pamguard</artifactId>
<version>2.02.03</version>
<name>Pamguard Java12+</name>
<description>Pamguard for Java 12+, using Maven to control dependcies</description>
<url>www.pamguard.org</url>
@ -772,7 +772,7 @@
<version>1.0.2</version>
</dependency>
-->
<!-- not in Maven repository -->
<dependency>
<groupId>pamguard.org</groupId>

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -124,10 +124,14 @@ public class AcquisitionProcess extends PamProcess {
// daqStatusDataBlock.
addOutputDataBlock(daqStatusDataBlock);
daqStatusDataBlock.SetLogging(new AcquisitionLogging(daqStatusDataBlock, acquisitionControl));
// if (acquisitionControl.isViewer() || acquisitionControl.isNetRx()) {
daqStatusDataBlock.setBinaryDataSource(new DaqStatusBinaryStore(daqStatusDataBlock, acquisitionControl));
/**
* We really don't wand the binary data source set for normal ops since it stops the data getting
* written to the database by default. When using certain Network receiver settings, they use binary
* type data, so do need it. this will therefore be configured from the network receiver when required.
*/
// daqStatusDataBlock.setBinaryDataSource(new DaqStatusBinaryStore(daqStatusDataBlock, acquisitionControl));
AbstractScrollManager.getScrollManager().addToSpecialDatablock(daqStatusDataBlock);
// }
daqStatusDataBlock.setMixedDirection(PamDataBlock.MIX_INTODATABASE);
setupDataBlock();
@ -916,9 +920,11 @@ public class AcquisitionProcess extends PamProcess {
*/
public double rawAmplitude2dB(double rawAmplitude, int channel, boolean fast){
channel = checkSingleChannel(channel);
double constantTerm;
if (fast && fixedAmplitudeConstantTerm != 0) {
constantTerm = fixedAmplitudeConstantTerm;
if (fast && fixedAmplitudeConstantTerm[channel] != 0) {
constantTerm = fixedAmplitudeConstantTerm[channel];
}
else {
constantTerm = getAmplitudeConstantTerm(channel);
@ -940,6 +946,18 @@ public class AcquisitionProcess extends PamProcess {
return dB;
}
/**
* Check it's a single channel and not a channel map.
* @param channel
* @return single channel if it seemed to be a bitmap.
*/
private int checkSingleChannel(int channel) {
int bitCount = PamUtils.getNumChannels(channel);
if (bitCount > 1 || channel > 32) {
channel = PamUtils.getLowestChannel(channel);
}
return channel;
}
/**
* Some devices may be setting this per channel.
@ -965,17 +983,20 @@ public class AcquisitionProcess extends PamProcess {
* like preamp gain will remain constant. Contains a constant
* term in the SPL calculations bases on preamp gains and
* hdrophone sensitivities.
* Changes to be channel specific since with multi threading it goes horribly
* wrong if different channels have different sensitivities.
*/
double fixedAmplitudeConstantTerm;
private double[] fixedAmplitudeConstantTerm = new double[PamConstants.MAX_CHANNELS];
DaqSystem ampSystem;
private DaqSystem ampSystem;
/**
* Gets the fixedAmplitudeConstantTerm based on channel and hydrophone
* numbers.
* Gets the fixedAmplitudeConstantTerm based on channel and hydrophone This is
* the hydrophone sensitivity + all gains + ADC sensitivity in counts / volt.
* @param channel = single software channel
* @return constant term for amplitude calculations
*/
private double getAmplitudeConstantTerm(int channel) {
channel = checkSingleChannel(channel);
// need to fish around a bit working out which hydrophone it is, etc.
PamArray array = ArrayManager.getArrayManager().getCurrentArray();
int hydrophoneChannel = acquisitionControl.getChannelHydrophone(channel);
@ -996,12 +1017,14 @@ public class AcquisitionProcess extends PamProcess {
}
return (hSens + preamp.getGain() + xtra);
}
/**
* Prepares for fast amplitude calculations
* @param channel
*/
public void prepareFastAmplitudeCalculation(int channel) {
fixedAmplitudeConstantTerm = getAmplitudeConstantTerm(channel);
public double prepareFastAmplitudeCalculation(int channel) {
channel = checkSingleChannel(channel);
return fixedAmplitudeConstantTerm[channel] = getAmplitudeConstantTerm(channel);
}
/**

View File

@ -558,23 +558,35 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{
boolean ans = false;
if (folderInputParameters.mergeFiles == false) return false;
long fileEndTime = 0;
long currFileStart = 0;
long currFileLength = 0;
long currFileEnd = 0;
if (currentFile >= 0) {
try {
WavFileType currentWav = allFiles.get(currentFile);
currFileStart = getFileStartTime(currentWav.getAbsoluteFile());
if (audioStream != null) {
fileSamples = audioStream.getFrameLength();
currFileLength = (long) (fileSamples * 1000 / audioStream.getFormat().getFrameRate());
currFileEnd = currFileStart + currFileLength;
}
}
catch (Exception e) {
}
}
if (currFileEnd == 0) {
// System.out.println("OpenNextfile " + currentFile + " " + allFiles.get(currentFile).getName());
// also check to see if the start time of the next file is the same as the
// end time of the current file.
currFileEnd = PamCalendar.getTimeInMillis();
long lastBit = (long) ((blockSamples * 1000L) / getSampleRate());
currFileEnd += lastBit;
}
if (++currentFile < allFiles.size()) {
if (currentFile >= 0) {
WavFileType currentWav = allFiles.get(currentFile);
fileEndTime = getFileStartTime(currentWav.getAbsoluteFile());
fileEndTime += currentWav.getDurationInSeconds()* 1000.;
}
else {
// System.out.println("OpenNextfile " + currentFile + " " + allFiles.get(currentFile).getName());
// also check to see if the start time of the next file is the same as the
// end time of the current file.
fileEndTime = PamCalendar.getTimeInMillis();
long lastBit = (long) ((blockSamples * 1000L) / getSampleRate());
fileEndTime += lastBit;
}
long newStartTime = getFileStartTime(getCurrentFile());
long diff = newStartTime - fileEndTime;
long diff = newStartTime - currFileEnd;
if (diff > 2000 || diff < -5000 || newStartTime == 0) {
currentFile--;
return false;

View File

@ -264,7 +264,8 @@ public class StandardFileDate implements FileDate, PamSettings {
// System.out.println(d);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// e.printStackTrace();
System.out.println(e.getMessage());
} //throws ParseException if no match
setLastFormat(forcedDateFormat);
return d.getTime();

View File

@ -109,7 +109,12 @@ public class FilterControl extends PamControlledUnit implements PamSettings {
public void notifyModelChanged(int changeType) {
//System.out.println("FFTControl: notifyModelChanged : " +changeType);
super.notifyModelChanged(changeType);
if (filterGUIFX!=null) filterGUIFX.notifyGUIChange(changeType);
if (changeType == PamController.INITIALIZATION_COMPLETE) {
filterProcess.setupProcess();
}
if (filterGUIFX!=null) {
filterGUIFX.notifyGUIChange(changeType);
}
}
public Serializable getSettingsReference() {

View File

@ -75,8 +75,12 @@ public class FilterProcess extends PamProcess {
if (rawDataBlock == null) {
return;
}
filterControl.filterParams.channelBitmap &= rawDataBlock.getChannelMap();
outputData.setChannelMap(filterControl.filterParams.channelBitmap);
boolean initComplete = PamController.getInstance().isInitializationComplete();
if (initComplete) {
int rawChannels = rawDataBlock.getChannelMap();
filterControl.filterParams.channelBitmap &= rawDataBlock.getChannelMap();
outputData.setChannelMap(filterControl.filterParams.channelBitmap);
}
int maxChan = PamUtils.getHighestChannel(filterControl.filterParams.channelBitmap);
iirfFilters = new Filter[maxChan+1];
FilterMethod filterMethod = FilterMethod.createFilterMethod(getSampleRate(), filterControl.filterParams.filterParams);

View File

@ -2461,7 +2461,8 @@ public class PamController implements PamControllerInterface, PamSettings {
}
/**
* Respond to storage options dialog.
* Respond to storage options dialog. Selects whethere data
* are stored in binary, database or both
* @param parentFrame
*/
public void storageOptions(JFrame parentFrame) {

View File

@ -16,7 +16,7 @@ public class PamguardVersionInfo {
* @return release type
*/
static public ReleaseType getReleaseType() {
return ReleaseType.BETA;
return ReleaseType.CORE;
}
/**
@ -36,15 +36,19 @@ public class PamguardVersionInfo {
/**
* Release date
*/
static public final String date = "22 October 2021";
static public final String date = "8 February 2022";
// /**
// * Release type - Beta or Core
// */
// static public final String release = "SMRU";
static public final String revisionString = "$Rev: 6240 $";
/**
* This is redundant now that we're no longer using SVN.
* Will have to do a better job of updating the version number
* and correctly tagging code in the git repo.
*/
// static public final String revisionString = "$Rev: 6240 $";
/**
* GNU License statement
@ -70,33 +74,34 @@ public class PamguardVersionInfo {
/**
* @return the code revision number from the SVN repository
*/
static public int getRevision() {
try {
int spacePos = revisionString.indexOf(' ');
if (spacePos == -1) {
return 0;
}
String newStr = revisionString.substring(spacePos+1);
spacePos = newStr.indexOf(' ');
if (spacePos > 0) {
newStr = newStr.substring(0, spacePos);
}
return Integer.valueOf(newStr);
}
catch (NumberFormatException e) {
return 0;
}
}
// /**
// * @return the code revision number from the SVN repository
// */
// static public int getRevision() {
// try {
// int spacePos = revisionString.indexOf(' ');
// if (spacePos == -1) {
// return 0;
// }
// String newStr = revisionString.substring(spacePos+1);
// spacePos = newStr.indexOf(' ');
// if (spacePos > 0) {
// newStr = newStr.substring(0, spacePos);
// }
// return Integer.valueOf(newStr);
// }
// catch (NumberFormatException e) {
// return 0;
// }
// }
/**
* Don't delete this - it's required by the installer builder.
* @param args
*/
public static void main(String[] args){
System.out.println("VerNam:"+getReleaseType().toString()+":VerNum:"+version+":Rev:"+getRevision()+":D:"+date);
// System.out.println("VerNam:"+getReleaseType().toString()+":VerNum:"+version+":Rev:"+getRevision()+":D:"+date);
System.out.println("VerNam:"+getReleaseType().toString()+":VerNum:"+version+":D:"+date);
}
}

View File

@ -235,7 +235,7 @@ public class PamguardXMLWriter implements PamSettings {
String name = pamController.getPSFName();
info.setAttribute("CONFIGURATION", name);
info.setAttribute("VERSION", PamguardVersionInfo.version);
info.setAttribute("REVISION", PamguardVersionInfo.revisionString);
// info.setAttribute("REVISION", PamguardVersionInfo.revisionString);
info.setAttribute("RELEASETYPE", PamguardVersionInfo.getReleaseType().toString());
info.setAttribute("JAVA", VersionInfo.getVersion());
return info;
@ -823,7 +823,7 @@ public class PamguardXMLWriter implements PamSettings {
root.appendChild(vInfo);
vInfo.setAttribute("Created", PamCalendar.formatDateTime(System.currentTimeMillis()));
vInfo.setAttribute("Version", PamguardVersionInfo.version);
vInfo.setAttribute("Revision", PamguardVersionInfo.revisionString);
// vInfo.setAttribute("Revision", PamguardVersionInfo.revisionString);
vInfo.setAttribute("ReleaseType", PamguardVersionInfo.getReleaseType().toString());

View File

@ -51,6 +51,7 @@ public class PamUtils {
channels++;
}
}
/*
* Looks like this has been returning 1 instead of -1 for many years.
* May need to revert to this behaviour if modules have come to depend
@ -58,6 +59,7 @@ public class PamUtils {
*/
if (channels > 1)
return -1;
return singleChan;
}

View File

@ -10,6 +10,7 @@ import javax.swing.JMenuItem;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import KernelSmoothing.KernelSmoothingProcess;
import PamController.PamControlledUnit;
import PamController.PamControlledUnitSettings;
import PamController.PamController;
@ -20,6 +21,8 @@ import PamUtils.PamUtils;
import PamView.GroupedDataSource;
import PamView.GroupedSourceParameters;
import PamView.dialog.GroupedSourcePanel;
import PamguardMVC.PamDataBlock;
import PamguardMVC.ProcessAnnotation;
/**
* Exact implementation of the 2003 Right Whale detector I developed when I was
@ -85,6 +88,19 @@ public class RWEControl extends PamControlledUnit implements PamSettings {
rweProcess.setupProcesses();
}
}
/**
* Check that the input process has implemented kernel smoothing.
* @param inputBlock input data block (should be fft data).
* @return true if kernel smoothing is in place.
*/
protected boolean hasKernelSmoothing(PamDataBlock inputBlock) {
if (inputBlock == null) {
return false;
}
ProcessAnnotation an = inputBlock.findAnnotation(KernelSmoothingProcess.processType, KernelSmoothingProcess.processName);
return an != null;
}
@Override

View File

@ -5,6 +5,7 @@ import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Window;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
@ -29,11 +30,15 @@ public class RWEDialog extends PamDialog {
private static RWEDialog singleInstance;
private SourcePanel sourcePanel;
private RWEControl rweControl;
private JTextField startFreq, endFreq, thresholdDB;
private JTextField minSoundType;
private JCheckBox downThreshold;
private RWEDialog(Window parentFrame) {
private RWEDialog(RWEControl rweControl, Window parentFrame) {
super(parentFrame, "Right Whale Edge Detector Settings", true);
this.rweControl = rweControl;
sourcePanel = new SourcePanel(this, "Source and Channels",
FFTDataUnit.class, true, true);
sourcePanel.setSourceToolTip("Data source should be the output of a Spectrogram Smmothing Kernel");
@ -67,6 +72,11 @@ public class RWEDialog extends PamDialog {
addComponent(det, thresholdDB = new JTextField(5), c);
c.gridx++;
addComponent(det, new JLabel(" dB", SwingConstants.RIGHT), c);
c.gridy++;
c.gridx = 0;
addComponent(det, new JLabel("Appy down threshold ", SwingConstants.RIGHT), c);
c.gridx++;
addComponent(det, downThreshold = new JCheckBox(), c);
JPanel cl = new JPanel(new GridBagLayout());
cl.setBorder(new TitledBorder("Detection"));
@ -85,6 +95,7 @@ public class RWEDialog extends PamDialog {
}
txt += "</html>";
minSoundType.setToolTipText(txt);
downThreshold.setToolTipText("Applies threshold as dB down from the peak, as well as up from the noise floor");
pp.add(BorderLayout.NORTH, det);
pp.add(BorderLayout.CENTER, cl);
@ -96,8 +107,8 @@ public class RWEDialog extends PamDialog {
}
public static RWEParameters showDialog(Window frame, RWEControl rweControl) {
if (singleInstance == null || frame != singleInstance.getOwner()) {
singleInstance = new RWEDialog(frame);
if (singleInstance == null || frame != singleInstance.getOwner() || rweControl != singleInstance.rweControl) {
singleInstance = new RWEDialog(rweControl, frame);
}
singleInstance.rweParameters = rweControl.rweParameters.clone();
singleInstance.setParams();
@ -113,6 +124,7 @@ public class RWEDialog extends PamDialog {
endFreq.setText(String.format("%3.1f", rweParameters.endFreq));
double thDB = 10. * Math.log10(rweParameters.threshold);
thresholdDB.setText(String.format("%3.1f", thDB));
downThreshold.setSelected(rweParameters.downThreshold);
minSoundType.setText(String.format("%d", rweParameters.minSoundType));
}
@ -120,6 +132,7 @@ public class RWEDialog extends PamDialog {
public boolean getParams() {
rweParameters.channelMap = sourcePanel.getChannelList();
rweParameters.dataSourceName = sourcePanel.getSource().getDataName();
rweParameters.downThreshold = downThreshold.isSelected();
if (rweParameters.dataSourceName == null) {
return showWarning("You must select a valid input data source");
}
@ -137,26 +150,13 @@ public class RWEDialog extends PamDialog {
catch (NumberFormatException e) {
return showWarning("Invalid detection or classification parameter");
}
boolean gok = checkInputProcessing();
if (gok == false) {
return showWarning("Right whale detector input must include Gaussian Kernel Smoothing as part of the FFT module, or a stand alone smoothing module");
}
// boolean gok = rweControl.hasKernelSmoothing(sourcePanel.getSource());
// if (gok == false) {
// return showWarning("Right whale detector input must include Gaussian Kernel Smoothing as part of the FFT module, or a stand alone smoothing module");
// }
return true;
}
/**
* Check that the input process has implemented kernel smoothing.
* @return
*/
private boolean checkInputProcessing() {
PamDataBlock db = sourcePanel.getSource();
if (db == null) {
return false;
}
ProcessAnnotation an = db.findAnnotation(KernelSmoothingProcess.processType, KernelSmoothingProcess.processName);
return an != null;
}
@Override
public void cancelButtonPressed() {
rweParameters = null;

View File

@ -27,6 +27,8 @@ public class RWEParameters implements Serializable, Cloneable, ManagedParameters
public int minSoundType = 5;
public boolean downThreshold = false;
@Override
protected RWEParameters clone() {
try {

View File

@ -16,6 +16,7 @@ import fftManager.Complex;
import fftManager.FFTDataBlock;
import fftManager.FFTDataUnit;
import networkTransfer.receive.BuoyStatusDataUnit;
import spectrogramNoiseReduction.kernelSmoothing.KernelSmoothing;
import whistlesAndMoans.WhistleBearingInfo;
import PamController.PamController;
import PamDetection.AbstractLocalisation;
@ -43,6 +44,11 @@ public class RWEProcess extends PamProcess {
private Hashtable<Integer, BearingLocaliser> bearingLocalisers;
private StandardSymbolManager symbolManager;
/**
* Already has Kernel smoothing applied to input data.
*/
private boolean isPreSmoothed;
private KernelSmoothing kernelSmoothing;
public RWEProcess(RWEControl rweControl) {
super(rweControl, null);
@ -96,6 +102,18 @@ public class RWEProcess extends PamProcess {
if (sourceDataBlock == null) {
return;
}
/**
* work out if the fft source has already run the Guassian smoothing or not
*/
isPreSmoothed = rweControl.hasKernelSmoothing(sourceDataBlock);
if (isPreSmoothed) {
kernelSmoothing = null;
}
else {
kernelSmoothing = new KernelSmoothing();
kernelSmoothing.initialise(sourceDataBlock.getChannelMap());
}
// sourceDataBlock.findAnnotation(null);
// rweDataBlock.setChannelMap(rweControl.rweParameters.channelMap);
rweDataBlock.sortOutputMaps(sourceDataBlock.getChannelMap(), sourceDataBlock.getSequenceMapObject(), rweControl.rweParameters.channelMap);
if (db == null) {
@ -135,6 +153,7 @@ public class RWEProcess extends PamProcess {
private int numOT; // number of bins in last analysed slice over threshold
private int minSoundType;
private RWClassifier classifier = new RWStandardClassifier();
public RWEChannelProcess(RWEProcess rweProcess, int iChannel) {
this.rweProcess = rweProcess;
this.iChannel = iChannel;
@ -160,6 +179,15 @@ public class RWEProcess extends PamProcess {
public void newData(FFTDataUnit fftDataUnit) {
if (!isPreSmoothed) {
FFTDataUnit newFFTUnit = new FFTDataUnit(fftDataUnit.getTimeMilliseconds(), fftDataUnit.getChannelBitmap(),
fftDataUnit.getStartSample(), fftDataUnit.getSampleDuration(), null, fftDataUnit.getFftSlice());
newFFTUnit.setSequenceBitmap(fftDataUnit.getSequenceBitmapObject());
newFFTUnit.setFftData(fftDataUnit.getFftData().clone());
kernelSmoothing.runNoiseReduction(newFFTUnit);
fftDataUnit = newFFTUnit;
}
RWEDetectionPeak[] newPeaks = findPeaks(fftDataUnit.getFftData());
RWESound[] newSounds = findSounds(fftDataUnit.getTimeMilliseconds(), newPeaks);
if (newSounds == null) {
@ -197,6 +225,7 @@ public class RWEProcess extends PamProcess {
RWEDetectionPeak[] detectedPeaks = null;
int nPeaks = 0;
int nOver = 0;
double onDown = rweControl.rweParameters.downThreshold ? 1 : 0;
for (int i = searchBin1; i <= searchBin2; i++) {
magData[i] = complexArray.magsq(i);
}
@ -239,7 +268,8 @@ public class RWEProcess extends PamProcess {
// do nothing it it's still off !
}
else {
if (oTh[i]) { // continue peak
// if downThreshold == false then onDown is 0, so second threshold is always on since magData always > 0
if (oTh[i] && magData[i] > newPeak.maxAmp*onDown/threshold) { // continue peak
newPeak.bin2 = i;
if (magData[i] > newPeak.maxAmp) {
newPeak.maxAmp = magData[i];
@ -258,6 +288,16 @@ public class RWEProcess extends PamProcess {
detectedPeaks[nPeaks++] = newPeak;
newPeak = new RWEDetectionPeak(0);
peakOn = false;
// now trim off the start of the peak if it's too wide.
if (onDown > 0) {
for (int ip = newPeak.bin1; ip < newPeak.peakBin; ip++) {
if (magData[ip] < newPeak.maxAmp/threshold) {
newPeak.bin1 = ip+1;
newPeak.signal -= magData[ip];
newPeak.noise -= backgroundData[ip];
}
}
}
}
}
}

View File

@ -69,7 +69,7 @@ public class RWStandardClassifier implements RWClassifier {
@Override
public int getSoundClass(RWESound aSound) {
int soundType = 0;
if (!isTonal(aSound)) {
return 0;
}

View File

@ -10,6 +10,11 @@ import loggerForms.dataselect.FormDataSelCreator;
import loggerForms.dataselect.FormDataSelector;
import loggerForms.monitor.FormsDataSelectorCreator;
/**
* User form data selector for use with annotations. Not normal selectors.
* @author dg50
*
*/
public class UserFormDataSelCreator extends AnnotationDataSelCreator {
private FormDataSelCreator formsDataSelectorCreator;

View File

@ -91,7 +91,7 @@ public class BinaryStorageDialogPanel {
JPanel qb = new JPanel(new BorderLayout());
qb.add(BorderLayout.WEST, q);
qb.setBorder(new TitledBorder("Options"));
qb.setVisible(PamController.getInstance().getRunMode() != PamController.RUN_PAMVIEW);
// qb.setVisible(PamController.getInstance().getRunMode() != PamController.RUN_PAMVIEW);
p.add(BorderLayout.CENTER, qb);

View File

@ -221,9 +221,16 @@ public class DataMapControl extends PamControlledUnit implements PamSettings {
firstTime = Math.min(firstTime, aSettingsSource.getSettings(0).getSettingsTime());
//don't let crazy times from corrupted data make giant datamaps
if (aSettingsSource.getSettings(nSets-1).getSettingsTime()<PamConstants.MAX_DATE_TIME) {
lastTime = Math.max(lastTime, aSettingsSource.getSettings(nSets-1).getSettingsTime());
}
/*
* ALSO, DON'T ALLOW REANALYSIS TIME IN THE FAR FUTURE OVER EXTEND THE DISPLAY TIME
* SINCE WHEN ANALYSING OLD DATA, IT'S INCREASINGLY SQUISHING THE SCROLL BAR AND MAKING IT HARD TO USE
* SO SET A MAX TIME WHICH IS ABOUT 10% BIGGER THAN THE MAX IN THE DATA.
*/
long maxTime = lastTime + (lastTime-firstTime)/10;
// if (aSettingsSource.getSettings(nSets-1).getSettingsTime()<PamConstants.MAX_DATE_TIME) {
// if (aSettingsSource.getSettings(nSets-1).getSettingsTime()<maxTime) {
lastTime = Math.max(lastTime, Math.min(maxTime, aSettingsSource.getSettings(nSets-1).getSettingsTime()));
// }
}
}

View File

@ -417,6 +417,8 @@ public abstract class ScrollingImageSegmenter {
* @param tm - the repaint time in millis.
*/
public void paintImages(GraphicsContext g, TDProjectorFX tdProjector, double scrollStart, long tm) {
//System.out.println("ScrollingImageSegmenter: paintImages: " + tm);
if (tm==0) {
paintImages(g, tdProjector, scrollStart);
return;
@ -452,6 +454,7 @@ public abstract class ScrollingImageSegmenter {
double y1;
double y2;
double tcMillis;
for (int i=0; i<this.imageSegments.size(); i++) {
//Parameters:
// img - the image to be drawn or null.
@ -482,8 +485,8 @@ public abstract class ScrollingImageSegmenter {
y2=tdProjector.getYPix(maxYVal);
// System.out.println("Paint the image: tC: "
// + "" + tC + " tCEnd: " + tCEnd + " tcMillis " + tcMillis + " y1: " + y1 + " y2 " + y2 );
// System.out.println("Paint the image: tC: "
// + "" + tC + " tCEnd: " + tCEnd + " tcMillis " + tcMillis + " y1: " + y1 + " y2 " + y2 );
g.drawImage(imageSegments.get(i),
0,

View File

@ -85,13 +85,25 @@ public abstract class FFTPlotManager {
}
public void lastUnitDrawn(GraphicsContext g, double scrollStart, TDProjectorFX tdProjector,int plotnumber) {
public void lastUnitDrawn(GraphicsContext g, double scrollStart, TDProjectorFX tdProjector, int plotnumber) {
//System.out.println("FFTPlotManager: Last drawn unit1");
if (rawClipInfo.getScaleInfo()==null) return;
int plot = PamUtils.getSingleChannel(rawClipInfo.getScaleInfo().getPlotChannels()[plotnumber]); //needs to be the plot channels because the waveSegmenter is organised by channel
if (rawClipInfo.getScaleInfo()==null){
System.err.println("FFTPlotManager: the rawClipInfo.getScaleInfo() is null");
return;
}
//needs to be the plot channels because the waveSegmenter is organised by channel
int plot = PamUtils.getSingleChannel(rawClipInfo.getScaleInfo().getPlotChannels()[plotnumber]);
if (rawClipInfo.getScaleInfo().getPlotChannels()[plotnumber]==0) plot=0;
// System.out.println("FFTPlotManager: Last drawn unit2: " + " " + rawClipInfo.getScaleInfo().getPlotChannels()[plotnumber] + " " + plotnumber);
//
// System.out.println("FFTPlotManager: Last drawn unit2: " + plot + " rawClipInfo.getScaleInfoIndex(): "
// + rawClipInfo.getScaleInfoIndex() + " " +rawClipInfo.getScaleInfos().indexOf(getFrequencyScaleInfo()));
//only draw the writable images once we have the last data unit.
if (plot>=0 && fftImageSegmenter[plot]!=null && rawClipInfo.getScaleInfoIndex()==rawClipInfo.getScaleInfos().indexOf(getFrequencyScaleInfo())) {
fftImageSegmenter[plot].paintImages(g, tdProjector, scrollStart, 0);
@ -310,7 +322,7 @@ public abstract class FFTPlotManager {
double timeMillisFFT;
int newtc;
//if zero just draw one line to be efficient
// System.out.println("SpectrogramLength: " + spectrogram.length);
//System.out.println("SpectrogramLength: " + spectrogram.length);
//maybe compress image?
@ -331,13 +343,14 @@ public abstract class FFTPlotManager {
tc=newtc;
//double[] minmax = PamUtils.getMinAndMax(spectrogram);
//System.out.println("Plot spectrogram: tc " + tc + " minmax: " + 20*Math.log10(minmax[0])+clipLevel + " " + 20*Math.log10(minmax[1])+ " Clip level: " + clipLevel);
// double[] minmax = PamUtils.getMinAndMax(spectrogram);
// System.out.println("Plot spectrogram: tc " + tc + " minmax: " + 20*Math.log10(minmax[0])+clipLevel + " " + 20*Math.log10(minmax[1])+ " Clip level: " + clipLevel);
//how many lines in the image does the FFT take up?
for (int j=0; j<writableImage.getHeight(); j++) {
writableImage.getPixelWriter().setColor(0, j, Color.BLACK);
//what is the spectrum value for the height?
int spec = (int) ((j/(double) writableImage.getHeight())*spectrogram[i].length);
@ -437,20 +450,20 @@ public abstract class FFTPlotManager {
return dB;
}
// /**
// * Stroke a vertical line in the writable image.
// * @param writableImage - the writable image
// * @param x1 - x start of the line to stroke.
// * @param y1 - y start of the line to stroke.
// * @param x2 - x end of the line to stroke.
// * @param y2 -
// */
// private void strokeLine(WritableImageSegment writableImage, int x1, int y1, int y2, Color color) {
// //weird. y==y2 does not work but i<y2 does?
// for (int i=y1; i<y2; i++) {
// writableImage.getPixelWriter().setColor((int) Math.min(x1, writableImage.getWidth()-1), i, color);
// }
// }
// /**
// * Stroke a vertical line in the writable image.
// * @param writableImage - the writable image
// * @param x1 - x start of the line to stroke.
// * @param y1 - y start of the line to stroke.
// * @param x2 - x end of the line to stroke.
// * @param y2 -
// */
// private void strokeLine(WritableImageSegment writableImage, int x1, int y1, int y2, Color color) {
// //weird. y==y2 does not work but i<y2 does?
// for (int i=y1; i<y2; i++) {
// writableImage.getPixelWriter().setColor((int) Math.min(x1, writableImage.getWidth()-1), i, color);
// }
// }
/**

View File

@ -75,6 +75,7 @@ public abstract class RawWavePlotManager {
int plot = PamUtils.getSingleChannel(rawClipInfo.getScaleInfo().getPlotChannels()[plotnumber]); //needs to be the plot channels because the waveSegmenter is organised by channel
if (rawClipInfo.getScaleInfo().getPlotChannels()[plotnumber]==0) plot=0;
//System.out.println("Plot plot: " + plot + " " + plotnumber);

View File

@ -72,7 +72,7 @@ public class PamFFTProcess extends PamProcess {
private double[] dataToFFT;
private ComplexArray fftData;
// private ComplexArray fftData;
private double[] fftRealBlock;
@ -198,7 +198,7 @@ public class PamFFTProcess extends PamProcess {
channelPointer[i] = 0;
}
}
fftData = new ComplexArray(fftParameters.fftLength);
// fftData = new ComplexArray(fftParameters.fftLength);
/*
* Tell the output data block - should then get passed on to Spectrogram
* display which can come back and work it out for itself that life has

View File

@ -87,6 +87,7 @@ public class GPLProcess extends PamBlockProcess {
addOutputDataBlock(whitenedSpectrogram);
stateDataBlock = new GPLStateDataBlock(this, 0);
stateDataBlock.setBinaryDataSource(new GPLStateDataSource(stateDataBlock));
addOutputDataBlock(stateDataBlock);
gplDetectionBlock = new GPLDetectionBlock(this);
@ -780,12 +781,13 @@ public class GPLProcess extends PamBlockProcess {
// quiet.noise_floor = 1.;
/**
* This is the call to the detector, which is remembering state, will mostly return
* null, but when there has been a detection, will return an object with time and
* frequency information.
*/
}
}
/**
* This is the call to the detector, which is remembering state, will mostly return
* null, but when there has been a detection, will return an object with time and
* frequency information.
*/
public void runDetector(FFTDataUnit fftDataUnit, double[] wData, double base_in, double ceilnoise, double threshfloor) {
// DetectedPeak newPeak = peakDetector.detectPeaks(fftDataUnit, wData, base_in,
// gplParams.noise_ceiling * noise_floor, gplParams.thresh * noise_floor);

View File

@ -0,0 +1,109 @@
package gpl;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import PamguardMVC.PamDataBlock;
import PamguardMVC.PamDataUnit;
import binaryFileStorage.BinaryDataSource;
import binaryFileStorage.BinaryHeader;
import binaryFileStorage.BinaryObjectData;
import binaryFileStorage.ModuleFooter;
import binaryFileStorage.ModuleHeader;
public class GPLStateDataSource extends BinaryDataSource {
private GPLStateDataBlock gplStateDataBlock;
private ByteArrayOutputStream bos;
private DataOutputStream dos;
public GPLStateDataSource(GPLStateDataBlock gplStateDataBlock) {
super(gplStateDataBlock);
this.gplStateDataBlock = gplStateDataBlock;
}
@Override
public String getStreamName() {
return "GPL State";
}
@Override
public int getStreamVersion() {
return 0;
}
@Override
public int getModuleVersion() {
return 0;
}
@Override
public byte[] getModuleHeaderData() {
// TODO Auto-generated method stub
return null;
}
@Override
public PamDataUnit sinkData(BinaryObjectData binaryObjectData, BinaryHeader bh, int moduleVersion) {
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(binaryObjectData.getData()));
try {
double baseline = dis.readFloat();
double ceilnoise = dis.readFloat();
double threshfloor = dis.readFloat();;
int state = dis.readShort();
GPLStateDataUnit stateData = new GPLStateDataUnit(binaryObjectData.getDataUnitBaseData(), baseline, ceilnoise, threshfloor, state);
return stateData;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
public ModuleHeader sinkModuleHeader(BinaryObjectData binaryObjectData, BinaryHeader bh) {
// TODO Auto-generated method stub
return null;
}
@Override
public ModuleFooter sinkModuleFooter(BinaryObjectData binaryObjectData, BinaryHeader bh,
ModuleHeader moduleHeader) {
return null;
}
@Override
public BinaryObjectData getPackedData(PamDataUnit pamDataUnit) {
if (bos == null) {
bos = new ByteArrayOutputStream(14);
dos = new DataOutputStream(bos);
}
else {
bos.reset();
}
GPLStateDataUnit stateData = (GPLStateDataUnit) pamDataUnit;
try {
dos.writeFloat((float) stateData.getBaseline());
dos.writeFloat((float) stateData.getCeilnoise());
dos.writeFloat((float) stateData.getThreshfloor());
dos.writeShort((short) stateData.getPeakState());
} catch (IOException e) {
e.printStackTrace();
}
BinaryObjectData bod = new BinaryObjectData(1, bos.toByteArray());
return bod;
}
@Override
public void newFileOpened(File outputFile) {
// TODO Auto-generated method stub
}
}

View File

@ -1,5 +1,6 @@
package gpl;
import PamguardMVC.DataUnitBaseData;
import PamguardMVC.PamDataUnit;
public class GPLStateDataUnit extends PamDataUnit {
@ -30,6 +31,23 @@ public class GPLStateDataUnit extends PamDataUnit {
this.threshfloor = threshfloor;
}
/**
* constructor used reading back from binary files.
* @param baseData
* @param baseline
* @param ceilnoise
* @param threshfloor
* @param peakState
*/
public GPLStateDataUnit(DataUnitBaseData baseData,double baseline,
double ceilnoise, double threshfloor, int peakState) {
super(baseData);
this.baseline = baseline;
this.peakState = peakState;
this.ceilnoise = ceilnoise;
this.threshfloor = threshfloor;
}
/**
* @return the ceilnoise
*/

View File

@ -44,7 +44,7 @@ public class FormPlotOptions implements Serializable, Cloneable, ManagedParamete
*/
public boolean isPlotControl(int controlIndex, int itemIndex) {
checkDimension(controlIndex, itemIndex);
return controlChoices[controlIndex][itemIndex];
return controlChoices[controlIndex][itemIndex] | true;
}
/**

View File

@ -4,6 +4,10 @@ import PamController.PamController;
import PamguardMVC.PamDataBlock;
import PamguardMVC.PamDataUnit;
import PamguardMVC.PamProcess;
import PamguardMVC.dataSelector.DataSelector;
import PamguardMVC.dataSelector.DataSelectorCreator;
import loggerForms.dataselect.FormDataSelCreator;
import loggerForms.monitor.FormsDataSelectorCreator;
/**
*
* @author Graham Weatherup
@ -18,6 +22,7 @@ public class FormsDataBlock extends PamDataBlock<FormsDataUnit> {
super(FormsDataUnit.class, dataName, parentProcess, channelMap);
this.formDescription = formDescription;
setNaturalLifetime(600);
setDataSelectCreator(new FormDataSelCreator(this, formDescription));
// setBinaryDataSource(new FormsBinaryIO(formDescription.getFormsControl(), this));
// setNaturalLifetimeMillis(60000);
}
@ -26,6 +31,18 @@ public class FormsDataBlock extends PamDataBlock<FormsDataUnit> {
return formDescription;
}
// @Override
// public DataSelector getDataSelector(String selectorName, boolean allowScores, String selectorType) {
// // TODO Auto-generated method stub
// return super.getDataSelector(selectorName, allowScores, selectorType);
// }
//
// @Override
// public DataSelectorCreator getDataSelectCreator() {
//
// dataSelectorCreator = new FormDataSelCreator(this, formDescription);
// }
/**
* Override this for Logger forms so that they always save.
* @param pamDataUnit dataunit to consider

View File

@ -1,5 +1,6 @@
package loggerForms;
import GPS.GpsData;
import PamUtils.PamCalendar;
import PamguardMVC.PamDataUnit;
/**
@ -27,6 +28,8 @@ public class FormsDataUnit extends PamDataUnit {
*/
private Object[] formData;
private FormDescription formDescription;
private GpsData formOriginLatLong;
/**
* Constructor for a form data unit.
@ -72,5 +75,23 @@ public class FormsDataUnit extends PamDataUnit {
this.updateDataUnit(PamCalendar.getTimeInMillis());
}
@Override
public GpsData getOriginLatLong(boolean recalculate) {
/**
* Need to do something a bit different here since Logger form data is generally
* not associated with a hydrophone (though that may change in the future).
* All we really want is the primary origin method, which is either GPS data
* or static data and then get the value. mostly people will want the GPS position
* for the time of the logger data, though really we should make a much better way
* of doing this, including offsets from GPS, options to use the hydrophones if
* we want to as a reference, etc.
*/
if (recalculate || formOriginLatLong == null) {
formOriginLatLong = loggerForm.getOriginLatLong(this);
}
return formOriginLatLong;
}
}

View File

@ -25,6 +25,12 @@ import javax.swing.JRootPane;
import javax.swing.JScrollPane;
import javax.swing.Timer;
import Array.streamerOrigin.GPSOriginMethod;
import Array.streamerOrigin.GPSOriginSystem;
import Array.streamerOrigin.HydrophoneOriginMethod;
import Array.streamerOrigin.HydrophoneOriginMethods;
import Array.streamerOrigin.OriginIterator;
import Array.streamerOrigin.StaticOriginSystem;
import loggerForms.PropertyTypes;
import loggerForms.controlDescriptions.ControlDescription;
import loggerForms.controlDescriptions.ControlTypes;
@ -33,6 +39,7 @@ import loggerForms.controls.CounterControl;
import loggerForms.controls.LoggerControl;
import loggerForms.controls.NMEAControl;
import GPS.GPSDataBlock;
import GPS.GpsData;
import GPS.GpsDataUnit;
import NMEA.NMEADataBlock;
import NMEA.NMEADataUnit;
@ -44,6 +51,7 @@ import PamView.dialog.PamDialog;
import PamView.dialog.PamLabel;
import PamView.panel.PamPanel;
import PamView.panel.VerticalLayout;
import PamguardMVC.PamDataBlock;
import PamguardMVC.PamDataUnit;
import PamguardMVC.PamObservable;
import PamguardMVC.PamObserver;
@ -94,6 +102,10 @@ public class LoggerForm{
private boolean hasCounter=false;
private CounterControl counter;
private HydrophoneOriginMethods origins = HydrophoneOriginMethods.getInstance();
/**
* @return the hasCounter
*/
@ -898,6 +910,32 @@ public class LoggerForm{
public JButton getSaveButton() {
return saveButton;
}
public GpsData getOriginLatLong(FormsDataUnit formsDataUnit) {
GpsData gps = getOrigin(GPSOriginSystem.class, formsDataUnit);
if (gps != null) {
return gps;
}
gps = getOrigin(StaticOriginSystem.class, formsDataUnit);
return gps;
}
private GpsData getOrigin(Class originClass, FormsDataUnit formsDataUnit) {
HydrophoneOriginMethod origin = origins.getMethod(GPSOriginMethod.class, null, null);
if (origin == null) {
return null;
}
OriginIterator gpsIter = origin.getGpsDataIterator(PamDataBlock.ITERATOR_END);
GpsData prev = null;
while (gpsIter.hasPrevious()) {
prev = gpsIter.previous();
if (prev.getTimeInMillis() < formsDataUnit.getTimeMilliseconds()) {
break;
}
}
return prev;
}
// /**
// * @return formsDataUnit

View File

@ -97,7 +97,7 @@ public class LoadOptionsDialog extends PamDialog {
// parentComponent.getp
setDialogComponent(panel);
// setSize(new Dimension(300,200));
pack();
// pack();
setLocationRelativeTo(parentComponent);
@ -173,6 +173,7 @@ public class LoadOptionsDialog extends PamDialog {
stepSize.setText(String.format("%d", scroller.scrollerData.pageStep));
minDuration = scrollerData.getStepSizeMillis()*100;
maxDuration = minDuration * 1000000;
pack();
}
private void setDuration(long duration) {

View File

@ -266,7 +266,7 @@ public class Pamguard {
}
System.out.println("PAMGUARD Version " + PamguardVersionInfo.version + " branch " + PamguardVersionInfo.getReleaseType().toString());
System.out.println("Revision " + PamguardVersionInfo.getRevision());
// System.out.println("Revision " + PamguardVersionInfo.getRevision());
System.out.println("Build Date " + PamguardVersionInfo.date);
writePropertyString("user.dir");
writePropertyString("java.home");

View File

@ -230,7 +230,7 @@ public class PamguardFX extends Application {
}
System.out.println("PAMGUARD Version " + PamguardVersionInfo.version + " branch " + PamguardVersionInfo.getReleaseType().toString());
System.out.println("Revision " + PamguardVersionInfo.getRevision());
// System.out.println("Revision " + PamguardVersionInfo.getRevision());
System.out.println("Build Date " + PamguardVersionInfo.date);
writePropertyString("java.home");
writePropertyString("java.name");

View File

@ -91,9 +91,8 @@ public class KetosClassifier implements DLClassiferModel, PamSettings {
// System.out.println("SoundSpotClassifier: PamCalendar.isSoundFile(): "
// + PamCalendar.isSoundFile() + " " + (PamCalendar.isSoundFile() && !forceQueue));
/**
* If a sound file is being analysed then SoundSpot can go as slow as it wants. if used in real time
* If a sound file is being analysed then Ketos can go as slow as it wants. if used in real time
* then there is a buffer with a maximum queue size.
*/
if ((PamCalendar.isSoundFile() && !forceQueue) || dlControl.isViewer()) {
@ -132,6 +131,7 @@ public class KetosClassifier implements DLClassiferModel, PamSettings {
public void prepModel() {
//System.out.println("PrepModel! !!!");
getKetosWorker().prepModel(ketosDLParams, dlControl);
if (!ketosDLParams.useDefaultTransfroms) {
//set custom transforms in the model.
getKetosWorker().setModelTransforms(ketosDLParams.dlTransfroms);

View File

@ -7,9 +7,9 @@ import PamView.PamOldSymbolManager;
public class VRSymbolManager implements ManagedSymbol {
PamSymbol symbol;
private PamSymbol symbol;
ManagedSymbolInfo symbolInfo;
private ManagedSymbolInfo symbolInfo;
public VRSymbolManager(PamSymbol defSymbol, String description) {
symbolInfo = new ManagedSymbolInfo(description);