/* AGWindowAlgorithm.java * * created: Wed Apr 14 1999 * * This file is part of Artemis * * Copyright (C) 1999 Genome Research Limited * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/plot/AGWindowAlgorithm.java,v 1.4 2009-03-17 17:47:42 tjc Exp $ */ package uk.ac.sanger.artemis.plot; import uk.ac.sanger.artemis.util.*; import uk.ac.sanger.artemis.io.Range; import uk.ac.sanger.artemis.sequence.*; /** * Objects of this class have one useful method - getValues (), which takes a * range of bases and returns a single floating point number, which is the * percent AG content of the range. The Strand to use is set in the * constructor. * * @author Kim Rutherford * @version $Id: AGWindowAlgorithm.java,v 1.4 2009-03-17 17:47:42 tjc Exp $ **/ public class AGWindowAlgorithm extends BaseAlgorithm { /** * Create a new GCWindowAlgorithm object. * @param strand The strand to do the calculation on. **/ public AGWindowAlgorithm (final Strand strand) { super (strand, "AG Content (%)", "ag_content"); setScalingFlag (true); } /** * Return the percent GC between a pair of bases. * @param start The start base (included in the range). * @param end The end base (included in the range). * @param values The one return value for this algorithm is returned in * this array. **/ public void getValues (int start, int end, final float [] values) { final String sequence; try { sequence = getStrand ().getSubSequence (new Range (start, end)); } catch (OutOfRangeException e) { throw new Error ("internal error - unexpected exception: " + e); } float gc_count = 0; for (int i = 0 ; i < sequence.length () ; ++i) { final char this_char = sequence.charAt (i); // System.out.println (this_char); if (this_char == 'g' || this_char == 'a') { ++gc_count; } } // System.out.println ("start: " + start + " end: " + end + " returning: " + gc_count/sequence.length ()); values[0] = gc_count/sequence.length () * 100; } /** * Return the number of values a call to getValues () will return - one * in this case. **/ public int getValueCount () { return 1; } /** * Return the default or optimal window size. * @return null is returned if this algorithm doesn't have optimal window * size. **/ public Integer getDefaultWindowSize () { final Integer super_window_size = super.getDefaultWindowSize (); if (super_window_size != null) { // the superclass version of getDefaultWindowSize () returns non-null // iff the user has set the window size in the options file return super_window_size; } return new Integer (120); } /** * Return the default maximum window size for this algorithm. * @return null is returned if this algorithm doesn't have maximum window * size. **/ public Integer getDefaultMaxWindowSize () { final Integer super_max_window_size = super.getDefaultMaxWindowSize (); if (super_max_window_size != null) { // the superclass version of getDefaultMaxWindowSize () returns non-null // iff the user has set the max window size in the options file return super_max_window_size; } return new Integer (500); } /** * Return the default minimum window size for this algorithm. * @return null is returned if this algorithm doesn't have minimum window * size. **/ public Integer getDefaultMinWindowSize () { final Integer super_min_window_size = super.getDefaultMinWindowSize (); if (super_min_window_size != null) { // the superclass version of getDefaultMinWindowSize () returns non-null // iff the user has set the minimum window size in the options file return super_min_window_size; } return new Integer (24); } /** * Return the maximum value of this algorithm. * @return The maximum is 100. **/ protected Float getMaximumInternal () { return new Float (100); } /** * Return the minimum value of this algorithm. * @return The minimum is 0. **/ protected Float getMinimumInternal () { return new Float (0); } /** * Return the default or optimal step size. * @return null is returned if this algorithm doesn't have optimal step * size. **/ public Integer getDefaultStepSize (int window_size) { if (window_size > 10) { return new Integer (window_size / 10); } else { return null; } } /** * Return the average value of function over the whole strand. * @return null is returned if this algorithm doesn't have an average or if * the average can't be calculated. **/ public Float getAverage () { return new Float (getStrand ().getBases ().getAverageAGPercent ()); } }