gemmi reads any text it does not recognise as PDB and can hand back a
structure with an empty model in it, so 'no models' let garbage through.
Count the atom sites instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The analysis read the --model file itself, four to five times per run
(the model kind, every validation, molecular replacement, the stills
reference intensities) and located the PAE sidecar from the file name.
The library is to do no file I/O, so the model now arrives in memory:
- RugnuxModel (image_analysis/structure_refinement/RugnuxModel.h): the
gemmi structure as read, whether it is ModelCIF, the PAE matrix where a
prediction came with one, and the name the report gives it.
- ParseRugnuxModel / ReadRugnuxModelFile (writer/RugnuxModelFile.h, in
JFJochRugnuxFiles): bytes in, gzip by magic, PDB/mmCIF by content,
_ma_qa_metric detection as before; the file reader takes the PAE JSON
from the same place PaePathFor named.
- ProcessConfig::model replaces model_path; PrepareSearchModel,
RunMolecularReplacement, ValidateAgainstModel and
ModelReferenceIntensities take the model; result fields name it by
model_name.
- rugnux reads the model before the run starts and stops with an error
where the file holds no model (it used to run and report the model as
not validated). The viewer reads it when the job is set up.
- The broker parses an uploaded model at once and answers 400 where it is
not one; it keeps the parsed model in memory, with no temporary
directory or file. It takes no PAE.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>