// Profile_AlignRef script by Christophe Leterrier // very crude script to align a profiles table using a reference channel aligned table // 19-06-14 Adapted to new Fiji with call to classes // 09-07-14 Rebuilt to speed things up importClass(Packages.ij.io.OpenDialog); importClass(Packages.ij.IJ); importClass(Packages.java.lang.Double); importClass(Packages.java.io.File); importClass(Packages.java.io.FileReader); importClass(Packages.java.io.FileWriter); importClass(Packages.java.io.FileReader); importClass(Packages.java.io.FileWriter); importClass(Packages.java.io.BufferedReader); importClass(Packages.java.io.BufferedWriter); var odi = new OpenDialog("Choose a file to align", ""); var odr = new OpenDialog("Choose a reference alignement file", ""); var startTime = new Date().getTime(); IJ.showStatus("start"); var inName = odi.getFileName(); var inDir = odi.getDirectory(); var inPath = inDir + inName; var inString = IJ.openAsString(inPath); var inArray = stringToArray(inString, true); var inRows = inArray.length; var inCols = inArray[0].length; IJ.log("Input file: " + inPath); IJ.log("Input file contains: " + inCols + " profiles with " + inRows + " points"); var refName = odr.getFileName(); var refDir = odr.getDirectory(); var refPath = refDir + refName; var refFile = new File(refPath); IJ.log("Ref file: " + inPath); var alignPath = inDir + inName.substring(0, inName.length()-4) + "_Aligned.txt" var alignFile = new File(alignPath); if (!alignFile.exists()) { alignFile.createNewFile(); } IJ.log("Align file: " + alignPath); var br = new BufferedReader(new FileReader(refFile)); var bw = new BufferedWriter(new FileWriter(alignFile)); refLine = br.readLine(); bw.write(refLine); bw.newLine(); var countLine = 1; var countArray = new Array(inCols); for (var i = 0; i < countArray.length; i++) countArray[i] = 0; while ((refLine = br.readLine()) != null) { var refCells = refLine.split("\t"); var alignLine = refCells[0] + "\t" + refCells[1] + "\t"; for (var c = 2; c < refCells.length; c++) { if (refCells[c] == "NaN") { alignLine = alignLine + "NaN" + "\t"; } else { alignLine = alignLine + inArray[countArray[c]][c] + "\t"; countArray[c]++; } } countLine ++; bw.write(alignLine); bw.newLine(); } br.close(); bw.close(); var stopTime = new Date().getTime(); var Time = stopTime - startTime; IJ.log(""+ countLine + " done after " + Time + " ms"); //************************************** function stringToArray(st, head) { var rowsArray = st.split("\n"); if (head == true) rowsArray.splice(0,1); mArray = new Array(rowsArray.length); for (var j = 0; j < rowsArray.length; j++) { mArray[j] = rowsArray[j].split("\t"); } return mArray; }