Skip to content

Commit 058c81f

Browse files
Adding utility for arbitrary frequency resolution (#123)
1 parent a43450d commit 058c81f

File tree

2 files changed

+301
-0
lines changed

2 files changed

+301
-0
lines changed

holodeck/utils.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,46 @@ def pta_freqs(dur=16.03*YR, num=40, cad=None):
873873
cents = cents[:-1]
874874
return cents, edges
875875

876+
def gaussian_freqs(num, fmax, dur=16.03*YR):
877+
"""Get Fourier frequency bin specifications for the given parameters.
878+
879+
Arguments
880+
---------
881+
dur : float,
882+
Total observing duration, which determines the minimum sensitive frequency, ``1/dur``.
883+
Typically `dur` should be given in units of [sec], such that the returned frequencies are
884+
in units of [1/sec] = [Hz]
885+
num : int,
886+
Number of frequency bins between 1/dur and fmax.
887+
fmax : float
888+
Maximum frequency to consider. Must be less than the Nyquist frequency.
889+
890+
Returns
891+
-------
892+
centers : (F,) ndarray
893+
Bin-center frequencies for `F` bins. The frequency bin centers are at:
894+
``F_i = (1/dur) + (i+1) * (fmax - 1/dur)/(2*(num-1))`` for i between 0 and `num-1`.
895+
The number of frequency bins, `F` is the argument `num`.
896+
edges : (F+1,) ndarray
897+
Bin-edge frequencies for `F` bins, i.e. `F+1` bin edges. The frequency bin edges are at:
898+
``F_i = (1/dur) + (i+1) * (fmax - 1/dur)/(num-1) `` for i between 0 and `num`.
899+
The number of frequency bins, `F` is the argument `num`.
900+
901+
"""
902+
## get the minimum sensitive frequency
903+
fmin = 1.0 / dur
904+
905+
## set bin centers
906+
centers = np.linspace(fmin,fmax,num+1)
907+
908+
## get bin width
909+
bin_width = centers[1] - centers[0]
910+
911+
## set edges
912+
edges = centers - bin_width/2.0
913+
centers = centers[:-1]
914+
915+
return centers, edges
876916

877917
def print_stats(stack=True, print_func=print, **kwargs):
878918
"""Print out basic properties and statistics on the input key-value array_like values.
Lines changed: 261 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,261 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"id": "2371218c",
7+
"metadata": {},
8+
"outputs": [],
9+
"source": [
10+
"%load_ext autoreload\n",
11+
"%autoreload 2\n",
12+
"from holodeck.constants import MSOL, YR\n",
13+
"from holodeck.utils import gaussian_freqs, pta_freqs\n",
14+
"import numpy as np"
15+
]
16+
},
17+
{
18+
"cell_type": "markdown",
19+
"id": "1dfc6d34-3dcb-4b80-b92e-a96da4a1ac20",
20+
"metadata": {},
21+
"source": [
22+
"Make sure we have consistency for the equivalent case to pta_freqs:"
23+
]
24+
},
25+
{
26+
"cell_type": "code",
27+
"execution_count": 2,
28+
"id": "f9b2c2e7-1775-413c-a897-548539904f7b",
29+
"metadata": {},
30+
"outputs": [
31+
{
32+
"data": {
33+
"text/plain": [
34+
"(array([1.98050549e-09, 3.96101098e-09, 5.94151647e-09, 7.92202195e-09,\n",
35+
" 9.90252744e-09, 1.18830329e-08, 1.38635384e-08, 1.58440439e-08,\n",
36+
" 1.78245494e-08, 1.98050549e-08]),\n",
37+
" array([9.90252744e-10, 2.97075823e-09, 4.95126372e-09, 6.93176921e-09,\n",
38+
" 8.91227470e-09, 1.08927802e-08, 1.28732857e-08, 1.48537912e-08,\n",
39+
" 1.68342967e-08, 1.88148021e-08, 2.07953076e-08]))"
40+
]
41+
},
42+
"execution_count": 2,
43+
"metadata": {},
44+
"output_type": "execute_result"
45+
}
46+
],
47+
"source": [
48+
"dur = 16*YR\n",
49+
"gaussian_freqs(10,fmax=11/dur,dur=dur)\n",
50+
"pta_freqs(dur=dur,num=10)"
51+
]
52+
},
53+
{
54+
"cell_type": "code",
55+
"execution_count": 3,
56+
"id": "268528b1-4b31-4645-b7c8-17b8e6f03249",
57+
"metadata": {},
58+
"outputs": [
59+
{
60+
"data": {
61+
"text/plain": [
62+
"10"
63+
]
64+
},
65+
"execution_count": 3,
66+
"metadata": {},
67+
"output_type": "execute_result"
68+
}
69+
],
70+
"source": [
71+
"gaussian_centers, gaussian_edges = gaussian_freqs(10,fmax=11/dur,dur=dur)\n",
72+
"len(gaussian_centers)"
73+
]
74+
},
75+
{
76+
"cell_type": "code",
77+
"execution_count": 4,
78+
"id": "fb6e5ea4-2b10-41f1-85f1-5a6adddd4301",
79+
"metadata": {},
80+
"outputs": [
81+
{
82+
"data": {
83+
"text/plain": [
84+
"10"
85+
]
86+
},
87+
"execution_count": 4,
88+
"metadata": {},
89+
"output_type": "execute_result"
90+
}
91+
],
92+
"source": [
93+
"pta_centers, pta_edges = pta_freqs(dur=dur,num=10)\n",
94+
"len(pta_centers)"
95+
]
96+
},
97+
{
98+
"cell_type": "code",
99+
"execution_count": 5,
100+
"id": "ca2170cf-e84b-4ae6-a275-34378d9fb60d",
101+
"metadata": {},
102+
"outputs": [
103+
{
104+
"data": {
105+
"text/plain": [
106+
"array([ 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5])"
107+
]
108+
},
109+
"execution_count": 5,
110+
"metadata": {},
111+
"output_type": "execute_result"
112+
}
113+
],
114+
"source": [
115+
"pta_edges*dur"
116+
]
117+
},
118+
{
119+
"cell_type": "code",
120+
"execution_count": 6,
121+
"id": "fe09e873-7b94-4f31-9db7-e8aed8835427",
122+
"metadata": {},
123+
"outputs": [
124+
{
125+
"data": {
126+
"text/plain": [
127+
"array([ 0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5])"
128+
]
129+
},
130+
"execution_count": 6,
131+
"metadata": {},
132+
"output_type": "execute_result"
133+
}
134+
],
135+
"source": [
136+
"gaussian_edges*dur"
137+
]
138+
},
139+
{
140+
"cell_type": "code",
141+
"execution_count": 7,
142+
"id": "6cdadb0f-1366-489e-ab9a-297cec06c222",
143+
"metadata": {},
144+
"outputs": [
145+
{
146+
"data": {
147+
"text/plain": [
148+
"True"
149+
]
150+
},
151+
"execution_count": 7,
152+
"metadata": {},
153+
"output_type": "execute_result"
154+
}
155+
],
156+
"source": [
157+
"np.allclose(pta_edges,gaussian_edges)"
158+
]
159+
},
160+
{
161+
"cell_type": "code",
162+
"execution_count": 8,
163+
"id": "11a3d784-9216-46ec-9185-0509d3048630",
164+
"metadata": {},
165+
"outputs": [
166+
{
167+
"data": {
168+
"text/plain": [
169+
"(array([1.98050549e-09, 2.17855604e-09, 2.37660659e-09, 2.57465713e-09,\n",
170+
" 2.77270768e-09, 2.97075823e-09, 3.16880878e-09, 3.36685933e-09,\n",
171+
" 3.56490988e-09, 3.76296043e-09, 3.96101098e-09, 4.15906153e-09,\n",
172+
" 4.35711207e-09, 4.55516262e-09, 4.75321317e-09, 4.95126372e-09,\n",
173+
" 5.14931427e-09, 5.34736482e-09, 5.54541537e-09, 5.74346592e-09,\n",
174+
" 5.94151647e-09, 6.13956701e-09, 6.33761756e-09, 6.53566811e-09,\n",
175+
" 6.73371866e-09, 6.93176921e-09, 7.12981976e-09, 7.32787031e-09,\n",
176+
" 7.52592086e-09, 7.72397140e-09, 7.92202195e-09, 8.12007250e-09,\n",
177+
" 8.31812305e-09, 8.51617360e-09, 8.71422415e-09, 8.91227470e-09,\n",
178+
" 9.11032525e-09, 9.30837580e-09, 9.50642634e-09, 9.70447689e-09,\n",
179+
" 9.90252744e-09, 1.01005780e-08, 1.02986285e-08, 1.04966791e-08,\n",
180+
" 1.06947296e-08, 1.08927802e-08, 1.10908307e-08, 1.12888813e-08,\n",
181+
" 1.14869318e-08, 1.16849824e-08, 1.18830329e-08, 1.20810835e-08,\n",
182+
" 1.22791340e-08, 1.24771846e-08, 1.26752351e-08, 1.28732857e-08,\n",
183+
" 1.30713362e-08, 1.32693868e-08, 1.34674373e-08, 1.36654879e-08,\n",
184+
" 1.38635384e-08, 1.40615890e-08, 1.42596395e-08, 1.44576901e-08,\n",
185+
" 1.46557406e-08, 1.48537912e-08, 1.50518417e-08, 1.52498923e-08,\n",
186+
" 1.54479428e-08, 1.56459934e-08, 1.58440439e-08, 1.60420945e-08,\n",
187+
" 1.62401450e-08, 1.64381956e-08, 1.66362461e-08, 1.68342967e-08,\n",
188+
" 1.70323472e-08, 1.72303977e-08, 1.74284483e-08, 1.76264988e-08,\n",
189+
" 1.78245494e-08, 1.80225999e-08, 1.82206505e-08, 1.84187010e-08,\n",
190+
" 1.86167516e-08, 1.88148021e-08, 1.90128527e-08, 1.92109032e-08,\n",
191+
" 1.94089538e-08, 1.96070043e-08, 1.98050549e-08, 2.00031054e-08,\n",
192+
" 2.02011560e-08, 2.03992065e-08, 2.05972571e-08, 2.07953076e-08,\n",
193+
" 2.09933582e-08, 2.11914087e-08, 2.13894593e-08, 2.15875098e-08]),\n",
194+
" array([1.88148021e-09, 2.07953076e-09, 2.27758131e-09, 2.47563186e-09,\n",
195+
" 2.67368241e-09, 2.87173296e-09, 3.06978351e-09, 3.26783406e-09,\n",
196+
" 3.46588460e-09, 3.66393515e-09, 3.86198570e-09, 4.06003625e-09,\n",
197+
" 4.25808680e-09, 4.45613735e-09, 4.65418790e-09, 4.85223845e-09,\n",
198+
" 5.05028900e-09, 5.24833954e-09, 5.44639009e-09, 5.64444064e-09,\n",
199+
" 5.84249119e-09, 6.04054174e-09, 6.23859229e-09, 6.43664284e-09,\n",
200+
" 6.63469339e-09, 6.83274393e-09, 7.03079448e-09, 7.22884503e-09,\n",
201+
" 7.42689558e-09, 7.62494613e-09, 7.82299668e-09, 8.02104723e-09,\n",
202+
" 8.21909778e-09, 8.41714833e-09, 8.61519887e-09, 8.81324942e-09,\n",
203+
" 9.01129997e-09, 9.20935052e-09, 9.40740107e-09, 9.60545162e-09,\n",
204+
" 9.80350217e-09, 1.00015527e-08, 1.01996033e-08, 1.03976538e-08,\n",
205+
" 1.05957044e-08, 1.07937549e-08, 1.09918055e-08, 1.11898560e-08,\n",
206+
" 1.13879066e-08, 1.15859571e-08, 1.17840077e-08, 1.19820582e-08,\n",
207+
" 1.21801088e-08, 1.23781593e-08, 1.25762099e-08, 1.27742604e-08,\n",
208+
" 1.29723109e-08, 1.31703615e-08, 1.33684120e-08, 1.35664626e-08,\n",
209+
" 1.37645131e-08, 1.39625637e-08, 1.41606142e-08, 1.43586648e-08,\n",
210+
" 1.45567153e-08, 1.47547659e-08, 1.49528164e-08, 1.51508670e-08,\n",
211+
" 1.53489175e-08, 1.55469681e-08, 1.57450186e-08, 1.59430692e-08,\n",
212+
" 1.61411197e-08, 1.63391703e-08, 1.65372208e-08, 1.67352714e-08,\n",
213+
" 1.69333219e-08, 1.71313725e-08, 1.73294230e-08, 1.75274736e-08,\n",
214+
" 1.77255241e-08, 1.79235747e-08, 1.81216252e-08, 1.83196758e-08,\n",
215+
" 1.85177263e-08, 1.87157769e-08, 1.89138274e-08, 1.91118780e-08,\n",
216+
" 1.93099285e-08, 1.95079791e-08, 1.97060296e-08, 1.99040802e-08,\n",
217+
" 2.01021307e-08, 2.03001813e-08, 2.04982318e-08, 2.06962824e-08,\n",
218+
" 2.08943329e-08, 2.10923835e-08, 2.12904340e-08, 2.14884845e-08,\n",
219+
" 2.16865351e-08]))"
220+
]
221+
},
222+
"execution_count": 8,
223+
"metadata": {},
224+
"output_type": "execute_result"
225+
}
226+
],
227+
"source": [
228+
"gaussian_freqs(100,fmax=11/dur,dur=dur)"
229+
]
230+
},
231+
{
232+
"cell_type": "code",
233+
"execution_count": null,
234+
"id": "fc1f1baf-41f1-424d-98bf-fc3b12b0f7f0",
235+
"metadata": {},
236+
"outputs": [],
237+
"source": []
238+
}
239+
],
240+
"metadata": {
241+
"kernelspec": {
242+
"display_name": "gwenv-1",
243+
"language": "python",
244+
"name": "gwenv-1"
245+
},
246+
"language_info": {
247+
"codemirror_mode": {
248+
"name": "ipython",
249+
"version": 3
250+
},
251+
"file_extension": ".py",
252+
"mimetype": "text/x-python",
253+
"name": "python",
254+
"nbconvert_exporter": "python",
255+
"pygments_lexer": "ipython3",
256+
"version": "3.12.0"
257+
}
258+
},
259+
"nbformat": 4,
260+
"nbformat_minor": 5
261+
}

0 commit comments

Comments
 (0)