//=====================================================================
// File: CutoffFunction.java
// Class: CutoffFunction
// 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;
/**
* An abstract class that is used to represent different functions for
* cutting off noise from data peaks. The parameters need to compute the
* cutoff for a position should be passed in as options. Examples
* would be things like simple linear functions, or a decaying exponential.
* in the first case, the value would be the same for every position, but
* in the case of a decaying exponential, the cutoff would decrease as
* the position increased. In many cases, the parameters required will
* not truly be optional, but the "options" can be marked as required. This
* is done so that the program can tell the user what the function requires.
*
* NOTE: The first option must set the height of the function.
* This will correspond to the cutoff value at the position defined by
* Cutoff
. This is required so that the other parts of the
* program can interface with the different functions in a standard manner.
*
* @author James J. Benham
* @version 0.1.0
* @date June 15, 1998
*/
public abstract class CutoffFunction extends Operation implements Cloneable
{
/**
* Returns the cutoff value for the specified position
*
* @return the cutoff at the position
*/
public abstract double getCutoff(double position);
/**
* Gives an object where every field has been copied from this object
* to the new object.
*
* @return a copy of this object.
*/
public Object clone()
{
try
{
return super.clone();
}
catch(CloneNotSupportedException e)
{
System.err.println("Could not clone Cutoff Function. " +
e.getMessage());
}
return null;
}
/**
* 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 abstract void write(DataOutputStream out) throws IOException;
/**
* 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 abstract void read(DataInputStream in)
throws IOException;
}