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 This module is a wrapper of the _spawaveform module, supplementing the C
29 code in that module with additional features that are more easily
30 implemented in Python. It is recommended that you import this module
31 rather than importing _spawaveform directly.
32 """
33
34
35 import math
36
37
38 import lal
39 from pylal import git_version
40 from pylal._spawaveform import *
41
42
43 __author__ = "Kipp Cannon <kipp.cannon@ligo.org>"
44 __version__ = "git id %s" % git_version.id
45 __date__ = git_version.date
46
47
48
49
50
51
52
53
54
55
56
57 -def imrchirptime(m1, m2, fLower, chi, a_hat = 0.98, e_folds = 10):
58 """
59 An approximate IMR chirptime in seconds.
60
61 FIXME this should be replaced by something better
62
63 1) compute the SPA chirptime up to ringdown frequency at 3.5 PN, verify that it is nonnegative
64 2) then add efolds worth of ringdown time
65
66 Ringdown decay time forumla in solar masses is:
67
68 tau = 2 * (m1+m2) * 5e-6 * (0.7 + 1.4187 * (1-a_hat)**-0.4990) / (1.5251 - 1.1568 * (1-a_hat)**0.1292)
69
70 from (7-9) of LIGO-P1300156.
71
72 @param m1 Mass 1
73 @param m2 Mass 2
74 @param fLower the starting frequency
75 @param chi the effective spin parameter from computechi()
76 @param e_folds The number of efolds to use in the ringdown signal duration, default 10
77 @param a_hat The dimensionless spin of the final black hole, default 0.98
78 """
79
80 assert (a_hat < 0.9999999999999999)
81 fFinal = imrffinal(m1, m2, chi, 'ringdown')
82 assert (fFinal > fLower)
83 tau = 2 * (m1+m2) * 5e-6 * (0.7 + 1.4187 * (1-a_hat)**-0.4990) / (1.5251 - 1.1568 * (1-a_hat)**0.1292)
84 inspiral_time = chirptime(m1, m2, 7, fLower, fFinal, chi)
85 if inspiral_time < 0:
86 raise ValueError("Inspiral time is negative: m1 = %e, m2 = %e, flow = %e, chi = %e" % (m1, m2, fLower, chi))
87 return inspiral_time + e_folds * tau
88
89
91 """
92 Compute the symmetric mass ratio, eta.
93 """
94 return m1*m2/(m1+m2)**2.
95
96
98 """
99 Compute the chirp mass in seconds.
100 """
101 return lal.MTSUN_SI * (m1+m2) * eta(m1, m2)**.6
102
103
105 """
106 Solve for tau_0 and tau_3 from m1 and m2.
107 """
108 tau0 = 5./256./(math.pi*f0)**(8./3.) * chirpmass(m1,m2)**(-5./3.)
109 tau3 = math.pi/8./eta(m1,m2)**.6/(math.pi*f0)**(5./3.) * chirpmass(m1,m2)**(-2./3.)
110 return tau0, tau3
111
112
113 -def taus2ms(tau0, tau3, f0 = 40.0):
114 """
115 Solve for m1 and m2 from tau_0 and tau_3.
116 """
117 Mc = (5./256./(math.pi*f0)**(8./3.) / tau0)**(3./5.)
118 eta = (math.pi/8./(math.pi*f0)**(5./3.) / tau3 / Mc**(2./3.))**(5./3.)
119
120 M = Mc / eta**(3./5.)
121
122 m1 = (1. + abs(1. - 4.*eta)**.5) * M / 2.
123 m2 = M - m1
124
125 return m1 / lal.MTSUN_SI, m2 / lal.MTSUN_SI
126