All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rcsb.cif.binary.encoding.FixedPointEncoding Maven / Gradle / Ivy

package org.rcsb.cif.binary.encoding;

import org.rcsb.cif.binary.data.Float32Array;
import org.rcsb.cif.binary.data.Float64Array;
import org.rcsb.cif.binary.data.FloatArray;
import org.rcsb.cif.binary.data.Int32Array;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 

Converts an array of floating point numbers to a {@link Int32Array} multiplied by a given factor.

* *
 * FixedPoint {
 *     kind = "FixedPoint"
 *     factor: number
 *     srcType: Float32 | Float64
 * }
 * Example
 * [1.2, 1.23, 0.123]
 * ---FixedPoint--->
 * { factor = 100 } [120, 123, 12]
 * 
*/ public class FixedPointEncoding implements Encoding { private final int factor; private int srcType; public FixedPointEncoding(int factor) { this.factor = factor; } public FixedPointEncoding(int factor, int srcType) { this.factor = factor; this.srcType = srcType; } @Override public Map getMapRepresentation() { Map map = new LinkedHashMap<>(); map.put("kind", "FixedPoint"); map.put("factor", factor); map.put("srcType", srcType); return map; } @Override public FloatArray decode(Int32Array data) { double f = 1.0 / factor; int[] intData = data.getData(); double[] outputArray = new double[intData.length]; for (int i = 0; i < intData.length; i++) { outputArray[i] = intData[i] * f; } return srcType == 32 ? new Float32Array(outputArray, data.getEncoding()) : new Float64Array(outputArray, data.getEncoding()); } @Override public Int32Array encode(FloatArray data) { this.srcType = data.getType(); double[] floatData = data.getData(); int[] outputArray = new int[floatData.length]; for (int i = 0; i < floatData.length; i++) { outputArray[i] = (int) Math.round(floatData[i] * factor); } Deque> enc = new ArrayDeque<>(data.getEncoding()); enc.add(this); return new Int32Array(outputArray, enc); } @Override public String toString() { return "FixedPointEncoding{" + "factor=" + factor + ", srcType=" + srcType + '}'; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy