Commit 7d9ae5ded8a51f3a372f817dba13baad462767f2
1 parent
cc5b7023
Exists in
master
and in
67 other branches
ADD: function calculate_resizing_tofitmemory
Showing
1 changed file
with
45 additions
and
0 deletions
Show diff stats
invesalius/utils.py
| @@ -22,6 +22,7 @@ import sigar | @@ -22,6 +22,7 @@ import sigar | ||
| 22 | import sys | 22 | import sys |
| 23 | import re | 23 | import re |
| 24 | import locale | 24 | import locale |
| 25 | +import math | ||
| 25 | 26 | ||
| 26 | def format_time(value): | 27 | def format_time(value): |
| 27 | sp1 = value.split(".") | 28 | sp1 = value.split(".") |
| @@ -203,6 +204,49 @@ def frange(start, end=None, inc=None): | @@ -203,6 +204,49 @@ def frange(start, end=None, inc=None): | ||
| 203 | return L | 204 | return L |
| 204 | 205 | ||
| 205 | 206 | ||
| 207 | + | ||
| 208 | +def calculate_resizing_tofitmemory(x_size,y_size,n_slices,byte): | ||
| 209 | + """ | ||
| 210 | + Predicts the percentage (between 0 and 1) to resize the image to fit the memory, | ||
| 211 | + giving the following information: | ||
| 212 | + x_size, y_size: image size | ||
| 213 | + n_slices: number of slices | ||
| 214 | + byte: bytes allocated for each pixel sample | ||
| 215 | + """ | ||
| 216 | + imagesize = x_size * y_size * n_slices * byte | ||
| 217 | + | ||
| 218 | + sg = sigar.open() | ||
| 219 | + ram_free = sg.mem().actual_free() | ||
| 220 | + ram_total = sg.mem().actual_free() | ||
| 221 | + swap_free = sg.swap().free() | ||
| 222 | + sg.close() | ||
| 223 | + | ||
| 224 | + if (sys.platform == 'win32'): | ||
| 225 | + if (platform.architecture()[0] == '32bit'): | ||
| 226 | + if ram_free>1400000000: | ||
| 227 | + ram_free=1400000000 | ||
| 228 | + if ram_total>1400000000: | ||
| 229 | + ram_total=1400000000 | ||
| 230 | + | ||
| 231 | + if (sys.platform == 'linux2'): | ||
| 232 | + if (platform.architecture()[0] == '32bit'): | ||
| 233 | + if ram_free>3500000000: | ||
| 234 | + ram_free=3500000000 | ||
| 235 | + if ram_total>3500000000: | ||
| 236 | + ram_total=3500000000 | ||
| 237 | + | ||
| 238 | + if (swap_free>ram_total): | ||
| 239 | + swap_free=ram_total | ||
| 240 | + resize = (float((ram_free+0.5*swap_free)/imagesize)) | ||
| 241 | + resize=math.sqrt(resize) # this gives the "resize" for each axis x and y | ||
| 242 | + if (resize>1): | ||
| 243 | + resize=1 | ||
| 244 | + return (100*resize) | ||
| 245 | + | ||
| 246 | + | ||
| 247 | + | ||
| 248 | + | ||
| 249 | + | ||
| 206 | def predict_memory(nfiles, x, y, p): | 250 | def predict_memory(nfiles, x, y, p): |
| 207 | """ | 251 | """ |
| 208 | Predict how much memory will be used, giving the following | 252 | Predict how much memory will be used, giving the following |
| @@ -294,6 +338,7 @@ def get_physical_memory(): | @@ -294,6 +338,7 @@ def get_physical_memory(): | ||
| 294 | return int(mem.total()) | 338 | return int(mem.total()) |
| 295 | 339 | ||
| 296 | 340 | ||
| 341 | + | ||
| 297 | def get_system_encoding(): | 342 | def get_system_encoding(): |
| 298 | if (sys.platform == 'win32'): | 343 | if (sys.platform == 'win32'): |
| 299 | return locale.getdefaultlocale()[1] | 344 | return locale.getdefaultlocale()[1] |