changeset 13:a2d881253324

In working, not debugged yet
author Nic Cleju <nikcleju@gmail.com>
date Mon, 12 Mar 2012 17:04:00 +0200
parents 86e1204b9e69
children f2eb027ed101
files ABSexact.py ABSlambda.py ABSmixed.py algos.py stdparams.py stdparams_approx.py test_approx.py
diffstat 7 files changed, 647 insertions(+), 403 deletions(-) [+]
line wrap: on
line diff
--- a/ABSexact.py	Fri Mar 09 16:35:06 2012 +0200
+++ b/ABSexact.py	Mon Mar 12 17:04:00 2012 +0200
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Fri Mar 09 14:06:13 2012
+
+@author: ncleju
+"""
+
+import numpy
+import pyCSalgos.BP.l1eq_pd
+import pyCSalgos.OMP.omp_QR
+import pyCSalgos.SL0.SL0
+import pyCSalgos.TST.RecommendedTST
+
+def bp(y,M,Omega,x0, lbtol=1e-3, mu=10, cgtol=1e-8, cgmaxiter=200, verbose=False):
+
+  N,n = Omega.shape
+  D = numpy.linalg.pinv(Omega)
+  U,S,Vt = numpy.linalg.svd(D)
+  Aextra = Vt[-(N-n):,:]
+  
+  # Create aggregate problem
+  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
+  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
+
+  return numpy.dot(D , pyCSalgos.BP.l1eq_pd.l1eq_pd(x0,Atilde,Atilde.T,ytilde, lbtol, mu, cgtol, cgmaxiter, verbose))
+
+def ompeps(y,M,Omega,epsilon):
+  
+  N,n = Omega.shape
+  D = numpy.linalg.pinv(Omega)
+  U,S,Vt = numpy.linalg.svd(D)
+  Aextra = Vt[-(N-n):,:]
+  
+  # Create aggregate problem
+  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
+  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
+  
+  opts = dict()
+  opts['stopCrit'] = 'mse'
+  opts['stopTol'] = epsilon
+  return numpy.dot(D , pyCSalgos.OMP.omp_QR.greed_omp_qr(aggy,aggD,aggD.shape[1],opts)[0])
+
+def ompk(y,M,Omega,k):
+  
+  N,n = Omega.shape
+  D = numpy.linalg.pinv(Omega)
+  U,S,Vt = numpy.linalg.svd(D)
+  Aextra = Vt[-(N-n):,:]
+  
+  # Create aggregate problem
+  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
+  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
+  
+  opts = dict()
+  opts['stopTol'] = k
+  return numpy.dot(D , pyCSalgos.OMP.omp_QR.greed_omp_qr(aggy,aggD,aggD.shape[1],opts)[0])
+
+def sl0(y,M,Omega, sigma_min, sigma_decrease_factor=0.5, mu_0=2, L=3, true_s=None):
+  
+  N,n = Omega.shape
+  D = numpy.linalg.pinv(Omega)
+  U,S,Vt = numpy.linalg.svd(D)
+  Aextra = Vt[-(N-n):,:]
+  
+  # Create aggregate problem
+  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
+  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
+  
+  return numpy.dot(D, pyCSalgos.SL0.SL0.SL0(Atilde,ytilde,sigma_min,sigma_decrease_factor,mu_0,L,true_s))
+
+def tst_recom(y,M,Omega, nsweep=300, tol=0.00001, xinitial=None, ro=None):
+  
+  N,n = Omega.shape
+  D = numpy.linalg.pinv(Omega)
+  U,S,Vt = numpy.linalg.svd(D)
+  Aextra = Vt[-(N-n):,:]
+  
+  # Create aggregate problem
+  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
+  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
+  
+  return numpy.dot(D, pyCSalgos.RecomTST.RecommendedTST.RecommendedTST(Atilde, ytilde, nsweep, tol, xinitial, ro))
+  
\ No newline at end of file
--- a/ABSlambda.py	Fri Mar 09 16:35:06 2012 +0200
+++ b/ABSlambda.py	Mon Mar 12 17:04:00 2012 +0200
@@ -7,7 +7,7 @@
 
 import numpy
 import pyCSalgos.BP.l1qc
-import pyCSalgos.SL0.SL0_qc
+import pyCSalgos.SL0.SL0_approx
 import pyCSalgos.OMP.omp_QR
 import pyCSalgos.TST.RecommendedTST
 
@@ -18,19 +18,19 @@
   U,S,Vt = numpy.linalg.svd(D)
   aggDupper = numpy.dot(M,D)
   aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+  aggD = numpy.vstack((aggDupper, lbd * aggDlower))
   aggy = numpy.concatenate((y, numpy.zeros(N-n)))
   
-  return pyCSalgos.SL0.SL0_approx.SL0_approx(aggD,aggy,epsilon,sigmamin,sigma_decrease_factor,mu_0,L,A_pinv,true_s)
+  return pyCSalgos.SL0.SL0_approx.SL0_approx(aggD,aggy,epsilon,sigma_min,sigma_decrease_factor,mu_0,L,A_pinv,true_s)
   
-def l1qc(y,M,Omega,epsilon,lbd, lbtol=1e-3, mu=10, cgtol=1e-8, cgmaxiter=200, verbose=False):
+def bp(y,M,Omega,epsilon,lbd, x0, lbtol=1e-3, mu=10, cgtol=1e-8, cgmaxiter=200, verbose=False):
   
   N,n = Omega.shape
   D = numpy.linalg.pinv(Omega)
   U,S,Vt = numpy.linalg.svd(D)
   aggDupper = numpy.dot(M,D)
   aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+  aggD = numpy.vstack((aggDupper, lbd * aggDlower))
   aggy = numpy.concatenate((y, numpy.zeros(N-n)))
 
   return pyCSalgos.BP.l1qc.l1qc_logbarrier(x0,aggD,aggD.T,aggy,epsilon, lbtol, mu, cgtol, cgmaxiter, verbose)
@@ -42,7 +42,7 @@
   U,S,Vt = numpy.linalg.svd(D)
   aggDupper = numpy.dot(M,D)
   aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+  aggD = numpy.hstack((aggDupper, lbd * aggDlower))
   aggy = numpy.concatenate((y, numpy.zeros(N-n)))
   
   opts = dict()
@@ -57,10 +57,9 @@
   U,S,Vt = numpy.linalg.svd(D)
   aggDupper = numpy.dot(M,D)
   aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+  aggD = numpy.vstack((aggDupper, lbd * aggDlower))
   aggy = numpy.concatenate((y, numpy.zeros(N-n)))
   
-  nsweep = 300
   tol = epsilon / numpy.linalg.norm(aggy)
   return pyCSalgos.RecomTST.RecommendedTST.RecommendedTST(aggD, aggy, nsweep, tol, xinitial, ro)
   
\ No newline at end of file
--- a/ABSmixed.py	Fri Mar 09 16:35:06 2012 +0200
+++ b/ABSmixed.py	Mon Mar 12 17:04:00 2012 +0200
@@ -27,5 +27,5 @@
   Aeps = numpy.dot(M,D)
   Aexact = Vt[-(N-n):,:]
   
-  return numpy.dot(D, pyCSalgos.SL0.SL0_approx.SL0_approx_analysis(Aeps,Aexact,y,epsilon,sigmamin,sigma_decrease_factor,mu_0,L,Aeps_pinv,Aexact_pinv,true_s))
+  return numpy.dot(D, pyCSalgos.SL0.SL0_approx.SL0_approx_analysis(Aeps,Aexact,y,epsilon,sigma_min,sigma_decrease_factor,mu_0,L,Aeps_pinv,Aexact_pinv,true_s))
   
\ No newline at end of file
--- a/algos.py	Fri Mar 09 16:35:06 2012 +0200
+++ b/algos.py	Mon Mar 12 17:04:00 2012 +0200
@@ -1,5 +1,7 @@
 # -*- coding: utf-8 -*-
 """
+Define simple wrappers for algorithms
+
 Created on Wed Dec 07 14:06:13 2011
 
 @author: ncleju
@@ -8,17 +10,76 @@
 import numpy
 import pyCSalgos
 import pyCSalgos.GAP.GAP
-import pyCSalgos.BP.l1qc
-import pyCSalgos.BP.l1qec
-import pyCSalgos.SL0.SL0_approx
-import pyCSalgos.OMP.omp_QR
-import pyCSalgos.RecomTST.RecommendedTST
-import pyCSalgos.NESTA.NESTA
+import ABSexact
+import ABSmixed
+import ABSlambda
+#import pyCSalgos.BP.l1qc
+#import pyCSalgos.BP.l1qec
+#import pyCSalgos.SL0.SL0_approx
+#import pyCSalgos.OMP.omp_QR
+#import pyCSalgos.RecomTST.RecommendedTST
+#import pyCSalgos.NESTA.NESTA
 
-#==========================
-# Algorithm functions
-#==========================
+###---------------------------------
+### Exact reconstruction algorithms
+###---------------------------------
+def run_exact_gap(y,M,Omega):
+  """
+  Wrapper for GAP algorithm for exact analysis recovery
+  """
+  gapparams = {"num_iteration" : 1000,\
+                   "greedy_level" : 0.9,\
+                   "stopping_coefficient_size" : 1e-4,\
+                   "l2solver" : 'pseudoinverse',\
+                   "noise_level": 1e-10}
+  return pyCSalgos.GAP.GAP.GAP(y,M,M.T,Omega,Omega.T,gapparams,numpy.zeros(Omega.shape[1]))[0]
+    
+def run_exact_bp(y,M,Omega):
+  """
+  Wrapper for BP algorithm for exact analysis recovery
+  Algorithm implementation is l1eq_pd() from l1-magic toolbox
+  """
+  return ABSexact.bp(y,M,Omega,numpy.zeros(Omega.shape[0]))
+
+def run_exact_ompeps(y,M,Omega):
+  """
+  Wrapper for OMP algorithm for exact analysis recovery, with stopping criterion = epsilon
+  """
+  return ABSexact.ompeps(y,M,Omega,1e-9)
+  
+#def run_exact_ompk(y,M,Omega)
+#  """
+#  Wrapper for OMP algorithm for exact analysis recovery, with stopping criterion = fixed no. of atoms
+#  """
+
+def run_exact_sl0(y,M,Omega):
+  """
+  Wrapper for SL0 algorithm for exact analysis recovery
+  """
+  sigma_min = 1e-12
+  sigma_decrease_factor = 0.5
+  mu_0 = 2
+  L = 20
+  return ABSexact.sl0(y,M,Omega, sigma_min, sigma_decrease_factor, mu_0, L)
+
+def run_exact_tst(y,M,Omega):
+  """
+  Wrapper for TST algorithm (with default optimized params) for exact analysis recovery
+  """
+  nsweep = 300
+  tol = 1e-5
+  return ABSexact.tst_recom(y,M,Omega, nsweep, tol)
+
+
+###---------------------------------------
+### Approximate reconstruction algorithms
+###---------------------------------------
+#  1. Native
+
 def run_gap(y,M,Omega,epsilon):
+  """
+  Wrapper for GAP algorithm for approximate analysis recovery
+  """
   gapparams = {"num_iteration" : 1000,\
                    "greedy_level" : 0.9,\
                    "stopping_coefficient_size" : 1e-4,\
@@ -26,35 +87,10 @@
                    "noise_level": epsilon}
   return pyCSalgos.GAP.GAP.GAP(y,M,M.T,Omega,Omega.T,gapparams,numpy.zeros(Omega.shape[1]))[0]
 
-def run_bp_analysis(y,M,Omega,epsilon):
-  
-  N,n = Omega.shape
-  D = numpy.linalg.pinv(Omega)
-  U,S,Vt = numpy.linalg.svd(D)
-  Aeps = numpy.dot(M,D)
-  Aexact = Vt[-(N-n):,:]
-  # We don't ned any aggregate matrices anymore
-  
-  x0 = numpy.zeros(N)
-  return numpy.dot(D , pyCSalgos.BP.l1qec.l1qec_logbarrier(x0,Aeps,Aeps.T,y,epsilon,Aexact,Aexact.T,numpy.zeros(N-n)))
-
-def run_sl0_analysis(y,M,Omega,epsilon):
-  
-  N,n = Omega.shape
-  D = numpy.linalg.pinv(Omega)
-  U,S,Vt = numpy.linalg.svd(D)
-  Aeps = numpy.dot(M,D)
-  Aexact = Vt[-(N-n):,:]
-  # We don't ned any aggregate matrices anymore
-  
-  sigmamin = 0.001
-  sigma_decrease_factor = 0.5
-  mu_0 = 2
-  L = 10
-  return numpy.dot(D , pyCSalgos.SL0.SL0_approx.SL0_approx_analysis(Aeps,Aexact,y,epsilon,sigmamin,sigma_decrease_factor,mu_0,L))
-
 def run_nesta(y,M,Omega,epsilon):
-  
+  """
+  Wrapper for NESTA algorithm for approximate analysis recovery
+  """  
   U,S,V = numpy.linalg.svd(M, full_matrices = True)
   V = V.T         # Make like Matlab
   m,n = M.shape   # Make like Matlab
@@ -65,74 +101,195 @@
   opts = {'U':Omega, 'Ut':Omega.T.copy(), 'USV':optsUSV, 'TolVar':1e-5, 'Verbose':0}
   return pyCSalgos.NESTA.NESTA.NESTA(M, None, y, opt_muf, epsilon, opts)[0]
 
+#  2. ABS-mixed
 
-def run_sl0(y,M,Omega,D,U,S,Vt,epsilon,lbd):
-  
-  N,n = Omega.shape
-  #D = numpy.linalg.pinv(Omega)
-  #U,S,Vt = numpy.linalg.svd(D)
-  aggDupper = numpy.dot(M,D)
-  aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
-  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
-  
-  sigmamin = 0.001
+def run_mixed_sl0(y,M,Omega,epsilon):
+  """
+  Wrapper for SL0-mixed algorithm for approximate analysis recovery
+  """ 
+  sigma_min = 0.001
   sigma_decrease_factor = 0.5
   mu_0 = 2
   L = 10
-  return pyCSalgos.SL0.SL0_approx.SL0_approx(aggD,aggy,epsilon,sigmamin,sigma_decrease_factor,mu_0,L)
+  return ABSmixed.sl0(y,M,Omega,epsilon,sigma_min, sigma_decrease_factor, mu_0, L)
+
+def run_mixed_bp(y,M,Omega,epsilon):
+  """
+  Wrapper for BP-mixed algorithm for approximate analysis recovery
+  """   
+  return ABSmixed.bp(y,M,Omega,epsilon, numpy.zeros(Omega.shape[0]))
+
+#  3. ABS-lambda
+
+def run_lambda_sl0(y,M,Omega,epsilon,lbd):
+  """
+  Wrapper for SL0 algorithm within ABS-lambda approach for approximate analysis recovery
+  """    
+  sigma_min = 0.001
+  sigma_decrease_factor = 0.5
+  mu_0 = 2
+  L = 10
+  return ABSlambda.sl0(y,M,Omega,epsilon, lbd, sigma_min, sigma_decrease_factor, mu_0, L)
+
+def run_lambda_bp(y,M,Omega,epsilon,lbd):
+  """
+  Wrapper for BP algorithm within ABS-lambda approach for approximate analysis recovery
+  """     
+  return ABSlambda.bp(y,M,Omega,epsilon,lbd,numpy.zeros(Omega.shape[0]))
+
+def run_lambda_ompeps(y,M,Omega,epsilon,lbd):
+  """
+  Wrapper for OMP algorithm, with stopping criterion = epsilon,
+  for approximate analysis recovery within ABS-lambda approach
+  """     
+  return ABSlambda.ompeps(y,M,Omega,epsilon,lbd)
+
+def run_lambda_tst(y,M,Omega,epsilon,lbd):
+  """
+  Wrapper for TST algorithm (with default optimized params)
+  for approximate analysis recovery within ABS-lambda approach
+  """
+  nsweep = 300
+  return ABSlambda.tst_recom(y,M,Omega,epsilon,lbd, nsweep)
   
-def run_bp(y,M,Omega,D,U,S,Vt,epsilon,lbd):
   
-  N,n = Omega.shape
-  #D = numpy.linalg.pinv(Omega)
-  #U,S,Vt = numpy.linalg.svd(D)
-  aggDupper = numpy.dot(M,D)
-  aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
-  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
+### Algorithm tuples
+## Exact recovery
+exact_gap = (run_exact_gap, 'GAP')
+exact_bp = (run_exact_bp, 'ABS-exact: BP')
+exact_ompeps = (run_exact_ompeps, 'ABS-exact: OMP-eps')
+exact_sl0 = (run_exact_sl0, 'ABS-exact: SL0')
+exact_tst = (run_exact_tst, 'ABS-exact: TST')
+## Approximate recovery
+# Native
+gap = (run_gap, 'GAP')
+nesta = (run_nesta, 'NESTA')
+# ABS-mixed
+mixed_sl0 = (run_mixed_sl0, 'ABS-mixed: SL0')
+mixed_bp = (run_mixed_bp, 'ABS-mixed: BP')
+# ABS-lambda
+lambda_sl0 = (run_lambda_sl0, 'ABS-lambda: SL0')
+lambda_bp = (run_lambda_bp, 'ABS-lambda: BP')
+lambda_ompeps = (run_lambda_ompeps, 'ABS-lambda: OMP-eps')
+lambda_tst = (run_lambda_tst, 'ABS-lambda: TST')
 
-  x0 = numpy.zeros(N)
-  return pyCSalgos.BP.l1qc.l1qc_logbarrier(x0,aggD,aggD.T,aggy,epsilon)
-
-def run_ompeps(y,M,Omega,D,U,S,Vt,epsilon,lbd):
-  
-  N,n = Omega.shape
-  #D = numpy.linalg.pinv(Omega)
-  #U,S,Vt = numpy.linalg.svd(D)
-  aggDupper = numpy.dot(M,D)
-  aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
-  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
-  
-  opts = dict()
-  opts['stopCrit'] = 'mse'
-  opts['stopTol'] = epsilon**2 / aggy.size
-  return pyCSalgos.OMP.omp_QR.greed_omp_qr(aggy,aggD,aggD.shape[1],opts)[0]
-  
-def run_tst(y,M,Omega,D,U,S,Vt,epsilon,lbd):
-  
-  N,n = Omega.shape
-  #D = numpy.linalg.pinv(Omega)
-  #U,S,Vt = numpy.linalg.svd(D)
-  aggDupper = numpy.dot(M,D)
-  aggDlower = Vt[-(N-n):,:]
-  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
-  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
-  
-  nsweep = 300
-  tol = epsilon / numpy.linalg.norm(aggy)
-  return pyCSalgos.RecomTST.RecommendedTST.RecommendedTST(aggD, aggy, nsweep=nsweep, tol=tol)
-
-
-#==========================
-# Define tuples (algorithm function, name)
-#==========================
-gap = (run_gap, 'GAP')
-sl0 = (run_sl0, 'SL0a')
-sl0analysis = (run_sl0_analysis, 'SL0a2')
-bpanalysis = (run_bp_analysis, 'BPa2')
-nesta = (run_nesta, 'NESTA')
-bp  = (run_bp, 'BP')
-ompeps = (run_ompeps, 'OMPeps')
-tst = (run_tst, 'TST')
\ No newline at end of file
+##==========================
+## Algorithm functions
+##==========================
+#def run_gap(y,M,Omega,epsilon):
+#  gapparams = {"num_iteration" : 1000,\
+#                   "greedy_level" : 0.9,\
+#                   "stopping_coefficient_size" : 1e-4,\
+#                   "l2solver" : 'pseudoinverse',\
+#                   "noise_level": epsilon}
+#  return pyCSalgos.GAP.GAP.GAP(y,M,M.T,Omega,Omega.T,gapparams,numpy.zeros(Omega.shape[1]))[0]
+#
+#def run_bp_analysis(y,M,Omega,epsilon):
+#  
+#  N,n = Omega.shape
+#  D = numpy.linalg.pinv(Omega)
+#  U,S,Vt = numpy.linalg.svd(D)
+#  Aeps = numpy.dot(M,D)
+#  Aexact = Vt[-(N-n):,:]
+#  # We don't ned any aggregate matrices anymore
+#  
+#  x0 = numpy.zeros(N)
+#  return numpy.dot(D , pyCSalgos.BP.l1qec.l1qec_logbarrier(x0,Aeps,Aeps.T,y,epsilon,Aexact,Aexact.T,numpy.zeros(N-n)))
+#
+#def run_sl0_analysis(y,M,Omega,epsilon):
+#  
+#  N,n = Omega.shape
+#  D = numpy.linalg.pinv(Omega)
+#  U,S,Vt = numpy.linalg.svd(D)
+#  Aeps = numpy.dot(M,D)
+#  Aexact = Vt[-(N-n):,:]
+#  # We don't ned any aggregate matrices anymore
+#  
+#  sigmamin = 0.001
+#  sigma_decrease_factor = 0.5
+#  mu_0 = 2
+#  L = 10
+#  return numpy.dot(D , pyCSalgos.SL0.SL0_approx.SL0_approx_analysis(Aeps,Aexact,y,epsilon,sigmamin,sigma_decrease_factor,mu_0,L))
+#
+#def run_nesta(y,M,Omega,epsilon):
+#  
+#  U,S,V = numpy.linalg.svd(M, full_matrices = True)
+#  V = V.T         # Make like Matlab
+#  m,n = M.shape   # Make like Matlab
+#  S = numpy.hstack((numpy.diag(S), numpy.zeros((m,n-m))))  
+#
+#  opt_muf = 1e-3
+#  optsUSV = {'U':U, 'S':S, 'V':V}
+#  opts = {'U':Omega, 'Ut':Omega.T.copy(), 'USV':optsUSV, 'TolVar':1e-5, 'Verbose':0}
+#  return pyCSalgos.NESTA.NESTA.NESTA(M, None, y, opt_muf, epsilon, opts)[0]
+#
+#
+#def run_sl0(y,M,Omega,D,U,S,Vt,epsilon,lbd):
+#  
+#  N,n = Omega.shape
+#  #D = numpy.linalg.pinv(Omega)
+#  #U,S,Vt = numpy.linalg.svd(D)
+#  aggDupper = numpy.dot(M,D)
+#  aggDlower = Vt[-(N-n):,:]
+#  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+#  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
+#  
+#  sigmamin = 0.001
+#  sigma_decrease_factor = 0.5
+#  mu_0 = 2
+#  L = 10
+#  return pyCSalgos.SL0.SL0_approx.SL0_approx(aggD,aggy,epsilon,sigmamin,sigma_decrease_factor,mu_0,L)
+#  
+#def run_bp(y,M,Omega,D,U,S,Vt,epsilon,lbd):
+#  
+#  N,n = Omega.shape
+#  #D = numpy.linalg.pinv(Omega)
+#  #U,S,Vt = numpy.linalg.svd(D)
+#  aggDupper = numpy.dot(M,D)
+#  aggDlower = Vt[-(N-n):,:]
+#  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+#  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
+#
+#  x0 = numpy.zeros(N)
+#  return pyCSalgos.BP.l1qc.l1qc_logbarrier(x0,aggD,aggD.T,aggy,epsilon)
+#
+#def run_ompeps(y,M,Omega,D,U,S,Vt,epsilon,lbd):
+#  
+#  N,n = Omega.shape
+#  #D = numpy.linalg.pinv(Omega)
+#  #U,S,Vt = numpy.linalg.svd(D)
+#  aggDupper = numpy.dot(M,D)
+#  aggDlower = Vt[-(N-n):,:]
+#  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+#  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
+#  
+#  opts = dict()
+#  opts['stopCrit'] = 'mse'
+#  opts['stopTol'] = epsilon**2 / aggy.size
+#  return pyCSalgos.OMP.omp_QR.greed_omp_qr(aggy,aggD,aggD.shape[1],opts)[0]
+#  
+#def run_tst(y,M,Omega,D,U,S,Vt,epsilon,lbd):
+#  
+#  N,n = Omega.shape
+#  #D = numpy.linalg.pinv(Omega)
+#  #U,S,Vt = numpy.linalg.svd(D)
+#  aggDupper = numpy.dot(M,D)
+#  aggDlower = Vt[-(N-n):,:]
+#  aggD = numpy.concatenate((aggDupper, lbd * aggDlower))
+#  aggy = numpy.concatenate((y, numpy.zeros(N-n)))
+#  
+#  nsweep = 300
+#  tol = epsilon / numpy.linalg.norm(aggy)
+#  return pyCSalgos.RecomTST.RecommendedTST.RecommendedTST(aggD, aggy, nsweep=nsweep, tol=tol)
+#
+##==========================
+## Define tuples (algorithm function, name)
+##==========================
+#gap = (run_gap, 'GAP')
+#sl0 = (run_sl0, 'SL0a')
+#sl0analysis = (run_sl0_analysis, 'SL0a2')
+#bpanalysis = (run_bp_analysis, 'BPa2')
+#nesta = (run_nesta, 'NESTA')
+#bp  = (run_bp, 'BP')
+#ompeps = (run_ompeps, 'OMPeps')
+#tst = (run_tst, 'TST')
\ No newline at end of file
--- a/stdparams.py	Fri Mar 09 16:35:06 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,287 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Wed Dec 07 14:04:40 2011
-
-@author: ncleju
-"""
-
-import numpy
-from algos import *
-
-#==========================
-# Standard parameters
-#==========================
-# Standard parameters for quick testing
-# Algorithms: GAP, SL0 and BP
-# d=50, sigma = 2, delta and rho only 3 x 3, lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-# Useful for short testing 
-def stdtest():
-  # Define which algorithms to run
-  algosN = nesta,      # tuple of algorithms not depending on lambda
-  #algosL = sl0,bp    # tuple of algorithms depending on lambda (our ABS approach)
-  algosL = sl0,
-  
-  d = 50.0
-  sigma = 2.0
-  deltas = numpy.array([0.05, 0.45, 0.95])
-  rhos = numpy.array([0.05, 0.45, 0.95])
-  #deltas = numpy.array([0.95])
-  #deltas = numpy.arange(0.05,1.,0.05)
-  #rhos = numpy.array([0.05])
-  numvects = 10; # Number of vectors to generate
-  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_stdtest.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_stdtest_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts   
-
-
-# Standard parameters 1
-# All algorithms, 100 vectors
-# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-def std1():
-  # Define which algorithms to run
-  algosN = gap,sl0analysis,bpanalysis,nesta       # tuple of algorithms not depending on lambda
-  algosL = sl0,bp,ompeps,tst    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 50.0;
-  sigma = 2.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std1.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std1_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts
-          
-         
-# Standard parameters 2
-# All algorithms, 100 vectors
-# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-def std2():
-  # Define which algorithms to run
-  algosN = gap,sl0analysis,bpanalysis,nesta      # tuple of algorithms not depending on lambda
-  algosL = sl0,bp,ompeps,tst    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 20.0
-  sigma = 10.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std2.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std2_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts
-  
-  
-  # Standard parameters 3
-# All algorithms, 100 vectors
-# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-# IDENTICAL with 1 but with 10dB SNR noise
-def std3():
-  # Define which algorithms to run
-  algosN = gap,sl0analysis,bpanalysis,nesta        # tuple of algorithms not depending on lambda
-  algosL = sl0,bp,ompeps,tst    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 50.0;
-  sigma = 2.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std3.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std3_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts
-          
-# Standard parameters 4
-# All algorithms, 100 vectors
-# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-# Identical to 2 but with 10dB SNR noise
-def std4():
-  # Define which algorithms to run
-  algosN = gap,sl0analysis,bpanalysis,nesta    # tuple of algorithms not depending on lambda
-  algosL = sl0,bp,ompeps,tst    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 20.0
-  sigma = 10.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std4.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std4_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts
-          
-# Standard parameters 1nesta
-# Only NESTA, 100 vectors
-# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-# Identical to std1 but with only NESTA
-def std1nesta():
-  # Define which algorithms to run
-  algosN = nesta,               # tuple of algorithms not depending on lambda
-  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 50.0;
-  sigma = 2.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std1nesta.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std1nesta_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts    
-          
-# Standard parameters 2nesta
-# Only NESTA, 100 vectors
-# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-# Identical with std2, but with only NESTA
-def std2nesta():
-  # Define which algorithms to run
-  algosN = nesta,      # tuple of algorithms not depending on lambda
-  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 20.0
-  sigma = 10.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std2nesta.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std2nesta_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts
-
-  # Standard parameters 3nesta
-# Only NESTA, 100 vectors
-# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-# IDENTICAL with 3 but with only NESTA
-def std3nesta():
-  # Define which algorithms to run
-  algosN = nesta,               # tuple of algorithms not depending on lambda
-  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 50.0;
-  sigma = 2.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std3nesta.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std3nesta_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts
-          
-# Standard parameters 4nesta
-# Only NESTA, 100 vectors
-# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
-# Do save data, do save plots, don't show plots
-# Identical to 4 but with only NESTA
-def std4nesta():
-  # Define which algorithms to run
-  algosN = nesta,      # tuple of algorithms not depending on lambda
-  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
-  
-  d = 20.0
-  sigma = 10.0
-  deltas = numpy.arange(0.05,1.,0.05)
-  rhos = numpy.arange(0.05,1.,0.05)
-  numvects = 100; # Number of vectors to generate
-  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
-  # Values for lambda
-  #lambdas = [0 10.^linspace(-5, 4, 10)];
-  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
-  
-  dosavedata = True
-  savedataname = 'approx_pt_std4nesta.mat'
-  doshowplot = False
-  dosaveplot = True
-  saveplotbase = 'approx_pt_std4nesta_'
-  saveplotexts = ('png','pdf','eps')
-
-  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
-          doshowplot,dosaveplot,saveplotbase,saveplotexts
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/stdparams_approx.py	Mon Mar 12 17:04:00 2012 +0200
@@ -0,0 +1,287 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Wed Dec 07 14:04:40 2011
+
+@author: ncleju
+"""
+
+import numpy
+from algos import *
+
+#==========================
+# Standard parameters
+#==========================
+# Standard parameters for quick testing
+# Algorithms: GAP, SL0 and BP
+# d=50, sigma = 2, delta and rho only 3 x 3, lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+# Useful for short testing 
+def stdtest():
+  # Define which algorithms to run
+  algosN = nesta,      # tuple of algorithms not depending on lambda
+  #algosL = sl0,bp    # tuple of algorithms depending on lambda (our ABS approach)
+  algosL = lambda_sl0,
+  
+  d = 50.0
+  sigma = 2.0
+  deltas = numpy.array([0.05, 0.45, 0.95])
+  rhos = numpy.array([0.05, 0.45, 0.95])
+  #deltas = numpy.array([0.95])
+  #deltas = numpy.arange(0.05,1.,0.05)
+  #rhos = numpy.array([0.05])
+  numvects = 10; # Number of vectors to generate
+  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_stdtest.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_stdtest_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts   
+
+
+# Standard parameters 1
+# All algorithms, 100 vectors
+# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+def std1():
+  # Define which algorithms to run
+  algosN = gap,mixed_sl0,mixed_bp,nesta       # tuple of algorithms not depending on lambda
+  algosL = lambda_sl0,lambda_bp,lambda_ompeps,lambda_tst    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 50.0;
+  sigma = 2.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std1.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std1_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts
+          
+         
+# Standard parameters 2
+# All algorithms, 100 vectors
+# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+def std2():
+  # Define which algorithms to run
+  algosN = gap,mixed_sl0,mixed_bp,nesta      # tuple of algorithms not depending on lambda
+  algosL = lambda_sl0,lambda_bp,lambda_ompeps,lambda_tst    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 20.0
+  sigma = 10.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std2.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std2_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts
+  
+  
+  # Standard parameters 3
+# All algorithms, 100 vectors
+# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+# IDENTICAL with 1 but with 10dB SNR noise
+def std3():
+  # Define which algorithms to run
+  algosN = gap,mixed_sl0,mixed_bp,nesta        # tuple of algorithms not depending on lambda
+  algosL = lambda_sl0,lambda_bp,lambda_ompeps,lambda_tst    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 50.0;
+  sigma = 2.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std3.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std3_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts
+          
+# Standard parameters 4
+# All algorithms, 100 vectors
+# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+# Identical to 2 but with 10dB SNR noise
+def std4():
+  # Define which algorithms to run
+  algosN = gap,mixed_sl0,mixed_bp,nesta    # tuple of algorithms not depending on lambda
+  algosL = lambda_sl0,lambda_bp,lambda_ompeps,lambda_tst    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 20.0
+  sigma = 10.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std4.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std4_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts
+          
+# Standard parameters 1nesta
+# Only NESTA, 100 vectors
+# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+# Identical to std1 but with only NESTA
+def std1nesta():
+  # Define which algorithms to run
+  algosN = nesta,               # tuple of algorithms not depending on lambda
+  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 50.0;
+  sigma = 2.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std1nesta.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std1nesta_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts    
+          
+# Standard parameters 2nesta
+# Only NESTA, 100 vectors
+# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+# Identical with std2, but with only NESTA
+def std2nesta():
+  # Define which algorithms to run
+  algosN = nesta,      # tuple of algorithms not depending on lambda
+  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 20.0
+  sigma = 10.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 20.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std2nesta.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std2nesta_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts
+
+  # Standard parameters 3nesta
+# Only NESTA, 100 vectors
+# d=50, sigma = 2, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+# IDENTICAL with 3 but with only NESTA
+def std3nesta():
+  # Define which algorithms to run
+  algosN = nesta,               # tuple of algorithms not depending on lambda
+  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 50.0;
+  sigma = 2.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std3nesta.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std3nesta_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts
+          
+# Standard parameters 4nesta
+# Only NESTA, 100 vectors
+# d=20, sigma = 10, delta and rho full resolution (0.05 step), lambdas = 0, 1e-4, 1e-2, 1, 100, 10000
+# Do save data, do save plots, don't show plots
+# Identical to 4 but with only NESTA
+def std4nesta():
+  # Define which algorithms to run
+  algosN = nesta,      # tuple of algorithms not depending on lambda
+  algosL = ()    # tuple of algorithms depending on lambda (our ABS approach)
+  
+  d = 20.0
+  sigma = 10.0
+  deltas = numpy.arange(0.05,1.,0.05)
+  rhos = numpy.arange(0.05,1.,0.05)
+  numvects = 100; # Number of vectors to generate
+  SNRdb = 10.;    # This is norm(signal)/norm(noise), so power, not energy
+  # Values for lambda
+  #lambdas = [0 10.^linspace(-5, 4, 10)];
+  lambdas = numpy.array([0., 0.0001, 0.01, 1, 100, 10000])
+  
+  dosavedata = True
+  savedataname = 'approx_pt_std4nesta.mat'
+  doshowplot = False
+  dosaveplot = True
+  saveplotbase = 'approx_pt_std4nesta_'
+  saveplotexts = ('png','pdf','eps')
+
+  return algosN,algosL,d,sigma,deltas,rhos,lambdas,numvects,SNRdb,dosavedata,savedataname,\
+          doshowplot,dosaveplot,saveplotbase,saveplotexts
\ No newline at end of file
--- a/test_approx.py	Fri Mar 09 16:35:06 2012 +0200
+++ b/test_approx.py	Mon Mar 12 17:04:00 2012 +0200
@@ -11,9 +11,13 @@
 import os
 import time
 
-import stdparams
-import pyCSalgos.Analysis
+import stdparams_approx
+import AnalysisGenerate
 
+# For exceptions
+import pyCSalgos.BP.l1qec
+import pyCSalgos.BP.l1qc
+import pyCSalgos.NESTA.NESTA
 #==========================
 # Pool initializer function (multiprocessing)
 # Needed to pass the shared variable to the worker processes
@@ -259,12 +263,13 @@
   for ilbd,lbd in zip(np.arange(lambdas.size),lambdas):
     for iy in np.arange(y.shape[1]):
       D = np.linalg.pinv(Omega)
-      U,S,Vt = np.linalg.svd(D)
+      #U,S,Vt = np.linalg.svd(D)
       for algofunc,strname in algosL:
         epsilon = 1.1 * np.linalg.norm(realnoise[:,iy])
         try:
           timestart = time.time()
-          gamma = algofunc(y[:,iy],M,Omega,D,U,S,Vt,epsilon,lbd)
+          #gamma = algofunc(y[:,iy],M,Omega,D,U,S,Vt,epsilon,lbd)
+          gamma = algofunc(y[:,iy],M,Omega,epsilon,lbd)
           elapsed[strname][ilbd] = elapsed[strname][ilbd] + (time.time() - timestart)
         except pyCSalgos.BP.l1qc.l1qcInputValueError as e:
           print "Caught exception when running algorithm",strname," :",e.message
@@ -296,7 +301,7 @@
   l = round(d - rho*m);
   
   # Generate Omega and data based on parameters
-  Omega = pyCSalgos.Analysis.Generate_Analysis_Operator(d, p);
+  Omega = AnalysisGenerate.Generate_Analysis_Operator(d, p);
   # Optionally make Omega more coherent
   U,S,Vt = np.linalg.svd(Omega);
   Sdnew = S * (1+np.arange(S.size)) # Make D coherent, not Omega!
@@ -304,7 +309,7 @@
   Omega = np.dot(U , np.dot(Snew,Vt))
 
   # Generate data  
-  x0,y,M,Lambda,realnoise = pyCSalgos.Analysis.Generate_Data_Known_Omega(Omega, d,p,m,l,noiselevel, numvects,'l0');
+  x0,y,M,Lambda,realnoise = AnalysisGenerate.Generate_Data_Known_Omega(Omega, d,p,m,l,noiselevel, numvects,'l0');
   
   return Omega,x0,y,M,realnoise