Skip to content
Snippets Groups Projects
Commit 992b1b1b authored by Sebastiano Bernuzzi's avatar Sebastiano Bernuzzi
Browse files

Removed the energetic from the wave class, since they do not belong there....

Removed the energetic from the wave class, since they do not belong there. Fixed a bug in the strain filenames: now it should correctly account for scri extraction of extrapolation 'rInf'. Improved comments
parent 63edceeb
No related branches found
No related tags found
No related merge requests found
...@@ -39,19 +39,17 @@ def rinf_float_to_str(radius): ...@@ -39,19 +39,17 @@ def rinf_float_to_str(radius):
rad_str = '%05d' % int(radius) rad_str = '%05d' % int(radius)
return rad_str return rad_str
def rinf_str_to_float(rad_str): def rinf_str_to_float(rad_str):
""" """
Converts detector radius (string) to float Converts detector radius (string) to float
""" """
opt = ['rInf','Inf','Infinity'] opt = ['rInf','Inf','Infinity']
if(rad_str in opt): if rad_str in opt:
radius = rInf radius = rInf
else: else:
radius = float(rad_str) radius = float(rad_str)
return radius return radius
def wave_prop_default(): def wave_prop_default():
""" """
Default properties for wave Default properties for wave
...@@ -65,7 +63,6 @@ def wave_prop_default(): ...@@ -65,7 +63,6 @@ def wave_prop_default():
'var': None 'var': None
} }
def wfile_parse_name(fname): def wfile_parse_name(fname):
""" """
Parse waveform filename, return var,(l,m)-indexes, detector radius Parse waveform filename, return var,(l,m)-indexes, detector radius
...@@ -88,7 +85,6 @@ def wfile_parse_name(fname): ...@@ -88,7 +85,6 @@ def wfile_parse_name(fname):
if name is not None: if name is not None:
if tp == 'core-energy': if tp == 'core-energy':
v = 'EJ' v = 'EJ'
#r = float(name.group(1))
r = rinf_str_to_float(name.group(1)) r = rinf_str_to_float(name.group(1))
vlmr = (v,None,None,r,tp) vlmr = (v,None,None,r,tp)
return vlmr return vlmr
...@@ -96,7 +92,6 @@ def wfile_parse_name(fname): ...@@ -96,7 +92,6 @@ def wfile_parse_name(fname):
v = name.group(1) v = name.group(1)
l = int(name.group(2)) l = int(name.group(2))
m = int(name.group(3)) m = int(name.group(3))
#r = float(name.group(4))
r = rinf_str_to_float(name.group(4)) r = rinf_str_to_float(name.group(4))
vlmr = (v,l,m,r,tp) vlmr = (v,l,m,r,tp)
return vlmr return vlmr
...@@ -105,7 +100,6 @@ def wfile_parse_name(fname): ...@@ -105,7 +100,6 @@ def wfile_parse_name(fname):
# CoRe specials # CoRe specials
def wfile_get_detrad(fname): def wfile_get_detrad(fname):
""" """
Get detector radius from CoRe file header Get detector radius from CoRe file header
...@@ -142,7 +136,6 @@ def wfile_get_detrad_bam(fname): ...@@ -142,7 +136,6 @@ def wfile_get_detrad_bam(fname):
fname : Name of the file to parse for information fname : Name of the file to parse for information
""" """
s = extract_comments(fname, '"') s = extract_comments(fname, '"')
#return float(re.findall("\d+\.\d+",s[0])[0])
try: try:
rad_str = re.findall("\d+\.\d+",s[0])[2] rad_str = re.findall("\d+\.\d+",s[0])[2]
except: except:
...@@ -152,7 +145,6 @@ def wfile_get_detrad_bam(fname): ...@@ -152,7 +145,6 @@ def wfile_get_detrad_bam(fname):
# Cactus/THC specials # Cactus/THC specials
def cactus_to_core(path, prop): def cactus_to_core(path, prop):
""" """
Read data from Cactus/WhiskyTHC simulation directory, Read data from Cactus/WhiskyTHC simulation directory,
...@@ -208,7 +200,7 @@ class mwaves(object): ...@@ -208,7 +200,7 @@ class mwaves(object):
----------- -----------
Contains Contains
----------- -----------
* vars : list of variables * vars : list of variables, ['Psi4', 'h']
* modes : list of available (l, m) multipoles * modes : list of available (l, m) multipoles
* lmode : list of available l multipoles * lmode : list of available l multipoles
* mmode : list of available m multipoles * mmode : list of available m multipoles
...@@ -262,10 +254,10 @@ class mwaves(object): ...@@ -262,10 +254,10 @@ class mwaves(object):
self.modes.add((l,m)) self.modes.add((l,m))
self.radii.add(r) self.radii.add(r)
#self.dtype.add(tp) #self.dtype.add(tp)
#key = "%s_l%d_m%d_r%.2f" % (var, l, m, r)
subkey = write_key(l,m,r) subkey = write_key(l,m,r)
key = var+"_"+subkey key = var+"_"+subkey
#key = "%s_l%d_m%d_r%.2f" % (var, l, m, r)
if key in self.data: if key in self.data:
self.data[key].append(fname) self.data[key].append(fname)
else: else:
...@@ -319,6 +311,8 @@ class mwaves(object): ...@@ -319,6 +311,8 @@ class mwaves(object):
""" """
Compute energetics from multipolar waveform Compute energetics from multipolar waveform
""" """
#FIXME: this assumes all radii have the same modes!
h = {} h = {}
h_dot = {} h_dot = {}
u = {} u = {}
...@@ -326,7 +320,7 @@ class mwaves(object): ...@@ -326,7 +320,7 @@ class mwaves(object):
for rad in radii: for rad in radii:
for lm in self.modes: #FIXME: this assumes all radii have the same modes! for lm in self.modes:
w = self.get(l=lm[0], m=lm[1], r=rad) w = self.get(l=lm[0], m=lm[1], r=rad)
t = w.time t = w.time
u[lm] = w.time_ret() u[lm] = w.time_ret()
...@@ -340,7 +334,6 @@ class mwaves(object): ...@@ -340,7 +334,6 @@ class mwaves(object):
self.jorb = (jadm - self.j) / (m1*m2) self.jorb = (jadm - self.j) / (m1*m2)
if path_out: if path_out:
#headstr = "r=%e\nM=%e\n" % (rad, self.mass)
headstr = write_headstr(rad,self.mass) headstr = write_headstr(rad,self.mass)
headstr += "J_orb:0 E_b:1 u/M:2 E_rad:3 J_rad:4 t:5" headstr += "J_orb:0 E_b:1 u/M:2 E_rad:3 J_rad:4 t:5"
data = np.c_[self.jorb, self.eb, u[(2,2)]/self.mass, data = np.c_[self.jorb, self.eb, u[(2,2)]/self.mass,
...@@ -359,8 +352,8 @@ class wave(object): ...@@ -359,8 +352,8 @@ class wave(object):
Input Input
----------- -----------
path : Path to the data directory path : Path to the data directory
code : Which code/format the data are saved in (core, cactus, bam) code : Waveform data format (['bam','cactus','core'])
filenames : List of files to be loaded filenames : List of waveform files to be loaded
mass : Binary mass (solar masses) mass : Binary mass (solar masses)
f0 : Initial gravitational wave frequency of the system (mass rescaled, geom.units) f0 : Initial gravitational wave frequency of the system (mass rescaled, geom.units)
----------- -----------
...@@ -369,8 +362,6 @@ class wave(object): ...@@ -369,8 +362,6 @@ class wave(object):
|| On initialization || || On initialization ||
* prop : python dictionary containing the wave properties * prop : python dictionary containing the wave properties
|| After reading data || || After reading data ||
* e : Energy
* j : Angular momentum
* p4 : Psi4 scalar field (complex-valued) * p4 : Psi4 scalar field (complex-valued)
* h : Wave strain (complex-valued) * h : Wave strain (complex-valued)
""" """
...@@ -393,10 +384,7 @@ class wave(object): ...@@ -393,10 +384,7 @@ class wave(object):
self.prop['init.frequency'] = f0 self.prop['init.frequency'] = f0
if mass: if mass:
self.prop['mass'] = mass self.prop['mass'] = mass
if self.prop['var']=='EJ': self.readtxt(filename)
self.readEJ(filename)
else:
self.readtxt(filename)
def type(self): def type(self):
return type(self) return type(self)
...@@ -443,26 +431,27 @@ class wave(object): ...@@ -443,26 +431,27 @@ class wave(object):
------ ------
Input Input
----- -----
var : Which variable to write to txt (Psi4 or h) var : Which variable to write to txt, ['Psi4', 'h']
path : Where to save the txt files path : Where to save the txt files
""" """
M = self.prop["mass"] M = self.prop["mass"]
R = self.prop['detector.radius'] R = self.prop['detector.radius']
#headstr = "r=%e\n" %(self.prop["detector.radius"])
#headstr += "M=%e\n" %(M)
headstr = write_headstr(R,M) headstr = write_headstr(R,M)
if var == 'Psi4': if var == 'Psi4':
headstr += "u/M:0 RePsi4/M:1 ImPsi4/M:2 Momega:3 A/M:4 phi:5 t:6" headstr += "u/M:0 RePsi4/M:1 ImPsi4/M:2 Momega:3 A/M:4 phi:5 t:6"
data = np.c_[self.time_ret()/M, self.p4.real*R/M, self.p4.imag*R/M, M*self.phase_diff1(var), data = np.c_[self.time_ret()/M, self.p4.real*R/M, self.p4.imag*R/M, M*self.phase_diff1(var),
self.amplitude(var)*R/M, self.phase(var), self.time] self.amplitude(var)*R/M, self.phase(var), self.time]
key = write_key(self.prop['lmode'], self.prop['mmode'], R) key = write_key(self.prop['lmode'], self.prop['mmode'], R)
fname = 'Rpsi4_'+key+'.txt'
#fname = 'Rpsi4_l%d_m%d_r%05d.txt' % (self.prop['lmode'], self.prop['mmode'], R) #fname = 'Rpsi4_l%d_m%d_r%05d.txt' % (self.prop['lmode'], self.prop['mmode'], R)
else: fname = 'Rpsi4_'+key+'.txt'
elif var == 'h':
headstr += "u/M:0 Reh/M:1 Imh/M:2 Momega:3 A/M:4 phi:5 t:6" headstr += "u/M:0 Reh/M:1 Imh/M:2 Momega:3 A/M:4 phi:5 t:6"
data = np.c_[self.time_ret()/M, self.h.real*R/M, self.h.imag*R/M, M*self.phase_diff1(var), data = np.c_[self.time_ret()/M, self.h.real*R/M, self.h.imag*R/M, M*self.phase_diff1(var),
self.amplitude(var)*R/M, self.phase(var), self.time] self.amplitude(var)*R/M, self.phase(var), self.time]
fname = 'Rh_l%d_m%d_r%05d.txt' % (self.prop['lmode'], self.prop['mmode'], R) #fname = 'Rh_l%d_m%d_r%05d.txt' % (self.prop['lmode'], self.prop['mmode'], R)
fname = 'Rh_'+key+'.txt'
else:
raise ValueError("var can be only 'Psi4' or 'h'")
return np.savetxt(os.path.join(path,fname), data, header=headstr) return np.savetxt(os.path.join(path,fname), data, header=headstr)
def show_strain(self, to_file=None): def show_strain(self, to_file=None):
...@@ -493,7 +482,6 @@ class wave(object): ...@@ -493,7 +482,6 @@ class wave(object):
""" """
fname= os.path.join(self.path,filename) fname= os.path.join(self.path,filename)
vlmr = wfile_parse_name(fname) vlmr = wfile_parse_name(fname)
if vlmr: if vlmr:
var, l, m, r, tp = vlmr var, l, m, r, tp = vlmr
self.prop['var'] = var self.prop['var'] = var
...@@ -549,7 +537,7 @@ class wave(object): ...@@ -549,7 +537,7 @@ class wave(object):
------ ------
Input Input
----- -----
var : Which variable to return (psi4 or h) var : Which variable to return (Psi4 or h)
""" """
if var=='Psi4': if var=='Psi4':
return np.abs(self.p4) return np.abs(self.p4)
...@@ -562,7 +550,7 @@ class wave(object): ...@@ -562,7 +550,7 @@ class wave(object):
------ ------
Input Input
----- -----
var : Which variable to return (psi4 or h) var : Which variable to return (Psi4 or h)
""" """
if var=='Psi4': if var=='Psi4':
return -np.unwrap(np.angle(self.p4)) return -np.unwrap(np.angle(self.p4))
...@@ -576,7 +564,7 @@ class wave(object): ...@@ -576,7 +564,7 @@ class wave(object):
------ ------
Input Input
----- -----
var : Which variable to return (psi4 or h) var : Which variable to return (Psi4 or h)
pad : Set to True to obtain an array of the same lenght as self.time. pad : Set to True to obtain an array of the same lenght as self.time.
""" """
return diff1(self.time,self.phase(var),pad=pad) return diff1(self.time,self.phase(var),pad=pad)
...@@ -588,7 +576,7 @@ class wave(object): ...@@ -588,7 +576,7 @@ class wave(object):
------ ------
Input Input
----- -----
var : Which variable to return (psi4 or h) var : Which variable to return (Psi4 or h)
o : Specify order for the finite differencing (defaults to 4) o : Specify order for the finite differencing (defaults to 4)
""" """
return diffo(self.time,self.phase(var), o) return diffo(self.time,self.phase(var), o)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment