-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmass_overview.py
executable file
·111 lines (88 loc) · 2.57 KB
/
mass_overview.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env python
import sys
import os
import argparse
import numpy as np
import pandas as pd
from loadmodules import *
import gadget_snap
from const import rsol, msol
import loaders
def mass_overview(
file,
save="plots",
eosspecies="species55.txt",
):
sp = loaders.load_species(eosspecies)
if isinstance(file, list):
len_f = len(file)
else:
len_f = 1
file = np.array([file])
dfs = [None] * len_f
for i, f in enumerate(file):
s = gadget_snap.gadget_snapshot(
f,
hdf5=True,
quiet=True,
lazy_load=True,
)
modelname = os.path.split(os.path.dirname(os.path.dirname(os.path.abspath(f))))[
-1
]
if sp["count"] != s.nspecies:
raise ValueError(
"Number of species in speciesfile (%d) and snapshot (%d) don't match."
% (sp["count"], s.nspecies)
)
data = {}
for j in range(s.nspecies):
data[sp["names"][j]] = (
s.data["mass"][: s.nparticlesall[0]].astype("float64")
* s.data["xnuc"][:, j]
).sum() / msol
dfs[i] = pd.DataFrame(data, index=[modelname])
df = pd.concat(dfs)
if not os.path.exists(save):
print("Creating save directory...")
os.mkdir(save)
savefile = os.path.join(save, "species_masses.csv")
saved = False
tryed = 0
while not saved:
if os.path.exists(savefile):
tryed += 1
savefile = os.path.join(
save,
"species_masses-(%d).csv" % (tryed),
)
else:
df.to_csv(savefile)
saved = True
return savefile
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"file",
help="Filename of composition file. If multiple files are provided, all will be plotted inthe same plot. Default: output/composition.txt",
nargs="+",
)
parser.add_argument(
"-s",
"--save",
help="Path to directory where plots are saved to. Default: plots",
default="plots",
)
parser.add_argument(
"-e",
"--eosspecies",
help="Species file including all the species used in the production of the composition file. Default: species55.txt",
default="species55.txt",
)
args = parser.parse_args()
s = mass_overview(
file=args.file,
save=args.save,
eosspecies=args.eosspecies,
)
print("Finished listing masses %s" % s)