public void heightFeatures(State s,double[] vals,int currentPiece,int currentTurn) {
		int[][] field = s.getField();
		int[] top = s.getTop();
		int c = State.COLS-1;
		double maxWellDepth=0,
		totalWellDepth=0,
		totalWeightedWellDepth=0,
		maxHeight=0,
		minHeight = Integer.MAX_VALUE,
		total=0,
		totalHeightSquared = 0,
		diffTotal = 0,
		squaredDiffTotal=0;
		for(int j=0;j<State.COLS;j++){ //by column
			total += top[j];
			totalHeightSquared += Math.pow(top[j], 2);	
			diffTotal += (j>0)?Math.abs(top[j-1]-top[j]):0;
			squaredDiffTotal += (j>0)?Math.abs(Math.pow(top[j-1],2)-Math.pow(top[j],2)):0;
			maxHeight = Math.max(maxHeight,top[j]);
			minHeight = Math.min(minHeight,top[j]);

			if((j==0||top[j-1]>top[j]) && (j==c||top[j+1]>top[j])) {
				int wellDepth = (j==0)?top[j+1]-top[j]: (
						(j==c)?top[j-1]-top[j]:
							Math.min(top[j-1],top[j+1])-top[j]
				);
				maxWellDepth 			= Math.max(wellDepth, maxWellDepth);
				totalWellDepth 			+= maxWellDepth;
				totalWeightedWellDepth 	+= (wellDepth*(wellDepth+1))/2;
			}
		}
		cellOperations(top,field,vals,currentTurn);
		vals[MAX_WELL_DEPTH] = maxWellDepth;
		vals[TOTAL_WELL_DEPTH] = totalWellDepth;
		vals[WEIGHTED_WELL_DEPTH] = totalWeightedWellDepth;
		vals[DIFF_AVG_HEIGHT] = ((double)total)/State.COLS;
		vals[SUM_ADJ_DIFF] = diffTotal;
		//vals[SUM_ADJ_DIFF_SQUARED] = squaredDiffTotal;
		vals[MAX_MIN_DIFF] = maxHeight-minHeight;
		vals[MAX_HEIGHT] = maxHeight;
		vals[COL_STD_DEV] = (totalHeightSquared - total*((double)total)/State.COLS)/(double)(State.COLS-1);
		//System.out.println(colTrans);
	}