#@ File (label = "Input directory", style = "directory") srcFile #@ File (label = "Output directory", style = "directory") dstFile #@ String (label = "File extension", value=".tif") ext #@ String (label = "File name contains", value = "") containString #@ Boolean (label = "Keep directory structure when saving", value = true) keepDirectories #@ double (label = "Spot radius", stepSize=0.1) radius #@ double (label = "Quality threshold") threshold #@ int (label = "Max frame gap") frameGap #@ double (label = "Linking max distance") linkingMax #@ double (label = "Gap-closing max distance") closingMax import ij.IJ import fiji.plugin.trackmate.Model import fiji.plugin.trackmate.Settings import fiji.plugin.trackmate.TrackMate import fiji.plugin.trackmate.detection.LogDetectorFactory import fiji.plugin.trackmate.tracking.LAPUtils import fiji.plugin.trackmate.tracking.sparselap.SparseLAPTrackerFactory import fiji.plugin.trackmate.action.ExportTracksToXML def main() { srcFile.eachFileRecurse { name = it.getName() if (name.endsWith(ext) && name.contains(containString)) { process(it, srcFile, dstFile, keepDirectories) } } } def process(file, src, dst, keep) { println "Processing $file" // Opening the image imp = IJ.openImage(file.getAbsolutePath()) // Put your processing steps here // Swap Z and T dimensions if T=1 dims = imp.getDimensions() // default order: XYCZT if (dims[4] == 1) { imp.setDimensions( dims[2,4,3] ) } // Setup settings for TrackMate settings = new Settings() settings.setFrom(imp) settings.dt = 0.05 settings.detectorFactory = new LogDetectorFactory() settings.detectorSettings = settings.detectorFactory.getDefaultSettings() println settings.detectorSettings settings.detectorSettings['RADIUS'] = radius settings.detectorSettings['THRESHOLD'] = threshold println settings.detectorSettings settings.trackerFactory = new SparseLAPTrackerFactory() settings.trackerSettings = LAPUtils.getDefaultLAPSettingsMap() settings.trackerSettings['MAX_FRAME_GAP'] = frameGap settings.trackerSettings['LINKING_MAX_DISTANCE'] = linkingMax settings.trackerSettings['GAP_CLOSING_MAX_DISTANCE'] = closingMax // Run TrackMate and store data into Model model = new Model() trackmate = new TrackMate(model, settings) println trackmate.checkInput() println trackmate.process() println trackmate.getErrorMessage() println model.getSpots().getNSpots(true) println model.getTrackModel().nTracks(true) // Saving the result filename = file.getName() if (!filename.endsWith(".xml")) { filename += ".xml" } relativePath = keep ? src.toPath().relativize(file.getParentFile().toPath()).toString() : "" // no relative path saveDir = new File(dst.toPath().toString(), relativePath) if (!saveDir.exists()) saveDir.mkdirs() outFile = new File(saveDir, filename) // customize name if needed ExportTracksToXML.export(model, settings, outFile); // Clean up imp.close() } main()