Index: sansmodels/src/release_notes.txt
===================================================================
--- sansmodels/src/release_notes.txt	(revision 3de85b81bd3b106dd7c6a37da41c471052b9c165)
+++ sansmodels/src/release_notes.txt	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -2,9 +2,13 @@
 =============
 
-SANS Models version 0.4.0
+SANS Models version 0.4.1
 
 Package name: sans.models 
 
-1- What's New in Version 0.4.0
+1- What's New in Version 0.4.1
+    - Release date: 6/9/2008
+    - Modified non-shape models so that the 2D output is the 1D output for the length of Q
+
+    Version 0.4.0
 	- Release date: 4/15/2008
 	- Added shape-independent models.
@@ -13,5 +17,4 @@
 	- Release date: 2/14/2008
 	- Added models to be used in magnetic analysis.
-	   
 
 
Index: sansmodels/src/sans/models/BEPolyelectrolyte.py
===================================================================
--- sansmodels/src/sans/models/BEPolyelectrolyte.py	(revision 3db389570c206a21d9ba5706da8726e27ff899b6)
+++ sansmodels/src/sans/models/BEPolyelectrolyte.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -94,5 +94,5 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._BEPoly(x[0]*math.cos(x[1]))*self._BEPoly(x[0]*math.sin(x[1]))
+            return self._BEPoly(x[0])
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -106,5 +106,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._BEPoly(x[0])*self._BEPoly(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._BEPoly(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/DABModel.py
===================================================================
--- sansmodels/src/sans/models/DABModel.py	(revision 3db389570c206a21d9ba5706da8726e27ff899b6)
+++ sansmodels/src/sans/models/DABModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -57,5 +57,5 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._DAB(x[0]*math.cos(x[1]))*self._DAB(x[0]*math.sin(x[1]))
+            return self._DAB(x[0])
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -69,5 +69,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._DAB(x[0])*self._DAB(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._DAB(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/DebyeModel.py
===================================================================
--- sansmodels/src/sans/models/DebyeModel.py	(revision f629e346291dbccc6f799045adc85db8e542bdf8)
+++ sansmodels/src/sans/models/DebyeModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -64,5 +64,5 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._debye(x[0]*math.cos(x[1]))*self._debye(x[0]*math.sin(x[1]))
+            return self._debye(x[0])
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -76,5 +76,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._debye(x[0])*self._debye(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._debye(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/FractalModel.py
===================================================================
--- sansmodels/src/sans/models/FractalModel.py	(revision 36948c921d9d5d3627d4ffc58ffa2c6440002c3a)
+++ sansmodels/src/sans/models/FractalModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -99,8 +99,8 @@
             # Take absolute value of Q, since this model is really meant to
             # be defined in 1D for a given length of Q
-            qx = math.fabs(x[0]*math.cos(x[1]))
-            qy = math.fabs(x[0]*math.sin(x[1]))
+            #qx = math.fabs(x[0]*math.cos(x[1]))
+            #qy = math.fabs(x[0]*math.sin(x[1]))
             
-            return self._Fractal(qx)*self._Fractal(qy)
+            return self._Fractal(math.fabs(x[0]))
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -114,5 +114,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._Fractal(x[0])*self._Fractal(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._Fractal(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/GuinierModel.py
===================================================================
--- sansmodels/src/sans/models/GuinierModel.py	(revision 3db389570c206a21d9ba5706da8726e27ff899b6)
+++ sansmodels/src/sans/models/GuinierModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -48,5 +48,5 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._guinier(x[0]*math.cos(x[1]))*self._guinier(x[0]*math.sin(x[1]))
+            return self._guinier(x[0])
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -60,5 +60,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._guinier(x[0])*self._guinier(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._guinier(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/LorentzModel.py
===================================================================
--- sansmodels/src/sans/models/LorentzModel.py	(revision 3db389570c206a21d9ba5706da8726e27ff899b6)
+++ sansmodels/src/sans/models/LorentzModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -57,5 +57,5 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._lorentz(x[0]*math.cos(x[1]))*self._lorentz(x[0]*math.sin(x[1]))
+            return self._lorentz(x[0])
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -69,5 +69,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._lorentz(x[0])*self._lorentz(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._lorentz(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/PorodModel.py
===================================================================
--- sansmodels/src/sans/models/PorodModel.py	(revision 36948c921d9d5d3627d4ffc58ffa2c6440002c3a)
+++ sansmodels/src/sans/models/PorodModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -45,5 +45,5 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._porod(x[0]*math.cos(x[1]))*self._porod(x[0]*math.sin(x[1]))
+            return self._porod(x[0])
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -57,5 +57,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._porod(x[0])*self._porod(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._porod(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/PowerLawModel.py
===================================================================
--- sansmodels/src/sans/models/PowerLawModel.py	(revision 36948c921d9d5d3627d4ffc58ffa2c6440002c3a)
+++ sansmodels/src/sans/models/PowerLawModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -61,7 +61,7 @@
             # Take absolute value of Q, since this model is really meant to
             # be defined in 1D for a given length of Q
-            qx = math.fabs(x[0]*math.cos(x[1]))
-            qy = math.fabs(x[0]*math.sin(x[1]))
-            return self._PowerLaw(qx)*self._PowerLaw(qy)
+            #qx = math.fabs(x[0]*math.cos(x[1]))
+            #qy = math.fabs(x[0]*math.sin(x[1]))
+            return self._PowerLaw(math.fabs(x[0]))
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -75,5 +75,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._PowerLaw(x[0])*self._PowerLaw(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._PowerLaw(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/TeubnerStreyModel.py
===================================================================
--- sansmodels/src/sans/models/TeubnerStreyModel.py	(revision f629e346291dbccc6f799045adc85db8e542bdf8)
+++ sansmodels/src/sans/models/TeubnerStreyModel.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -62,6 +62,5 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._TeubnerStrey(x[0]*math.cos(x[1]))\
-             *self._TeubnerStrey(x[0]*math.sin(x[1]))
+            return self._TeubnerStrey(x[0])
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
@@ -75,5 +74,6 @@
         """
         if x.__class__.__name__ == 'list':
-            return self._TeubnerStrey(x[0])*self._TeubnerStrey(x[1])
+            q = math.sqrt(x[0]**2 + x[1]**2)
+            return self._TeubnerStrey(q)
         elif x.__class__.__name__ == 'tuple':
             raise ValueError, "Tuples are not allowed as input to BaseComponent models"
Index: sansmodels/src/sans/models/test/utest_nonshape.py
===================================================================
--- sansmodels/src/sans/models/test/utest_nonshape.py	(revision 6b8399ba6f840075c71fccde6915bea025074451)
+++ sansmodels/src/sans/models/test/utest_nonshape.py	(revision a55fac11c799b1d14d56da351b9543c05fa7afe0)
@@ -42,6 +42,8 @@
         self.model.setParam('rg', 1.0)
         
-        value = self._func(2.0, 1.0, 1.0)*self._func(2.0, 1.0, 2.0)
-        self.assertEqual(self.model.runXY([0.0,0.0]), 2.0*2.0)
+        #value = self._func(2.0, 1.0, 1.0)*self._func(2.0, 1.0, 2.0)
+        value = self._func(2.0, 1.0, math.sqrt(5.0))
+        #self.assertEqual(self.model.runXY([0.0,0.0]), 2.0*2.0)
+        self.assertEqual(self.model.runXY([0.0,0.0]), 2.0)
         self.assertEqual(self.model.runXY([1.0,2.0]), value)
         
@@ -55,5 +57,6 @@
         phi = math.atan2(y, x)
         
-        value = self._func(2.0, 1.0, x)*self._func(2.0, 1.0, y)
+        #value = self._func(2.0, 1.0, x)*self._func(2.0, 1.0, y)
+        value = self._func(2.0, 1.0, r)
         
         #self.assertEqual(self.model.run([r, phi]), value)
@@ -83,14 +86,16 @@
         
     def test2D(self):
-        value = self._func(2.0, 1.0)*self._func(2.0, 2.0)
-        self.assertEqual(self.model.runXY([1.0,2.0]), value)
-        
-    def test2Dphi(self):
-        x = 1.0
-        y = 2.0
-        r = math.sqrt(x**2 + y**2)
-        phi = math.atan2(y, x)
-        
-        value = self._func(2.0, 1.0)*self._func(2.0, 2.0)
+        #value = self._func(2.0, 1.0)*self._func(2.0, 2.0)
+        value = self._func(2.0, math.sqrt(5.0))
+        self.assertEqual(self.model.runXY([1.0,2.0]), value)
+        
+    def test2Dphi(self):
+        x = 1.0
+        y = 2.0
+        r = math.sqrt(x**2 + y**2)
+        phi = math.atan2(y, x)
+        
+        #value = self._func(2.0, 1.0)*self._func(2.0, 2.0)
+        value = self._func(2.0, r)
         self.assertAlmostEquals(self.model.run([r, phi]), value,1)
         
@@ -127,5 +132,6 @@
         
     def test2D(self):
-        value = self._func(50.0, 1.0, 0.001, 1.0)*self._func(50.0, 1.0, 0.001, 2.0)
+        #value = self._func(50.0, 1.0, 0.001, 1.0)*self._func(50.0, 1.0, 0.001, 2.0)
+        value = self._func(50.0, 1.0, 0.001, math.sqrt(5.0))
         self.assertEqual(self.model.runXY([1.0,2.0]), value)
         
@@ -172,5 +178,6 @@
         self.model.setParam('background', 1.0)
         
-        value = self._func(100.0, 50.0, 1.0, 1.0)*self._func(100.0, 50.0, 1.0, 2.0)    
+        #value = self._func(100.0, 50.0, 1.0, 1.0)*self._func(100.0, 50.0, 1.0, 2.0)    
+        value = self._func(100.0, 50.0, 1.0, math.sqrt(5.0))  
         self.assertEqual(self.model.runXY([1.0,2.0]), value)
         
@@ -220,5 +227,6 @@
         
     def test2D(self):
-        value = self._func(self.scale, self.length, self.back, 1.0)*self._func(self.scale, self.length, self.back, 2.0)    
+        #value = self._func(self.scale, self.length, self.back, 1.0)*self._func(self.scale, self.length, self.back, 2.0)    
+        value = self._func(self.scale, self.length, self.back, math.sqrt(5.0))
         self.assertEqual(self.model.runXY([1.0,2.0]), value)
         
@@ -272,6 +280,7 @@
         self.model.setParam('background', 1.0)
         
-        value = self._func(math.exp(-6), 4.0, 1.0, 1.0)\
-        *self._func(math.exp(-6), 4.0, 1.0, 2.0)    
+        #value = self._func(math.exp(-6), 4.0, 1.0, 1.0)\
+        #*self._func(math.exp(-6), 4.0, 1.0, 2.0)    
+        value = self._func(math.exp(-6), 4.0, 1.0, math.sqrt(5.0))
         
         self.assertEqual(self.model.runXY([1.0,2.0]), value)
@@ -332,6 +341,7 @@
         self.model.setParam('scale', 0.1)
         self.model.setParam('background', 0.1)
-        value = self._func(0.1,-30.0,5000.0,0.1, 1.0)\
-        *self._func(0.1,-30.0,5000.0,0.1, 2.0)    
+        #value = self._func(0.1,-30.0,5000.0,0.1, 1.0)\
+        #*self._func(0.1,-30.0,5000.0,0.1, 2.0)    
+        value = self._func(0.1,-30.0,5000.0,0.1, math.sqrt(5.0))
         
         self.assertEqual(self.model.runXY([1.0,2.0]), value)
@@ -348,6 +358,7 @@
         phi = math.atan2(y, x)
         
-        value = self._func(0.1,-30.0,5000.0,0.1, x)\
-        *self._func(0.1,-30.0,5000.0,0.1, y)
+        #value = self._func(0.1,-30.0,5000.0,0.1, x)\
+        #*self._func(0.1,-30.0,5000.0,0.1, y)
+        value = self._func(0.1,-30.0,5000.0,0.1, r)
         self.assertAlmostEquals(self.model.run([r, phi]), value,1)
         
@@ -415,14 +426,15 @@
          
     def test2D(self):
-        self.assertAlmostEquals(self.model.runXY([1.0,2.0]), self._func(1.0)*self._func(2.0), 8)
-        
-    def test2Dphi(self):
-
-        x = 1.0
-        y = 2.0
-        r = math.sqrt(x**2 + y**2)
-        phi = math.atan2(y, x)
-        
-        self.assertAlmostEquals(self.model.run([r, phi]), self._func(x)*self._func(y), 8)
+        #self.assertAlmostEquals(self.model.runXY([1.0,2.0]), self._func(1.0)*self._func(2.0), 8)
+        self.assertAlmostEquals(self.model.runXY([1.0,2.0]), self._func(math.sqrt(1.0+2.0**2)), 8)
+        
+    def test2Dphi(self):
+
+        x = 1.0
+        y = 2.0
+        r = math.sqrt(x**2 + y**2)
+        phi = math.atan2(y, x)
+        
+        self.assertAlmostEquals(self.model.run([r, phi]), self._func(r), 8)
         
 class TestFractalModel(unittest.TestCase):
@@ -493,6 +505,8 @@
         iq_y = self._func(y)
         
-        self.assertEqual(self.model.run([r, phi]), iq_x*iq_y)
-        self.assertEqual(self.model.runXY([x,y]), iq_x*iq_y)
+        #self.assertEqual(self.model.run([r, phi]), iq_x*iq_y)
+        self.assertEqual(self.model.run([r, phi]), self.model.run(r))
+        #self.assertEqual(self.model.runXY([x,y]), iq_x*iq_y)
+        self.assertEqual(self.model.runXY([x,y]), self.model.run(r))
         
 if __name__ == '__main__':
