Index: compare.py
===================================================================
--- compare.py	(revision 5134b2c3f75004ca3a032a5e4ca3c5dcc3fe9156)
+++ compare.py	(revision b89f519c356bd2e11f1aff0bcd59de0fb7a62d1c)
@@ -81,6 +81,6 @@
         return np.random.rand()
     else:
-        # length, scale, background in [0,200]
-        return 200*np.random.rand()
+        # values from 0 to 2*x for all other parameters
+        return 2*np.random.rand()*(v if v != 0 else 1)
 
 def randomize_model(name, pars, seed=None):
@@ -145,5 +145,5 @@
     return value, average_time
 
-def make_data(qmax, is2D, Nq=128):
+def make_data(qmax, is2D, Nq=128, view='log'):
     if is2D:
         from sasmodels.bumps_model import empty_data2D, set_beam_stop
@@ -153,10 +153,16 @@
     else:
         from sasmodels.bumps_model import empty_data1D
-        qmax = math.log10(qmax)
-        data = empty_data1D(np.logspace(qmax-3, qmax, Nq))
+        if view == 'log':
+            qmax = math.log10(qmax)
+            q = np.logspace(qmax-3, qmax, Nq)
+        else:
+            q = np.linspace(0.001*qmax, qmax, Nq)
+        data = empty_data1D(q)
         index = slice(None, None)
     return data, index
 
 def compare(name, pars, Ncpu, Nocl, opts, set_pars):
+    view = 'linear' if '-linear' in opts else 'log' if '-log' in opts else 'q4' if '-q4' in opts else 'log'
+
     opt_values = dict(split
                       for s in opts for split in ((s.split('='),))
@@ -166,5 +172,5 @@
     Nq = int(opt_values.get('-Nq', '128'))
     is2D = not "-1d" in opts
-    data, index = make_data(qmax, is2D, Nq)
+    data, index = make_data(qmax, is2D, Nq, view=view)
 
 
@@ -174,9 +180,9 @@
 
     # randomize parameters
+    pars.update(set_pars)
     if '-random' in opts or '-random' in opt_values:
         seed = int(opt_values['-random']) if '-random' in opt_values else None
         pars, seed = randomize_model(name, pars, seed=seed)
         print "Randomize using -random=%i"%seed
-    pars.update(set_pars)
 
     # parameter selection
@@ -223,10 +229,10 @@
     if Ncpu > 0:
         if Nocl > 0: plt.subplot(131)
-        plot_data(data, cpu, scale='log')
+        plot_data(data, cpu, view=view)
         plt.title("%s t=%.1f ms"%(comp,cpu_time))
         cbar_title = "log I"
     if Nocl > 0:
         if Ncpu > 0: plt.subplot(132)
-        plot_data(data, ocl, scale='log')
+        plot_data(data, ocl, view=view)
         plt.title("opencl t=%.1f ms"%ocl_time)
         cbar_title = "log I"
@@ -234,11 +240,11 @@
         plt.subplot(133)
         if '-abs' in opts:
-            err,errstr,scale = resid, "abs err", "linear"
-        else:
-            err,errstr,scale = abs(relerr), "rel err", "log"
+            err,errstr,errview = resid, "abs err", "linear"
+        else:
+            err,errstr,errview = abs(relerr), "rel err", "log"
         #err,errstr = ocl/cpu,"ratio"
-        plot_data(data, err, scale=scale)
+        plot_data(data, err, view=errview)
         plt.title("max %s = %.3g"%(errstr, max(abs(err[index]))))
-        cbar_title = errstr if scale=="linear" else "log "+errstr
+        cbar_title = errstr if errview=="linear" else "log "+errstr
     if is2D:
         h = plt.colorbar()
@@ -281,4 +287,5 @@
     -pars/-nopars* prints the parameter set or not
     -abs/-rel* plot relative or absolute error
+    -linear/-log/-q4 intensity scaling
     -hist/-nohist* plot histogram of relative error
 
@@ -301,4 +308,5 @@
     'nopars','pars',
     'rel','abs',
+    'linear', 'log', 'q4',
     'hist','nohist',
     ])
Index: sasmodels/bumps_model.py
===================================================================
--- sasmodels/bumps_model.py	(revision 7e224c2f323be37a409d509cfa32db53733a321a)
+++ sasmodels/bumps_model.py	(revision b89f519c356bd2e11f1aff0bcd59de0fb7a62d1c)
@@ -154,5 +154,5 @@
 
 
-def plot_data(data, iq, vmin=None, vmax=None, scale='log'):
+def plot_data(data, iq, vmin=None, vmax=None, view='log'):
     """
     Plot the target value for the data.  This could be the data itself,
@@ -166,7 +166,9 @@
         iq = iq + 0
         valid = np.isfinite(iq)
-        if scale == 'log':
+        if view == 'log':
             valid[valid] = (iq[valid] > 0)
             iq[valid] = np.log10(iq[valid])
+        elif view == 'q4':
+            iq[valid] = iq*(data.qx_data[valid]**2+data.qy_data[valid]**2)**2
         iq[~valid | data.mask] = 0
         #plottable = iq
@@ -183,11 +185,14 @@
                    extent=[xmin, xmax, ymin, ymax], vmin=vmin, vmax=vmax)
     else: # 1D data
-        if scale == 'linear':
+        if view == 'linear' or view == 'q4':
+            #idx = np.isfinite(iq)
+            scale = data.x**4 if view == 'q4' else 1.0
+            plt.plot(data.x, scale*iq) #, '.')
+        else:
+            # Find the values that are finite and positive
             idx = np.isfinite(iq)
-            plt.plot(data.x[idx], iq[idx])
-        else:
-            idx = np.isfinite(iq)
-            idx[idx] = (iq[idx] > 0)
-            plt.loglog(data.x[idx], iq[idx])
+            idx[idx] = iq[idx]>0
+            iq[~idx] = np.nan
+            plt.loglog(data.x, iq)
 
 
@@ -207,8 +212,9 @@
     mresid = masked_array((theory - data.y) / data.dy, mdata.mask)
 
+    scale = data.x**4 if view == 'q4' else 1.0
     plt.subplot(121)
-    plt.errorbar(data.x, mdata, yerr=data.dy)
-    plt.plot(data.x, mtheory, '-', hold=True)
-    plt.yscale(view)
+    plt.errorbar(data.x, scale*mdata, yerr=data.dy)
+    plt.plot(data.x, scale*mtheory, '-', hold=True)
+    plt.yscale('linear' if view == 'q4' else view)
     plt.subplot(122)
     plt.plot(data.x, mresid, 'x')
@@ -234,11 +240,11 @@
     resid = (theory - data.data) / data.err_data
     plt.subplot(131)
-    plot_data(data, data.data, scale=view)
+    plot_data(data, data.data, view=view)
     plt.colorbar()
     plt.subplot(132)
-    plot_data(data, theory, scale=view)
+    plot_data(data, theory, view=view)
     plt.colorbar()
     plt.subplot(133)
-    plot_data(data, resid, scale='linear')
+    plot_data(data, resid, view='linear')
     plt.colorbar()
 
