/* DefaultMutableBookSegment.java created 2008-02-24
*
*/
package org.signalml.domain.book;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Vector;
/** DefaultMutableBookSegment
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class DefaultMutableBookSegment implements MutableBookSegment {
private float decompositionEnergy;
private float signalEnergy;
private float[] signalSamples;
private int channelNumber;
private int segmentNumber;
private float samplingFrequency;
private float segmentTime;
private int segmentLength;
private ArrayList<StandardBookAtom> atoms;
public DefaultMutableBookSegment(float samplingFrequency, int channelNumber, int segmentNumber, float segmentTime, int segmentLength) {
this.samplingFrequency = samplingFrequency;
this.channelNumber = channelNumber;
this.segmentNumber = segmentNumber;
this.segmentTime = segmentTime;
this.segmentLength = segmentLength;
atoms = new ArrayList<StandardBookAtom>();
}
public DefaultMutableBookSegment(StandardBookSegment segment) {
this(segment.getSamplingFrequency(), segment.getChannelNumber(), segment.getSegmentNumber(), segment.getSegmentTime(), segment.getSegmentLength());
this.decompositionEnergy = segment.getDecompositionEnergy();
this.signalEnergy = segment.getSignalEnergy();
this.signalSamples = segment.getSignalSamples();
int atomCnt = segment.getAtomCount();
atoms.ensureCapacity(atomCnt);
for (int i=0; i<atomCnt; i++) {
atoms.add(new DefaultBookAtom(segment.getAtomAt(i)));
}
}
public DefaultMutableBookSegment(StandardBookSegment segment, int targetSegmentNumber, float targetSegmentTime) {
this(segment);
this.segmentNumber = targetSegmentNumber;
this.segmentTime = targetSegmentTime;
}
@Override
public int addAtom(StandardBookAtom atom) {
int index = atoms.size();
atoms.add(atom);
return index;
}
@Override
public void clear() {
atoms.clear();
}
@Override
public StandardBookAtom createAtom(int type, int iteration, float modulus, float amplitude, int position, int scale, int frequency, float phase) {
return new DefaultBookAtom(samplingFrequency,segmentLength,type,iteration,modulus,frequency,position,scale,amplitude,phase);
}
@Override
public StandardBookAtom removeAtomAt(int index) {
return atoms.remove(index);
}
@Override
public void setAtomAt(int index, StandardBookAtom atom) {
atoms.set(index, atom);
}
@Override
public void setDecompositionEnergy(float decompositionEnergy) {
this.decompositionEnergy = decompositionEnergy;
}
@Override
public void setSignalEnergy(float signalEnergy) {
this.signalEnergy = signalEnergy;
}
@Override
public void setSignalSamples(float[] samples) {
this.signalSamples = samples;
}
@Override
public StandardBookAtom getAtomAt(int index) {
return atoms.get(index);
}
@Override
public int getAtomCount() {
return atoms.size();
}
@Override
public int getChannelNumber() {
return channelNumber;
}
@Override
public float getDecompositionEnergy() {
return decompositionEnergy;
}
@Override
public Object getProperty(String name) throws IllegalArgumentException {
throw new IllegalArgumentException("No properties");
}
@Override
public Enumeration<String> getPropertyNames() {
Vector<String> names = new Vector<String>();
return names.elements();
}
@Override
public int getSegmentLength() {
return segmentLength;
}
@Override
public float getSamplingFrequency() {
return samplingFrequency;
}
@Override
public float getSegmentTimeLength() {
return (segmentLength / samplingFrequency);
}
@Override
public int getSegmentNumber() {
return segmentNumber;
}
@Override
public float getSegmentTime() {
return segmentTime;
}
@Override
public float getSignalEnergy() {
return signalEnergy;
}
@Override
public float[] getSignalSamples() {
return signalSamples;
}
@Override
public boolean hasSignal() {
return (signalSamples != null);
}
@Override
public int indexOfAtom(StandardBookAtom atom) {
return atoms.indexOf(atom);
}
}