diff --git a/docs/struct.rst b/docs/struct.rst
index 59053653bea39a1cb48de7235bf6dd1567f490c8..4f323c9c54cf5c3b44ceb45da5970a788178baa3 100644
--- a/docs/struct.rst
+++ b/docs/struct.rst
@@ -20,23 +20,22 @@ A quick overview of the relation between the different structural elements can b
 
 Segments
 --------
-A segment is the collection of data points that forms a single waveform. For example, the set of pulses one would apply on one the gates for the sample to perform the readout.
-Note that a segment only contains the information for one channel.
+A segment are a set of voltages in function of time that make up a single waveform. For example, the voltages you need to appy do your readout on one of the gates.
 
-There are two types of segments:
+There are three types of segments:
    - :ref:`segments_base<segment_base>` : these are segments that should be used for generating block pulses and ramps.
    - segments_IQ : these are segments that are used to work with IQ signals of vector MW sources.
-Both types can be used interchangeably. More details can be found in the later chapters (or if you feel really courageous in the source code).
+   - segment_marker : this are segments that are used to represent markers (on/off signals).
 
 
 .. _seg_con:
 
 Segment containers
 ------------------
-A segment container, as the name already gives away, is a container of channels. For example, this could be the collection of all the channels that are involved in your readout pulse. This object is generated automatically, so no need for you to specify channels each time.
+A segment container, as the name already gives away, is a container of channels. For example, this could be all the output channels of your AWG. This object is generated automatically, so no need for you to specify channels each time.
 
 There are some rules for segment containers though, 
-   - All segments in a segment container must have the same length when rendered
+   - All segments in a segment container must have the same length when rendered. This condition is automatically fullfilled.
    - A segment container contains by default all the AWG channels you have defined in your setup
    - All elements in the segment container must contain times that are :math:`\geq 0`.
 
diff --git a/docs/tutorials/init_lib.rst b/docs/tutorials/init_lib.rst
index e52366a87bda0188fe3dc4057f779abd82bb45f9..4b1f8767794ce2f85dac63d2c59aeab61db79ba4 100644
--- a/docs/tutorials/init_lib.rst
+++ b/docs/tutorials/init_lib.rst
@@ -61,10 +61,19 @@ That was it, let's now add some AWG's and define the channel names. In this exam
 		'B1':('AWG1', 3), 'P2':('AWG1', 4),'B2':('AWG2', 1), 
 		'MW_gate_I':('AWG2', 2), 'MW_gate_Q':('AWG2', 3),	
 		'MW_marker':('AWG2', 4)})
-		
-	pulse.define_channels(awg_channels_to_physical_locations)
+	
+	pulse.define_channel('B0','AWG1', 1)
+	pulse.define_channel('P1','AWG1', 2)
+	pulse.define_channel('B1','AWG1', 3)
+	pulse.define_channel('P2','AWG1', 4)
+	pulse.define_channel('B2','AWG2', 1)
+	pulse.define_channel('MW_gate_I','AWG2', 2)
+	pulse.define_channel('MW_gate_Q','AWG2', 3)
+	# define marker here!
+	pulse.define_marker('MW_marker','AWG2', 4)
+
 
-Note, when not using the Keysight back-end, you can just call ``p.add_awgs('AWG1', None)``. You will have to feed then the library in another uploaded (e.g. qtt virtual AWG).
+Note, when not using the Keysight back-end, you can just call ``p.add_awgs('AWG1', None)``. You will have to feed then the library in another uploader (e.g. qtt virtual AWG).
 
 Step 2 : defining the virtual gates
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -72,24 +81,23 @@ Step 2 : defining the virtual gates
 This is a quite straightforward process, just define the channels for the virtual gate and their corresponding real channels in a dictionary.
 
 .. code-block:: python
+	
+	# generate a virtual gate set. You can later on change this object if you want to update the virtual gatre matrix / add more gates.
+	# note that you can make multiple sets if you like (e.g. you could also define one with detuning while keeping this ones).  
+	virtual_gate_set_1 = virtual_gates_constructor(pulse)
+	virtual_gate_set_1.add_real_gates('B0', 'B1', 'B2', 'P1', 'P2')
+	virtual_gate_set_1.add_virtual_gates('vB0', 'vB1', 'vB2', 'vP1', 'vP2')
+	virtual_gate_set_1.add_virtual_gate_matrix(np.eye(5))
 
-	awg_virtual_gates = {
-		'virtual_gates_names_virt' :
-			['vB0', 'vB1', 'vB2', 'vP1', 'vP2'],
-		'virtual_gates_names_real' :
-			['B0', 'B1', 'B2', 'P1', 'P2'],
-		'virtual_gate_matrix' : np.eye(5)
-	}
-	pulse.add_virtual_gates(awg_virtual_gates)
 In this case we just constructed a 1 on 1 map of the virtual gates of real gates (diagonal virtual gate matrix). 
 
 The matrix can be updated at any time with:
 
 .. code-block:: python
+	
+	virtual_gate_set_1.add_virtual_gate_matrix(my_matrix)
 
-	pulse.update_virtual_gate_matrix(my_matrix)
-
-When the matrix is updated, it will automatically also update in all segments that have been created before.
+When the matrix is updated, you will have to regenerate the segment containers that are currently in memory.
 An example how to practically work with virtual gates can be found here [TODO].
 
 Step 3 : defining IQ channels
@@ -97,28 +105,32 @@ Step 3 : defining IQ channels
 
 If you are new to IQ modulation, it is recommended to read the introduction on IQ modulation, here [TODO].
 
-When operating a vector source, you usually have to connect (usually) 3 coax cables:
+When operating a vector source, you usually have to connect (usually) 3/5 coax cables:
 
-   - I channel
-   - Q channel
+   - I channel (and optionally its image, usually named I+ and I-)
+   - Q channel (and optionally its image, usually named Q+ and Q-)
    - marker
-   - ``[opt]`` if you want to go wide-band, you might also need to provide the negative image of the I/Q channel (currently not implemented .., though easy todo).
 
 Most of the time, you will want to make a virtual channel per qubit, as it allows you to keep easy track of the phase of the qubit. An example of this can be found in the mircowave tutorial.
 
 .. code-block:: python
 
-	awg_IQ_channels = {
-			'vIQ_channels' : ['qubit_1','qubit_2'],
-			'rIQ_channels' : [['MW_gate_I','MW_gate_Q'],['MW_gate_I','MW_gate_Q']],
-			'LO_freq' :[MW_source.frequency, 1e9]
-			# do not put the brackets for the MW source
-			# e.g. MW_source.frequency (this should be a qcodes parameter)
-			}
-	
-	pulse.add_IQ_virt_channels(awg_IQ_channels)
+	# make virtual channels for IQ usage (also here, make one one of these object per MW source)
+	IQ_chan_set_1 = IQ_channel_constructor(pulse)
+	# set right association of the real channels with I/Q output (note you can define as many as you likes, also channels copies are allowed).
+	IQ_chan_set_1.add_IQ_chan("MW_gate_I", IQ_comp = "I", image = "+")
+	IQ_chan_set_1.add_IQ_chan("MW_gate_Q", IQ_comp = "Q", image = "+")
+	IQ_chan_set_1.add_marker("MW_marker", pre_delay = -15, post_delay = 15)
+
+	# set LO frequency of the MW source. 
+	# This can be changed troughout the experiments, but only newly created segments will hold the latest value.
+	# alternatively you can also enter a qcodes paramter for automated frequency setting.
+	IQ_chan_set_1.set_LO(1e9)
+
+	# name virtual channels to be used.
+	IQ_chan_set_1.add_virtual_IQ_channel("MW_qubit_1")
+	IQ_chan_set_1.add_virtual_IQ_channel("MW_qubit_2")
 
-At the moment markers are not added automatically, this is something that will be implemented in the next release of this library.
 
 .. _pulse_lib_chan_delay:
 
@@ -135,16 +147,14 @@ Or translated into python code,
 
 .. code-block:: python
 
-	pulse.add_channel_delay({
-		'B0': 20, 
-		'P1': 20,
-		'B1': 20, 
-		'P2': 20,
-		'B2': 20, 
-		'MW_gate_I': 70, 
-		'MW_gate_Q': 70,	
-		'MW_marker': 5
-	})
+	pulse.add_channel_delay('B0', 20)
+	pulse.add_channel_delay('P1', 20)
+	pulse.add_channel_delay('B1', 20)
+	pulse.add_channel_delay('P2', 20)
+	pulse.add_channel_delay('B2', 20)
+	pulse.add_channel_delay('MW_gate_I', 70)
+	pulse.add_channel_delay('MW_gate_Q', 70)
+	pulse.add_channel_delay('MW_marker', 5)
 
 Note, also negative delays are allowed. All units are in ``ns`` by default.
 
@@ -159,9 +169,10 @@ The range indicates the maximal, minimal voltage that can be provided to make su
 
 .. code-block:: python
 
-	pulse.add_channel_compenstation_limits({
-		'B0': (-500,500),'B1': (-500,500),'B2': (-500,500),
-		'P1': (-500,500),'P2': (-500,500),
-		})
+	pulse.add_channel_compenstation_limit('B0', (-1000, 500))
+	pulse.add_channel_compenstation_limit('B1', (-1000, 500))
+	pulse.add_channel_compenstation_limit('B2', (-1000, 500))
+	pulse.add_channel_compenstation_limit('P1', (-1000, 500))
+	pulse.add_channel_compenstation_limit('P2', (-1000, 500))
 
 In this case, no limits were set for the markers and the IQ channels, as these signals go in a 50 ohm matched line (no high pass filtering to compensate for).
\ No newline at end of file
diff --git a/pulse_lib.egg-info/SOURCES.txt b/pulse_lib.egg-info/SOURCES.txt
index 332d8aa62271f259550e85a77920dbb2d57561b8..83f6ce784ae3bacc0cda36d418c5f0e03aa5fade 100644
--- a/pulse_lib.egg-info/SOURCES.txt
+++ b/pulse_lib.egg-info/SOURCES.txt
@@ -17,7 +17,6 @@ pulse_lib/keysight/uploader_core/uploader.cpp
 pulse_lib/segments/__init__.py
 pulse_lib/segments/segment_IQ.py
 pulse_lib/segments/segment_base.py
-pulse_lib/segments/segment_base_markr_pulse.py
 pulse_lib/segments/segment_container.py
 pulse_lib/segments/segment_markers.py
 pulse_lib/segments/segment_pulse.py
diff --git a/pulse_lib/base_pulse.py b/pulse_lib/base_pulse.py
index 50a4712f9414d12fa899cb4049047303d28cb03b..7f9bf368be8c12fe841dea326cbbd782c14c9480 100644
--- a/pulse_lib/base_pulse.py
+++ b/pulse_lib/base_pulse.py
@@ -49,7 +49,8 @@ class pulselib:
 			awg (object) : qcodes object of the concerning AWG
 		'''
 		self.awg_devices[name] =awg
-		self.cpp_uploader.add_awg_module(name, awg)
+		if awg is not None:
+			self.cpp_uploader.add_awg_module(name, awg)
 
 	def define_channel(self, channel_name, AWG_name, channel_number):
 		'''
diff --git a/pulse_lib/examples/charge_stability_diagram.py b/pulse_lib/examples/charge_stability_diagram.py
index e04fa6fd470022468fd273bcb35e882e05f8c181..c8ed3e677e862a779ab065807f43fac51d5cd9ab 100644
--- a/pulse_lib/examples/charge_stability_diagram.py
+++ b/pulse_lib/examples/charge_stability_diagram.py
@@ -1,9 +1,10 @@
 from pulse_lib.base_pulse import pulselib
 from example_init import return_pulse_lib
-from loading_HVI_code_fast import load_HVI, set_and_compile_HVI, excute_HVI
+# from loading_HVI_code_fast import load_HVI, set_and_compile_HVI, excute_HVI
 
 import numpy as np
 
+import matplotlib.pyplot as plt
 
 def construct_ct(gate1, gate2, marker, t_step, vpp, n_pt):
 	"""
@@ -18,7 +19,7 @@ def construct_ct(gate1, gate2, marker, t_step, vpp, n_pt):
 		n_pt (int) : number of point along x/y (both are assumed to have the same number of points.)
 	"""
 	charge_st  = pulse.mk_segment()
-
+	
 	for  voltage in np.linspace(-vpp,vpp,n_pt):
 	    getattr(charge_st, gate1).add_block(0, t_step, voltage)
 	    getattr(charge_st, gate1).reset_time()
@@ -34,12 +35,17 @@ def construct_ct(gate1, gate2, marker, t_step, vpp, n_pt):
 	getattr(charge_st,marker).repeat(n_pt)
 	getattr(charge_st,marker).repeat(n_pt)
 
+	getattr(charge_st,gate1).plot_segment(sample_rate = 1e6)
+	getattr(charge_st,gate2).plot_segment(sample_rate = 1e6)
+	getattr(charge_st,marker).plot_segment(sample_rate = 1e7)
+	plt.show()
+
 	return charge_st
 
 if __name__ == '__main__':
 	pulse, _ = return_pulse_lib()
 	pulse.cpp_uploader.resegment_memory()
-	sequence = [construct_ct("A6", "A2", "A4",1000 ,1000, 30)]
+	sequence = [construct_ct("P4", "P5", "M2",1000 ,1000, 200)]
 
 	my_seq = pulse.mk_sequence(sequence)
 
diff --git a/pulse_lib/examples/example_init.py b/pulse_lib/examples/example_init.py
index 5a1c746bc0279953aff6f7fa6356ea3e3968c36b..64c2da0694a385ed6d9a9ae93a225a3c6cd67960 100644
--- a/pulse_lib/examples/example_init.py
+++ b/pulse_lib/examples/example_init.py
@@ -1,23 +1,19 @@
+
 from pulse_lib.base_pulse import pulselib
 from pulse_lib.virtual_channel_constructors import IQ_channel_constructor, virtual_gates_constructor
 
-import qcodes.instrument_drivers.Keysight.SD_common.SD_AWG as keysight_awg
-import qcodes.instrument_drivers.Keysight.SD_common.SD_DIG as keysight_dig
+# import qcodes.instrument_drivers.Keysight.SD_common.SD_AWG as keysight_awg
+# import qcodes.instrument_drivers.Keysight.SD_common.SD_DIG as keysight_dig
 import numpy as np
 
 def return_pulse_lib():
 	pulse = pulselib()
 
-	AWG1 = keysight_awg.SD_AWG('my_awg1', chassis = 0, slot= 2, channels = 4, triggers= 8)
-	AWG2 = keysight_awg.SD_AWG('my_awg2', chassis = 0, slot= 3, channels = 4, triggers= 8)
-	AWG3 = keysight_awg.SD_AWG('my_awg3', chassis = 0, slot= 4, channels = 4, triggers= 8)
-	AWG4 = keysight_awg.SD_AWG('my_awg4', chassis = 0, slot= 5, channels = 4, triggers= 8)
-
 	# add to pulse_lib
-	pulse.add_awgs('AWG1',AWG1)
-	pulse.add_awgs('AWG2',AWG2)
-	pulse.add_awgs('AWG3',AWG3)
-	pulse.add_awgs('AWG4',AWG4)
+	pulse.add_awgs('AWG1',None)
+	pulse.add_awgs('AWG2',None)
+	pulse.add_awgs('AWG3',None)
+	pulse.add_awgs('AWG4',None)
 
 	# define channels
 	pulse.define_channel('B3','AWG1', 1)
diff --git a/pulse_lib/examples/psb_example.py b/pulse_lib/examples/psb_example.py
index 9602ee1dba213ed0a68b3b67fd9c421e549ec022..82c4ded727026a799705a7fa51add64b176ca0e5 100644
--- a/pulse_lib/examples/psb_example.py
+++ b/pulse_lib/examples/psb_example.py
@@ -34,7 +34,7 @@ P5_Point_3 = lp.linspace(P2[1],P3[1],100, axis=1, unit = "mV", name = "axis 2 sw
 
 import time
 t1 = time.time()
-PSB_pulse.vP4.add_block(0,10000, P0[0])
+PSB_pulse.vP4.add_block(0,10000, P0[0])b 
 PSB_pulse.vP5.add_block(0,10000, P0[1])
 PSB_pulse.reset_time()
 PSB_pulse.vP4.add_block(0,10000, P1[0])
diff --git a/pulse_lib/segments/data_classes/data_pulse.py b/pulse_lib/segments/data_classes/data_pulse.py
index 5d7e21195a94233eef4f003fde957e2184e67403..ea99f2ef48988bbc521a7e0540d903d5bc398fe5 100644
--- a/pulse_lib/segments/data_classes/data_pulse.py
+++ b/pulse_lib/segments/data_classes/data_pulse.py
@@ -89,11 +89,30 @@ class pulse_data(parent_data):
             self.slice_time(0, time)
 
         other._shift_all_time_MW(time)
-        new_MW_pulse_data =  self.MW_pulse_data +  other_time_shifted.MW_pulse_data
-        # this shuold be shifted back -- TODO ... 
-
+        new_MW_pulse_data =  self.MW_pulse_data +  copy.copy(other.MW_pulse_data)
+        other._shift_all_time_MW(-time)
         self.baseband_pulse_data.append(other.baseband_pulse_data)
         self.MW_pulse_data = new_MW_pulse_data
+    
+    def repeat(self, n):
+        """
+        repeat n times
+        Args
+            n (int) : number of times to repeat
+        """
+        time = self.total_time
+        new_MW_pulse_data =  copy.copy(self.MW_pulse_data)
+
+        for i in range(n):
+            self._shift_all_time_MW(time)
+            shifted_MW = copy.deepcopy(self.MW_pulse_data)
+            new_MW_pulse_data +=  shifted_MW
+
+        self._shift_all_time_MW(-n*time)
+        self.MW_pulse_data = new_MW_pulse_data
+
+        self.baseband_pulse_data.repeat(n)
+
 
     def slice_time(self, start, end):
         '''
@@ -222,8 +241,6 @@ class pulse_data(parent_data):
         Args:
             time_shift (double) : shift the time
         '''
-        if time_shift <0 :
-            raise ValueError("when shifting time, you cannot make negative times. Apply a positive shift.")
 
         for IQ_data_single_object in self.MW_pulse_data:
             IQ_data_single_object.start += time_shift
@@ -299,9 +316,8 @@ class pulse_data(parent_data):
         if type(other) is pulse_data:
             raise NotImplemented
         elif type(other) == int or type(other) == float or type(other) == np.float64:
-            new_pulse = copy.copy(self.baseband_pulse_data)
-            new_pulse[:,1] *= other
-            new_data.baseband_pulse_data = new_pulse
+            new_data.baseband_pulse_data = copy.copy(self.baseband_pulse_data)
+            new_data.baseband_pulse_data *= other
 
             for IQ_data_single_object in self.MW_pulse_data:
                 IQ_data_single_object_cpy = copy.copy(IQ_data_single_object)
@@ -324,12 +340,12 @@ class pulse_data(parent_data):
         sample_time_step = 1/sample_rate
                 
         t_tot = self.total_time
+        print(t_tot)
 
         # get number of points that need to be rendered
         t_tot_pt = get_effective_point_number(t_tot, sample_time_step) + 1
         pre_delay_pt = - get_effective_point_number(pre_delay, sample_time_step)
         post_delay_pt = get_effective_point_number(post_delay, sample_time_step)
-
         my_sequence = np.zeros([int(t_tot_pt + pre_delay_pt + post_delay_pt)])
         # start rendering pulse data
         
@@ -423,7 +439,9 @@ if __name__ == '__main__':
     data.add_MW_data(IQ_data_object2)
     data.reset_time(data.total_time)
     data.add_pulse_data(base_pulse_element(0,140, 1 , 1))
+    data.add_pulse_data(base_pulse_element(200,280, 2 , 1))
 
+    data.repeat(2)
     rendering_data = data.render(0,0,1e9)
     t = np.linspace(0, data.total_time, len(rendering_data))
     plt.plot(t, rendering_data)
diff --git a/pulse_lib/segments/data_classes/data_pulse_core.cpp b/pulse_lib/segments/data_classes/data_pulse_core.cpp
index cc67754ef9e8c7d9b093419752aa9b4b59c7c166..3c9c209f3afb416493868f5b58f333ec19c06afc 100644
--- a/pulse_lib/segments/data_classes/data_pulse_core.cpp
+++ b/pulse_lib/segments/data_classes/data_pulse_core.cpp
@@ -2410,8 +2410,8 @@ int __pyx_module_is_main_pulse_lib__segments__data_classes__data_pulse_core = 0;
 
 /* Implementation of 'pulse_lib.segments.data_classes.data_pulse_core' */
 static PyObject *__pyx_builtin_TypeError;
-static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin_ValueError;
 static PyObject *__pyx_builtin_RuntimeError;
 static PyObject *__pyx_builtin_ImportError;
 static PyObject *__pyx_builtin_KeyError;
@@ -2495,6 +2495,7 @@ static const char __pyx_k_index_start[] = "index_start";
 static const char __pyx_k_RuntimeError[] = "RuntimeError";
 static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
 static const char __pyx_k_stringsource[] = "stringsource";
+static const char __pyx_k_total_time_2[] = "total_time";
 static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer";
 static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
 static const char __pyx_k_return_inverse[] = "return_inverse";
@@ -2673,6 +2674,7 @@ static PyObject *__pyx_kp_s_stringsource;
 static PyObject *__pyx_n_s_struct;
 static PyObject *__pyx_n_s_test;
 static PyObject *__pyx_n_s_total_time;
+static PyObject *__pyx_n_s_total_time_2;
 static PyObject *__pyx_kp_s_unable_to_allocate_array_data;
 static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
 static PyObject *__pyx_n_s_unique;
@@ -2688,12 +2690,13 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
 static int __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence___init__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_2add_pulse(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_base_pulse_element *__pyx_v_pulse); /* proto */
 static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_4append(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6shift_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_time); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_8__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_12__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_14slice_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_start, double __pyx_v_stop); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_16__copy__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6repeat(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_8shift_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_time); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_12__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_14__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_16slice_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_start, double __pyx_v_stop); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_18__copy__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10pulse_data___get__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10total_time___get__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_5v_max___get__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
@@ -2705,8 +2708,8 @@ static int __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26puls
 static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9re_render___get__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
 static int __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9re_render_2__set__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9re_render_4__del__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_18__reduce_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_20__setstate_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_20__reduce_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_22__setstate_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
 static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core___pyx_unpickle_pulse_data_single_sequence(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
 static int __pyx_pf_5numpy_7ndarray___getbuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
 static void __pyx_pf_5numpy_7ndarray_2__releasebuffer__(PyArrayObject *__pyx_v_self, Py_buffer *__pyx_v_info); /* proto */
@@ -3424,22 +3427,22 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  * 		append other pulse object to this one
  * 		"""
  * 		time_shift = self._total_time             # <<<<<<<<<<<<<<
- * 		other.shift_time(time_shift)
  * 
+ * 		other.shift_time(time_shift)
  */
   __pyx_t_1 = __pyx_v_self->_total_time;
   __pyx_v_time_shift = __pyx_t_1;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":67
- * 		"""
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":68
  * 		time_shift = self._total_time
- * 		other.shift_time(time_shift)             # <<<<<<<<<<<<<<
  * 
+ * 		other.shift_time(time_shift)             # <<<<<<<<<<<<<<
  * 		data = self.__add__(other)
+ * 		other.shift_time(-time_shift)
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_shift_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 67, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_shift_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_time_shift); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 67, __pyx_L1_error)
+  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_time_shift); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -3454,17 +3457,17 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 67, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":69
- * 		other.shift_time(time_shift)
  * 
+ * 		other.shift_time(time_shift)
  * 		data = self.__add__(other)             # <<<<<<<<<<<<<<
+ * 		other.shift_time(-time_shift)
  * 
- * 		self.localdata =  data.localdata
  */
   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_add); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -3486,20 +3489,49 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_v_data = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":71
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":70
+ * 		other.shift_time(time_shift)
  * 		data = self.__add__(other)
+ * 		other.shift_time(-time_shift)             # <<<<<<<<<<<<<<
+ * 
+ * 		self.localdata =  data.localdata
+ */
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_shift_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyFloat_FromDouble((-__pyx_v_time_shift)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_5);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_3, function);
+    }
+  }
+  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":72
+ * 		other.shift_time(-time_shift)
  * 
  * 		self.localdata =  data.localdata             # <<<<<<<<<<<<<<
  * 		self.re_render = True
  * 		self._total_time = data._total_time
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s_localdata); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 71, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s_localdata); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 72, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_6 = __pyx_convert_vector_from_py___pyx_t_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_info(__pyx_t_2); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 71, __pyx_L1_error)
+  __pyx_t_6 = __pyx_convert_vector_from_py___pyx_t_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_info(__pyx_t_2); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 72, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_self->localdata = __pyx_t_6;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":72
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":73
  * 
  * 		self.localdata =  data.localdata
  * 		self.re_render = True             # <<<<<<<<<<<<<<
@@ -3512,16 +3544,16 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->re_render));
   __pyx_v_self->re_render = ((PyBoolObject *)Py_True);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":73
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":74
  * 		self.localdata =  data.localdata
  * 		self.re_render = True
  * 		self._total_time = data._total_time             # <<<<<<<<<<<<<<
  * 
- * 	def shift_time(self, double time):
+ * 	def repeat(self, n):
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s_total_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 73, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_data, __pyx_n_s_total_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 74, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 73, __pyx_L1_error)
+  __pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 74, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_self->_total_time = __pyx_t_1;
 
@@ -3550,23 +3582,243 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":75
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":76
+ * 		self._total_time = data._total_time
+ * 
+ * 	def repeat(self, n):             # <<<<<<<<<<<<<<
+ * 		"""
+ * 		repeat n times the current segment.
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_7repeat(PyObject *__pyx_v_self, PyObject *__pyx_v_n); /*proto*/
+static char __pyx_doc_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6repeat[] = "\n\t\trepeat n times the current segment.\n\t\tArgs : \n\t\t\tn (int) : number of times to repeat the current segment.\n\t\t";
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_7repeat(PyObject *__pyx_v_self, PyObject *__pyx_v_n) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("repeat (wrapper)", 0);
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6repeat(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self), ((PyObject *)__pyx_v_n));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6repeat(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v_n) {
+  struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_pulse_data = 0;
+  double __pyx_v_total_time;
+  CYTHON_UNUSED PyObject *__pyx_v_i = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  double __pyx_t_4;
+  Py_ssize_t __pyx_t_5;
+  PyObject *(*__pyx_t_6)(PyObject *);
+  PyObject *__pyx_t_7 = NULL;
+  PyObject *__pyx_t_8 = NULL;
+  __Pyx_RefNannySetupContext("repeat", 0);
+
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":83
+ * 		"""
+ * 
+ * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)             # <<<<<<<<<<<<<<
+ * 		cdef double total_time = self.total_time
+ * 
+ */
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_2 = NULL;
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
+    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
+    if (likely(__pyx_t_2)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_2);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_3, function);
+    }
+  }
+  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, ((PyObject *)__pyx_v_self)) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_self));
+  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence))))) __PYX_ERR(1, 83, __pyx_L1_error)
+  __pyx_v_pulse_data = ((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":84
+ * 
+ * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)
+ * 		cdef double total_time = self.total_time             # <<<<<<<<<<<<<<
+ * 
+ * 		for i in range(n):
+ */
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_total_time_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 84, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_4 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 84, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_v_total_time = __pyx_t_4;
+
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":86
+ * 		cdef double total_time = self.total_time
+ * 
+ * 		for i in range(n):             # <<<<<<<<<<<<<<
+ * 			pulse_data.shift_time(total_time)
+ * 			self._add_pulse(pulse_data)
+ */
+  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_range, __pyx_v_n); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
+    __pyx_t_3 = __pyx_t_1; __Pyx_INCREF(__pyx_t_3); __pyx_t_5 = 0;
+    __pyx_t_6 = NULL;
+  } else {
+    __pyx_t_5 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 86, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 86, __pyx_L1_error)
+  }
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  for (;;) {
+    if (likely(!__pyx_t_6)) {
+      if (likely(PyList_CheckExact(__pyx_t_3))) {
+        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 86, __pyx_L1_error)
+        #else
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 86, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        #endif
+      } else {
+        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 86, __pyx_L1_error)
+        #else
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_3, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 86, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_1);
+        #endif
+      }
+    } else {
+      __pyx_t_1 = __pyx_t_6(__pyx_t_3);
+      if (unlikely(!__pyx_t_1)) {
+        PyObject* exc_type = PyErr_Occurred();
+        if (exc_type) {
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(1, 86, __pyx_L1_error)
+        }
+        break;
+      }
+      __Pyx_GOTREF(__pyx_t_1);
+    }
+    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
+    __pyx_t_1 = 0;
+
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":87
+ * 
+ * 		for i in range(n):
+ * 			pulse_data.shift_time(total_time)             # <<<<<<<<<<<<<<
+ * 			self._add_pulse(pulse_data)
+ * 			self._total_time += total_time
+ */
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pulse_data), __pyx_n_s_shift_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 87, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_total_time); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 87, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_8 = NULL;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
+      if (likely(__pyx_t_8)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+        __Pyx_INCREF(__pyx_t_8);
+        __Pyx_INCREF(function);
+        __Pyx_DECREF_SET(__pyx_t_2, function);
+      }
+    }
+    __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7);
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 87, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":88
+ * 		for i in range(n):
+ * 			pulse_data.shift_time(total_time)
+ * 			self._add_pulse(pulse_data)             # <<<<<<<<<<<<<<
+ * 			self._total_time += total_time
+ * 
+ */
+    __pyx_t_1 = ((struct __pyx_vtabstruct_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self->__pyx_vtab)->_add_pulse(__pyx_v_self, __pyx_v_pulse_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 88, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":89
+ * 			pulse_data.shift_time(total_time)
+ * 			self._add_pulse(pulse_data)
+ * 			self._total_time += total_time             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+    __pyx_v_self->_total_time = (__pyx_v_self->_total_time + __pyx_v_total_time);
+
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":86
+ * 		cdef double total_time = self.total_time
+ * 
+ * 		for i in range(n):             # <<<<<<<<<<<<<<
+ * 			pulse_data.shift_time(total_time)
+ * 			self._add_pulse(pulse_data)
+ */
+  }
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":76
  * 		self._total_time = data._total_time
  * 
+ * 	def repeat(self, n):             # <<<<<<<<<<<<<<
+ * 		"""
+ * 		repeat n times the current segment.
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_AddTraceback("pulse_lib.segments.data_classes.data_pulse_core.pulse_data_single_sequence.repeat", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_pulse_data);
+  __Pyx_XDECREF(__pyx_v_i);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":92
+ * 
+ * 
  * 	def shift_time(self, double time):             # <<<<<<<<<<<<<<
  * 
  * 		cdef vector[pulse_info].iterator it_localdata = self.localdata.begin()
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_7shift_time(PyObject *__pyx_v_self, PyObject *__pyx_arg_time); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_7shift_time(PyObject *__pyx_v_self, PyObject *__pyx_arg_time) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9shift_time(PyObject *__pyx_v_self, PyObject *__pyx_arg_time); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9shift_time(PyObject *__pyx_v_self, PyObject *__pyx_arg_time) {
   double __pyx_v_time;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("shift_time (wrapper)", 0);
   assert(__pyx_arg_time); {
-    __pyx_v_time = __pyx_PyFloat_AsDouble(__pyx_arg_time); if (unlikely((__pyx_v_time == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 75, __pyx_L3_error)
+    __pyx_v_time = __pyx_PyFloat_AsDouble(__pyx_arg_time); if (unlikely((__pyx_v_time == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 92, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L3_error:;
@@ -3574,21 +3826,21 @@ static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6shift_time(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self), ((double)__pyx_v_time));
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_8shift_time(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self), ((double)__pyx_v_time));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6shift_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_time) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_8shift_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_time) {
   std::vector<__pyx_t_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_info> ::iterator __pyx_v_it_localdata;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("shift_time", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":77
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":94
  * 	def shift_time(self, double time):
  * 
  * 		cdef vector[pulse_info].iterator it_localdata = self.localdata.begin()             # <<<<<<<<<<<<<<
@@ -3597,7 +3849,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
   __pyx_v_it_localdata = __pyx_v_self->localdata.begin();
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":78
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":95
  * 
  * 		cdef vector[pulse_info].iterator it_localdata = self.localdata.begin()
  * 		while(it_localdata != self.localdata.end()):             # <<<<<<<<<<<<<<
@@ -3608,7 +3860,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __pyx_t_1 = ((__pyx_v_it_localdata != __pyx_v_self->localdata.end()) != 0);
     if (!__pyx_t_1) break;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":79
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":96
  * 		cdef vector[pulse_info].iterator it_localdata = self.localdata.begin()
  * 		while(it_localdata != self.localdata.end()):
  * 			dereference(it_localdata).start = dereference(it_localdata).start + time             # <<<<<<<<<<<<<<
@@ -3617,7 +3869,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
     (*__pyx_v_it_localdata).start = ((*__pyx_v_it_localdata).start + __pyx_v_time);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":80
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":97
  * 		while(it_localdata != self.localdata.end()):
  * 			dereference(it_localdata).start = dereference(it_localdata).start + time
  * 			dereference(it_localdata).stop = dereference(it_localdata).stop + time             # <<<<<<<<<<<<<<
@@ -3626,7 +3878,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
     (*__pyx_v_it_localdata).stop = ((*__pyx_v_it_localdata).stop + __pyx_v_time);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":81
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":98
  * 			dereference(it_localdata).start = dereference(it_localdata).start + time
  * 			dereference(it_localdata).stop = dereference(it_localdata).stop + time
  * 			postincrement(it_localdata)             # <<<<<<<<<<<<<<
@@ -3636,7 +3888,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     (void)((__pyx_v_it_localdata++));
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":83
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":100
  * 			postincrement(it_localdata)
  * 
  * 		self._total_time += time             # <<<<<<<<<<<<<<
@@ -3645,7 +3897,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
   __pyx_v_self->_total_time = (__pyx_v_self->_total_time + __pyx_v_time);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":84
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":101
  * 
  * 		self._total_time += time
  * 		self.re_render = True             # <<<<<<<<<<<<<<
@@ -3658,8 +3910,8 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->re_render));
   __pyx_v_self->re_render = ((PyBoolObject *)Py_True);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":75
- * 		self._total_time = data._total_time
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":92
+ * 
  * 
  * 	def shift_time(self, double time):             # <<<<<<<<<<<<<<
  * 
@@ -3673,7 +3925,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":86
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":103
  * 		self.re_render = True
  * 
  * 	def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -3682,19 +3934,19 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_11__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_11__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__add__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_8__add__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10__add__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_8__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_pulse_data = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -3706,16 +3958,16 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   double __pyx_t_6;
   __Pyx_RefNannySetupContext("__add__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":87
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":104
  * 
  * 	def __add__(self, other):
  * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)             # <<<<<<<<<<<<<<
  * 
  * 		if isinstance(other, pulse_data_single_sequence):
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 87, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 87, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -3730,14 +3982,14 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   }
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 87, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence))))) __PYX_ERR(1, 87, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence))))) __PYX_ERR(1, 104, __pyx_L1_error)
   __pyx_v_pulse_data = ((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":89
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":106
  * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)
  * 
  * 		if isinstance(other, pulse_data_single_sequence):             # <<<<<<<<<<<<<<
@@ -3748,19 +4000,19 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":90
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":107
  * 
  * 		if isinstance(other, pulse_data_single_sequence):
  * 			pulse_data._add_pulse(other)             # <<<<<<<<<<<<<<
  * 
  * 		elif isinstance(other, numbers.Number):
  */
-    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence))))) __PYX_ERR(1, 90, __pyx_L1_error)
-    __pyx_t_1 = ((struct __pyx_vtabstruct_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_pulse_data->__pyx_vtab)->_add_pulse(__pyx_v_pulse_data, ((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 90, __pyx_L1_error)
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence))))) __PYX_ERR(1, 107, __pyx_L1_error)
+    __pyx_t_1 = ((struct __pyx_vtabstruct_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_pulse_data->__pyx_vtab)->_add_pulse(__pyx_v_pulse_data, ((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 107, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":89
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":106
  * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)
  * 
  * 		if isinstance(other, pulse_data_single_sequence):             # <<<<<<<<<<<<<<
@@ -3770,31 +4022,31 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     goto __pyx_L3;
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":92
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":109
  * 			pulse_data._add_pulse(other)
  * 
  * 		elif isinstance(other, numbers.Number):             # <<<<<<<<<<<<<<
  * 			pulse_data.localdata.push_back(base_pulse_element(0,-1, other, other).my_pulse_info)
  * 		else:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numbers); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 92, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numbers); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Number); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 92, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Number); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 109, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_5 = PyObject_IsInstance(__pyx_v_other, __pyx_t_3); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 92, __pyx_L1_error)
+  __pyx_t_5 = PyObject_IsInstance(__pyx_v_other, __pyx_t_3); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 109, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_4 = (__pyx_t_5 != 0);
   if (likely(__pyx_t_4)) {
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":93
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":110
  * 
  * 		elif isinstance(other, numbers.Number):
  * 			pulse_data.localdata.push_back(base_pulse_element(0,-1, other, other).my_pulse_info)             # <<<<<<<<<<<<<<
  * 		else:
  * 			raise ValueError("adding up segment failed, data dype not recognize ({})".format(type(other)))
  */
-    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 93, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 110, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_int_0);
     __Pyx_GIVEREF(__pyx_int_0);
@@ -3808,18 +4060,18 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __Pyx_INCREF(__pyx_v_other);
     __Pyx_GIVEREF(__pyx_v_other);
     PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_other);
-    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_base_pulse_element), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 93, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_base_pulse_element), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 110, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     try {
       __pyx_v_pulse_data->localdata.push_back(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_base_pulse_element *)__pyx_t_1)->my_pulse_info);
     } catch(...) {
       __Pyx_CppExn2PyErr();
-      __PYX_ERR(1, 93, __pyx_L1_error)
+      __PYX_ERR(1, 110, __pyx_L1_error)
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":92
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":109
  * 			pulse_data._add_pulse(other)
  * 
  * 		elif isinstance(other, numbers.Number):             # <<<<<<<<<<<<<<
@@ -3829,7 +4081,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     goto __pyx_L3;
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":95
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":112
  * 			pulse_data.localdata.push_back(base_pulse_element(0,-1, other, other).my_pulse_info)
  * 		else:
  * 			raise ValueError("adding up segment failed, data dype not recognize ({})".format(type(other)))             # <<<<<<<<<<<<<<
@@ -3837,7 +4089,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  * 		if other._total_time > self._total_time:
  */
   /*else*/ {
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_adding_up_segment_failed_data_dy, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 95, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_adding_up_segment_failed_data_dy, __pyx_n_s_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 112, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_2 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
@@ -3851,50 +4103,50 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     }
     __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, ((PyObject *)Py_TYPE(__pyx_v_other))) : __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)Py_TYPE(__pyx_v_other)));
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 95, __pyx_L1_error)
+    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 112, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 95, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 112, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __PYX_ERR(1, 95, __pyx_L1_error)
+    __PYX_ERR(1, 112, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":97
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":114
  * 			raise ValueError("adding up segment failed, data dype not recognize ({})".format(type(other)))
  * 
  * 		if other._total_time > self._total_time:             # <<<<<<<<<<<<<<
  * 			pulse_data._total_time = other._total_time
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_total_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 97, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_total_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_total_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 97, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_total_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 97, __pyx_L1_error)
+  __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 114, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 97, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 114, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_4) {
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":98
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":115
  * 
  * 		if other._total_time > self._total_time:
  * 			pulse_data._total_time = other._total_time             # <<<<<<<<<<<<<<
  * 
  * 		pulse_data.re_render = True
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_total_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 98, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_total_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 115, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 98, __pyx_L1_error)
+    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 115, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_pulse_data->_total_time = __pyx_t_6;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":97
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":114
  * 			raise ValueError("adding up segment failed, data dype not recognize ({})".format(type(other)))
  * 
  * 		if other._total_time > self._total_time:             # <<<<<<<<<<<<<<
@@ -3903,7 +4155,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":100
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":117
  * 			pulse_data._total_time = other._total_time
  * 
  * 		pulse_data.re_render = True             # <<<<<<<<<<<<<<
@@ -3916,7 +4168,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __Pyx_DECREF(((PyObject *)__pyx_v_pulse_data->re_render));
   __pyx_v_pulse_data->re_render = ((PyBoolObject *)Py_True);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":102
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":119
  * 		pulse_data.re_render = True
  * 
  * 		return pulse_data             # <<<<<<<<<<<<<<
@@ -3928,7 +4180,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_r = ((PyObject *)__pyx_v_pulse_data);
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":86
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":103
  * 		self.re_render = True
  * 
  * 	def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -3950,7 +4202,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":104
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":121
  * 		return pulse_data
  * 
  * 	cdef _add_pulse(self, pulse_data_single_sequence other):             # <<<<<<<<<<<<<<
@@ -3967,7 +4219,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_info __pyx_t_3;
   __Pyx_RefNannySetupContext("_add_pulse", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":106
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":123
  * 	cdef _add_pulse(self, pulse_data_single_sequence other):
  * 
  * 		for i in other.localdata:             # <<<<<<<<<<<<<<
@@ -3982,7 +4234,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     ++__pyx_t_1;
     __pyx_v_i = __pyx_t_3;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":107
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":124
  * 
  * 		for i in other.localdata:
  * 			self.localdata.push_back(i)             # <<<<<<<<<<<<<<
@@ -3993,10 +4245,10 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
       __pyx_v_self->localdata.push_back(__pyx_v_i);
     } catch(...) {
       __Pyx_CppExn2PyErr();
-      __PYX_ERR(1, 107, __pyx_L1_error)
+      __PYX_ERR(1, 124, __pyx_L1_error)
     }
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":106
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":123
  * 	cdef _add_pulse(self, pulse_data_single_sequence other):
  * 
  * 		for i in other.localdata:             # <<<<<<<<<<<<<<
@@ -4005,7 +4257,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":104
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":121
  * 		return pulse_data
  * 
  * 	cdef _add_pulse(self, pulse_data_single_sequence other):             # <<<<<<<<<<<<<<
@@ -4025,7 +4277,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":109
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":126
  * 			self.localdata.push_back(i)
  * 
  * 	def __sub__(self, other):             # <<<<<<<<<<<<<<
@@ -4034,26 +4286,26 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_11__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_11__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_13__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_13__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__sub__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10__sub__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_12__sub__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_10__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_12__sub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__sub__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":110
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":127
  * 
  * 	def __sub__(self, other):
  * 		return self + other*(-1)             # <<<<<<<<<<<<<<
@@ -4061,16 +4313,16 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  * 	def __mul__(self, other):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyNumber_Multiply(__pyx_v_other, __pyx_int_neg_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 110, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Multiply(__pyx_v_other, __pyx_int_neg_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Add(__pyx_v_self, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 110, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_v_self, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":109
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":126
  * 			self.localdata.push_back(i)
  * 
  * 	def __sub__(self, other):             # <<<<<<<<<<<<<<
@@ -4090,7 +4342,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":112
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":129
  * 		return self + other*(-1)
  * 
  * 	def __mul__(self, other):             # <<<<<<<<<<<<<<
@@ -4099,19 +4351,19 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_13__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_13__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_15__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_15__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__mul__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_12__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_14__mul__(((PyObject *)__pyx_v_self), ((PyObject *)__pyx_v_other));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_12__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_14__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_pulse_data = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -4123,16 +4375,16 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   double __pyx_t_6;
   __Pyx_RefNannySetupContext("__mul__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":113
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":130
  * 
  * 	def __mul__(self, other):
  * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)             # <<<<<<<<<<<<<<
  * 		if isinstance(other,numbers.Number):
  * 			pulse_data._muliply(other)
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 113, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 113, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -4147,43 +4399,43 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   }
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_v_self) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 113, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence))))) __PYX_ERR(1, 113, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence))))) __PYX_ERR(1, 130, __pyx_L1_error)
   __pyx_v_pulse_data = ((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":114
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":131
  * 	def __mul__(self, other):
  * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)
  * 		if isinstance(other,numbers.Number):             # <<<<<<<<<<<<<<
  * 			pulse_data._muliply(other)
  * 		else:
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numbers); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 114, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_numbers); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Number); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 114, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_Number); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_4 = PyObject_IsInstance(__pyx_v_other, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 114, __pyx_L1_error)
+  __pyx_t_4 = PyObject_IsInstance(__pyx_v_other, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 131, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (likely(__pyx_t_5)) {
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":115
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":132
  * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)
  * 		if isinstance(other,numbers.Number):
  * 			pulse_data._muliply(other)             # <<<<<<<<<<<<<<
  * 		else:
  * 			raise ValueError("adding up segment failed, data dype not recognize ({})".format(type(other)))
  */
-    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_other); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 115, __pyx_L1_error)
-    __pyx_t_3 = ((struct __pyx_vtabstruct_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_pulse_data->__pyx_vtab)->_muliply(__pyx_v_pulse_data, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 115, __pyx_L1_error)
+    __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_v_other); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 132, __pyx_L1_error)
+    __pyx_t_3 = ((struct __pyx_vtabstruct_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_pulse_data->__pyx_vtab)->_muliply(__pyx_v_pulse_data, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 132, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":114
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":131
  * 	def __mul__(self, other):
  * 		cdef pulse_data_single_sequence pulse_data = copy.copy(self)
  * 		if isinstance(other,numbers.Number):             # <<<<<<<<<<<<<<
@@ -4193,7 +4445,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     goto __pyx_L3;
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":117
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":134
  * 			pulse_data._muliply(other)
  * 		else:
  * 			raise ValueError("adding up segment failed, data dype not recognize ({})".format(type(other)))             # <<<<<<<<<<<<<<
@@ -4201,7 +4453,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  * 		return pulse_data
  */
   /*else*/ {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_adding_up_segment_failed_data_dy, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 117, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_adding_up_segment_failed_data_dy, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 134, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_2 = NULL;
     if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
@@ -4215,19 +4467,19 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     }
     __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, ((PyObject *)Py_TYPE(__pyx_v_other))) : __Pyx_PyObject_CallOneArg(__pyx_t_1, ((PyObject *)Py_TYPE(__pyx_v_other)));
     __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 117, __pyx_L1_error)
+    if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 134, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 117, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 134, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __PYX_ERR(1, 117, __pyx_L1_error)
+    __PYX_ERR(1, 134, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":119
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":136
  * 			raise ValueError("adding up segment failed, data dype not recognize ({})".format(type(other)))
  * 
  * 		return pulse_data             # <<<<<<<<<<<<<<
@@ -4239,7 +4491,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_r = ((PyObject *)__pyx_v_pulse_data);
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":112
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":129
  * 		return self + other*(-1)
  * 
  * 	def __mul__(self, other):             # <<<<<<<<<<<<<<
@@ -4261,7 +4513,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":121
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":138
  * 		return pulse_data
  * 
  * 	cdef _muliply(self, double other):             # <<<<<<<<<<<<<<
@@ -4276,7 +4528,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_muliply", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":124
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":141
  * 		cdef vector[pulse_info].iterator it_localdata
  * 
  * 		it_localdata = self.localdata.begin()             # <<<<<<<<<<<<<<
@@ -4285,7 +4537,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_it_localdata = __pyx_v_self->localdata.begin();
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":125
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":142
  * 
  * 		it_localdata = self.localdata.begin()
  * 		while(it_localdata != self.localdata.end()):             # <<<<<<<<<<<<<<
@@ -4296,7 +4548,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_1 = ((__pyx_v_it_localdata != __pyx_v_self->localdata.end()) != 0);
     if (!__pyx_t_1) break;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":126
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":143
  * 		it_localdata = self.localdata.begin()
  * 		while(it_localdata != self.localdata.end()):
  * 			dereference(it_localdata).v_start = dereference(it_localdata).v_start*other             # <<<<<<<<<<<<<<
@@ -4305,7 +4557,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     (*__pyx_v_it_localdata).v_start = ((*__pyx_v_it_localdata).v_start * __pyx_v_other);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":127
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":144
  * 		while(it_localdata != self.localdata.end()):
  * 			dereference(it_localdata).v_start = dereference(it_localdata).v_start*other
  * 			dereference(it_localdata).v_stop = dereference(it_localdata).v_stop*other             # <<<<<<<<<<<<<<
@@ -4314,7 +4566,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     (*__pyx_v_it_localdata).v_stop = ((*__pyx_v_it_localdata).v_stop * __pyx_v_other);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":128
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":145
  * 			dereference(it_localdata).v_start = dereference(it_localdata).v_start*other
  * 			dereference(it_localdata).v_stop = dereference(it_localdata).v_stop*other
  * 			postincrement(it_localdata)             # <<<<<<<<<<<<<<
@@ -4324,7 +4576,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     (void)((__pyx_v_it_localdata++));
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":130
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":147
  * 			postincrement(it_localdata)
  * 
  * 		self.re_render = True             # <<<<<<<<<<<<<<
@@ -4337,7 +4589,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __Pyx_DECREF(((PyObject *)__pyx_v_self->re_render));
   __pyx_v_self->re_render = ((PyBoolObject *)Py_True);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":121
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":138
  * 		return pulse_data
  * 
  * 	cdef _muliply(self, double other):             # <<<<<<<<<<<<<<
@@ -4352,7 +4604,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":132
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":149
  * 		self.re_render = True
  * 
  * 	cdef __local_render(self):             # <<<<<<<<<<<<<<
@@ -4424,51 +4676,51 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   Py_ssize_t __pyx_t_43;
   __Pyx_RefNannySetupContext("__local_render", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":142
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":159
  * 		cdef long[:] index_inverse
  * 		cdef int j
  * 		time_steps = np.empty([self.localdata.size()*4], dtype = np.double)             # <<<<<<<<<<<<<<
  * 		# if putting too low, sometimes not nough
  * 		cdef double t_offset = 1e-6
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_FromSize_t((__pyx_v_self->localdata.size() * 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t((__pyx_v_self->localdata.size() * 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_double); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 142, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 142, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 159, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_time_steps = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":144
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":161
  * 		time_steps = np.empty([self.localdata.size()*4], dtype = np.double)
  * 		# if putting too low, sometimes not nough
  * 		cdef double t_offset = 1e-6             # <<<<<<<<<<<<<<
@@ -4477,7 +4729,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_t_offset = 1e-6;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":147
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":164
  * 		# not typed, this might slowdown, but performance is good enough atm.
  * 
  * 		j = 0             # <<<<<<<<<<<<<<
@@ -4486,7 +4738,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_j = 0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":149
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":166
  * 		j = 0
  * 		# 7ms
  * 		cdef vector[pulse_info].iterator it_localdata = self.localdata.begin()             # <<<<<<<<<<<<<<
@@ -4495,7 +4747,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_it_localdata = __pyx_v_self->localdata.begin();
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":151
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":168
  * 		cdef vector[pulse_info].iterator it_localdata = self.localdata.begin()
  * 
  * 		while(it_localdata != self.localdata.end()):             # <<<<<<<<<<<<<<
@@ -4506,7 +4758,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_7 = ((__pyx_v_it_localdata != __pyx_v_self->localdata.end()) != 0);
     if (!__pyx_t_7) break;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":152
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":169
  * 
  * 		while(it_localdata != self.localdata.end()):
  * 			time_steps[j] = (dereference(it_localdata).start)             # <<<<<<<<<<<<<<
@@ -4517,7 +4769,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_9 = __pyx_v_j;
     *((double *) ( /* dim=0 */ (__pyx_v_time_steps.data + __pyx_t_9 * __pyx_v_time_steps.strides[0]) )) = __pyx_t_8;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":153
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":170
  * 		while(it_localdata != self.localdata.end()):
  * 			time_steps[j] = (dereference(it_localdata).start)
  * 			time_steps[j + 1] = (dereference(it_localdata).start+t_offset)             # <<<<<<<<<<<<<<
@@ -4527,7 +4779,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_10 = (__pyx_v_j + 1);
     *((double *) ( /* dim=0 */ (__pyx_v_time_steps.data + __pyx_t_10 * __pyx_v_time_steps.strides[0]) )) = ((*__pyx_v_it_localdata).start + __pyx_v_t_offset);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":154
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":171
  * 			time_steps[j] = (dereference(it_localdata).start)
  * 			time_steps[j + 1] = (dereference(it_localdata).start+t_offset)
  * 			if dereference(it_localdata).stop == -1.:             # <<<<<<<<<<<<<<
@@ -4537,7 +4789,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_7 = (((*__pyx_v_it_localdata).stop == -1.) != 0);
     if (__pyx_t_7) {
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":155
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":172
  * 			time_steps[j + 1] = (dereference(it_localdata).start+t_offset)
  * 			if dereference(it_localdata).stop == -1.:
  * 				time_steps[j + 2] = self._total_time-t_offset             # <<<<<<<<<<<<<<
@@ -4547,7 +4799,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
       __pyx_t_11 = (__pyx_v_j + 2);
       *((double *) ( /* dim=0 */ (__pyx_v_time_steps.data + __pyx_t_11 * __pyx_v_time_steps.strides[0]) )) = (__pyx_v_self->_total_time - __pyx_v_t_offset);
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":156
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":173
  * 			if dereference(it_localdata).stop == -1.:
  * 				time_steps[j + 2] = self._total_time-t_offset
  * 				time_steps[j + 3] = self._total_time             # <<<<<<<<<<<<<<
@@ -4558,7 +4810,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
       __pyx_t_12 = (__pyx_v_j + 3);
       *((double *) ( /* dim=0 */ (__pyx_v_time_steps.data + __pyx_t_12 * __pyx_v_time_steps.strides[0]) )) = __pyx_t_8;
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":154
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":171
  * 			time_steps[j] = (dereference(it_localdata).start)
  * 			time_steps[j + 1] = (dereference(it_localdata).start+t_offset)
  * 			if dereference(it_localdata).stop == -1.:             # <<<<<<<<<<<<<<
@@ -4568,7 +4820,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
       goto __pyx_L5;
     }
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":158
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":175
  * 				time_steps[j + 3] = self._total_time
  * 			else:
  * 				time_steps[j + 2] = (dereference(it_localdata).stop-t_offset)             # <<<<<<<<<<<<<<
@@ -4579,7 +4831,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
       __pyx_t_13 = (__pyx_v_j + 2);
       *((double *) ( /* dim=0 */ (__pyx_v_time_steps.data + __pyx_t_13 * __pyx_v_time_steps.strides[0]) )) = ((*__pyx_v_it_localdata).stop - __pyx_v_t_offset);
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":159
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":176
  * 			else:
  * 				time_steps[j + 2] = (dereference(it_localdata).stop-t_offset)
  * 				time_steps[j + 3] = (dereference(it_localdata).stop)             # <<<<<<<<<<<<<<
@@ -4592,7 +4844,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     }
     __pyx_L5:;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":160
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":177
  * 				time_steps[j + 2] = (dereference(it_localdata).stop-t_offset)
  * 				time_steps[j + 3] = (dereference(it_localdata).stop)
  * 			j+=4             # <<<<<<<<<<<<<<
@@ -4601,7 +4853,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     __pyx_v_j = (__pyx_v_j + 4);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":162
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":179
  * 			j+=4
  * 
  * 			postincrement(it_localdata)             # <<<<<<<<<<<<<<
@@ -4611,29 +4863,29 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     (void)((__pyx_v_it_localdata++));
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":166
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":183
  * 
  * 		# 130ms
  * 		time_steps_np, index_inverse = np.unique(time_steps, return_inverse=True)             # <<<<<<<<<<<<<<
  * 
  * 		j = 0
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_unique); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_unique); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_time_steps, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __pyx_t_5 = __pyx_memoryview_fromslice(__pyx_v_time_steps, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_5);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return_inverse, Py_True) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 166, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return_inverse, Py_True) < 0) __PYX_ERR(1, 183, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -4644,7 +4896,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(1, 166, __pyx_L1_error)
+      __PYX_ERR(1, 183, __pyx_L1_error)
     }
     #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -4657,15 +4909,15 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_1);
     #else
-    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 166, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 166, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     #endif
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 166, __pyx_L1_error)
+    __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_15 = Py_TYPE(__pyx_t_3)->tp_iternext;
@@ -4673,7 +4925,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __Pyx_GOTREF(__pyx_t_5);
     index = 1; __pyx_t_1 = __pyx_t_15(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L6_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_1);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_3), 2) < 0) __PYX_ERR(1, 166, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_3), 2) < 0) __PYX_ERR(1, 183, __pyx_L1_error)
     __pyx_t_15 = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L7_unpacking_done;
@@ -4681,12 +4933,12 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_15 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    __PYX_ERR(1, 166, __pyx_L1_error)
+    __PYX_ERR(1, 183, __pyx_L1_error)
     __pyx_L7_unpacking_done:;
   }
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_ds_long(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 166, __pyx_L1_error)
+  __pyx_t_16 = __Pyx_PyObject_to_MemoryviewSlice_ds_long(__pyx_t_1, PyBUF_WRITABLE); if (unlikely(!__pyx_t_16.memview)) __PYX_ERR(1, 183, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_time_steps_np = __pyx_t_6;
   __pyx_t_6.memview = NULL;
@@ -4695,7 +4947,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_16.memview = NULL;
   __pyx_t_16.data = NULL;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":168
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":185
  * 		time_steps_np, index_inverse = np.unique(time_steps, return_inverse=True)
  * 
  * 		j = 0             # <<<<<<<<<<<<<<
@@ -4704,7 +4956,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_j = 0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":171
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":188
  * 
  * 		# 5 ms
  * 		it_localdata = self.localdata.begin()             # <<<<<<<<<<<<<<
@@ -4713,7 +4965,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_it_localdata = __pyx_v_self->localdata.begin();
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":173
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":190
  * 		it_localdata = self.localdata.begin()
  * 
  * 		while(it_localdata != self.localdata.end()):             # <<<<<<<<<<<<<<
@@ -4724,7 +4976,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_7 = ((__pyx_v_it_localdata != __pyx_v_self->localdata.end()) != 0);
     if (!__pyx_t_7) break;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":174
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":191
  * 
  * 		while(it_localdata != self.localdata.end()):
  * 			dereference(it_localdata).index_start = index_inverse[j+1]             # <<<<<<<<<<<<<<
@@ -4734,7 +4986,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_17 = (__pyx_v_j + 1);
     (*__pyx_v_it_localdata).index_start = (*((long *) ( /* dim=0 */ (__pyx_v_index_inverse.data + __pyx_t_17 * __pyx_v_index_inverse.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":175
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":192
  * 		while(it_localdata != self.localdata.end()):
  * 			dereference(it_localdata).index_start = index_inverse[j+1]
  * 			dereference(it_localdata).index_stop = index_inverse[j+2]             # <<<<<<<<<<<<<<
@@ -4744,7 +4996,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_18 = (__pyx_v_j + 2);
     (*__pyx_v_it_localdata).index_stop = (*((long *) ( /* dim=0 */ (__pyx_v_index_inverse.data + __pyx_t_18 * __pyx_v_index_inverse.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":176
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":193
  * 			dereference(it_localdata).index_start = index_inverse[j+1]
  * 			dereference(it_localdata).index_stop = index_inverse[j+2]
  * 			j += 4             # <<<<<<<<<<<<<<
@@ -4753,7 +5005,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     __pyx_v_j = (__pyx_v_j + 4);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":178
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":195
  * 			j += 4
  * 
  * 			postincrement(it_localdata)             # <<<<<<<<<<<<<<
@@ -4763,22 +5015,22 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     (void)((__pyx_v_it_localdata++));
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":181
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":198
  * 
  * 
  * 		cdef double[:] voltage_data = np.zeros([len(time_steps_np)])             # <<<<<<<<<<<<<<
  * 		cdef double[:] time_step
  * 		cdef double delta_v
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 181, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 181, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_19 = __Pyx_MemoryView_Len(__pyx_v_time_steps_np); 
-  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_t_19); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 181, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_t_19); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 181, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyList_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -4796,16 +5048,16 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3);
   __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 181, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 181, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 198, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_voltage_data = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":189
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":206
  * 
  * 		# 20 ms
  * 		it_localdata = self.localdata.begin()             # <<<<<<<<<<<<<<
@@ -4814,7 +5066,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_it_localdata = __pyx_v_self->localdata.begin();
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":191
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":208
  * 		it_localdata = self.localdata.begin()
  * 
  * 		while(it_localdata != self.localdata.end()):             # <<<<<<<<<<<<<<
@@ -4825,7 +5077,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_7 = ((__pyx_v_it_localdata != __pyx_v_self->localdata.end()) != 0);
     if (!__pyx_t_7) break;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":192
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":209
  * 
  * 		while(it_localdata != self.localdata.end()):
  * 			delta_v = dereference(it_localdata).v_stop-dereference(it_localdata).v_start             # <<<<<<<<<<<<<<
@@ -4834,7 +5086,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     __pyx_v_delta_v = ((*__pyx_v_it_localdata).v_stop - (*__pyx_v_it_localdata).v_start);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":193
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":210
  * 		while(it_localdata != self.localdata.end()):
  * 			delta_v = dereference(it_localdata).v_stop-dereference(it_localdata).v_start
  * 			min_time = time_steps_np[dereference(it_localdata).index_start]             # <<<<<<<<<<<<<<
@@ -4844,7 +5096,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_20 = (*__pyx_v_it_localdata).index_start;
     __pyx_v_min_time = (*((double *) ( /* dim=0 */ (__pyx_v_time_steps_np.data + __pyx_t_20 * __pyx_v_time_steps_np.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":194
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":211
  * 			delta_v = dereference(it_localdata).v_stop-dereference(it_localdata).v_start
  * 			min_time = time_steps_np[dereference(it_localdata).index_start]
  * 			max_time = time_steps_np[dereference(it_localdata).index_stop]             # <<<<<<<<<<<<<<
@@ -4854,7 +5106,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_21 = (*__pyx_v_it_localdata).index_stop;
     __pyx_v_max_time = (*((double *) ( /* dim=0 */ (__pyx_v_time_steps_np.data + __pyx_t_21 * __pyx_v_time_steps_np.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":196
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":213
  * 			max_time = time_steps_np[dereference(it_localdata).index_stop]
  * 
  * 			rescaler = delta_v/(max_time-min_time)             # <<<<<<<<<<<<<<
@@ -4864,11 +5116,11 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_8 = (__pyx_v_max_time - __pyx_v_min_time);
     if (unlikely(__pyx_t_8 == 0)) {
       PyErr_SetString(PyExc_ZeroDivisionError, "float division");
-      __PYX_ERR(1, 196, __pyx_L1_error)
+      __PYX_ERR(1, 213, __pyx_L1_error)
     }
     __pyx_v_rescaler = (__pyx_v_delta_v / __pyx_t_8);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":198
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":215
  * 			rescaler = delta_v/(max_time-min_time)
  * 
  * 			for j in range(dereference(it_localdata).index_start, dereference(it_localdata).index_stop+1):             # <<<<<<<<<<<<<<
@@ -4880,7 +5132,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     for (__pyx_t_24 = (*__pyx_v_it_localdata).index_start; __pyx_t_24 < __pyx_t_23; __pyx_t_24+=1) {
       __pyx_v_j = __pyx_t_24;
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":199
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":216
  * 
  * 			for j in range(dereference(it_localdata).index_start, dereference(it_localdata).index_stop+1):
  * 				voltage_data[j] += dereference(it_localdata).v_start + (time_steps_np[j] - min_time)*rescaler             # <<<<<<<<<<<<<<
@@ -4892,7 +5144,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
       *((double *) ( /* dim=0 */ (__pyx_v_voltage_data.data + __pyx_t_26 * __pyx_v_voltage_data.strides[0]) )) += ((*__pyx_v_it_localdata).v_start + (((*((double *) ( /* dim=0 */ (__pyx_v_time_steps_np.data + __pyx_t_25 * __pyx_v_time_steps_np.strides[0]) ))) - __pyx_v_min_time) * __pyx_v_rescaler));
     }
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":201
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":218
  * 				voltage_data[j] += dereference(it_localdata).v_start + (time_steps_np[j] - min_time)*rescaler
  * 
  * 			postincrement(it_localdata)             # <<<<<<<<<<<<<<
@@ -4902,22 +5154,22 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     (void)((__pyx_v_it_localdata++));
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":205
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":222
  * 
  * 		# # clean up data (few ms)
  * 		cdef double[:] new_data_time = np.empty([len(voltage_data)])             # <<<<<<<<<<<<<<
  * 		cdef double[:] new_data_voltage = np.empty([len(voltage_data)])
  * 
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 205, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_np); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 205, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_empty); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_19 = __Pyx_MemoryView_Len(__pyx_v_voltage_data); 
-  __pyx_t_5 = __Pyx_PyInt_FromSize_t(__pyx_t_19); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 205, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_FromSize_t(__pyx_t_19); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 205, __pyx_L1_error)
+  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_5);
   PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
@@ -4935,31 +5187,31 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_5, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1);
   __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 205, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 205, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 222, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_new_data_time = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":206
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":223
  * 		# # clean up data (few ms)
  * 		cdef double[:] new_data_time = np.empty([len(voltage_data)])
  * 		cdef double[:] new_data_voltage = np.empty([len(voltage_data)])             # <<<<<<<<<<<<<<
  * 
  * 		new_data_time[0] = time_steps_np[0]
  */
-  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 206, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 206, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_empty); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_19 = __Pyx_MemoryView_Len(__pyx_v_voltage_data); 
-  __pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_t_19); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 206, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_t_19); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 206, __pyx_L1_error)
+  __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyList_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -4977,16 +5229,16 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_3, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
   __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 206, __pyx_L1_error)
+  if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 206, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_2, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(1, 223, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_new_data_voltage = __pyx_t_6;
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":208
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":225
  * 		cdef double[:] new_data_voltage = np.empty([len(voltage_data)])
  * 
  * 		new_data_time[0] = time_steps_np[0]             # <<<<<<<<<<<<<<
@@ -4997,7 +5249,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_28 = 0;
   *((double *) ( /* dim=0 */ (__pyx_v_new_data_time.data + __pyx_t_28 * __pyx_v_new_data_time.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_steps_np.data + __pyx_t_27 * __pyx_v_time_steps_np.strides[0]) )));
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":209
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":226
  * 
  * 		new_data_time[0] = time_steps_np[0]
  * 		new_data_voltage[0] = voltage_data[0]             # <<<<<<<<<<<<<<
@@ -5008,7 +5260,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_30 = 0;
   *((double *) ( /* dim=0 */ (__pyx_v_new_data_voltage.data + __pyx_t_30 * __pyx_v_new_data_voltage.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_voltage_data.data + __pyx_t_29 * __pyx_v_voltage_data.strides[0]) )));
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":211
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":228
  * 		new_data_voltage[0] = voltage_data[0]
  * 
  * 		cdef int len_time_steps = len(time_steps_np)             # <<<<<<<<<<<<<<
@@ -5018,7 +5270,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_19 = __Pyx_MemoryView_Len(__pyx_v_time_steps_np); 
   __pyx_v_len_time_steps = __pyx_t_19;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":212
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":229
  * 
  * 		cdef int len_time_steps = len(time_steps_np)
  * 		cdef double corr_offset = 2*t_offset #needs to be a bit bigger to correct for numberical errors.             # <<<<<<<<<<<<<<
@@ -5027,7 +5279,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_corr_offset = (2.0 * __pyx_v_t_offset);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":213
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":230
  * 		cdef int len_time_steps = len(time_steps_np)
  * 		cdef double corr_offset = 2*t_offset #needs to be a bit bigger to correct for numberical errors.
  * 		j = 1             # <<<<<<<<<<<<<<
@@ -5036,7 +5288,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_j = 1;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":214
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":231
  * 		cdef double corr_offset = 2*t_offset #needs to be a bit bigger to correct for numberical errors.
  * 		j = 1
  * 		cdef int k = 1             # <<<<<<<<<<<<<<
@@ -5045,7 +5297,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   __pyx_v_k = 1;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":216
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":233
  * 		cdef int k = 1
  * 
  * 		while( j < len_time_steps-1):             # <<<<<<<<<<<<<<
@@ -5056,7 +5308,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_7 = ((__pyx_v_j < (__pyx_v_len_time_steps - 1)) != 0);
     if (!__pyx_t_7) break;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":217
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":234
  * 
  * 		while( j < len_time_steps-1):
  * 			if time_steps_np[j+1] - time_steps_np[j] < corr_offset and time_steps_np[j] - time_steps_np[j-1] < corr_offset:             # <<<<<<<<<<<<<<
@@ -5078,7 +5330,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_L17_bool_binop_done:;
     if (__pyx_t_7) {
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":218
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":235
  * 		while( j < len_time_steps-1):
  * 			if time_steps_np[j+1] - time_steps_np[j] < corr_offset and time_steps_np[j] - time_steps_np[j-1] < corr_offset:
  * 				j+=1             # <<<<<<<<<<<<<<
@@ -5087,7 +5339,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
       __pyx_v_j = (__pyx_v_j + 1);
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":217
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":234
  * 
  * 		while( j < len_time_steps-1):
  * 			if time_steps_np[j+1] - time_steps_np[j] < corr_offset and time_steps_np[j] - time_steps_np[j-1] < corr_offset:             # <<<<<<<<<<<<<<
@@ -5096,7 +5348,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     }
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":220
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":237
  * 				j+=1
  * 
  * 			new_data_time[k] = time_steps_np[j]             # <<<<<<<<<<<<<<
@@ -5107,7 +5359,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_37 = __pyx_v_k;
     *((double *) ( /* dim=0 */ (__pyx_v_new_data_time.data + __pyx_t_37 * __pyx_v_new_data_time.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_steps_np.data + __pyx_t_36 * __pyx_v_time_steps_np.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":221
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":238
  * 
  * 			new_data_time[k] = time_steps_np[j]
  * 			new_data_voltage[k] = voltage_data[j]             # <<<<<<<<<<<<<<
@@ -5118,7 +5370,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_39 = __pyx_v_k;
     *((double *) ( /* dim=0 */ (__pyx_v_new_data_voltage.data + __pyx_t_39 * __pyx_v_new_data_voltage.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_voltage_data.data + __pyx_t_38 * __pyx_v_voltage_data.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":222
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":239
  * 			new_data_time[k] = time_steps_np[j]
  * 			new_data_voltage[k] = voltage_data[j]
  * 			j+= 1             # <<<<<<<<<<<<<<
@@ -5127,7 +5379,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     __pyx_v_j = (__pyx_v_j + 1);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":223
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":240
  * 			new_data_voltage[k] = voltage_data[j]
  * 			j+= 1
  * 			k+= 1             # <<<<<<<<<<<<<<
@@ -5137,7 +5389,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_v_k = (__pyx_v_k + 1);
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":224
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":241
  * 			j+= 1
  * 			k+= 1
  * 		if j < len_time_steps:             # <<<<<<<<<<<<<<
@@ -5147,7 +5399,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
   __pyx_t_7 = ((__pyx_v_j < __pyx_v_len_time_steps) != 0);
   if (__pyx_t_7) {
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":225
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":242
  * 			k+= 1
  * 		if j < len_time_steps:
  * 			new_data_time[k] = time_steps_np[j]             # <<<<<<<<<<<<<<
@@ -5158,7 +5410,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_41 = __pyx_v_k;
     *((double *) ( /* dim=0 */ (__pyx_v_new_data_time.data + __pyx_t_41 * __pyx_v_new_data_time.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_time_steps_np.data + __pyx_t_40 * __pyx_v_time_steps_np.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":226
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":243
  * 		if j < len_time_steps:
  * 			new_data_time[k] = time_steps_np[j]
  * 			new_data_voltage[k] = voltage_data[j]             # <<<<<<<<<<<<<<
@@ -5169,7 +5421,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     __pyx_t_43 = __pyx_v_k;
     *((double *) ( /* dim=0 */ (__pyx_v_new_data_voltage.data + __pyx_t_43 * __pyx_v_new_data_voltage.strides[0]) )) = (*((double *) ( /* dim=0 */ (__pyx_v_voltage_data.data + __pyx_t_42 * __pyx_v_voltage_data.strides[0]) )));
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":227
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":244
  * 			new_data_time[k] = time_steps_np[j]
  * 			new_data_voltage[k] = voltage_data[j]
  * 			k+= 1             # <<<<<<<<<<<<<<
@@ -5178,7 +5430,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
     __pyx_v_k = (__pyx_v_k + 1);
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":224
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":241
  * 			j+= 1
  * 			k+= 1
  * 		if j < len_time_steps:             # <<<<<<<<<<<<<<
@@ -5187,7 +5439,7 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
  */
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":229
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":246
  * 			k+= 1
  * 
  * 		return new_data_time[:k], new_data_voltage[:k]             # <<<<<<<<<<<<<<
@@ -5213,10 +5465,10 @@ static PyObject *__pyx_f_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
     0,
     1) < 0))
 {
-    __PYX_ERR(1, 229, __pyx_L1_error)
+    __PYX_ERR(1, 246, __pyx_L1_error)
 }
 
-__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 229, __pyx_L1_error)
+__pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 246, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
   __pyx_t_6.memview = NULL;
@@ -5239,15 +5491,15 @@ __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __p
     0,
     1) < 0))
 {
-    __PYX_ERR(1, 229, __pyx_L1_error)
+    __PYX_ERR(1, 246, __pyx_L1_error)
 }
 
-__pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 229, __pyx_L1_error)
+__pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 246, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
   __pyx_t_6.memview = NULL;
   __pyx_t_6.data = NULL;
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 229, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 246, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -5259,7 +5511,7 @@ __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __p
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":132
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":149
  * 		self.re_render = True
  * 
  * 	cdef __local_render(self):             # <<<<<<<<<<<<<<
@@ -5290,7 +5542,7 @@ __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __p
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":231
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":248
  * 		return new_data_time[:k], new_data_voltage[:k]
  * 
  * 	def slice_time(self, double start, double stop):             # <<<<<<<<<<<<<<
@@ -5299,8 +5551,8 @@ __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_t_6, 1, (PyObject *(*)(char *)) __p
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_15slice_time(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_15slice_time(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_17slice_time(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_17slice_time(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   double __pyx_v_start;
   double __pyx_v_stop;
   PyObject *__pyx_r = 0;
@@ -5329,11 +5581,11 @@ static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_
         case  1:
         if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_stop)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("slice_time", 1, 2, 2, 1); __PYX_ERR(1, 231, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("slice_time", 1, 2, 2, 1); __PYX_ERR(1, 248, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "slice_time") < 0)) __PYX_ERR(1, 231, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "slice_time") < 0)) __PYX_ERR(1, 248, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -5341,25 +5593,25 @@ static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_start = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_start == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 231, __pyx_L3_error)
-    __pyx_v_stop = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_stop == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 231, __pyx_L3_error)
+    __pyx_v_start = __pyx_PyFloat_AsDouble(values[0]); if (unlikely((__pyx_v_start == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 248, __pyx_L3_error)
+    __pyx_v_stop = __pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_stop == (double)-1) && PyErr_Occurred())) __PYX_ERR(1, 248, __pyx_L3_error)
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("slice_time", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 231, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("slice_time", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 248, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("pulse_lib.segments.data_classes.data_pulse_core.pulse_data_single_sequence.slice_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_14slice_time(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self), __pyx_v_start, __pyx_v_stop);
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_16slice_time(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self), __pyx_v_start, __pyx_v_stop);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_14slice_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_start, double __pyx_v_stop) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_16slice_time(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, double __pyx_v_start, double __pyx_v_stop) {
   std::vector<__pyx_t_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_info> ::iterator __pyx_v_it_localdata;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -5367,7 +5619,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   double __pyx_t_2;
   __Pyx_RefNannySetupContext("slice_time", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":234
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":251
  * 		cdef vector[pulse_info].iterator it_localdata
  * 
  * 		self._total_time = 0.             # <<<<<<<<<<<<<<
@@ -5376,7 +5628,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
   __pyx_v_self->_total_time = 0.;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":235
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":252
  * 
  * 		self._total_time = 0.
  * 		it_localdata = self.localdata.begin()             # <<<<<<<<<<<<<<
@@ -5385,7 +5637,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
   __pyx_v_it_localdata = __pyx_v_self->localdata.begin();
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":236
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":253
  * 		self._total_time = 0.
  * 		it_localdata = self.localdata.begin()
  * 		while(it_localdata != self.localdata.end()):             # <<<<<<<<<<<<<<
@@ -5396,7 +5648,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __pyx_t_1 = ((__pyx_v_it_localdata != __pyx_v_self->localdata.end()) != 0);
     if (!__pyx_t_1) break;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":238
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":255
  * 		while(it_localdata != self.localdata.end()):
  * 
  * 			if dereference(it_localdata).start < start:             # <<<<<<<<<<<<<<
@@ -5406,7 +5658,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __pyx_t_1 = (((*__pyx_v_it_localdata).start < __pyx_v_start) != 0);
     if (__pyx_t_1) {
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":239
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":256
  * 
  * 			if dereference(it_localdata).start < start:
  * 				dereference(it_localdata).start = start             # <<<<<<<<<<<<<<
@@ -5415,7 +5667,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
       (*__pyx_v_it_localdata).start = __pyx_v_start;
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":238
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":255
  * 		while(it_localdata != self.localdata.end()):
  * 
  * 			if dereference(it_localdata).start < start:             # <<<<<<<<<<<<<<
@@ -5424,7 +5676,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
     }
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":240
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":257
  * 			if dereference(it_localdata).start < start:
  * 				dereference(it_localdata).start = start
  * 			if dereference(it_localdata).stop > stop:             # <<<<<<<<<<<<<<
@@ -5434,7 +5686,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __pyx_t_1 = (((*__pyx_v_it_localdata).stop > __pyx_v_stop) != 0);
     if (__pyx_t_1) {
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":241
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":258
  * 				dereference(it_localdata).start = start
  * 			if dereference(it_localdata).stop > stop:
  * 				dereference(it_localdata).stop = stop             # <<<<<<<<<<<<<<
@@ -5443,7 +5695,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
       (*__pyx_v_it_localdata).stop = __pyx_v_stop;
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":240
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":257
  * 			if dereference(it_localdata).start < start:
  * 				dereference(it_localdata).start = start
  * 			if dereference(it_localdata).stop > stop:             # <<<<<<<<<<<<<<
@@ -5452,7 +5704,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
     }
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":243
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":260
  * 				dereference(it_localdata).stop = stop
  * 
  * 			if dereference(it_localdata).start < dereference(it_localdata).stop:             # <<<<<<<<<<<<<<
@@ -5462,7 +5714,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __pyx_t_1 = (((*__pyx_v_it_localdata).start < (*__pyx_v_it_localdata).stop) != 0);
     if (__pyx_t_1) {
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":244
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":261
  * 
  * 			if dereference(it_localdata).start < dereference(it_localdata).stop:
  * 				dereference(it_localdata).start = dereference(it_localdata).start - start             # <<<<<<<<<<<<<<
@@ -5471,7 +5723,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
       (*__pyx_v_it_localdata).start = ((*__pyx_v_it_localdata).start - __pyx_v_start);
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":245
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":262
  * 			if dereference(it_localdata).start < dereference(it_localdata).stop:
  * 				dereference(it_localdata).start = dereference(it_localdata).start - start
  * 				dereference(it_localdata).stop = dereference(it_localdata).stop - start             # <<<<<<<<<<<<<<
@@ -5480,7 +5732,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
       (*__pyx_v_it_localdata).stop = ((*__pyx_v_it_localdata).stop - __pyx_v_start);
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":246
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":263
  * 				dereference(it_localdata).start = dereference(it_localdata).start - start
  * 				dereference(it_localdata).stop = dereference(it_localdata).stop - start
  * 				self._total_time = dereference(it_localdata).stop             # <<<<<<<<<<<<<<
@@ -5490,7 +5742,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
       __pyx_t_2 = (*__pyx_v_it_localdata).stop;
       __pyx_v_self->_total_time = __pyx_t_2;
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":247
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":264
  * 				dereference(it_localdata).stop = dereference(it_localdata).stop - start
  * 				self._total_time = dereference(it_localdata).stop
  * 				postincrement(it_localdata)             # <<<<<<<<<<<<<<
@@ -5499,7 +5751,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
       (void)((__pyx_v_it_localdata++));
 
-      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":243
+      /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":260
  * 				dereference(it_localdata).stop = stop
  * 
  * 			if dereference(it_localdata).start < dereference(it_localdata).stop:             # <<<<<<<<<<<<<<
@@ -5509,7 +5761,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
       goto __pyx_L7;
     }
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":250
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":267
  * 
  * 			else:
  * 				it_localdata = self.localdata.erase(it_localdata)             # <<<<<<<<<<<<<<
@@ -5522,7 +5774,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __pyx_L7:;
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":231
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":248
  * 		return new_data_time[:k], new_data_voltage[:k]
  * 
  * 	def slice_time(self, double start, double stop):             # <<<<<<<<<<<<<<
@@ -5537,7 +5789,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":252
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":269
  * 				it_localdata = self.localdata.erase(it_localdata)
  * 
  * 	def __copy__(self):             # <<<<<<<<<<<<<<
@@ -5546,19 +5798,19 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_17__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_17__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_19__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_19__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_16__copy__(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_18__copy__(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_16__copy__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_18__copy__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self) {
   struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_cpy = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -5567,19 +5819,19 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   std::vector<__pyx_t_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_info>  __pyx_t_3;
   __Pyx_RefNannySetupContext("__copy__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":253
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":270
  * 
  * 	def __copy__(self):
  * 		cpy = pulse_data_single_sequence()             # <<<<<<<<<<<<<<
  * 		cpy._total_time = self._total_time
  * 		cpy.localdata = self.localdata
  */
-  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 253, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cpy = ((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":254
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":271
  * 	def __copy__(self):
  * 		cpy = pulse_data_single_sequence()
  * 		cpy._total_time = self._total_time             # <<<<<<<<<<<<<<
@@ -5589,7 +5841,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_t_2 = __pyx_v_self->_total_time;
   __pyx_v_cpy->_total_time = __pyx_t_2;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":255
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":272
  * 		cpy = pulse_data_single_sequence()
  * 		cpy._total_time = self._total_time
  * 		cpy.localdata = self.localdata             # <<<<<<<<<<<<<<
@@ -5599,7 +5851,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_t_3 = __pyx_v_self->localdata;
   __pyx_v_cpy->localdata = __pyx_t_3;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":257
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":274
  * 		cpy.localdata = self.localdata
  * 
  * 		return cpy             # <<<<<<<<<<<<<<
@@ -5611,7 +5863,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_r = ((PyObject *)__pyx_v_cpy);
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":252
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":269
  * 				it_localdata = self.localdata.erase(it_localdata)
  * 
  * 	def __copy__(self):             # <<<<<<<<<<<<<<
@@ -5631,7 +5883,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":260
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":277
  * 
  * 	@property
  * 	def pulse_data(self):             # <<<<<<<<<<<<<<
@@ -5665,26 +5917,26 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __Pyx_memviewslice __pyx_t_8 = { 0, 0, { 0 }, { 0 }, { 0 } };
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":261
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":278
  * 	@property
  * 	def pulse_data(self):
  * 		if self.re_render == True:             # <<<<<<<<<<<<<<
  * 			self.time_data, self.voltage_data = self.__local_render()
  * 		return (self.time_data, self.voltage_data)
  */
-  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_self->re_render), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 261, __pyx_L1_error)
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 261, __pyx_L1_error)
+  __pyx_t_1 = PyObject_RichCompare(((PyObject *)__pyx_v_self->re_render), Py_True, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 278, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 278, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_2) {
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":262
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":279
  * 	def pulse_data(self):
  * 		if self.re_render == True:
  * 			self.time_data, self.voltage_data = self.__local_render()             # <<<<<<<<<<<<<<
  * 		return (self.time_data, self.voltage_data)
  * 
  */
-    __pyx_t_1 = ((struct __pyx_vtabstruct_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self->__pyx_vtab)->__pyx___local_render(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 262, __pyx_L1_error)
+    __pyx_t_1 = ((struct __pyx_vtabstruct_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self->__pyx_vtab)->__pyx___local_render(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 279, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
       PyObject* sequence = __pyx_t_1;
@@ -5692,7 +5944,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(1, 262, __pyx_L1_error)
+        __PYX_ERR(1, 279, __pyx_L1_error)
       }
       #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -5705,15 +5957,15 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 262, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 279, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 262, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 279, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       #endif
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 262, __pyx_L1_error)
+      __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 279, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
@@ -5721,7 +5973,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L4_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 262, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(1, 279, __pyx_L1_error)
       __pyx_t_6 = NULL;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L5_unpacking_done;
@@ -5729,12 +5981,12 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_6 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(1, 262, __pyx_L1_error)
+      __PYX_ERR(1, 279, __pyx_L1_error)
       __pyx_L5_unpacking_done:;
     }
-    __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 262, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_3, PyBUF_WRITABLE); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(1, 279, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 262, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_double(__pyx_t_4, PyBUF_WRITABLE); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(1, 279, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __PYX_XDEC_MEMVIEW(&__pyx_v_self->time_data, 0);
     __pyx_v_self->time_data = __pyx_t_7;
@@ -5745,7 +5997,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
     __pyx_t_8.memview = NULL;
     __pyx_t_8.data = NULL;
 
-    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":261
+    /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":278
  * 	@property
  * 	def pulse_data(self):
  * 		if self.re_render == True:             # <<<<<<<<<<<<<<
@@ -5754,7 +6006,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
   }
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":263
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":280
  * 		if self.re_render == True:
  * 			self.time_data, self.voltage_data = self.__local_render()
  * 		return (self.time_data, self.voltage_data)             # <<<<<<<<<<<<<<
@@ -5762,13 +6014,13 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  * 	@property
  */
   __Pyx_XDECREF(__pyx_r);
-  if (unlikely(!__pyx_v_self->time_data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 263, __pyx_L1_error)}
-  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_self->time_data, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 263, __pyx_L1_error)
+  if (unlikely(!__pyx_v_self->time_data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 280, __pyx_L1_error)}
+  __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_self->time_data, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (unlikely(!__pyx_v_self->voltage_data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 263, __pyx_L1_error)}
-  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_self->voltage_data, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 263, __pyx_L1_error)
+  if (unlikely(!__pyx_v_self->voltage_data.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");__PYX_ERR(1, 280, __pyx_L1_error)}
+  __pyx_t_4 = __pyx_memoryview_fromslice(__pyx_v_self->voltage_data, 1, (PyObject *(*)(char *)) __pyx_memview_get_double, (int (*)(char *, PyObject *)) __pyx_memview_set_double, 0);; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 263, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 280, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -5780,7 +6032,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":260
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":277
  * 
  * 	@property
  * 	def pulse_data(self):             # <<<<<<<<<<<<<<
@@ -5804,7 +6056,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":266
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":283
  * 
  * 	@property
  * 	def total_time(self):             # <<<<<<<<<<<<<<
@@ -5831,7 +6083,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":267
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":284
  * 	@property
  * 	def total_time(self):
  * 		return self._total_time             # <<<<<<<<<<<<<<
@@ -5839,13 +6091,13 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  * 	@property
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_total_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 267, __pyx_L1_error)
+  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->_total_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":266
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":283
  * 
  * 	@property
  * 	def total_time(self):             # <<<<<<<<<<<<<<
@@ -5864,7 +6116,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":270
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":287
  * 
  * 	@property
  * 	def v_max(self):             # <<<<<<<<<<<<<<
@@ -5894,7 +6146,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":271
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":288
  * 	@property
  * 	def v_max(self):
  * 		return np.max(self.pulse_data[1])             # <<<<<<<<<<<<<<
@@ -5902,14 +6154,14 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  * 	@property
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 271, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 271, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_pulse_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 271, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_pulse_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 271, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -5925,14 +6177,14 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 271, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":270
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":287
  * 
  * 	@property
  * 	def v_max(self):             # <<<<<<<<<<<<<<
@@ -5954,7 +6206,7 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   return __pyx_r;
 }
 
-/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":274
+/* "pulse_lib/segments/data_classes/data_pulse_core.pyx":291
  * 
  * 	@property
  * 	def v_min(self):             # <<<<<<<<<<<<<<
@@ -5983,20 +6235,20 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":275
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":292
  * 	@property
  * 	def v_min(self):
  * 		return np.min(self.pulse_data[1])             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(__pyx_r);
-  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 275, __pyx_L1_error)
+  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_min); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_pulse_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 275, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_pulse_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = NULL;
@@ -6012,14 +6264,14 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
   __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
   __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 275, __pyx_L1_error)
+  if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":274
+  /* "pulse_lib/segments/data_classes/data_pulse_core.pyx":291
  * 
  * 	@property
  * 	def v_min(self):             # <<<<<<<<<<<<<<
@@ -6304,19 +6556,19 @@ static int __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26puls
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_19__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_19__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_21__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_21__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_18__reduce_cython__(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self));
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_20__reduce_cython__(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_18__reduce_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_20__reduce_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self) {
   PyObject *__pyx_v_state = 0;
   PyObject *__pyx_v__dict = 0;
   int __pyx_v_use_setstate;
@@ -6562,19 +6814,19 @@ static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_21__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
-static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_21__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_23__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_23__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
-  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_20__setstate_cython__(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+  __pyx_r = __pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_22__setstate_cython__(((struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_20__setstate_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+static PyObject *__pyx_pf_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_22__setstate_cython__(struct __pyx_obj_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -23313,11 +23565,12 @@ static int __pyx_setprop_9pulse_lib_8segments_12data_classes_15data_pulse_core_2
 static PyMethodDef __pyx_methods_9pulse_lib_8segments_12data_classes_15data_pulse_core_pulse_data_single_sequence[] = {
   {"add_pulse", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_3add_pulse, METH_O, 0},
   {"append", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_5append, METH_O, __pyx_doc_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_4append},
-  {"shift_time", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_7shift_time, METH_O, 0},
-  {"slice_time", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_15slice_time, METH_VARARGS|METH_KEYWORDS, 0},
-  {"__copy__", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_17__copy__, METH_NOARGS, 0},
-  {"__reduce_cython__", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_19__reduce_cython__, METH_NOARGS, 0},
-  {"__setstate_cython__", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_21__setstate_cython__, METH_O, 0},
+  {"repeat", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_7repeat, METH_O, __pyx_doc_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_6repeat},
+  {"shift_time", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9shift_time, METH_O, 0},
+  {"slice_time", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_17slice_time, METH_VARARGS|METH_KEYWORDS, 0},
+  {"__copy__", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_19__copy__, METH_NOARGS, 0},
+  {"__reduce_cython__", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_21__reduce_cython__, METH_NOARGS, 0},
+  {"__setstate_cython__", (PyCFunction)__pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_23__setstate_cython__, METH_O, 0},
   {0, 0, 0, 0}
 };
 
@@ -23333,9 +23586,9 @@ static struct PyGetSetDef __pyx_getsets_9pulse_lib_8segments_12data_classes_15da
 };
 
 static PyNumberMethods __pyx_tp_as_number_pulse_data_single_sequence = {
-  __pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_9__add__, /*nb_add*/
-  __pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_11__sub__, /*nb_subtract*/
-  __pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_13__mul__, /*nb_multiply*/
+  __pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_11__add__, /*nb_add*/
+  __pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_13__sub__, /*nb_subtract*/
+  __pyx_pw_9pulse_lib_8segments_12data_classes_15data_pulse_core_26pulse_data_single_sequence_15__mul__, /*nb_multiply*/
   #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_divide*/
   #endif
@@ -24292,6 +24545,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
   {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
   {&__pyx_n_s_total_time, __pyx_k_total_time, sizeof(__pyx_k_total_time), 0, 0, 1, 1},
+  {&__pyx_n_s_total_time_2, __pyx_k_total_time_2, sizeof(__pyx_k_total_time_2), 0, 0, 1, 1},
   {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0},
   {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0},
   {&__pyx_n_s_unique, __pyx_k_unique, sizeof(__pyx_k_unique), 0, 0, 1, 1},
@@ -24305,8 +24559,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
 };
 static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 2, __pyx_L1_error)
-  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 95, __pyx_L1_error)
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(1, 198, __pyx_L1_error)
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(1, 86, __pyx_L1_error)
+  __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 112, __pyx_L1_error)
   __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(2, 856, __pyx_L1_error)
   __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(2, 1038, __pyx_L1_error)
   __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 18, __pyx_L1_error)
diff --git a/pulse_lib/segments/data_classes/data_pulse_core.pyx b/pulse_lib/segments/data_classes/data_pulse_core.pyx
index 0a7ed21b52f62767fc6c3e01465b781fd03edae8..aff735d088089b82f10ffd394455e4eb79a1871e 100644
--- a/pulse_lib/segments/data_classes/data_pulse_core.pyx
+++ b/pulse_lib/segments/data_classes/data_pulse_core.pyx
@@ -64,14 +64,31 @@ cdef class pulse_data_single_sequence():
 		append other pulse object to this one
 		"""
 		time_shift = self._total_time
-		other.shift_time(time_shift)
 
+		other.shift_time(time_shift)
 		data = self.__add__(other)
+		other.shift_time(-time_shift)
 
 		self.localdata =  data.localdata
 		self.re_render = True
 		self._total_time = data._total_time
 
+	def repeat(self, n):
+		"""
+		repeat n times the current segment.
+		Args : 
+			n (int) : number of times to repeat the current segment.
+		"""
+
+		cdef pulse_data_single_sequence pulse_data = copy.copy(self)
+		cdef double total_time = self.total_time
+		
+		for i in range(n):
+			pulse_data.shift_time(total_time)
+			self._add_pulse(pulse_data)
+			self._total_time += total_time
+
+
 	def shift_time(self, double time):
 
 		cdef vector[pulse_info].iterator it_localdata = self.localdata.begin()
diff --git a/pulse_lib/segments/segment_container.py b/pulse_lib/segments/segment_container.py
index afaf817fb8372a4606f65f1caacd244272028108..0b6350025c25d5644662adf9526c691c44750726 100644
--- a/pulse_lib/segments/segment_container.py
+++ b/pulse_lib/segments/segment_container.py
@@ -320,11 +320,13 @@ if __name__ == '__main__':
 	seg.b += 500
 	# seg.reset_time()
 	# seg.q1.add_MW_pulse(0,100,10,1.015e9)
-	# seg.reset_time()
+	seg.q1.wait(10)
+	seg.reset_time()
 	seg.q1.add_chirp(0,1000,1e9,1.1e9, 100)
 	seg.q1.wait(20)
 	seg.q1.reset_time()
 	seg.q1.add_chirp(0,1000,1.1e9,1.e9, 100)
+	seg.q1.wait(10)
 	# a.a.add_block(20,lp.linspace(50,100,10, axis = 1, name = "time", unit = "ns"),100)
 
 	# b.append(a)
diff --git a/pulse_lib/segments/segment_pulse.py b/pulse_lib/segments/segment_pulse.py
index 368e56ea01bab45f556055815b37e6598d363346..b8d35ead23af0880a6dff3786bfac5cbec809655 100644
--- a/pulse_lib/segments/segment_pulse.py
+++ b/pulse_lib/segments/segment_pulse.py
@@ -142,7 +142,15 @@ class segment_pulse(segment_base):
 		'''
 		self.IQ_ref_channels.append(IQ_render_info(LO, channel_name, pointer_to_channel, I_or_Q_part, image))
 
-
+	@last_edited
+	@loop_controller
+	def repeat(self, number):
+		'''
+		repeat a waveform n times.
+		Args:
+			number (int) : number of ties to repeat the waveform
+		'''
+		self.data_tmp.repeat(number)
 
 
 if __name__ == '__main__':