diff --git a/pulse_lib/segments/utility/looping.py b/pulse_lib/segments/utility/looping.py
index dfebf3dcdcefd583037781e00b2b8931966ca3db..4149722af655cadc562c77c6b133f6c0c1f7c9c5 100644
--- a/pulse_lib/segments/utility/looping.py
+++ b/pulse_lib/segments/utility/looping.py
@@ -27,7 +27,7 @@ class loop_obj():
         units (str/tuple<str>) : unit of the sweep data
         setvals (array/np.ndarray) : if you want to display different things on the axis than the normal data point. When None, setvals is the same as the data varaible.
         '''
-        self.data = np.asarray(data)
+        self.data = np.asarray(data).astype(float)
         self.dtype = self.data.dtype
 
         if axis is None:
@@ -75,7 +75,7 @@ class loop_obj():
 
         if not self.no_setpoints:
             if setvals is None:
-                if len(data.shape) == 1:
+                if len(self.data.shape) == 1:
                     self.setvals = (self.data, )
                 else:
                     raise ValueError ('Multidimensional setpoints cannot be inferred from input.')
@@ -299,6 +299,14 @@ class geomspace(loop_obj):
         super().add_data(np.geomspace(start, stop, n_steps, endpoint=endpoint),
                          axis=axis, names=name, labels=label, units=unit, setvals=setvals)
 
+class array(loop_obj):
+    def __init__(self, data,
+                 name=None, label=None, unit=None, axis=-1, setvals=None):
+        super().__init__()
+        super().add_data(data,
+                         axis=axis, names=name, labels=label, units=unit, setvals=setvals)
+
+
 if __name__ == '__main__':
     lp = loop_obj()
     lp.add_data(np.array([1]), axis=0)