plugins/base1/se.lu.onk.ReplicateError/trunk/src/replicateerror/Replicate.java

Code
Comments
Other
Rev Date Author Line
34 11 Nov 05 enell 1 /*
784 18 Sep 08 jari 2   $Id$
784 18 Sep 08 jari 3
784 18 Sep 08 jari 4   Copyright (C) 2005 Johan Enell
800 01 Oct 08 jari 5   Copyright (C) 2008 Jari Häkkinen
784 18 Sep 08 jari 6
784 18 Sep 08 jari 7   This file is part of the se.lu.onk.ReplicateError plug-in for
784 18 Sep 08 jari 8   BASE. Available at http://baseplugins.thep.lu.se/ and BASE web
784 18 Sep 08 jari 9   site is http://base.thep.lu.se
784 18 Sep 08 jari 10
784 18 Sep 08 jari 11   This is free software; you can redistribute it and/or modify it
784 18 Sep 08 jari 12   under the terms of the GNU General Public License as published by
784 18 Sep 08 jari 13   the Free Software Foundation; either version 3 of the License, or
784 18 Sep 08 jari 14   (at your option) any later version.
784 18 Sep 08 jari 15
784 18 Sep 08 jari 16   The software is distributed in the hope that it will be useful, but
784 18 Sep 08 jari 17   WITHOUT ANY WARRANTY; without even the implied warranty of
784 18 Sep 08 jari 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
784 18 Sep 08 jari 19   General Public License for more details.
784 18 Sep 08 jari 20
784 18 Sep 08 jari 21   You should have received a copy of the GNU General Public License
784 18 Sep 08 jari 22   along with BASE. If not, see <http://www.gnu.org/licenses/>.
784 18 Sep 08 jari 23 */
43 21 Nov 05 enell 24 package replicateerror;
34 11 Nov 05 enell 25
34 11 Nov 05 enell 26 import java.util.ArrayList;
80 24 Mar 06 enell 27 import java.util.HashSet;
80 24 Mar 06 enell 28 import java.util.Iterator;
80 24 Mar 06 enell 29 import java.util.NoSuchElementException;
80 24 Mar 06 enell 30 import java.util.Set;
34 11 Nov 05 enell 31
34 11 Nov 05 enell 32 public class Replicate
80 24 Mar 06 enell 33   extends ArrayList<Spot>
34 11 Nov 05 enell 34 {
34 11 Nov 05 enell 35
792 24 Sep 08 jari 36   public ArrayList<Spot> getAssaySpot(int assay)
34 11 Nov 05 enell 37   {
792 24 Sep 08 jari 38     ArrayList<Spot> retVal=new ArrayList<Spot>();
80 24 Mar 06 enell 39     for(Spot s : this)
80 24 Mar 06 enell 40     {
80 24 Mar 06 enell 41       if (s.getAssay() == assay)
80 24 Mar 06 enell 42       {
792 24 Sep 08 jari 43         retVal.add(s);
80 24 Mar 06 enell 44       }
80 24 Mar 06 enell 45     }
792 24 Sep 08 jari 46     return retVal;
34 11 Nov 05 enell 47   }
80 24 Mar 06 enell 48   
80 24 Mar 06 enell 49   public final float getReplicateRatio(int s1, int s2)
34 11 Nov 05 enell 50   {
80 24 Mar 06 enell 51     return get(s1).getM() / get(s2).getM();
34 11 Nov 05 enell 52   }
34 11 Nov 05 enell 53
80 24 Mar 06 enell 54   public float getReplicateM(int s1, int s2)
34 11 Nov 05 enell 55   {
80 24 Mar 06 enell 56     return (float) (Math.log(getReplicateRatio(s1, s2)) / Math.log(2));
34 11 Nov 05 enell 57   }
34 11 Nov 05 enell 58
80 24 Mar 06 enell 59   /**
101 05 May 06 enell 60    * Returns false if there isnt any duplicate i the replicate with a valid M value.
80 24 Mar 06 enell 61    */
80 24 Mar 06 enell 62   public final boolean valid()
56 08 Dec 05 enell 63   {
80 24 Mar 06 enell 64     boolean result = false;
80 24 Mar 06 enell 65     if (size() < 2) return false;
80 24 Mar 06 enell 66     Iterator<Spot[]> i = duplicateIterator();
80 24 Mar 06 enell 67     while (i.hasNext())
80 24 Mar 06 enell 68     {
80 24 Mar 06 enell 69       Spot[] d = i.next();
80 24 Mar 06 enell 70       result |= !Float.isNaN(getReplicateRatio(d[0], d[1]));
80 24 Mar 06 enell 71     }
80 24 Mar 06 enell 72     return result;
56 08 Dec 05 enell 73   }
56 08 Dec 05 enell 74
80 24 Mar 06 enell 75   public void filter(float from, float threshold)
34 11 Nov 05 enell 76   {
80 24 Mar 06 enell 77     Set<Spot> good = new HashSet<Spot>();
80 24 Mar 06 enell 78     Iterator<Spot[]> i = duplicateIterator();
80 24 Mar 06 enell 79     while (i.hasNext())
80 24 Mar 06 enell 80     {
80 24 Mar 06 enell 81       Spot[] d = i.next();
101 05 May 06 enell 82       if (Math.abs(getReplicateM(d[0], d[1]) - from) < threshold)  
80 24 Mar 06 enell 83       {
80 24 Mar 06 enell 84         good.add(d[0]);
80 24 Mar 06 enell 85         good.add(d[1]);
80 24 Mar 06 enell 86       }
80 24 Mar 06 enell 87     }
80 24 Mar 06 enell 88     this.retainAll(good);  
34 11 Nov 05 enell 89   }
80 24 Mar 06 enell 90   
80 24 Mar 06 enell 91   public final Iterator<Spot[]> duplicateIterator()
56 08 Dec 05 enell 92   {
80 24 Mar 06 enell 93     return new Iterator<Spot[]>()
80 24 Mar 06 enell 94     {
80 24 Mar 06 enell 95       private int i = 0;
80 24 Mar 06 enell 96       private int j = 0;
80 24 Mar 06 enell 97       private Spot[] dup = null;
80 24 Mar 06 enell 98       
80 24 Mar 06 enell 99       public boolean hasNext()
80 24 Mar 06 enell 100       {
80 24 Mar 06 enell 101         j++;
80 24 Mar 06 enell 102         if (j >= size())
80 24 Mar 06 enell 103         {
80 24 Mar 06 enell 104           i++;
80 24 Mar 06 enell 105           j = i+1;
80 24 Mar 06 enell 106         }
789 18 Sep 08 jari 107         dup = i < size() && j < size() ? new Spot[] {get(i), get(j)} : null;
80 24 Mar 06 enell 108         return dup != null;
80 24 Mar 06 enell 109       }
56 08 Dec 05 enell 110
80 24 Mar 06 enell 111       public Spot[] next()
80 24 Mar 06 enell 112       {
80 24 Mar 06 enell 113         if (dup != null)
80 24 Mar 06 enell 114         {
80 24 Mar 06 enell 115           return dup;
80 24 Mar 06 enell 116         }
80 24 Mar 06 enell 117         throw new NoSuchElementException();
80 24 Mar 06 enell 118       }
47 22 Nov 05 enell 119
80 24 Mar 06 enell 120       public void remove()
34 11 Nov 05 enell 121       {
80 24 Mar 06 enell 122         throw new UnsupportedOperationException();
34 11 Nov 05 enell 123       }
80 24 Mar 06 enell 124     };
34 11 Nov 05 enell 125   }
80 24 Mar 06 enell 126   
80 24 Mar 06 enell 127   public static float getReplicateRatio(Spot s1, Spot s2)
34 11 Nov 05 enell 128   {
80 24 Mar 06 enell 129     return s1.getRatio() / s2.getRatio();
34 11 Nov 05 enell 130   }
80 24 Mar 06 enell 131   
80 24 Mar 06 enell 132   public static float getReplicateM(Spot s1, Spot s2)
34 11 Nov 05 enell 133   {
80 24 Mar 06 enell 134     return (float) (Math.log(getReplicateRatio(s1, s2)) / Math.log(2));
34 11 Nov 05 enell 135   }
34 11 Nov 05 enell 136 }