浏览代码

Add seed= parameter to grass.script.mapcalc()

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@61388 15284696-431f-4ddb-bdfa-cd5b030d7da7
Glynn Clements 10 年之前
父节点
当前提交
a1bfd8336e
共有 1 个文件被更改,包括 17 次插入2 次删除
  1. 17 2
      lib/python/script/raster.py

+ 17 - 2
lib/python/script/raster.py

@@ -25,6 +25,7 @@ for details.
 import os
 import string
 import types
+import time
 
 from core import *
 
@@ -86,26 +87,33 @@ def raster_info(map):
 
 # interface to r.mapcalc
 
-def mapcalc(exp, quiet = False, verbose = False, overwrite = False, **kwargs):
+def mapcalc(exp, quiet = False, verbose = False, overwrite = False, seed = None, **kwargs):
     """!Interface to r.mapcalc.
 
     @param exp expression
     @param quiet True to run quietly (<tt>--q</tt>)
     @param verbose True to run verbosely (<tt>--v</tt>)
     @param overwrite True to enable overwriting the output (<tt>--o</tt>)
+    @param seed an integer used to seed the random-number generator for the rand() function,
+    or 'auto' to generate a random seed
     @param kwargs
     """
+
+    if seed == 'auto':
+        seed = hash((os.getpid(), time.time())) % (2**32)
+
     t = string.Template(exp)
     e = t.substitute(**kwargs)
 
     if write_command('r.mapcalc', file = '-', stdin = e,
+                     seed = seed,
                      quiet = quiet,
                      verbose = verbose,
                      overwrite = overwrite) != 0:
         fatal(_("An error occurred while running r.mapcalc"))
 
 
-def mapcalc_start(exp, quiet = False, verbose = False, overwrite = False, **kwargs):
+def mapcalc_start(exp, quiet = False, verbose = False, overwrite = False, seed = None, **kwargs):
     """!Interface to r.mapcalc, doesn't wait for it to finish, returns Popen object.
 
     \code
@@ -124,14 +132,21 @@ def mapcalc_start(exp, quiet = False, verbose = False, overwrite = False, **kwar
     @param quiet True to run quietly (<tt>--q</tt>)
     @param verbose True to run verbosely (<tt>--v</tt>)
     @param overwrite True to enable overwriting the output (<tt>--o</tt>)
+    @param seed an integer used to seed the random-number generator for the rand() function,
+    or 'auto' to generate a random seed
     @param kwargs
     
     @return Popen object
     """
+
+    if seed == 'auto':
+        seed = hash((os.getpid(), time.time())) % (2**32)
+
     t = string.Template(exp)
     e = t.substitute(**kwargs)
 
     p = feed_command('r.mapcalc', file = '-',
+                     seed = seed,
                      quiet = quiet,
                      verbose = verbose,
                      overwrite = overwrite)