importClass(Packages.cz.cuni.lf1.lge.ThunderSTORM.results.IJResultsTable); importClass(Packages.java.io.File); importClass(Packages.ij.io.DirectoryChooser); importClass(Packages.ij.IJ); importClass(Packages.ij.gui.GenericDialog); importClass(Packages.ij.measure.ResultsTable); // Dialog var dc = new DirectoryChooser("Choose a folder"); var inDirSt = dc.getDirectory() + File.separator; var inDir = new File(inDirSt); // Start var startTime = new Date().getTime(); IJ.log("\n\n*** Batch Localizations Stats started ***"); IJ.log("Input folder: " + inDirSt); // Get the file list from the input folder, batch process them using the translate function var fileQueueT = getExtFiles(inDirSt, "csv"); var nFiles = fileQueueT.length; var ot = new ResultsTable; var otr = -1; var headStat = ["min", "max", "mean", "median", "SD"] for (var f = 0; f < fileQueueT.length; f++) { inPath = fileQueueT[f].getPath(); IJ.log(" Processing file #" + (f + 1) + "/" + (nFiles + 1) + ": " + fileQueueT[f].getName()); // IJ.run("Import results", "filepath=[" + inPath + "] fileformat=[CSV (comma separated)] append=false startingframe=1 rawimagestack= livepreview=false"); // var rt = IJResultsTable.getResultsTable(); // var nRows = rt.getRowCount(); // var Col = arrayJS(rt.getColumnAsDoubles("uncertainty")); rt = ResultsTable.open(fileQueueT[f].getPath()); head = rt.getHeadings(); if (rt.getColumnIndex("z [nm]") > 0) is3D = true; else is3D = false; if (is3D == true) { var indArray = [0, 4, 5, 6, 9, 10]; } else { var indArray = [0, 3, 4, 7]; } ot.incrementCounter(); otr++; for (c = 0 ; c < indArray.length; c++) { var Col = arrayJS(rt.getColumn(indArray[c])); var Stats = getStats(Col); var SD = getSD(Col, Stats[2]); var Median = getMedian(Col); var aStat = [Stats[0], Stats[1], Stats[2], Median, SD]; ot.setValue("Name", otr, fileQueueT[f].getName()); ot.setValue("Number", otr, rt.size()); if (c == 0) { ot.setValue(head[indArray[c]] + " " + headStat[1], otr, aStat[1]); } else { for (t = 0; t < aStat.length; t++) { ot.setValue(head[indArray[c]] + " " + headStat[t], otr, aStat[t]); } } } } // End ot.show(inDir.getName() + "_Results"); var stopTime = new Date().getTime(); var Time = stopTime - startTime; IJ.log("\n*** Batch Localizations Stats ended after " + Time / 1000 + " s ***"); function getExtFiles(dirst, inext) { var dir = new File(dirst); var allfiles = dir.listFiles(); var extFiles = new Array(); for (var i = 0 ; i < allfiles.length; i++) { var name = allfiles[i].getName(); var ext = name.substring(name.lastIndexOf(".")+1); if (ext == inext) { extFiles.push(allfiles[i]); } } return extFiles; } function arrayJS(arr) { var arrJS = new Array(arr.length); for (var r = 0 ; r < arr.length; r++) { arrJS[r] = parseFloat(arr[r]); } return arrJS; } function getStats(arr){ var min = arr[0]; var max = arr[0]; var sum = 0; for( var i = 0; i < arr.length; i++ ){ if (arr[i] < min) min = arr[i]; if (arr[i] > max) max = arr[i]; sum += arr[i]; } var avg = sum / arr.length; return [min, max, avg]; } function getSD(val, meanval){; var sumdiff = 0; for( var j = 0; j < val.length; j++ ){ var diff = val[j] - meanval; var sqdiff = diff * diff; sumdiff += sqdiff; } var avsqdiff = sumdiff / val.length; var stddev = Math.sqrt(avsqdiff); return stddev; } function getMedian(val) { val.sort( function(a,b) {return a - b;} ); var half = Math.floor(val.length/2); if(val.length % 2) return val[half]; else return (val[half-1] + val[half]) / 2.0; }