--- Items ---

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

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

o proportial editing, with chain-based selection for
  rotation

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

o check that .coot_python_commands is being written
  and 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

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 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

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

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 crash on run unit tests:

Stack trace (most recent call last):
#31 | Source "Python/ceval.c", line 6439, in _PyEval_EvalFrame
      Source "./Include/internal/pycore_ceval.h", line 73, in _PyEval_Vector [0x7f1af7462f3f]
#30 | Source "Python/ceval.c", line 5381, in do_call_core
      Source "Python/ceval.c", line 7357, in _PyEval_EvalFrameDefault [0x7f1af745d50f]
#29 | Source "Objects/classobject.c", line 89, in _PyObject_VectorcallTstate
      Source "./Include/internal/pycore_call.h", line 92, in method_vectorcall [0x7f1af735560f]
#28 | Source "Python/ceval.c", line 6439, in _PyEval_EvalFrame
      Source "./Include/internal/pycore_ceval.h", line 73, in _PyEval_Vector [0x7f1af7462f3f]
#27 | Source "Python/ceval.c", line 5381, in do_call_core
      Source "Python/ceval.c", line 7357, in _PyEval_EvalFrameDefault [0x7f1af745d50f]
#26 | Source "Python/ceval.c", line 6439, in _PyEval_EvalFrame
      Source "./Include/internal/pycore_ceval.h", line 73, in _PyEval_Vector [0x7f1af7462f3f]
#25   Source "Python/ceval.c", line 4774, in _PyEval_EvalFrameDefault [0x7f1af745ca28]
#24   Source "Objects/call.c", line 214, in _PyObject_MakeTpCall [0x7f1af73526ec]
#23   Source "Objects/methodobject.c", line 553, in cfunction_call [0x7f1af73a9550]
#22   Source "/home/paule/Projects/coot/git/coot-main/build-arch/src/coot_wrap_python.cc", line 29968, in _wrap_regularize_zone [0x7f1ae64dcc64]
       29965:     SWIG_exception_fail(SWIG_ArgError(res5), "in method '" "regularize_zone" "', argument " "5"" of type '" "char const *""'");
       29966:   }
       29967:   arg5 = reinterpret_cast< char * >(buf5);
      >29968:   result = (int)regularize_zone(arg1,(char const *)arg2,arg3,arg4,(char const *)arg5);
       29969:   resultobj = SWIG_From_int(static_cast< int >(result));
       29970:   if (alloc2 == SWIG_NEWOBJ) delete[] buf2;
       29971:   if (alloc5 == SWIG_NEWOBJ) delete[] buf5;
#21   Source "../../coot/src/c-interface-refine.cc", line 175, in regularize_zone [0x7f1af955f394]
        172:       short int auto_range = 0;
        173:       if (index1 >= 0) {
        174: 	 if (index2 >= 0) {
      > 175: 	    coot::refinement_results_t rr = g.regularize(imol, auto_range, index1, index2);
        176: 	    std::cout << "debug:: restraints results " << rr.found_restraints_flag << " "
        177: 		      << rr.lights.size() << " " << rr.info_text << std::endl;
        178: 	    if (rr.lights.size() > 0)
#20   Source "../../coot/src/graphics-info-modelling.cc", line 2500, in regularize [0x7f1af97a7ccd]
       2497:       std::cout << "Picked atoms are not in the same chain.  Failure" << std::endl;
       2498:    } else {
       2499:       // flash_selection(imol, resno_1, inscode_1, resno_2, inscode_2, altconf, chain_id_1);
      >2500:       rr = copy_mol_and_regularize(imol, resno_1, inscode_1, resno_2, inscode_2, altconf, chain_id_1);
       2501:       short int istat = rr.found_restraints_flag;
       2502:       if (istat) {
       2503: 	 graphics_draw();
#19   Source "../../coot/src/graphics-info-modelling.cc", line 196, in copy_mol_and_regularize [0x7f1af97a774a]
        193: 					 std::string altconf,// use this (e.g. "A") or "".
        194: 					 std::string chain_id_1) {
        195: 
      > 196:    return copy_mol_and_refine(imol, -1, resno_1, inscode_1, resno_2, inscode_2, altconf, chain_id_1);
        197: }
#18   Source "../../coot/src/graphics-info-modelling.cc", line 365, in copy_mol_and_refine [0x7f1af97a74fa]
        362:       // 					  imol_for_map);
        363: 
        364:       if (imol_for_map == -1)
      > 365: 	 rr = regularize_residues_vec(imol_for_atoms, residues, altconf, mol);
        366:       else
        367: 	 rr = refine_residues_vec(imol_for_atoms, residues, altconf, mol);
        368:    }
#17   Source "../../coot/src/graphics-info-modelling.cc", line 1201, in regularize_residues_vec [0x7f1af97a6be2]
       1198: 					 mmdb::Manager *mol) {
       1199: 
       1200:    bool use_map_flag = 0;
      >1201:    coot::refinement_results_t rr = generate_molecule_and_refine(imol, residues, alt_conf, mol, use_map_flag);
       1202:    short int istat = rr.found_restraints_flag;
       1203:    if (istat) {
       1204:       graphics_draw();
#16   Source "../../coot/src/graphics-info-modelling.cc", line 1654, in generate_molecule_and_refine [0x7f1af97a64b0]
       1651: 	    check_dictionary_for_residue_restraints(imol, residues);
       1652: 	 if (icheck.first == 0) {
       1653: 	    // info_dialog_missing_refinement_residues(icheck.second);
      >1654: 	    show_missing_refinement_residues_dialog(icheck.second, false);
       1655: 	 }
       1656:       }
       1657:    }
#15   Source "../../coot/src/graphics-info-modelling.cc", line 383, in show_missing_refinement_residues_dialog [0x7f1af97960e7]
        380:    gtk_widget_set_visible(vbox, TRUE);
        381:    clear_out_container(vbox);
        382:    for (const auto &rn : res_names) {
      > 383:       GtkWidget *label = gtk_label_new(rn.c_str());
        384:       char* ccx = new char[rn.size() + 1];
        385:       for (unsigned int ii=0; ii<=rn.size(); ii++) ccx[ii] = 0;
        386:       std::copy(rn.begin(), rn.end(), ccx);

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.

