Changeset 4231


Ignore:
Timestamp:
07/23/08 10:43:23 (12 years ago)
Author:
curtis
Message:

Add constructor signature that bins neighboring pixels.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/slim/CurveCollection.java

    r4212 r4231  
    5252 
    5353  /** 
     54   * Creates an object to manage a collection of curves for the given data. 
     55   * 
     56   * @param data Data array dimensioned [numRows][numCols][timeBins]. 
     57   * @param curveFitterClass Class representing the type of curve fitters 
     58   *   to use (e.g., loci.slim.GACurveFitter or loci.slim.LMCurveFitter). 
     59   * @param binRadius Radius of neighboring pixels to bin, 
     60   *   to improve signal-to-noise ratio. 
     61   * 
     62   * @throws IllegalArgumentException 
     63   *  if numRows or numCols is not a power of two or numRows != numCols 
     64   */ 
     65  public CurveCollection(int[][][] data, 
     66    Class curveFitterClass, int binRadius) 
     67  { 
     68    this(makeCurveFitters(data, curveFitterClass, binRadius)); 
     69  } 
     70 
     71  /** 
    5472   * Creates an object to manage the given collection of curves. 
    5573   * 
    56    * @param cf Array of curve fitters dimensioned [numRows][numCols]. 
     74   * @param curveFitters Array of curve fitters dimensioned [numRows][numCols]. 
    5775   * 
    5876   * @throws IllegalArgumentException 
     
    8098      for (int y=0; y<res; y++) { 
    8199        for (int x=0; x<res; x++) { 
    82           CurveFitter cf = new GACurveFitter(); 
     100          CurveFitter cf = newCurveFitter(curves.getClass()); 
    83101          int[] data0 = curves[d-1][2*y][2*x].getData(); 
    84102          int[] data1 = curves[d-1][2*y][2*x+1].getData(); 
     
    124142  public int getSubsamplingDepth() { return curves.length - 1; } 
    125143 
     144  // -- Utility methods -- 
     145 
     146  /** Creates a list of curve fitters using the given data as a source. */ 
     147  public static CurveFitter[][] makeCurveFitters(int[][][] data, 
     148    Class curveFitterClass, int binRadius) 
     149  { 
     150    int numRows = data.length; 
     151    int numCols = data.length; 
     152    int timeBins = data.length; 
     153 
     154    if (binRadius > 0) { 
     155      // we need to bin neighboring pixels; make a copy of the data (*sigh*) 
     156      int[][][] binnedData = new int[numRows][numCols][timeBins]; 
     157      for (int y=0; y<numRows; y++) { 
     158        for (int x=0; x<numCols; x++) { 
     159          for (int b=0; b<timeBins; b++) { 
     160            int sum = 0; 
     161            for (int dy=y-binRadius; dy<=y+binRadius; dy++) { 
     162              if (dy < 0) continue; 
     163              if (dy >= numRows) break; 
     164              for (int dx=x-binRadius; dx<=x+binRadius; dx++) { 
     165                if (dx < 0) continue; 
     166                if (dx >= numCols) break; 
     167                sum += data[dy][dx][b]; 
     168              } 
     169            } 
     170            binnedData[y][x][b] = sum; 
     171          } 
     172        } 
     173      } 
     174      data = binnedData; 
     175    } 
     176 
     177    CurveFitter[][] curveFitters = new CurveFitter[numRows][numCols]; 
     178    for (int y=0; y<numRows; y++) { 
     179      for (int x=0; x<numCols; x++) { 
     180        curveFitters[y][x] = newCurveFitter(curveFitterClass); 
     181        curveFitters[y][x].setData(data[y][x]); 
     182      } 
     183    } 
     184    return curveFitters; 
     185  } 
     186 
     187  public static CurveFitter newCurveFitter(Class c) { 
     188    try { 
     189      return (CurveFitter) c.newInstance(); 
     190    } 
     191    catch (InstantiationException exc) { exc.printStackTrace(); } 
     192    catch (IllegalAccessException exc) { exc.printStackTrace(); } 
     193    return null; 
     194  } 
     195 
    126196} 
Note: See TracChangeset for help on using the changeset viewer.