@Override
	public double getFMeasure(String classValue)
			throws IllegalArgumentException {
		
		if( classValue == null)
			throw new IllegalArgumentException("Error: null class value");
		if( this.valueToIndex.get(classValue) == null)
			throw new IllegalArgumentException("Error: state = " + classValue + " didn't found");
	
		if( this.performances.size() == 0)
			return Double.NaN;
		
		if( this.fmeasure == null) {
			
			this.fmeasure = new double[this.indexToValue.size()];
			for(int i = 0; i < this.fmeasure.length; ++i)
				this.fmeasure[i] = 0.0;
			
			Iterator<PType> iterPerf = this.performances.iterator();
			while(iterPerf.hasNext()) {
				
				PType perf = iterPerf.next();
				for(int i = 0; i < this.fmeasure.length; ++i)
					this.fmeasure[i] += perf.getFMeasure(this.indexToValue(i));
			}
			
			for(int i = 0; i < this.fmeasure.length; ++i)
				this.fmeasure[i] /= this.performances.size();
		}
		
		return this.fmeasure[this.valueToIndex.get(classValue)];
	}