Skip to content

Commit 2c00099

Browse files
committedFeb 24, 2013
[sextante] changes in R interface
1 parent 42672e5 commit 2c00099

File tree

3 files changed

+45
-33
lines changed

3 files changed

+45
-33
lines changed
 

‎python/plugins/sextante/r/RAlgorithm.py

Lines changed: 37 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ def defineCharacteristicsFromFile(self):
9191
self.commands=[]
9292
self.showPlots = False
9393
self.showConsoleOutput = False
94+
self.useRasterPackage = False
95+
self.passFileNames = False
9496
self.verboseCommands = []
9597
filename = os.path.basename(self.descriptionFile)
9698
self.name = filename[:filename.rfind(".")].replace("_", " ")
@@ -129,36 +131,26 @@ def processParameterLine(self,line):
129131
self.showPlots = True
130132
self.addOutput(OutputHTML(RAlgorithm.RPLOTS, "R Plots"));
131133
return
134+
if line.lower().strip().startswith("userasterpackage"):
135+
self.useRasterPackage = True
136+
return
137+
if line.lower().strip().startswith("passfilenames"):
138+
self.passFileNames = True
139+
return
132140
tokens = line.split("=");
133141
desc = self.createDescriptiveName(tokens[0])
134142
if tokens[1].lower().strip() == "group":
135143
self.group = tokens[0]
136144
return
137145
if tokens[1].lower().strip().startswith("raster"):
138146
param = ParameterRaster(tokens[0], desc, False)
139-
try:
140-
lib = tokens[1].strip()[len("raster")+1:]
141-
if lib == "R.raster":
142-
self.useRraster = True
143-
else:
144-
self.useRraster = False
145-
except:
146-
self.useRraster = False
147147
elif tokens[1].lower().strip() == "vector":
148148
param = ParameterVector(tokens[0], desc,ParameterVector.VECTOR_TYPE_ANY)
149149
elif tokens[1].lower().strip() == "table":
150150
param = ParameterTable(tokens[0], desc, False)
151151
elif tokens[1].lower().strip().startswith("multiple raster"):
152152
param = ParameterMultipleInput(tokens[0], desc, ParameterMultipleInput.TYPE_RASTER)
153153
param.optional = False
154-
try:
155-
lib = tokens[1].strip()[len("multiple raster")+1:]
156-
if lib == "R.raster":
157-
self.useRraster = True
158-
else:
159-
self.useRraster = False
160-
except:
161-
self.useRraster = False
162154
elif tokens[1].lower().strip() == "multiple vector":
163155
param = ParameterMultipleInput(tokens[0], desc, ParameterMultipleInput.TYPE_VECTOR_ANY)
164156
param.optional = False
@@ -279,15 +271,17 @@ def getImportCommands(self):
279271
commands.append(
280272
'tryCatch(find.package("rgdal"), error=function(e) install.packages("rgdal", lib="%s"))' % rLibDir)
281273
commands.append("library(\"rgdal\")");
282-
if self.useRraster:
274+
if self.useRasterPackage:
283275
commands.append(
284276
'tryCatch(find.package("raster"), error=function(e) install.packages("raster", lib="%s"))' % rLibDir)
285277
commands.append("library(\"raster\")");
286278
for param in self.parameters:
287279
if isinstance(param, ParameterRaster):
288280
value = param.value
289281
value = value.replace("\\", "/")
290-
if self.useRraster:
282+
if self.passFileNames:
283+
commands.append(param.name + " = " + value)
284+
elif self.useRasterPackage:
291285
commands.append(param.name + " = " + "brick(\"" + value + "\")")
292286
else:
293287
commands.append(param.name + " = " + "readGDAL(\"" + value + "\")")
@@ -297,44 +291,55 @@ def getImportCommands(self):
297291
filename = os.path.basename(value)
298292
filename = filename[:-4]
299293
folder = os.path.dirname(value)
300-
commands.append(param.name + " = readOGR(\"" + folder + "\",layer=\"" + filename + "\")")
294+
if self.passFileNames:
295+
commands.append(param.name + " = " + value)
296+
else:
297+
commands.append(param.name + " = readOGR(\"" + folder + "\",layer=\"" + filename + "\")")
301298
if isinstance(param, ParameterTable):
302-
value = param.value
299+
value = param.value
303300
if not value.lower().endswith("csv"):
304301
raise GeoAlgorithmExecutionException("Unsupported input file format.\n" + value)
305-
commands.append(param.name + " <- read.csv(\"" + value + "\", head=TRUE, sep=\",\")")
306-
if isinstance(param, (ParameterTableField, ParameterString)):
302+
if self.passFileNames:
303+
commands.append(param.name + " = " + value)
304+
else:
305+
commands.append(param.name + " <- read.csv(\"" + value + "\", head=TRUE, sep=\",\")")
306+
elif isinstance(param, (ParameterTableField, ParameterString, ParameterFile)):
307307
commands.append(param.name + "=\"" + param.value + "\"")
308-
if isinstance(param, (ParameterNumber, ParameterSelection)):
308+
elif isinstance(param, (ParameterNumber, ParameterSelection)):
309309
commands.append(param.name + "=" + str(param.value))
310-
if isinstance(param, ParameterBoolean):
310+
elif isinstance(param, ParameterBoolean):
311311
if param.value:
312312
commands.append(param.name + "=TRUE")
313313
else:
314314
commands.append(param.name + "=FALSE")
315-
if isinstance(param, ParameterMultipleInput):
315+
elif isinstance(param, ParameterMultipleInput):
316316
iLayer = 0;
317317
if param.datatype == ParameterMultipleInput.TYPE_RASTER:
318318
layers = param.value.split(";")
319319
for layer in layers:
320-
if not layer.lower().endswith("asc") and not layer.lower().endswith("tif"):
321-
raise GeoAlgorithmExecutionException("Unsupported input file format.\n" + layer)
320+
#if not layer.lower().endswith("asc") and not layer.lower().endswith("tif") and not self.passFileNames:
321+
#raise GeoAlgorithmExecutionException("Unsupported input file format.\n" + layer)
322322
layer = layer.replace("\\", "/")
323-
if self.useRraster:
324-
commands.append("tempvar" + str(iLayer)+ " = " + "brick(\"" + layer + "\"")
323+
if self.passFileNames:
324+
commands.append("tempvar" + str(iLayer)+ " = \"" + layer + "\"")
325+
elif self.useRasterPackage:
326+
commands.append("tempvar" + str(iLayer)+ " = " + "brick(\"" + layer + "\")")
325327
else:
326-
commands.append("tempvar" + str(iLayer)+ " = " + "readGDAL(\"" + layer + "\"")
328+
commands.append("tempvar" + str(iLayer)+ " = " + "readGDAL(\"" + layer + "\")")
327329
iLayer+=1
328330
else:
329331
exported = param.getSafeExportedLayers()
330332
layers = exported.split(";")
331333
for layer in layers:
332-
if not layer.lower().endswith("shp"):
334+
if not layer.lower().endswith("shp") and not self.passFileNames:
333335
raise GeoAlgorithmExecutionException("Unsupported input file format.\n" + layer)
334336
layer = layer.replace("\\", "/")
335337
filename = os.path.basename(layer)
336338
filename = filename[:-4]
337-
commands.append("tempvar" + str(iLayer) + " = " + "readOGR(\"" + layer + "\",layer=\"" + filename + "\")")
339+
if self.passFileNames:
340+
commands.append("tempvar" + str(iLayer)+ " = \"" + layer + "\"")
341+
else:
342+
commands.append("tempvar" + str(iLayer) + " = " + "readOGR(\"" + layer + "\",layer=\"" + filename + "\")")
338343
iLayer+=1
339344
s = ""
340345
s += param.name

‎python/plugins/sextante/r/RAlgorithmProvider.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,14 @@ def initializeSettings(self):
5050
SextanteConfig.addSetting(Setting(self.getDescription(), RUtils.RSCRIPTS_FOLDER, "R Scripts folder", RUtils.RScriptsFolder()))
5151
if SextanteUtils.isWindows():
5252
SextanteConfig.addSetting(Setting(self.getDescription(), RUtils.R_FOLDER, "R folder", RUtils.RFolder()))
53+
SextanteConfig.addSetting(Setting(self.getDescription(), RUtils.R_USE64, "Use 64 bit version", False))
5354

5455
def unload(self):
5556
AlgorithmProvider.unload(self)
5657
SextanteConfig.removeSetting(RUtils.RSCRIPTS_FOLDER)
5758
if SextanteUtils.isWindows():
5859
SextanteConfig.removeSetting(RUtils.R_FOLDER)
60+
SextanteConfig.removeSetting(RUtils.R_USE64)
5961

6062
def getIcon(self):
6163
return QtGui.QIcon(os.path.dirname(__file__) + "/../images/r.png")

‎python/plugins/sextante/r/RUtils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class RUtils:
3535

3636
RSCRIPTS_FOLDER = "R_SCRIPTS_FOLDER"
3737
R_FOLDER = "R_FOLDER"
38+
R_USE64 = "R_USE64"
3839

3940
@staticmethod
4041
def RFolder():
@@ -73,7 +74,11 @@ def executeRAlgorithm(alg, progress):
7374
RUtils.verboseCommands = alg.getVerboseCommands();
7475
RUtils.createRScriptFromRCommands(alg.getFullSetOfRCommands())
7576
if SextanteUtils.isWindows():
76-
command = [RUtils.RFolder() + os.sep + "bin" + os.sep + "R.exe", "CMD", "BATCH", "--vanilla",
77+
if SextanteConfig.getSetting(RUtils.R_USE64):
78+
execDir = "x64"
79+
else:
80+
execDir = "i386"
81+
command = [RUtils.RFolder() + os.sep + "bin" + os.sep + execDir + os.sep + "R.exe", "CMD", "BATCH", "--vanilla",
7782
RUtils.getRScriptFilename(), RUtils.getConsoleOutputFilename()]
7883
else:
7984
os.chmod(RUtils.getRScriptFilename(), stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE)

0 commit comments

Comments
 (0)
Please sign in to comment.