Index: doc/guide/scripting.rst
===================================================================
--- doc/guide/scripting.rst	(revision bd7630de7da8bd67aa24b8fc036b2dcc1bc72a16)
+++ doc/guide/scripting.rst	(revision 23df8335e23a3bb960bb8c3ef9dc709fb7429652)
@@ -188,20 +188,47 @@
 python kernel.  Once the kernel is in hand, we can then marshal a set of
 parameters into a :class:`sasmodels.details.CallDetails` object and ship it to
-the kernel using the :func:`sansmodels.direct_model.call_kernel` function.  An
-example should help, *example/cylinder_eval.py*::
-
-    from numpy import logspace
+the kernel using the :func:`sansmodels.direct_model.call_kernel` function.  To
+accesses the underlying $<F(q)>$ and $<F^2(q)>$, use
+:func:`sasmodels.direct_model.call_Fq` instead.
+
+The following example should
+help, *example/cylinder_eval.py*::
+
+    from numpy import logspace, sqrt
     from matplotlib import pyplot as plt
     from sasmodels.core import load_model
-    from sasmodels.direct_model import call_kernel
+    from sasmodels.direct_model import call_kernel, call_Fq
 
     model = load_model('cylinder')
     q = logspace(-3, -1, 200)
     kernel = model.make_kernel([q])
-    Iq = call_kernel(kernel, dict(radius=200.))
-    plt.loglog(q, Iq)
+    pars = {'radius': 200, 'radius_pd': 0.1, 'scale': 2}
+    Iq = call_kernel(kernel, pars)
+    F, Fsq, Reff, V, Vratio = call_Fq(kernel, pars)
+
+    plt.loglog(q, Iq, label='2 I(q)')
+    plt.loglog(q, F**2/V, label='<F(q)>^2/V')
+    plt.loglog(q, Fsq/V, label='<F^2(q)>/V')
+    plt.xlabel('q (1/A)')
+    plt.ylabel('I(q) (1/cm)')
+    plt.title('Cylinder with radius 200.')
+    plt.legend()
     plt.show()
 
-On windows, this can be called from the cmd prompt using sasview as::
+.. figure:: direct_call.png
+
+    Comparison between $I(q)$, $<F(q)>$ and $<F^2(q)>$ for cylinder model.
+
+This compares $I(q)$ with $<F(q)>$ and $<F^2(q)>$ for a cylinder
+with *radius=200 +/- 20* and *scale=2*. Note that *call_Fq* does not
+include scale and background, nor does it normalize by the average volume.
+The definition of $F = \rho V \hat F$ scaled by the contrast and
+volume, compared to the canonical cylinder $\hat F$, with $\hat F(0) = 1$.
+Integrating over polydispersity and orientation, the returned values are
+$\sum_{r,w\in N(r_o, r_o/10)} \sum_\theta w F(q,r_o,\theta)\sin\theta$ and
+$\sum_{r,w\in N(r_o, r_o/10)} \sum_\theta w F^2(q,r_o,\theta)\sin\theta$.
+
+On windows, this example can be called from the cmd prompt using sasview as
+as the python interpreter::
 
     SasViewCom example/cylinder_eval.py
Index: example/cylinder_eval.py
===================================================================
--- example/cylinder_eval.py	(revision 2e66ef55022b7fe939fdb5874c2c919d97e01b2c)
+++ example/cylinder_eval.py	(revision 23df8335e23a3bb960bb8c3ef9dc709fb7429652)
@@ -3,16 +3,21 @@
 """
 
-from numpy import logspace
+from numpy import logspace, sqrt
 from matplotlib import pyplot as plt
 from sasmodels.core import load_model
-from sasmodels.direct_model import call_kernel
+from sasmodels.direct_model import call_kernel, call_Fq
 
 model = load_model('cylinder')
 q = logspace(-3, -1, 200)
 kernel = model.make_kernel([q])
-Iq = call_kernel(kernel, dict(radius=200.))
-plt.loglog(q, Iq)
+pars = {'radius': 200, 'radius_pd': 0.1, 'scale': 2}
+Iq = call_kernel(kernel, pars)
+F, Fsq, Reff, V, Vratio = call_Fq(kernel, pars)
+plt.loglog(q, Iq, label='2 I(q)')
+plt.loglog(q, F**2/V, label='<F(q)>^2/V')
+plt.loglog(q, Fsq/V, label='<F^2(q)>/V')
 plt.xlabel('q (1/A)')
-plt.ylabel('I(q)')
+plt.ylabel('I(q) (1/cm)')
 plt.title('Cylinder with radius 200.')
+plt.legend()
 plt.show()
Index: sasmodels/direct_model.py
===================================================================
--- sasmodels/direct_model.py	(revision 304c775207a9dbbadb23ad414848454d66b556d1)
+++ sasmodels/direct_model.py	(revision 23df8335e23a3bb960bb8c3ef9dc709fb7429652)
@@ -67,5 +67,7 @@
     # type: (Kernel, ParameterSet, float, bool) -> np.ndarray
     """
-    Like :func:`call_kernel`, but returning F, F^2, R_eff, V, V_form/V_shell.
+    Like :func:`call_kernel`, but returning F, F^2, R_eff, V_shell, V_form/V_shell.
+
+    For solid objects V_shell is equal to V_form and the volume ratio is 1.
     """
     R_eff_type = int(pars.pop('radius_effective_type', 1.0))
@@ -76,9 +78,11 @@
     return calculator.Fq(call_details, values, cutoff, is_magnetic, R_eff_type)
 
-def call_profile(model_info, **pars):
-    # type: (ModelInfo, ...) -> Tuple[np.ndarray, np.ndarray, Tuple[str, str]]
+def call_profile(model_info, pars=None):
+    # type: (ModelInfo, ParameterSet) -> Tuple[np.ndarray, np.ndarray, Tuple[str, str]]
     """
     Returns the profile *x, y, (xlabel, ylabel)* representing the model.
     """
+    if pars is None:
+        pars = {}
     args = {}
     for p in model_info.parameters.kernel_parameters:
@@ -377,5 +381,5 @@
         Generate a plottable profile.
         """
-        return call_profile(self.model.info, **pars)
+        return call_profile(self.model.info, pars)
 
 def main():
