(** Data structure to represent the molecular orbitals. *) open Lacaml.D type mo_class = | Core of int | Inactive of int | Active of int | Virtual of int | Deleted of int type mo_type = | RHF | ROHF | CASSCF | Natural of string | Localized of string type t = private { ao_basis : AOBasis.t; (* Atomic basis set on which the MOs are built. *) mo_type : mo_type; (* Kind of MOs (RHF, CASSCF, Localized... *) mo_class : mo_class array; (* CI-Class of the MOs *) mo_occupation : Vec.t; (* Occupation numbers *) mo_coef : Mat.t; (* Matrix of the MO coefficients in the AO basis *) eN_ints : NucInt.t lazy_t; (* Electron-nucleus potential integrals *) ee_ints : ERI.t lazy_t; (* Electron-electron potential integrals *) kin_ints : KinInt.t lazy_t; (* Kinetic energy integrals *) } val make : ao_basis:AOBasis.t -> mo_type:mo_type -> mo_class:mo_class array -> mo_occupation:Vec.t -> mo_coef:Mat.t -> unit -> t (** Function to build a data structure representing the molecular orbitals. *) val of_hartree_fock : frozen_core:bool -> HartreeFock_type.t -> t (** Build MOs from a Restricted Hartree-Fock calculation. *)