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

marytts.cart.impose.MaryNode Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2006 DFKI GmbH.
 * All Rights Reserved.  Use is subject to license terms.
 *
 * This file is part of MARY TTS.
 *
 * MARY TTS is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, version 3 of the License.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see .
 *
 */
package marytts.cart.impose;

import marytts.features.FeatureVector;

/**
 * A generic node class for the tree structures.
 * 
 * @author sacha
 * 
 */
public class MaryNode {

	protected int featureIndex = -1;
	protected int from = 0;
	protected int to = 0;
	private MaryNode[] kids = null;

	/**
	 * @param setFrom
	 *            setFrom
	 * @param setTo
	 *            setTo
	 */
	/* Constructor */
	public MaryNode(int setFrom, int setTo) {
		from = setFrom;
		to = setTo;
		kids = null;
	}

	/**
	 * @return from
	 */

	/* Getters for various fields */
	public int getFrom() {
		return (from);
	}

	public int getTo() {
		return (to);
	}

	public int getNumChildren() {
		return (kids.length);
	}

	public MaryNode[] getChildren() {
		return (kids);
	}

	/**
	 * @param i
	 *            i
	 */
	/* Feature index management */
	public void setFeatureIndex(int i) {
		featureIndex = i;
	}

	public int getFeatureIndex() {
		return (featureIndex);
	}

	/**
	 * @param numKids
	 *            numKids
	 */
	/* Node splitting */
	public void split(int numKids) {
		kids = new MaryNode[numKids];
	}

	public void setChild(int i, MaryNode n) {
		kids[i] = n;
	}

	public MaryNode getChild(int i) {
		return (kids[i]);
	}

	/**
	 * @return kids different from null
	 */
	/* Check if this is a node or a leaf */
	public boolean isNode() {
		return (kids != null);
	}

	public boolean isLeaf() {
		return (kids == null);
	}

	// debug output
	public void toStandardOut(FeatureArrayIndexer ffi, int level) {

		String blanks = "";
		for (int i = 0; i < level; i++)
			blanks += "   ";

		if (kids != null) {
			String featureName = ffi.getFeatureDefinition().getFeatureName(featureIndex);
			System.out.println("Node " + featureName + " has " + (to - from) + " units divided into " + kids.length
					+ " branches.");
			for (int i = 0; i < kids.length; i++) {
				if (kids[i] != null) {
					System.out.print(blanks + "Branch " + i + "/" + kids.length + " ( "
							+ ffi.getFeatureDefinition().getFeatureName(featureIndex) + " is "
							+ ffi.getFeatureDefinition().getFeatureValueAsString(featureIndex, i) + " )" + " -> ");
					kids[i].toStandardOut(ffi, level + 1);
				} else {
					System.out.println(blanks + "Branch " + i + "/" + kids.length + " ( "
							+ ffi.getFeatureDefinition().getFeatureName(featureIndex) + " is "
							+ ffi.getFeatureDefinition().getFeatureValueAsString(featureIndex, i) + " )"
							+ " -> DEAD BRANCH (0 units)");
				}
			}
		} else {
			// get the unit indices
			FeatureVector[] fv = ffi.getFeatureVectors(from, to);
			System.out.print("LEAF has " + (to - from) + " units : ");
			for (int i = 0; i < fv.length; i++) {
				System.out.print(fv[i].getUnitIndex() + " ");
			}
			System.out.print("\n");
		}

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy