//=====================================================================
// File: Peak.java
// Class: Peak
// 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 a peak. A peak is a point of interest in a lane,
* which theoretically should represent a fragement of a given size.
* Peaks are used by the ScoreFunction
to determine how to
* score a lane. The peaks can be choosen by a class that extends
* PeakLocate
. The lane will contain a list of peaks.
*
* @see PeakLocate
* @see Lane
* @see ScoreFunction
*
* @author James J. Benham
* @version 1.0.0
* @date August 10, 1998
*/
public class Peak extends SortableData
{
private double location;
private double height;
private double area;
private double confidence;
private boolean marked;
/**
* Creates a new peak with the specified parameters. The confidence of
* this peak is set to 1 by default. Also, by default the peak is not
* marked.
*
* @param location the size in bp of the center (top) of the peak
* @param height the intensity of the trace at the peak location
* @param area the area of the peak.
*/
public Peak(double location, double height, double area)
{
this.location = location;
this.height = height;
this.area = area;
confidence = 1;
marked = false;
}
/**
* This gives the location of the peek, and is used when searching or
* sorting objects of this type.
*
* @return a value that provides a logical way to sort this object
*/
public final double getSearchKey()
{
return location;
}
/**
* Gives the location of the peek in the data.
*
* @return the position in bp
*/
public final double getLocation()
{
return location;
}
/**
* Gives the height of the peak.
*
* @return the height
*/
public final double getHeight()
{
return height;
}
/**
* Gives the area of this peek. The actual calculation of the area is
* handled outside of this class.
*
* @return the area
*/
public final double getArea()
{
return area;
}
/**
* Changes this peak so that the location, height, and size are set
* to the values given. Remember that changing the location will also
* change the height and area.
*
* @param location the position in the trace, in bp.
* @param height the height of the peak
* @param area the area of the peak
*/
public void set(double location, double height, double area)
{
this.location = location;
this.height = height;
this.area = area;
}
/**
* Gives the confidence associated with this peak. The confidence is a
* measure of how sure the program is that this peak is actually a
* peak. It should be set by whatever algorithm is used to select the
* peak.
*
* @return a measure of the certainty that this is a peak, between 0 and 1.0
*/
public final double getConfidence()
{
return confidence;
}
/**
* Sets the confidence to the specified value. This value should be between
* 0.0 and 1.0. See getConfidence
for a description of
* confidence.
*
* @param confidence the value to set the confidence to
*
* @see Peak#getConfidence
*/
public final void setConfidence(double confidence)
{
this.confidence = confidence;
}
/**
* Tells whether or not this peak is marked. This could be used to
* include/exclude a peak from analysis. It could also determine if
* the peak is drawn with a label/indicator of some kind.
*
* @return the state of the peak
*/
public boolean isMarked()
{
return marked;
}
/**
* Sets the peak as specified. Marking could be used to indicate which
* peak will be used in analysis.
*
* @param state the value for the marked state of this peak.
*/
public void setMarkedState(boolean state)
{
marked = state;
}
/**
* Clones this peak Not implemented
*/
public Object clone()
{
System.err.println("Peak clone not implemented.");
return this;
}
/**
* 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 info in this class will be replaced with data from the
* stream.
*
* @param in the input stream with the data for the class.
*
* @exception IOException occurs when a problem is encountered when
* reading from the stream.
*/
public void read(DataInputStream in) throws IOException
{
location = in.readDouble();
height = in.readDouble();
area = in.readDouble();
confidence = in.readDouble();
marked = in.readBoolean();
}
/**
* 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(location);
out.writeDouble(height);
out.writeDouble(area);
out.writeDouble(confidence);
out.writeBoolean(marked);
}
}