Commit 7d9ae5ded8a51f3a372f817dba13baad462767f2

Authored by ruppert
1 parent cc5b7023

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 22 import sys
23 23 import re
24 24 import locale
  25 +import math
25 26  
26 27 def format_time(value):
27 28 sp1 = value.split(".")
... ... @@ -203,6 +204,49 @@ def frange(start, end=None, inc=None):
203 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 250 def predict_memory(nfiles, x, y, p):
207 251 """
208 252 Predict how much memory will be used, giving the following
... ... @@ -294,6 +338,7 @@ def get_physical_memory():
294 338 return int(mem.total())
295 339  
296 340  
  341 +
297 342 def get_system_encoding():
298 343 if (sys.platform == 'win32'):
299 344 return locale.getdefaultlocale()[1]
... ...