click labelling

fixed a couple of problems in click labelling (Viewer mode) when clics
were reassigned to different events.
This commit is contained in:
Douglas Gillespie 2024-01-12 11:57:11 +00:00
parent 0e5bca5198
commit 4856a827df
4 changed files with 40 additions and 3 deletions

View File

@ -26,6 +26,7 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import javax.swing.JMenu; import javax.swing.JMenu;
@ -1071,7 +1072,7 @@ public class ClickControl extends PamControlledUnit implements PamSettings {
subDet.removeSuperDetection(event); subDet.removeSuperDetection(event);
} }
} }
clickDetector.getOfflineEventDataBlock().remove(event); clickDetector.getOfflineEventDataBlock().remove(event, true);
} }
@Override @Override
@ -1168,6 +1169,31 @@ public class ClickControl extends PamControlledUnit implements PamSettings {
return targetMotionLocaliser; return targetMotionLocaliser;
} }
/**
* Remove clicks from existing events, if they have any. They may not.
* This is called whenever clicks are assigned to a new event to make
* sure that they don't end up in two events.
* @param markedClicks
*/
public void removeFromEvents(List<PamDataUnit> markedClicks) {
if (markedClicks == null) {
return;
}
for (PamDataUnit dataUnit : markedClicks) {
OfflineEventDataUnit anEvent = (OfflineEventDataUnit) dataUnit.getSuperDetection(OfflineEventDataUnit.class);
if (anEvent == null) {
continue;
}
anEvent.removeSubDetection(dataUnit);
if (anEvent.getSubDetectionsCount() == 0) {
deleteEvent(anEvent);
}
else {
anEvent.updateDataUnit(System.currentTimeMillis());
}
}
}
/** /**
* Reassign all the clicks on one event to a different event * Reassign all the clicks on one event to a different event
@ -1199,7 +1225,7 @@ public class ClickControl extends PamControlledUnit implements PamSettings {
} }
clickEvent.setComment(clickEvent.getComment() + " Clicks reassigned to event " + reassignEvent.getEventId()); clickEvent.setComment(clickEvent.getComment() + " Clicks reassigned to event " + reassignEvent.getEventId());
offlineEventDataBlock.updatePamData(clickEvent, PamCalendar.getTimeInMillis()); offlineEventDataBlock.updatePamData(clickEvent, PamCalendar.getTimeInMillis());
offlineEventDataBlock.remove(clickEvent); offlineEventDataBlock.remove(clickEvent, true);
reassignEvent.sortSubDetections(); reassignEvent.sortSubDetections();
offlineEventDataBlock.updatePamData(reassignEvent, now); offlineEventDataBlock.updatePamData(reassignEvent, now);
if (ClickTrainDetection.class.isAssignableFrom(reassignEvent.getClass())) { if (ClickTrainDetection.class.isAssignableFrom(reassignEvent.getClass())) {

View File

@ -146,6 +146,7 @@ public class LabelClicksDialog extends PamDialog {
* @param thenClose option to close dialog * @param thenClose option to close dialog
*/ */
private void addClicksToEvent(OfflineEventDataUnit event, boolean thenClose) { private void addClicksToEvent(OfflineEventDataUnit event, boolean thenClose) {
removeFromOldEvent(markedClicks);
event.addSubDetections(markedClicks); event.addSubDetections(markedClicks);
offlineEventListPanel.tableDataChanged(); offlineEventListPanel.tableDataChanged();
clickControl.setLatestOfflineEvent(event); clickControl.setLatestOfflineEvent(event);
@ -154,6 +155,15 @@ public class LabelClicksDialog extends PamDialog {
} }
} }
/**
* clicks may have already been part of an event, so need to remove them from that
* event first, and if there is nothing left in that event, delete the event.
* @param markedClicks2
*/
private void removeFromOldEvent(List<PamDataUnit> markedClicks) {
clickControl.removeFromEvents(markedClicks);
}
@Override @Override
public void restoreDefaultSettings() { public void restoreDefaultSettings() {
// TODO Auto-generated method stub // TODO Auto-generated method stub

View File

@ -51,7 +51,7 @@ public class OfflineClickLogging extends SQLLogging {
tableDef.addTableItem(clickNumber = new PamTableItem("ClickNo", Types.INTEGER)); tableDef.addTableItem(clickNumber = new PamTableItem("ClickNo", Types.INTEGER));
tableDef.addTableItem(amplitude = new PamTableItem("Amplitude", Types.DOUBLE)); tableDef.addTableItem(amplitude = new PamTableItem("Amplitude", Types.DOUBLE));
tableDef.addTableItem(channelNumbers = new PamTableItem("Channels", Types.INTEGER)); tableDef.addTableItem(channelNumbers = new PamTableItem("Channels", Types.INTEGER));
tableDef.setUseCheatIndexing(true); tableDef.setUseCheatIndexing(false);
setTableDefinition(tableDef); setTableDefinition(tableDef);
} }

View File

@ -51,6 +51,7 @@ public class PamSubtableDefinition extends PamTableDefinition {
addTableItem(parentUID = new PamTableItem(PARENTUIDNAME, Types.BIGINT)); addTableItem(parentUID = new PamTableItem(PARENTUIDNAME, Types.BIGINT));
addTableItem(longName = new PamTableItem(LONGDATANAME, Types.CHAR, DATANAME_LENGTH)); addTableItem(longName = new PamTableItem(LONGDATANAME, Types.CHAR, DATANAME_LENGTH));
addTableItem(binaryFilename = new PamTableItem(BINARYFILE, Types.CHAR, BINARY_FILE_NAME_LENGTH)); addTableItem(binaryFilename = new PamTableItem(BINARYFILE, Types.CHAR, BINARY_FILE_NAME_LENGTH));
setUseCheatIndexing(false);
} }
public PamTableItem getParentID() { public PamTableItem getParentID() {