package org.knime.knip.tracking.nodes.trackmate;
import java.util.ArrayList;
import java.util.List;
import org.knime.core.data.DoubleValue;
import org.knime.core.node.defaultnodesettings.SettingsModel;
import org.knime.core.node.defaultnodesettings.SettingsModelBoolean;
import org.knime.core.node.defaultnodesettings.SettingsModelColumnFilter2;
import org.knime.core.node.defaultnodesettings.SettingsModelDouble;
import org.knime.core.node.defaultnodesettings.SettingsModelIntegerBounded;
import org.knime.core.node.defaultnodesettings.SettingsModelString;
import org.knime.knip.tracking.data.TrackedNode;
import fiji.plugin.trackmate.features.track.TrackAnalyzer;
import fiji.plugin.trackmate.features.track.TrackBranchingAnalyzer;
import fiji.plugin.trackmate.features.track.TrackDurationAnalyzer;
import fiji.plugin.trackmate.features.track.TrackLocationAnalyzer;
import fiji.plugin.trackmate.features.track.TrackSpeedStatisticsAnalyzer;
import fiji.plugin.trackmate.tracking.TrackerKeys;
/**
* Simple helper class to store {@link SettingsModel}s used within
* {@link TrackmateTrackerNodeModel}.
*
* @author Christian Dietz
* @author Gabriel Einsdorf
*
*
*/
final class TrackmateTrackerSettingsModels {
private TrackmateTrackerSettingsModels() {
// prevent initialisation.
}
/**
* The Features that can be calculated over the tracks.
*
* @author Gabriel
*
*/
enum TrackMateTrackFeature {
// /**
// * Track ID features. Only for debug
// */
// TRACK_INDEX("Track index"), TRACK_ID("Track ID"),
/**
* Location Features.
*/
TRACK_X_LOCATION("X Location (mean)"), TRACK_Y_LOCATION(
"Y Location (mean)"), TRACK_Z_LOCATION("Z Location (mean)"),
/**
* Track Branching Features.
*/
NUMBER_SPOTS("Number of elements in track"), NUMBER_GAPS(
"Number of gaps"), LONGEST_GAP("Longest gap"), NUMBER_SPLITS(
"Number of split events"), NUMBER_MERGES(
"Number of merge events"), NUMBER_COMPLEX(
"Number of complex points"),
/**
* Track Speed Features.
*/
TRACK_MEAN_SPEED("Mean velocity"), TRACK_MAX_SPEED("Maximal velocity"), TRACK_MIN_SPEED(
"Minimal velocity"), TRACK_MEDIAN_SPEED("Median velocity"), TRACK_STD_SPEED(
"Velocity standard deviation"),
/**
* Track Duration Features.
*/
TRACK_DURATION("Duration of track"), TRACK_START("Track start"), TRACK_STOP(
"Track stop"), TRACK_DISPLACEMENT("Track displacement");
private TrackMateTrackFeature(String longName) {
m_longName = longName;
}
@Override
public String toString() {
return m_longName;
};
private String m_longName;
}
/**
* TrackMate feature calculators.
*/
static final List<TrackAnalyzer<TrackedNode<String>>> TRACK_ANALYZERS = new ArrayList<TrackAnalyzer<TrackedNode<String>>>() {
private static final long serialVersionUID = 7987258171225310650L;
{
// add(new TrackIndexAnalyzer<TrackedNode<String>>());
add(new TrackLocationAnalyzer<TrackedNode<String>>());
add(new TrackBranchingAnalyzer<TrackedNode<String>>());
add(new TrackSpeedStatisticsAnalyzer<TrackedNode<String>>());
add(new TrackDurationAnalyzer<TrackedNode<String>>());
}
};
/* KNIME TABLE SETTINGS */
/**
* The default prefix for the Track name.
*/
static final String DEFAULT_TRACK_PREFIX = "Track: ";
/**
* @return settings model to store the source labeling
*/
public static SettingsModelString createSourceLabelingSettingsModel() {
return new SettingsModelString("source_labeling_settings_model", "");
}
/**
* @return settings model for BitMask selection
*/
public static SettingsModelString createBitMaskModel() {
return new SettingsModelString("bitmask_column", "");
}
/**
* @return settings model to store the time axis selection
*/
public static SettingsModelString createTimeAxisModel() {
return new SettingsModelString("feature_columns", "Time");
}
/**
* @return settings model to store Label column
*/
public static SettingsModelString createLabelModel() {
return new SettingsModelString("label_column_selection", "");
}
/**
* @return settings model for the column selection
*/
@SuppressWarnings("unchecked")
public static SettingsModelColumnFilter2 createColumnFilterModel() {
return new SettingsModelColumnFilter2("column_selection",
DoubleValue.class);
}
/**
* @return settings model to store the labeling attachment selection
*/
public static SettingsModelBoolean createAttachSourceLabelingsModel() {
return new SettingsModelBoolean("attach_original_labeling", false);
}
/**
* @return settings model to store the custom track label selection
*/
public static SettingsModelBoolean createUseCustomTrackPrefixModel() {
return new SettingsModelBoolean("use_custom_track_label", false);
}
/**
* @return settings model to store the custom label for the tracks
*/
public static SettingsModelString createCustomTrackPrefixModel() {
return new SettingsModelString("custom_track_label",
DEFAULT_TRACK_PREFIX);
}
/**
* @return setting model to store whether to calculate track features
*/
public static SettingsModelBoolean createCalculateTrackFeaturesModel() {
return new SettingsModelBoolean("calculate_track_features", true);
}
/* TRACKMATE SETTING MODELS */
/**
* @return settings model to store default gap closing max frame distance
*/
public static SettingsModelDouble createAlternativeLinkingCostFactor() {
return new SettingsModelDouble("alternative_linking_cost_factor",
TrackerKeys.DEFAULT_ALTERNATIVE_LINKING_COST_FACTOR);
}
/**
* @return settings model to store whether splitting should be allowed
*/
public static SettingsModelBoolean createAllowSplittingModel() {
return new SettingsModelBoolean("allow_track_splitting",
TrackerKeys.DEFAULT_ALLOW_TRACK_SPLITTING);
}
/**
* @return settings model to store whether merging should be allowed
*/
public static SettingsModelBoolean createAllowMergingModel() {
return new SettingsModelBoolean("allow_track_merging",
TrackerKeys.DEFAULT_ALLOW_TRACK_MERGING);
}
/**
* @return settings model to store splitting max distance
*/
public static SettingsModelDouble createSplittingMaxDistance() {
return new SettingsModelDouble("splitting_max_distance",
TrackerKeys.DEFAULT_SPLITTING_MAX_DISTANCE);
}
/**
* @return settings model to store merging max distance
*/
public static SettingsModelDouble createMergingMaxDistance() {
return new SettingsModelDouble("merging_max_distance",
TrackerKeys.DEFAULT_MERGING_MAX_DISTANCE);
}
/**
* @return settings model to store the max distance of cell
*/
public static SettingsModelDouble createLinkingMaxDistanceModel() {
return new SettingsModelDouble("linking_max_distance",
TrackerKeys.DEFAULT_LINKING_MAX_DISTANCE);
}
/**
* @return settings model to store the cutoff percentile
*/
public static SettingsModelDouble createCutoffPercentileModel() {
return new SettingsModelDouble("cutoff_percentile",
TrackerKeys.DEFAULT_CUTOFF_PERCENTILE);
}
/**
* @return settings model to store whether gap closing should be allowed
*/
public static SettingsModelBoolean createAllowGapClosingModel() {
return new SettingsModelBoolean("allow_gap_closing",
TrackerKeys.DEFAULT_ALLOW_GAP_CLOSING);
}
/**
* @return settings model to store default gap closing max frame distance
*/
public static SettingsModelIntegerBounded createMaxFrameGapClosingModel() {
return new SettingsModelIntegerBounded("max_frame_gap_closing",
TrackerKeys.DEFAULT_GAP_CLOSING_MAX_FRAME_GAP, 0,
Integer.MAX_VALUE);
}
/**
* @return settings model to store default gap closing max distance
*/
public static SettingsModelDouble createGapClosingMaxDistanceModel() {
return new SettingsModelDouble("gap_closing_max_distance",
TrackerKeys.DEFAULT_GAP_CLOSING_MAX_DISTANCE);
}
}