about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/python/coord_clean.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/python/coord_clean.py b/src/python/coord_clean.py
new file mode 100644
index 0000000..85f578d
--- /dev/null
+++ b/src/python/coord_clean.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+
+# import libraries
+import time
+import numpy as np
+import sys
+
+# 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)
+            # print(a)
+            # read out the corresponding rho value from the lookuptable (rho-file)
+            b = float(rho_file[round(int(r), 0)].split(", ")[1].strip("\n"))
+
+            # 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 ) + "%"))
+
+if __name__ == "__main__":
+    main()