//=====================================================================
// File: LinearCutoff.java
// Class: LinearCutoff
// Package: AFLPcore
//
// Author: James J. Benham
// Date: August 10, 1998
// Contact: james_benham@hmc.edu
//
// Genographer v1.0 - Computer assisted scoring of gels.
// Copyright (C) 1998 Montana State University
//
// 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; version 2
// of the License.
//
// 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.
//
// The GNU General Public License is distributed in the file GPL
//=====================================================================
package AFLPcore;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
/**
* This cutoff function represents a horizontal line. It is set at a
* specific value, determined by the first (and only) option set. This
* means that the cutoff hieght is independent of the size. The
* cutoff functions are used to help score bins and can also be used by
* peak locating algorithms.
*
* @see CutoffFunction
*
* @author James J. Benham
* @version 1.0.0
* @date August 10, 1998
*/
public class LinearCutoff extends CutoffFunction
{
double value;
/**
* Creates a new linear function with the value specified in value.
*
* @param value the number to return as the cutoff
*/
public LinearCutoff()
{
name = "Linear";
descript = "Sets a constant cutoff point for a region in the lane.";
helpFile = "linear.html";
value = -1;
// Mark options as unset
options = null;
}
/**
* Gives the name of this linear function.
*
* @return the name for this type of function.
*/
public String getName()
{
return name;
}
/**
* Gives a brief description of the linear filter.
*
* @return a sentence describing the function.
*/
public String getDescription()
{
return descript;
}
/**
* Gives help for the linear cutoff.
*
* @return a html or plaintext file with the description. null
* if this file does not exist.
*/
public String getHelpFile()
{
return helpFile;
}
/**
* Returns the options/parameters for this Cutoff function. In this case,
* the value to cut off at is required.
*
* @return an option representing the value to cut off at.
*/
public Option[] getOptions()
{
Option[] opts = new Option[1];
opts[0] = new Option("Value", Option.NUMBER, true, 0);
return opts;
}
/**
* Set the value for the cutoff. This must be done before the funtion
* can work.
*
* @param the option with the value for the cutoff.
*
* @exception MissingParameterError the value was not provided in
* the opts
parameter.
*/
public void setOptions(Option[] opts)
{
// check the input
if(opts == null)
throw new MissingParameterError("Value not provided to linear cutoff.");
// could check to see that getNumValue didn't give -1.
options = opts;
value = opts[0].getNumValue();
}
/**
* Gives the cutoff point for this function. Since it is linear, it is
* independent of the position.
*
* @param position this parameter is ignored in this case
*
* @exception MissingParameterError occurs if the value for this cutoff
* function has not been set.
*/
public double getCutoff(double position)
{
// see if the value has been set
if((options == null) || (value == -1))
throw new MissingParameterError("No value set for linear cutoff.");
return value;
}
/**
* Writes all of the information this class needs to store in order
* to be recreated. This will be used for things like storing the
* class in a file. Therefore, the write should output enough information
* so that read
can recreate the essential properties of this
* class.
*
* @param out the destination to write the data to.
*
* @exception IOException occurs when a problem is encountered when
* writing to the stream.
*/
public void write(DataOutputStream out) throws IOException
{
out.writeDouble(value);
}
/**
* Reads in the properties of this class from the specified input stream.
* The stream data should have been created by write
. This
* will retrieve this classes state from the input stream. All of the
* current data in this class will be replaced by the data from the
* stream.
*
* @param in the input stream with the data for the class.
*
* @exception IOException occurs when a problem is encountered when
* writing to the stream.
*/
public void read(DataInputStream in) throws IOException
{
value = in.readDouble();
// set the option's so it points to the right thing, otherwise the
// class will think nothing has been set
options = new Option[1];
options[0] = new Option("Value", Option.NUMBER, true, 0);
options[0].setValue(value);
}
}