mirror of
https://github.com/LCPQ/quantum_package
synced 2024-08-30 16:13:42 +02:00
73 lines
2.1 KiB
OCaml
73 lines
2.1 KiB
OCaml
|
open Core.Std
|
||
|
|
||
|
let filenames =
|
||
|
let dir_name = Qpackage.root^"/data/basis/"
|
||
|
in
|
||
|
Sys.readdir dir_name
|
||
|
|> Array.map ~f:(fun x -> dir_name^x)
|
||
|
|> Array.to_list
|
||
|
;;
|
||
|
|
||
|
let clean_file filename =
|
||
|
let command =
|
||
|
Printf.sprintf "cp -f %s %s.old" filename filename
|
||
|
in
|
||
|
let () =
|
||
|
match Sys.command command with
|
||
|
| 0 -> ()
|
||
|
| i -> failwith (Printf.sprintf "Command %s exited with code %d\n" command i)
|
||
|
in
|
||
|
|
||
|
let lines =
|
||
|
In_channel.with_file filename ~f:In_channel.input_lines
|
||
|
in
|
||
|
|
||
|
Out_channel.with_file filename ~f:(fun out_channel ->
|
||
|
|
||
|
let rec loop ~do_s = function
|
||
|
| [] -> ()
|
||
|
| line :: tail ->
|
||
|
begin
|
||
|
let buffer = String.strip line
|
||
|
|> String.split ~on:' '
|
||
|
|> List.filter ~f:(fun x -> x <> "")
|
||
|
in
|
||
|
let () =
|
||
|
match buffer with
|
||
|
| [] -> Printf.fprintf out_channel "\n"
|
||
|
| [ atom ] -> Printf.fprintf out_channel "%s\n" atom
|
||
|
| [ i ; expo ; coef ] ->
|
||
|
Printf.fprintf out_channel "%3s %14s %14s\n" i expo coef
|
||
|
| [ i ; expo ; coef ; coef2 ] ->
|
||
|
if (do_s) then
|
||
|
Printf.fprintf out_channel "%3s %14s %14s\n" i expo coef
|
||
|
else
|
||
|
Printf.fprintf out_channel "%3s %14s %14s\n" i expo coef2
|
||
|
| [ sym ; n ] ->
|
||
|
if (sym = "L") then
|
||
|
let () =
|
||
|
Printf.fprintf out_channel "S %3s\n" n
|
||
|
in
|
||
|
let rec build_newlist accu = function
|
||
|
| (0, _)
|
||
|
| (_,[]) -> List.rev ((Printf.sprintf "P %3s\n" n)::accu)
|
||
|
| (i,head::tail) ->
|
||
|
build_newlist (head::accu) ( i-1, tail )
|
||
|
in
|
||
|
let newlist = build_newlist [] ((Int.of_string n),tail)
|
||
|
in
|
||
|
loop ~do_s:true newlist
|
||
|
else
|
||
|
Printf.fprintf out_channel "%s %3s\n" sym n
|
||
|
| _ -> ()
|
||
|
in
|
||
|
loop ~do_s:do_s tail
|
||
|
end
|
||
|
in loop ~do_s:false lines
|
||
|
)
|
||
|
;;
|
||
|
|
||
|
List.iter ~f:clean_file filenames
|
||
|
;;
|
||
|
|