Skip to content
Snippets Groups Projects
Commit 43caa57a authored by Tucker Siegel's avatar Tucker Siegel
Browse files

add anomaly adjustment for testing

parent 2312f72f
No related branches found
No related tags found
No related merge requests found
......@@ -21,42 +21,44 @@ func GetStageYearData(ctx common.DawnCtx, request models.GddRequest, comparison
request.Year = gddData.AnalogYear
var gs []entities.Gdd
norms := persistence.GetLastNormalsYearly(request.BuildLocation())
if comparison == -1 {
gs = persistence.GetLastNormalsYearly(request.BuildLocation())
gs = norms
} else {
gs = []entities.Gdd{persistence.GddFindFirstByYearAndLocation(comparison, request.BuildLocation())}
}
var normalMeanNonAcc []float64
rows := [][]float64{}
rowsAll := [][]float64{}
comparisonRows := [][]float64{}
for i := 0; i < len(gs[0].MinTemps); i++ {
row := []float64{}
rowK := []float64{}
rowComp := []float64{}
rowNormal := []float64{}
for j := 0; j < len(gs); j++ {
row = append(row, utils.CalculateSingleGdd(gs[j].MinTemps[i], gs[j].MaxTemps[i], product))
rowK = append(rowK, utils.CalculateSingleGdd(gs[j].MinTemps[i], gs[j].MaxTemps[i], product))
if i > 0 {
row[j] += rows[len(rows)-1][j]
}
rowComp = append(rowComp, utils.CalculateSingleGdd(gs[j].MinTemps[i], gs[j].MaxTemps[i], product))
}
for j := 0; j < len(norms); j++ {
rowNormal = append(rowNormal, utils.CalculateSingleGdd(norms[j].MinTemps[i], norms[j].MaxTemps[i], product))
}
rows = append(rows, row)
rowsAll = append(rowsAll, rowK)
meanNoAcc, _ := stats.Mean(rowK)
normalMeanNonAcc = append(normalMeanNonAcc, meanNoAcc)
comparisonRows = append(comparisonRows, rowComp)
normMeanNoAccValue, _ := stats.Mean(rowNormal)
normalMeanNonAcc = append(normalMeanNonAcc, normMeanNoAccValue)
}
allCfs := persistence.CfsFindByLocationMultiple(request.BuildLocation(), 4)
cfsMeans := persistence.CfsFindAllByLocation(request.BuildLocation())
gddArr := [][]float64{}
for i, c := range allCfs {
gddArr = append(gddArr, gdds)
gddArr[i] = append(gddArr[i], utils.CalculateGddValues(c.MinTemps, c.MaxTemps, product, false)...)
// cfsGddData := utils.CalculateGddValues(c.MinTemps, c.MaxTemps, product, false) // not accumulated
// anomaly adjustment function
cfsGddData := utils.CalculateGddValuesCfsNormed(c.MinTemps, c.MaxTemps, product, cfsMeans.MinTemps, cfsMeans.MaxTemps, normalMeanNonAcc) // not accumulated
gddArr[i] = append(gddArr[i], cfsGddData...)
gddArr[i] = append(gddArr[i], normalMeanNonAcc[len(gddArr[i]):]...)
}
// none of this data is accumulated
returnData := models.StageData{
AllGdds: gddArr,
ComparisonAll: rowsAll,
ComparisonAll: comparisonRows,
}
return returnData
}
......
......@@ -42,3 +42,16 @@ func CalculateGddValues(minTemps []float64, maxTemps []float64, product enums.Pr
}
return returnList
}
// anomaly adjusted, https://library.wmo.int/doc_num.php?explnum_id=10314 page 22
func CalculateGddValuesCfsNormed(minTemps []float64, maxTemps []float64, product enums.Product, cfsMinTemps []float64, cfsMaxTemps []float64, normalMean []float64) []float64 {
var returnList []float64
for i := 0; i < len(minTemps); i++ {
value := CalculateSingleGdd(minTemps[i], maxTemps[i], product)
cfsValue := CalculateSingleGdd(cfsMinTemps[i], cfsMaxTemps[i], product)
value = value + (normalMean[i] - cfsValue)
value = ClipMinFloat(value, 0)
returnList = append(returnList, value)
}
return returnList
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment