Changeset 2647


Ignore:
Timestamp:
04/19/07 13:55:27 (13 years ago)
Author:
curtis
Message:

Add full width max peak calculation.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/apps/slim/SlimPlotter.java

    r2547 r2647  
    581581              " (shifting by " + shift + ")"); 
    582582          } 
    583           setProgress(progress, 940 + 20 * 
    584             (c + 1) / channels); // estimate: 94% -> 96% 
     583          setProgress(progress, 940 + 10 * 
     584            (c + 1) / channels); // estimate: 94% -> 95% 
     585          if (progress.isCanceled()) System.exit(0); 
     586        } 
     587        log("Calculating full width half maxes"); 
     588        for (int c=0; c<channels; c++) { 
     589          // sum across all pixels 
     590          int[] sum = new int[timeBins]; 
     591          for (int h=0; h<height; h++) { 
     592            for (int w=0; w<width; w++) { 
     593              for (int t=0; t<timeBins; t++) sum[t] += values[c][h][w][t]; 
     594            } 
     595          } 
     596          // find full width half max 
     597          float half = sum[maxPeak] / 2f; 
     598          float h1 = Float.NaN, h2 = Float.NaN; 
     599          boolean up = true; 
     600          for (int t=0; t<timeBins-1; t++) { 
     601            if (sum[t] <= half && sum[t + 1] >= half) { // upslope 
     602              float q = (half - sum[t]) / (sum[t + 1] - sum[t]); 
     603              h1 = binsToPico(t + q); 
     604            } 
     605            else if (sum[t] >= half && sum[t + 1] <= half) { // downslope 
     606              float q = (half - sum[t + 1]) / (sum[t] - sum[t + 1]); 
     607              h2 = binsToPico(t + 1 - q); 
     608            } 
     609            if (h1 == h1 && h2 == h2) break; 
     610          } 
     611          String s = "#" + (c + 1); 
     612          while (s.length() < 3) s = " " + s; 
     613          log("\tChannel " + s + ": fwhm = " + (h2 - h1) + 
     614            " ps, peak = " + sum[maxPeak]); 
     615          log("\t             range = [" + h1 + ", " + h2 + "] ps"); 
     616          setProgress(progress, 950 + 10 * 
     617            (c + 1) / channels); // estimate: 95% -> 96% 
    585618          if (progress.isCanceled()) System.exit(0); 
    586619        } 
Note: See TracChangeset for help on using the changeset viewer.