script Toto
This commit is contained in:
parent
8f04bfc471
commit
758f25a7e9
91
Data/extract_data.ml
Normal file
91
Data/extract_data.ml
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
let read_file filename =
|
||||||
|
let ic = open_in filename in
|
||||||
|
let rec aux accu =
|
||||||
|
try
|
||||||
|
let new_accu =
|
||||||
|
(input_line ic) :: accu
|
||||||
|
in
|
||||||
|
aux new_accu
|
||||||
|
with End_of_file ->
|
||||||
|
(close_in ic; List.rev accu)
|
||||||
|
in
|
||||||
|
aux []
|
||||||
|
|
||||||
|
|
||||||
|
let rec find_x x = function
|
||||||
|
| [] -> []
|
||||||
|
| line :: rest ->
|
||||||
|
let line = String.trim line in
|
||||||
|
match String.split_on_char ' ' line with
|
||||||
|
| x_test :: _ ->
|
||||||
|
if x_test = x then line :: rest
|
||||||
|
else find_x x rest
|
||||||
|
| _ -> find_x x rest
|
||||||
|
|
||||||
|
let get find_x conversion lines =
|
||||||
|
match find_x lines with
|
||||||
|
| line :: rest ->
|
||||||
|
begin
|
||||||
|
match String.split_on_char '=' line with
|
||||||
|
| _ :: n :: _ -> conversion @@ String.trim n, rest
|
||||||
|
| _ -> raise Exit
|
||||||
|
end
|
||||||
|
| [] -> raise Exit
|
||||||
|
|
||||||
|
let read_float x =
|
||||||
|
match String.split_on_char ' ' x with
|
||||||
|
| x :: _ -> float_of_string x
|
||||||
|
| [] -> invalid_arg x
|
||||||
|
|
||||||
|
|
||||||
|
let find_summary = find_x "N_det"
|
||||||
|
let get_ndet = get find_summary int_of_string
|
||||||
|
|
||||||
|
let find_nstates = find_x "N_states"
|
||||||
|
let get_nstates = get find_nstates int_of_string
|
||||||
|
|
||||||
|
let find_nsop = find_x "N_sop"
|
||||||
|
let get_nsop = get find_nsop int_of_string
|
||||||
|
|
||||||
|
let find_variance = find_x "Variance"
|
||||||
|
let get_variance = get find_variance read_float
|
||||||
|
|
||||||
|
let find_pt2 = find_x "PT2"
|
||||||
|
let get_pt2 = get find_pt2 read_float
|
||||||
|
|
||||||
|
let find_rpt2 = find_x "rPT2"
|
||||||
|
let get_rpt2 = get find_rpt2 read_float
|
||||||
|
|
||||||
|
let find_e = find_x "E"
|
||||||
|
let get_e = get find_e float_of_string
|
||||||
|
|
||||||
|
|
||||||
|
let rec read_block lines =
|
||||||
|
let ndet, lines = get_ndet lines in
|
||||||
|
let nstates, lines = get_nstates lines in
|
||||||
|
let nsop, lines = get_nsop lines in
|
||||||
|
Printf.printf "%10d %10d" ndet nsop ;
|
||||||
|
let rec aux lines = function
|
||||||
|
| 0 -> (Printf.printf "\n%!" ; lines)
|
||||||
|
| n -> (
|
||||||
|
let e, lines = get_e lines in
|
||||||
|
let variance, lines = get_variance lines in
|
||||||
|
let pt2, lines = get_pt2 lines in
|
||||||
|
let rpt2, lines = get_rpt2 lines in
|
||||||
|
Printf.printf " %16.10e %16.10f %16.10f" pt2 rpt2 e;
|
||||||
|
aux lines (n-1) )
|
||||||
|
in
|
||||||
|
aux lines nstates
|
||||||
|
|
||||||
|
let rec read_blocks lines =
|
||||||
|
try
|
||||||
|
let lines = read_block lines in
|
||||||
|
read_blocks lines
|
||||||
|
with Exit -> ()
|
||||||
|
|
||||||
|
let () =
|
||||||
|
Array.iteri (fun i fname ->
|
||||||
|
if i = 0 then () else
|
||||||
|
let lines = read_file fname in
|
||||||
|
read_blocks lines) Sys.argv
|
||||||
|
|
Loading…
Reference in New Issue
Block a user