/* * MSIReconstructor.java * * Created on April 29, 2008, 5:17 PM */ import java.io.*; import javax.imageio.*; import java.awt.image.*; import java.awt.*; import java.lang.*; import java.lang.Math.*; import java.util.*; import java.util.Arrays.*; import javax.swing.*; /** * * @author Tyler */ public class MSIReconstructor extends javax.swing.JFrame { /** Creates new form MSIReconstructor */ public MSIReconstructor() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); jLabel1 = new javax.swing.JLabel(); jTextField1 = new javax.swing.JTextField(); jLabel2 = new javax.swing.JLabel(); jTextField2 = new javax.swing.JTextField(); jLabel3 = new javax.swing.JLabel(); jTextField3 = new javax.swing.JTextField(); jLabel4 = new javax.swing.JLabel(); jLabel5 = new javax.swing.JLabel(); jRadioButton1 = new javax.swing.JRadioButton(); jRadioButton2 = new javax.swing.JRadioButton(); jLabel6 = new javax.swing.JLabel(); jLabel7 = new javax.swing.JLabel(); jTextField4 = new javax.swing.JTextField(); jLabel8 = new javax.swing.JLabel(); jTextField5 = new javax.swing.JTextField(); jLabel9 = new javax.swing.JLabel(); jLabel10 = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); jTextField6 = new javax.swing.JTextField(); jLabel12 = new javax.swing.JLabel(); jButton1 = new javax.swing.JButton(); jCheckBox1 = new javax.swing.JCheckBox(); jLabel13 = new javax.swing.JLabel(); jScrollPane2 = new javax.swing.JScrollPane(); jTextArea2 = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jLabel1.setFont(new java.awt.Font("Tahoma", 1, 11)); jLabel1.setText("MSIReconstructor for creating ion images from MSI on stretched tissues"); jLabel2.setText("Full path of working directory"); jLabel3.setText("Analyte nominal mass (daltons)"); jTextField3.setText("5"); jLabel4.setText("Mass window (daltons)"); jLabel5.setText("Image intensity scale"); buttonGroup1.add(jRadioButton1); jRadioButton1.setText("Relative to average intensity"); buttonGroup1.add(jRadioButton2); jRadioButton2.setText("Relative to maximum intensity (Absolute scale)"); jLabel6.setText("Input data"); jLabel7.setText("Note: subfolder \"Spectra\\\" containing MS data in text files must also exist in the working directory"); jTextField4.setText(".txt"); jLabel8.setText("Initial positions filename"); jTextField5.setText(".txt"); jLabel9.setText("Free transform parameters filename"); jLabel10.setText("Output image filename"); jLabel11.setText("Note: text files of transformed coordinates and stretched coordinates are automatically ouputted"); jLabel12.setText("(Choose only .bmp, .png, or .jpg extensions)"); jButton1.setText("Go!"); jButton1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jButton1MouseClicked(evt); } }); jCheckBox1.setText("Double match reassignment (optional)"); jLabel13.setText("Messages during run:"); jTextArea2.setColumns(20); jTextArea2.setRows(5); jTextArea2.setText("Currently no messages"); jScrollPane2.setViewportView(jTextArea2); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel13) .addContainerGap(385, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel12) .addGap(135, 135, 135)) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) .addComponent(jTextField2) .addComponent(jTextField3, javax.swing.GroupLayout.DEFAULT_SIZE, 59, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel4) .addComponent(jLabel3)) .addContainerGap(276, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel2) .addContainerGap(348, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(79, 79, 79) .addComponent(jLabel1) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel6) .addContainerGap(437, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel7) .addContainerGap(21, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jTextField5, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTextField4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 132, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel9) .addComponent(jLabel8)) .addContainerGap(179, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel10) .addContainerGap(380, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel11) .addContainerGap(21, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGap(10, 10, 10) .addComponent(jLabel5)) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jRadioButton1))) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 110, Short.MAX_VALUE) .addComponent(jCheckBox1) .addContainerGap(10, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jButton1, javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jRadioButton2, javax.swing.GroupLayout.Alignment.TRAILING)) .addContainerGap()) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jTextField1) .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 336, Short.MAX_VALUE)) .addContainerGap(152, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel2) .addGap(4, 4, 4) .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jLabel3) .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel4) .addComponent(jTextField3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jRadioButton1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jRadioButton2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6)) .addComponent(jCheckBox1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextField4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel8)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextField5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel9)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel10) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jTextField6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel12)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); pack(); }// private void jButton1MouseClicked(java.awt.event.MouseEvent evt) { try { int Validate = 0; int Double = 0; String WorkingPath = jTextField1.getText(); if (WorkingPath.endsWith("\\") == false | WorkingPath.endsWith("/") == false ) { WorkingPath = WorkingPath + "\\"; } BufferedReader inO = new BufferedReader(new FileReader(WorkingPath + jTextField4.getText())); if (jCheckBox1.isSelected() == true) {Double = 1;} if (jCheckBox1.isSelected() == false) {Double = 0;} jTextArea2.setText("Currently running"); int MassCenter = Integer.valueOf(jTextField2.getText()); int MassWindow = Integer.valueOf(jTextField3.getText()); int MassLow = MassCenter - MassWindow; int MassHigh = MassCenter + MassWindow; if (!(jTextField6.getText().toLowerCase().endsWith(".bmp")) && !(jTextField6.getText().toLowerCase().endsWith(".png")) && !(jTextField6.getText().toLowerCase().endsWith(".jpg"))) {System.out.println("Error: ouput image can only end in .jpg, .png, or .bmp");} int OlineCount = 0; do { String lineO = inO.readLine(); if (lineO == null) break; OlineCount++; } while (true); String userDir = WorkingPath + "Spectra"; File dir = new File(userDir); String[] childrenTemp = dir.list(); String[] children = new String[childrenTemp.length]; for (int i = 0; i <= childrenTemp.length-1; i++) { children[i] = WorkingPath + "Spectra\\" + childrenTemp[i]; } double[] Intensity = new double[children.length]; String[] SplitName = new String[5]; double[][] SCoordUncentered = new double[children.length][2]; for (int i = 0; i <= children.length-1; i ++) { SplitName = children[i].split("_"); SCoordUncentered[i][0] = Integer.valueOf(SplitName[2].substring(0, SplitName[2].length()-1)).intValue(); SCoordUncentered[i][1] = Integer.valueOf(SplitName[3].substring(0, SplitName[3].length()-4)).intValue(); } int SlineCount = children.length; int Rownum = -1; for (int i = 0; i <= children.length-1; i++) { LineNumberReader lnr = new LineNumberReader(new FileReader(children[i])); lnr.setLineNumber(1); StreamTokenizer stokCurrentData = new StreamTokenizer(lnr); stokCurrentData.parseNumbers(); stokCurrentData.eolIsSignificant(true); stokCurrentData.nextToken(); while (stokCurrentData.ttype != StreamTokenizer.TT_EOF) { double intensMax = 0; while (stokCurrentData.ttype != StreamTokenizer.TT_EOF) { double mz = 0; for (int colnum=1; colnum<=3; colnum++) { if (colnum==1) {mz=stokCurrentData.nval; } if (colnum==2) { if (mz >= MassLow && mz <= MassHigh) { if (stokCurrentData.nval > intensMax) { intensMax = stokCurrentData.nval; } } } if (colnum==3) {stokCurrentData.nextToken(); Rownum++; break;} stokCurrentData.nextToken(); } } Intensity[i] = intensMax; if (stokCurrentData.ttype == StreamTokenizer.TT_EOF) {break;} } } double[][] OCoordUncentered = new double [OlineCount][2]; BufferedReader Par = new BufferedReader(new FileReader(WorkingPath + jTextField5.getText())); StreamTokenizer stokPar = new StreamTokenizer(Par); stokPar.eolIsSignificant(true); stokPar.nextToken(); Double[] par = new Double[15]; int a = 0; Rownum = 0; while (stokPar.ttype != StreamTokenizer.TT_EOF) { for (int colnum=1; colnum<=3; colnum++) { if (colnum==1) {a=1; } if (colnum==2) {par[Rownum]=stokPar.nval; } if (colnum==3) {Rownum++; stokPar.nextToken(); break; } stokPar.nextToken(); } } Double XCenStretched = par[0]; Double YCenStretched = par[1]; Double XCenTransformed = par[2]; Double YCenTransformed = par[3]; Double XCenOriginal = par [4]; Double YCenOriginal = par [5]; Double DeltaADeg = Math.toRadians(par[6]); Double WOriginal = par[7]; Double HOriginal = par[8]; Double WTransformed = par[9]; Double HTransformed = par [10]; Double XCenAloneStretched = par [11]; Double YCenAloneStretched = par [12]; Double XCenAloneOriginal = par [13]; Double YCenAloneOriginal = par [14]; Double deltaXcen = XCenTransformed - XCenOriginal; Double deltaYcen = YCenTransformed - YCenOriginal; int rownum = -1; LineNumberReader lnrO = new LineNumberReader(new FileReader(WorkingPath + jTextField4.getText())); lnrO.setLineNumber(1); StreamTokenizer stokO = new StreamTokenizer(lnrO); stokO.parseNumbers(); stokO.eolIsSignificant(true); stokO.nextToken(); StreamTokenizer stok = new StreamTokenizer(lnrO); while (stokO.ttype != StreamTokenizer.TT_EOF) { double xS=0; double xO=0; double yS=0; double yO=0; while (stokO.ttype != StreamTokenizer.TT_EOF) { for (int colnum=1; colnum<=3; colnum++) { if (colnum==1) {xO=stokO.nval;} if (colnum==2) {yO=stokO.nval;} if (colnum==3) {stokO.nextToken(); rownum++; break;} stokO.nextToken(); } double[] Coord = new double[2]; Coord[0]=xO; Coord[1]=yO; if (rownum <= OlineCount-1) { for (int coll=0; coll<=1; coll++) { OCoordUncentered[rownum][coll]= Coord[coll]; } } if (stokO.ttype == StreamTokenizer.TT_EOF) {break;} } if (stokO.ttype == StreamTokenizer.TT_EOF) {break;} } double[][] SCoord = new double [SlineCount][2]; double[][] OCoord = new double [OlineCount][2]; for (int i = 0; i <= SCoord.length-1; i++) { SCoord[i][0] = SCoordUncentered[i][0] + (XCenStretched - XCenAloneStretched) + 100; SCoord[i][1] = SCoordUncentered[i][1] + (YCenStretched - YCenAloneStretched) + 60; } for (int i = 0; i <= OCoord.length-1; i++) { OCoord[i][0] = OCoordUncentered[i][0] + (XCenOriginal - XCenAloneOriginal); OCoord[i][1] = OCoordUncentered[i][1] + (YCenOriginal - YCenAloneOriginal); } double[][] TCoord = new double[OCoord.length][2]; double[][] Dummy1 = new double[OCoord.length][2]; double[][] Dummy2 = new double[OCoord.length][2]; double[][] Dummy3 = new double[OCoord.length][2]; for (int i = 0; i <= OCoord.length-1; i++) { Dummy1[i][0] = OCoord[i][0] + deltaXcen; Dummy1[i][1] = OCoord[i][1] + deltaYcen; Dummy2[i][0] = -1*(XCenTransformed - ((Dummy1[i][0] - XCenTransformed)*Math.cos(DeltaADeg) - (Dummy1[i][1] - YCenTransformed)*Math.sin(DeltaADeg) + XCenTransformed)); Dummy2[i][1] = -1*(YCenTransformed - ((Dummy1[i][1] - YCenTransformed)*Math.cos(DeltaADeg) + (Dummy1[i][0] - XCenTransformed)*Math.sin(DeltaADeg) + YCenTransformed)); Dummy3[i][0] = (Dummy2[i][0]*Math.cos(DeltaADeg) + Dummy2[i][1]*Math.sin(DeltaADeg)) * WTransformed/WOriginal; Dummy3[i][1] = (Dummy2[i][1]*Math.cos(DeltaADeg) - Dummy2[i][0]*Math.sin(DeltaADeg)) * HTransformed/HOriginal; TCoord[i][0] = Dummy3[i][0]*Math.cos(DeltaADeg) - Dummy3[i][1]*Math.sin(DeltaADeg) + XCenTransformed - 10; TCoord[i][1] = Dummy3[i][0]*Math.sin(DeltaADeg) + Dummy3[i][1]*Math.cos(DeltaADeg) + YCenTransformed - 10; } double TMatchCoord[][] = new double[TCoord.length][2]; double[] IntensityMap = new double[TCoord.length]; for (int i = 0; i <= OCoord.length-1; i++) { double Dist[] = new double[SCoord.length]; double TCoordDummy[][] = new double[TCoord.length][2]; for (int j = 0; j <= TCoord.length-1; j++) { TCoordDummy[j] = TCoord[j]; } double IntensityDummy[] = new double[SCoord.length]; for (int j = 0; j <= SCoord.length-1; j++) { IntensityDummy[j] = Intensity[j]; } for (int l = 0; l <= SCoord.length-1; l++) { Dist[l] = Math.sqrt(Math.pow(TCoordDummy[i][0] - SCoord[l][0], 2) + Math.pow(TCoordDummy[i][1] - SCoord[l][1], 2)); } for (int lastPlace = Dist.length-1; lastPlace > 0; lastPlace--) { int maxLoc = 0; for (int k = 0; k <= lastPlace; k++) { if (Dist[k] > Dist[maxLoc]) { maxLoc = k; } } double Temp = Dist[maxLoc]; Dist[maxLoc] = Dist[lastPlace]; Dist[lastPlace] = Temp; //double Temp1[] = TCoordDummy[maxLoc]; //TCoordDummy[maxLoc] = TCoordDummy[lastPlace]; //TCoordDummy[lastPlace] = Temp1; double Temp2 = IntensityDummy[maxLoc]; IntensityDummy[maxLoc] = IntensityDummy[lastPlace]; IntensityDummy[lastPlace] = Temp2; } //TMatchCoord[i] = TCoordDummy[0]; IntensityMap[i] = IntensityDummy[0]; if (Double == 1) { int DoubleInd = 0; int DoubleCount = 0; double DoubleTCoord[][] = new double[2][2]; for (int e = 0; e <= i-1; e++) { if (TMatchCoord[i][0] == TMatchCoord[e][0] && TMatchCoord[i][1] == TMatchCoord[e][1]) { DoubleCount++; DoubleInd=e; DoubleTCoord[1] = TMatchCoord[e]; } } DoubleTCoord[0] = TMatchCoord[i]; if (DoubleCount > 0) { double DistTCoord[] = new double[TCoord.length-1]; double DistTCoordO[] = new double[2]; double TCoordMinus1[][] = new double[TCoord.length-1][5]; int RemoveInd = 0; for (int z = 0; z <= TCoord.length-1; z++) { if (TCoord[z] == TCoordDummy[0]) { RemoveInd = z; break; } } for (int b = 0; b <= RemoveInd-1; b++) { TCoordMinus1[b] = TCoord[b]; } for (int c = RemoveInd+1; c <= TCoordMinus1.length-1; c++) { TCoordMinus1[c] = TCoord[c]; } for (int f = 0; f <= TCoord.length-2; f++) { DistTCoord[f] = Math.sqrt(Math.pow(TCoordMinus1[f][0] - TMatchCoord[i][0], 2) + Math.pow(TCoordMinus1[f][1] - TMatchCoord[i][1], 2)); } for (int lastPlace = DistTCoord.length-1; lastPlace > 0; lastPlace--) { int maxLoc = 0; for (int k = 0; k <= lastPlace; k++) { if (DistTCoord[k] > DistTCoord[maxLoc]) { maxLoc = k; } } double Temp = DistTCoord[maxLoc]; DistTCoord[maxLoc] = DistTCoord[lastPlace]; DistTCoord[lastPlace] = Temp; double Temp1[] = TCoordMinus1[maxLoc]; TCoordMinus1[maxLoc] = TCoordMinus1[lastPlace]; TCoordMinus1[lastPlace] = Temp1; } double TCoordClosest[] = new double[2]; for (int h = 0; h <=1; h++) { TCoordClosest[h] = TCoordMinus1[0][h]; } double IntensitySub = 0; for (int y = 0; y <= TMatchCoord.length-1; y++) { if (TCoordClosest[0] == TMatchCoord[y][0] && TCoordClosest[1] == TMatchCoord[y][1]) { IntensitySub = IntensityMap[y]; } } DistTCoordO[0] = Math.sqrt(Math.pow(OCoord[i][0] - TCoordClosest[0], 2) + Math.pow(OCoord[i][1] - TCoordClosest[1], 2)); DistTCoordO[1] = Math.sqrt(Math.pow(OCoord[DoubleInd][0] - TCoordClosest[0], 2) + Math.pow(OCoord[DoubleInd][1] - TCoordClosest[1], 2)); if (DistTCoordO[0] < DistTCoordO[1]) { TMatchCoord[i] = TCoordClosest; IntensityMap[i] = IntensitySub; } if (DistTCoordO[1] < DistTCoordO[0]) { TMatchCoord[DoubleInd] = TCoordClosest; IntensityMap[DoubleInd] = IntensitySub; } } } } if (Validate == 1) { double PointCount = TCoord.length; double CorrectPointCount = 0; for (int j = 0; j <= TCoord.length-1; j++) { if (TMatchCoord[j][0] == TCoord[j][0] && TMatchCoord[j][1] == TCoord[j][1]) { CorrectPointCount++; } } double ClassificationRate = (CorrectPointCount/PointCount) * 100; System.out.println("CorrectPointCount " + CorrectPointCount); System.out.println("PointCount " + PointCount); System.out.println("ClassificationRate " + ClassificationRate); } double MaxX = 0; double MaxY = 0; for (int i = 0; i <= OCoord.length-1; i++) { if (OCoordUncentered[i][0] > MaxX) { MaxX = OCoordUncentered[i][0]; } if (OCoordUncentered[i][1] > MaxY) { MaxY = OCoordUncentered[i][1]; } } int width = (int)MaxX; int height = (int)MaxY; BufferedImage image = new BufferedImage(width + 10, height + 10, BufferedImage.TYPE_INT_RGB); String format = "JPG"; if (jTextField6.getText().toLowerCase().endsWith(".png")) {format = "PNG";} if (jTextField6.getText().toLowerCase().endsWith(".bmp")) {format = "BMP";} double MaxIntensity = 0; double IntensitySum = 0; double MaxInd = 0; for (int i = 0; i <= IntensityMap.length-1; i++) { if (IntensityMap[i] > MaxIntensity) { MaxIntensity = IntensityMap[i]; MaxInd = i; } IntensitySum += IntensityMap[i]; } double IntensityAvg = IntensitySum / IntensityMap.length; System.out.println(Arrays.toString(IntensityMap)); System.out.println(MaxInd); String[] SplitTemp = jTextField6.getText().split("\\."); String OutImageName = SplitTemp[0] + "_mz" + MassCenter + "+-" + MassWindow + "_Imax" + (int)MaxIntensity + "." + SplitTemp[1]; double colorValue = 0; for (int i = 0; i <= IntensityMap.length-1; i++) { //colorValue = Math.log(IntensityMap[i] * 100 + 1) / Math.log(MaxIntensity * 100); if (jRadioButton1.isSelected() == true) { colorValue = IntensityMap[i] / (IntensityAvg); } if (jRadioButton1.isSelected() == false) { colorValue = IntensityMap[i] / (MaxIntensity); } if (colorValue > 1) { colorValue = 1; } if (IntensityMap[i] < 10) { colorValue = 0; } Graphics graphics = image.getGraphics(); Color color = new Color((int)(colorValue * 255), (int)(colorValue * 255), (int)(colorValue * 255)); graphics.setColor(color); graphics.fillRect((int)OCoordUncentered[i][0] -7, (int)OCoordUncentered[i][1] - 7, 14, 14); } ImageIO.write(image, format, new File(WorkingPath + OutImageName)); FileOutputStream out; PrintStream p; out = new FileOutputStream(WorkingPath + "TCoord.txt"); p = new PrintStream( out ); for (int h = 0; h <= TCoord.length-1; h++) { p.print(TCoord[h][0] + "\t"); p.println(TCoord[h][1]); } p.close(); FileOutputStream out1; PrintStream p1; out1 = new FileOutputStream(WorkingPath + "SCoord.txt"); p1 = new PrintStream( out1 ); for (int h = 0; h <= SCoord.length-1; h++) { p1.print(SCoord[h][0] + "\t"); p1.println(SCoord[h][1]); } p.close(); jTextArea2.setText("Run has finished"); } catch (IOException e) {System.out.println(e); String er = e.toString(); jTextArea2.setText(er);} } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new MSIReconstructor().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.ButtonGroup buttonGroup1; private javax.swing.JButton jButton1; private javax.swing.JCheckBox jCheckBox1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JRadioButton jRadioButton1; private javax.swing.JRadioButton jRadioButton2; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextArea jTextArea2; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextField3; private javax.swing.JTextField jTextField4; private javax.swing.JTextField jTextField5; private javax.swing.JTextField jTextField6; // End of variables declaration }