mirror of
https://github.com/PAMGuard/PAMGuard.git
synced 2024-11-25 08:32:32 +00:00
Merge branch 'main' of https://github.com/macster110/PAMGuard
This commit is contained in:
commit
664f47144c
2
.project
2
.project
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>PamGuard Working</name>
|
||||
<name>PamGuard Main</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
|
342
README.html
342
README.html
@ -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>
|
||||
</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'> </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> </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> </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'> &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'> </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'> </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'> </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'> </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'> </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'> </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. 2682–2699, 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. 2682–2699, 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'> </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'> &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'> </span>
|
||||
Added ctrl-p hotkey to print-screen button. </p>
|
||||
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> </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'> </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'> </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'> </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'> </span>
|
||||
@ -1191,8 +1228,8 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &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'> </span>
|
||||
Difar enhancements based on recent field testing.</p>
|
||||
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> </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'> </span>
|
||||
@ -1312,10 +1349,10 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &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'> </span>
|
||||
Added ability to scale the PAMGuard display (go to <em><span style='font-family:
|
||||
"Calibri",sans-serif'>Help > 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'> </span><span
|
||||
lang=EN-US> </span>Added ability to scale the PAMGuard display (go to <em><span
|
||||
style='font-family:"Calibri",sans-serif'>Help > 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'> &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'> </span>
|
||||
Added ability to read differential GPS data.</p>
|
||||
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> </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'> </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'> </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'> </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'> </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'>
|
||||
</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'>
|
||||
@ -1888,9 +1926,9 @@ lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'> &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'> </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'> </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'> </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'>
|
||||
</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'>
|
||||
@ -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'>
|
||||
</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'>
|
||||
</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'>
|
||||
@ -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'>
|
||||
@ -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'> &nb
|
||||
</span>Bug 262. Access to SQLite database conversion. This would fail when
|
||||
tables were present which were not created by PAMGuard. 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> </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'>
|
||||
</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'>
|
||||
@ -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. </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. </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'>
|
||||
@ -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'>
|
||||
</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'> </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'> </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'> </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. Bug 219.
|
||||
Problems displaying Offline Click Events in the Viewer map have been fixed. </p>
|
||||
<p class=MsoListParagraph style='text-indent:-18.0pt'>7. Bug
|
||||
219. Problems displaying Offline Click Events in the Viewer map have been
|
||||
fixed. </p>
|
||||
|
||||
<p class=MsoNormal> </p>
|
||||
|
||||
@ -2987,9 +3025,9 @@ sonobuoys. See online help for details. </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'>
|
||||
</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'>
|
||||
</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'>
|
||||
@ -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'>
|
||||
</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'>
|
||||
</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'>
|
||||
@ -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'>
|
||||
</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. </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. </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'>
|
||||
@ -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. </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 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> </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'>
|
||||
</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'>
|
||||
|
21
buildconfigurations/Build PAMGuard.launch
Normal file
21
buildconfigurations/Build PAMGuard.launch
Normal 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 -Djava.library.path=lib64"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/PamGuard Main}"/>
|
||||
</launchConfiguration>
|
16
buildconfigurations/readme.txt
Normal file
16
buildconfigurations/readme.txt
Normal 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'
|
||||
|
@ -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>
|
||||
|
6
pom.xml
6
pom.xml
@ -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>
|
||||
|
BIN
repo/com/synthbot/jasiohost/1.0.0/jasiohost-1.0.0.jar
Normal file
BIN
repo/com/synthbot/jasiohost/1.0.0/jasiohost-1.0.0.jar
Normal file
Binary file not shown.
BIN
repo/it/sauronsoftware/jave/1.0.2/jave-1.0.2.jar
Normal file
BIN
repo/it/sauronsoftware/jave/1.0.2/jave-1.0.2.jar
Normal file
Binary file not shown.
BIN
repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar
Normal file
BIN
repo/pamguard/org/x3/2.0.0/x3-2.0.0.jar
Normal file
Binary file not shown.
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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() {
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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());
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -27,6 +27,8 @@ public class RWEParameters implements Serializable, Cloneable, ManagedParameters
|
||||
|
||||
public int minSoundType = 5;
|
||||
|
||||
public boolean downThreshold = false;
|
||||
|
||||
@Override
|
||||
protected RWEParameters clone() {
|
||||
try {
|
||||
|
@ -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];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,7 +69,7 @@ public class RWStandardClassifier implements RWClassifier {
|
||||
@Override
|
||||
public int getSoundClass(RWESound aSound) {
|
||||
int soundType = 0;
|
||||
|
||||
|
||||
if (!isTonal(aSound)) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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()));
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
109
src/gpl/GPLStateDataSource.java
Normal file
109
src/gpl/GPLStateDataSource.java
Normal 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
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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");
|
||||
|
@ -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");
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user