File: DistributionTest.java

package info (click to toggle)
biojava-live 1%3A1.7.1-8
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 55,160 kB
  • sloc: java: 180,820; xml: 6,908; sql: 510; makefile: 50
file content (144 lines) | stat: -rw-r--r-- 5,011 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package org.biojava.bio.dist;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import junit.framework.AssertionFailedError;
import junit.framework.TestCase;

import org.biojava.bio.seq.DNATools;
import org.biojava.bio.symbol.AlphabetManager;
import org.biojava.bio.symbol.FiniteAlphabet;
import org.biojava.bio.symbol.IllegalAlphabetException;
import org.biojava.bio.symbol.IllegalSymbolException;
import org.biojava.bio.symbol.Symbol;
import org.biojava.utils.ChangeVetoException;

/**
 * Tests that simple distributions work as advertised.
 *
 * @author Matthew Pocock
 * @since 1.2
 */
public class DistributionTest extends TestCase {
  private double delta = 0.00001;
  private double a = 0.1;
  private double g = 0.3;
  private double c = 0.25;
  private double t = 0.35;

  private Distribution dist;
  private Distribution gap;
  private Distribution gapDist;
  
  public DistributionTest(String name) {
    super(name);
  }
  
  protected void setUp() {
    // create distributions
    try {
      dist = DistributionFactory.DEFAULT.createDistribution(DNATools.getDNA());
      gap = new GapDistribution(DNATools.getDNA());
      gapDist = new PairDistribution(gap, dist);
    } catch (IllegalAlphabetException iae) {
      throw new AssertionFailedError("Can't initialize test distributions " + iae.getMessage());
    }

    // set the weights in dist
    try {
      dist.setWeight(DNATools.a(), a);
      dist.setWeight(DNATools.g(), g);
      dist.setWeight(DNATools.c(), c);
      dist.setWeight(DNATools.t(), t);
    } catch (IllegalSymbolException ise) {
      throw new AssertionFailedError("Unable to set weights: "
      + ise.getMessage());
    } catch (ChangeVetoException cve) {
      throw new AssertionFailedError("Unable to set weights: "
      + cve.getMessage());
    }
  }
  
  // make sure that we get out the weights out that we put in
  public void testSimpleDistribution() {
    try {
      assertEquals("gap", 0.0, dist.getWeight(dist.getAlphabet().getGapSymbol()), delta);
      assertEquals(DNATools.a().toString(), a, dist.getWeight(DNATools.a()), delta);
      assertEquals(DNATools.g().toString(), g, dist.getWeight(DNATools.g()), delta);
      assertEquals(DNATools.c().toString(), c, dist.getWeight(DNATools.c()), delta);
      assertEquals(DNATools.t().toString(), t, dist.getWeight(DNATools.t()), delta);
    } catch (IllegalSymbolException ise) {
      throw new AssertionFailedError("Can't retrieve weight: "
      + ise.getMessage());
    }
  }
  
  // check that the ambiguity stuff works
  public void testAmbiguities() {
    try {
      // implicit from sets
      Set syms = new HashSet();
      double tot = 0.0;
      assertEquals(syms.toString(), tot, dist.getWeight(dist.getAlphabet().getAmbiguity(syms)), delta);
      
      syms.add(DNATools.a());
      tot += a;
      assertEquals(syms.toString(), tot, dist.getWeight(dist.getAlphabet().getAmbiguity(syms)), delta);
      
      syms.add(DNATools.g());
      tot += g;
      assertEquals(syms.toString(), tot, dist.getWeight(dist.getAlphabet().getAmbiguity(syms)), delta);
      
      syms.add(DNATools.c());
      tot += c;
      assertEquals(syms.toString(), tot, dist.getWeight(dist.getAlphabet().getAmbiguity(syms)), delta);
      
      syms.add(DNATools.t());
      tot += t;
      assertEquals(syms.toString(), tot, dist.getWeight(dist.getAlphabet().getAmbiguity(syms)), delta);
    } catch (IllegalSymbolException ise) {
      throw new AssertionFailedError("Can't retrieve weight: "
      + ise.getMessage());
    }
  }
  
  // check gap distribution
  public void testGapDistribution() {
    try {
      assertEquals("real-gap", 1.0
      , gap.getWeight(AlphabetManager.getGapSymbol()), delta);
      assertEquals("gap", 1.0, gap.getWeight(gap.getAlphabet().getGapSymbol()), delta);
      assertEquals(DNATools.a().toString(), 1.0, gap.getWeight(DNATools.a()), delta);
      assertEquals(DNATools.g().toString(), 1.0, gap.getWeight(DNATools.g()), delta);
      assertEquals(DNATools.c().toString(), 1.0, gap.getWeight(DNATools.c()), delta);
      assertEquals(DNATools.t().toString(), 1.0, gap.getWeight(DNATools.t()), delta);
    } catch (IllegalSymbolException ise) {
      throw new AssertionFailedError("Can't retrieve weight: "
      + ise.getMessage());
    }
  }
  
  public void testGapDist() {
    try {
      Symbol[] syms = new Symbol[2];
      syms[0] = gap.getAlphabet().getGapSymbol();
      List symL = Arrays.asList(syms);
      
      for(Iterator si = ((FiniteAlphabet) dist.getAlphabet()).iterator(); si.hasNext(); ) {
        Symbol s = (Symbol) si.next();
        syms[1] = s;
        Symbol sym = gapDist.getAlphabet().getSymbol(symL);
        
        assertEquals(sym.toString(), gapDist.getWeight(sym), dist.getWeight(s), delta);
      }
      
    } catch (IllegalSymbolException ise) {
      throw new AssertionFailedError("Can't retrieve weight: "
      + ise.getMessage());
    }
  }
}