IT'S FINALLY HERE.
Changes since v2.0.0:
- MAGNETOSTATIC LENSES!!! Made two entirely new classes to support magnetostatic lenses and rehauled the visualization to allow magnetic field visualization as an option. API is near-identical to electrodes, and visualization in the UI is red instead of electrostatic lenses' black to provide visual distinction in systems with both electric and magnetic lenses. Uses Dirichlet masking for the lenses and Neumann boundaries at the boundaries because this is more realistic for metal boundaries for magnetic lenses. There's no 'grounding' equivalent for MMF.
- Added pytest coverage to v2.0.0 and v2.1.0 features.
This is a feature I've struggled to figure out how to add- I've tried on at least two occasions. I finally caved and used the paraxial ray equation for magnetics rather than Lorentz handling because that would require azimuthal velocity which we don't track. It's more than accurate enough for our applications and Lorentz in electrostatics is more important regardless. Only one major update that I suggested that hasn't been done yet is Coulomb effects, and I've tried to do that before and failed, but I think I have a viable path: beam envelope methods (handles the collective Coulomb effect) with analytical corrections for the Boersch effect (handles stochastic Coulomb effects). This might even be faster than my current ray-tracing approach, and is basically at the level of performance of Monte-Carlo methods for Coulomb effects. I also plan to add 3D visualization by rotating it around a selectable axis. UX is important, after all, yk? Look out for v2.2.0 coming out soon with these changes. Also, Picht finally passed 1000 LOC.
Visual of the new UI with the colormap for the B-field and magnetic focusing in action:

Install picht at:
pip install picht