diff --git a/user/KETEK-PM1150-EB.py b/user/KETEK-PM1150-EB.py
new file mode 100644
index 0000000000000000000000000000000000000000..3dd853ffcbca7d3a51925175108203bcf54f4092
--- /dev/null
+++ b/user/KETEK-PM1150-EB.py
@@ -0,0 +1,105 @@
+import os
+import numpy as np
+import pandas as pd
+from PeakOTron import PeakOTron
+import re
+
+C_tau = lambda V, V_bd, V_0: (V - V_bd)/V_0
+f_tau = lambda V, V_bd, V_0: -1/np.log((1-np.exp(C_tau(V, V_bd, V_0)*np.exp(-1)))/(1 - np.exp(C_tau(V, V_bd, V_0))))  
+
+V_bd_hmt = 26.1
+V_0_hmt = 1.4
+
+tau = 146.0 ##SLOW COMPONENT OF SIPM PULSE
+t_0 = 100.0  ## PRE-INTEGRATION TIME
+t_gate = 100.0 ## GATE LENGTH
+bin_0=-100.0  ## SELECT FIRST BIN OF SPECTRUM (CAN BE AUTOMATIC)
+truncate_nsigma0_up = 2.0 ## SCAN SPECTRUM FROM Q < Q_0 - 4 sigma_0
+truncate_nsigma0_do = 2.0 ## EVALUATE SPECTRUM CHI2 IN Q_0 - x*sigma_0  < Q < Q_0 + 2*sigma_0
+prefit_only=False  ## FIT THE WHOLE SPECTRUM
+
+out_dict = {}
+files_to_fit = []
+
+## Find all histograms in directory 
+folder = './data/ketek'
+for root, dirs, files in os.walk(folder):
+        for file in files:
+            if file.endswith(".Wfm.csv"):
+                files_to_fit.append([file, os.path.join(root, file)])
+                
+## Print files.
+print("Files to fit:")
+for i, (file, _) in enumerate(files_to_fit):
+    print('File {0}: {1}'.format(i, file))
+
+## Loop thorough files
+for i, (file, path) in enumerate(files_to_fit):
+    items = file.split('_')
+
+    print("\n\n")
+    print("===============================================================")
+    print("FIT {:d} - {:s}".format(i, file))
+    print("===============================================================")
+    print("\n\n")
+        
+
+    ## Load files. 
+    data = np.loadtxt(path, skiprows=0)
+
+    ## Create a PeakOTron Fit Object. 
+    f_data = PeakOTron(verbose=True)
+    
+    match = re.search(r'scale(\d+)', file, re.IGNORECASE)
+    if match:
+        number = int(match.group(1))
+        print("Extracted number:", number)
+    else:
+        print("No number found in the string.")
+        
+    V = float(number/100)
+    print(V)
+    # V = 41.0
+
+    f_tau_hmt = f_tau(V, V_bd_hmt, V_0_hmt)
+    ## Perform fit. 
+    f_data.Fit(data, 
+          tau=tau,  #SLOW PULSE COMPONENT TIME CONSTANT (ns)
+          t_gate=t_gate, #GATE LENGTH (ns)
+          t_0 = t_0, #INTEGRATION TIME BEFORE GATE (ns)               
+          tau_R=f_tau_hmt*tau,
+          bin_0 = None,
+          truncate_nsigma0_up = None,
+          truncate_nsigma0_do = None
+    )
+
+    # f_data.PlotPeaks()
+    f_data.PlotFit(xlabel="$q_0$", 
+                    title="Charge Spectrum {}".format(file)
+                    )
+    prefit_val, prefit_err = f_data.GetPrefitResults(bin_units=False)
+    print("Prefit values", prefit_val, prefit_err)
+
+    fit_val, fit_err = f_data.GetFitResults(bin_units=False)
+    print("Fit values", fit_val, fit_err)
+    
+    fit_out = {}
+    for key, value in fit_val.items():
+        fit_out["{:s}".format(key)] = value
+    for key, value in fit_err.items():
+        fit_out["d_{:s}".format(key)] = value
+    for key, value in prefit_val.items():
+        fit_out["prefit_{:s}".format(key)] = value
+    for key, value in prefit_err.items():
+        fit_out["prefit_d_{:s}".format(key)] = value
+    
+    df = pd.DataFrame.from_dict([fit_out])
+
+    df.to_csv("{}/fit_results_{:s}.csv".format(folder,file))
+    
+    # dump(f_data, "{}/dump_{}.csv".format(folder,file))
+    # break
+    
+    
+    
+