package pl.edu.fuw.MP.Core; import java.io.*; import java.util.Enumeration; import java.util.Vector; import org.signalml.domain.book.StandardBookAtom; public class BookAtom implements StandardBookAtom { public short number_of_atom_in_book; public byte octave; public byte type; public float frequency; public float position; public float modulus; public float amplitude; public float phase; public float truePhase; public float scale; public int index; public final void Read(DataArrayInputStream stream) throws IOException { number_of_atom_in_book=stream.readShort(); octave=stream.readByte(); if (octave!=0) scale=1<<octave; else scale=0; type=stream.readByte(); frequency=stream.readShort(); position=stream.readShort(); modulus=stream.readFloat(); amplitude=stream.readFloat(); phase=stream.readFloat(); } public BookAtom() { ; } public BookAtom(NewAtom atom) { atom.export(this); } public void finalize() { try { super.finalize(); } catch (Throwable e) { } } public float Frequency(BookHeader head) { return (frequency/(float)(head.signal_size)*head.FREQUENCY); } public float NaturalFreq(BookHeader head) { return (float)(2.0*Math.PI*frequency/head.signal_size); } public final float HalfTime(BookHeader head) { final double Const=2.0*Math.sqrt(Math.log(2.0)/Math.PI); if (scale==0) return 0.0F; if (scale==head.signal_size) return (scale/head.FREQUENCY); return (float)(Const*scale/head.FREQUENCY); } private static String Format(String str,int Width) { String string=new String(str); for (int i=string.length() ; i<=Width ; i++) string+=" "; return string; } private static float Round(float x,int Mul) { double factor=Math.pow(10.0,Mul); return (float)(Math.floor(0.5+x*factor)/factor); } public String getAtomString(BookHeader head,float SecPP) { int hour,minute,sec; float sec_time; sec_time=head.file_offset*SecPP+position/head.FREQUENCY; hour=(int)(sec_time/3600.0F); minute=(int)((sec_time-3600.0F*hour)/60.0F); sec=(int)(sec_time-60.0F*minute-3600.0F*hour); return new String(Format(hour+"h"+((minute<10) ? "0"+minute : ""+minute) +"'"+((sec<10) ? "0"+sec : ""+sec)+"\" ",9)+ Format(number_of_atom_in_book+" ",9)+ Format(position+" ",9)+ Format(Round(modulus,3)+" ",9)+ Format(Round(amplitude,3)+" ",9)+ Format(scale+" ",9)+ Format(Round(HalfTime(head),2)+"\" ",9)+ Format(Round(Frequency(head),4)+" Hz ",9)+ Format((phase>=0.0 ? " " : "")+Round(phase,4)+" ",9)+ Format((truePhase>=0.0 ? " " : "")+ Round(truePhase,4)+" ",9)); } public String toString() { return Format(position+" ",9)+ Format(Round(modulus,3)+" ",9)+ Format(Round(amplitude,3)+" ",9)+ Format(scale+" ",9)+ Format(Round(frequency,3)+" ", 9)+ Format((phase>=0.0 ? " " : "")+Round(phase,4)+" ",9); } public float getAmplitude() { return amplitude; } public int getNaturalFrequency() { return (int)this.frequency; } public float getFrequency() { return this.frequency; } public float getModulus() { return this.modulus; } public float getPhase() { return this.phase; } public int getPosition() { return (int)this.position; } public Object getProperty(String name) throws IllegalArgumentException { throw new IllegalArgumentException("No properties"); } public Enumeration<String> getPropertyNames() { Vector<String> names = new Vector<String>(); return names.elements(); } public int getScale() { return (int)this.scale; } public int getType() { return this.type; } @Override public int getBaseLength() { // TODO Auto-generated method stub return 0; } @Override public float getHzFrequency() { // TODO Auto-generated method stub return 0; } @Override public int getIteration() { // TODO Auto-generated method stub return 0; } @Override public float getSamplingFrequency() { // TODO Auto-generated method stub return 0; } @Override public float getTimePosition() { // TODO Auto-generated method stub return 0; } @Override public float getTimeScale() { // TODO Auto-generated method stub return 0; } }