about summary refs log tree commit diff
path: root/src/coord.py
diff options
context:
space:
mode:
authorhanemile <emile.hansmaennel@gmail.com>2017-12-09 14:19:59 +0100
committerhanemile <emile.hansmaennel@gmail.com>2017-12-09 14:19:59 +0100
commit5e17688870d04f4a0ef259431f73287ea21b793d (patch)
tree3402978035adcbc8a54dcfd854368dc4264d8511 /src/coord.py
parent3945015abbfc48da21f2cc81dee006a9955fcc84 (diff)
minor ajustments
Diffstat (limited to 'src/coord.py')
-rwxr-xr-xsrc/coord.py146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/coord.py b/src/coord.py
new file mode 100755
index 0000000..f801aee
--- /dev/null
+++ b/src/coord.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python
+
+# import libraries
+import time
+import numpy as np
+import sys
+
+# define the number of stars that should be generated
+# (this is not the final value -> the final value is about 1000 times smaller)
+nos = int(sys.argv[1])
+
+# define some arrays for storing the values
+arr_stars = np.zeros((int(nos), 3))
+arr_r = np.zeros((int(nos), 1))
+arr_saved_stars = np.zeros((int(nos), 3))
+
+# define various paths
+path = "data/rho6.csv"
+save_path = "stars/star18.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():
+
+    time_start_gen_array = time.time()
+
+    # generate n=nos stars
+    for i in range(0, nos):
+
+        # generate the random values
+        arr_stars[i][0] = np.random.uniform(range_min, range_max, size=1)
+        arr_stars[i][1] = np.random.uniform(range_min, range_max, size=1)
+        arr_stars[i][2] = np.random.uniform(range_min, range_max, size=1)
+
+        # calculate the distance of the star to the center of the galaxy
+        arr_r[i][0] = np.sqrt(pow(arr_stars[i][0], 2) + pow(arr_stars[i][1], 2) + pow(arr_stars[i][2], 2))
+
+    # print the randomly generated arrays
+    print(arr_stars)
+    print(arr_r)
+
+    time_end_gen_array = time.time()
+    time_all_gen_array = time_end_gen_array - time_start_gen_array
+    # define the variables for storing the amount of stars kept or kicked away
+    stars_kept = 0
+    stars_kicked = 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):
+            # print(i)
+
+            # random value
+            a = np.random.uniform(rand_min, rand_max, size=1)
+
+            # corresponding rho value
+            b = float(rho_file[int(round(arr_r[i][0], 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] = arr_stars[i][0]
+                arr_saved_stars[stars_kept][1] = arr_stars[i][1]
+                arr_saved_stars[stars_kept][2] = arr_stars[i][2]
+
+                # increment the star_kept counter
+                stars_kept += 1
+
+            else:
+                # increment the star_kicked counter
+                stars_kicked += 1
+
+            if(i % (nos/(nos/10)) == 0):
+                if(i != 0):
+                    a = str(round(i / nos * 100, 1)) + "%"
+                    time_temp = time.time()
+                    time_past = round(time_temp - start, 2)
+                    print("{:<10}{:<20}".format(a, time_past))
+
+    print("")
+    end = time.time()
+    whole_time = end - start
+    print(">> Finished generating stars in " + str(whole_time) + " seconds\n")
+
+    start_delete_rows = time.time()
+
+    # delete all unused rows
+    print(">> Deleting unused rows in the arr_saved_stars array")
+    # for i in range(nos - stars_kicked, nos):
+    #     np.delete(arr_saved_stars, (i), axis=0)
+    end_delete_rows = time.time()
+    time_delete_rows = end_delete_rows - start_delete_rows
+    print(">> Finished deleting stars in " + str(round(time_delete_rows, 4)) + " seconds \n")
+
+    start_write_file = time.time()
+
+    # write the star coordinates to a file
+    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
+    print(">> Finished writing star-data to " + save_path + " in " + str(round(time_write_file, 4)) + " seconds\n")
+
+
+    stars_percent = stars_kept / nos * 100
+
+    time_all = whole_time + time_write_file + time_delete_rows
+
+    # print some stats
+    print("")
+    print("{:<30}{:<30}".format("Time (complete)", str(round(time_all, 4)) + " seconds"))
+    print("{:<30}{:<30}".format("Time (gen arrays)", str(round(time_all_gen_array, 4)) + " seconds"))
+    print("{:<30}{:<30}".format("Time (calculate stars)", str(round(whole_time, 4)) + " seconds"))
+    print("{:<30}{:<30}".format("Time (delete rows)", str(round(time_delete_rows, 4)) + " seconds"))
+    print("{:<30}{:<30}".format("Time (write to file)", str(round(time_write_file, 4)) + " seconds"))
+    print("{:-<40}".format(""))
+    print("{:<20}{:<20}".format("Number of Stars", str(nos)))
+    print("{:<20}{:<20}".format("Stars Kept:", str(stars_kept)))
+    print("{:<20}{:<20}".format("Stars Kicked:", str(stars_kicked)))
+    print("{:<20}{:<20}".format("Stars Percent", str(round(stars_percent, 4)) + "%"))
+
+if __name__ == "__main__":
+    main()