--- Items ---

o MUST DO before release: Test reduce.cc output.

o Blog post for "light mode" coot

o rotate/translate of an atom selects the whole residue

o test base pairing restraints for SB.

o fix the map caps so that they are the other way around.

o Lucrezia: does --dictionary-with-mol work?

o Lucrezia: does mask by chain work?

o it would be better if the view change on copy-fragment went to the right zoom and was smooth.

o debug:: pdbe_chem_comp_atom_depiction() added depiction of 36 atoms
WARNING:: in init_refmac_mon_lib() unhandled category "_pdbe_chem_comp_rdkit_properties"
file: /Users/pemsley/Projects/coot/git/coot-main/build-chapi-with-homebrew-deps/A1DAP.cif
Read 63 atoms/links in restraints from /Users/pemsley/Projects/coot/git/coot-main/build-chapi-with-homebrew-deps/A1DAP.cif

o DACA

o ccpem: angular distribution of orientations in moorhen

o ccpem: map model fsc - coot and libcootapi

o ccpem: latent space is done by cryodragon. Get some datasets!

o ccpem: round-capped line "capsule" say should be a object type for generic objects.

o ccpem: think about rotating a helix in 'proportial editing'

o ccpem: helices as curvy cylinders - add to moleculestotriangles

o rotate/translate of an atom selects the whole residue

o test that Renumber Residues is working
* Fixed.

o bring back reorder chains.
* Done.

o When navigating the structure using the GoToAtom dialog, write the details of the atom in the status-bar
* Done.

o Fix drag and drop crash on Mac
* Done.

o fix the build/installation of curl - on home desktop.
* Not now. Later.

o the refinment setting frames needs to correctly set the menu items.
* Done.

o MUST DO before release: Read in a cryo-EM map. Coot no longer centres on the middle of
  the map.
* Done.

o FLEV on 4zzn has a bug in the inner double bond positioning. Try just CQ8, no FLEV.
* Done.

o NCS jumping recentres to CA
* Done.

o Low rotamer probabilites in Validation graphs
* Done.

o Residue numbering in Validation graphs.
* Done.

o ccpem: rotate view in Z
o install the xml files so that they can be found from whereever we start chapi.
* No... find them at compile-time. Done.

o symmetry as CA
* Done.

o Don't label symmetry atoms if they are not begin drawn!
* Done.

o Update sequence view on mutation, deletion and addition or renumber
* Done.

o zoom drag, lift shift, continue drag -> jump
* Done.

o goograph to modern GTK4?

o Longer term: Add key-binding to labels? Or hoverovers?

o Longer term: Add a search bar c.f. Ctrl-Shift-P: or the search bar in GNOME.

o Make 10 ribbons representations (say) and try to delete the from the Display manager. stachowskitim

o Ctrl-Shift right-mouse should rotate about screen z, but it does not. Consider how to do this without a mouse.

o make a nice figure, using the ray tracer of 2ouz lasofoxifene with density and environment

o delete the rama plot for a model when the model is removed using the display manager (or elsewhere)
* Done.

o Download EMDB dialog should be an overlay frame - rewrite in pure C++
* Done.

o rewite the download dialog to be an overlay
* Done.

o close the side-bar when difference maps frame is closed
* Done.

o "active residue" marker in the rama plot. Make it a circle/ring.
* Done.

o can I set the diffuse and ambient to light the map?
* You can now.

o Fix the pukka puckers markup!
* Done.

o make pop-diego face particles smaller
* Done.

o strip Aniso from pdb on write - add a button to the dialog
* Done

o changing the diff map colour should change the negative level also.
* Done.

o add NCS ligands
* nearly done.

o the refinment setting frames needs to correctly set the menu items.
* Done.

o delete symmetry waters
* Done.

o get the "icon" start working on macOS - needs work on multi-resolution icon.

o sequence view (standard window) now says
(MacCoot:20788): Gtk-WARNING **: 14:28:21.825: Trying to measure GtkBox 0x125ed4200 for width of 560, but it needs at least 600
(MacCoot:20788): Gtk-WARNING **: 14:28:21.833: Trying to measure GtkBox 0x125ed4200 for width of 560, but it needs at least 600
(MacCoot:20788): Gtk-WARNING **: 14:28:21.842: Trying to measure GtkBox 0x125ed4200 for width of 560, but it needs at least 600
(MacCoot:20788): Gtk-WARNING **: 14:28:21.850: Trying to measure GtkBox 0x125ed4200 for width of 560, but it needs at least 600
  on entry into the widget.

o adjust the front blur shader.
* Done. Nice

o Fix the Fresel in the Fancy shader path

o NBC update in minimizer
* Done.

o try adding a PTM - it is not clear what is happening. Needs twice

o bring worm-B-factor-view to Coot and compare
  and contrast correct B-factors vs AlphaFold B-factors

o make the JSON-RPC only work on localhost
* Done. Already uses INADDR_LOOPBACK in json-rpc.cc.

o Ribbon does not react to changing the material lighting.
* Done.

o give new-startup (and functions) a better name.
* Done.

o see 16f550bc87810afc46bcfc9d737c34cbd1bfc982)
  ⏺ The issue is that extract_and_fill_emdb_code_from_pdb_file only parses PDB-format REMARK 900 lines.
    When the file is mmCIF format, there are no REMARK 900 lines, so the EMDB code is never extracted
    and the entry stays empty.

    For mmCIF files, the equivalent information is in _pdbx_database_related.db_name / _pdbx_database_related.db_id.

    Needs gemmi

o The NCS graph does not load (is empty) even when there
  is NCS present & switching between NCS copies is working
  (test on 1BL8) [Oli]

o Geometry and Density fit correlation are calculated on the
  fly, unlike (?) the others, and are calculated every time
  the graph is loaded from scratch. This is not a problem on
  small crystal structures, but causes the program to hang
  for quite a while in the case of large structures in high
  res cryoEM maps, even on fairly recent hardware [Oli C]

o get structure from accession code, no focus
  so "U" doesn't work.

o dig out the bone shaped cross-section for Easter?

o proportial editing, with chain-based selection for
  rotation. Rotation is not proportional.

o work with dragged maps off - is updating the map
  now problematic?

o check that .coot_python_commands is being written
  and read
  * Yes it's fine - don't use --no-state-script
    and it gets read.

o use dict-to-image.py in build-chapi-with-homebrew-deps
  or other to make a function that does comp_id -> png
  using ~/.cache/Coot/monomer-images for hover-over
  images in GTK4 menus

o add a post on how to add a button to the gui

o LSQ superpose seemed to fail when try to match
  N-chain-moved-2.pddb to 7vvl N chain.

o how do I add mailing list chat to claude knowledge?

o Sort out startup script locations
* Done.

o the validate -> ramachandran plot should be an overlay

o model-fragment.map is a good example of how the translation
  in jiggle-fit should work but doesn't.

o double click in the solvent for a cryo-em map
  It is not looking at the contour level?
* Seems OK.

o Turn off the "great refinement" particles
* Done. hooray() it was called.

o chapi: fill a model given a sequence (and a chopped model)

o add outlier stats for rama plot - maybe status line for now.

o move CA, K atoms that are bound to "A" into the "A"
  chain if needed.

o Fix session restore - Kevin Jude
* Done.

o have another go at trying to get a heatmap to work.
* Done.

o Allow the user to add extra acedrg atom-type tables for their ligands
  when searching for similar ligands with acedrg types.

o what is protein gtp?

o when generic object are displayed and undisplayed using the API,
  the gui should update - but it doesnt
* Done.

o The "here" means the current screen centre - add this to skills
* Done.

o add a note in skills for soft-mode-hard-mode
* Done.

o make a protein with hyderogen atoms from reduce
  and compare with our monomer library for protein residues

o sidebysidestereo option for ray traced images

o Add angles to geobonds? No, I think the navigation is enough for now.

o multi-open align and mutate

o Make a cryo-EM ligand-fitting tutorial, needing conformer search

o set_accept_reject_dialog_docked() and show() needs
  to be restored as a no-op.
* Done.

o reverse molecule to string in chapi
* Ask Lucy

o add get_h_bonds() to the Coot api (c.f molecules-container.hh)
  export to python directly, i.e. make get_hydrogen_bonds_py()

o OAR and OQR look the same in RDKit depiction from restraints
  They should not, there is a chirality issue.

o remove gaussian_surface_to_map_molecule_v2() in chapi.

o Clemens: make a GEMMI script that describes the
  heterogeneity in a file and allows to write
  "early", "late" or "ground" (for example) models.

o fix updating NBCs during refinement

o tom - cryodragon latent space data? 
  Also trajectories from dynamics

o particle picking for moorhen? Use CPU code

o model fitting to Dari K. data? or something like it.
  can we do map update on a map fragment - in cryo-EM world.

o use cell and symm of mtz file, then make map em map.
  Have a look at the column labels from servalcat.
  Coot and libcootapi

o coot atom overlap score and clashscore for Robbie's set of
  structures.

o dict_res_restraints is a flat std::vector with no index.
  Every operation — adding an atom, a bond, an angle, a torsion
  — does a linear scan of the entire vector to find the matching
  comp_id. A single monomer import triggers roughly 100–300 such
  scans, so the cost is O(N²) in the number of loaded dictionaries.

  The least invasive fix: during a single monomer's import, all the
  mon_lib_add_atom(), add_restraint() etc. calls target the same
  comp_id. They each independently scan the entire vector to find
  it. If the index found by mon_lib_add_chem_comp() were cached and
  passed through, you'd eliminate ~200 redundant scans per monomer.

o twist the fibonacci sphere as the radius changes.

o coot version of clashcore? Actually try to do
  what probe does - not atom overlaps.

o provide a mechanism for eugene to request the current
  zoom and orientation, centre so that they can be
  evaluated at next coot execution. As json.
  and a function to evaluate the orientation.

o on exit:
  when started with --ccp4, use the (new) function
  ccp4_shutdown() to write files into pre-defined directory.

o can we add items to the File menu?

o import gesamt into libcootapi. Do soon.

o XDG bernie. Need to move where curlew packages are installed.

o add this to the api:
  gemmi repackage --assembly - is this a real thing even?

o linear interpolation for "density at point" in chapi.
  Also, do closest. For Lucy.

o Missing sidechains skill.

o MM rotamer functions

o John Beale

o don't forget the rotamer values from new coot.
* Done.

o update the skills.
* Done.

o how to you invoke "get goodsell extension" from Python?
* Done.

o ctrl left-mouse drag, but release control first, then drag a pixel
* Done.

o validate flatpak

o em_placement

o shift-click should put atom info in status bar
* Fixed.

o front clipping plane steps are too big in perspective
* Done.

o Test data update:
Starting test_patterson_from_map_using_map()
WARNING:: file does not exist ../test-data/32143-masked-around-N.map
ERROR:: test_patterson_from_map_using_map() failed to read ../test-data/32143-masked-around-N.map
FAIL: patterson from map                       ⬤ 
Starting test_molecular_placement_pipeline_r_chain()
   :::::EMDATABANK.org::::EMD-32143::::                                             :
debug:: ::::EMDATABANK.org::::EMD-32143::::                                              does not start with PANDDA::
DEBUG:: init xmap with P 1  Cell (152.72,152.72,152.72,    90,    90,    90) Nuvw = ( 138, 138, 138)
WARNING::Failed to open ../test-data/R-chain-frag-from-7vvl.pdb: No such file or directory
ERROR:: failed to read ../test-data/R-chain-frag-from-7vvl.pdb
FAIL: MR R-chain                               ⬤ 
* Done.

o look at A1CEP in 9oun and friends. Use chapi to make output
  comparing and contrasting the ligands

o fix the --help message to be more helpful (see general on pumble)

o split water doesn't work
* I can't make it fail

o add arg for how to handle secondary structure in
  molecular_respresentation cc-interface-molecular-representation.hh
  c.f. molecules-container.hh

o set_map_colour() in molecule_class_info.h() calls
  update_map() - all it needs to do is change the colour
  of the vertices.

o move the lights

o make chapi tests from test-molecules-container

o add acedrg atom types to the mmcif from pyrogen

o Science: Check acedrg atom types with a some recent dictionaries

o Science: auto-split model: look for regions with large aniso for
  several residues.

o Science: AXI analysis

o Science?: output ligand mmcif from libcoootapi

o conkit for coot?

o think about how to make an atom selection for alt conformation
  generation. Shift-click to toggle addition

o after using Lhasa, the generated dictionary should be made
  available to post-moorhen program/cloud.
  Likewise after using pyrogen, the dictionary should be
  available - so that Acedrg, say, can clean it up.

o RNA single-straded comes double-stranded
* Done.

o check that these work as expected (Martin Maly anom test):
   coot.set_map_radius(7.52)
   coot.set_map_radius_em(52.60)
* Checked. They don't.
* Fixed.

o opacity for molecular surface and electrostatic surface also
  See set_transparent_electrostatic_surface()

o do something about where ribbons live.
* Done.

o Have a look at fancy mode transparent surfaces.
* Done

o make aniso lines width user-setable - or thicker
* Done.

o open display manager, close it, open shader settings, close that,
  open display manager again, close that - then when I re-open
  shader settings for the second time, it is broken and unusable
* Done

o the thermal ellipsoid slider should go up to 99%
* Done.

o add a menu item to open socket for rpc server
* Done

o Edit -> Copy fragment doesn't have a default molecule
* Done.

o Ctrl F toggle rough fine smooth
* Done. Nice.

o in python script entry Ctrl-E, Ctrl-A
* Done - Ctrl-e. Ctrl-a is strange, it looks as if it is already
  bound to selecting all the text

o make aniso lines width user-setable - or thicker
* Done.

o Make it easy to delete all waters.
* Done

o Pyrogen for Moorhen - make progress by the retreat.
* Done.

o what is the legal status of code created by Claude Code?
  Charles mentions "transformative"
  Talk to legal people
* In progress

o if there are no adps then don't make the Anoso sph tab
  in the screen dialog [Clemens]

o fix A3 symbol in validation skills Å³
* Done.

o for a slow day, add a box with widgets that control
  ambient, diffuse and specular lighting for the models
  in the "Shader Settings" dialog
* Done.

o duplications in the PTMs for ARG. Why?
  Use gtk_combo_box_text_remove_all(GTK_COMBO_BOX_TEXT(combobox));
* Done

o delete or close generic display objects from the API
* Done.

o in build-it-3-3 build rdkit with inchikey
* Done

o findwaters bug
* Tested. No bug for me.
* Indeed. It was not my bug.

o Martin M: Figure with white background distance between
  atoms is white on white. The pale text is not good.
  The distance labels should be hideable.
* Done, I think

o Lucrezia's Presentation:
  interactive FFT.
  with 2 sliders: Sharpening and Resolution cutoff
  use raised cosine, or something similar

o chapi.get_ligand_validation_vs_dictionary() generates its
  data on the fly - when the atoms have expired. Rework this
  so that the data are filled shortly after the molecule fragment
  is generated - and before they go out of scope.

o generate python api for gemmi like is done for chapi.
  Turn this into Fortran api also?

o Fix make_mask()
* Done.

o use a pre-existing map for make-mask()
* Done.

o create a mask map of a sphere where the sphere, is the plus part
  and the - a reference grid is given, radius and postion.

o z-score for ramas and rotas?

o put Ligand builder in Ligand module
* Done.

o Clement: nice to have: function to calcuate mean, sd of a volume
  around a point. alternative: at all of the positions of the atoms
  in a specified residue - sphere_of_density_stats()

o multipy a map by a map - e.g. local resolution.

o read/use PTM table in Coot
   On add_PTM_apply_button_clicked, we need to check
   the selected new residue type has a dictionary.
* Done

o multi-model ribbons for NMR
* Done. Nice.

o 1m5q for B-factor putty
* Done. Nice.

o put Ligand builder in Ligand module
* Done.

o Get Restraints for ligand
* Done

o restore the tube for normal ribbon diagram.
* Done.

o rainbow ribbon colours are too bright
* Done.

o get rid of prodrg_import_function() and references to it in skills.
* Done

o MolecularRepresentation.cpp line 654 - fix.
* Done.

o the bond colours against a dark background are too dark.
* Done.

o where did we get to with the fat-worm (e.g. B-factor) representation?
  Fatness per residue has already been fed to libcoootapi before the
  molecular_respresentation is created. Do it in Coot first.
  Fat-worm representation for NMR chemical shifts on ligand binnding?
* Done. Nice.

o rename parse_gphl_screen.py - remove parse_
* Done.

o screen table adps
* Done. For now

o spermine structures analysis.
* Done.

o acedrg link bond order default single.
* Done.

o get_gaussian_surface_for_atom_selection()
* Done

o make_gaussian_surface_map_for_atom_selection and return a map (create a map molecule)
* Done.

o phenix geobonds
* Done.

o make_gaussian_surface_map_for_atom_selection and return a map (create a map molecule)
* Done.

o Coot: 2luz ribbon diagram, I want to see the ribbon diagram for each model.
* Done.

o don't forget "proportional editing" - and domain rotation.

o Clement: make a difference between sax data and our model
  (masking enenough?). Compare mask and gaussian surface map.
  Make mask have a smooth surface - by adding a b-factor.

o Clemens: compile libccp4 with modern compiler? (building-coot) Needs new tar?

o Rota dodec colour, rama balls colours - what is the function?
  Send it to pumble

o finish the pucker validation analysis.

o have another bash at calculating occlusion
* I did. Things improved. Still work to do.

o Use gemmi tar files in build-it-3-3
* Done.

o bonds and angles etc validation? in libcootapi.

o rebuild coot dependencies with Python3.14 and new boost and rdkit and libicudata (unicode)

o Claus: thermal ellipsoid with transparenty instead of wireframe.
  or
  the 3 lines around without the solid inside.
  And colour them. If you can do that, can you do other rings?

o For figure making skill - add map, semi-opaque maps -
  density around ligand.

o look at buster refine of 9hdw refine.pdb
  B352 HZ3 - A393 NE2 is marked in atom overlaps
  with spikes. The distance is 1.8A - that's fine.

o what do you do with chem_mod_bond? It is suposed to
  modify the bond order when a link is made.
  See notes from Lucrezia.

o File -> Fetch restraints dictionary for this residue

o turn on fancy graphics and make a ribbon diagram.
  There should be no PASS_TYPE_STANDARD that renders
  to the display buffer, right? But there seems to be.
  Turn off and on 2470. What is calling
  draw_molecules_other_meshes(PASS_TYPE_STANDARD)
  when we are in fancy graphics mode?
* Done.

o test pygal in python, Coot and then with Claude.
* partially done, I can make plot now.

o double shader settings SSAAO N kernel samples max
*  Done.

o add a function to check that a residue exists
  residue_exists_py(imol, spec) -> Bool:
* Done.

o turn off the info dialog that says
  WARNING:: refinement map not selected - no action
  when there are no maps.
  Trying and missing to double click on an atom
* Done.

o add a menu or button to start JSON-RPC server localhost
  and an entry for a port number

o add a Coot API function to get header info
* Done.

o For Clemens: check what is being got from Rotamer and Rama in chapi.
  Make plots for tutorial model.

o Martin Maly: If I could make a wish, yes, it would be nice
  to have the function get_rotamer_name_py() in CHAPI please.
  And also get_n_rotamers(), set_residue_to_rotamer_number() or
  set_residue_to_rotamer_name() could be useful in my efforts
  with model shaking before bootstrap.

o for MCP Coot: validate_residue(imol, residue_spec)
  capture Rama, rota, atom overlaps and density fit.

o check Validation -> Outliers vs Overlaps, Peptides, etc.
  Outliers can go now?

o Why don't Ribbon diagrams cast shadows on themselves?
  They cast shadows on other things. Ah, the shader for
  ribbons needs to use the shadow map. Easy?
* Not easy, but done.

o R and X are not in the keybindings?
* Done - added R - seems slow.

o coot.refine_residues_py() doesn't wait for completion of
  the refinement in immediate-replacement mode.
* Fixed.

o refine ctrl click drag atom (without refinement) in molten zone

o get em_placement working

o auto-fit rotamer on newly added residue (add-terminal-residue)
  This is tricky because both simple and auto-fit use mutate_to_type_inner()
  because they both use mutate_to_type_HIS() etc (I think).
  Mutate and auto-fit is not doing auto-fitting.
* Done - seems reasonable now.

o non-solid aniostropic ADP representation - Claus.
  Tricky.

o read molprobity_probe.txt as a string in libcootapi
  get_probe_dots_unformatted_mesh()
  c.f handle_read_draw_probe_dots_unformatted()

o Add the handling of "missing atoms" in skills. Validation first.

o Lucrezia to write molprobity script producing JSON for
  input to Moorhen and Coot.

o Oliver: torsion validation by dictionary?
  Note ring info from mogul is interesting also
  Make Acedrg extract torsions.

o is there python access to headers in the Coot API?
  No. There should be.

o Fill PyObject *model_composition_statistics_py(int imol);

o "Summary of Structure" for accession code using Solr?

o "press U to revert centre" label when Fetching a model
* Done

o ctrl click-drag to refine drag single atom in molten zone
  Check on PC, where rotation is on right mouse.

o Fit loop dialog too wide

o eigen-flip should flip only "active" alt conf

o have another look at drag and drop from the Finder
* Maybe macOS bug - see GTK drag and drop feedback issue chat

o look up what does RDKit do with carboranes when minimizing?
* Done. Seems tricky but there are people doing stuff with carboranes.

o for api, atom-spec(chain_id, res_no, inscode, atom-name, alt-conf) to cid for interfacing to servalcat

o update your moorhen - look at sampling factor bug.

o Make int read_coordinates_from_url(url) i.e. bypass pythonic strings
  (especially gzipped strings). Low priority.

o 4wa9 coot.get_environment_distances_representation_py(0, ["A", 9000, ""])
  returns no result.

o add a coot_ping() tool to the bridge that checks if it can communicate
  with Coot.
* Done.

o Molecule 4 is "Copy_of_pdb2hyy.ent Chain A" - but I didn't intentionally create it. Looking back at my code, when I called:
   coot.superpose_with_chain_selection(0, 3, "A", "A", 1, 1, 1)
   superposing on 4wa9.
   The molecule name should end in "with superposed Chain A"

o add a coot api function that returns a list of
  residue specs and names: named_residue_specs() perhaps
  or all_residue_specs_py() c.f. get_residues_in_chain

o In the API search, use "|" for logical or. Document it in the bridge.

o make ribbon diagrams be generic display objects, so they can
  be deleted or undisplayed.

o what do I have for placing dummy atoms in Coot and chapi?

o for LLM connection, I will need to be able to run servalcat
  synchronously.

o Add to moorhen atom selection:
   No sidechain/no mainchain
   for making figures where residues interact with protein

o Errington 2024

   https://link.springer.com/article/10.1186/s13321-025-01011-6
   s13321-025-01011-6.pdf

o shader: for clipped bonds and atoms (c.f. normal) try skip
  rather than black(ish)

o add that the carbonyl oxgen is rotated in the documenation for
  flip peptide.

o ctrl click refine drag atom in molten zone

>>>>>>> Stashed changes
o Fit loop dialog too wide
* Checked, I don't see where the width is set.

o Rama plot doesn't label residue
=======
* Done.

o Rama plot doesn't label residue 

o add a setting which will mean that quick-save and end session save
  files are written to the local directory. Derek Logan
>>>>>>> Stashed changes

o what should coot say on loading a key-binding?
  What happens if there is a python error on reading

o what does the Coot interface to running servalcat look like?
  Needed for Agentic Coot.
  I added one to chapi Dec 2024.

o give backrub_rotamer_intermediate_atoms() a key-binding

o Add Coot api access to header and secondary structure info

o what is the equivalent to "--code" in python?

o New std::fabsf() usage - change to fabsf()
* Done.

o Clemens: already basic functionality in gemmi for fortran.
  Good useful api documentation for GEMMI. In C++ is fine for
  the moment.
* Done.

o add that the carbonyl oxgen is rotated in the documenation for
  flip peptide.
* Done.

o Rename the binaries in CMake:
   findligand
   findwaters
   coot-mini-rsr
   res-tracer-libcootapi

o add an m_pair_max_number for molecule_atom_overlaps_py()
  and document that 30 should be used by typically.
* Done.

o difference_map_peaks_py() should return information about
  the closest atom.

o about dialog should give date and commit for a pre-release
  [Clemens]

o make sure you can edit chi on test30_0 structure, multi-carbo-coot-3.pdb

o make better docs for rsr-functions and add them to the coot.i file

o fix documenation for all_molecule_ramachandran_score_py()

o J: add CUDA version of FFT and therefore sharpen/blur

o extend the screen parser for the ADP analysis.

o maybe make bold b-factor and occupancies in atom info in status bar
  std::string atom_info_as_text_for_statusbar(int atom_index, int imol);
It will do for now.

o make sure you can edit chi on test30_0 structure, multi-carbo-coot-3.pdb
* Seems OK, the O1 has been deleted (for the link)

o difference map peaks
  void graphics_info_t::fill_difference_map_peaks_button_box()
  add closest atom info
* Done.

o about dialog should give date and commit for a pre-release
* Done

o make better docs for rsr-functions and add them to the coot.i file
* Done.

o fix documenation for all_molecule_ramachandran_score_py()
* Done.

o put alt-conf switcher in the gui
* Done.

o fix/reverse M and N key bindings.
* Done.

o --buster does the right thing.
* Nearly.

o tell the user to use range/pair before Make Link...
* Done. Not great.

o --no-splash-screen doesn't work
* Fixed.

o curmudgen mode should turn off the unhappy atom marker
* Done.

o difference map peaks do not need position
* Done.

o add a coot function PyObject *get_chain_ids(int imol);
* Done.

o last cliked Go will have a different colour
* Done.

o accept-moving atoms from scripting doesn't undisplay the HUD buttons.
* Done.

o fix the crash in coot.map_to_model_correlation_stats_per_residue_range_py()
* I didn't find the crash, but I fixed a bug in the output.

o Stuart: Moorhen: the colour of atoms when coloured by element should be transparent

o check that amplitude_vs_resolution_py(1) gives sane results for tutorial data.
* Done - it does now.

o when user selects left-mouse for view rotation, right mouse should be for zoom. Check
* Yes.

o what is the keybinding for pepflip? Add it to the shortcuts
* It's q. Added to Shortcuts

o Clement: easy acetylation, methylation of side chains in moorhen - How?
  Good question. But not for now.

o Put unlabel atoms in Draw menu.

o local b factors - don't label hydrogen atoms
  use the b-factor to change the colour of the B-factor labels
  or make it easy to model colour by b-factor atoms.

o make down key work to move down to the next difference map peak.

o screen: turn on green highlighting for relevant atoms if possible
  maybe not green.
Adjusted. Good enough for now.

o zoom in for unhappy atom if long way out.
* Meh.

o need a space after FILE-1 filename in acedrg link input

o search CCD with a smarts - and a smarts from a lidia mol

o with --dictionary, turn off the molecule genertion
* Done.

o screen: fix alt conf parsing in global phasing output
* Done.

o search monomer library molecule images are too small on macos - or
  at least, on this laptop.

o a switch "state-set" callback has 3 args - check code
* Done.

o make dark-mode user-configurable - gui item?
* Tried - didn't work

o martin: iterate through residues in chapi.
  say to change the rotamer.
  Make a function: residues_in_chain_py(imol, chain_id)
* Done.

o add an N-linked glycan and then undo it.
* Done.

o screen: go to atom can be under other windows and and doesn't "pop up"
  when you click on the button
* I have added unminimize. gtk_window_present was already in place. WM issues.

o screen: flash the atom selection when going to planes or so for global phasing screen
* Done. Good

o add tick mark and modification notifier on screen dialog
* Done

o screen: move unhappy atom tab after the summary
* Done

o screen: check mtz file for Flearly and Flate and ano map labels
  How about "auto-read"?

o Use arrow key on difference map peaks

o martin: change to rotamer number in chapi.

o martin: get number of rotamers for residue type

o cartoon putty?

o CSHL: Coot enable option to disable double click with trackpad -
        option/preferences

o CSHL: Does export of high-res mesh for model as gltf actually export
        a high-res mesh? Consider using instancing.

o C2S2: need key-binding for rotation around axis into the screen

o S2C2: split the recent pucker analysis plots by purine/pyrimidine

o S2C2: make a figure with DNA backbone and bases, without backbone
        or maybe protein perhaps. Maybe around the ligand binding site.

o S2C2: "backbone energy" - for comparing structures when
        flipping peptides

o S2C2: arene-arene interactions in the figure key from chapi?

o S2C2: Is the conformation generator in chapi?

o S2C2: Ser/Thr linked carbohydrate - how hard can it be?

o S2C2: the fitting of the FLEV to its window doesn't work well.

o S2C2: Flev Close button doesn't work.
* Looks OK to me.

o S2C2: write a function that swaps the alt conf of an atom
        (and its partner, obviously) see set_atom_string_attribute()
* Done. A/B swapping.

o S2C2: 7L17: arg A149 should be interacting with the ligand
* Done.

o C2S2: Add "Pick delete" - Ctrl left-click keeps the mode active
* Done.

o report the symmetry on the command line
* Done.

o without internet connection: don't overwrite existing pdb
  file with blank file when using --code
* Done. I think.

o CSHL: Visual feedback on changing the atom occupancies of a residue?
        Animated textures would be nice.
        Do it like "State Saved"
* Done - is fine.

o CSHL: pucker in C++? in New coot? There is no markup and there should be.
* Done for moorhen.

o CSHL: don't pick symmetry atoms when they are not displayed.
* Done.

o CSHL: Coot: environment distances don't update on moving to new residue
* Done.

o S2C2: On copy fragment, zoom and centre on the new fragment
* Done.

o Edit Chi Angles: when then torsion has not been set
  but the user tries to move the mouse, then make
  red rings over the atoms. (on-going red rings will need
  to be checked). Make sure that Edit Chi Angles works
  with a trackpad.
* Done.

o Adding a label to an atom should change the status bar text
  [Clemens Vonrhein]
* Can't reproduce

o CSHL: molprobity.rna_validate to find RNA suite outliers. Mark this
        up in Coot.
* Fix later.

o CSHL: 0.9.x delete deviant extra restraints doesn't work
* Fix later.

o CSHL: drag and drop mtz and pdb together from the Finder
* Fix later.

o CSHL: Coot:: add proportional editing.
* Fix later.

o Coot: use common names in Add Other Solvent dialog - synonyms?
* not a priority.

o CSHL: Coot: center of screen crosshairs customizable.
  scale with the zoom.
* Done.

o CSHL: Make Link
* It's all done. You need to use the "Range/Pair" button to set it up.

o CSHL: Coot: add other residue type to other solvent molecules
* Done.

o CSHL: triple-refine auto-accept key binding. Does it exist?
* Yes - the H key.

o CSHL: the display manager is displayed from a state script generated
        when the display manager was not displayed.
* Done.

o CSHL: Add other solvent molecule: add nitrate, NO3
* Done.

o CSHL: open a pdb file in another directory. Now open an mtz file
   - the file dialog should start in the same directory, but it does not.
* Done.

o CSHL: "no unmodelled blobs" dialog needs fixup.
* Done.

o CSHL: remove the startup script and see if it keeps asking about left mouse
* Seems to be doing the right thing.

o CSHL: get monomer - grab the focus
  Does the dialog close properly on enter? No.

o CSHL: undo symmetry view
* Done.

o CSHL: Coot: where is keyboard mutate?
* Done.

o Score lucy's ligands.

o bring delete_link to the user interface in Coot
* Done.

o key-binding: simple R - and add a shortcut too. Also triple-refine-auto-accept.
* Done

o Add delete_link() to libcootapi - it's in coot-molecule

o get some RNA and do a copy fragment. The fragment should have
  orange phosphate atoms.

o colour by dictionary/chain for 3ood ligand.

o when refining carbohydrate, don't find links by distance - use residue numbers and links.
* partially done - needs testing/work for mmcif input.

o Have another look at the carbohydrate builder.

o where are we with the panda inspect interface?

o update build-it-3-3 to the latest version of the RDKit: 2025_03_6

o Add to the EM tutorial (both Coot and moorhen) running MMRRCC before and after
  (morph) fitting.

o have a look at moorhen CMakeLists.txt for how to properly use rdkit libs

o html anchors so that svg (flev) from coot can be used for interactivity in moorhen.

o Moorhen: get the map for the given molecule when using EM structure

o Click and drag the PAE plot

o Ctrl right-mouse to change the clipping planes

o strip spaces on PDB access code entry
  (From Clemens)
* Done.

o after add other solvent moleucle, try valigdtion graphs
   model chooser and you will ssee the ligand as a molecule!
* Done.

o Where did we get to with alt conf colouring or selection (in Coot)
  e.g. untangle chalenge challenge. Look at alt-conf-switcher.py
* Done.

o prefix with "coot-" the CMake executables
* Done.

o For MMRRCC: use a different residue range length for averaging.
* Done.

o moorhen: make a useful interface for atom overlaps
  Write a test.
* Done.

o Get the bonding right for 7045509.cif - the Se1-Br
  bonds are in the cif file (when colour-by-dictionary)

o Put sad markers on unhappy atoms

o talk to Bernie about chapi
* Done.

o move the download from COD to XDG.
* Done.

o make molecules to triangles compile without coot libs
  then split the build of libcootapi to link then
  m2t library.
* Done!

o check chemistry - extra hydrogen atom when making a link.

o does "make mask" have a place in the GUI in Coot?

o where did we get to with alt conf colouring or selection (in Coot)
  e.g. untangle chalenge challenge. Look at alt-conf-switcher.py

o make some inchi keys for the G* dictionaries. Using my parser and making
  rdkit molecules - do they match the inchi keys from the wwwPDB CCD?
* Done. Good progress

o "Fill partial residues" doesn't work.
* Done.

o "Phosphorylate this residue" doesn't work.
* Done.

o make a function: to update bonds without updating bonding.
  Useful for dynamics.
* OK, done - now I need a means to genate molecule position updates.

o check chemistry - extra hydrogen atom when making a link.
  Example? Reported by Clemens?

o Clemens: edit the alt conf-ids interactively.
  Residue Editor is not enough. Clarify with Clemens.

o Consider atom ids in output from libcootapi/chapi when gemmi is used.
  We need label_atom_id and label_segid (not the auth version of those)

o coot: let's get bansu integrated - for those who don't have acedrg

o Coot: 2 (EM?) maps - don't scroll the map that is not displayed

o libcootapi/moorhen: density correlation for a cid

o libcootapi/moorhen: renumber residues function

o libcootapi add a mask for the fourier shell

o libcootapi: using model and gaussian surface export a mask soft edge (0.0 to 1.0 in floats)

o moorhen/lhasa: use bansu for link generation

o coot:
  contour level for map 1 is 0.187223 pending
  tell me what the step size is also.

o dot and comma don't work for rotamers

o install cctbx (conda install) to get mmtbx.probe2 to get new dots.

o molprobity reduce has updated the hydrogen bond distance (it seems?)
  libcootapi should follow - actually, use distances in new monomer library.

o how to represent missing ligand atoms?
  Draw them in black with a white outline?

o Lucrezia: table of bond and angles and distances vs model table in moorhen

o Moorhen: auto-fit-rotamer without map.

o Delete link in Coot

o Moorhen: environment distances to symmetry-related molecules.

o Robbie: 3lem: B2-B3 link

o in moorhen, maybe coot, draw the dodecs close to CA - not gapped
  witht the rama ball missing.

o Moorhen/libcootapi test fsc with more map pairs

o Coot: go to atom dialog and use numpad enter key. Needs a computer
  with a numpad!

o Coot: bring carbohydrate, in WTA mode, to the gui
  i.e. 4d514356326ca57852d349f9a2e34b7815688673 needs user interface.

o ligand code KCX: make pdb from chapi and read it into moorhen - with hydrogen atoms
  In Lucy's example some hydrogen atoms were disconnected.

o add_molecular_symmetry add this to moorhen/libcootapi

o calculate the bonds up-front and use a container that can generate the bond
  and atom indices from a mol or atom selection that has updated atom positons
  (from dynamics, say).

o set status 0 for more than 100,000 (or so?) vertices
  Make an api function for the user to set the max vertices
* Done

o "de-dust"/hide dust. Maybe the contour level needs to be sent also.
* Done.

o given the residual map, can you find the centres of the blobs? I have in mind
  doing the cryo-EM tutorial non-interactively. Use rings and shift? Use low-resolution
  maps - resample for more speed.

o give me a list of "clashes" in the validation tools in moorhen

o add low-pass filter

o add solvent mask - combine the maps from the gaussian surfaces

o check "Fix nomenclature errors"

o rebuild_fragment_using_dbloop function needs more work.

o this fails to create the directory for the dictionary (it seems):
INFO::       Reading coordinate file: /Users/pemsley/.cache/Coot/coot-download/pdb4dab.ent
INFO:: file /Users/pemsley/.cache/Coot/coot-download/pdb4dab.ent has been read.
PATH p-B
PATH p-C
DEBUG:: try_dynamic_add() using package_data_dir(): /Users/pemsley/install-coot/share/coot
:::::::::::::::: debug in try_dynamic_add() here A with s /Users/pemsley/install-coot/share/coot/lib/data
:::::::::::::::: debug in try_dynamic_add() here A with null cmld
debug:: try_dynamic_add(): here C filename /Users/pemsley/install-coot/share/coot/lib/data/monomers/
DEBUG:: try_dynamic_add(): /Users/pemsley/.cache/Coot/monomers/h does not exist

o on the coot web page say how/where to report a bug.

o read in lib/data/monomers/metals.json - add it to the disribution

o check power-scaled map with 1gwd atom map.

o try 8b0x in flatpak coot. Colour by chain. Missing dictionaries.
  Make an easy way to download all the missing dictionaries

o get_atom_position() add to chapi

o add sphericity test (current analysis) to chapi

o do we have "B-factor analysis" i.e.. show me atoms with B-factor
  more than 70 (or so)

o rdkit mol -> mmcif - for output from layla

o 6ZV ligand - does it display correctly?

o Ctrl-S should add something to the log.

o Assign sequence gui needs fixing..
* Done.

o Let's move the light for different shadows in Fancy Mode

o in cfc, give me a button that shows the chemical features
* Done.

o halogen ligand interaction - investigate.

o refine a structure with the wrong magnification and look at the
  distortion of the bond lengths. I have done some work on this,
  but where is it?

o CFC should also check for pi-stacking to the protein
  (i.e. not just internal chemical features)

o do a better job at the 3d "icons" for chemical
  features - so that I can tell what it is from the shape.
  Maybe use blender to make the "icons"
  Can you indicate the number of contributors somehow? Size?

o what is PLIP(ify) Interaction Key?
  https://github.com/volkamerlab/plipify
  Salentin, S. et al. PLIP: fully automated protein-ligand interaction profiler.
  Nucl. Acids Res., 2015, 43 (W1): W443-W447.
  Uses conda - what does it depend on and can it be used outside of conda?

o show the PLI interactions in 3d (in moorhen too)

o external Rama torsion restraints for servalcat

o make "Environment Distances" an overlay

o make downloading emd map an overlay

o Ctrl-M should merge molecule (active ligand) into other model.
  Or just rewrite the "Review/Accept Ligands" dialog.

o fix relocatable installation of coot-residue-density-fit
  see the homebrew install

o put contact dots on the residues around the ligand.
  How about hexagonal slabs (instead of balls) as
  an option? (Tricky to get the orientation correct "between" atoms).

o pickable ribbons.
  Big Job.

o Highlightable/pickable genericic objects

o double-click on a symmetry atom to label.

o does get_ligand_validation_vs_dictionary() do good things?
  Does it give ceus?

o Bonds and angles validation on 2d diagram from chapi
  as svg.

o arwen, alejandro, santosh, dorothee

o have another look at the PAE drag box for residue selection

o Take a cif molecule, copy it, move the copy to symmetry-related position
  merge with first and write out the cif. Is the header (secondary structure)
  preserved in the outpute cif?

o Robbie: 3pdt is Mg and should be K. A2.

o moorhen (and coot) ribbon diagram coloured by b-factor

o read in a molecule, make a molecule with DNA models. Refine DNA, then
  try to undo refinement of DNA. Fails. 8v1w.

o check that hydrogen bonds are displayed correctly.
  See update_hydrogen_bond_mesh()

o fix the map caps. Make it work in moorhen. Single colour mode and joined edges.
  Slice "solid" maps.

--- Other Items ---

o "Flood the blob with dummy atoms" - useful of pomgnt2

o import cif dictionary from string.

o Add ability to rotate view around z axis :: 0.5

o auto-scale the make-a-difference map
  think about create power-matched option also? It's in chapi :: 1

o colour stops for b-factor analysis, rather than colour wheel. :: 1

o have another look at Rama plot :: 1

o Add curl fetch stuff to chapi api. Use modern accession codes.

o address-sanitizer for coot

o Fix the "Fetch" buttons - new GTK4/glib? :: 2

o "Proportional editing" molecule rotation :: 2
  Actually "fragment" rotation makes more sense.

o Get in touch with Kay for the display of h,k,l as atoms (cif)
* Done. Progress has been made.

o Atom sphere radius depends on B-factor - proportional to cube root maybe?
  set_atom_radius_by_b_factor_mode(imol, state)
  atom_radius_by_b_factor_scale_factor(imol, sf)

o draw 9c1h with molecular symmetry colouring :: 1
  turn on set_colour_by_ncs_chain(imol, 1)

o "Proportional editing" molecule rotation :: 2
  Actually "fragment" rotation makes more sense.

o try texture atlas for text - make a new test app from scratch :: 4

o WTA carbohydrate :: 6

o what does "RenameVerticesAndTriangles()" do? Do we need it?

o Cross-out "Screenshot" unless we have OpenGL 4.2 or later :: 0.5

o Highlight the chain neighbours in the Rama plot. Bring back the green square.

o how do I make the HUD buttons have rounded edges? Can I make the health bars
  have rounded edges?

o Rama and Rota graphs validation graphs have terrible scaling - difficult to fix :: 4

o Have a look at contact dots during refinement - with the 3a3a say, there is hang, and the
  final refined structure is shown - there is no animation :: 2

o Have a look at the poly-TRP problem of sequence identification. :: 4

o  It was a strange bit of code in get_group().
   Now the issue is duplication of the model on writing. mmdb bug.
   Solved now? Am I using the right version?

--- Done Items ---

o check for g.display_control_window() usage - they should
  not be needed these days, I think.
* Done

o make "Copy Fragment" an overlay
* Done.

o get rid of generic object functions from graphics-info.h
  Put them in aa new file along with
  bool is_valid_generic_display_object_number(int obj_no) const;
* Done

o add header guard to gizmo and gensurf headers
* Done.

o change stringify_error_message to stringify_error_code
* Done

o rename Cartesian.h to Cartesian.hh
* Done.

o Move Molecule Here should be an overlay
* Done.

o Talk to Stuart:
::function get_atom not found - out of 386 docstrings
::function get_atom_using_cid not found - out of 386 docstrings
::function get_residue not found - out of 386 docstrings
::function get_residue_using_cid not found - out of 386 docstrings
* Done

o Move Molecule Here should be an overlay
* Done

o move make_directory_maybe() to take std::string arg.
  Will need to change the header. Maybe a new header?
* Done.

o side-chain 180 should do a syn/anti flip for nucleotide bases
  i.e. rotate 180 around C1-N1 (or N9)
  Make a video. In chapi too?

o what are the chi angles for ASN? In sequons? With link
  to NAG?
* for Lucrezia. Use top 3000 filtering on modern structures to
  get new reference set.

o User-defined filename filter for coords file open
  https://docs.gtk.org/gtk4/class.FileFilter.html
* Assigned to Jakub

o make a file that maps CCD-id to RDKit Canonical SMILES.
  (is the SMILES in Acedrg output the canonical SMILES?)
* Looks good. Jakub to continue this

o Add split water to new coot
* Done.

o install latest chapi, python3 import coot_headless_api
  then the molecules_container_t gives an error message
  about COOT_PREFIX
* Not for me.

o std::bad_alloc when fitting waters in chapi - maybe.
  Put some protection in.
* Done.

o filename filter for coords file open
  https://docs.gtk.org/gtk4/class.FileFilter.html
  Done. But now I think that this is not what Oli wanted.
  There should be a user-defined globbing string.
  Add a GtkFileDialog to a dialog. See google docs notes.

o multi-select for maps
* Done

o 2vf7: alphafold model tutorial? Or is it too close to the actual model?
  *It's too close.  Good idea though.

o bernie comments
* Done.

o refine_residue_using_cid "CHAIN": too much debugging information
* Done.

o Fix curlew (download to wrong directory)
* Done.

o make a function that returns the secondary structure for libcootapi/chapi
* Done.

o print the key bindings
* Done.

o add-water should have a key-binding
* Done.

o swig should not be a dependency if building chapi
* Done. And done.

o Process Stuart's outliers file ::: 1
* Done

o fix the colour wheel in B-factor analysis ::: 1
  1geh B-factor colour ramp looks wrong

o Add Metals to Coot startup, Moorhen and chapi ::: 0.2
* Done.

o Save symmetry coordinates.
* Done

o what is the radius of gyration? Make a function. ::: 1
* Done.

o remove GEMMI hack at top of atom-selection-container.cc ::: 0.2

o make a function that returns the secondary structure for libcootapi/chapi
* Done

o key-binding for smooth bonds
* Done.

o layla needs a wrapper and to be moved to libexec
* Done.

o get rid of debugging on get_h_bonds()
* Done. Nice.

o move make_directory_maybe() to take std::string arg.
  Will need to change the header. Maybe a new header?
* Done.

