about summary refs log tree commit diff
diff options
context:
space:
mode:
authorhanemile <emile.hansmaennel@gmail.com>2017-12-09 15:49:09 +0100
committerhanemile <emile.hansmaennel@gmail.com>2017-12-09 15:49:09 +0100
commit95772c59a241cd224310aa209b3ff976080ccdb5 (patch)
tree33b1607d2bb3fa0961c70903a3d7a175de5655fa
parent5e17688870d04f4a0ef259431f73287ea21b793d (diff)
added feature for exactly generating n files
-rwxr-xr-xsrc/coord.py84
1 files changed, 27 insertions, 57 deletions
diff --git a/src/coord.py b/src/coord.py
index f801aee..b5d9f49 100755
--- a/src/coord.py
+++ b/src/coord.py
@@ -6,17 +6,15 @@ 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"
+save_path = "stars/star19.csv"
 # star13 -> 586 stars
 
 # define the random-value range [rho_min; rho_max]
@@ -30,28 +28,10 @@ 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
+    i = 0
 
     # start the timer
     start = time.time()
@@ -63,54 +43,50 @@ def main():
         rho_file = data.readlines()
 
         # for every star...
-        for i in range(0, nos):
-            # print(i)
+        # 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))
 
-            # random value
+            # generate a random value in the range [rand_min; rand_max]
             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"))
+            # read out the corresponding rho value from the lookuptable (rho-file)
+            b = float(rho_file[int(round(r[0], 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):
+            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]
+                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
 
-            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))
+            # increment i
+            i = i + 1
 
     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
+    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):
@@ -124,23 +100,17 @@ def main():
     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
+    time_all = whole_time + time_write_file
 
     # 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)) + "%"))
+    print("{:<20}{:<20}".format("Percent: ", str( nos / stars_kicked * 100 ) + "%"))
 
 if __name__ == "__main__":
     main()