package org.knime.knip.tracking.nodes.laptracker; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.knime.core.data.DoubleValue; import org.knime.core.data.StringValue; import org.knime.core.node.defaultnodesettings.DefaultNodeSettingsPane; import org.knime.core.node.defaultnodesettings.DialogComponentBoolean; import org.knime.core.node.defaultnodesettings.DialogComponentColumnFilter; import org.knime.core.node.defaultnodesettings.DialogComponentColumnNameSelection; import org.knime.core.node.defaultnodesettings.DialogComponentNumber; import org.knime.core.node.defaultnodesettings.DialogComponentString; import org.knime.core.node.defaultnodesettings.DialogComponentStringSelection; import org.knime.core.node.defaultnodesettings.SettingsModelBoolean; import org.knime.core.node.defaultnodesettings.SettingsModelDouble; import org.knime.core.node.defaultnodesettings.SettingsModelFilterString; import org.knime.core.node.defaultnodesettings.SettingsModelIntegerBounded; import org.knime.core.node.defaultnodesettings.SettingsModelString; import org.knime.knip.base.KNIMEKNIPPlugin; import org.knime.knip.base.data.img.ImgPlusValue; import org.knime.knip.base.data.labeling.LabelingValue; import org.knime.knip.core.util.EnumUtils; import org.knime.knip.tracking.nodes.laptracker.LAPTrackerNodeModel.LAPTrackerAlgorithm; @Deprecated public class LAPTrackerNodeDialog extends DefaultNodeSettingsPane { // Trackmate private final SettingsModelString m_trackingAlgorithmModel = LAPTrackerSettingsModels.createTrackingAlgorithmModel(); private final SettingsModelBoolean m_allowGapClosingModel = LAPTrackerSettingsModels.createAllowGapClosingModel(); private final SettingsModelBoolean m_allowMergingModel = LAPTrackerSettingsModels.createAllowMergingModel(); private final SettingsModelBoolean m_allowSplittingModel = LAPTrackerSettingsModels.createAllowSplittingModel(); private final SettingsModelIntegerBounded m_gapClosingMaxFrameModel = LAPTrackerSettingsModels.createMaxFrameGapClosingModel(); private final SettingsModelDouble m_mergingMaxDistanceModel = LAPTrackerSettingsModels.createMergingMaxDistance(); private final SettingsModelDouble m_gapClosingMaxDistanceModel = LAPTrackerSettingsModels.createGapClosingMaxDistanceModel(); private final SettingsModelDouble m_splittingMaxDistance = LAPTrackerSettingsModels.createSplittingMaxDistance(); private final SettingsModelDouble m_alternativeLinkingCostFactor = LAPTrackerSettingsModels.createAlternativeLinkingCostFactor(); private final SettingsModelDouble m_cutoffPercentileModel = LAPTrackerSettingsModels.createCutoffPercentileModel(); private final SettingsModelDouble m_linkingMaxDistanceModel = LAPTrackerSettingsModels.createLinkingMaxDistanceModel(); // KNIME private final SettingsModelString m_sourceLabelingColumn = LAPTrackerSettingsModels.createSourceLabelingSettingsModel(); private final SettingsModelFilterString m_columns = LAPTrackerSettingsModels.createColumnSelectionModel(); private final SettingsModelString m_timeAxisModel = LAPTrackerSettingsModels.createTimeAxisModel(); private final SettingsModelString m_bitMaskColumnModel = LAPTrackerSettingsModels.createBitMaskModel(); private final SettingsModelString m_labelColumnModel = LAPTrackerSettingsModels.createLabelModel(); private final SettingsModelBoolean m_attachSourceLabelings = LAPTrackerSettingsModels.createAttachSourceLabelingsModel(); private final SettingsModelBoolean m_useCustomTrackPrefix = LAPTrackerSettingsModels.createUseCustomTrackPrefixModel(); private final SettingsModelString m_customTrackPrefix = LAPTrackerSettingsModels.createCustomTrackPrefixModel(); public LAPTrackerNodeDialog() { createNewGroup("Basic"); addBasicOptions(); closeCurrentGroup(); createNewGroup("Splitting"); addSplittingOptions(); closeCurrentGroup(); createNewGroup("Merging"); addMergingOptions(); closeCurrentGroup(); createNewGroup("Gap-Closing"); addGapClosingOptions(); closeCurrentGroup(); createNewTab("Advanced"); createNewGroup("Advanced Tracking Settings"); addAdvancedSettings(); closeCurrentGroup(); createNewGroup("Labeling Settings"); addLabelingSettings(); closeCurrentGroup(); createNewTab("Column Settings"); addKNIMEColumnSettings(); } @SuppressWarnings("unchecked") private void addKNIMEColumnSettings() { addDialogComponent(new DialogComponentColumnFilter(m_columns, 0, true, DoubleValue.class)); addDialogComponent(new DialogComponentColumnNameSelection( m_bitMaskColumnModel, "Bitmask Column", 0, ImgPlusValue.class)); addDialogComponent(new DialogComponentColumnNameSelection( m_labelColumnModel, "Labels", 0, StringValue.class)); addDialogComponent( new DialogComponentColumnNameSelection(m_sourceLabelingColumn, "Source Labeling", 0, LabelingValue.class)); } private void addAdvancedSettings() { addDialogComponent( new DialogComponentNumber(m_alternativeLinkingCostFactor, "Alternative Linking Cost Factor", 0.05)); addDialogComponent(new DialogComponentNumber(m_cutoffPercentileModel, "Cutoff Percentile", 0.05)); } private void addBasicOptions() { addDialogComponent( new DialogComponentStringSelection(m_trackingAlgorithmModel, "Algorithm", EnumUtils.getStringListFromToString( LAPTrackerAlgorithm.values()))); addDialogComponent(new DialogComponentNumber(m_linkingMaxDistanceModel, "Maximum Object Distance", 2.5)); addDialogComponent(new DialogComponentStringSelection(m_timeAxisModel, "Tracking Dimension", KNIMEKNIPPlugin.parseDimensionLabels())); } private void addGapClosingOptions() { addDialogComponent(new DialogComponentBoolean(m_allowGapClosingModel, "Allow Gap Closing")); addDialogComponent(new DialogComponentNumber( m_gapClosingMaxDistanceModel, "Max Distance", 0.5)); addDialogComponent(new DialogComponentNumber(m_gapClosingMaxFrameModel, "Max GAP Size (Frames)", 1)); m_allowGapClosingModel.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { m_gapClosingMaxDistanceModel .setEnabled(m_allowGapClosingModel.getBooleanValue()); m_gapClosingMaxFrameModel .setEnabled(m_allowGapClosingModel.getBooleanValue()); } }); } private void addLabelingSettings() { addDialogComponent(new DialogComponentBoolean(m_attachSourceLabelings, "Attach Original Labelings")); setHorizontalPlacement(true); m_customTrackPrefix.setEnabled(false); m_useCustomTrackPrefix.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { m_customTrackPrefix .setEnabled(m_useCustomTrackPrefix.getBooleanValue()); } }); addDialogComponent(new DialogComponentBoolean(m_useCustomTrackPrefix, "Use a Custom Track Prefix")); addDialogComponent(new DialogComponentString(m_customTrackPrefix, "Custom Track Prefix:")); setHorizontalPlacement(false); } private void addMergingOptions() { addDialogComponent(new DialogComponentBoolean(m_allowMergingModel, "Allow Merging")); addDialogComponent(new DialogComponentNumber(m_mergingMaxDistanceModel, "Max Distance", 0.5)); m_allowMergingModel.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { m_mergingMaxDistanceModel .setEnabled(m_allowMergingModel.getBooleanValue()); } }); } private void addSplittingOptions() { addDialogComponent(new DialogComponentBoolean(m_allowSplittingModel, "Allow Splitting")); addDialogComponent(new DialogComponentNumber(m_splittingMaxDistance, "Max Distance", 0.5)); m_allowSplittingModel.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { m_splittingMaxDistance .setEnabled(m_allowSplittingModel.getBooleanValue()); } }); } }