Error calculator readability updates.

* Remove hourly population math from function call and update comments
* Lowercase error messages sans punctuation.
  https://g3doc.corp.google.com/go/g3doc/style/decisions.md?cl=head#error-strings
* Make functions private.

Change-Id: I8de0cd77d9d74b561c9e30915e5ee83047ebf867
Reviewed-on: https://fuchsia-review.googlesource.com/c/cobalt/+/478419
Commit-Queue: Jared Weinstein <jaredweinstein@google.com>
Reviewed-by: Alexandre Zani <azani@google.com>
diff --git a/src/bin/config_parser/src/privacy/error_calculator.go b/src/bin/config_parser/src/privacy/error_calculator.go
index 6c78165..da1ddfe 100644
--- a/src/bin/config_parser/src/privacy/error_calculator.go
+++ b/src/bin/config_parser/src/privacy/error_calculator.go
@@ -49,7 +49,6 @@
 		return -1, err
 	}
 
-	// For report types with an hourly contribution interval, the population is set to (24*population) pseudo-users.
 	probBitFlip := privacyEncodingParams.ProbBitFlip
 	discretization := uint64(privacyEncodingParams.NumIndexPoints)
 	var errorEstimate float64
@@ -57,15 +56,18 @@
 	case config.ReportDefinition_UNIQUE_DEVICE_HISTOGRAMS:
 		fallthrough // Calculate RMSE Error for each bucket.
 	case config.ReportDefinition_UNIQUE_DEVICE_COUNTS:
-		errorEstimate = SingleContributionRapporRMSE(population, probBitFlip)
+		errorEstimate = singleContributionRapporRMSE(population, probBitFlip)
 	case config.ReportDefinition_HOURLY_VALUE_HISTOGRAMS:
-		errorEstimate = SingleContributionRapporRMSE(24*population, probBitFlip)
+		population *= 24 // Hourly contribution interval: 24*population pseudo-users.
+		errorEstimate = singleContributionRapporRMSE(population, probBitFlip)
 	case config.ReportDefinition_FLEETWIDE_OCCURRENCE_COUNTS:
 		contributionRange := uint64(report.MaxValue - report.MinValue)
-		errorEstimate = MultipleContributionRapporRMSE(24*population, probBitFlip, contributionRange, discretization)
+		population *= 24 // Hourly contribution interval: 24*population pseudo-users.
+		errorEstimate = multipleContributionRapporRMSE(population, probBitFlip, contributionRange, discretization)
 	case config.ReportDefinition_FLEETWIDE_HISTOGRAMS:
 		contributionRange := report.MaxCount
-		errorEstimate = MultipleContributionRapporRMSE(24*population, probBitFlip, contributionRange, discretization)
+		population *= 24 // Hourly contribution interval: 24*population pseudo-users.
+		errorEstimate = multipleContributionRapporRMSE(population, probBitFlip, contributionRange, discretization)
 	// TODO(jaredweinstein): Enable NumericStats once the formula is resolved.
 	// case config.ReportDefinition_UNIQUE_DEVICE_NUMERIC_STATS:
 	//         if err := meanReportConfigurationError(report, minDenominatorEstimate); err != nil {
@@ -76,19 +78,21 @@
 	//         if err := meanReportConfigurationError(report, minDenominatorEstimate); err != nil {
 	//                 return -1, err
 	//         }
-	//         errorEstimate = NumericStatsRapporRMSE(24*population, privacyEncodingParams, minDenominatorEstimate, report)
+	//         population *= 24 // Hourly contribution interval: 24*population pseudo-users.
+	//         errorEstimate = NumericStatsRapporRMSE(population, privacyEncodingParams, minDenominatorEstimate, report)
 	case config.ReportDefinition_FLEETWIDE_MEANS:
 		if err := meanReportConfigurationError(report, minDenominatorEstimate); err != nil {
 			return -1, err
 		}
-		errorEstimate = FleetwideMeansRapporRMSE(24*population, probBitFlip, minDenominatorEstimate, discretization, report)
+		population *= 24 // Hourly contribution interval: 24*population pseudo-users.
+		errorEstimate = fleetwideMeansRapporRMSE(population, probBitFlip, minDenominatorEstimate, discretization, report)
 	default:
 		reportType := config.ReportDefinition_ReportType_name[int32(report.GetReportType())]
-		return -1, fmt.Errorf("Error estimation is not supported for reports of type %s.", reportType)
+		return -1, fmt.Errorf("error estimation is not supported for reports of type %s", reportType)
 	}
 
 	if math.IsNaN(errorEstimate) || math.IsInf(errorEstimate, 0) {
-		return errorEstimate, fmt.Errorf("Error estimation failed to return valid result due to an invalid or missing field.")
+		return errorEstimate, fmt.Errorf("error estimation failed to return valid result due to an invalid or missing field")
 	}
 	return errorEstimate, nil
 }
@@ -96,14 +100,14 @@
 // Compute the 2D-RAPPOR RMSE for reports with single contributions.
 //
 // See Proposition 1 and 2 of go/histogram-aggregation-privacy-guarantee.
-func SingleContributionRapporRMSE(population uint64, probBitFlip float64) float64 {
+func singleContributionRapporRMSE(population uint64, probBitFlip float64) float64 {
 	return math.Sqrt(float64(population)*probBitFlip*(1-probBitFlip)) / (1 - 2*probBitFlip)
 }
 
 // Compute 2D-RAPPOR RMSE for reports with multiple or real-number contributions.
 //
 // See Proposition 1, 2, and 3 of go/histogram-aggregation-privacy-guarantee.
-func MultipleContributionRapporRMSE(population uint64, probBitFlip float64, contributionRange uint64, discretization uint64) float64 {
+func multipleContributionRapporRMSE(population uint64, probBitFlip float64, contributionRange uint64, discretization uint64) float64 {
 	var n = float64(population)
 	var p = probBitFlip
 	var m = float64(contributionRange)
@@ -117,6 +121,7 @@
 }
 
 // TODO(jaredweinstein): Add back NumericStats once the formula is resolved.
+// Compute 2D-RAPPOR RMSE for NumericStats reports.
 // func NumericStatsRapporRMSE(population uint64, params PrivacyEncodingParams, minDenominatorEstimate uint64, report *config.ReportDefinition) float64 {
 //         sigma := SingleContributionRapporRMSE(population, params)
 //         a := params.ProbBitFlip / (1 - 2*params.ProbBitFlip)
@@ -133,18 +138,19 @@
 //         return meanRapporRMSE(mseNumerator, mseDenominator, sigma, a, float64(M), float64(minDenominatorEstimate))
 // }
 
-func FleetwideMeansRapporRMSE(population uint64, probBitFlip float64, minDenominatorEstimate uint64, discretization uint64, report *config.ReportDefinition) float64 {
+// Compute 2D-RAPPOR RMSE for the FleetwideMeans report.
+func fleetwideMeansRapporRMSE(population uint64, probBitFlip float64, minDenominatorEstimate uint64, discretization uint64, report *config.ReportDefinition) float64 {
 	t := report.MaxCount
 	a := probBitFlip * float64(t) / (1 - 2*probBitFlip)
 	T := float64(math.Max(float64(-report.MinValue), float64(report.MaxValue)))
 
 	// Numerator is aggregated like FleetwideOccurrenceCounts.
 	numeratorContributionRange := uint64(report.MaxValue - report.MinValue)
-	rmseNumerator := MultipleContributionRapporRMSE(population, probBitFlip, numeratorContributionRange, discretization)
+	rmseNumerator := multipleContributionRapporRMSE(population, probBitFlip, numeratorContributionRange, discretization)
 	mseNumerator := math.Pow(rmseNumerator, 2)
 
 	// Denominator RMSE aggregated like FleetwideHistograms.
-	sigma := MultipleContributionRapporRMSE(population, probBitFlip, t, discretization)
+	sigma := multipleContributionRapporRMSE(population, probBitFlip, t, discretization)
 
 	return meanRapporRMSE(mseNumerator, sigma, a, T, float64(minDenominatorEstimate))
 }