Hi Dale,
The sets of parameters that can be refined simultaneously is a result of the choice of optimization method, not the choice of the function being optimized. The crucial difference is how the second derivatives are handled. In the methods used in Phenix and CNS the seconds derivatives of all parameters are assumed to be equal and uncorrelated.
This is true only for the first iteration of a minimization in a phenix macro cycle. After that the L-BFGS method builds up an approximation of the second derivative information.
To ensure that this assumption is true only parameters of the same category can be varied in a single cycle. This means that the coordinates can be varied, but the B factors and scale factors have to be held fixed. When the B factors are varied the coordinates and scale factors must be constant. When the scale factors are varied everything else must be fixed.
Other refinement programs use second derivatives in a more explicit way than Phenix and do vary more types of parameters in a single cycle. Shelxd is the most powerful and, by default, varies all parameters of all classes each cycle. Refmac, to the best of my knowledge, refines both coordinates and ADPs together, but does refine TLS parameters in a separate step.
As far as I know, Shelx doesn't use second derivatives at all. Shelx is shaped completely by the least-squares approach, using the Jacobian. You couldn't plug another target function into Shelx as you can do in the common macromolecular programs. I.e. there is in fact a link between the minimization method and choice of the target function. REFMAC uses a block-diagonal approach that only takes the correlations of the parameters of one atom into account. phenix approximates these with the L-BFGS method. We have not actually tried to refine coordinates and B-factors simultaneously since we've been too busy with other priorities. In theory it should be possible, but I'm sure it will take a lot of fine-tuning.
Since all the parameters of our models are correlated with one another, it is better to refine as many of them at once as possible. Implementing the join refinement of all these kinds of parameters is difficult, so to save programmers' time approximations are sometimes made.
We'll spend the time when we find it. :-) But I don't expect spectacular gains, no matter how long we beat on the second derivatives. Ralf