diff --git a/_PeakOTronAP2.py b/_PeakOTronAP2.py
index 2ac9e512eebdd3bfcfa2b6777dbf45b9f430e7ec..dd2c6601caf8df7acb06ca5f8ae4c121b792d8a7 100644
--- a/_PeakOTronAP2.py
+++ b/_PeakOTronAP2.py
@@ -3,7 +3,7 @@
 import os
 import numpy as np
 import pandas as pd
-from itertools import chain
+from itertools import chain, zip_longest
 from iminuit import Minuit
 from iminuit.util import describe
 import matplotlib.pyplot as plt
@@ -532,67 +532,22 @@ class PeakOTron:
         return x_kde, y_kde, y_kde_err, y_kde_conf_interval
 
 
-        
-    ##MODEL DEFINITIONS
-        
-        
-    
-#     def DRM_basic(self, x, mu, x_0, G, sigma_0, sigma_1, alpha, r_beta, lbda, k_low, k_hi):
-
-#         k = np.arange(k_low, k_hi)
-#         k = sorted(list(k[k!=0]))
-#         k_is = [k[0:int(_k)] for _k in k]
-
-#         f0 = gpoisson.pmf(0, mu, lbda)*norm.pdf(x, x_0, sigma_0)
-#         f1s = np.asarray([
-#                 binom.pmf(0, _k, alpha)*gpoisson.pmf(_k, mu, lbda)*norm.pdf(x, x_0 + _k*G,  self.SigmaK(_k, sigma_0, sigma_1))
-#                 for _k in k
-#         ])
-
-#         f2s = np.vstack([
-#                  np.asarray([
-#                     binom.pmf(_i, _k, alpha)*gpoisson.pmf(_k, mu, lbda)*self.XTM(x, _k, _i, x_0, G, sigma_0, sigma_1, r_beta)
-#                     for _i in _is
-#                 ])
-
-#                 for _k, _is in zip(k, k_is)  
-#             ])
-
-
-#         f = np.sum(np.vstack([f0, f1s, f2s]), axis=0)
-
-#         return f
 
 
 
 
-#     def XTM(self, x, k, i, x_0, G, sigma_0, sigma_1, r_beta):
-
-#         x_k = x - (x_0 + k*G)
-#         _sigma_k = self.SigmaK(k, sigma_0, sigma_1)
-#         x_ct_pad = np.zeros_like(x_k)
-
-#         if(i==1):
-#             cond = (x_k > -5*_sigma_k)
-#             error_f = 0.5*(1.0 + sc.erf(x_k/(_sigma_k*np.sqrt(2.0))))
-#             log_f = -x_k/(r_beta*G) - np.log(r_beta*G)
-#             x_ct = np.where(cond, np.exp(log_f)*error_f, x_ct_pad)
-
-#         elif(i>1):
-#             cond = (x_k > 0)
-#             log_f = sc.xlogy(i-1, x_k) - sc.gammaln(i) - sc.xlogy(i, r_beta*G) - x_k/(r_beta*G)
-#             x_ct = np.where(cond, np.exp(log_f), x_ct_pad)
-
-#         else:
-#             x_ct = x_k
-
-#         return x_ct
-
-
-
     
-    def DRM_basic(self, x, mu, x_0, G, sigma_0, sigma_1, lbda, tau, r_Ap, tgate, pAp, k_low, k_hi):
-
+    def DRM_basic(self, 
+                  x, 
+                  mu, 
+                  x_0, 
+                  G, 
+                  lbda, 
+                  sigma_0, 
+                  sigma_1, 
+                  k_low, 
+                  k_hi):
+        
         k = np.arange(k_low, k_hi)
         k = sorted(list(k[k!=0]))
         k_is = [k[0:int(_k)] for _k in k]
@@ -603,67 +558,10 @@ class PeakOTron:
                 for _k in k
         ])
 
-        f2s = np.asarray([
-                gpoisson.pmf(_k, mu, lbda)*_k*self.dPApdPH(x, 
-                                                           _k, 
-                                                           x_0, 
-                                                           G,
-                                                           tau,
-                                                           r_Ap, 
-                                                           tgate,
-                                                           pAp)
-                for _k in k
-        ])
 
-        f = np.sum(np.vstack([f0, f1s, f2s]), axis=0)
+        f = np.sum(np.vstack([f0, f1s]), axis=0)
 
         return f
-
-
-
-
-
-#     def dPApdPH(
-#                self, 
-#                x, 
-#                k, 
-#                x_0, 
-#                G,
-#                tau,
-#                r_Ap, 
-#                tgate,
-#                pAp):
-        
-#         PH = (x - x_0)/G - k
-
-#         PH_max = 1 + np.exp(-tgate/tau) - 2*np.exp(-0.5*tgate/tau)
-
-#         cond_PH_max = (PH<PH_max)
-
-#         PH_temp = np.where(cond_PH_max, PH, PH_max)
-
-#         t_b0 = 0.5*tgate - tau*np.arccosh(0.5*((1 - PH_temp)*np.exp(tgate/(2*tau)) + np.exp(-tgate/(2*tau))))
-#         t_b1 = tgate-t_b0
-
-#         dpApdt_b0 = pAp*(1-np.exp(-t_b0/tau))*np.exp(-t_b0/r_Ap)/r_Ap
-#         dpApdt_b1 = pAp*(1-np.exp(-t_b1/tau))*np.exp(-t_b1/r_Ap)/r_Ap
-
-#         dPHdt_b0 = -2*np.sinh((t_b0-0.5*tgate)/tau)*np.exp(-0.5*tgate/tau)/tau
-#         dPHdt_b1 = -2*np.sinh((t_b1-0.5*tgate)/tau)*np.exp(-0.5*tgate/tau)/tau
-
-#         dpApdPH_b0 = PH_max*dpApdt_b0/((np.where(np.abs(dPHdt_b0)>1e-5, np.abs(dPHdt_b0), 1e-5)))
-#         dpApdPH_b1 = PH_max*dpApdt_b1/((np.where(np.abs(dPHdt_b1)>1e-5, np.abs(dPHdt_b1), 1e-5)))
-
-
-
-#         dpApdPH_b0 = np.where(cond_PH_max, dpApdPH_b0, 0)
-#         dpApdPH_b1 = np.where(cond_PH_max, dpApdPH_b1, 0)
-        
-#         dpApdPH_b0 = np.where(dpApdPH_b0>0, dpApdPH_b0, 0)
-#         dpApdPH_b1 = np.where(dpApdPH_b0>0, dpApdPH_b1, 0)
-
-
-#         return dpApdPH_b0/G
     
     
     def dPApdPH(self, 
@@ -707,11 +605,56 @@ class PeakOTron:
         dpApdPH_b1 = np.where(dpApdPH_b0>0, dpApdPH_b1, 0)
 
 
-        return dpApdPH_b0/G
+        return PH_max*(dpApdPH_b0)/G
+
+
+    
+    def ApplyAp(self, 
+                x, 
+                y_light, 
+                mu, 
+                x_0, 
+                G, 
+                lbda, 
+                DCR, 
+                tgate, 
+                t_0, 
+                tau, 
+                r_Ap, 
+                pAp, 
+                k_low, 
+                k_hi, 
+                k_dcr_low, 
+                k_dcr_hi):
+        
+        k = np.arange(k_low, k_hi)
+        k = sorted(list(k[k!=0]))
+        
+        mu_dcr = DCR*(tgate+abs(t_0))
+        
+        k_dcr = np.arange(k_dcr_low, k_dcr_hi)
+        k_dcr = sorted(list(k_dcr[k_dcr!=0]))
+        
+        
+        ps_light = [gpoisson.pmf(_k, mu, lbda) for _k in k]
+        ps_dark = [gpoisson.pmf(_k, mu_dcr, lbda) for _k in k_dcr]
+        
+        f0s = np.asarray([_p_l + _p_d for _p_l, _p_d in zip_longest(ps_light, ps_dark, fillvalue=0)]).reshape(-1,1)
+        
+            
+        f1s = np.asarray([
+                _k*self.dPApdPH(x, _k, x_0, G, tau, r_Ap, tgate, pAp)
+                for _k in k
+        ])
+        
+        f = np.sum(f0s*f1s, axis=0)
+
 
+        return y_light+f
 
 
 
+  
 
     def PH_range(self, t, t_0, r_fast, tau, tgate):
 
@@ -748,7 +691,20 @@ class PeakOTron:
         return PHs
 
 
-    def ApplyDCR(self, x, y_light, x_0, G, DCR, tgate, t_0, tau, r_fast, lbda, dx, k_dcr_low, k_dcr_hi):
+    def ApplyDCR(self, 
+                 x, 
+                 y_light, 
+                 x_0, 
+                 G, 
+                 lbda, 
+                 DCR, 
+                 tgate, 
+                 t_0, 
+                 tau, 
+                 r_fast,  
+                 dx, 
+                 k_dcr_low, 
+                 k_dcr_hi):
     
         mu_dcr = DCR*(abs(t_0) + tgate)
         
@@ -836,36 +792,7 @@ class PeakOTron:
 
 
  
-    def DRM_nodcr(  
-            self,
-            x,
-            mu,
-            x_0,
-            G,
-            sigma_0,
-            sigma_1,
-            alpha,
-            r_beta,
-            lbda,
-            k_low,
-            k_hi):
-        
-        y_model = self.DRM_basic(x,  
-                                 mu,
-                                 x_0,
-                                 G,
-                                 sigma_0,
-                                 sigma_1,
-                                 alpha,
-                                 r_beta,
-                                 lbda,
-                                 k_low,
-                                 k_hi,
-                                 dx
-                                )
-        
-        return y_model
-        
+
 
 
     def DRM(
@@ -894,33 +821,49 @@ class PeakOTron:
         
         
         y_light = self.DRM_basic(x, 
-                                 mu,
+                                 mu, 
                                  x_0, 
                                  G, 
+                                 lbda, 
                                  sigma_0, 
                                  sigma_1, 
-                                 lbda, 
-                                 tau, 
-                                 r_Ap, 
-                                 tgate, 
-                                 pAp, 
                                  k_low, 
                                  k_hi)
-
-        y_model = self.ApplyDCR(x,
-                                y_light,
-                                x_0,
-                                G,
-                                DCR,
-                                tgate,
-                                t_0,
-                                tau,
-                                r_fast,
-                                lbda,
-                                dx,
-                                k_dcr_low,
-                                k_dcr_hi)
         
+        y_lightap = self.ApplyAp(x, 
+                               y_light, 
+                               mu, 
+                               x_0, 
+                               G, 
+                               lbda, 
+                               DCR, 
+                               tgate, 
+                               t_0, 
+                               tau, 
+                               r_Ap, 
+                               pAp, 
+                               k_low, 
+                               k_hi, 
+                               k_dcr_low, 
+                               k_dcr_hi)
+
+
+
+        y_model = self.ApplyDCR(x, 
+                                 y_lightap, 
+                                 x_0, 
+                                 G, 
+                                 lbda, 
+                                 DCR, 
+                                 tgate, 
+                                 t_0, 
+                                 tau, 
+                                 r_fast,  
+                                 dx, 
+                                 k_dcr_low, 
+                                 k_dcr_hi)
+            
+
 
             
         return y_model