mev-4.0.01/source/org/tigr/microarray/mev/motif/OrderType.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 /*
2 26 Feb 07 jari 2 Copyright @ 1999-2005, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 3 All rights reserved.
2 26 Feb 07 jari 4 */
2 26 Feb 07 jari 5 /*
2 26 Feb 07 jari 6  * $RCSfile: OrderType.java,v $
2 26 Feb 07 jari 7  * $Revision: 1.3 $
2 26 Feb 07 jari 8  * $Date: 2005/03/10 15:40:35 $
2 26 Feb 07 jari 9  * $Author: braistedj $
2 26 Feb 07 jari 10  * $State: Exp $
2 26 Feb 07 jari 11  */
2 26 Feb 07 jari 12 package org.tigr.microarray.mev.motif;
2 26 Feb 07 jari 13
2 26 Feb 07 jari 14 /************************ ADT Order ***********************************
2 26 Feb 07 jari 15  * Defines a model for the orderings of ntyp different types of linear
2 26 Feb 07 jari 16  * elements having n (or npos) total positions in each of nseq sequences
2 26 Feb 07 jari 17  * (of elements).
2 26 Feb 07 jari 18  *
2 26 Feb 07 jari 19  * pos:           0     1     2     3     4     n-1    n
2 26 Feb 07 jari 20  * order:        ---[1]---[2]---[3]---[4]---....---[n]---
2 26 Feb 07 jari 21  *
2 26 Feb 07 jari 22  * seq[1]:      A     B     A     C            B
2 26 Feb 07 jari 23  * seq[2]:      C     B     A     B            A
2 26 Feb 07 jari 24  * :
2 26 Feb 07 jari 25  * :
2 26 Feb 07 jari 26  * seq[nseq]:      B     C     A     B            A
2 26 Feb 07 jari 27  *
2 26 Feb 07 jari 28  * model[pos]:     ---[1]---[2]---[3]---....---[n]---
2 26 Feb 07 jari 29  * A      #A[1] #A[2] #A[3]  ....  #A[n]
2 26 Feb 07 jari 30  * B      #B[1] #B[2] #B[3]  ....  #B[n]
2 26 Feb 07 jari 31  * C      #C[1] #C[2] #C[3]  ....  #C[n]
2 26 Feb 07 jari 32  *
2 26 Feb 07 jari 33  * pseudo:     A*N0  ...etc...  (all positions have N0 of each element)
2 26 Feb 07 jari 34  * B*N0
2 26 Feb 07 jari 35  * C*N0
2 26 Feb 07 jari 36  * N0 defines the prior probability N0 (in pseudocounts) that any
2 26 Feb 07 jari 37  * element type will occur at any position in the ordering.
2 26 Feb 07 jari 38  **********************************************************************/
2 26 Feb 07 jari 39
2 26 Feb 07 jari 40 public class OrderType {
2 26 Feb 07 jari 41     long ntyp;        /* number of types of elements */
2 26 Feb 07 jari 42     long npos;        /* total number of postions for elements */
2 26 Feb 07 jari 43     long nseq;        /* number of sequences in the model */
2 26 Feb 07 jari 44     double N0;        /* number of pseudo elements at each pos */
2 26 Feb 07 jari 45     double[][] model;         /* model[npos][ntyp] = # each type @ pos */
2 26 Feb 07 jari 46     
2 26 Feb 07 jari 47     public OrderType() {
2 26 Feb 07 jari 48     }
2 26 Feb 07 jari 49     
2 26 Feb 07 jari 50 /* Remove a sequence with ordering *order from the model;
2 26 Feb 07 jari 51    assumes that order is an array of npos elements (integers). */
2 26 Feb 07 jari 52     
2 26 Feb 07 jari 53     void  RmOrder(long[] order) {
2 26 Feb 07 jari 54   long i;
2 26 Feb 07 jari 55   nseq--;
2 26 Feb 07 jari 56   for (i=0; i<npos; i++) {
2 26 Feb 07 jari 57       model[(int)i][(int)order[(int)i]] -= 1.0;
2 26 Feb 07 jari 58   }
2 26 Feb 07 jari 59     }
2 26 Feb 07 jari 60     
2 26 Feb 07 jari 61     
2 26 Feb 07 jari 62     
2 26 Feb 07 jari 63     /**********************************************************
2 26 Feb 07 jari 64    Return the relative probability that the order (given by inserting
2 26 Feb 07 jari 65    an element of type t at position i in *order) belongs to the
2 26 Feb 07 jari 66    model.  (*order is assumed to be an array of n-1 elements.)
2 26 Feb 07 jari 67  
2 26 Feb 07 jari 68   pos=2:        t=A
2 26 Feb 07 jari 69   type:        B     A     C     B             A
2 26 Feb 07 jari 70      *order:  ---[1]---[2]---[3]---[4]---....---[n-1]---
2 26 Feb 07 jari 71   position:      0     1     2     3     4     n-2      n-1
2 26 Feb 07 jari 72  
2 26 Feb 07 jari 73   creates:  ---[1]---[2]---[3]---[4]---[5]....---[n]---
2 26 Feb 07 jari 74   type:        B     A     A     C     B         A
2 26 Feb 07 jari 75  
2 26 Feb 07 jari 76      ***********************************************************/
2 26 Feb 07 jari 77     public double RelProbOrder(long[] order, long t, long pos) {
2 26 Feb 07 jari 78   long i;
2 26 Feb 07 jari 79   double P; /* probability */
2 26 Feb 07 jari 80   
2 26 Feb 07 jari 81   if (pos >= npos) System.out.println("not that many positions in order");
2 26 Feb 07 jari 82   for (P=1.0,i=0; i < npos; i++) {
2 26 Feb 07 jari 83       if (i == pos) {
2 26 Feb 07 jari 84     P *= model[(int)i][(int)t];
2 26 Feb 07 jari 85       } else if (i < pos) {
2 26 Feb 07 jari 86     P *= model[(int)i][(int)order[(int)i]];
2 26 Feb 07 jari 87       } else {  /* i-1 > pos */
2 26 Feb 07 jari 88     P *= model[(int)i][(int)order[(int)(i-1)]];
2 26 Feb 07 jari 89       }
2 26 Feb 07 jari 90   }
2 26 Feb 07 jari 91   return P;
2 26 Feb 07 jari 92     }
2 26 Feb 07 jari 93     
2 26 Feb 07 jari 94 /* add a sequence with ordering  *order to the model; assumes that
2 26 Feb 07 jari 95    order is an array of npos elements (integers). */
2 26 Feb 07 jari 96     
2 26 Feb 07 jari 97     void Add2Order(long[] order) {
2 26 Feb 07 jari 98   long i;
2 26 Feb 07 jari 99   nseq++;
2 26 Feb 07 jari 100   for (i=0; i<npos; i++) {
2 26 Feb 07 jari 101       model[(int)i][(int)order[(int)i]] += 1.0;
2 26 Feb 07 jari 102   }
2 26 Feb 07 jari 103     }
2 26 Feb 07 jari 104 }