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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
|
#!/usr/bin/env python
# import libraries
import time
import numpy as np
import sys
from subprocess import call
# define the number of stars that should be generated
nos = int(sys.argv[1])
# define some arrays for storing the values
arr_stars = np.zeros((int(nos), 3))
arr_saved_stars = np.zeros((int(nos), 3))
# define various paths
path = "data/2e7.csv"
save_path = "stars/" + sys.argv[2] + ".csv"
# star13 -> 586 stars
# define the random-value range [rho_min; rho_max]
rand_min = 0
rand_max = 1477.1586582000994
# define the range (size) of the galaxy
range_min = -1e7
range_max = 1e7
# main function
def main():
# define the variables for storing the amount of stars kept or kicked away
stars_kept = 0
stars_kicked = 0
i = 0
# start the timer
start = time.time()
# open the rho file
with open(path) as data:
# read out the lines from the rho file
rho_file = data.readlines()
# for every star...
# for i in range(0, nos):
while(stars_kept < nos):
# generate the random star-coordinates
x = np.random.uniform(range_min, range_max, size=1)
y = np.random.uniform(range_min, range_max, size=1)
z = np.random.uniform(range_min, range_max, size=1)
# calculate the distance of the star to the center of the galaxy
r = np.sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2))
# print(round(int(r), 0))
# generate a random value in the range [rand_min; rand_max]
a = np.random.uniform(rand_min, rand_max, size=1)
# read out the corresponding rho value from the lookuptable (rho-file)
b = float(rho_file[round(int(r), 0)].split(", ")[1].strip("\n"))
# print("{:<5}{:<20}{:<20}{:<20}{:<20}{:<20}{:<20}".format(str(stars_kept), str(x), str(y), str(z), str(a), str(b), str(r)))
# if the random value is smaller than the corresponding rho value
if(a < b):
# add the coordinate to arr_saved_stars
arr_saved_stars[stars_kept][0] = x
arr_saved_stars[stars_kept][1] = y
arr_saved_stars[stars_kept][2] = z
# increment the star_kept counter
stars_kept += 1
print(stars_kept)
else:
# increment the star_kicked counter
stars_kicked += 1
# increment i
i = i + 1
print("")
end = time.time()
whole_time = end - start
out = ">> Finished generating stars in " + str(whole_time) + " seconds\n"
print(out)
# write the star coordinates to a file
start_write_file = time.time()
print(">> Writing the star-data to " + save_path)
with open(save_path, "a") as stars_data:
for i in range(0, nos):
x = arr_saved_stars[i][0]
y = arr_saved_stars[i][1]
z = arr_saved_stars[i][2]
stars_data.write(str(x) + ", " + str(y) + ", " + str(z) + "\n")
end_write_file = time.time()
time_write_file = end_write_file - start_write_file
out = ">> Finished writing star-data to " + save_path + " in " + str(round(time_write_file, 4)) + " seconds\n"
print(out)
time_all = whole_time + time_write_file
time_min = round(time_all / 60, 1)
# print some stats
print("")
print("{:<20}{:<20}".format("Time (complete)", str(round(time_all, 4)) + " seconds"))
print("{:-<40}".format(""))
print("{:<20}{:<20}".format("Number of Stars", str(nos)))
print("{:<20}{:<20}".format("Stars Kicked:", str(stars_kicked)))
print("{:<20}{:<20}".format("Percent: ", str( nos / stars_kicked * 100 ) + "%"))
hour = int( time_all // 3600 )
time_all = time_all % 3600
minutes = int( time_all // 60 )
time_all = time_all % 60
seconds = int( time_all )
a = path
time_a = str(hour) + ":" + str(minutes) + ":" + str(seconds)
b = "{:<20}{:<20}".format("Time (h:m:s)", time_a )
c = "{:<20}{:<20}".format("Number of Stars", str(nos))
d = "{:<20}{:<20}".format("Stars Kicked:", str(stars_kicked))
e = "{:<20}{:<20}".format("Percent: ", str( nos / stars_kicked * 100 ) + "%")
f = a + "\n" + b + "\n" + c + "\n" + d + "\n" + e
call(["telegram-send", "--pre", str(f) ])
if __name__ == "__main__":
main()
|