----

add a widget to set the light position(s)

updates sequence view on add loop

Make a button to run
set_use_vertex_gradients_for_map_normals(imol, 1);
on maps.
In cryo-EM, I suppose.

while there are intermediate atoms, a shift-click-drag on the trackpad
should not drag atoms - but it does!

rotamer options needs to be cleaned in the rotamer dialog

People close the Ribbon representation dialog.

Did I fix the missing clashes when atom overlaps are displayed
and the model updates?
No.

Make a nice latex equation for what is being minimized in Coot

The "no map" on double-click dialog should be an overlay.

how do I show a model with alphafold b-factors? plddt? And on a ribbon?
It can be done with scripting - but make it trivial.

validation json: sort by "badness" property. Also add "problem-type"
These are optional.
Sections added to the format.

see the patch show-the-dragged-refinement-problem.patch on the new mac.
Apply those debugging messages and drag around the MG of the refine_error_mg.pdb.
Look at the terminal to see what shouldn't be happening.

On high resolution windows laptop,
Draw > View > Scale Up Graphics
Mol graphics gets normal size, but the atom labels remain in small font.

Clemens: interesting places json file: when you uget there,
show the neighbours, ie. action becomes a list of actions,
each has their own button

Martin: I want "atom overlaps" in the validation graphs
        in Moorhen.

Make a OccuPy screenshot - use Fancy mode.

Validation graphs should be split-out-able - Preferences

build chapi without rdkit
* Done.

have another look at monomer and python startup.

What is the status of anisotropic atom scaling? (Claus)

"Proportional editing" molecule rotation

Update xdg repo with new try/catch code.
* Done.

put the correct coot version in export-gltf.cc

chapi needs a quick get-monomer (github) and get-code (pdbe)

select fitting map should be an overlay, I think.

when updating glbuffersubdata, no need to rebind the glbuffers after binding the vao, i think.
Maybe this speeds things up?
* I did a test - seems as though it *is* needed.

Add anioscaling from Claus. Need to check mails or something for scaling code. patchkit.

Paul Bond: named argument support in chapi?
Doable. Does Lucrezia want to do it?

When the monomer library isn't installed/doesn't work, ask the user if it should download
the monomer restraints from github? Cache them in xdg cache .cache/Coot/monomers and load
from there on read without user intervention.

Check Phosphoserine in FLEV

Chapi function to "get" pdb/mmcif and mtz for accession code.
Extra points for getting the map for EM cases.

Jordan: how about stubgen for nanobind functions?
* Done. Hmm. Partially.

Get PAE into moorhen - already there.

I'd like a "focus" atom-selection - the ligand and residues
surrounding. Maybe have a button for this in the gui?
A row of 3 buttons:
All-atom(colour by chain/dict), Focus, Ribbon + Ligand

get (make sure that) the coot api documentation up to date.

Use the dictionary-based conformer generator and then minimize
and look at the coot-energies. Try with multiple ligands.

Get FLEV into Coot.

Compile chapi without rdkit - that's what Charles does.

Density contour or height colours for LSQ plane through atom
selection (a ligand, say).

Go to A40 (ARG) mainchain O. Add hydrogen atoms and refine chain. We
get a diego. But not for sphere refine. hb_type for fixed atoms not
working correctly?

B-factor of atoms around the centre of the screen

Carbohydrate WTA mode in C++

find-ligand executable doesn't read mmcif? if dictionary is
loaded, then one doesn't need ligand.pdb as input.

Add a filter for overlapping points after importing M2T
geometry - don't leave it up to Blender.

NCS menu items - needs a review/rewrite

atom-overlaps.cc
Do we need to call setup_env_residue_atoms_radii() every time?
Rewrite atom-overlap - dynamic-atom-overlap which creates an
object that lasts for the duration of the refinement - where
the chemistry (hydrogen bonds etc) is calculated only once up front.

is there a combine-maps/make-average map
in moorhen?

Fetch "code" in chapi.

Try Get webkit into a Coot binary.
Try running moorhen in that browser.

add reidues_near_residues to chapi

Click and drag on a generic object.
Generic object need to be "active"
Nice if they got outlined when you do. Can this be done on the fly?

Rama balls in 3SOB H 25A [Kevin Jude].

Look at dots() - does the atom_radius parameter have an effect? ::: 0.5

Pyrogen sans python?
What api do I want? CCD mmCIF and SMILES

Chemical feature clustering - what's blocking?

Fix the specular lighting!

Make dots() work - make the radius scaling work.

Measure a distance and then delete the model - the distance should disappear.
Maybe just undisplaying the model should make the distance disappear.

Add a function is_nucleic_acid(imol, residue_cid)

double-clicking on a HUD button does a "go to blob"
(haha)

Add scaling for view rotation/pixel

Analyse/Validate fragment - do refinement setup energy
and rama, rota etc and density fit.

Do ribbons cast shadows?

add terminal residue for nucleic acic in moorhen.
Add a function is_nucleic_acid(imol, cid)

In jiggle fit, at the end of a scoring, some atoms have zero
density and other high density. Multiply the density value
by the position of the atom relative to the center of
the chain/fragment. That will give you a direction
to move the molecule for some hypotheses next round - you
might like to try several different rotation/translation
hypotheses to check for consistency.

Moorhen: hydrogen bonds?
add show_hydrogen_bonds to chapi api

Stuart: hydrogen bonds?

Look at fftw2 usage in electrostatics

Coot: picking should use the non-drawn atom indicies vector

Add feature: Moorhen: Delete Waters

(Conditional) Recontour on button-release in "Dragged-map no" mode? At least as
an option. (Based on how far we have moved since the last contouring and the map radius)

2pwt: add hydrogen atoms and refine - see that the bases are pushed away.
What's going wrong - hydrogen bond distance restraints? Lucrezia script.

Look at picking in RNA stick mode

Discs for HOLE output?

Why doesn't YTD import into layla after reading acedrg-YTD.cif?
LaylaState::LaylaState(CootLigandEditorCanvas* canvas_widget, GtkWindow* win, GtkLabel* status_label) noexcept {
    this->monomer_library_info_store = std::make_unique<protein_geometry>();
There is no transfer of the geometry store from Coot to Layla.
Failing that, let's add an "Import from mmCIF file" into Layla Find menu.

Feature request: occupancy and B-factors of atoms close to the centre of screen.
Key binding.

Edit Restraints dialog should be an overlay.

Add "fat atom" refinement - instead of using just the atom centre, use a box of points around it also.
Box size can depend on B-factor.

GEMMI: Transfer aniso-B information in gemmi-mmdb - aniso table is missing from
output cif - why? Ask Marcin.

Replace line symmetry with 3d model

For tubes view, use 8a5y and 8a61 as an example.

Moorhen: Session file doesn't save the environment distances on restore. Fixed?

Are the GLUprot ASPprot Hisprot1 Hisprot2 in the monomer library mon_lib_list.cif (from github)

Sprout hydrogens should work on protein residues
Sprout hydrogens should be in the ligand menu

NCS Ghost Control (github issue Oli)

4aw9 - build in the missing loop helix by place helix here. Now try
coot.merge_molecules([3], 0)
coot.merge_fragments(0)
On merging fragments, the helix disappears.

EDStats interface for chapi and coot.

Add hydrogen atoms to waters - don't care about orientation.

Add Deuteurium fraction information in the status bar on atom click

HOLE (use a dialog, not an overlay)   * Done.
make_a_difference_map_action          * Done.
transform_map_by_lsq_model_fit_action * Done.
average_maps_action                   * Done.
brighten_maps_action                  * Done.
set_map_is_difference_map_action      * Done.
another_contour_level_action          * Done.
multichicken_action                   * Done.
copy_ncs_residue_range_action
copy_ncs_chain_action
ncs_jumping_action
ncs_ligands_action

1.1.12 make svg molecule work again (pli need not work). Test wedge bonds. Test atom
label positioning.

1.1.12: Oli's Rama bug.

Release new 0.9.8.x

post-release: 1ajs, do a tandem refine on 222B - why do I get an bad contact marker
with 258 N1? Ah! They are both acceptors! Interesting. What to do about it?

More work on molecule_class_info_t::alt_conf_view_next_alt_conf(const std::string &current_alt_conf)
needed.

After creating a cryo-EM map, it looks like the contour
level of the new map is 0 (or close to?)
48083 and pdb9eih.
* Done.

Open up the Refine module - Rama and Rota markup is not set as "on"
* Done.

Tutorial modern - add hydrogen atoms and chain refine with contact dots:
ERROR:: mark_donors_and_acceptors_for_neighbours() oops empty heavy for H-atom H1
Interesting. First fix the bug, then have a look to see if things can be speeded up
by not repeatedly calling that function.
* Fixed - not really a bug because H1 is not in the monomer library for
  amino acids.

It's a mistake to recontour the maps when they are not displayed.
Instead of recontouring, mark them as 'outdated'
When the set_map_is_displayed() function is activated the "map state"
is checked and contoured regenerated if the map state is 'outdated'.
* Done.

Send Maria info about Coot tests.
* Done.

add scaling for view rotation/pixel
* Done. Nice.

Try to diagnose the GL errors on startup.
* Tried. Added some diagnostics. No progress though.

Fix SSM superpose dialog
* Done. What a grid.

When "spacing" through a chain, if the CA of the current atom is labelled,
then label the CA of next atom.

Fix Undo (Molecule) dialog - maybe compression problems
* No problem when compiled properly.

add terminal residue for nucleic acic in moorhen.
* Done.

scale the map in moorhen.
* Done. Good.

The first save coords molecule selector dialog should be an overlay.
* Done. Nice.

Fix this startup message:
ERROR:: failed to find preferences_bond_width_combobox
ERROR:: failed to find preferences_font_size_combobox
* Done.

add-geometry-distance in state command needs coot namespace
* Done.

Does copy-fragment work with ||?
* Done.

Make a blog post: Coot and the XDG Base Directory Protocol
Where do files from Acedrg go? Or downloaded/fetched? Or servalcat?

Delete Residue using ctrl-D - or button/menu-item (2vtq, say) and try to undelete it - fails.
My setup, I think. readline installation problem.
* Done - for now.

Make a very smooth copy: Depythonize.
* Done.

1.1.12 Import the CCD for A1AWR and try to regularize the ligand.
It should give an error message, not proceed with the refinement!
* Done. Nice.

Ligand -> Overlay gui: Get CCD for type:
No, it's a Fetch. And it's already there.
It would be nice to have an intermediate overlay
with the comp_id of the current residue filled.
Another time.
* Done - for now.

Surface display is missing a shader? (Not on mac)
* Done. Idiot edit a6065f50399fabb2a4e767ec27973dfa9da874e3 Dec 2022.

get pull request (?) for column labels from Clemens.
* Done.

Review the github pull requests
* Done.

Ligand+CA doesn't have thin bond to hydrogen atoms
H Atoms are small though.
Ligand in SS CA mode does have thin bonds to hydrogen atoms
* Done. Hostage to fortune? b3178827c24a788d4d1830261610b0ab29f25719

1.1.12 Import a dictionary and make an instance - does that work?
No.
* Fixed.

get_atom() and get_residue() would be nice in chapi.
Needs to make a chapi version of an mmdb atom I think.

How do I open a .ccp4 map?
* Done.

When getting files from EDS:
this directory did not exist:
/home/martin/.cache/Coot/coot-download/
* Done.

How do I open a .ccp4 map?
* Done.

Add a "Save to CCP4i2 button which saves the first model into a "ccp4i2-coot-save" directory.
* Done.

on delete hydrogen atoms on a non-sane molecule throws an exception.
Catch RDKit::AtomValenceException in delete_non_polar_hydrogens
* Done.

1.1.12: Untangle the disulfide refinement in the untangle challenge file from Eleanor.
* Can't reproduce

MM: Try harder to get the NCS jumping matrix correct.
* Tried. Failed.

Look at 2vtq add Hydrogen atoms and look for O16 on the ligand.
Why is there not a hydrogen bond dots to the water?
Also O8.
* Done. Missed  h_bond_info_t::is_h_bond_donor_and_acceptor case

--code 2vtq doesn't work - it should load the cached files
* Done.

MM: EDS for 8aq8 - where is the model? (no .ent on server).
* Done.

2vtq missing bond in svg molecule between either C25 C26 or C3 C4.
* Done.

1.1.12: More work to be done to remove framebuffer usage in --opengl-es mode
* Done.

1.1.12: Layla delete Hydrogens
* Done.

1.1.12: Layla #HBonds etc need to be ints
* Done.

1.1.12 Add a commit and version to chapi
* Done. Well, the package version is that. That should do - at least for now.

1.1.12: Fix Acedrg Link
* Done.

1.1.12: Convert Cryo-EM Python module
* Done.

1.1.12: Convert Ligand Python module
* Done.

1.1.12: Convert ProSMART Python module
* Too hard for now.

1.1.12: Convert Restraints Python module
* Done.

1.1.12: Convert Refine Python module
* Done.

Too hard for 1.1.12:: Add Phi,Psi labels on the HUD Rama plot.

INFO:: Model: Bad Non-Bonded Contact: [spec: model 1 "A"   16 "" " CB " ""] CYS to [spec: model 1 "A"   22 "" " SG " ""] CYS delta -0.728 target 4.110 distortion 57.145

imol = coot.read_pdb("27_paule_xyzout_coot_rebuild_1.pdb")
imol_map = coot.read_mtz("chapi-coot-servalcat/best-ref.mtz", "FWT", "PHWT", "W", False, False)
On refining sphere on residue 16:
INFO:: Model: Bad Non-Bonded Contact: [spec: model 1 "A"   16 "" " CB " ""] CYS to [spec: model 1 "A"   22 "" " SG " ""] CYS delta -0.727 target 4.110 distortion 56.931
There should be an SSBOND angle restraint - hence no NBC restraint.

When I'm fixing rotamers in intermediate atoms mode, I sometimes/often improve the geometry
(bond, angles, planes, chirals, nbc) too, don't I? Can I have a sound for that?

On reading a dictionary find the atoms that are connected to only one other non-hydrogen atom.
For better/smoother bond meshes.
* Started

How do we import the PDB validation report into Coot?

Make a coot version of clash score.

Set occupancy of ligand or residue in moorhen

Clemens: Give me a Coot function to switch the alt confs of a residue (typically a water)

Clemens: Give me a "show me A+"", B+"" or Both" button/menu (and key-binding, I imagine)

Andrey: I don't like the "delete residue" in new coot.
Maybe a entry for a selection? Add app.delete_atom_selection to delete-item-menu

How do I use colour rules to colour by alt-loc in Coot?
How do set_user_defined_bond_colours() and set_user_defined_atom_colour_by_selection() work?

swap-alt-confs: residue, side, or comma-separated-atom-name-list

bug: bernie cif phases bug - in clipper?

Chapi: I have a reference model and a partial model - how do I measure completeness?
Make a function to do that.

Chapi: add flood to the api
* Done.

Chapi: Add a function for missing residue ranges
* Done. It's cool

Chapi: residue_spec_t previous_residue(residue_spec_t);

Add NCS completion to ncs tools.

prune tools?

draw_generic_objects needs to work with shadows and SSAO.

bug: make_mesh_for_gaussian_surface_for_blender(int, float, float, float, float, float)
maybe true?
#4  0x00007dc59381e864 in fftw_plan_awake () from /usr/lib/libfftw3.so.3
#5  0x00007dc5939142c6 in fftw_destroy_plan () from /usr/lib/libfftw3.so.3
#6  0x00007dc51a0960f4 in clipper::FFTmap_sparse_p1_xh::fft_x_to_h (this=0x7fffaebfe6b0, scale=<optimized out>) at fftmap_sparse.cpp:375
#7  0x00007dc510c3188e in clipper::Xmap<float>::fft_to<clipper::HKL_data<clipper::datatypes::F_phi<float> > > (this=0x7fffaebff630, fphidata=..., type=clipper::Xmap_base::Default) at /home/paule/autobuild/build-for-chapi-arch-gtk4/include/clipper/core/xmap.h:695
#8  0x00007dc510d24abf in coot::util::sharpen_blur_map (xmap_p=0x7fffaebff630, b_factor=80) at /home/paule/Projects/coot/git/coot-main/coot/coot-utils/coot-map-utils.cc:704
#9  0x00007dc510957282 in coot::gaussian_surface_t::using_an_xmap (this=0x7fffaebffa90, mol=0x7dc51c832400, chain_id=..., sigma_in=4.4000001, contour_level_in=4, box_radius_in=5, grid_scale=1.20000005, fft_b_factor=80) at /home/paule/Projects/coot/git/coot-main/coot/density-contour/gaussian-surface.cc:224
#10 0x00007dc5109586e8 in coot::gaussian_surface_t::gaussian_surface_t (this=0x7fffaebffa90, mol=0x7dc51c832400, chain_id=..., sigma=4.4000001, contour_level=4, box_radius=5, grid_scale=1.20000005, b_factor=80) at /home/paule/Projects/coot/git/coot-main/coot/density-contour/gaussian-surface.cc:400
#11 0x00007dc51075ebb3 in coot::molecule_t::get_gaussian_surface (this=0x7dc51c615000, sigma=4.4000001, contour_level=4, box_radius=5, grid_scale=1.20000005, b_factor=80) at /home/paule/Projects/coot/git/coot-main/coot/api/coot-molecule.cc:3666


turn on debugging in get_monomer_restraints_internal() and see if this gets called
too many times - noticed in COD cif 1100118

test mmdb->gemmi updates from Marcin.

ERROR:: pane main_window_ramchandran_and_validation_pane not found

configure needs to know if RDKitcoordgen was used to make RDKit and change the Makefile libs
and we need to conditionally compile the code that uses coordgen (in layla).

Idea from Clemens:
  1: Display mode where only "" and "A" atoms are displayed
     and I can flip to display of only "" and "B", then
     "" and "C"
  2: I choose an Alt-Conf specifier and the bonds for the others
     are drawn transparent. Again, allow me to flip between
     specifiers.

Make this work: github DiffSBDD
https://www.nature.com/articles/s43588-024-00737-x

Make Link should be in Coot

Validate vs Sequence in Moorhen.

cylinder class need an init_unit(n_slices);
* Done.

libcootapi: Give me the SMILES of the specified residue
* Done.

read small molecule hkl cif in libcootapi? e.g 2019830.hkl

read small molecule hkl cif in Coot? e.g 2019830.hkl - or does it work already?

add "rdkit-has-coordgen" flag to configure

the SEP in 6il9 - is not a conformer from acedrg

1ag6 A64 His bonding in Moorhen/colour-by-chain/dict mode

Are base pairing restraints working? - check using Martin M. 3a3a
Yes they are - they are just normal bond restraints - they
don't appear as extras.

3a3a residue 16-18 gap loop drawn - but not a gap!
coords/Bond_lines.cc:4848 - copy that code block and use p linked atoms.

Can I delete hydrogen atoms on saving in new coot?

How do I see molprobity rama plot from inside coot?

change the class of chapi.py from xml-to-python.py so that it takes
an argument - maybe __new__() or __init__()?

add to api: centre_of_residue() centre_of_sidechain(), CA_of_residue()

Easy function: for Coot API pentakis dodec vertices and convert them to
cylinders and make a generic display object out of them given centre and radius.
Allow the user to change the centre and radius using some (python?) gui.

Use alignment text-anchor="middle" for text in molecule svg
* Done.

api: what is the energy of this residue? (for conformers, say)

Do refmac torsion restraints work in Coot?

For tubes repo, we need loops

Oliver Clarke issues.

api make a version of density_correlation_analysis() that takes a cid (as q-score now does)

mmrrcc to Coot. side chain score show out of register error?

Get the "shape" of RNA bases in cryo-EM maps - for validation of RNA sequence.

bring chopping of residues in low density to the API

bring water flood to the API.

servalcat refine using chapi molecules

Install this on hal: https://github.com/chaidiscovery/chai-lab

Button no labels and labels no buttons for the vertical toolbar.

Validation: Tell me when I have links that are too long (based on
simple rules (enerlib.cif) not on link dictionary values)

Unmodelled blobs near sequons?

Martin Maly: How do I load external (refmac) restraints into Coot 1?

Associate sequence and assign sequence functions, brighten_maps_action() and many other
  are missing bodies in create-menu-item-actions.cc

How to get map gradient vertex normals in moorhen?

PAE view (dialog) in Coot

Try harder to get NCS jumping working

License of Jakub code - check contract

License of Vercel
https://vercel.com/docs/limits/fair-use-guidelines#commercial-usage

Why does side-chain-densities like TRPs?

Are shader settings (plain vs fancy) saved in the state file?

Add Place Helix here to moorhen api

Add merge fragments to api.

python chapi usage:
Failed to open /home/paule/autobuild/build-for-chapi-debian-gtk4/share/coot/data/metal/metal-O-distance.table
There is no $prfx/share/coot directory

On a button click, how do I get the GdkDevice? (If I have the device, I hope I
can then know if the device is a trackpad).
  gdk_event_get_event_type(GdkEvent *event) https://docs.gtk.org/gdk4/enum.EventType.html
  gdk_event_get_display(GdkEvent *event) and then
  gdk_display_get_default_seat(GdkDisplay *display) and then
  gdk_seat_get_devices(GdkSeat *seat)

If you're going to write about it, get pyrogen working in libcootapi (pythonless pyrogen)

HUD Refinement buttons are a mess on resizing - replace them with gtk buttons
Use an overlay box of buttons.

The "Solid Surface" mode for a map is not saved in the state file.

Ribbon diagram is not used for shadows. It would be nice to have.

Martin request: libcootapi: coordinates -> mask with same coordinates
   removing cavities, making map in X,Y,Z order - use floats
   use smooth edge (user-controlled)

Make mask by position (a sphere around a point)

Martin request: libcootapi: Step sample maps

Adaptive rotation for the mouse motion - make it more for a widescreen.

SVG for pli

Add extra arguments to get_bonds_mesh_for_selection_instanced()
* Done.

cylinder class need an init_unit(n_slices);
* Done.

libcootapi: Give me the SMILES of the specified residue
* Done.

Read in two dictionaries and return an atom name map.
std::map<std::string, std::string>
dictionary_atom_name_map(comp_id_1, imol_1, comp_id_2, imol_2)
How do I handle the map in python?
https://nanobind.readthedocs.io/en/latest/exchanging.html
Seems that is could be "naturally."
* Done.

api: what is the energy of this residue? (for conformers, say)
* Done.

set_max_number_of_threads() seems not to be honoured in chapi
* Done

INFO:: there are 0 helices and 0 sheets.
Don't go on to try to write them out then.
* Done.

api: rotate torsion to value
* Done.

add to api: centre_of_residue() centre_of_sidechain(), CA_of_residue()
* Done.

Use alignment text-anchor="middle" for text in molecule svg

api: rotate torsion to value
* Done.

Given a quad of atom names and a residue spec, what is the torsion?
* Done.

coot --dictionary should make a molecule instance from the dictionary
* Done.

What's up with the cross-hairs? Allow user to set the colour.
* Done - well - the first part at least

Add coot-ligand-validation to chapi.
* Difficult.

rainbow ribbons are wrong - even for tutorial modern.
 * related to NRStuff change. Take a look at the code and patch.

does --code work? - is it a XDG Protocol problem?

Chapi torsion angle restraints for servalcat
Make torsion restraints for Rama and rota refinement for servalcat.

B416 in 8c0p is drawn wrongly in Colour-by-chain mode

Rangana made findwaters crash by using a sigma of 4 in flood mode in cryo-EM map.
  Can you reproduce that?

Expanding ligand thumbnail on window width increase

Carbohydrate builder in moorhen & coot

Randy & Team's MR placement tool interface - Lucrezia

PDBe tools - Lucrezia

Fix output of coot-ligand-validation with no comand line args

Tomo Particle picker

Fix stretched ligand on resizing window width
* Had a bash - the lines no longer expand, but the letters don't match.
  The whole thing needs a rewrite.

Fix on-screen button placement on resizing window width

"View Grid Mode" - give each molecule a possible screen offset (given the center of the screen is at 0,0)
   say (-0.5, 0.5), (0.5, 0.5), (-0.5, -0.5), (0.5, -0.5) - for ligand diagrams or overlapped structure or
   cryo-EM maps set_view_grid_mode(2,2) and some sort of assignment of molecules to grid.
   Allow the user to change the grid of a molecule: set_view_grid_mode_grid_for_molecule(imol, irow, icol)
   set_view_grid_mode_auto (and it will work out the grid (say for 15 molecules/map)).

How do I make vertex-gradients work for maps? Have I done this already? How do I turn it on? I'd like a function
and a key-binding if nothing else.

Fun project: mrcfile importer.

make an figure, for moorhen intro with blobs that have volume proportional
   to the number of lines of code: rdkit, mmdb, ccp4libs, gemmi, M2T,
   libcootapi - M2T, coot - libcootapi - M2T, moorhen JS and TypeScript code


Look at 4yjr - beautiful map 452-626 interaction - it should not have a clash face
   (distance to hydrogen atom).
* Checked - it does not if both residues are refined. That will do.

superpose maps with using matrix from lsq fitting.
c.f.:
(define (transform-map-using-lsq-matrix imol-ref ref-chain ref-resno-start ref-resno-end imol-mov mov-chain mov-resno-start mov-resno-end imol-map about-pt radius)
How about using a lsq_results_t?
   int transform_map_using_lsq_matrix(int imol_map, lsq_results_t lsq_matrix, about_pt, radius);
* Done. Nice. And quite easy to do.

Smooth Recentering setting saved (now)?
* Yes.

Add Noughties Physics into the Preferences
* Done.

chapi: a function to return a list of tuples atom types for ligand from acedrg:
get_acedrg_atom_types(comp_id, imol_enc);
* Done.

chapi: a function to return a list of tuples atom types for ligand:
(name_1, name_2, type_1, type_2, bond_length)
get_acedrg_atom_types_for_ligand(imol, comp_id, residue_cid);
* Done.

Identify the acedrg atom types - or use the dictionary to look them up.
* Done (the second (easier) option)

acedrg atom types in cif parse.
* Already Done.

Add "Rotate View is on Left/Right mouse" mode in Preferences
* Done.

Charles' recent patch.
* Done.

Normal waters are no longer fat. Maybe was this fix:
   66a3d04dad117b3dab37a6a4996267294d65b504
* Done.

Key-binding to hide/show right-hand panel.
      GtkWidget *status_bar = widget_from_builder("main_window_statusbar");
      GtkWidget *tool_bar   = widget_from_builder("main_window_toolbar_hbox_outer");
      GtkWidget *sidebar    = widget_from_builder("main_window_vbox_inner");
* Done.

quick-save needs some visual feedback. Make an overlay that is displayed for a few seconds.
* Done.

difference map peaks panel is a bit too thin when it first appears.
* Done.

symm-shift-reference-chain-here doesn't work for tutorial modern
* Done. Rewrote the symmetry atom search.

read in many pdb file (ligand res-tracer results)
   Now click on "Last Only" - it doesn't unclick the checkbuttons.
   (Note that the "All" button does)
* Done.

configure should not use --with-enhanced-ligand-tools
* Done.

Get rid of #ifdef WINDOWS_MINGW in map_fill_from_mtz() in coot-utils
   use std::filesystem?
* Done.

delete seq-view-interface.c/h
* Done.

get rid of trackball.c - there is a compilation warning - use glm instead.
   Actually, I am not sure that I even use it now.
* Done.

Fix state file quick save as.
* I couldn't reproduce the problem

rename coot-lsq-types.h
* Done.

Add sequence assigment (e.g. the helix hormone 7vvl).
* Done.

SYMINFO problems in CCP4 build of coot? (No symmetry shown)
* Done.

When I use Shift-W to change the contouring map, then the Scroll button should change in the Display Manager also.
* Done.

Get ligand PDBe needs to be depythonized
* Done. Yay.

Colour-by-molecule shows big balls
* Done

Add read_coordinates() to the read-molecule.hh api.
* Done.

Draw Hydrogen Atoms checkbutton in Bond Parameters widget is broken - try running run-servalcat-32143.py
* Done.

Test that the bonds and atoms are being added just once for the bond generations - when trying to fix the
colour-by-molecule bonds, it seemed that there were multiple adds. Hmm.

check that ccp4 coot can load the metal distances table.

Coot: Residue Info dialog needs a cleanup. graphics_info_t::output_residue_info_dialog()

From watching https://www.youtube.com/watch?v=mDwMUH181-s
  o Find a molecule with a chunk of RNA
     build hunks, refine and merge fragments
  o Assign the sequence

Talking to Martin Maly: OEX CA1 is in the wrong column when reading external distance restraints: 4ub6.

How do I read in external distance restraints in new coot?

Line 6952 in do_colour_by_dictionary_and_by_chain_bonds_carbons_only() add_atom_centres() - comment this
   out and look at the model. See that many (not all) of the bonds have end-caps. e.g. in TYR ring.

Add lsqkab superposition to the api

fix the double read of the monomers (there is only a single read in --no-graphics mode).

Use 2DT dictionary for link and refinement - George.

Fix the double read of the monomers (there is only a single read in --no-graphics mode).

coot: setup updating maps then delete the maps and models - gracefully turn off updating
   maps - currently the timeout function writes a error message, but does not stop.

I want to scale the rotation angle per pixel - for use in wide-screen mode (or apply it automatically in wide-screen mode)

Look at 8tv1: 39E and Refine it across the break. Looks at 8TV1 in cif in colour-by-chain mode.

Look at this: 7h6j group for CFC
https://www.rcsb.org/search?request=%7B%22query%22%3A%7B%22type%22%3A%22group%22%2C%22nodes%22%3A%5B%7B%22type%22%3A%22group%22%2C%22nodes%22%3A%5B%7B%22type%22%3A%22group%22%2C%22nodes%22%3A%5B%7B%22type%22%3A%22terminal%22%2C%22service%22%3A%22text%22%2C%22parameters%22%3A%7B%22attribute%22%3A%22rcsb_entry_group_membership.group_id%22%2C%22negation%22%3Afalse%2C%22operator%22%3A%22exact_match%22%2C%22value%22%3A%22G_1002294%22%7D%7D%5D%2C%22logical_operator%22%3A%22and%22%7D%5D%2C%22logical_operator%22%3A%22and%22%2C%22label%22%3A%22text%22%7D%5D%2C%22logical_operator%22%3A%22and%22%7D%2C%22return_type%22%3A%22entry%22%2C%22request_options%22%3A%7B%22scoring_strategy%22%3A%22combined%22%2C%22sort%22%3A%5B%7B%22sort_by%22%3A%22score%22%2C%22direction%22%3A%22desc%22%7D%5D%2C%22results_content_type%22%3A%5B%22computational%22%2C%22experimental%22%5D%2C%22paginate%22%3A%7B%22start%22%3A0%2C%22rows%22%3A25%7D%7D%2C%22request_info%22%3A%7B%22query_id%22%3A%22013bcc94f855676ceb39950f4002bdf1%22%7D%7D

Jakub: Sharpen-blur "Computing..." dialog should be an overlay. It's Python though - so... urgh.
  Move it all into C++.

Jakub: Downloading map (from EMDB) dialog should be an overlay... Likewise, probably.

Need a graph infrastructure to display Q Score results.

UI for turning off dark mode.
* Tried. Doesn't work. Function only works on startup? Maybe I am missing something.

Residue->2D on a protein residue without an OXT. Better GUI feedback needed. Low priority.

Investigate NCS ghosts usage in a ribosome after updating the model.
* Tried. I don't see the problem.

Check email for build-script updates/fixes

Add Q-score to api
* Done.

Non-trivial C++ Mini-Projects
 o Splines for Worms view (B-factor or sequence conservation mode)
 o Add SSBond to struct con info in mmdb
 o Parallel FFT
 o Faster/better/modern contouring
 o maybe https://github.com/CGAL/cgal/ Surface Mesh
 o Improved side-chain typing
 o Add gesamt to moorhen and coot
 o parser for PISA output (maybe Python will do)
 o Filled bases for DNA/RNA
 o Is this useful? https://github.com/CGAL/cgal/ Surface Mesh
 o Use VTE for a Python console
 o Get CFC working again (needs C++ clustering)

Non-trivial C++ Projects
 o Improved ligand fitting with machine learning
 o Show that crankshaft works - one part of the problem here is get get/make
   many problematic models.  The other is making the algorithm more robust
   (fix side-chain addition, for example). See the CaBLAM paper for some
   problematic structures.

Is 0-coot.state.py a good file-name now that it's in ~/.local/state/Coot ?

How to set the step size for mouse scroll?

Check Curlew uses XDG base correctly.

Check backups use XDG base correctly.

Write a patch for clipper "no symmetry lookup" for grid coords

Get Screenshot png working

Add a function: Are the ligands consistent with the ligand dictionary (has atoms that are not in the dictionary)

PAE svg without cairo? So that we can pass the fractions-through-the-sequence.

Put the reference PDB files in the coot repo.

Unfix all atoms doesn't work.

Can layla read and write dictionary cif files?

Header information from gemmi to mmdb for api header_info

Get reflections for COD accesion codes and make a map.

libcootapi/moorhen: Get the title, journal, authors from the cif file by transfering the info
   from gemmi structure to mmdb manager. Then do secondary structure.
   Put this in its own file coot-utils/gemmi-convert.cc

Hydrogen bond Bug: 7h76 ligand B206 : pink (H-bond) between ligand O and A8 O should not be allowed
by geometry (it goes backwards) or chemistry (they are both acceptors). Is this in Coot too?

libcootapi MoleculesToTriangles:
  o No secondary structure (worms)
  o Input secondary structure
  o Calculate secondary structure

when starting graphics on Mac: use 1508 x 1364, rather than the current narrow values.

chapi.__version__ should be a thing (Martin)
* Don't see how
set_ligand_water_to_protein_distance_limits() needs to added to nanobindings
* Done.
water baddies is missing from nanobindings too.
* Done.
add user-control over level for deleting waters.
* Done.
add_waters should return the waters that have been added.
* Meh - OK.
What about the b-factor variation of added waters that Coot now does?
  - That B-factor is applied, it seems.
* Done.

libcootapi: add a function to add an atom at a particular position.

despeckle tomograms:
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC10336597/

Coot: https://github.com/pemsley/coot/issues/138
* Done.

Coot: shadows don't work on Ribbons/M2T objects

Coot: Get servalcat working - and difference maps - so it can be added to the Trieste talk.

libcootapi: Reverse the order of the colour rule check for gaussian surfaces.
   Don't overwrite the colour rules when they get added (reverse the recent change)
   String matching the colour rule is not good - what about the rule
   "//A,B" "red"?
* Done/sorted for now.

Oxygens and nitrogens should be made transparent if the colour rule (selection) would
make them transparent if it could.

Getters for M2T_updateFloatParameter and M2T_updateIntParameter
  What things can be set? Post in pumble.
* Done.

Coot: 1: add a button for "difference map" in map reading dialog.
* Done.

Coot: 2: merge Jakub pull request
* Done.

Coot: 3: fix the build to make coot-bin again but MacCoot on macOS.
* Done.

Coot: 4: add material manipulation api for mesh of generic objects

libcootapi: try the other slurped map filling algorithm.
* I tried - couldn't get it to work.

Coot libs: "thread fill sections" - is debugging I think - get rid of it. But try the
   new method first.

Coot: what did Oleg say about AlphaFold3 PAE?

Coot Bug: turn on rotamer restraints, turn on torsion restraints - has the trans restraints been removed?
   (noticed in refinement branch)

Coot: add something so that I can look down the axes - particularly z.

Coot: add a means to say that P1 maps can have symmetry:
   https://github.com/pemsley/coot/issues/67

Coot: look at the 2b0m flavin ligand interactions - diego where it looks like a hydrogen bond.

Coot: "Close" button doesn't work in Restraints editor.

Coot: NCS jumping doesn't work. Test with 4ole - Andrey

Coot: do_edit_replace_residue() get rid of the python/scripting
* Done.

Coot: state file user-input dictionary in state file:
    coot.read_cif_dictionary('"/Users/pemsley/Desktop/thierry/TST.cif"')
* Done.

Coot: no coot prefix in map saved in status file coot.handle_read_ccp4_map
* Done.

Coot: we have meshed_generic_display_object::add_point(). We want meshed_generic_display_object::add_points()
  Say for example the bendy helices project - many points means coot is slow to start up.
* Done.

libcootapi: Molecule2Triangles: the bases are inside-out relative to the ribbon.
* Done.

moorhen: 8hcl F chain negative numbers for residue range doesn't work it seems?

Coot: What do I need to do for each of FLEV, CFC and QED? Do it soon.

   QED:  ..?
   FLEV: Does this need to be in Layla? I think not, in fact. Goocanvas stuff will
         need to be converted to Cairo. And I can display the cairo surface like I do
         in the positron interface.
   CFC:  Needs a C++ clustering algorithm. Before I used Gaussian mixture model - maybe that will do.
         Needs to be available in Moorhen.

libcootapi: disconnect updating maps.

libcootapi: Use BOND-BY-DISTANCE when bond-by-dictionary-and-chain fails.

libcootapi add_colour_rule(): needs to parse #aabbccaa as a colour
* Done.

libcootapi: header info? a map/dictionary of info? Title at least.
* Done.

Coot: Pull in Bernhard's Rama plots
* Done.

"I didn't merge the SO4" - more than once in the tutorial - delete it after you've jiggle fitted it.
* Done.

Coot: I want a slider to scrub through the map molecules in positron interface.
      It would be good if this scrubbed the fitted models too (models need to be fitted first - haha)

Don't allow FLEV if the protein doesn't have hydrogen atoms. Provide a button to do it.

libcootapi: import glTF (from Mol*, say!)

ligand fitting tutorial - turn around the tail of the fish so that it is the wrong way
and look at the environment distances - the O-O interaction should not be purple!

Coot: generic objects are not drawn with depth fog

Coot: update molecule when input model file have updates?
   set_update_model_when_file_updates() - only for unmodified models of course.

mmdb: atom selection with alt conformer - write a test and fix mmdb.

Coot: Why do we need requests? Can't it be done by libcurl or internal python module urllib?
      See fetch_drug_via_wikipedia() in coot_utils.

Coot: rsr_refine_all_atoms() only refines the chain
* Done.

Coot: (refinement) martin maly bug: transpose map by lsq superpose failed.
      Bring the lsq map function to libcootapi and chapi
* Done

Coot: I want to be able to add a DNA base to the end of a fragment, with or without density.
      (Restore functionality).
* Done.

Coot: 4qpq: It is making DNA base pair restraints as I hoped?
* Seems so from the behaviour, but I don't see it in the terminal

Coot: Ribbons mode needs (an option?) to add ligands 6zxa.cif

Coot: for sound, look at tw/cootsound.c

Coot: on the command line, coot --dict thing.cif should give a molecule, not just read in the cif
      if there are no coordinates arguments.

Layla: Garib: I want the ability to change charge and bond orders.
    Also: See this: http://rdkit.blogspot.com/2019/11/introducing-new-rdkit-javascript.html
    which points to this: https://rdkit.org/rdkitjs/beta/demo.html

Test ligand fitting of fitligand binary. Using conformation variation and not.

libcootapi: what do we need to get flev working?

libcootapi: give me tautomers of this molecule/ligand.

chapi: what about bringing servalcat into the chapi installation? And to build-it-3-3?

libcootapi: in protein_geometry add a function something like
   duplicate_dictionary_for_other_molecule(int idx_rest, int imol_other)
   so that dictionaries assigned to a particular molecule can be used by other molecules (e.g. in dragged refinement).
   The molecules_container api will be duplicate_dictionary_for_other_molecule(comp_id, imol_current, imol_other)

libcootapi: when generating conformers, throw away the conformers that have many nbcs (don't do minimization)

libcootapi: move secondary structure header info int SSEs of residue (does this function exist already?)

libcootapi: remove the sphere test when generating map contours
 - Why?
 - Would it be faster to trim them afterwards?

libcootapi: remove static things in the molecules_container

libcootapi: make auto-fit-rotamer work without a map (if it doesn't already)

libcootapi: hydrogen bonds and other interactions to a residue?

Coot: Save Coords is not working again.
* It works OK, on mac, so I think that it's a GTK4 bug.

Coot: what does electrostatics give us now?

For next week: local resolution display in Moorhen

libcootapi: set_user_defined_atom_colour_by_selection() should not be given a vector of pairs,
  it should be a vector of triples (trivial class) { selection_string, colour_index, Cs-only-flag }

libcootapi: what happens when the ligands don't match?

libcootapi: put gesamt into the build (build-it-3-3)

libcootapi: change the SSM arg order to match ligand function: moving first.

libcootapi: to release std::vector memory use std::swap on an empty vector, not mere assignment

libcootapi: add function for delete by B-factor or plddt - limit goes both ways

libcootapi: bring in transpose map by lsq superposition

libcootapi: check the return type/value of match_torsion_and_postion()
* Done. It's not clever.

libcootapi: non-carbon rules should be per rule not per molecule

libcootapi: environ distances are not symmetry aware - they should be. Q: are they in Coot?

libcootapi: /Users/pemsley/Projects/Moorhen/checkout/coot-1.0/api/add-terminal-residue.cc:9:9: warning: 'HAVE_BOOST_BASED_THREAD_POOL_LIBRARY' macro redefined [-Wmacro-redefined]

libcootapi: delete all the molecules that are closed at the end of the list (delete, not close)
* Done.

libcootapi: to release std::vector memory use std::swap on an empty map, not mere assignment
* Done

libcootapi: make minimize_energy() return a mesh, like std::pair<int, coot::instanced_mesh_t> refine(int imol, int n_cycles)
 does. And the GSL return status.
* Done

libcootapi: nice to have position restraints for ligand+env minimization

libcootapi: are backups being made by refine()?. If so, turn them off - maybe backup at start?

libcootapi: before Newcastle: torsion match ligand and ligand graph-based superposition
 * Done - but needs more work

libcootapi: the apply colour rules to non-carbon atoms need to happen on a per-colour-rule basis, not per molecule.
  so that ligands can be set a different colour in Goodsel mode - and goodsel mode plays nicely with other colour rules.

libcootapi fix the apply_user_defined_atom_colour_selections() so that it uses atoms, not residue selection.

libcootapi: remove ligands and waters

libcootapi: renumber residue range

libcootapi: make an ensemble from a list of molecules

M2T: /Users/runner/work/coot/coot/MoleculesToTriangles/CXXSurface/CXXSurface.cpp:356:5: warning: 'sprintf' is deprecated: This function is provided for compatibility reasons only.  Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead. [-Wdeprecated-declarations]
/Users/runner/work/coot/coot/MoleculesToTriangles/CXXClasses/CompoundSelection.cpp:283:13: warning: 'sprintf' is deprecated: This function is provided for compatibility reasons only.  Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead. [-Wdeprecated-declarations]
  And others.
* Done.

look at every HIS in the PDB, look at the difference map - looking for hydroxy prolines

findwaters: can the output file be mmcif? - Eugene

findligands: can the output file be mmcif? - Eugene

libcootapi: create_n_empty_molecules() so that molecules indexes match
* Done.

libcootapi: draw bonds from struct_conn info.

mmdb: add SSBOND information into a struct_conn object - read and write.

Add test data test-molecules-container 6gdg.cif emd_32143.map ATP.cif G37.cif 1phk-with-gap.pdb
   moorhen-tutorial-structure-number-1-with-gap.pdb 203d.pdb.gz weird-orientation-tut-4.pdb
* Done.

Install the ui files from a relative directory, not relative to package_data_dir()
Likewise the standard residues.
# no need. Just setenv COOT_DATA_DIR

Coot: edit_chi_angles_reverse_fragment_togglebutton is missing
* Done.

Coot: environment distances (when turned on) are shown when sliding (to the next water), but
not when jumping.

chapi: make overlap information available

Coot: add a warning when trying to save a PDB file with a 5-char residue/ligand

libcootapi: draw links from struct conn information in a mmdb::Manager.

validate that the seqres record match the residue type. (Editing the seqres is another thing)

chapi: test refine_residues_using_atom_cid() with "sphere" - for Paul Bond, this causes a crash.
* Can't reproduce in test-molecules-container.cc

libcootapi: can I make a nanobinding that returns a minimol residue, and another for atom?

libcootapi: turn_off_backups(imol). This needs some infrastructure work. Add something like
   really_do_make_backups_flag to coot::molecule_t - and that is set by the above function call.

libcootapi: bus error on change_chain_id - reported by Filo, I think. Is on Moorhen Project board?

libcootapi: add mini-rsr to the CMake build
* Done

libcootapi: fix the link problem from Andrey
* Hopefully done.

libcootapi: CMake should check for dw and elf

moorhen: void atom in mmdb mmcif output.
* Stuart saw the problem in mmdb - not acted on yet.

moorhen: search monomer library for ARG with methyl (for example)
* This presumes that the monomer library names are available.

libcootapi: bring regularization to the api

libcootapi: add a mc function to set_rotamer_tables_compressed_data()
* Needed? Why not read a file, like read_ccp4_map() does?

libcootapi: (?) bundle the reference structures into the source code.

libcootapi: fix the oversized MG atoms in Goodsell mode 1ttt
* Done.

libcootapi: can set_user_defined_bond_colours be passed RGBA values?
* Seems not. Why not though?

libcootapi: add label_seq_id etc for the residue added in add_terminal_residue

libcootapi: add refinement control parameters to molecules_container,
       torsion weight, rama weight, gm weight and whatever others.

libcootapi: how do I turn on Rama refinement?
* Done.

libcootapi: work out the arguments for MT2 mesh as glTF.
* Done.

libcootapi: add a function to copy a map (and a model molecule I guess) for figure making.

libcootapi: replace_molecule_by_model_from_file() should be passed the use_gemmi argument.
            and remove use_gemmi from the coot_molecule class.

libcootapi: See Filo pull request and write a c++ test-molecules-container test for glTF.
* Done.

moorhen: SMILES: nitrobezene svg ligand rep - charge position size offset of the + and - needs
  to be fixed.

libcootapi:
  get rid of #define HAVE_BOOST_BASED_THREAD_POOL_LIBRARY in add-terminal-residue.cc


Coot:
  WARNING:: Error reading /home/paule/Projects/coot/git/coot-main/build-with-modern-gtk4/src/emd_32143.map
  Read map /home/paule/Projects/coot/git/coot-main/build-with-modern-gtk4/src/emd_32143.map failed

Coot: why didn't Fetch Molecule/Drug "Kisqali" work?

Coot: on a rainy day: remove the static GtkWidget *dialogs.

Coot: check the spin speed in Edit Chi Angles on a trackpad.

Coot: does single-model-view work?

Coot: on ligand fitting, use conformers and get "no ligands selected" dialog

Coot: Add "Scene Preset" -> Model Building, Figure Making. Test Perspective also

Coot: colour-by-molecule has big atoms - why? Fix.

Coot: Fitting ligands "Installing Ligand Conformers" dialog should be an overlay

Coot: on fitting ligands, I get a dialog "WARNING:: No ligands were selected"

Coot: Fix this in pyrogen Makefile:
      SWIG_FLAGS = -DSWIG -DCOOT_USE_GTK2_INTERFACE
      Is -DSWIG already on, because it's parsed by swig?
* Done.

Coot: set_colour_by_chain(0) has missing name space in 0-coot.state.py
   "coot" is being added to display_strings, not active_strings?

libcootapi: what are the headers? Including Remark records?

libcootapi:
   //! generate GM self restraints for the given residues.
   //! `residue_cids" is a "||"-separated list of residues, e.g. "//A/12||//A/14||/B/56"
   void generate_local_self_restraints(int imol, float local_dist_max,
                                       const std::string &residue_cids);
   Make this use "normal" multi-cids
* Done, I think.

moorhen: reading a map often the default (first) contour level is too low.
e.g. the map of 8ox5. Lucrezia to investigate?

moorhen SMILES: nitrobezene svg ligand rep - charge position size offset of the + and - needs
  to be fixed.

libcootapi:  get rid of #define HAVE_BOOST_BASED_THREAD_POOL_LIBRARY in add-terminal-residue.cc

libcootapi: look at merging 7ZTVU (or whatever it was) into a cif file. Look at the output cif for
   ligand: atom_site seq_id.
   Merge a ligand with a long ligand name into a molecule from a PDB file, then try to refine the ligand.

CMakefile/libcootapi: add findligands and findwaters to CMakeLists.txt - Charles

findligands: try with 5-char ligand in 1cxq and write a cif. Eugene says that it fails. Does it?

Nice to have: add a SSBOND to a PDB or cif and it does the check that the residues are there and adds the record.

ligand figures from the chem_comp_atom_depiction_t
* Semi done, need to work in the Coot part also.

MMDB: Look at mmdb chain selection. Can you remove chain range?
      chain-id range test: Look at assembly cif for examples of chain-range-like chain-ids.
      Use one of them for an atom selection test.
      Tweak ParseSelectionPath().

For Moorhen and Coot screenshots: OccuPy for 8p5e/17449

libcootapi: dependencies clipper:
   $ egrep ' -L=/' $prefix/lib/lib*.la
   Needs fixing. Configuring and building clipper solo, the la files do not show this problem.
   But they do from the build-it-3-3 script? (needs testing from fresh).

libcootapi: #include <GL/gl.h> in CXXSurface/CXXVCN.h - remove it if you can.
* I can. Done.

libcootapi: return a double (ms) test_the_threading(int n_threads)
* Done.

libcootapi: Have a look at this when compiling with emscripten
   #ifndef __NVCC__
   #ifdef HAVE_BOOST
   #define HAVE_BOOST_BASED_THREAD_POOL_LIBRARY
* Done.

libcootapi: Bring HOLE to the api - and possibly map carving.

libcootapi: cif parsing: let's have the acedrg version of gphl_chem_comp_info

// This needs a look. When did I comment this out? And why?
ligand/residue_by_phi_psi.hh:// #define HAVE_BOOST_BASED_THREAD_POOL_LIBRARY
Can I use residue_by_phi_psi multi-threaded?

Moorhen: Ligand fitting return a triple of the cluster index, the ligand index and the molecule index.
         Ligand solutions have the same position + orientation with even without conformers!

Moorhen: Set a flag for contouring timers. Add them, store the result, and use the flag to get the times.
         Does the contouring write any output? If so, remove it.
* Done.

Graphics: tap, tap tap, tap tap tap left-quote for residue, chain molecule.
* Done.

Graphics: pdb4nia
          coot.set_model_molecule_representation_style(0,1)
          Mg atoms are massive (too big)
* Done.

GUI: Open Coords dialog, Move molecule here doesn't work.

GUI: add_alt_conf_py(0, "A", 1, "", "", 1) goes interactive. It should just add.

GUI: Read in an mtz file (rnasa fails) and set this map is difference map - this gets ignored.
* Done.

GUI: Search Monomer Library dialog should be an overlay - Job for Jakub.

GUI/Graphics bug:: why are there no labels for 7dy0.cif? Also, it seems very laggy.

GUI/libcootapi: check that DNA is correctly mutate to DNA bases in the Mutate Residue Range gui (do non-gui
    fixes in coot-refinement). Use pdb6pww P chain.
* Done.

GUI: Mutate Residue Range GUI: Match counts doesn't work correctly

GUI: Validate -> Atom Overlaps doesn't work.
Yeah it does.

GUI: Edit -> Settings -> Save current size and position doesn't work.

GUI: save the state and look at the resulting state file. The functions need "coot." module name

GUI: warn user if they have a PDB files and merge in a 5-char ligand. Likewise in Moorhen.

Moorhen: Add a test for multi-threading. Normals of a Gaussian surface?

Bug::? in moving atoms mode centre of 89A sidechain density press e for auto-fit rotamer - I get red rings. Why?

Bug:: Preferences Others Fonts - the Atom Label Radiobuttons are not correctly lit.

Bug:: Missing popup menu in Rigid-body fit toolbar button.

Bug:: if rdkit has not been installed then it should fail in configure
      not when building lidia-core

Bug:: the dialog for selection of column labels from an mtz file is broken,
      can't assign weights, can't assign Fobs.

Bug:: Missing GUI: Rigid-body fit Residue Ranges
* Done.

Bug: 7adk peptide omega plot "" chain is empty. Presumably a libcootapi problem.

GUI: Look at the terminal output when using the Preferences dialog. Is it all needed?

GUI: Difference map peaks are appeaing in the wrong asymmetric unit (it should be
     around the protein, but it seems not).

GUI: Zoom does not change on Playing Views.

GUI: Symmetry by molecule: removed from UI. Buggy. Needs a fix.

GUI: Does "Fetch PDB & Map using EDS" work with Updating maps?

GUI: When I Open Coords I have a option to choose filter to coordinate files.
     When I Auto-open MTZ I dont have a option to choose filter to mtz files.

GUI: Geman-McClure alpha refinement params box menu doesn't show the correct value.

GUI: Update the validation box when "flip peptide" button is pressed.
     Does the updating map update in this case?

GUI: Add a Cryo-EM menu item for solidify maps (currently in coot_gui.py). Don't use python.

GUI: Ctrl-A, Ctrl-E in the python command line

GUI: easier way to set default b-factor: set_default_temperature_factor_from_median()

GUI: If python command fails, I want to somehow see that it failed.

GUI: Rotate/Translate <fragment> doesn't work.

GUI: see a validation graph (geometry) with one chain (e.g. A chain fragment from tutorial-modern).
     The residue labels were getting chopped in half.

GUI: Renumber residue range on a molecule that is not the first molecule ::: 0.6

GUI: Replace-residue is missing. Needs a UI. Make it an overlay.

GUI: Needs a "Trackpad Mode" button in the UI. It should have a "save this mode" button also.

GUI: Fetch Alphafold model that is closest to the sequence of this chain.

GUI: copy fragment dialog doesn't make active the first molecule, but save coordinates does.
     Do the same thing.

GUI: Cryo-EM module: Add Toggle switch for auto-recontour map

GUI: Add curmudgeon-mode ("Particles and Textures Off") in Preferences dialog.

Graphics: Don't draw rama ball when intermediate atoms are from edit chi angles (and some
   others presumably).

Graphics: Check that the Gaussian surface is being displayed before drawing it for the
   SSAO frame-buffer.

Graphics: Fast slide to new position on reading in a new molecule (there is a distance limit
   that means there's a jump - don't use that for read_pdb()).

Graphics: Try Quick save as on a mac and restore settings - the graphics window size is wrong.

Graphics: Don't draw rama balls when intermediate atoms are from edit chi angles (and
          some others presumably).

Graphics: Rigid-body refine the tutorial A chain. It used to display an intermediate
          atoms representation. What happens now and is that what you want?

Graphics: I want to be able to click on the red spots in the "in window" Rama plot.

Graphics/API: give user access to the Gaussian surface parameters.

Graphics: I'd like to be able to move through/select rotamers in moving-atoms mode
          [idea from TC video]

Graphics/libcootapi: write a function to convert a simple mesh to a type-B instanced mesh with
          matrices from BIOMT records.

Graphics/GUI: Martin: Does the Rotate/translate work around the centre of the fragment?

Graphics: Bug: 7dy0 all-atom B-factor - the colour range goes too far (into purple)

API: add rigid_body_fit_chain(imol, chain_id) to the moorhen and coot apis.

Moorhen: gzip the rota and rama data that is part of moorhen.data (wait for Stuart)

Moorhen: gzip the starting (protein) cif files that make up moorhen.data (wait for Stuart)

Moorhen: Change chain ID

Moorhen: Renumber residue range.

Moorhen: what is the HB type of this atom?
* Done.

Moorhen: colour by conservation (bond/atoms). How about surface?

Moorhen: Export dictionary as string
* Done.

Moorhen: ligand fitting: check the ligand size to blob size. tutorial 1 ligand in the major
         site - there is no conformation variability.

Moorhen: replace fragment: does it take the vertical bar?
         https://github.com/moorhen-coot/Moorhen/issues/13

Moorhen: does get_bonds_mesh_instanced() take the vertical bar?

Moorhen: Export input dictionary as string (needs to store result of file-to-string)

Moorhen: Request: electrostatic surface. What happens when you put the charges
         on a Gaussian surface?

Coot and libcootapi: add a function to delete atoms by cid and another to delete alt-confs.

libcootapi: Add merge fragments (low priority)

Libcootapi: Make the CMakefile install chapi
* Done

Libcootapi: Make the CMakefile install findwaters and findligands
* Done.

Libcootapi: add lib for gesamt

Libcootapi: from ligands meeting: Note to self: pdb header information:
        CAVEAT, from Gemmi to mmdb.

libcootapi: bring conformer generation to the api. Do energy minimization and discard the
     high energy conformers

Fun: flattening difference map peaks animation:
        find peak and negative peaks in the
        current diff-map - previous diff-map difference map
        Use those peaks for particle animation.
        Make a moorhen function for these.

Fun: Add pops.

Science: Load JSG.cif from the RCSB and Get Monomer, run acedrg and load the the dictionary.
     Some of the Hydrogen atoms get disconnected on regularization.
     Why? (Note that the "Get Monomer" from the acedrg dictionary works OK - no flying Hydrogen atoms).

Science: Get the Cryo-EM servalcat difference map working

Science: analytical gradients for Gaussian surfaces

Science: Make a exponential_approx function that uses a pre-calculated table
         and use it to make smooth normals for the vertices of a gaussian surface.
         Extra points for multi-threading.

Useful: multi-thread the rmsd calculation, so that the Coot points
        calculation in cryo-EM maps is fast(er).

Science: middle of blob for EM jiggle-fitting, try 3908?

Science: "One button" post-jiggle fit "black box morph refine"
   o Make GM restraints,
   o blur
   o set tight restraints alpha
   o Refine
   o Lessen GM restraint alpha
   o Lessen blur
   o Refine
   Tricky thing is to find interesting cases.

Science/Useful: Calculate the RSR contact dots only for atoms with in ~12 A (say) of the
   centre of the screen.

Fix this in api/coot_molecule_maps.cc: Test N-threads in Moorhen:
// 20221126-PE set this for now. When it is restored, jiggle_fit_multi_thread_func_1 and jiggle_fit_multi_thread_func_2
// will need to be transfered.
// It is set (not configured) in ideal/simple-restraint.hh
#undef HAVE_BOOST_BASED_THREAD_POOL_LIBRARY

cif parser fail for 6eoj from the PDBe - display as CAs.
* set_use_gemmi_as_model_parser_xxx(1) fixes it

Moorhen: Request: electrostatic surface. Map electrostatic potention on to Gaussian surface.

Reading cif file with --pdb ~/Desktop/ejd/thing.cif seems borked (no file in file browser)

Cryo-EM -> Mask Map by Chain for 7vvl.

GUI: Quick save as should save the shader settings

GUI: Rigid-body refine the tutorial A chain. It used to display an intermediate atoms
representation. What happens now and is that what you want?
I want to add a notification where the "Coot Points" currently is.
If it moved then tell me previous fit score and current fit score.

GUI: Fix the undo molecule chooser (have 2 molecules with edits)


---- older issues ---

Auto-centre the user-suggestion for the centre of the blob when using
jiggle-fit. c.f. "Place Helix Here" initial centering.

Typical example of "what to do?"
  - Filo has been trying the Coot EM tutorial in Moorhen and finds some problem with
    "jiggle fit" - this is an interesting scientific problem - how far can you be away
  - Bogged down in tracking events and model coordinates and mesh and drawing updates
    for rotation/translation
  - Chatting with Jakub about Shortcuts but making no progress

Ribbons don't cast shadows.

No reaction to Aligment vs PIR (no PIR was loaded)

Size and user-defined "screen axis" displacement of atom labels, e.g. [0,0,5] to bring
the label towards the camera.

Issue 67:
On reflection, I will add a function that allows the user to override Coot's attempt to determine the EM-state of the map.

Layla: make python setup be available for Coot and Layla - put it in its own directory. So that layla
is not linked with src files.

Rob's problematic links
* Need details.

startup with default map opacity.

Jakub: sugar representation in RDKit and layla? (add it?) Tricky.

Where is Make Link? ::: 1.5
* Needs user-defined click click. Just do it in C++?
* Note that Make Link via Acedrg also needs user-defined click click (or a rewrite).

Colour rules (like Moorhen) need to be added to the Coot API.

Rewrite moorhen ligand fitting to use a vector of threads, not the thread pool.
* Low priority

Pyrogen needs to work ::: 2

Greg Crichlow cifs

Fix build for St Judes Walid

2koc: do a Coot contact dots analysis on it.

Try using the instanced bonds using the api. Fix the specular lighting.

Test the conversion of glm quaternion to coot quaternion and back again. OK, done.
Test are in place. Now try again with the ligand orientation.

What about coot --no-graphics?

What about coot --version?

Fix crash on coot.coot_real_exit(0)
OK, so framebuffers are being deconstructed after call to exit().
It seem that framebuffers need to be deconstructed while the GL context is valid.
So it seems to me that they should be deconstructed as graphics_info_t is deconstructed. So add
their teardown() functions to ~graphics_info_t(). That prevents the crash I think.
However, the init_joey_ssao_stuff() are not initializing SSAO-gBuffer-framebuffer and effects-framebuffer
it seems. Yet they are being bound somewhere. Investigate further later by turning on fancy mode.
See partial-patch-for-framebuffer-teardown.patch.
Now I will revert.

Put the gtk version in the build_type? Currently Linux-x86_64-ubuntu-21.10-gtk4

I want to be able use "Fancy" shader path, but not use SSAO.

Rotation in Proportional Editing

Do we get Diegos for bad backbone neightbours O3' bumping int 05'? We
would need them for validating RNA backbone torsions.

Colour by chain (and dict?) but not by atom - i.e. how colour-by-chain used to work. This gives us
a nicer representation of ribosomes.

Use a state script for 2 model molecules - the first of which is undisplayed. The display manager
doesn't show that it's undisplayed ::: 0.6

Restore the draw() function in draw_ghost_bonds() in molecule-class-info.cc - needs a new class to do so.

In Moorhen, it's nice to work with the contact dots on. When I improve the fit and remove a clash, I want
to see something like the Moorhen points (but for the clash score, of course).

Make auto_read_mtz return the column labels - for Moorhen.

Updatating difference map for cryo-EM using ServalCat.

---- "Do they need to work?"/"Nice to have one day" items -----

locscale map viewer: colour map by other map?

Get an example of images->map from takanori and check that it works well in Coot and in the tomogram image mode

Find 3-10 helices and make restraints. Max Perutz wrote the first paper.

Nice to have:
"Resample map (say 11337 to 2.2) It takes a long time. There should be a progress bar.

Rework the namespace of the python modules to be more cannonical :::- 4
* I don't even know if this is possible
What does it mean to
import coot
import coot.utils?

User-defined sf for distances.

A cancel button on the Download EMD map progress bar dialog

NCS Jumping should use the correct matrix :::- 0.5
l28. Tried and failed. Test the conversion of glm quaternion to coot quaternion and back again.

Nice to have: Write a script that finds functions in glade-callbacks that are no longer used
(i.e. not in coot-gtk4.ui)

Nice to have: Unmodelled blobs are labelled with the residue to which they are closest.

Nice to have: 1E9 is not correctly horizontally adjusted.

Nice to have: Eleanor: (maybe not for here): How do I find the peaks of this map?

Go To (next) Ligand should use the correct matrix ::: 0.5
perpendicular_ligand_view() is the function. Does it work in gtk3? No.
* Tried and failed. Need to check conversion of quaterions between coot::quaterion and glm::quaternion.

Notes: GTK4 is needed for Vulkan and Vulkan is need for AMD FidelityFX Super Resolution and Nvidia thing (name?)

Alt-B (or Ctrl-B) to close the Validatin/Rama bar.

Make info_dialog() take a string.

Contact dots should be oriented so that when they pulse, they move along the line between the atoms. :::- 1
Also, elongate them? Not vdw dots though.

Sort the triangles so that the difference map looks OK in plain mode. Maybe this should go
above the line?

Nice to have: on a grey background, atom labels work well, but the distance labels do not.

Low Priority: history searching on python window up-arrow :::- 1

Think of a way to start-up with certain modules on (in Preferences) :::- 2
* Nice to have, not vital. Use the command line in the meantime.

Enable the command line (e.g. --pdb and others) :::- 2
* It's actually not clear that I need it!

Find a home for New molecule by sphere :::- 1

Find a home for New molecule by symmetry op :::- 1

Add base paring: on_other_tools_base_pair_toggle_button_toggled() :::- 0.5

I'd like to put coot_utils into coot so that it's coot.utils, likewise coot_gui, fitting etc.

struct_conn in mmdb for links : how  does it work and can they be displayed?

How about "Both" surface and lines for maps? Extra "Both" radio button.

Download 7a0l (or anything) doesn't have (doesn't display) links when reading from an mmcif!
OK, but this is a mmdb problem not a GTK4 Coot problem.

A benchmark in Curlew? Or built-in would be better.

Unmodelled blobs should have an "Update" button :::- 1

Caps lock key indicator?

Coot contact dots updated on model modification

residue spec -> rdkit python object at the coot api

How to represent a "Both" chirial (ambiguous) (are they the same thing?)

User-defined menus in Python - connected via coot_main_menumodel.

Comboboxes with entries for old molecule, or duplicated entries.

Map Skeletonization :::- 4

CA Baton Mode :::- 4

Recompile molecule-class-info-widget-work.cc and remove the compilation warnings :::- 6
* There's a lot of symmetry and NCS stuff in there that needs a large reworking.

End-caps on the O half bonds on the HOHs in 7a0l.

Fullscreen - maybe not possible in gtk4 :::- 0.2

Map Properties window close button :::- 0.5
* I had a look. Not sure what internal-child="action_area" means.

New Mesh algorithms:
https://swiftcoder.wordpress.com/planets/isosurface-extraction/
https://www.sciencedirect.com/topics/engineering/isosurface-extraction

Low Priority: think how to put the "Display Manager" into the main window :::- 6

Low Priority: "Add hydrogens using Refmac" should not cause a lock up - give me a nice progress bar :::- 4

Low Priority: How can I make a flatpak for Coot?

Find somewhere for auto-weight refinement coot_utils.auto_weight_for_refinement()

Pointer distances:  It should be an overlay one day

Coot Info dialog:  It should be an overlay one day

Note: 7UMH is beasty that would look good rendered with colour-by-NCS-related chains (and vdw balls).

void HUDTextureMesh::setup_buffers() { ...
// std::cout << "::::::::::: HUDTextureMesh::setup_buffers() " << name << " vao " << vao << std::endl;
Turn this on and do a RSR, see that the Button Texture meshes have a new vao for each draw!  :::- 1
* It will do for now these are HUD text. One day rewrite, but not today.

Dotted Surface :::- 1
* This exists and it draws OK, but I don't see how to change the colour yet.
  Changing the colour is very tricky beacuse balls is not part of the coot::dots_representation_info_t
  class. Perhaps it should be? (see add_dots()).

Undo molecule chooser should be an overlay.

"Accent Background" - 1: replace the blank background with a texture. 2: Make a texture using the current image
and blur it either using a framebuffer or by FFTing the image, truncating it and back transforming it (that
would allow the manipulation of the phases so that the background could morph (that might involve pre-generating
a number of textures and interpolating between them). Also consider a blurred textured blue background so that
it looks like the sea.  Or use texture background while Refmac is running.

Low Priority: 3D Annotations :::- 3
Nice to have: 3D text - related to model bulding last time. Or markers in 3D which give us a nice overlay
text annotations.

RCrane - Make this a Module. Fixing this will take a long time. :::- 20

When adding a water "WARNING:: new atom addition blocked by nearby atom" needs a visual cue (red sonar)
on the atom that is blocking. :::- 1

Light Mode, Dark Mode, Automatic (tracks background colour) :::- 1
Put this in preferences.

Update Dynamic validation on making links (the NBC clashes should disappear)

7a0l colour by B-factor with fat bonds. Bonds to hydrogen atoms are grey and fat. :::- 5
Also, waters are too big. Also waters are too big in colour by molecule.
Bonds to hydrogen/deuteriums are too fat "Colour by Occupancy" and "Colour by B-factor all".
Bonds to deuteriums in HOH are too fat in (default) "colour by atom" mode.
(also affects gtk3 coot - so think about fixing it there?).
See "fat atom" commits.

How should the "model representation change" work? Ctrl Shift 2-finger scroll? :::- 0.5
* This is too complicated and estoeric to fix now. I don't even know how to fix it.

AWC chirality in the ring - wedge bond is pointing in the wrong direction? Nice example of sp2 Se-ring (not aromatic)


--- Done Items ---

Boot Python  ::: 2
* Done!

"Load tutorial model and data" should results in only one copy of the maps in the Display Manager.
(model is not duplicated) ::: 1
* Done.

Fix up the Display Manager - try isolating it and use Cambalache ::: 4
* Done.

Get Coot Python modules loading ::: 2
* Done

"Reset View" seems to have focus on startup. Make it be the graphics window. ::: 1
* Done.

Up and down in the python scripting window ::: 0.5
* Done.

Fix the go to blob function ::: 0.5
* Done.

Fix "Go To Atom" dialog ::: 2
* Done.

Fix "AutoFit Rotamers" button ::: 1
* Done.

Fix "Simple Mutate" button ::: 1
* Done.

Fix "Mutate & AutoFit" button ::: 1
* Done.

Fix "Sidechain 180" button ::: 1
* Done.

Fix "Add Terminal Residue" button ::: 1
* Done.

Fix "Delete" button ::: 1
* Done.

Fix "Undo & Redo" buttons ::: 0.6
* Done.

"Header Browser" is broken  ::: 0.5
* Done.

Make the Fast-go-to-residue dialog work. ::: 0.5
* Done.

Button icons ::: 1
* Done.

Get Python gui scripts communication working ::: 2
* Done.

Get PyGObject working with GTK4 (Not a Coot thing) ::: 2
* Done.

Make the "Fetch..." Functions work ::: 1
* Done.

Fixed Atoms click should show a menu, not a dialog ::: 1
* Done.

Get the Range button working (using new events) generic range define. ::: 2
* Done.

Add "Repeat previous zone" to refinement menu items. ::: 0.4
* Done.

Make the validation balls and dodecs less bright. ::: 0.3
* Done.

Make a "framework" program for validation for Jakub - make a list of generic residue validation blocks. ::: 4
* Done.

Display Manager - "Delete Model" button doesn't delete the "combobox" (as I called it) in the Display Manager ::: 1
* Done.

Display Manager - bond and colour selector is broken ::: 1
* Done.

Do some more experimenting with validation graphs ::: 5
* Done.

Fix the Pan/Ctrl-drag function ::: 1.0
* Seems to be done - I don't know how.

Does the show_updating_maps_chooser() work? In refinement branch even? ::: 1
* Don't know about refinement branch, but it works here now.

GUI: Unmodelled blobs dialog and the resulting blobs dialog. ::: 0.5
* Done. Nice.

New dialog for map masking ::: 0.5
* Done. Nice.

Get R/RC overlay dialog working  ::: 1
* Done. Nice.

clean out coot_gui usage from coot_utils ::: 2
* Done.

Validate -> Ramachandran Plot ::: 10
* Good enough.

Fix the Map Parameters dialog widgets ::: 5
* Good enough.

In the Display Manager, The "Delete Map" button doesn't delete the map row. ::: 1
* It does now.

Fix "Rotamers" button ::: 1
It just needs a bit of adjustment of the margins.
* Looks fine.

Get the "Map..." Button working. ::: 0.5

Can you make the rotamer dialog be an overlay? Not important. ::: 0
* No go to do this yet.

I think that one of the new buttons steals the focus from the graphics on startup now. ::: 0.5
* Done.

Key-binding for "clear all atom labels" ::: 0.25

Key-bindings in general ::: 1
May need revisiting.

Merge Molecules gui ::: 1.0
* Done.

Find Waters gui ::: 1.0
* Done.

Ctrl Arrow keys for ligand rotation and translation ::: 1
* Done.

"All" button in the Display Manager. Also the "Last Only" button. Maybe done in gtk3 merge? ::: 1
* Done.

Find Ligands gui ::: 3
* Done.

Coot Points in updating maps ::: 4
* Done.

Restart the refinement on button-release when dragging an atom ::: 0.5
call poke_the_refinement().

Difference Map Peaks ::: 2.5
* Done. Nice

Cell and Symmetry looks ugly - make it dynamic so the only button is "Close" ::: 1
* Done - good enough for now

Enable basic files on the command line ::: 4

Consider using double-click to do go to blob.  Where does "label atom" go then? Or how about middle-mouse on blob?
(pressing "G" on the keyboard is not intuitive). ::: 0.2
Double-click to recentre (G: go to blob) ::: 0.3
* Done. Let's see if I like it.

Draw -> Molecule -> Bond colours ::: 1
* A lot better.

How do I add a single water? ::: 0.5
* Added to key-bindings for now.  Take care to add it to the correct molecule though

When I am adding waters, don't let me add to the molecule if it is not displayed. ::: 0.2

File -> Delete Molecules dialog ::: 1
* Done. Nice.

Edit -> Residue Info: Fix up the dialog and toggle buttons ::: 2.5
* Done. What a grind. At least a 2.

Better/more completions and history in python scripting. ::: 3
* Done. What a grind!

Background colour ::: 0.4
* Done. Trivial

Pointer distances ::: 0.5
* They were mostly done already. Just the dialog needed cleaning up.
  It should be an overlay one day

Click on symmetry atoms ::: 1

Add back the icons in the info dialog ::: 1

"Add New Residue Type" in the "Add Other Solvent Molecules" dialog doesn't work ::: 0.5

Wed  3 May 2023 14:43:36 BST
check the HUD NBC blocks in 89A - shouldn't lots of them be be labelled with "this residue" marker? ::: 0.4
* Done. Now both atoms are added for the same NBC.

GtkGrid in Residue Info doesn't get cleared before a new residue widgets are added. ::: 0.4
* Delete all the children: clear_the_grid():

Make a better descision about which molecule is the one used for "place typed atom at pointer (water)" ::: 0.2

Make the Fast-go-to-residue dialog be an overlay? No. A transient will do for now. ::: 0.5

Fix "Edit Chi Angles" button ::: 1

Restore ^C interrupt (python-related?) ::: 1

Add contact dots ::; 1
* Done.

Add molprobity contact dots ::: 1
* After one frame the lights get brighter. Strange.

Key binding for update Coot contact dots - built it? ::: 0.2
* Added to my key_bindings.py for now

Bring Python command history and completion into GTK4: ::: 2
   a9d101aa69a767583a085de9e3c8ae2449fe71fa
   3fc6cfe003683ab1180c0045387036068cc32294

Generic Display Objects is a mess ::: 2
* Much better now!

Enable splash screen: ::: 1
* I don't know how to make the window the right size! The image is display in 16 pixels width

Check/Delete Waters needs testing ::: 1
* Done.

Add highly-coordinated waters ::: 0.7
* Done. Nice

Delete on a Water fails (it works if "Residue" is selected) ::: 0.4
* Done. Trivial.

Other Modelling tools should be in the menu ::: 2
Get rid of "Other Modelling Tools" ::: 1
* Done.

Undo molecule chooser ::: 0.5
Find Somewhere for "Choose Undo Molecule" ::: 0.5
* Done. Hooray.

Put a bar/cyclinder under Diego so I can see the atoms. ::: 2
* Lovely interactive contact dots will do.

Find somewhere in refinement module for "Contact dots during refinement" ::: 0.0
* Already exists in the "Refine" module!

HOLE ::: 1

Making the window larger exposes more of the validation pane - even without validation graphs present ::: 1
No longer. But make the startup window wider. now app window is 1000x900.

7a0l.cif doesn't load from the command line (related to 7a0l-assembly.cif non-load, I guess).
It's a molecule not a dictionary. The command_line::add() function needs to detect the difference.
All molecule .cif files fail to load on the command line? e.g. 7uv7
Now, should this be "nice to have" or "must have"?
* Done.

Sharpen/Blur (mtz) map is missing ::: 1

Built-in key-binding for [,]. ::: 0.2

Open, close, reopen Bond Parameters, An extra molecule combobox is added. ::: 0.5

Check the links in all representation types (use PDB files) ::: 2
* 7a0l not perfect in colour-by-B and occ. Good enough for now.

Draw fixed atoms - anchors seems not to be working. Also, Angry Diegos are missing. Is this only on MacOS? ::: 1.0
* It works on the PC.
* Error in the shader.

Where are the rotating hydrogen bonds? ::: 0.5
Calculate -> Hydrogen Bonds?

7a0l colour by B-factor with fat bonds. Bonds to hydrogen atoms are grey and fat. ::: 2
* Fat bonds partial fix for B-factor and Occ modes.

Apply the symmetry colour from the Cell and Symmetry dialog ::: 1
* Done. At last. 2 attempts. Looks nice.

Save state via a file chooser dialog and Ctrl-S and use on the command line ::: 1
* Done.

This function needs an extra arg: "bool transfered_colour_is_instanced"
void
Mesh::draw_instanced(Shader *shader_p,
                     const glm::mat4 &mvp,
                     const glm::mat4 &view_rotation_matrix,
                     const std::map<unsigned int, lights_info_t> &lights,
                     const glm::vec3 &eye_position, // eye position in view space (not molecule space)
                     const glm::vec4 &background_colour,
                     bool do_depth_fog,
                     bool do_pulse,
                     bool do_rotate_z,
                     float pulsing_amplitude,
                     float pulsing_frequency,
                     float pulsing_phase_distribution,
                     float z_rotation_angle)

which gets sent to the shader of course. Check that both interactive atomic comtact dots and hydrogen bonds work.
(what else uses that shader?)   ::: 1
* Done.

7a0l-assemby.cif from rscb.org fails to import. Hmm! How to fix that!? Test case for gemmi-based import?
* Done.

Start up from Saved state. ::: 1
For now I can start by passing startup.py on the command line.

Change the label on the Refinement module's "Contact Dots on" menu item ::: 0.1
* Done.

Sort out whatever is going wrong with the display of the extra distance restraints. ::: 1
* Done.

Connect up the distances and angles dialog ::: 1
* It was easy. I could improve the position of the angle label.

Fix the double reading of the monomer library ::: 0.3
* Hopefully this won't break things.

Update the Ramachandran Plot after RSR or other model edits ::: 1
* Done. Nice.

Update the Validation Graphs after RSR or other model edits ::: 2.5
what is this: update_active_validation_graph_model()?
It is the function that gets called when the user changes the molecule in the validation graph dialog.
It is not the function to update the graphs when the model changes.

Validation graph colours ::: 1.0
* Mostly done. Needs some tweaking (e.g. in Density Correlation there needs to be some improved range).

Edit Restraints, Select Monomer type - dialogs messed up ::: 1
* Done.

Restraints Editor ::: 2
* Done.

Calculate -> Map Tools -> Copy Map doesn't work ::: 0.5
* Done. And smoother versions.

Intercept "Get Monomer" or "Search Monomer" 3GP and give me a conformation that fits more easily ::: 1
* Grindy finding the bug (was not editing the correct dictionary).

rename draw-2.cc as tick-function.cc or some such

On changing the selection in the rama plot, it says "now do something with //A". So you should do that. ::: 0.5

Rama plots need to read the imol in on_ramachandran_plot_molecule_chooser_ok_button_clicked() ::: 0.1

Go into perspective project and with left-mouse pressed wave around the mouse wildly ::: 0.2
* Done. Added stabilization in mouse_zoom().

Curlew: Goodsell, speed-run and CaBLAM ::: 5
* Monster effort - rewrite from scratch.

Open Coordinates -> Move Molecule Here -> Open doesn't work  ::: 0.5

Edit->Move Molecule Here... Do it twice and the combobox duplicates ::: 0.5
Needs a check before adding a combobox?
* Done.

Add a window-removed signal callback for Bernie? ::: 0.2
void
window_removed (
  GtkApplication* self,
  GtkWindow* window,
  gpointer user_data
)
* I added a note:

Missing main-chain C atom in colour-by-chain. ::: 0.5
* Done. Commented out a big hunk of code. Make instancing work.

Where is "Add Atom at Pointer"? Do I mean for waters and metals to be added using "Add Other
 Solvent Molecules"? No. Modelling -> Add an Atom: Then can be Water, or anions and cations ::: 1

rename residue, renumber waters, reorder chains, replace fragment, use SEGIDs in Edit menu ::: 0.2
* Done ages ago.

Do the tutorial from time to time - what's missing? ::: 6
graphs, validation graphs colours, updates of rama, clash dots on model change.
change the function name update_validation_graphs() to update_validation() and after that change the name back and call
the dot updates and update_validation_graphs() from there.

Key-binding/function to bump the B-factors up or down or match the neighbourhood. ::: 0.2
* Done

Clear the box of results in Unmodelled Blobs ::: 0.4

Put GLM into configure, get rid of --with-gtk4 ::: 0.5


Fix icon on startup: (coot-bin:15976): Gtk-WARNING **: 14:16:15.373: Could not load image 'pixmaps/coot-icon.png': Error opening file /usr/local/Cellar/cootgtk4/HEAD-b70d63f/share/coot/glade/pixmaps/coot-icon.png: No such file or directory ::: 0.5

Put the curlew banner in the curlew dialog ::: 1

Make the Ligand Menu be a module ::: 0.5
Not much to do until we turn on RDKit.
# Some of these are vital, some are nice to have
Find Ligands ::: 0.1
Jiggle-fit ligand ::: 0.2
Hydrogenate region ::: 1
Contact dots for ligand ::: 0.2
SMILES -> simple 3D ::: 1
Show Chemical Features ::: 2
Display Ligand distorsions ::: 1
Quick Ligand Validate ::: 3
[Ligand Metric Sliders]

"About Coot" is empty (was fixed in GTK3 version). Remake it in Cambalache?  ::: 0.5
* Nearly done - I need to be able to install the icon.


"Ligands" selection in Go To Atom ::: 0.5

"Overlaps" needs an update button - and preferably updates automatically. ::: 3

Edit -> Mutate Residue Range ::: 2
* Done. Thanks Jakub.

Map Parameters dialog needs a refresh ::: 0.5
* Done. Nice

Bug: make Contact Dots, open Generic Objects dialog , Close, Add new contact dot and then open generic objects dialog
again. Mess as some box entries are double written. ::: 1
* Done, I think. Use clear_the_grid()


"Add atom" should boink if the new atom is over/close to an already existing atom ::: 0.5
(Maybe it does already)
* Now I get a warning dialog - good enough

Draw the ligand chemical diagram in OpenGL. ::: 3
* Done. Good. But still some scaling issues.

Nasty "-" rendering in OpenGL for charged atoms in HUD Ligand ::: 0.5
* Done 375716e7198e9df624449790378d383daa4f6370

Views ::: 2
* Simple implementation

Open dictionary should provide a widget to specify the molecule for dictionary.
Also a "Generate Molecule" button. ::: 0.4

Clemens: If I mutate a residue with hydrogen atoms, make the new atoms have hydrogen atoms too.
It would be good if you could make them nucleus hydrogens if that's what was deleted. ::: 1

Clicking on Green left arrow doesn't open the refinement overlay ::: 1
* Done.

Shift the HUD ligand 10 pixels to the right, i.e. add 0.02 to x in the shaders. ::: 0.5
* Done.

In graphics_info_t::new_fill_combobox_with_coordinates_options() gtk_combo_box_set_active() doesn't work.
Why? Because it's looked up and not new? ::: 2
* Done. 215d1cf6eb4c55a3a2fe66c6437df17983f19da5. Maybe more like this.

Quick save should say something in the status-bar - maybe briefly flash and fade the background. Or some
other brief visual effect. ::: 0.5
* Done.

Looks at 1x8b with ligands and contact dots - is 2.0 too close for H-O hydrogen bond distance?
No, it's fine: see https://proteopedia.org/wiki/index.php/Hydrogen_bonds. Contact dots has it as
a clash though. "The dotted hydrogen bond is non-covalent and variable in length, ~1.5-2.5 Å." ::: 1
* Done in refinement.

Bug: Add Hydrogen atoms fails for 1x8b/824 - missing on N :: 4
Something to do with the dictionary? No. With new dictionary it still fails. The type for N is NR5.
This is wrong. It should be NR15. So, when the atom type is NR5, then check the bonds to the atom, to see
if there is an N-H bond.
* Done.

Search monomer library results should be left-hand justified ::: 0.5
* Done

Search monomer library results should have rdkit images? ::: 0.5
* Done

Isolated Molprobity dots for this ligand - what is this? How is it different to contact dots for ligand?
   contact_score_ligand_func(). Hmm. See ~/Desktop/ligand-notes
* Contact dots for ligand is my function - it has vdw dots

Shader Preferences can submarine ::: 0.2
* Done.

What's up with the Preferences? ::: 6
* Done - well lots of it done. What a grind.

Add Jiggle-Fit functions to Cryo-EM tools ::: 0.6
* Done.

Anti-submarine the Display Manager ::: 0.2
* Done.

Fetch EMD map ::: 1
* Done.

Find somewhere for coot.set_b_factor_bonds_scale_factor ::: 1
* Preferences, surely.

Something is wrong with the generation of the guile code. ::: 0.2
* No... it was just not compillled wth guile. Still startup issues need
  to be resolved, I think.

Fix the dynamic validation pane resize on Update of the buttons ::: 0.2
* Done. gtk_paned_get_position().

Pulling on atoms during refinement doesn't work with trackpad on macOS. ::: 2
* Done. Let's see how it integrates with regular mouse usage.

Do the tutorial from time to time - what's missing? ::: 1
* Nothing. It works.

Full-fat render path - i.e. framebuffer need to be set up correctly (at the right time?) ::: 2
set_framebuffer_scale_factor().
Well this works just like gtk3 version does. No effect on the framebuffer using "Fancy" path and
shows a quadrant in "Plane" mode. The output tga file is full-resolution though, which is nice.
Don't confuse the scaling of the framebuffer for screenshot (in "Plain" mode) and
the scaling of the framebuffers for super-sampling (in "Fancy" mode).
* Now the framebuffer scaling for the basic/simple mode work (fat density lines appear)

Preferences -> Colours -> Font does not work ::: 1

"Atom Label Font Size" frame should be deleted from the properties. ::: 0.5

[ and ] don't change the cryo-EM map radius. ::: 0.2

Rename python modules fitting, get_ebi, gui_hole, mutate, ncs, pathology and others ::: 0.5
https://github.com/microsoft/vscode-docs/blob/vnext/release-notes/v1_63.md#python
(that vs code thing didn't work - no clevernesss suggested)

How do I invoke the sequence view? ::: 0.1
* Add a menu item

Ligands in 6l01 and 7tzz fall off the page
* Improved. Still needs work.

How do I dismiss the sequence view? ::: 1
* Done.

From Stuart: 1h27 fails on read cif. ::: 1
Make Coot use GEMMI.
* Done.

Open Check/Delete Waters dialog twice.
I want alignment by using a Grid.
I want distance in the button label.
I want the results box to be docked.
It needs an extra distance criterion for distance to a hydrogen atom. ::: 2


Make the run-script dialog be transient ::: 0.2
* Done.

add a "Grab focus" before going in to fullscreen! ::: 0.5
* Done.

Turn on Intermediate atom All-atom contact dots, refine and accept. The contact dots
 should disappear but they don't ::: 1
* Done.

Tweak down the perspective a notch.
* Done.

Is the em radius saved to the state file? :: 0.2
It is now.

Are the cis-peptides markers being generated and displayed? ::: 1
They are non-instanced geometry. Should I just use api/instancing.hh?
* Yes. A slog, but a Good Thing in the end.

Make the OK button in the single map parameters dialog bigger ::: 0.5

Add a graphics_draw() at the end of the calculation of map after contour level change (in the callback, I guess). :: 0.
* Done.

Clean up "store_window_position()" usage ::: 0.2
* Done.

Save Coordinates dialog is not working ::: 0.6
* Done.

Fresnel mode for maps in "Plain" mode ::: 1
* Done.

Bring the script that shows the SSOA buffer to GTK4 and try to fix the aniostropy. ::: 1
  The SSAO for model is not anisotropic now that we use the new instanced code (if it ever was).
  The SSAO for map is though. Compare and constrast with the model shaders.
* Done. Yay.

Proportional editing ::: 1
* Done. Nice.

Make Local distances restraints 5 ::: 1
* Done. Nice.

The Restraints menu needs a "Delete Extra Restraints" button. ::: 0.5
* Done. Nice.

Go into CA mode and try to middle-mouse over an atom that is not displayed. The recentering works.
The atom picker needs to know about the representation type (or act on it) ::: 0.1
* Can't reproduce (thankfully?)

Make sure that set_scroll_wheel_map and set_scrollable_map() (how are they different?) change the scroll indicator
in the Display Manager. ::: 0.5
* Done.

Don't draw cis-peptide markup for an MDO ::: 0.8
* Done. Pretty tricky.

Blog tutorial: why do we change the default B-factor? ::: 0.2
* Done.

Fetch EMDB map doesn't check the cache/coot-download.
* It does now.

No reaction to Validate -> Atoms with Zero Occs (there were some) ::: 0.5
* Done.

Fix this: ::: 1
"widget main_window_meshes_frame was not found"
* Done. Mow there is a ribbons dialog

Missing difference map peaks in 1bl8 from Oliver Clarke. ::: 1
* Done

a7956aa695f8c19e52622447ca292434812d4e62. ::: 0.1
How about deleting the timeout altogether?
* OK, done.

Moorhen: Fourier filter jiggle fit:
* Done.

Moorhen: read_ccp4_map() with the wrong file name
* Done.

Moorhen: map histogram - user chooses number of bins, I guess 50?
* Done.

Moorhen: libcootapi neeeds to return the columns that it has read in auto-read.
* Done.

Fix the R/RC combo-box changed handlers.
* Done.

Colour by B-factor CA is wrong: test with tutorial and 8oie.
          B-factor all doesn't work at all.
* Done.

Missing validation items: Some currently under Draw -> Molecule
   "Residues with Alt Confs" and
   "Residues with Missing Atoms"
   "Residue with cis-peptide" action needs to be filled
   "Residue type selection" action needs to be filled  <- This one remains to be done.
* Done. A bit of a fudge and what a grind - boring.

Clicking the switch Refine -> GM Restraints doesn't undisplay the GM restraints.
* Done. Easy.

Put 7vvl in CA mode. You can label atoms that are not displayed. Bad.
* Can't reproduce.

Moorhen: carbon bonds are too light on white background. Looking at the code, it seems
         to do the right thing, but needs testing. Print the colour table.
* Colour table seems fine. Needs a look.
* Done. Not a libcootapi problem.

sharpen_blur_with_resampling to moorhen api
* Done.

Save coordinates chooser and dialog is broken.
* Done.

Copy Fragment buttons need more space.
* Jakub Done.

Atsushi Nakagawa wrote:
>    I cannot display the PDB1uv6 on coot
* Still broken?
*   Looks OK to me now.

no_sound()
* Done.

Moorhen: Check/Delete waters function for the api
* Done.

Moorhen: test robustness of jiggle-fitting. Move the molecule around a bit and
         see if you get solutions.
         Use the nanobody in 7vvl.
         Use one of the WD40 domains in 6eoj
* Done - good enough for now

Moorhen: Read gziped maps in libcootapi, so moorhen can get maps from emdb.
* Done.

Moorhen: auto-read-mtz needs to return the Fobs and sigFobs also (if possible, of course)
  add std::string F_obs and sigF_obs to auto_read_mtz_info_t
  They were not set if F_obs is empty.
* Done

Apply Charles patches.
* Done.

"Solidify maps" in Cryo-EM module menu
* Done

No sound api.
* Done.

Outliers only in Rama plots
* Done.

Residues-near-residues
* Done.

Use "updating maps" a second time.
* Done. Added protection.

coot.halloween()
* Done.

Moorhen:: check waters: change the return type so that there is a label or some such.
(or the reason why it was an outlier)
* Already done

Rebuild RDKit, check that Eigen is pulled in correctly.
* Done.

GUI: Where is pepflip Q in the key-bindings?.
* Done.

GUI: "Use Trans-peptide restraints" button doesn't work (the button is on again
    when the dialog is displayed again).
* Done.

GUI: --auto moorhen-tutorial-4.mtz doesn't auto-read the Fobs colums, so the
     auto-updating maps doesn't work sadly.
* Done

Martin Moncrieffe: distance and angles on Mac.
* Done.

libcootapi: estimate the molecule radius - using the distance between 1000 (say) random atom pairs.
* Done.

Is it a good idea for the wasm build from CCP4_WASM_BUILD/moorhen_build compiles test-molecules-container?
How do I use it?
* It might be a good idea, but it is not at all important.

Key-binding for "display/undisplay all maps"
* Done - sort of. Shift Q

Key-binding for "toggle display of last model"
* Done - Shift A.

Key-binding for "Advance scroll-wheel-map to next map" (have I done this?)
* Yes. Shift W

moorhen: atom selection for Mg was grey, not green as it should be.
Even with non-carbon colouring it failed. Using custom rule (from the "+" button)
* Fixed.

moorhen: does the map masking take a multi-cid for the atom selection?
* It does not. Tested.
* Fixed.

Coot:: In the display manager "atom selection from x" should be "atom selection //D from x"
* Done.

Coot: make the function get_number_of_molecules(), as an alias maybe.
* Done.

Coot: Add to Draw menu "Activate Scene Preset" Figure making or Model-building
* Done. Good.

Coot: write a script that reads a map and undisplays it (positron). Now open the Display Manager.
   The map "Display" checkbuttons are on.
* Done.

Coot: check that a Gaussian chain surface should be displayed before using it in the SSAO image.
* Done.
