[GRASS-SVN] r58352 - grass-addons/grass6/raster/r.maxent.lambdas

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Dec 2 04:29:03 PST 2013


Author: sbl
Date: 2013-12-02 04:29:03 -0800 (Mon, 02 Dec 2013)
New Revision: 58352

Removed:
   grass-addons/grass6/raster/r.maxent.lambdas/r.maxent.lambdas_v2
Log:
Fixes by Paulo van Breugel merged in r.maxent.lambdas

Deleted: grass-addons/grass6/raster/r.maxent.lambdas/r.maxent.lambdas_v2
===================================================================
--- grass-addons/grass6/raster/r.maxent.lambdas/r.maxent.lambdas_v2	2013-12-02 12:22:20 UTC (rev 58351)
+++ grass-addons/grass6/raster/r.maxent.lambdas/r.maxent.lambdas_v2	2013-12-02 12:29:03 UTC (rev 58352)
@@ -1,276 +0,0 @@
-#!/bin/sh 
-# 
-############################################################################ 
-# 
-# MODULE:       r.maxent.lambdas 
-# AUTHOR(S):    Stefan Blumentrath <stefan dot blumentrath at nina dot no >
-#               Proposed small change in how raw features are extracted 
-#               from the lambdas file as this didn't work in original
-#               code (Paulo van Breugel)
-# PURPOSE:      Compute raw and/or logistic prediction maps from a lambdas
-#               file produced with MaxEnt 3.3.3e. 
-#
-#               !!!This script works only if the input data to MaxEnt 
-#               are accessible from the current region.!!!
-# 
-#               This script will parse the specified lambdas-file from 
-#               MaxEnt 3.3.3e (see http://www.cs.princeton.edu/~schapire/maxent/) 
-#               and translate it into an r.mapcalc-expression which is then stored
-#               in a temporary file and finally piped to r.mapcalc.
-#               If alias names had been used in MaxEnt, these alias names can 
-#               automatically be replaced according to a  CSV-like file provided 
-#               by the user. This file should contain alias names in the first 
-#               column and map names in the second column, seperated by comma, 
-#               without header. It should look e.g. like this:
-#               
-#               alias_1,map_1
-#               alias_2,map_2
-#               ...,...
-#               
-#               If such a CSV-file with alias names used in MaxEnt is provided, 
-#               the alias names from MaxEnt are replaced by map names. 
-#
-#               A raw output map is always computed from the MaxEnt model
-#               as a first step. If logistic output is requested, the raw output
-#               map can be deleted by the script ( using the l-flag). The 
-#               production of logistic output can be omitted. The logistic map  
-#               can be produced as an integer map. To do so the user has to specify
-#               the number of digits after comma, that should be preserved in 
-#               integer output.   
-#               Optionally the map calculator expressions can be saved in a text 
-#               file, as especially the one for the raw output is likely to exceed 
-#               the space in the map history.
-#               Due to conversion from double to floating-point in exp()-function, a 
-#               loss of precision from the 7th digit onwards is possible in the 
-#               logistic output.
-# 
-# COPYRIGHT:    (C) 2011 by the Norwegian Institute for Nature Research (NINA)
-#               http://www.nina.no
-# 
-#               This program is free software under the GNU General Public 
-#               License (>=v2). Read the file COPYING that comes with GRASS 
-#               for details. 
-# 
-############################################################################# 
-#
-# REQUIREMENTS:
-# awk
-#
-#%Module 
-#% description: Computes raw and/or logistic prediction maps from MaxEnt lambdas files 
-#%End 
-#
-#%flag
-#%  key: r
-#%  description: Produce only raw output (both are computed by default).
-#%end
-#
-#%flag
-#%  key: l
-#%  description: Produce only logistic output (both are computed by default).
-#%end
-#
-#%option 
-#% key: lambdas_file
-#% type: string
-#% description: MaxEnt lambdas-file to compute distribution-model from
-#% required : yes
-#% gisprompt: old_file,file,input
-#%end
-# 
-#%option 
-#% key: output_prefix
-#% type: string 
-#% description: Prefix for output raster maps 
-#% required : yes
-#% gisprompt: new,cell,raster
-#%end 
-#
-#%option 
-#% key: alias_file
-#% type: string
-#% description: CSV-file to replace alias names from MaxEnt by GRASS map names
-#% required : no
-#% gisprompt: old_file,file,input
-#%end
-# 
-#%option 
-#% key: integer_output
-#% type: integer
-#% description: Produce logistic integer output with this number of digits preserved
-#% required : no
-#% answer : 0
-#%end
-# 
-#%option 
-#% key: output_mapcalc
-#% type: string 
-#% description: Save r.mapcalc expression to file 
-#% required : no
-#% gisprompt: new_file,file,output
-#%end 
-#
-#
-FLAG_ONLY_RAW=${GIS_FLAG_R}
-FLAG_ONLY_LOGISTIC=${GIS_FLAG_L}
-LAMBDAS_FILE="${GIS_OPT_LAMBDAS_FILE}"
-INTEGER_OUTPUT=${GIS_OPT_INTEGER_OUTPUT}
-#
-ALIAS_FILE="${GIS_OPT_ALIAS_FILE}"
-#
-OUTPUT_PREFIX="${GIS_OPT_OUTPUT_PREFIX}"
-OUTPUT_MAPCALC="${GIS_OPT_OUTPUT_MAPCALC}"
-#
-#Check if script is started from within GRASS
-if [ -z "$GISBASE" ] ; then
-    echo "You must be in GRASS GIS to run this program." 1>&2
-    exit 1
-fi
-#
-#Check if awk is installed
-	if [ ! -x "`which awk`" ] ; then
-	    g.message -e "awk is required, please install awk or gawk first" 
-	    exit 1
-	fi
-#Set environment so that awk works properly in all languages
-	unset LC_ALL
-	LC_NUMERIC=C
-	export LC_NUMERIC
-#
-#Pass evtl. command line arguments to gui and start it 
-if [ "$1" != "@ARGS_PARSED@" ] ; then
-    exec g.parser "$0" "$@"
-fi
-#
-#Check if input file exists
-if [ ! -r "$LAMBDAS_FILE" ] ; then 
-	g.message -e "MaxEnt lambdas-file could not be found or is not readable."
-	exit 1
-fi 
-#
-#Check if raw output files exists 
-eval `g.findfile element=cell file=${OUTPUT_PREFIX}_raw` 
-if [ -n "$name" ] ; then 
-	g.message -e  "Raw output file already exists."
-	exit 1
-fi
-#
-#Check if logistic output files exists when requestd
-if [ "${FLAG_ONLY_RAW}" -ne 1 ] ; then
-	eval `g.findfile element=cell file=${OUTPUT_PREFIX}_logistic` 
-	if [ -n "$name" ] ; then 
-		g.message -e  "Logistic output file already exists."
-		exit 1
-	fi
-fi
-#
-#Check if output flags are set properly 
-if [ "${FLAG_ONLY_RAW}" -eq 1 -a "${FLAG_ONLY_LOGISTIC}" -eq 1 ] ; then
-	g.message -e  "The r and l flags are exclusive. Do not tick both!"
-	rm "$temp1"
-	exit 1
-fi
-#
-###Save r.mapcalc expression to file if requested, else to tmp-file
-if [ -z "$OUTPUT_MAPCALC" ] ; then
-	#
-	#Create tempfile
-	temp1=`g.tempfile pid=$$`
-	if [ $? -ne 0 ] || [ -z "$temp1" ] ; then
-			g.message -e "ERROR: unable to create temporary files"
-			exit 1
-	fi
-else
-	temp1="$OUTPUT_MAPCALC"
-fi
-
-#
-###Parse lambdas-file and translate it to a mapcalculator expression (safed in temporary file)
-###Get variables linearPredictorNormalizer, densityNormalizer and entropy from lambdas-file
-linearPredictorNormalizer=$(cat ${LAMBDAS_FILE} | grep linearPredictorNormalizer | sed 's/ //g' | tr -d '\r' | cut -f2 -d",")
-densityNormalizer=$(cat ${LAMBDAS_FILE} | grep densityNormalizer | sed 's/ //g' | tr -d '\r' | cut -f2 -d",")
-entropy=$(cat ${LAMBDAS_FILE} | grep entropy | sed 's/ //g' | tr -d '\r' | cut -f2 -d",")
-###Create file with initial part of mapcalc-expression
-echo "${OUTPUT_PREFIX}_raw=exp(((\\" > "$temp1"
-###Extract raw features
-cat -v "${LAMBDAS_FILE}" | awk '$0 !~ /\^|\(|\*/' | grep -vP "\`" | grep -vP "\'" | sed 's/\^M//g' | sed 's/,//g' | awk 'NF==4{print "if(isnull(" $1 "),0,(" $2 "*(" $1 "-" $3 ")/(" $4 "-" $3 ")))" "+" "\\"}' | sed 's/--/+/g' | sed 's/+-/-/g' >> $temp1
-###Extract quadratic features
-cat -v "${LAMBDAS_FILE}" | grep '\^2' | sed 's/\^M//g' | sed 's/,//g' | sed 's/\^2//g' | awk '{print "if(isnull(" $1 "),0,((" $2 "*(" $1 "*" $1 "-" $3 "))/" "(" $4 "-" $3 ")))" "+" "\\"}' | sed 's/--/+/g' | sed 's/+-/-/g' >> $temp1
-###Extract product features
-cat -v "${LAMBDAS_FILE}" | grep '*' | sed 's/\^M//g' | sed 's/,//g' | tr '*' ' ' | awk '{print "if((isnull(" $1 ")||isnull(" $2 ")),0,(" $3 "*(" $1 "*" $2 "-" $4 ")/(" $5 "-" $4 ")))+\\"}' | sed 's/--/+/g' | sed 's/+-/-/g' >> $temp1
-###Extract forward hinge features
-cat -v "${LAMBDAS_FILE}" | grep -P "\'" | sed 's/\^M//g' | sed 's/,//g' | cut -b 2- | tr '<' ' ' | awk '{print "if(isnull(" $1 "),0,if(" $1 ">=" $3 ",(" $2 "*(" $1 "-" $3 ")/(" $4 "-" $3 ")),0.0))+\\"}' | sed 's/--/+/g' | sed 's/+-/-/g' >> $temp1
-###Extract reverse hinge features
-cat -v "${LAMBDAS_FILE}" | grep -P "\`" | sed 's/\^M//g' | sed 's/,//g' | cut -b 2- | tr '<' ' ' | awk '{print "if(isnull(" $1 "),0,if(" $1 "<" $4 ",(" $2 "*(" $4 "-" $1 ")/(" $4 "-" $3 ")),0.0))+\\"}' | sed 's/--/+/g' | sed 's/+-/-/g' >> $temp1
-###Extract threshold features
-cat -v "${LAMBDAS_FILE}" | grep '(' | grep -v '=' | sed 's/\^M//g' | sed 's/,//g' | sed 's/(//g' | sed 's/)//g' | tr '<' ' ' | awk '{print "if(isnull(" $2 "),0,if(" $2 ">=" $1 "," $3 "))" "+\\"}' | sed 's/--/+/g' | sed 's/+-/-/g' >> $temp1
-###Extract categoric features
-cat -v "${LAMBDAS_FILE}" | grep '(' | grep '=' | sed 's/\^M//g' | sed 's/,//g' | sed 's/(//g' | sed 's/)//g' | tr '=' ' ' | awk '{print "if(isnull(" $1 "),0,if(" $1 "==" $2 "," $3 "))" "+\\"}' | sed 's/--/+/g' | sed 's/+-/-/g' >> $temp1
-###Replace last '\' by tail part of mapcalc-expression
-sed -i '$s/..$/\\/' "$temp1"
-echo ")-${linearPredictorNormalizer}))/${densityNormalizer}" >> "$temp1"
-###Replace possible repetitions of mathmatical signs
-sed -i 's/--/+/g' "$temp1"
-sed -i 's/+-/-/g' "$temp1"
-#
-#Check if alias file is provided and readable
-if [ -n "$ALIAS_FILE" ] ; then
-	if [ ! -r "$ALIAS_FILE" ] ; then 
-		g.message -e "Alias file could not be found or is not readable."
-		exit 1
-	else
-		#Parse alias-file to replace MaxEnt alias names by GRASS map names (including mapset specification)
-		alias_names=$(cat $ALIAS_FILE | cut -f1 -d",")
-		for a in $alias_names
-		do
-		m=$(cat $ALIAS_FILE | grep -w "${a}" | cut -f2 -d",")
-		#
-		g.message -v "Map name for alias $a is $m"
-		#
-		sed -i "s/(${a}-/(${m}-/" "$temp1"
-		sed -i "s/(${a}+/(${m}+/" "$temp1"
-		sed -i "s/(${a}>/(${m}>/" "$temp1"
-		sed -i "s/(${a}</(${m}</" "$temp1"
-		sed -i "s/(${a}=/(${m}=/" "$temp1"
-		sed -i "s/(${a}\*/(${m}\*/" "$temp1"
-		#
-		sed -i "s/-${a})/-${m})/" "$temp1"
-		sed -i "s/+${a})/+${m})/" "$temp1"
-		sed -i "s/>${a})/>${m})/" "$temp1"
-		sed -i "s/<${a})/<${m})/" "$temp1"
-		sed -i "s/=${a})/=${m})/" "$temp1"
-		sed -i "s/\*${a}-/\*${m}-/" "$temp1"
-		sed -i "s/\*${a}+/\*${m}+/" "$temp1"
-		done
-		#
-	fi 
-fi
-#
-###Compute raw output map by sending expression saved in file temporary file to r.mapcalc
-cat "$temp1" | r.mapcalc
-#
-###Compute logistic output map if not suppressed
-if [ "${FLAG_ONLY_RAW}" -eq 0 ] ; then
-	if  [ "${INTEGER_OUTPUT}" -le 0 ] ; then
-		echo "${OUTPUT_PREFIX}_logistic = (${OUTPUT_PREFIX}_raw*exp(${entropy}))/(1.0+(${OUTPUT_PREFIX}_raw*exp(${entropy})))" >> "$temp1"
-		r.mapcalc "${OUTPUT_PREFIX}_logistic = (${OUTPUT_PREFIX}_raw*exp(${entropy}))/(1.0+(${OUTPUT_PREFIX}_raw*exp(${entropy})))"
-	else
-		if  [ "${INTEGER_OUTPUT}" -lt 5 ] ; then
-			echo "${OUTPUT_PREFIX}_logistic = round(((${OUTPUT_PREFIX}_raw*exp(${entropy}))/(1.0+(${OUTPUT_PREFIX}_raw*exp(${entropy}))))*(10^${INTEGER_OUTPUT}))" >> "$temp1"
-			r.mapcalc "${OUTPUT_PREFIX}_logistic = round(((${OUTPUT_PREFIX}_raw*exp(${entropy}))/(1.0+(${OUTPUT_PREFIX}_raw*exp(${entropy}))))*(10^${INTEGER_OUTPUT}))"
-		else
-			echo "${OUTPUT_PREFIX}_logistic = round(((${OUTPUT_PREFIX}_raw*exp(${entropy}))/(1.0+(${OUTPUT_PREFIX}_raw*exp(${entropy}))))*100000.0)" >> "$temp1"
-			r.mapcalc "${OUTPUT_PREFIX}_logistic = round(((${OUTPUT_PREFIX}_raw*exp(${entropy}))/(1.0+(${OUTPUT_PREFIX}_raw*exp(${entropy}))))*100000.0)"
-		fi
-	fi
-fi
-###Remove raw output map if requested
-if [ "${FLAG_ONLY_LOGISTIC}" -eq 1 ] ; then
-	g.remove -f rast="${OUTPUT_PREFIX}"_raw
-fi
-###Remove tmp-file containing r.mapcalc expressions (if save to file not requested)
-if [ -z "$OUTPUT_MAPCALC" ] ; then
-	rm -f "$temp1"
-fi
-
-g.message "Done"



More information about the grass-commit mailing list