2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
Copyright @ 1999-2005, The Institute for Genomic Research (TIGR). |
2 |
26 Feb 07 |
jari |
All rights reserved. |
2 |
26 Feb 07 |
jari |
4 |
*/ |
2 |
26 Feb 07 |
jari |
5 |
/* |
2 |
26 Feb 07 |
jari |
* $RCSfile: OrderType.java,v $ |
2 |
26 Feb 07 |
jari |
* $Revision: 1.3 $ |
2 |
26 Feb 07 |
jari |
* $Date: 2005/03/10 15:40:35 $ |
2 |
26 Feb 07 |
jari |
* $Author: braistedj $ |
2 |
26 Feb 07 |
jari |
* $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 |
/************************ ADT Order *********************************** |
2 |
26 Feb 07 |
jari |
* Defines a model for the orderings of ntyp different types of linear |
2 |
26 Feb 07 |
jari |
* elements having n (or npos) total positions in each of nseq sequences |
2 |
26 Feb 07 |
jari |
* (of elements). |
2 |
26 Feb 07 |
jari |
18 |
* |
2 |
26 Feb 07 |
jari |
* pos: 0 1 2 3 4 n-1 n |
2 |
26 Feb 07 |
jari |
* order: ---[1]---[2]---[3]---[4]---....---[n]--- |
2 |
26 Feb 07 |
jari |
21 |
* |
2 |
26 Feb 07 |
jari |
* seq[1]: A B A C B |
2 |
26 Feb 07 |
jari |
* seq[2]: C B A B A |
2 |
26 Feb 07 |
jari |
24 |
* : |
2 |
26 Feb 07 |
jari |
25 |
* : |
2 |
26 Feb 07 |
jari |
* seq[nseq]: B C A B A |
2 |
26 Feb 07 |
jari |
27 |
* |
2 |
26 Feb 07 |
jari |
* model[pos]: ---[1]---[2]---[3]---....---[n]--- |
2 |
26 Feb 07 |
jari |
* A #A[1] #A[2] #A[3] .... #A[n] |
2 |
26 Feb 07 |
jari |
* B #B[1] #B[2] #B[3] .... #B[n] |
2 |
26 Feb 07 |
jari |
* C #C[1] #C[2] #C[3] .... #C[n] |
2 |
26 Feb 07 |
jari |
32 |
* |
2 |
26 Feb 07 |
jari |
* pseudo: A*N0 ...etc... (all positions have N0 of each element) |
2 |
26 Feb 07 |
jari |
* B*N0 |
2 |
26 Feb 07 |
jari |
* C*N0 |
2 |
26 Feb 07 |
jari |
* N0 defines the prior probability N0 (in pseudocounts) that any |
2 |
26 Feb 07 |
jari |
* 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 |
/* Remove a sequence with ordering *order from the model; |
2 |
26 Feb 07 |
jari |
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 |
Return the relative probability that the order (given by inserting |
2 |
26 Feb 07 |
jari |
an element of type t at position i in *order) belongs to the |
2 |
26 Feb 07 |
jari |
model. (*order is assumed to be an array of n-1 elements.) |
2 |
26 Feb 07 |
jari |
67 |
|
2 |
26 Feb 07 |
jari |
pos=2: t=A |
2 |
26 Feb 07 |
jari |
type: B A C B A |
2 |
26 Feb 07 |
jari |
*order: ---[1]---[2]---[3]---[4]---....---[n-1]--- |
2 |
26 Feb 07 |
jari |
position: 0 1 2 3 4 n-2 n-1 |
2 |
26 Feb 07 |
jari |
72 |
|
2 |
26 Feb 07 |
jari |
creates: ---[1]---[2]---[3]---[4]---[5]....---[n]--- |
2 |
26 Feb 07 |
jari |
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 |
/* add a sequence with ordering *order to the model; assumes that |
2 |
26 Feb 07 |
jari |
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 |
} |