private String getBestAttribute(List<Incident> trSet, Double entropy) {
		
		Map <String, AttrSliceTable> sliceTable = new HashMap<String, AttrSliceTable>();
		
		AttrSliceTable recordT;
		Pair pair;
		
		// Unique Attributes in the training set
		for(Incident inc: trSet){			
			for (String attr: inc.getData().keySet()){
				
				if(sliceTable.containsKey(attr)){
					recordT = sliceTable.get(attr);
				} else {					
					recordT = new AttrSliceTable();
					recordT.setAttrName(attr);
				}
				
				// Value to class for selected attribute
				pair = new Pair(inc.getData().get(attr).toString(), inc.getcName());					
				recordT.getValToClassTable().add(pair);
				sliceTable.put(attr, recordT);
				
			}
		}
		// sliceTable - classes per attributes - complete here
		
		
		Double attrEntropyDelta;
		Map <String,Double> attrInformationGain = new HashMap<String, Double>();
		
		for(String attr: sliceTable.keySet()){
			attrEntropyDelta = (double)0;
			recordT = sliceTable.get(attr);
			recordT.makeConvolution();
			
			for(String val: recordT.getConvolution().keySet()){
				// val - values in convolution map
				
				attrEntropyDelta  += (						
						Double.valueOf(recordT.getValNums().get(val)))/trSet.size()
						
						* calcEntropy(						
								recordT.getConvolution().get(val), 
						recordT.getValNums().get(val)
						);				
			}
			attrInformationGain.put(attr, entropy - attrEntropyDelta);
			
		}
		Double maxGain = (double)0;
		String winningAttr = new String();
		for(String attr: attrInformationGain.keySet()){
			if(attrInformationGain.get((String) attr)>maxGain){
				
				maxGain = attrInformationGain.get((String) attr);
				winningAttr = attr;
				
			}
		}
		
		return winningAttr;
		
	}