def METHOD_NAME(self, out=None):
    IM = self.get_input()
    #ASTRA expects a 3D array with shape 1, CIL removes dimensions of len 1
    new_shape_ig = [self.volume_geometry.voxel_num_z,self.volume_geometry.voxel_num_y,self.volume_geometry.voxel_num_x]
    new_shape_ig = [x if x>0 else 1 for x in new_shape_ig]
    data_temp = IM.as_array().reshape(new_shape_ig)
    if out is None:
        sinogram_id, arr_out = astra.create_sino3d_gpu(data_temp, 
                                                       self.proj_geom,
                                                       self.vol_geom)
    else:
        new_shape_ag = [self.sinogram_geometry.pixel_num_v,self.sinogram_geometry.num_projections,self.sinogram_geometry.pixel_num_h]
        arr_out = out.as_array().reshape(new_shape_ag)
        sinogram_id = astra.data3d.link('-sino', self.proj_geom, arr_out)
        self.create_sino3d_gpu(data_temp, self.proj_geom, self.vol_geom, False, sino_id=sinogram_id)
    #clear the memory on GPU
    astra.data3d.delete(sinogram_id)
    arr_out = np.squeeze(arr_out)
    if out is None:
        out = AcquisitionData(arr_out, deep_copy=False, geometry=self.sinogram_geometry.copy(), suppress_warning=True)
        return out
    else:
        out.fill(arr_out)