55from blimpy import Waterfall
66
77from ._typing import PathLike
8+ from ._frame .io import _close_waterfall_handles
89
910
1011def max_freq (waterfall : PathLike | Waterfall ) -> float :
@@ -44,15 +45,20 @@ def get_data(waterfall: PathLike | Waterfall, db: bool = False) -> np.ndarray:
4445 Raises:
4546 ValueError: If the waterfall input type is unsupported.
4647 """
47- if isinstance (waterfall , (str , PurePath )):
48+ owns_waterfall = isinstance (waterfall , (str , PurePath ))
49+ if owns_waterfall :
4850 waterfall = Waterfall (waterfall )
4951 elif not isinstance (waterfall , Waterfall ):
5052 raise ValueError ('Invalid data file!' )
5153
52- if db :
53- return 10 * np .log10 (waterfall .data [:, 0 , :])
54-
55- return waterfall .data [:, 0 , :]
54+ try :
55+ data = waterfall .data [:, 0 , :]
56+ if db :
57+ data = 10 * np .log10 (data )
58+ return np .array (data , copy = owns_waterfall )
59+ finally :
60+ if owns_waterfall :
61+ _close_waterfall_handles (waterfall )
5662
5763
5864def get_fs (waterfall : PathLike | Waterfall ) -> np .ndarray :
@@ -67,16 +73,20 @@ def get_fs(waterfall: PathLike | Waterfall) -> np.ndarray:
6773 Raises:
6874 ValueError: If the waterfall input type is unsupported.
6975 """
70- if isinstance (waterfall , (str , PurePath )):
76+ owns_waterfall = isinstance (waterfall , (str , PurePath ))
77+ if owns_waterfall :
7178 waterfall = Waterfall (waterfall , load_data = False )
7279 elif not isinstance (waterfall , Waterfall ):
7380 raise ValueError ('Invalid data file!' )
7481
75- fch1 = waterfall .header ['fch1' ]
76- df = waterfall .header ['foff' ]
77- fchans = waterfall .header ['nchans' ]
78-
79- return fch1 + np .arange (fchans ) * df
82+ try :
83+ fch1 = waterfall .header ['fch1' ]
84+ df = waterfall .header ['foff' ]
85+ fchans = waterfall .header ['nchans' ]
86+ return fch1 + np .arange (fchans ) * df
87+ finally :
88+ if owns_waterfall :
89+ _close_waterfall_handles (waterfall )
8090
8191
8292def get_ts (waterfall : PathLike | Waterfall ) -> np .ndarray :
@@ -91,12 +101,16 @@ def get_ts(waterfall: PathLike | Waterfall) -> np.ndarray:
91101 Raises:
92102 ValueError: If the waterfall input type is unsupported.
93103 """
94- if isinstance (waterfall , (str , PurePath )):
104+ owns_waterfall = isinstance (waterfall , (str , PurePath ))
105+ if owns_waterfall :
95106 waterfall = Waterfall (waterfall , load_data = False )
96107 elif not isinstance (waterfall , Waterfall ):
97108 raise ValueError ('Invalid data file!' )
98109
99- tsamp = waterfall .header ['tsamp' ]
100- tchans = waterfall .container .selection_shape [0 ]
101-
102- return np .arange (tchans ) * tsamp
110+ try :
111+ tsamp = waterfall .header ['tsamp' ]
112+ tchans = waterfall .container .selection_shape [0 ]
113+ return np .arange (tchans ) * tsamp
114+ finally :
115+ if owns_waterfall :
116+ _close_waterfall_handles (waterfall )
0 commit comments