@@ -21,10 +21,14 @@ function get_data(dataobject::GravDataType,
21
21
# This gives true O(masked_cells) performance instead of O(total_cells)
22
22
mask_indices = findall (mask)
23
23
masked_data = dataobject. data[mask_indices]
24
- use_masked_data = false # No need to apply mask again since data is pre-filtered
24
+ # Create a temporary dataobject with filtered data for recursive calls
25
+ filtered_dataobject = deepcopy (dataobject)
26
+ filtered_dataobject. data = masked_data
27
+ use_mask_in_recursion = [false ] # Don't apply mask in recursive calls since data is pre-filtered
25
28
else
26
- use_masked_data = false
29
+ filtered_dataobject = dataobject
27
30
masked_data = dataobject. data
31
+ use_mask_in_recursion = mask # Use original mask for recursive calls
28
32
end
29
33
30
34
@@ -102,7 +106,7 @@ function get_data(dataobject::GravDataType,
102
106
end
103
107
elseif i == :volume
104
108
selected_unit = getunit (dataobject, :volume , vars, units)
105
- vars_dict[:volume ] = convert (Array{Float64,1 }, getvar (dataobject , :cellsize , mask= mask ) .^ 3 .* selected_unit)
109
+ vars_dict[:volume ] = convert (Array{Float64,1 }, getvar (filtered_dataobject , :cellsize , mask= use_mask_in_recursion ) .^ 3 .* selected_unit)
106
110
107
111
108
112
elseif i == :x
@@ -124,7 +128,7 @@ function get_data(dataobject::GravDataType,
124
128
if isamr
125
129
vars_dict[:z ] = (select (masked_data, cpos) .* boxlen ./ 2 .^ select (masked_data, :level ) .- boxlen * center[3 ] ) .* selected_unit
126
130
else # if uniform grid
127
- vars_dict[:z ] = (getvar (dataobject , cpos, mask= mask ) .* boxlen ./ 2 ^ lmax .- boxlen * center[3 ] ) .* selected_unit
131
+ vars_dict[:z ] = (getvar (filtered_dataobject , cpos, mask= use_mask_in_recursion ) .* boxlen ./ 2 ^ lmax .- boxlen * center[3 ] ) .* selected_unit
128
132
end
129
133
130
134
# Gravitational acceleration magnitude - code units by default
@@ -165,8 +169,8 @@ function get_data(dataobject::GravDataType,
165
169
# Cylindrical acceleration components - code units by default
166
170
elseif i == :ar_cylinder
167
171
selected_unit = getunit (dataobject, :ar_cylinder , vars, units)
168
- x = getvar (dataobject , :x , center= center, mask= mask )
169
- y = getvar (dataobject , :y , center= center, mask= mask )
172
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
173
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
170
174
ax = select (masked_data, :ax )
171
175
ay = select (masked_data, :ay )
172
176
@@ -177,8 +181,8 @@ function get_data(dataobject::GravDataType,
177
181
178
182
elseif i == :aϕ_cylinder
179
183
selected_unit = getunit (dataobject, :aϕ_cylinder , vars, units)
180
- x = getvar (dataobject , :x , center= center, mask= mask )
181
- y = getvar (dataobject , :y , center= center, mask= mask )
184
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
185
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
182
186
ax = select (masked_data, :ax )
183
187
ay = select (masked_data, :ay )
184
188
@@ -190,9 +194,9 @@ function get_data(dataobject::GravDataType,
190
194
# Spherical acceleration components - code units by default
191
195
elseif i == :ar_sphere
192
196
selected_unit = getunit (dataobject, :ar_sphere , vars, units)
193
- x = getvar (dataobject , :x , center= center, mask= mask )
194
- y = getvar (dataobject , :y , center= center, mask= mask )
195
- z = getvar (dataobject , :z , center= center, mask= mask )
197
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
198
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
199
+ z = getvar (filtered_dataobject , :z , center= center, mask= use_mask_in_recursion )
196
200
ax = select (masked_data, :ax )
197
201
ay = select (masked_data, :ay )
198
202
az = select (masked_data, :az )
@@ -204,9 +208,9 @@ function get_data(dataobject::GravDataType,
204
208
205
209
elseif i == :aθ_sphere
206
210
selected_unit = getunit (dataobject, :aθ_sphere , vars, units)
207
- x = getvar (dataobject , :x , center= center, mask= mask )
208
- y = getvar (dataobject , :y , center= center, mask= mask )
209
- z = getvar (dataobject , :z , center= center, mask= mask )
211
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
212
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
213
+ z = getvar (filtered_dataobject , :z , center= center, mask= use_mask_in_recursion )
210
214
ax = select (masked_data, :ax )
211
215
ay = select (masked_data, :ay )
212
216
az = select (masked_data, :az )
@@ -221,8 +225,8 @@ function get_data(dataobject::GravDataType,
221
225
222
226
elseif i == :aϕ_sphere
223
227
selected_unit = getunit (dataobject, :aϕ_sphere , vars, units)
224
- x = getvar (dataobject , :x , center= center, mask= mask )
225
- y = getvar (dataobject , :y , center= center, mask= mask )
228
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
229
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
226
230
ax = select (masked_data, :ax )
227
231
ay = select (masked_data, :ay )
228
232
@@ -234,22 +238,22 @@ function get_data(dataobject::GravDataType,
234
238
# Radial distances (for gravity analysis) - code units by default
235
239
elseif i == :r_cylinder
236
240
selected_unit = getunit (dataobject, :r_cylinder , vars, units)
237
- x = getvar (dataobject , :x , center= center, mask= mask )
238
- y = getvar (dataobject , :y , center= center, mask= mask )
241
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
242
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
239
243
vars_dict[:r_cylinder ] = @. sqrt (x^ 2 + y^ 2 ) * selected_unit
240
244
241
245
elseif i == :r_sphere
242
246
selected_unit = getunit (dataobject, :r_sphere , vars, units)
243
- x = getvar (dataobject , :x , center= center, mask= mask )
244
- y = getvar (dataobject , :y , center= center, mask= mask )
245
- z = getvar (dataobject , :z , center= center, mask= mask )
247
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
248
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
249
+ z = getvar (filtered_dataobject , :z , center= center, mask= use_mask_in_recursion )
246
250
vars_dict[:r_sphere ] = @. sqrt (x^ 2 + y^ 2 + z^ 2 ) * selected_unit
247
251
248
252
# Azimuthal angle - dimensionless/radians by default
249
253
elseif i == :ϕ
250
254
selected_unit = getunit (dataobject, :ϕ , vars, units)
251
- x = getvar (dataobject , :x , center= center, mask= mask )
252
- y = getvar (dataobject , :y , center= center, mask= mask )
255
+ x = getvar (filtered_dataobject , :x , center= center, mask= use_mask_in_recursion )
256
+ y = getvar (filtered_dataobject , :y , center= center, mask= use_mask_in_recursion )
253
257
vars_dict[:ϕ ] = @. atan (y, x) * selected_unit
254
258
255
259
# Fallback: if variable not found in gravity and hydro data is available, try hydro getvar
0 commit comments