mev-4.0.01/source/org/tigr/microarray/mev/file/agilent/TopFeature.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2  * Created on Jan 22, 2004
2 26 Feb 07 jari 3  */
2 26 Feb 07 jari 4 package org.tigr.microarray.mev.file.agilent;
2 26 Feb 07 jari 5
2 26 Feb 07 jari 6 import java.util.StringTokenizer;
2 26 Feb 07 jari 7
2 26 Feb 07 jari 8 /**
2 26 Feb 07 jari 9  * Subclass of AgilentFeature.  Represents a NINE_COLUMN Agilent Feature (has a TopHit column).
2 26 Feb 07 jari 10  * Beyond the base capabilities of AgilentFeature, this class deals with the TopHit column.
2 26 Feb 07 jari 11  * The TopHit can have none, any, or all of the following ids: GenbankPrimate, GenPept, SwissProt.
2 26 Feb 07 jari 12  * We want to use GenbankPrimate when it is available.  Else, just use the geneName.
2 26 Feb 07 jari 13  * 
2 26 Feb 07 jari 14  * @author vu
2 26 Feb 07 jari 15  */
2 26 Feb 07 jari 16 public class TopFeature extends AgilentFeature {  
2 26 Feb 07 jari 17   static final String sGB = "GB";
2 26 Feb 07 jari 18   static final String sGBPRI = "GBPri";
2 26 Feb 07 jari 19   static final String sGP = "GP";
2 26 Feb 07 jari 20   static final String sSP = "SP";
2 26 Feb 07 jari 21   
2 26 Feb 07 jari 22   private String topHit;
2 26 Feb 07 jari 23   private String accession;
2 26 Feb 07 jari 24   
2 26 Feb 07 jari 25   
2 26 Feb 07 jari 26   /**
2 26 Feb 07 jari 27    * Constructor.  Parses a line representing a single feature and stores as local variables.
2 26 Feb 07 jari 28    * @param line One line from an Agilent Pattern File NOT containing a TopHit column
2 26 Feb 07 jari 29    */
2 26 Feb 07 jari 30   public TopFeature(String line) {
2 26 Feb 07 jari 31     StringTokenizer st = new StringTokenizer(line,"\t");
2 26 Feb 07 jari 32     int kount = st.countTokens();
2 26 Feb 07 jari 33     if( kount != 9 ) {
2 26 Feb 07 jari 34       //big problems here
2 26 Feb 07 jari 35       System.out.println("kount(" + kount + ") != 9:" + line);
2 26 Feb 07 jari 36     } else {
2 26 Feb 07 jari 37       //we're ok
2 26 Feb 07 jari 38       String one = st.nextToken();
2 26 Feb 07 jari 39       String two = st.nextToken();
2 26 Feb 07 jari 40       String three = st.nextToken();
2 26 Feb 07 jari 41       String four = st.nextToken();
2 26 Feb 07 jari 42       String five = st.nextToken();
2 26 Feb 07 jari 43       String six = st.nextToken();
2 26 Feb 07 jari 44       String seven = st.nextToken();
2 26 Feb 07 jari 45       String eight = st.nextToken();
2 26 Feb 07 jari 46       String nine = st.nextToken();
2 26 Feb 07 jari 47       
2 26 Feb 07 jari 48       this.setCol(this.s2int(one));
2 26 Feb 07 jari 49       this.setRow(this.s2int(two));
2 26 Feb 07 jari 50       this.setName(three);
2 26 Feb 07 jari 51       this.setSysName(four);
2 26 Feb 07 jari 52       this.setRefNumber(this.s2int(five));
2 26 Feb 07 jari 53       this.setControlType(six);
2 26 Feb 07 jari 54       this.setGeneName(seven);
2 26 Feb 07 jari 55       this.setTopHit(eight);
2 26 Feb 07 jari 56       this.setDesc(nine);
2 26 Feb 07 jari 57       
2 26 Feb 07 jari 58       this.assignFeatureType();
2 26 Feb 07 jari 59       if(this.hasGbPri(this.getTopHit())) {
2 26 Feb 07 jari 60         this.setAccession(TopFeature.parseAccession(this.topHit));
2 26 Feb 07 jari 61         //System.out.println(this.getAccession() + "\t" + this.topHit);
2 26 Feb 07 jari 62       } else {
2 26 Feb 07 jari 63         this.setAccession(this.getGeneName());
2 26 Feb 07 jari 64       }
2 26 Feb 07 jari 65     }
2 26 Feb 07 jari 66   }//end constructor
2 26 Feb 07 jari 67   
2 26 Feb 07 jari 68   
2 26 Feb 07 jari 69   /**
2 26 Feb 07 jari 70    * Tests String s to see if it contains a GBPri accession number.
2 26 Feb 07 jari 71    * @param s  A String from the TopHit column in an Agilent Pattern.
2 26 Feb 07 jari 72    * @return  True if there is a GBPri accession number.
2 26 Feb 07 jari 73    */
2 26 Feb 07 jari 74   private boolean hasGbPri(String s) {
2 26 Feb 07 jari 75     boolean toReturn = false;
2 26 Feb 07 jari 76     if(s.toLowerCase().startsWith(TopFeature.sGBPRI.toLowerCase())) {
2 26 Feb 07 jari 77       toReturn = true;
2 26 Feb 07 jari 78     } else if(s.toLowerCase().startsWith(TopFeature.sGB.toLowerCase())) {
2 26 Feb 07 jari 79       toReturn = true;
2 26 Feb 07 jari 80     } else {
2 26 Feb 07 jari 81       int iPipe = s.indexOf("|");
2 26 Feb 07 jari 82       while(iPipe != -1) {
2 26 Feb 07 jari 83         int lastPipe = iPipe;
2 26 Feb 07 jari 84         String sub = s.substring(iPipe + 1);
2 26 Feb 07 jari 85         if(sub.toLowerCase().startsWith(TopFeature.sGBPRI.toLowerCase())) {
2 26 Feb 07 jari 86           toReturn = true;
2 26 Feb 07 jari 87         }
2 26 Feb 07 jari 88         iPipe = s.indexOf("|",(lastPipe+1));
2 26 Feb 07 jari 89       }
2 26 Feb 07 jari 90     }
2 26 Feb 07 jari 91     return toReturn;
2 26 Feb 07 jari 92   }//end hasGbPri
2 26 Feb 07 jari 93   
2 26 Feb 07 jari 94   
2 26 Feb 07 jari 95   /**
2 26 Feb 07 jari 96    * Parses the main accession number.  Acc #'s sometimes have a build number
2 26 Feb 07 jari 97    * appended.
2 26 Feb 07 jari 98    * @param s  The Accession Number
2 26 Feb 07 jari 99    * @return  The parsed Accession Number
2 26 Feb 07 jari 100    */
2 26 Feb 07 jari 101   static String parseAccession(String s) {
2 26 Feb 07 jari 102     String toReturn;
2 26 Feb 07 jari 103     String temp;
2 26 Feb 07 jari 104     int iGb = s.toLowerCase().indexOf(TopFeature.sGB.toLowerCase());    
2 26 Feb 07 jari 105     int iPipe = s.indexOf("|",iGb);
2 26 Feb 07 jari 106     int iColon = s.indexOf(":",iGb);
2 26 Feb 07 jari 107     
2 26 Feb 07 jari 108     int iNextPipe = s.indexOf("|",(iPipe + 1));
2 26 Feb 07 jari 109     int iNextColon = s.indexOf(":",(iColon + 1));
2 26 Feb 07 jari 110     
2 26 Feb 07 jari 111     if(iPipe != -1) {
2 26 Feb 07 jari 112       //we know it's using pipes, not colons
2 26 Feb 07 jari 113       if(iNextPipe == -1) {
2 26 Feb 07 jari 114         //there are no other pipes, just use the rest of the string
2 26 Feb 07 jari 115         temp = s.substring((iPipe + 1));
2 26 Feb 07 jari 116       } else {
2 26 Feb 07 jari 117         //backtrack off next pipe
2 26 Feb 07 jari 118         temp = s.substring((iPipe + 1),(iNextPipe - 2));
2 26 Feb 07 jari 119       }
2 26 Feb 07 jari 120     } else {
2 26 Feb 07 jari 121       //it's using colons
2 26 Feb 07 jari 122       if(iNextColon == -1) {
2 26 Feb 07 jari 123         //there are no other colons, just use the rest of the string
2 26 Feb 07 jari 124         temp = s.substring((iColon + 1));
2 26 Feb 07 jari 125       } else {
2 26 Feb 07 jari 126         //backtrack off next colon
2 26 Feb 07 jari 127         temp = s.substring((iColon + 1), (iNextColon - 2));
2 26 Feb 07 jari 128       }
2 26 Feb 07 jari 129     }
2 26 Feb 07 jari 130     
2 26 Feb 07 jari 131     int iDot = temp.indexOf(".");
2 26 Feb 07 jari 132     int iDash = temp.indexOf("-");
2 26 Feb 07 jari 133     if(iDot != -1) {
2 26 Feb 07 jari 134       //has a dot ending
2 26 Feb 07 jari 135       toReturn = temp.substring(0,iDot);
2 26 Feb 07 jari 136     } else if(iDash != -1) {
2 26 Feb 07 jari 137       //has a dash ending
2 26 Feb 07 jari 138       toReturn = temp.substring(0,iDash);
2 26 Feb 07 jari 139     } else {
2 26 Feb 07 jari 140       //has no ending
2 26 Feb 07 jari 141       toReturn = temp;
2 26 Feb 07 jari 142     }
2 26 Feb 07 jari 143     
2 26 Feb 07 jari 144     return toReturn;
2 26 Feb 07 jari 145   }//end parseAccession
2 26 Feb 07 jari 146   
2 26 Feb 07 jari 147   
2 26 Feb 07 jari 148   /**
2 26 Feb 07 jari 149    * Counts the number of times char c occurs in String s
2 26 Feb 07 jari 150    * @param s
2 26 Feb 07 jari 151    * @param c
2 26 Feb 07 jari 152    * @return  
2 26 Feb 07 jari 153    */
2 26 Feb 07 jari 154   private int kountChar(String s, char c) {
2 26 Feb 07 jari 155     int toReturn = 0;
2 26 Feb 07 jari 156     
2 26 Feb 07 jari 157     for(int i = 0; i < s.length(); i ++) {
2 26 Feb 07 jari 158       char at = s.charAt(i);
2 26 Feb 07 jari 159       if(at == c) {
2 26 Feb 07 jari 160         toReturn++;
2 26 Feb 07 jari 161       }
2 26 Feb 07 jari 162     }
2 26 Feb 07 jari 163     
2 26 Feb 07 jari 164     return toReturn;
2 26 Feb 07 jari 165   }//end kountPipes
2 26 Feb 07 jari 166   
2 26 Feb 07 jari 167   
2 26 Feb 07 jari 168   /**
2 26 Feb 07 jari 169    * Converts a String to an int
2 26 Feb 07 jari 170    * @param s  String value representing an int
2 26 Feb 07 jari 171    * @return  int
2 26 Feb 07 jari 172    */
2 26 Feb 07 jari 173   public int s2int(String s) {
2 26 Feb 07 jari 174     Integer I = new Integer(s);
2 26 Feb 07 jari 175     return I.intValue();
2 26 Feb 07 jari 176   }
2 26 Feb 07 jari 177
2 26 Feb 07 jari 178   private void setTopHit(String sTopHit) {
2 26 Feb 07 jari 179     this.topHit = sTopHit;
2 26 Feb 07 jari 180   }
2 26 Feb 07 jari 181
2 26 Feb 07 jari 182   public String getTopHit() {
2 26 Feb 07 jari 183     return topHit;
2 26 Feb 07 jari 184   }
2 26 Feb 07 jari 185
2 26 Feb 07 jari 186   private void setAccession(String accession) {
2 26 Feb 07 jari 187     this.accession = accession;
2 26 Feb 07 jari 188   }
2 26 Feb 07 jari 189
2 26 Feb 07 jari 190   public String getAccession() {
2 26 Feb 07 jari 191     return accession;
2 26 Feb 07 jari 192   }
2 26 Feb 07 jari 193 }