From 6bd9f5e18852c2e089cbe924152c725f0e34b443 Mon Sep 17 00:00:00 2001
From: Tor-Einar Skog <tor-einar.skog@nibio.no>
Date: Tue, 7 Dec 2021 11:55:05 +0100
Subject: [PATCH] Bugfix in  single sine wave function alpha * cos, not
 acos....

---
 .../java/no/nibio/vips/model/maths/NonLinearCurves.java  | 4 ++--
 .../no/nibio/vips/model/maths/NonLinearCurvesTest.java   | 9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/src/main/java/no/nibio/vips/model/maths/NonLinearCurves.java b/src/main/java/no/nibio/vips/model/maths/NonLinearCurves.java
index 9a8f17e..a6c7b11 100755
--- a/src/main/java/no/nibio/vips/model/maths/NonLinearCurves.java
+++ b/src/main/java/no/nibio/vips/model/maths/NonLinearCurves.java
@@ -87,7 +87,7 @@ public class NonLinearCurves {
      * <p>Based on Baskerville et al (1969): Rapid estimation of heat accumulation
      * from maximum and minimum temperatures. Ref Figure 1</p>
      * <p>Formulas from Zalom et al 1983: Degree-days: The calculation and use
-     * of heat units in pest managemeng. Division of Agriculture and Natural resources,
+     * of heat units in pest management. Division of Agriculture and Natural resources,
      * University of California. Leaflet 21373</p>
      * @param Tmin minimum value of sine wave
      * @param Tmax maximum value of sine wave
@@ -137,7 +137,7 @@ public class NonLinearCurves {
             return (1/Math.PI) * ( 
                     (m-Tl)*(theta_2 + Math.PI/2) 
                     + (Tu-Tl)*(Math.PI/2-theta_2) 
-                    - Math.acos(theta_2) 
+                    - (alpha * Math.cos(theta_2))
                     );
         }
         
diff --git a/src/test/java/no/nibio/vips/model/maths/NonLinearCurvesTest.java b/src/test/java/no/nibio/vips/model/maths/NonLinearCurvesTest.java
index b5a8557..0d10e74 100755
--- a/src/test/java/no/nibio/vips/model/maths/NonLinearCurvesTest.java
+++ b/src/test/java/no/nibio/vips/model/maths/NonLinearCurvesTest.java
@@ -198,6 +198,15 @@ public class NonLinearCurvesTest extends TestCase {
         result = instance.calculateSingleSineWaveWithCutoff(tMin, tMax, thresholdLower, thresholdUpper);
         assertEquals(expectedResult, result,0.1);
         
+        // tMax is above Tu, tMin is above Tl
+        tMax = 31.8;
+        tMin = 16.6;
+        thresholdUpper = 31.1;
+        thresholdLower = 15.0;
+        expectedResult = 9.135946967874313;
+        result = instance.calculateSingleSineWaveWithCutoff(tMin, tMax, thresholdLower, thresholdUpper);
+        assertEquals(expectedResult, result,0.1);
+        
     }
     
 }
-- 
GitLab