public ClusteringExternalPerformances(Map<Integer,String> indexToTrueState, Map<Integer,String> indexToCluster) {
		
		if( indexToTrueState == null)
			throw new IllegalArgumentException("Error: null indexes to true states map");
		if( indexToTrueState.size() < 1)
			throw new IllegalArgumentException("Error: indexes to true states map must contains at least a state");
		if( indexToCluster == null)
			throw new IllegalArgumentException("Error: null indexes to clusters map");
		if( indexToCluster.size() < 1)
			throw new IllegalArgumentException("Error: indexes to clusters map must contains at least a cluster");
		
		// True states maps
		this.trueStateToIndex = new TreeMap<String,Integer>();
		this.indexToTrueState = indexToTrueState;
		
		for( int i = 0; i < this.indexToTrueState.size(); ++i) {
			String val = this.indexToTrueState.get(i);
			if( val == null)
				throw new IllegalArgumentException("Error: key " + i + "doesn't included in the map index to value");
			
			this.trueStateToIndex.put(val, i);
		}
		
		// Clustering maps
		this.clusterToIndex = new TreeMap<String,Integer>();
		this.indexToCluster = indexToCluster;
		
		for( int i = 0; i < this.indexToCluster.size(); ++i) {
			String val = this.indexToCluster.get(i);
			if( val == null)
				throw new IllegalArgumentException("Error: key " + i + "doesn't included in the map index to value");
			
			this.clusterToIndex.put(val, i);
		}
		
		this.initializeStructures();
	}