From 99cc006e28914938b6e37c61e661e4a4be530ab9 Mon Sep 17 00:00:00 2001
From: Joakim <joakim.j.linja@jyu.fi>
Date: Tue, 27 Feb 2024 13:30:24 +0200
Subject: [PATCH] Added normalization to FID

---
 fid.m  |  1 +
 fid.py | 46 ++++++++++++++++++++++------------------------
 2 files changed, 23 insertions(+), 24 deletions(-)

diff --git a/fid.m b/fid.m
index cb4600d..572ebcc 100644
--- a/fid.m
+++ b/fid.m
@@ -36,6 +36,7 @@ function [rX, rY, f2] = fid(X, Y, cutoff, plotToggle)
     
     Y1(2:end) = (Y(2:end,1)-y1)./(X(2:end,1)-x1);
     Y1(1) = Y1(2);
+    Y1 = Y1/max(abs(Y1));
     
     if plotT
         figure, plot(X,Y1,'LineWidth',2);
diff --git a/fid.py b/fid.py
index 03ca8ae..218440a 100644
--- a/fid.py
+++ b/fid.py
@@ -43,27 +43,25 @@ def fid(X,Y,cutoff = 0.01):
         Boolean indexing array, the feature selection result.
         
     """
-    try:
-        def f(x,a,b,c,d):
-            return -a/(b*x+c)+d
-        
-        x0 = X[0]; y0 = Y[0]
-        Y1 = np.zeros(len(Y))
-        for i in range(1,len(X)):
-            Y1[i] = (Y[i]-y0)/(X[i]-x0)
-        Y1[0] = Y1[1]
-        
-        
-        popt, pcov = sp.optimize.curve_fit(f,X,Y1,p0=[1,10,10,0],
-            bounds=([0,-np.inf,-np.inf,-np.inf],[np.inf,np.inf,np.inf,np.inf]))
-        Y2 = f(X,*popt)
-        
-        dY2 = Y2[-1]-Y2[0]
-        f2 = Y2 < Y2[-1] - dY2*cutoff
-        
-        rX = X[f2]
-        rY = Y[f2]
-        
-        return rX, rY, f2
-    except RuntimeError as e:
-        raise e
+    def f(x,a,b,c,d):
+        return -a/(b*x+c)+d
+    
+    x0 = X[0]; y0 = Y[0]
+    Y1 = np.zeros(len(Y))
+    for i in range(1,len(X)):
+        Y1[i] = (Y[i]-y0)/(X[i]-x0)
+    Y1[0] = Y1[1]
+    Y1 = Y1/np.max(np.abs(Y1))
+    
+    
+    popt, pcov = sp.optimize.curve_fit(f,X,Y1,p0=[1,10,10,0],
+        bounds=([0,-np.inf,-np.inf,-np.inf],[np.inf,np.inf,np.inf,np.inf]))
+    Y2 = f(X,*popt)
+    
+    dY2 = Y2[-1]-Y2[0]
+    f2 = Y2 < Y2[-1] - dY2*cutoff
+    
+    rX = X[f2]
+    rY = Y[f2]
+    
+    return rX, rY, f2
-- 
GitLab