mev-4.0.01/source/org/tigr/microarray/mev/cgh/CGHDataGenerator/ComparisonFlankingRegionCalculator.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * ComparisonFlankingRegionCalculator.java
2 26 Feb 07 jari 3  *
2 26 Feb 07 jari 4  * Created on November 22, 2003, 5:54 PM
2 26 Feb 07 jari 5  */
2 26 Feb 07 jari 6
2 26 Feb 07 jari 7 package org.tigr.microarray.mev.cgh.CGHDataGenerator;
2 26 Feb 07 jari 8
2 26 Feb 07 jari 9 import java.util.Vector;
2 26 Feb 07 jari 10
2 26 Feb 07 jari 11 import org.tigr.microarray.mev.MultipleArrayData;
2 26 Feb 07 jari 12 import org.tigr.microarray.mev.cgh.CGHDataObj.CGHClone;
2 26 Feb 07 jari 13 import org.tigr.microarray.mev.cgh.CGHDataObj.FlankingRegion;
2 26 Feb 07 jari 14 import org.tigr.microarray.mev.cluster.gui.IData;
2 26 Feb 07 jari 15 //import java.util.ArrayList;
2 26 Feb 07 jari 16
2 26 Feb 07 jari 17 /**
2 26 Feb 07 jari 18  *
2 26 Feb 07 jari 19  * @author  Adam Margolin
2 26 Feb 07 jari 20  * @author Raktim Sinha
2 26 Feb 07 jari 21  */
2 26 Feb 07 jari 22 public class ComparisonFlankingRegionCalculator{
2 26 Feb 07 jari 23     MultipleArrayData data;
2 26 Feb 07 jari 24     //CGHMultipleArrayDataFcd fcd;
2 26 Feb 07 jari 25   //IData data;
2 26 Feb 07 jari 26
2 26 Feb 07 jari 27     int[] cloneIndices;
2 26 Feb 07 jari 28     int[] comparisonIndices;
2 26 Feb 07 jari 29     int frCloneIndex = 0;
2 26 Feb 07 jari 30     int comparisonPointer;
2 26 Feb 07 jari 31
2 26 Feb 07 jari 32     int[] experimentIndices;
2 26 Feb 07 jari 33
2 26 Feb 07 jari 34     /** Creates a new instance of ComparisonFlankingRegionCalculator */
2 26 Feb 07 jari 35     public ComparisonFlankingRegionCalculator() {
2 26 Feb 07 jari 36     }
2 26 Feb 07 jari 37
2 26 Feb 07 jari 38     public Vector calculateFlankingRegions(/*CGHMultipleArrayDataFcd fcd*/IData data, int[] cloneIndices, int[] comparisonIndices, int experimentIndices){
2 26 Feb 07 jari 39         int[] indices = {experimentIndices};
2 26 Feb 07 jari 40         return calculateFlankingRegions(data, cloneIndices, comparisonIndices, indices);
2 26 Feb 07 jari 41     }
2 26 Feb 07 jari 42     public Vector calculateFlankingRegions(/*CGHMultipleArrayDataFcd fcd*/IData data, int[] cloneIndices, int[] comparisonIndices, int[] experimentIndices){
2 26 Feb 07 jari 43         frCloneIndex = 0;
2 26 Feb 07 jari 44         this.data = (MultipleArrayData)data;
2 26 Feb 07 jari 45         this.experimentIndices = experimentIndices;
2 26 Feb 07 jari 46         this.comparisonIndices = comparisonIndices;
2 26 Feb 07 jari 47         this.cloneIndices = cloneIndices;
2 26 Feb 07 jari 48         this.comparisonPointer = 0;
2 26 Feb 07 jari 49         Vector flankingRegions = new Vector();
2 26 Feb 07 jari 50
2 26 Feb 07 jari 51         for(int chrom = 0; chrom < data.getNumChromosomes(); chrom++){
2 26 Feb 07 jari 52             flankingRegions.addAll(calculateChromosomeFlankingRegions(chrom));
2 26 Feb 07 jari 53         }
2 26 Feb 07 jari 54
2 26 Feb 07 jari 55         return flankingRegions;
2 26 Feb 07 jari 56     }
2 26 Feb 07 jari 57
2 26 Feb 07 jari 58     private Vector calculateChromosomeFlankingRegions(int chromosomeIndex){
2 26 Feb 07 jari 59         Vector flankingRegions = new Vector();
2 26 Feb 07 jari 60
2 26 Feb 07 jari 61         for(int cloneIndex = data.getChromosomeStartIndex(chromosomeIndex); cloneIndex <= data.getChromosomeEndIndex(chromosomeIndex); cloneIndex++){
2 26 Feb 07 jari 62             //if(frCloneIndex >= cloneIndices.length){
2 26 Feb 07 jari 63             //    return flankingRegions;
2 26 Feb 07 jari 64             //}
2 26 Feb 07 jari 65
2 26 Feb 07 jari 66             if(frCloneIndex < cloneIndices.length && cloneIndex == cloneIndices[frCloneIndex]){
2 26 Feb 07 jari 67                 int flankingRegionStart = findFlankingRegionStart(cloneIndex, data.getChromosomeStartIndex(chromosomeIndex));
2 26 Feb 07 jari 68                 CGHClone flankingRegionStartClone = findFlankingRegionStartClone(cloneIndex);
2 26 Feb 07 jari 69                 FlankingRegion curFlankingRegion = new FlankingRegion();
2 26 Feb 07 jari 70
2 26 Feb 07 jari 71                 cloneIndex = calculateFlankingRegionEnd(cloneIndex, data.getChromosomeEndIndex(chromosomeIndex));
2 26 Feb 07 jari 72
2 26 Feb 07 jari 73                 int flankingRegionStop = findFlankingRegionStop(cloneIndex, data.getChromosomeEndIndex(chromosomeIndex));
2 26 Feb 07 jari 74                 CGHClone flankingRegionStopClone = findFlankingRegionStopClone(cloneIndex);
2 26 Feb 07 jari 75
2 26 Feb 07 jari 76                 curFlankingRegion.setStart(flankingRegionStart);
2 26 Feb 07 jari 77                 curFlankingRegion.setStop(flankingRegionStop);
2 26 Feb 07 jari 78                 curFlankingRegion.setChromosome(chromosomeIndex);
2 26 Feb 07 jari 79                 curFlankingRegion.setStartClone(flankingRegionStartClone);
2 26 Feb 07 jari 80                 curFlankingRegion.setStopClone(flankingRegionStopClone);
2 26 Feb 07 jari 81
2 26 Feb 07 jari 82                 flankingRegions.add(curFlankingRegion);
2 26 Feb 07 jari 83                 frCloneIndex++;
2 26 Feb 07 jari 84             }
2 26 Feb 07 jari 85         }
2 26 Feb 07 jari 86
2 26 Feb 07 jari 87         return flankingRegions;
2 26 Feb 07 jari 88     }
2 26 Feb 07 jari 89
2 26 Feb 07 jari 90
2 26 Feb 07 jari 91
2 26 Feb 07 jari 92     private int findFlankingRegionStart(int cloneIndex, int chromosomeStartIndex){
2 26 Feb 07 jari 93
2 26 Feb 07 jari 94         while(cloneIndex >= chromosomeStartIndex && isBad(cloneIndex - 1)){
2 26 Feb 07 jari 95             cloneIndex--;
2 26 Feb 07 jari 96         }
2 26 Feb 07 jari 97         if(cloneIndex <= chromosomeStartIndex){
2 26 Feb 07 jari 98             return 0;
2 26 Feb 07 jari 99         }
2 26 Feb 07 jari 100         return data.getCloneAt(cloneIndex - 1).getStop();
2 26 Feb 07 jari 101     }
2 26 Feb 07 jari 102
2 26 Feb 07 jari 103
2 26 Feb 07 jari 104     private CGHClone findFlankingRegionStartClone(int cloneIndex){
2 26 Feb 07 jari 105         return data.getCloneAt(cloneIndex);
2 26 Feb 07 jari 106     }
2 26 Feb 07 jari 107
2 26 Feb 07 jari 108     private int calculateFlankingRegionEnd(int cloneIndex, int chromosomeEndIndex){
2 26 Feb 07 jari 109
2 26 Feb 07 jari 110         while((cloneIndex + 1) <= chromosomeEndIndex){
2 26 Feb 07 jari 111             if(((frCloneIndex + 1) < cloneIndices.length) && (cloneIndex + 1) == (cloneIndices[frCloneIndex + 1])){
2 26 Feb 07 jari 112                 cloneIndex++;
2 26 Feb 07 jari 113                 frCloneIndex++;
2 26 Feb 07 jari 114             }else if(isBad(cloneIndex + 1)){
2 26 Feb 07 jari 115                 cloneIndex++;
2 26 Feb 07 jari 116             }else{
2 26 Feb 07 jari 117                 break;
2 26 Feb 07 jari 118             }
2 26 Feb 07 jari 119         }
2 26 Feb 07 jari 120
2 26 Feb 07 jari 121         return cloneIndex;
2 26 Feb 07 jari 122
2 26 Feb 07 jari 123     }
2 26 Feb 07 jari 124
2 26 Feb 07 jari 125     private int findFlankingRegionStop(int cloneIndex, int chromosomeEndIndex){
2 26 Feb 07 jari 126         if(cloneIndex + 1 < chromosomeEndIndex){
2 26 Feb 07 jari 127             return data.getCloneAt(cloneIndex + 1).getStart();
2 26 Feb 07 jari 128         }else{
2 26 Feb 07 jari 129             return data.getCloneAt(cloneIndex).getStop();
2 26 Feb 07 jari 130         }
2 26 Feb 07 jari 131     }
2 26 Feb 07 jari 132
2 26 Feb 07 jari 133     private CGHClone findFlankingRegionStopClone(int cloneIndex){
2 26 Feb 07 jari 134         return data.getCloneAt(cloneIndex);
2 26 Feb 07 jari 135     }
2 26 Feb 07 jari 136
2 26 Feb 07 jari 137     private boolean isBad(int cloneIndex){
2 26 Feb 07 jari 138         for(int i = 0; i < experimentIndices.length; i++){
2 26 Feb 07 jari 139             if(data.getCopyNumberDetermination(experimentIndices[i], cloneIndex) != IData.BAD_CLONE){
2 26 Feb 07 jari 140                 return false;
2 26 Feb 07 jari 141             }
2 26 Feb 07 jari 142         }
2 26 Feb 07 jari 143
2 26 Feb 07 jari 144         if(!comparatorExists(cloneIndex)){
2 26 Feb 07 jari 145             return true;
2 26 Feb 07 jari 146         }else{
2 26 Feb 07 jari 147             return false;
2 26 Feb 07 jari 148         }
2 26 Feb 07 jari 149     }
2 26 Feb 07 jari 150
2 26 Feb 07 jari 151     private boolean comparatorExists(int cloneIndex){
2 26 Feb 07 jari 152         if (this.comparisonIndices == null){
2 26 Feb 07 jari 153             return false;
2 26 Feb 07 jari 154         }
2 26 Feb 07 jari 155
2 26 Feb 07 jari 156         //just resetting the pointer for now because is was running past the index
2 26 Feb 07 jari 157         comparisonPointer = 0;
2 26 Feb 07 jari 158
2 26 Feb 07 jari 159         while(comparisonPointer < comparisonIndices.length && comparisonIndices[comparisonPointer] < cloneIndex){
2 26 Feb 07 jari 160             comparisonPointer++;
2 26 Feb 07 jari 161         }
2 26 Feb 07 jari 162
2 26 Feb 07 jari 163         if(comparisonPointer < comparisonIndices.length && comparisonIndices[comparisonPointer] == cloneIndex){
2 26 Feb 07 jari 164             return true;
2 26 Feb 07 jari 165         }
2 26 Feb 07 jari 166
2 26 Feb 07 jari 167         return false;
2 26 Feb 07 jari 168     }
2 26 Feb 07 jari 169 }