/*
* Copyright 2004-2010 Information & Software Engineering Group (188/1)
* Institute of Software Technology and Interactive Systems
* Vienna University of Technology, Austria
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.ifs.tuwien.ac.at/dm/somtoolbox/license.html
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package at.tuwien.ifs.somtoolbox.input;
import java.util.ArrayList;
import at.tuwien.ifs.somtoolbox.layers.Layer.GridLayout;
import at.tuwien.ifs.somtoolbox.layers.Layer.GridTopology;
import at.tuwien.ifs.somtoolbox.util.StringUtils;
/**
* Provides generic functionality to read a saved network model.
*
* @author Michael Dittenbach
* @author Rudolf Mayer
* @version $Id: AbstractSOMInputReader.java 3883 2010-11-02 17:13:23Z frank $
*/
public abstract class AbstractSOMInputReader implements SOMInputReader {
/**
* Inner class holding the information about a specific unit.
*
* @author Michael Dittenbach
*/
protected class UnitInformation {
protected String[] bestContextLabels = null;
protected String[] contextGateLabels = null;
protected double[] gateWeightLabels = null;
protected String[] kaskiGateLabels = null;
// private int kaskiWeights = 0;
// private int gateWeights = 0;
// private int bestContext = 0;
protected String[] kaskiLabels = null;
protected double[] kaskiWeightLabels = null;
protected String[] mappedVecs = null;
protected double[] mappedVecsDist = null;
protected int nrbestcontext = 0;
protected int nrContextGate = 0;
protected int nrgateweights = 0;
protected int nrKaski = 0;
protected int nrKaskiGate = 0;
protected int nrkaskiweights = 0;
protected int nrSomsMapped = 0;
protected int nrUnitLabels = 0;
protected int nrVecMapped = 0;
protected int posX = 0;
protected int posY = 0;
protected int posZ = 0;
protected double quantErrorUnit = 0;
protected double quantErrorUnitAvg = 0;
protected String unitId = null;
protected String[] unitLabels = null;
protected double[] unitLabelsQe = null;
protected double[] unitLabelsWgt = null;
protected String[] urlMappedSoms = null;
protected double[] vector = null;
/**
* Sole constructor.
*/
protected UnitInformation() {
vector = new double[0];
}
protected UnitInformation(int dim) {
vector = new double[dim];
}
}
protected GridLayout gridLayout = GridLayout.rectangular;
protected GridTopology gridTopology = GridTopology.planar;
protected boolean labelled = false;
protected int dim = 0;
protected String metricName = "at.tuwien.ifs.somtoolbox.layers.metrics.L2Metric"; // default metric
protected UnitInformation[][][] unitInfo = null;
protected int xSize = 0;
protected int ySize = 0;
protected int zSize = 0;
/**
* The common prefix of all input vector labels. Will be once computed in {@link #getCommonVectorLabelPrefix()}, and
* then cached.
*/
protected String commonLabelPrefix = null;
protected ArrayList<String> allVectorNames = new ArrayList<String>();
public AbstractSOMInputReader() {
super();
}
@Override
public String[] getBestContextUnitLabels(int x, int y) {
return getBestContextUnitLabels(x, y, 0);
}
@Override
public String[] getBestContextUnitLabels(int x, int y, int z) {
return unitInfo[x][y][z].bestContextLabels;
}
@Override
public String[] getContextGateUnitLabels(int x, int y) {
return getContextGateUnitLabels(x, y, 0);
}
@Override
public String[] getContextGateUnitLabels(int x, int y, int z) {
return unitInfo[x][y][z].contextGateLabels;
}
/** @see at.tuwien.ifs.somtoolbox.input.SOMInputReader#getDim() */
@Override
public int getDim() {
return dim;
}
@Override
public String[] getKaskiGateUnitLabels(int x, int y) {
return getKaskiGateUnitLabels(x, y, 0);
}
@Override
public String[] getKaskiGateUnitLabels(int x, int y, int z) {
return unitInfo[x][y][z].kaskiGateLabels;
}
@Override
public double[] getKaskiGateUnitLabelsWgt(int x, int y) {
return getKaskiGateUnitLabelsWgt(x, y, 0);
}
@Override
public double[] getKaskiGateUnitLabelsWgt(int x, int y, int z) {
return unitInfo[x][y][z].gateWeightLabels;
}
@Override
public String[] getKaskiUnitLabels(int x, int y) {
return getKaskiUnitLabels(x, y, 0);
}
@Override
public String[] getKaskiUnitLabels(int x, int y, int z) {
return unitInfo[x][y][z].kaskiLabels;
}
@Override
public double[] getKaskiUnitLabelsWgt(int x, int y) {
return getKaskiUnitLabelsWgt(x, y, 0);
}
@Override
public double[] getKaskiUnitLabelsWgt(int x, int y, int z) {
return unitInfo[x][y][z].kaskiWeightLabels;
}
@Override
public String[] getMappedVecs(int x, int y) {
return getMappedVecs(x, y, 0);
}
@Override
public String[] getMappedVecs(int x, int y, int z) {
return unitInfo[x][y][z].mappedVecs;
}
@Override
public double[] getMappedVecsDist(int x, int y) {
return getMappedVecsDist(x, y, 0);
}
@Override
public double[] getMappedVecsDist(int x, int y, int z) {
return unitInfo[x][y][z].mappedVecsDist;
}
@Override
public String getMetricName() {
return metricName;
}
@Override
public int getNrBestContext(int x, int y) {
return getNrBestContext(x, y, 0);
}
@Override
public int getNrBestContext(int x, int y, int z) {
return unitInfo[x][y][z].nrbestcontext;
}
@Override
public int getNrContextGateLabels(int x, int y) {
return getNrContextGateLabels(x, y, 0);
}
@Override
public int getNrContextGateLabels(int x, int y, int z) {
return unitInfo[x][y][z].nrContextGate;
}
@Override
public int getNrGateWeights(int x, int y) {
return getNrGateWeights(x, y, 0);
}
@Override
public int getNrGateWeights(int x, int y, int z) {
return unitInfo[x][y][z].nrgateweights;
}
@Override
public int getNrKaskiGateLabels(int x, int y) {
return getNrKaskiGateLabels(x, y, 0);
}
@Override
public int getNrKaskiGateLabels(int x, int y, int z) {
return unitInfo[x][y][z].nrKaskiGate;
}
@Override
public int getNrKaskiLabels(int x, int y) {
return getNrKaskiLabels(x, y, 0);
}
@Override
public int getNrKaskiLabels(int x, int y, int z) {
return unitInfo[x][y][z].nrKaski;
}
@Override
public int getNrKaskiWeights(int x, int y) {
return getNrKaskiWeights(x, y, 0);
}
@Override
public int getNrKaskiWeights(int x, int y, int z) {
return unitInfo[x][y][z].nrkaskiweights;
}
// public String[] getcontextLabels(int x, int y) {
// return unitInfo[x][y].contextLabels;
// }
@Override
public int getNrSomsMapped(int x, int y) {
return getNrSomsMapped(x, y, 0);
}
@Override
public int getNrSomsMapped(int x, int y, int z) {
return unitInfo[x][y][z].nrSomsMapped;
}
@Override
public int getNrUnitLabels(int x, int y) {
return getNrUnitLabels(x, y, 0);
}
@Override
public int getNrUnitLabels(int x, int y, int z) {
return unitInfo[x][y][z].nrUnitLabels;
}
@Override
public int getNrVecMapped(int x, int y) {
return getNrVecMapped(x, y, 0);
}
@Override
public int getNrVecMapped(int x, int y, int z) {
return unitInfo[x][y][z].nrVecMapped;
}
@Override
public double getQuantErrorUnit(int x, int y) {
return getQuantErrorUnit(x, y, 0);
}
@Override
public double getQuantErrorUnit(int x, int y, int z) {
return unitInfo[x][y][z].quantErrorUnit;
}
@Override
public double getQuantErrorUnitAvg(int x, int y) {
return getQuantErrorUnitAvg(x, y, 0);
}
@Override
public double getQuantErrorUnitAvg(int x, int y, int z) {
return unitInfo[x][y][z].quantErrorUnitAvg;
}
@Override
public String[] getUnitLabels(int x, int y) {
return getUnitLabels(x, y, 0);
}
@Override
public String[] getUnitLabels(int x, int y, int z) {
return unitInfo[x][y][z].unitLabels;
}
@Override
public double[] getUnitLabelsQe(int x, int y) {
return getUnitLabelsQe(x, y, 0);
}
@Override
public double[] getUnitLabelsQe(int x, int y, int z) {
return unitInfo[x][y][z].unitLabelsQe;
}
@Override
public double[] getUnitLabelsWgt(int x, int y) {
return getUnitLabelsWgt(x, y, 0);
}
@Override
public double[] getUnitLabelsWgt(int x, int y, int z) {
return unitInfo[x][y][z].unitLabelsWgt;
}
@Override
public String[] getUrlMappedSoms(int x, int y) {
return getUrlMappedSoms(x, y, 0);
}
@Override
public String[] getUrlMappedSoms(int x, int y, int z) {
return unitInfo[x][y][z].urlMappedSoms;
}
@Override
public double[][][][] getVectors() {
double[][][][] res = new double[xSize][ySize][zSize][];
for (int k = 0; k < zSize; k++) {
for (int j = 0; j < ySize; j++) {
for (int i = 0; i < xSize; i++) {
res[i][j][k] = unitInfo[i][j][k].vector;
}
}
}
return res;
}
@Override
public int getXSize() {
return xSize;
}
@Override
public int getYSize() {
return ySize;
}
@Override
public int getZSize() {
return zSize;
}
protected void initUnitInformation() {
for (int k = 0; k < zSize; k++) {
for (int j = 0; j < ySize; j++) {
for (int i = 0; i < xSize; i++) {
unitInfo[i][j][k] = new UnitInformation();
}
}
}
}
@Override
public String getCommonVectorLabelPrefix() {
if (commonLabelPrefix == null) {
commonLabelPrefix = StringUtils.getCommonPrefix(allVectorNames);
}
return commonLabelPrefix;
}
@Override
public boolean isLabelled() {
return labelled;
}
@Override
public GridLayout getGridLayout() {
return gridLayout;
}
@Override
public GridTopology getGridTopology() {
return gridTopology;
}
}