QCaml/Utils/Electrons.ml

28 lines
698 B
OCaml

(** Number of alpha and beta electrons *)
type t = {
n_alpha : int ;
n_beta : int ;
multiplicity : int;
}
let make ?multiplicity:(multiplicity=1) ?charge:(charge=0) nuclei =
let positive_charges =
Array.fold_left (fun accu (e, _) -> accu + Charge.to_int (Element.to_charge e) )
0 nuclei
in
let negative_charges = charge - positive_charges in
let n_elec = - negative_charges in
let n_beta = ((n_elec - multiplicity)+1)/2 in
let n_alpha = n_elec - n_beta in
let result = { n_alpha ; n_beta ; multiplicity } in
if multiplicity <> (n_alpha - n_beta)+1 then
invalid_arg (__FILE__^": make");
result
let charge e =
- (e.n_alpha + e.n_beta)
|> Charge.of_int