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
|
#!/usr/bin/env python
from numpy import genfromtxt
import numpy as np
import math
import os
import socket
host = socket.gethostname()
# variables
sigma = 200
f_0 = 0.1
R_s = 1e4
# M..
Mxx = 0
Mxy = 8e-6
Myy = 0
# constants
pi = math.pi
e = math.e
G = 4.302e-3
# rho function
def rho(x, y, z):
r = math.sqrt(x**2 + y**2 + z**2)
a = (1) / (math.sqrt( 2 * pi ) * sigma )
b = math.exp( - (phi(r) / sigma ** 2 ) )
c = a * b
return c
def rho_new(x, y, z):
a = (1 - ((1) / (2 * (sigma ** 2))) * ( Mxx * x**2 + 2 * Mxy * x * y + Myy * y**2 ) )
return rho(x, y, z) * a
# phi function
def phi(x):
if x == 0:
return -4 * pi * f_0 * G * R_s**2
a = - ( 4 * pi * G * f_0 * R_s ** 3 ) / x
b = np.log(1. + (x / R_s) )
c = a * b
return c
def gen_stars(stars):
stars = int(stars)
# lists
listrho = []
# create new file for every calculation
path = "data/" + str(host) + "_" + str(os.getpid()) + ".csv"
print("path: " + str(path))
# define the size of the galaxy
length = 1.5e6
# define the borders
range_min = -int(length)
range_max = int(length)
# define the rho range
rand_min = rho_new(0, 0, 0)
rand_max = rho_new(length, 0, 0)
# create random stars
for r in range(0, stars):
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)
rand_val = np.random.uniform(rand_min, rand_max, size=1)
# if the random value is smaller than the rho value, generate a star
if rand_val < rho(x, y, z):
# open a file to write to
with open(path, "a") as data:
# write the data to the file
data.write(str(x).strip("[]") + "," + str(y).strip("[]") + "," + str(z).strip("[]") + "\n")
# generate n stars
gen_stars(5e7)
|