Java tutorial
/* * Copyright (c) 2003-2012 Fred Hutchinson Cancer Research Center * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.fhcrc.cpl.viewer.mrm; import org.fhcrc.cpl.toolbox.proteomics.MSRun; import org.fhcrc.cpl.viewer.gui.MRMDialog; import org.fhcrc.cpl.viewer.mrm.utilities.PeaksTableModel; import org.jfree.chart.annotations.XYLineAnnotation; import org.jfree.chart.plot.DefaultDrawingSupplier; import org.jfree.chart.plot.DrawingSupplier; import org.jfree.data.xy.XYDataItem; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import java.awt.*; import java.awt.geom.Line2D; /** * Created by IntelliJ IDEA. * User: tholzman * Date: May 10, 2007 * Time: 11:42:06 AM * To change this template use File | Settings | File Templates. */ public class Utils { /** * For a given scan, within an MZ range, feed back the highest peak found. * * TODO: This could be faster, if necessary: we could do a binary search and then expand up and down. * @param scan * @param minMZ * @param maxMZ * @return */ public static double getMaxIntensityForScan(MSRun.MSScan scan, double minMZ, double maxMZ) { double maxIntensityThisScan = 0; float[][] data = scan.getSpectrum(); for (int j = 0; j < data[0].length; j++) { //since MZ values are monotonically increasing with j, when we // hit the max we can stop. if (data[0][j] > maxMZ) break; if (data[0][j] >= minMZ) { maxIntensityThisScan = Math.max(maxIntensityThisScan, data[1][j]); } } //_log.debug(" max intensity: scanIndex " + scanIndex + ", scanNumber " + run.getScan(scanIndex).getNum() + ", maxInt=" + maxIntensityThisScan); return maxIntensityThisScan; } private static final int PALE_CONSTANT = 100; public static Color paleColor(Color origColor) { int origRed = origColor.getRed(); int origGreen = origColor.getGreen(); int origBlue = origColor.getBlue(); int maxColorVal = Math.max(Math.max(origRed, origGreen), origBlue); if (maxColorVal + PALE_CONSTANT > 255) { int adjust = (maxColorVal + PALE_CONSTANT) - 255; origRed = Math.max(0, origRed - adjust); origGreen = Math.max(0, origGreen - adjust); origBlue = Math.max(0, origBlue - adjust); } Color paleColor = new Color(origRed + PALE_CONSTANT, origGreen + PALE_CONSTANT, origBlue + PALE_CONSTANT); return paleColor; } public static DrawingSupplier plainDrawingSupplier(Color c) { Paint black[] = new Paint[1]; black[0] = c; return new DefaultDrawingSupplier(black, DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE, DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE, DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE); } public static boolean allYsAreLEVal(PlotDataSupplier pds, double val) { XYSeries xys = pds.getGraphData(); int i = 0; for (Object oitem : xys.getItems()) { i++; if (((XYDataItem) oitem).getY().doubleValue() > val) { return false; } } return true; } public static boolean allYsAre0(PlotDataSupplier pds) { return allYsAreLEVal(pds, 0.0); } public static int allYsGEVal(XYSeries xys, double val) { int retVal = 0; for (Object oitem : xys.getItems()) { if (((XYDataItem) oitem).getY().doubleValue() > val) { retVal++; } } return retVal; } public static int allYsGEArr(PlotDataSupplier pds, float arr[][]) { int retVal = 0; XYSeries xys = pds.getGraphData(); float xysarr[][] = PDStoArray(pds); for (int i = 0; i < xysarr[0].length; i++) { if (xysarr[1][i] > arr[1][i]) { retVal++; } } return retVal; } public static int allYsGEArr(XYSeries xys, float arr[][]) { int retVal = 0; for (int i = 0; i < xys.getItemCount(); i++) { if (xys.getY(i).floatValue() > arr[1][i]) { retVal++; } } return retVal; } public static Polygon legendThing(int width, int height) { int[] xes = new int[100]; int[] yes = new int[100]; int leftX = -1 * (width / 2); int bottomY = -1 * (height / 2); int pointCounter = 0; xes[0] = leftX; yes[0] = bottomY; int curX = leftX; int curY = bottomY; while (curY <= height / 2) { xes[pointCounter] = curX; yes[pointCounter] = curY; pointCounter++; curX = width / 2; xes[pointCounter] = curX; yes[pointCounter] = curY; pointCounter++; curY++; xes[pointCounter] = curX; yes[pointCounter] = curY; pointCounter++; curX = leftX; } return new Polygon(xes, yes, pointCounter - 1); } public static float[][] PDStoArray(PlotDataSupplier pds) { float retval[][] = null; if (pds == null) return retval; XYSeries xys = pds.getGraphData(); int itemCount = xys.getItemCount(); retval = new float[2][itemCount]; for (int i = 0; i < itemCount; i++) { retval[0][i] = xys.getX(i).floatValue(); Number y = xys.getY(i); if (y != null) { retval[1][i] = y.floatValue(); } else { retval[1][i] = Float.NaN; } } return retval; } public static float[][] XYSeriesToArray(XYSeries xys) { /* float retval[][] = null; if(xys == null) return retval; int itemCount = xys.getItemCount(); retval = new float[2][itemCount]; for (int i = 0; i < itemCount; i++) { retval[0][i] = xys.getX(i).floatValue(); Number y = xys.getY(i); if (y != null) { retval[1][i] = y.floatValue(); } else { retval[1][i] = Float.NaN; } } */ double tmp[][] = xys.toArray(); float retval[][] = new float[2][tmp[0].length]; for (int i = 0; i < 2; i++) for (int j = 0; j < tmp[0].length; j++) retval[i][j] = (float) tmp[i][j]; return retval; } public static XYSeries ArrayToXYSeries(float farr[][], Comparable name) { XYSeries retval = new XYSeries(name); if (farr == null || farr[0].length == 0 || farr.length != 2) return retval; for (int i = 0; i < farr[0].length; i++) { retval.add(farr[0][i], farr[1][i], false); } return retval; } public static void ArrayRefillPDS(PlotDataSupplier pds, float newVals[][]) { if (pds == null || newVals == null) return; XYSeries xys = pds.getGraphData(); xys.clear(); for (int i = 0; i < newVals[0].length; i++) xys.add(newVals[0][i], newVals[1][i], false); } public static XYLineAnnotation line2Annotation(Line2D.Double l2dd, Stroke s, Paint p) { return new XYLineAnnotation(l2dd.getX1(), l2dd.getY1(), l2dd.getX2(), l2dd.getY2(), s, p); } public static int getMinScanForPlot(MRMTransition plot) { if (plot == null) return 1; int min = 10000000; for (MRMDaughter d : plot.getDaughters().values()) { if (d.getStartScan() < min) min = d.getStartScan(); } return min; } public static int getMaxScanForPlot(MRMTransition plot) { if (plot == null) return 100; int max = 0; for (MRMDaughter d : plot.getDaughters().values()) { if (d.getEndScan() > max) max = d.getEndScan(); } return max; } public static double getWeightedAverageDaughtersTime(XYSeriesCollection daughterSet) { double retVal = 0.0; double yTot = 0.0; double xWeight = 0.0; for (Object xyso : daughterSet.getSeries()) { XYSeries xys = (XYSeries) xyso; for (Object xydio : xys.getItems()) { XYDataItem xydi = (XYDataItem) xydio; xWeight += (xydi.getX().doubleValue() * xydi.getY().doubleValue()); yTot += xydi.getY().doubleValue(); } } if (yTot > 0) retVal = xWeight / yTot; return retVal; } public static int findIndexLEXvalue(PlotDataSupplier pds, float xvalue) { XYSeries xys = pds.getGraphData(); if (xys.getItems().size() == 0) return -1; float curx = -1; int i; for (i = 0; i < xys.getItemCount(); i++) { curx = xys.getDataItem(i).getX().floatValue(); if (curx >= xvalue) break; } if (i == 0 && curx > xvalue) return 0; if (curx == xvalue) return i; return i - 1; } public static boolean qualColIsEmpty() { boolean retVal = true; for (int i = 0; i < ((PeaksTableModel) (MRMDialog.peaksTable.getModel())).data.length; i++) { Object curQual = ((PeaksTableModel) (MRMDialog.peaksTable .getModel())).data[i][MRMDialog.peaksData.Quality.colno]; if (curQual != null && (curQual instanceof Float && ((Float) curQual).floatValue() != -1.0F)) { return false; } } return retVal; } }