diff --git a/elec/readout.py b/elec/readout.py
index cf07c0454c4d0a22f61d7d80e6eea7849e3e2f76..1085dc4cf9d8e50fc63929d13903bf01e7d0c955 100644
--- a/elec/readout.py
+++ b/elec/readout.py
@@ -21,6 +21,8 @@ ROOT.gROOT.SetBatch(True)
 from util.math import signal_convolution
 from util.output import output
 
+TIME_BIN_WIDTH = 50e-12 # need to be consistent with the bin width in CalCurrent
+
 class Amplifier:
     """Get current after amplifier with convolution, for each reading electrode
 
@@ -123,7 +125,7 @@ class Amplifier:
         elif self.amplifier_parameters['ele_name'] == 'Broad_Band':
             """ Broad Bandwidth Amplifier (Charge Sensitive Amplifier) parameter initialization"""
 
-            mode = "scope"
+            mode = "RC"
 
             def pulse_responce_Broad_Band(t):
                 if t < 0: # step function
@@ -154,12 +156,13 @@ class Amplifier:
                 """ Broad Bandwidth Amplifier (Charge Sensitive Amplifier) scale function"""
 
                 if mode == "scope":
-                    R_in = 50
-                    return R_in
+                    Broad_Band_Gain = self.amplifier_parameters['Broad_Band_Gain']
+                    return Broad_Band_Gain
 
                 elif mode == "RC":
-                    Broad_Band_Gain = self.amplifier_parameters['Broad_Band_Gain'] # kOhm ?
-                    return Broad_Band_Gain * 1e3
+                    Broad_Band_Gain = self.amplifier_parameters['Broad_Band_Gain']
+                    R_in = 50
+                    return Broad_Band_Gain * R_in
                 
             self.pulse_responce_list = [pulse_responce_Broad_Band]
             self.scale = scale_Broad_Band
@@ -202,7 +205,7 @@ class Amplifier:
     def set_scope_output(self, currents: list[ROOT.TH1F]):
         for i in range(self.read_ele_num):
             cu = currents[i]
-            input_Q_tot = cu.Integral()
+            input_Q_tot = cu.Integral()*TIME_BIN_WIDTH
             output_Q_max = self.amplified_current[i].GetMaximum()
             self.amplified_current[i].Scale(self.scale(output_Q_max, input_Q_tot))
 
diff --git a/gen_signal/build_device.py b/gen_signal/build_device.py
index 28285211f315c758eb160880e52ca2d0c1bd2241..8f190362fd059bb924bd3f5ea30d144fdc89fec4 100644
--- a/gen_signal/build_device.py
+++ b/gen_signal/build_device.py
@@ -31,7 +31,7 @@ class Detector:
         self.l_y = self.device_dict['ly']  
         self.l_z = self.device_dict['lz'] 
         
-        self.voltage = self.device_dict['bias']['voltage'] 
+        self.voltage = float(self.device_dict['bias']['voltage'])
         self.temperature = self.device_dict['temperature']
         self.material = self.device_dict['material']
 
diff --git a/gen_signal/draw_save.py b/gen_signal/draw_save.py
index dcd84e580f41738445520c7d3e3dcd522fc5c04e..cab118e3bde26c4264e7918fb8c23583828e53b0 100644
--- a/gen_signal/draw_save.py
+++ b/gen_signal/draw_save.py
@@ -14,6 +14,8 @@ ROOT.gROOT.SetBatch(True)
 
 from util.output import output
 
+TIME_BIN_WIDTH = 50e-12 # need to be consistent with the bin width in CalCurrent
+
 def energy_deposition(my_g4v):
     """
     @description:
@@ -346,13 +348,13 @@ def save_signal_time_resolution(my_d,batch_number,sum_cu,ele_current,my_g4p,star
 
     output_path = output(__file__, my_d.det_name, 'batch')
     for k in range(ele_current.read_ele_num):
-        charge = sum_cu[k].Integral()
+        charge = sum_cu[k].Integral()*TIME_BIN_WIDTH
         charge_str = "_charge=%.2f_"%(charge*1e15)  #fc
         e_dep = "dep=%.5f_"%(my_g4p.edep_devices[batch_number-start_n]) #mv
         output_file = output_path + "/t_" +str(batch_number)+charge_str+e_dep+"events.csv"
 
         f1 = open(output_file,"w")
-        f1.write("time[ns], Amplitude [mV] \n")
+        f1.write("time [ns], Amplitude [mV] \n")
         for i in range(ele_current.amplified_current[k].GetNbinsX()):
             f1.write("%s,%s \n"%(i*ele_current.amplified_current[k].GetBinWidth(0),
                                     ele_current.amplified_current[k][i]))
diff --git a/timeres/add_noise.py b/timeres/add_noise.py
index 72f2235b3eefc39ec8056529208fe6ea6a9676a7..b594633bf22d8b0ee5ceaa2719a641106bd46534 100644
--- a/timeres/add_noise.py
+++ b/timeres/add_noise.py
@@ -58,7 +58,7 @@ h_noise_height.clear()
 
 # The judge parameter configuration and read data
 class NoiseSetting:
-    def __init__(self):
+    def __init__(self, ele_name):
         """
         @description: The judge parameter configuration
          
@@ -70,7 +70,6 @@ class NoiseSetting:
         @Modify:
             2021/08/31
         """
-        self.thre_vth=18 # mv
         self.CFD=0.5
         self.effective_event_number=0
         self.CFD_time=[]
@@ -78,6 +77,12 @@ class NoiseSetting:
 
         self.max_voltage=[]
         self.current_integral=[]
+
+        self.ele_name=ele_name
+        ele_json = "./setting/electronics/" + self.ele_name + ".json"
+        with open(ele_json) as f:
+            amplifier_parameters = json.load(f)
+            self.thre_vth=amplifier_parameters["threshold"] # mv
         
     def create_outpath(self,path):
         """
@@ -349,9 +354,13 @@ def judge_threshold(addNoise,rset,tree_class):
     @Modify:
         2021/08/31
     """
-    #if (addNoise.ampl_paras[max_height]>rset.thre_vth and addNoise.ampl_paras[max_time]<80):
-    get_CFD_time(addNoise,addNoise.ampl_paras,rset)
-    tree_class.fill_ampl(addNoise,rset,"max_nps_height","max_pulse_time")
+    if (addNoise.ampl_paras["max_s_height"]>rset.thre_vth and addNoise.ampl_paras["max_pulse_time"]<80):
+        # temp set
+        get_CFD_time(addNoise,addNoise.ampl_paras,rset)
+        tree_class.fill_ampl(addNoise,rset,"max_nps_height","max_pulse_time")
+        return True
+    else:
+        return False
 
 def get_CFD_time(addNoise,Ampl_paras,rset):
     """
@@ -531,7 +540,8 @@ def draw_2D_CFD_time(CFD_time,out_put,model):
             if CFD_time[i]< 9000:	
                 histo.Fill(CFD_time[i])
     else:
-        step = 0.05
+        #step = 0.05
+        step = 0.025
         x2_min = 4.8
         x2_max = 5.6
         n2_bin = int((x2_max-x2_min)/step)
@@ -769,7 +779,7 @@ def save_gain_efficiency(input_file, max_voltage, error_max_voltage, current_int
                 + str(current_integral) + ","+ str(error_current_integral) + "\n")
                 
 # Loop and add noise in the raser
-def loop_addNoise(input_file,rset,tree_class,ele_name):
+def loop_add_noise(input_file,rset,tree_class,ele_name):
     for root,dirs,files in os.walk(input_file):
         for file in files:
             if 'strip' in input_file:
@@ -784,12 +794,12 @@ def loop_addNoise(input_file,rset,tree_class,ele_name):
                         rset.write_list(path,addNoise.list_c)
                         if len(addNoise.list_c)>5:
                             addNoise.add_n(addNoise.list_c)
-                            judge_threshold(addNoise,rset,tree_class) 
-                            tree_class.fill_vector(rset,addNoise) 
-                            #if addNoise.CFD_time_r>0:      
-                            tree_class.tree_out.Fill()
-                            rset.effective_event_number += 1
-                            tree_class.init_parameter()
+                            if judge_threshold(addNoise,rset,tree_class):
+                                tree_class.fill_vector(rset,addNoise) 
+                                #if addNoise.CFD_time_r>0:      
+                                tree_class.tree_out.Fill()
+                                rset.effective_event_number += 1
+                                tree_class.init_parameter()
                     else:
                         break
             else:
@@ -804,12 +814,12 @@ def loop_addNoise(input_file,rset,tree_class,ele_name):
                         rset.write_list(path,addNoise.list_c)
                         if len(addNoise.list_c)>5:
                             addNoise.add_n(addNoise.list_c)
-                            judge_threshold(addNoise,rset,tree_class) 
-                            tree_class.fill_vector(rset,addNoise) 
-                            #if addNoise.CFD_time_r>0:      
-                            tree_class.tree_out.Fill()
-                            rset.effective_event_number += 1
-                            tree_class.init_parameter()
+                            if judge_threshold(addNoise,rset,tree_class):
+                                tree_class.fill_vector(rset,addNoise) 
+                                #if addNoise.CFD_time_r>0:      
+                                tree_class.tree_out.Fill()
+                                rset.effective_event_number += 1
+                                tree_class.init_parameter()
                     else:
                         break
     efficiency = rset.effective_event_number / Events[0]
@@ -823,7 +833,7 @@ def main(kwargs):
         ele_name = device_dict['amplifier']
         det_model = device_dict['det_model']
     # Outfilename and init_parameter
-    rset = NoiseSetting()
+    rset = NoiseSetting(ele_name)
     output_path = output(__file__, det_name)
     input_file = "output/gen_signal/" + det_name + "/batch"
     #input_file = "output/tct/" + det_name + "/top_TCT"
@@ -832,7 +842,7 @@ def main(kwargs):
     tree_class=RootFile()
     tree_class.root_define()
     # Add noise
-    efficiency = loop_addNoise(input_file,rset,tree_class,ele_name)
+    efficiency = loop_add_noise(input_file,rset,tree_class,ele_name)
     # Draw time resolution for constant CFD
     sigma, error=draw_2D_CFD_time(rset.CFD_time,output_path,'time_resolution')
     sigma_jit, error_jit=draw_2D_CFD_time(rset.CFD_jitter,output_path,'jitter')