package hep.aida.ref.histogram;
import hep.aida.IAnnotation;
import hep.aida.IDataPoint;
import hep.aida.IDataPointSet;
import hep.aida.IMeasurement;
import hep.aida.ref.AidaUtils;
import hep.aida.ref.Annotation;
import hep.aida.ref.ManagedObject;
import hep.aida.ref.event.AIDAListener;
import hep.aida.ref.event.DataPointSetEvent;
import hep.aida.ref.event.IsObservable;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.io.Serializable;
/**
* Basic user-level interface class for holding and managing
* a single set of "data points".
*
* @author The AIDA team @ SLAC.
*
*/
public class DataPointSet extends ManagedObject implements IDataPointSet, IsObservable, Serializable, AIDAListener {
private int defaultSize = 0;
private IAnnotation annotation;
//private String title;
private int dimension;
private List points;
// Constructors
protected DataPointSet() {
super("");
initDataPointSet();
annotation.addItem(Annotation.titleKey,"Title", true);
}
public DataPointSet(String name, String title, int dimOfPoints) {
this(name, title, dimOfPoints, 0);
}
public DataPointSet(String name, String title, int dimOfPoints, int defaultCapacity) {
this(name, title, dimOfPoints, defaultCapacity, null);
}
public DataPointSet(String name, String title, int dimOfPoints, String options) {
this(name, title, dimOfPoints, 0, options);
}
public DataPointSet(String name, String title, int dimOfPoints, int defaultCapacity, String options) {
super(name);
//this.title = title;
defaultSize = defaultCapacity;
dimension = dimOfPoints;
initDataPointSet();
annotation.addItem(Annotation.titleKey,title, true);
setOptions(options);
}
private void initDataPointSet() {
annotation = new Annotation();
clear();
points = new ArrayList(defaultSize);
for ( int i = 0; i < defaultSize; i++ ) {
DataPoint point = new DataPoint(dimension);
points.add( point );
if (point instanceof IsObservable) {
((IsObservable) point).addListener(this);
}
}
}
private void setOptions(String options) {
if (options == null || options.trim().equals("")) return;
String[] arr = AidaUtils.parseString(options);
if (arr == null || arr.length == 0) return;
ArrayList list = new ArrayList();
for (int i=0; i 11 && tmp.substring(0, 11).equalsIgnoreCase("annotation.")) {
String key = tmp.substring(11);
int index = key.indexOf("=");
if (index > 0) key = key.substring(0, index);
list.add(key);
}
}
Map optionMap = AidaUtils.parseOptions( options );
Iterator it = optionMap.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
for (int i=0; i 0) {
for (int i=0; i= size().
*
*/
public void setPoint(int index, IDataPoint point) throws IllegalArgumentException {
if (index >= points.size() || index < 0) throw new IllegalArgumentException("Wrong argument in setPoint(): index="+index+", size="+points.size());
IDataPoint oldPoint = (IDataPoint) points.get(index);
if (oldPoint instanceof IsObservable) {
((IsObservable) oldPoint).removeListener(this);
}
points.set(index, point);
if (point instanceof IsObservable) {
((IsObservable) point).addListener(this);
}
if (isValid) fireStateChanged();
}
public IDataPoint addPoint() throws java.lang.RuntimeException {
IDataPoint point = new DataPoint(dimension);
addPoint( point );
return point;
}
public void addPoint(IDataPoint point) throws IllegalArgumentException {
if (point.dimension() == dimension) points.add(point);
else throw new IllegalArgumentException("Wrong dimension in addPoint(): DataPointSet.dimension()="+dimension+
", DataPoint.dimension()="+point.dimension());
if (point instanceof IsObservable) {
((IsObservable) point).addListener(this);
}
if (isValid) fireStateChanged();
}
public void removePoint(int index) throws IllegalArgumentException {
if (index >= points.size() || index < 0) throw new IllegalArgumentException("Wrong argument in removePoint() index="+index+", size="+points.size());
IDataPoint point = (IDataPoint) points.remove(index);
if (point instanceof IsObservable) ((IsObservable) point).removeListener(this);
if (point instanceof DataPoint) ((DataPoint) point).clear();
if (isValid) fireStateChanged();
}
public double lowerExtent(int coord) throws IllegalArgumentException {
if (coord<0 || coord>=dimension || points.size()==0)
throw new IllegalArgumentException("Can not calculate lowerExtent: coord="+coord+", size="+points.size());
double lowerExtent = Double.NaN;
for (int i=0; i lower) lowerExtent = lower;
}
return lowerExtent;
}
public double upperExtent(int coord) throws IllegalArgumentException {
if (coord<0 || coord>=dimension || points.size()==0)
throw new IllegalArgumentException("Can not calculate upperExtent: coord="+coord+", size="+points.size());
double upperExtent = Double.NaN;
for (int i=0; i upperExtent ) upperExtent = upper;
}
return upperExtent;
}
public void scale(double scaleFactor) throws IllegalArgumentException {
if (scaleFactor<=0)
throw new IllegalArgumentException("Illegal scale factor: scaleFactor="+scaleFactor);
for (int i=0; i
Ads help maintain this website.