Changeset 4267


Ignore:
Timestamp:
07/31/08 16:18:21 (12 years ago)
Author:
ansari
Message:
 
Location:
trunk/loci/apps/flow
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/apps/flow/Detector.java

    r4185 r4267  
    3131*/ 
    3232 
    33 package loci.apps.flow; 
    3433 
    3534import ij.*; 
     
    107106                        } 
    108107                } 
     108                 
     109                boolean[] edgeParticle = new boolean[numRegions]; 
     110                for (int i=0; i<size; i++) { 
     111                        if (floodArray[0][i] > 1) edgeParticle[floodArray[0][i]-2] = true; 
     112                        if (floodArray[i][0] > 1) edgeParticle[floodArray[i][0]-2] = true; 
     113                        if (floodArray[size-1][i] > 1) edgeParticle[floodArray[size-1][i]-2] = true; 
     114                        if (floodArray[i][size-1] > 1) edgeParticle[floodArray[i][size-1]-2] = true; 
     115                } 
     116                 
     117                 
    109118                for (int i=0; i<numRegions; i++) { 
    110                         if (area[i] < areaThreshold) continue; 
     119                        if (area[i] < areaThreshold || edgeParticle[i]) continue; 
    111120                        retval.add(new Particle(area[i], totalIntensity[i])); 
    112121                        //System.out.println("Region "+i+": Area "+area[i]+"  Intensity "+totalIntensity[i]); 
  • trunk/loci/apps/flow/JVMLinkFlowCytometry.java

    r4185 r4267  
    3131*/ 
    3232 
    33 package loci.apps.flow; 
     33 
     34// TODO: make sure the pixels/micron thing is consistent 
    3435 
    3536import ij.*; 
     
    7980        private static final int MIN_INTENSITY = 0; 
    8081        private static final int MAX_INTENSITY = 255; 
     82         
     83        private static final int INTENSITY_AXIS = 0; 
     84        private static final int AREA_AXIS = 1; 
     85         
     86        private static final int PIXELS = 0; 
     87        private static final int MICRONS = 1; 
    8188 
    8289        private static ImageJ ij; 
     
    120127        private static int resolutionHeight = 0; 
    121128        private static int minX=0, maxX=0, minY=0, maxY=0; 
    122         private static int intensityThreshold=30, areaThreshold=100; 
     129        private static int intensityThreshold=30, areaThresholdInPixels=100, areaUnit=0; 
    123130        private static boolean showParticles=false; 
    124131         
     
    257264                                                //for the detected particles window 
    258265                                                if (showParticles) { 
    259                                                         d = new Detector(resolutionWidth, intensityThreshold, areaThreshold); 
     266                                                        d = new Detector(resolutionWidth, intensityThreshold, areaThresholdInPixels); 
    260267                                                        d.findParticles(stack.getProcessor(slideNum)); 
    261268                                                        d.crunchArray(); 
     
    347354        public static void setMaxY(int val) { maxY = val; } 
    348355        public static void setIntensityThreshold(int val) { intensityThreshold = val; } 
    349         public static void setAreaThreshold(int val) { areaThreshold = val; } 
    350         public static void setPixelMicronSquared(double val) { pixelMicronSquared = val; } 
     356        public static void setAreaThreshold(int val) {  
     357                if (areaUnit == PIXELS) { 
     358                        areaThresholdInPixels = val; 
     359                } 
     360                else if (areaUnit == MICRONS) { 
     361                        areaThresholdInPixels = (int) Math.round(val*pixelMicronSquared);                        
     362                } 
     363        } 
     364        public static void setAreaUnits(int val) { areaUnit = val; } 
     365        public static void setPixelMicronSquared(double val) { pixelMicronSquared = val*val; } 
    351366        public static void reprocessAll() { 
    352367                particles = new Vector<Particle>(); 
     
    403418                sliceNum = sliceNum+2; 
    404419                imp.unlock(); 
    405                 d = new Detector(resolutionWidth, intensityThreshold, areaThreshold); 
     420                d = new Detector(resolutionWidth, intensityThreshold, areaThresholdInPixels); 
    406421                d.findParticles(stack.getProcessor(sliceNum)); 
    407422                Vector<Particle> thisParticles = d.crunchArray(); 
     
    421436                        thisParticle.setNum(nParticles++); 
    422437                        thisParticle.setSliceNum(nSlices); 
     438                        thisParticle.setPixelsPerMicron(pixelMicronSquared); 
    423439                        particles.add(thisParticle); 
     440                 
    424441                        //thisParticle.print(); 
    425442                         
    426                         int thisArea = thisParticle.getArea(); 
     443                        int thisArea = thisParticle.getMicronArea(); 
    427444                        int thisIntensity = thisParticle.getIntensity(); 
    428445                        if (thisArea > maxArea) maxArea = thisArea; 
     
    494511                else { 
    495512                        switch(xAxis) { 
    496                                 case 1: return (minArea/pixelMicronSquared - 0.05*areaRange); 
    497                                 case 0: return MIN_INTENSITY;  
     513                                case AREA_AXIS: return (minArea/pixelMicronSquared - 0.05*areaRange); 
     514                                case INTENSITY_AXIS: return MIN_INTENSITY;  
    498515                                default: return (minArea/pixelMicronSquared - 0.05*areaRange); 
    499516                        } 
     
    507524                else { 
    508525                        switch(xAxis) { 
    509                                 case 1: return (maxArea/pixelMicronSquared+0.05*areaRange); 
    510                                 case 0: return MAX_INTENSITY; 
     526                                case AREA_AXIS: return (maxArea/pixelMicronSquared+0.05*areaRange); 
     527                                case INTENSITY_AXIS: return MAX_INTENSITY; 
    511528                                default: return (maxArea/pixelMicronSquared+0.05*areaRange); 
    512529                        } 
     
    520537                else { 
    521538                        switch(yAxis) { 
    522                                 case 1: return (minArea/pixelMicronSquared - 0.05*areaRange); 
    523                                 case 0: return MIN_INTENSITY;  
     539                                case AREA_AXIS: return (minArea/pixelMicronSquared - 0.05*areaRange); 
     540                                case INTENSITY_AXIS: return MIN_INTENSITY;  
    524541                                default: return (minArea/pixelMicronSquared - 0.05*areaRange); 
    525542                        } 
     
    533550                else { 
    534551                        switch(yAxis) { 
    535                                 case 1: return (maxArea/pixelMicronSquared+0.05*areaRange); 
    536                                 case 0: return MAX_INTENSITY; 
     552                                case AREA_AXIS: return (maxArea/pixelMicronSquared+0.05*areaRange); 
     553                                case INTENSITY_AXIS: return MAX_INTENSITY; 
    537554                                default: return (maxArea/pixelMicronSquared+0.05*areaRange); 
    538555                        } 
     
    582599                for (int i=beginIndex; i<=endIndex; i++) { 
    583600                        switch(xAxis) { 
    584                                 case 0: xArray[i-beginIndex] = particles.get(i).totalIntensity/particles.get(i).area; break; 
    585                                 case 1: xArray[i-beginIndex] = particles.get(i).area/pixelMicronSquared; break; 
     601                                case 0: xArray[i-beginIndex] = particles.get(i).getMeanIntensity(); break; 
     602                                case 1: xArray[i-beginIndex] = particles.get(i).getMicronArea(); break; 
    586603                        } 
    587604                        switch(yAxis) { 
    588                                 case 0: yArray[i-beginIndex] = particles.get(i).totalIntensity/particles.get(i).area; break; 
    589                                 case 1: yArray[i-beginIndex] = particles.get(i).area/pixelMicronSquared; break; 
     605                                case 0: yArray[i-beginIndex] = particles.get(i).getMeanIntensity(); break; 
     606                                case 1: yArray[i-beginIndex] = particles.get(i).getMicronArea(); break; 
    590607                        } 
    591608                } 
     
    682699                int size = imp.getWidth(); 
    683700                 
     701                double PixelsPerMicron = Double.valueOf(IJ.getString("Please enter the pixels/micron value for this analysis", "0.1")); 
     702                pixelMicronSquared = PixelsPerMicron*PixelsPerMicron; 
     703                 
    684704                init(size, size, 1); 
    685705                showParticles(true); 
     
    693713                 
    694714                BufferedWriter bw = new BufferedWriter(new FileWriter(filename+".values")); 
    695                 bw.write("Area\t\tIntensity"); bw.newLine(); bw.newLine(); 
     715                bw.write("Area (micron^2)\t\t(pixel^2)\t\tIntensity\t\tFrame"); bw.newLine(); bw.newLine(); 
    696716                System.out.println("Particles size is "+particles.size()); 
    697717                for (int i=0; i<particles.size(); i++) { 
    698                         bw.write(particles.get(i).getArea()+"\t\t"+particles.get(i).getMeanIntensity()); bw.newLine(); 
     718                        bw.write(particles.get(i).getMicronArea()+"\t\t"+particles.get(i).getPixelArea()+"\t\t"+particles.get(i).getMeanIntensity()+"\t\t"+(particles.get(i).getSliceNum()-2)); bw.newLine(); 
    699719                } 
    700720                bw.flush(); 
  • trunk/loci/apps/flow/Particle.java

    r4185 r4267  
    3131*/ 
    3232 
    33 package loci.apps.flow; 
    3433 
    3534public class Particle { 
    36                 int area; 
    37                 int num; 
    38                 int totalIntensity; 
    39                 int sliceNum; 
     35        private int pixelArea; 
     36        private int micronArea; 
     37        private int num; 
     38        private int totalIntensity; 
     39        private int sliceNum; 
     40        private double pixelMicronSquared; 
    4041                 
    4142        public Particle(int a, int i) { 
    42                 area = a; 
     43                pixelArea = a; 
    4344                totalIntensity = i; 
    4445        } 
    4546         
     47        public void setPixelsPerMicron(double ppm) { 
     48                pixelMicronSquared = ppm; 
     49                micronArea = (int) Math.round(pixelArea/pixelMicronSquared); 
     50        } 
     51         
    4652        public void print() { 
    47                 System.out.println("Particle "+num+" on slice "+sliceNum+" with area "+area+" and total intensity "+totalIntensity); 
     53                System.out.println("Particle "+num+" on slice "+sliceNum+" with area (in pixels) "+pixelArea+" and total intensity "+totalIntensity); 
    4854        } 
    4955 
     
    6470        } 
    6571 
    66         public int getArea() { 
    67                 return area; 
     72        public int getPixelArea() { 
     73                return pixelArea; 
     74        } 
     75 
     76        public int getMicronArea() { 
     77                return micronArea; 
    6878        } 
    6979 
     
    7383 
    7484        public int getMeanIntensity() { 
    75                 if (area==0) return 0;  
    76                 else return totalIntensity/area; 
    77         } 
     85                if (pixelArea==0) return 0;  
     86                else return totalIntensity/micronArea; 
     87        }        
    7888} 
Note: See TracChangeset for help on using the changeset viewer.