diff --git a/knife_edge.py b/knife_edge.py
index 83d0d8dc83e3ac76c41096a5ccdddc978fcd2103..10659ce8e4881e9869f73ae8ce160d2d3a449b31 100644
--- a/knife_edge.py
+++ b/knife_edge.py
@@ -46,7 +46,10 @@ def knife_edge(nrun, axisKey='scannerX', signalKey='FastADC4peaks', p0=None, ful
     sortIdx = np.argsort(positions)
     positions = positions[sortIdx]
     intensities = nrun[signalKey].values.flatten()[sortIdx]
-    if intensities[0] > intensities[-1]:
+
+    # estimate a linear slope fitting the data to determine which function to fit
+    slope = np.cov(positions, intensities)[0][1]/np.var(positions) 
+    if slope < 0:
         func = integPowerDown
         funcStr = 'a*erfc(np.sqrt(2)*(x-x0)/w0)'
     else:
@@ -76,4 +79,4 @@ def knife_edge(nrun, axisKey='scannerX', signalKey='FastADC4peaks', p0=None, ful
     if full:
         return popt, pcov
     else:
-        return np.array([popt[1], pcov[1,1]**0.5])
\ No newline at end of file
+        return np.array([popt[1], pcov[1,1]**0.5])