Small changes to support batch process module

A couple of small changes to add functionality for batch processor
This commit is contained in:
Douglas Gillespie 2024-12-05 15:06:39 +00:00
parent 42efd2b765
commit 543779bbf1
3 changed files with 106 additions and 50 deletions

View File

@ -499,6 +499,9 @@ to first available input source. </p>
<p class=MsoNormal>Fixed units on spectrogram displays for air based
measurements.</p>
<p class=MsoNormal>Fixed bug in whistle and moan detector graphics that caused
whistles with branches to not draw.</p>
<h1>Version 2.02.14 October 2024</h1>
<h2>New Features</h2>
@ -571,14 +574,14 @@ Visualiser, Audacity etc.)</p>
<h2>Tethys Database</h2>
<p class=MsoNormal>Many users will be aware that were integrating an interface
to the <a href="https://tethys.sdsu.edu/">Tethys Database</a> into PAMGuard. Some
basic features are available for testing. If interested, please contact the
PAMGuard support team. </p>
to the <a href="https://tethys.sdsu.edu/">Tethys Database</a> into PAMGuard.
Some basic features are available for testing. If interested, please contact
the PAMGuard support team. </p>
<h2>Bug Fixes</h2>
<p class=MsoNormal>Linking clicks to offline clicks table. We had a database that
had become corrupted so added code to relink offline clicks to their
<p class=MsoNormal>Linking clicks to offline clicks table. We had a database
that had become corrupted so added code to relink offline clicks to their
corresponding clicks from binary data. </p>
<p class=MsoNormal>Drawing non-acoustic data: Data that were not associated
@ -677,8 +680,8 @@ do it here.</span></p>
Bug crashing the module with null pointer errors fixed.</span></p>
<p class=MsoNormal><b><span lang=EN-US>Whistle Detector</span></b><span
lang=EN-US>: Fixed bug which caused the detector to slow to almost zero speed when
large complex sounds with many branches were detected. </span></p>
lang=EN-US>: Fixed bug which caused the detector to slow to almost zero speed
when large complex sounds with many branches were detected. </span></p>
<p class=MsoNormal><b><span lang=EN-US>Click Detector Offline Event Marking</span></b><span
lang=EN-US>: Fixed problem of events not being correctly deleted and also of
@ -1223,8 +1226,9 @@ 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)
@ -1340,10 +1344,10 @@ lang=EN-US> </span>Add functionality for bluetooth headsets. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>2. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span>Add user-facing option to adjust the startup delay for the
time-correction (Global Time module). This provides a workaround to speed up analysis
of thousands of wav files (i.e. by setting startup delay to 0 instead of
default value of 2000 ms). </p>
lang=EN-US> </span>Add user-facing option to adjust the startup delay for the time-correction
(Global Time module). This provides a workaround to speed up analysis of
thousands of wav files (i.e. by setting startup delay to 0 instead of default
value of 2000 ms). </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>3. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
@ -1515,8 +1519,8 @@ classify clicks. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>2. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span>Added option in Sound Acquisition settings dialog to
override filename time stamp and use PC local time instead. </p>
lang=EN-US> </span>Added option in Sound Acquisition settings dialog to override
filename time stamp and use PC local time instead. </p>
<p class=MsoListParagraph style='text-indent:-18.0pt'><span lang=EN-US>3. </span><span
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
@ -1751,8 +1755,8 @@ lang=EN-US> </span>Send Email option added to Alarm module.</p>
lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span
lang=EN-US> </span>Added ability to scale the PAMGuard display (go to <em><span
style='font-family:"Calibri",sans-serif'>Help &gt; Set Display Scaling Factor</span></em>
to adjust the scale). This, in conjunction with the built-in Windows Display
Scaling feature, will hopefully help with issues sometimes found when using
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>
@ -2430,8 +2434,8 @@ the new version. However please note the following:</span></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-36.0pt'><span
lang=EN-US>1.</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang=EN-US>New classes will be added to the configuration files, so
they will no longer work with older PAMGuard versions.</span></p>
</span><span lang=EN-US>New classes will be added to the configuration files,
so they will no longer work with older PAMGuard versions.</span></p>
<p class=MsoListParagraph style='margin-left:54.0pt;text-indent:-36.0pt'><span
lang=EN-US>2.</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
@ -2554,19 +2558,19 @@ milliseconds. However, getDuration actually returns the number of samples.
<p class=MsoNormal><b><span lang=EN-US>Plug-Ins</span></b></p>
<p class=MsoNormal><span lang=EN-US>A major change in this version of PAMGuard is
how plug-ins are managed. PAMGuard now has the ability to dynamically load
<p class=MsoNormal><span lang=EN-US>A major change in this version of PAMGuard
is how plug-ins are managed. PAMGuard now has the ability to dynamically load
plug-in modules (saved as jar files) at runtime. This will greatly simplify the
process of testing and distributing newly developed modules, since only a small
jar file will be required rather than a new bespoke PAMGuard installation.</span></p>
<p class=MsoNormal><span lang=EN-US>Module code development remains largely
unchanged, in most cases simply requiring the addition of an interface class.
<p class=MsoNormal><span lang=EN-US>Module code development remains largely unchanged,
in most cases simply requiring the addition of an interface class.
&nbsp;Instructions for the development of new modules utilizing the plug-in
system can be found <a href="http://www.PAMGuard.org/16_HowtomakePlug-Ins.html"
scheme can be found>here</a>. &nbsp;Plug-in modules can be downloaded from the PAMGuard
website here, but developers are encouraged to host and maintain their own
modules.</span></p>
scheme can be found>here</a>. &nbsp;Plug-in modules can be downloaded from the
PAMGuard website here, but developers are encouraged to host and maintain their
own modules.</span></p>
<p class=MsoNormal><span lang=EN-US>Modules of interest to the general PAM
community will remain as part of the core PAMGuard installation. However,
@ -2887,9 +2891,9 @@ easy to understand options have been developed in a new options dialog.</p>
<p class=MsoListParagraph style='margin-left:38.25pt;text-indent:-20.25pt'>9.<span
style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>Bug 281. Click classification dialog has grown too big to fit on the screen.
The options have now been split across three tabbed panes which solves the
problem.</p>
</span>Bug 281. Click classification dialog has grown too big to fit on the
screen. The options have now been split across three tabbed panes which solves
the problem.</p>
<p class=MsoListParagraph style='margin-left:38.25pt;text-indent:-20.25pt'>10.<span
style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;
@ -3193,10 +3197,10 @@ href="https://sourceforge.net/p/PAMGuard/bugs">https://sourceforge.net/p/PAMGuar
<p class=MsoListParagraph style='margin-left:47.25pt;text-indent:-29.25pt'><span
lang=EN-US>1.</span><span lang=EN-US style='font-size:7.0pt;font-family:"Times New Roman",serif'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</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
</span>Spectrogram annotation marks. A simple system for marking spectrograms during
real time analysis has been incorporated. To use it, add the module, in the
spectrogram settings, select the annotation marks in the 'Mark Observers' tab
of the spectrogram configuration dialog, and also right click on the
spectrogram and select to display the annotations. Annotations are saved to the
database so you will also need a database module in your configuration. &nbsp;</p>
@ -3466,9 +3470,9 @@ of third octave noise bands. See online help for details. </p>
<p class=MsoNormal><i>Filtered Noise Measurement</i> (Sound Processing Group)</p>
<p class=MsoNormal>This module, developed by Douglas Gillespie, measures noise levels
in a single frequency band using a variety of filter functions. See online help
for details. </p>
<p class=MsoNormal>This module, developed by Douglas Gillespie, measures noise
levels in a single frequency band using a variety of filter functions. See
online help for details. </p>
<p class=MsoNormal><i>Envelope Tracing</i> (Beta Only, Sound Processing Group)</p>
@ -3998,11 +4002,11 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<p class=MsoNormal>2. Improved offline viewer functionality. </p>
<p class=MsoNormal>The offline viewer is much improved with better data scrolling
and the ability to view data either stored in the database or the binary
storage system. Work has stated on functions which read and use data stored in
audio files. This is currently limited to re-calculating and displaying
displaying spectrogram data during viewer mode operation.&nbsp; </p>
<p class=MsoNormal>The offline viewer is much improved with better data
scrolling and the ability to view data either stored in the database or the
binary storage system. Work has stated on functions which read and use data
stored in audio files. This is currently limited to re-calculating and
displaying displaying spectrogram data during viewer mode operation.&nbsp; </p>
<p class=MsoNormal>3. Heading sensor readout</p>
@ -4103,8 +4107,8 @@ channels 0 and 1. Similarly if you switched sound cards, you may have to
reconfigure every detector and several of the displays to handle the changes in
channel numbering. </p>
<p class=MsoNormal>I have spent a considerable amount of time trying to work out
a better system for handling channel numbering in PAMGuard and have decided
<p class=MsoNormal>I have spent a considerable amount of time trying to work
out a better system for handling channel numbering in PAMGuard and have decided
that the only practical thing to do is to force all software channel numbering
back to a zero indexed system. i.e. even if you read out hardware channels
3,4,5 and 6, within PAMGuard, everywhere apart from the Sound acquisition
@ -4692,9 +4696,9 @@ a serial port </p>
<p class=MsoNormal>New Likelihood detector. </p>
<p class=MsoNormal>The likelihood detector module is an implementation of a likelihood
ratio test with flexible algorithms and configuration to estimate likelihood.
It is </p>
<p class=MsoNormal>The likelihood detector module is an implementation of a
likelihood ratio test with flexible algorithms and configuration to estimate
likelihood. It is </p>
<p class=MsoNormal>suitable for detecting both short duration Odontocete clicks
(Sperm, Beaked, etc.) as well as moderate duration Mysticete calls (Humpback,
@ -5020,8 +5024,8 @@ Symbol'>'</span><span style='font-size:7.0pt;font-family:"Times New Roman",serif
<p class=MsoNormal>&nbsp;</p>
<p class=MsoNormal><a name="_Toc312065304"></a><a name="_Toc312063949"></a><span
class=Heading2Char><span style='font-size:13.0pt'>1.0Beta 22 Jan 2008 -
PAMGuard starts two releases, core and beta release</span></span>, </p>
class=Heading2Char><span style='font-size:13.0pt'>1.0Beta 22 Jan 2008 - PAMGuard
starts two releases, core and beta release</span></span>, </p>
<p class=MsoNormal>this is the beta release</p>

View File

@ -1,5 +1,6 @@
package PamController;
import java.awt.Window;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
@ -10,7 +11,11 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.JFileChooser;
import PamUtils.PamCalendar;
import PamUtils.PamFileChooser;
import PamUtils.PamFileFilter;
import PamView.dialog.warn.WarnOnce;
import binaryFileStorage.BinaryFooter;
import binaryFileStorage.BinaryHeader;
@ -81,15 +86,32 @@ public class PSFXReadWriter {
* Initially write to a temp file, then rename the temp file.
* @param fileName the name to use for the save file (full name, including path)
* @param timeStamp time stamp in milliseconds
* @return
* @return true on success
*/
public synchronized boolean writePSFX(String fileName, long timeStamp) {
// get an object containing everything we'll need to know.
PamSettingsGroup psg = PamSettingManager.getInstance().getCurrentSettingsGroup();
// force the time stamp to be that given - might need to be exact !
psg.setSettingsTime(timeStamp);
return writePSFX(fileName, psg);
}
/**
* Write settings to the given file<br>
* Initially write to a temp file, then rename the temp file.
* @param fileName the name to use for the save file (full name, including path)
* @param psg PAMGuard settings group
* @return true on success
*/
public synchronized boolean writePSFX(String fileName, PamSettingsGroup psg) {
BinaryHeader header = new BinaryHeader(SETTINGSSTORE, SETTINGSSTORE, SETTINGSSTORE, 0);
long timeStamp = psg.getSettingsTime();
header.setAnalysisDate(timeStamp);
header.setDataDate(timeStamp);
@ -133,6 +155,33 @@ public class PSFXReadWriter {
return true;
}
/**
* Select a psfx file.
* @param toRead if true, only selects existing files with the open dialog.
* @return File or null.
*/
public File selectSettingsFile(Window frame, boolean toRead) {
File start = new File(PamFolders.getDefaultProjectFolder());
JFileChooser jFileChooser = new PamFileChooser(start);
// jFileChooser.setFileFilter(new SettingsFileFilter());
jFileChooser.setApproveButtonText("Select");
PamFileFilter fileFilter = new PamFileFilter("PAMGUARD Settings files", PamSettingManager.getCurrentSettingsFileEnd());
jFileChooser.setFileFilter(fileFilter);
jFileChooser.setAcceptAllFileFilterUsed(false);
// jFileChooser.setFileFilter(new FileNameExtensionFilter("PAMGUARD Settings files", defaultFile));
int state = 0;
if (toRead) {
jFileChooser.showOpenDialog(frame);
}
else {
jFileChooser.showSaveDialog(frame);
}
if (state != JFileChooser.APPROVE_OPTION) return null;
File newFile = jFileChooser.getSelectedFile();
newFile = PamFileFilter.checkFileEnd(newFile, PamSettingManager.getCurrentSettingsFileEnd(), true);
return newFile;
}
private boolean writeData(DataOutputStream dos, int objectId, byte[] data) {
int totalLen = data.length + 16;
int dataLen = data.length;

View File

@ -244,7 +244,7 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
if (dataUnitCopy == null) {
return null;
}
return dataUnitCopy.get(tableRow);
return dataUnitCopy.get(rowIndex);
// return pamDataBlock.getDataUnit(rowIndex, PamDataBlock.REFERENCE_CURRENT);
}
}
@ -286,6 +286,9 @@ public abstract class DataBlockTableView<T extends PamDataUnit> {
* @return
*/
public int getDataIndexForRow(int tableRow) {
if (tableRow == -1) {
return -1;
}
if (dataUnitCopy == null) {
return tableRow;
}