Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LINKING_FEATURE_PENALTIES null pointer exception #248

Open
NicoKiaru opened this issue Mar 14, 2023 · 0 comments
Open

LINKING_FEATURE_PENALTIES null pointer exception #248

NicoKiaru opened this issue Mar 14, 2023 · 0 comments

Comments

@NicoKiaru
Copy link

Hello!

I wrote a script to automate trackmate that uses a SparseLAPTracker and Stardist Trackmate.

When running:

def writer = new TmXmlWriter(new File(fileTrackMate))
writer.appendModel(model)
writer.appendSettings(settings)

I get a Null Pointer Exception in writer.appendSettings(settings), that I can avoid by adding this line:

settings.trackerSettings['LINKING_FEATURE_PENALTIES'] = new HashMap() //'None'

This seems weird.

Full groovy macro:

#@File(label = "File with cell to track") f
#@boolean showOutput
#@int channel_to_track

imp = IJ.openImage(f.getAbsolutePath());

model = new Model()

// Send all messages to ImageJ log window.
model.setLogger(Logger.IJ_LOGGER)

// Settings (voxel size, time delay), set up from the ImagePlus
def settings = new Settings(imp)

// ------------- Channel 1: Spot detection
 
// Configure detector - We use the Strings for the keys
settings.detectorFactory = new StarDistDetectorFactory()  // Laplacian of gaussian detector, 
settings.detectorSettings = [
    'TARGET_CHANNEL' : channel_to_track
] 

// qualityFilter = new FeatureFilter('QUALITY', 5.5, true) // Configure spot filters - Classical filter on quality, here : 9
// settings.addSpotFilter(qualityFilter)

// -------------- Channel 1: Tracking
// Configure tracker - We do not allow merges and fusions

settings.trackerFactory = new SparseLAPTrackerFactory()
settings.trackerSettings = LAPUtils.getDefaultSegmentSettingsMap() 
settings.trackerSettings['LINKING_MAX_DISTANCE'] = 15 as double      // 0.5 microns displacement may between each timeframe
settings.trackerSettings['GAP_CLOSING_MAX_DISTANCE'] = 1 as double  // 0.4 microns displacement before and after gap
settings.trackerSettings['MAX_FRAME_GAP'] =  2 as int                 // 2 frames gap max allowed during tracking
settings.trackerSettings['LINKING_FEATURE_PENALTIES'] = new HashMap() //'None'

// Add ALL the feature analyzers known to TrackMate. They will 
// yield numerical features for the results, such as speed, mean intensity etc.
settings.addAllAnalyzers()

trackmate = new TrackMate(model, settings)

ok = trackmate.checkInput()
if (!ok) IJ.log(trackmate.getErrorMessage());
 
ok = trackmate.process() // Actually performs the tracking
if (!ok) IJ.log(trackmate.getErrorMessage());

// ---- To display the result:
if (showOutput) {
	// A selection.
	selectionModel = new SelectionModel( model )
	 
	// Read the default display settings.
	ds = DisplaySettingsIO.readUserDefault()
	// With the line below, we state that we want to color tracks using
	// a numerical feature defined for TRACKS, and that has they key 'TRACK_INDEX'.
	ds.setTrackColorBy( TrackMateObject.TRACKS, 'TRACK_INDEX' )
	 
	displayer =  new HyperStackDisplayer( model, selectionModel, imp, ds )
	displayer.render()
	displayer.refresh()
}

// Echo results with the logger we set at start:
model.getLogger().log(  model.toString() )

def fileTrackMate = FilenameUtils.removeExtension(f.getAbsolutePath())+"-Channel_"+channel_to_track+".xml"
def writer = new TmXmlWriter(new File(fileTrackMate))
writer.appendModel(model)
writer.appendSettings(settings)
writer.writeToFile()

IJ.log("Trackmate file written: "+fileTrackMate)

//ExportTracksToXML.export(model, settings, new File(fileTrackMateTerraTracks))

//def fileTrackMateTracks = FilenameUtils.removeExtension(f.getAbsolutePath())+"-Channel_"+channel_to_track+"-Tracks.csv"
//def tableView = ExportStatsTablesAction.createTrackTables(model, selectionModel, new DisplaySettings())
//tableView.trackTable.exportToCsv(new File(fileTrackMateTracks))
//IJ.log("Exported tracks")

import fiji.plugin.trackmate.tracking.jaqaman.SparseLAPTrackerFactory
import fiji.plugin.trackmate.tracking.jaqaman.LAPUtils
import ij.IJ

import org.apache.commons.io.FilenameUtils
 
import fiji.plugin.trackmate.Model
import fiji.plugin.trackmate.Settings
import fiji.plugin.trackmate.TrackMate
import fiji.plugin.trackmate.SelectionModel
import fiji.plugin.trackmate.Logger
import fiji.plugin.trackmate.gui.displaysettings.DisplaySettingsIO
import fiji.plugin.trackmate.visualization.hyperstack.HyperStackDisplayer

import fiji.plugin.trackmate.gui.displaysettings.DisplaySettings

import fiji.plugin.trackmate.io.TmXmlWriter

import fiji.plugin.trackmate.gui.displaysettings.DisplaySettings.TrackMateObject
import fiji.plugin.trackmate.action.ExportStatsTablesAction

import fiji.plugin.trackmate.stardist.StarDistDetectorFactory

// Configure track filters - We want to get rid of the two immobile spots at
// the bottom right of the image. Track displacement must be above 10 pixels.
// filter2 = FeatureFilter('TRACK_DISPLACEMENT', 10, True)
// settings.addTrackFilter(filter2)

(It's a quick and dirty bug report, but I can give more details)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant