public static ProbabilityDistribution respond(ProbabilityDistribution pd,
			PricingPolicy policy,
			PricingPolicy baseline,
			double awareness,
			double sensitivity,
			String responseType) {
		double w = 2;
		double[] previousHist = pd.getHistogram();
		double[] newHist = new double[Constants.MIN_IN_DAY];
		double[] policyArr = policy.getTOUArray();
		double[] baseArr = baseline.getTOUArray();
		switch(responseType) {
		case "None":
			return pd;
		case "Optimal":
			newHist = shiftingOptimal(previousHist, baseArr, policyArr, w * awareness, w * sensitivity);
			break;
		case "Normal":
			newHist = shiftingNormal(previousHist, baseArr, policyArr, w * awareness, w * sensitivity);
			break;
		case "Discrete":
			newHist = shiftingDiscrete(previousHist, baseArr, policyArr, w * awareness, w * sensitivity);
			break;
		case "Daily":
			newHist = shiftingDaily(previousHist, baseArr, policyArr, awareness, sensitivity);
			// Clean up NaNs
			for(int i = 0; i < newHist.length; i++) {
				if(Double.isNaN(newHist[i])) {
					newHist[i] = 0.0;
				}
			}
			break;
		default:
			return pd;
		}
		ProbabilityDistribution retPd = new Histogram(newHist);
		return retPd;
	}