Add Spectroscopy workflow to Control Generator Step

Summary

This MR adds the Spectroscopy workflow to GIMS, backed by a new FHI-vibes input file generator, and includes a set of dependency upgrades and infrastructure improvements made along the way.

Spectroscopy workflow (frontend)

  • New Spectroscopy workflow option with a dedicated icon
  • New fields in Fields_FHIaims.js: phonon method, MD settings, spectroscopy type, output polarization (grouped field), and related constraints
  • Workflow sections in ControlGeneratorMod now follow a two-level form JSON structure (form.basic, form.md, form.spectroscopy, form.phonopy, form.md_vibes) that makes section membership explicit and simplifies backend parsing
  • Section visibility is driven by constraints so that e.g. the phonopy or md_vibes section appears only when the matching phonon method is selected

FHI-vibes backend (app/gims/inputs/FHIVibes.py)

  • New FHIVibes input class that generates fhi-vibes task files (geometry, calculator, phonopy/MD sections) from the submitted form JSON
  • Registered in __init__.py and wired into prepare_input.py
  • 97 backend tests covering phonopy and MD sub-workflows

FHI-aims output parser (frontend, client/src/output-analyzer-mod/parser/)

  • JS port of the FHI-aims output parser (previously Python-only): parsers.js, converters.js, abc.js, utils.js
  • Enables in-browser parsing of aims.out files without a round-trip to the server

Structure viewer — three.js r184 upgrade

  • Upgraded three.js from 0.130 to 0.184
  • Restored original lighting: opted out of the r152+ colour management changes (ColorManagement.enabled = false, outputColorSpace = LinearSRGBColorSpace) and compensated for the r155 physical BRDF π factor on all light intensities
  • Fixed pointer-event handling broken by TrackballControls switching from mouse to pointer events in r152: moved hover/click/drag listeners to the right elements and used setPointerCapture to prevent TrackballControls from stealing clicks on UI overlay elements (Switch, dropdowns, 2D canvas legend)

Dependency and test infrastructure

  • Jest upgraded to 30, canvas to v3 (removes the tar audit vulnerability)
  • structuredClone polyfill added to setupTest.js for jsdom compatibility
  • New frontend test suites: controlGenerator.test.js (29 tests covering all workflow variants), workflows.test.js, parseAimsOutput.test.js
  • CI Python version updated; ASE pinned to 3.26

Merge request reports

Loading
Loading