//=====================================================================
// File: ScoreFunction.java
// Class: ScoreFunction
// 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 class represents functions used to score a bin. For example,
* a function could be designed so that the bin was labeled with
* A's and B's for a segregating population. The function should also
* be able to give additional information once all of the lanes have been
* scored, such as the number scored in a certain way. However, the overall
* information should always be applicable to the case being handled.
* Note: the first option should be the number of levels expected by
* the function + 1. This corresponds to the number of different labels,
* which is a more intuitive value for the user.
*
* @author James J. Benham
* @version 1.0.0
* @date August 10, 1998
*/
public abstract class ScoreFunction extends Operation implements Cloneable
{
/**
* Should provide overall information about a bin scored with
* this method. The labels will contain how each lane was scored and
* the peaks will be the ones of interest in the bin. The string will
* contain overall information, such as the number scored each way or
* means and standard deviations.
*
* @param labels the list of how each lane was scored.
* @param peaks all of the peaks of interest in the bin.
*
* @see ScoreFunction#score
*/
public abstract String[] getInfo(String[] labels, DataList peaks);
/**
* Gives a label for a lane with the specified cutoff and the specified
* peaks. For example, with a population of two parents, A and B,
* the score method would return either an "A" or a "B" depending on
* how the peaks related to the cutoff. If parent A was above the cutoff,
* an A should be returned. Note that this case is only an example, and
* many other possiblities exist.
*
* @param cutoff the cutoff to be used when scoring
* @param peaks the peaks in the region of interest
*/
public abstract String score(Cutoff cutoff, DataList peaks);
/**
* Gives the possible values that score
will return.
* These could differ based on the number of levels in the cutoff
*
* @param numLevels the number of levels that the score function needs
* to accomodate.
*/
public abstract String[] getChoices(int numLevels);
/**
* Changes the score method so that the scoring is opposite of the
* normal scoring, for example, A becomes B and B becomes A.
*/
public abstract void invert();
/**
* 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 Bin Score 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;
}