bug fixes on FAOMSY

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-analysis/EcologicalEngineSmartExecutor@114220 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Gianpaolo Coro 2015-04-17 14:37:42 +00:00
parent 67d403919f
commit d6d450a708
2 changed files with 34 additions and 13 deletions

View File

@ -3,6 +3,7 @@ package org.gcube.dataanalysis.executor.nodes.algorithms;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.UUID;
@ -39,14 +40,20 @@ public class FAOMSY extends ActorNode {
@Override
public String getDescription() {
return "An algorithm to estimate the Maximum Sustainable Yield from a catch statistic by FAO.";
return "An algorithm to be used by Fisheries managers for stock assessment. " +
"Estimates the Maximum Sustainable Yield (MSY) of a stock, based on a catch trend. " +
"The algorithm has been developed by the Resource Use and Conservation Division of the FAO Fisheries and Aquaculture Department (contact: Yimin Ye, yimin.ye@fao.org). " +
"It is applicable to a CSV file containing metadata and catch statistics for a set of marine species and produces MSY estimates for each species. " +
"The CSV must follow a FAO-defined format (e.g. http://goo.gl/g6YtVx). " +
"The output is made up of two (optional) files: one for sucessfully processed species and another one for species that could not be processed because data were not sufficient to estimate MSY.";
}
static String stocksFile = "StocksFile";
static String processOutput= "ProcessOutput";
static String nonProcessedOutput= "NonProcessedOutput";
static String scriptName = "CatchMSY_Dec2014.R";
String processedSpOutputFile="";
String nonProcessedSpOutputFile="";
@Override
public List<StatisticalType> getInputParameters() {
@ -57,20 +64,26 @@ public class FAOMSY extends ActorNode {
@Override
public StatisticalType getOutput() {
File outfile = new File(config.getPersistencePath(),config.getParam(processOutput));
File outfile2 = new File(config.getPersistencePath(),config.getParam(nonProcessedOutput));
PrimitiveTypesList list = new PrimitiveTypesList(File.class.getName(), PrimitiveTypes.FILE, "OutputFiles", "Textual output files - processed and non-processed species",false);
File outfile = new File(processedSpOutputFile);
File outfile2 = new File(nonProcessedSpOutputFile);
AnalysisLogger.getLogger().debug("FAOMSY Output 1: "+outfile.getAbsolutePath()+" : "+outfile.exists());
AnalysisLogger.getLogger().debug("FAOMSY Output 2: "+outfile2.getAbsolutePath()+" : "+outfile2.exists());
LinkedHashMap<String, StatisticalType> outputmap = new LinkedHashMap<String, StatisticalType>();
if (outfile.exists()){
PrimitiveType o = new PrimitiveType(File.class.getName(), outfile, PrimitiveTypes.FILE, "ProcessedSpecies", "Output file");
list.add(o);
PrimitiveType o = new PrimitiveType(File.class.getName(), outfile, PrimitiveTypes.FILE, "ProcessedSpecies", "Output file with processed species");
outputmap.put("File containing Processed Species", o);
}
if (outfile2.exists()){
PrimitiveType o2 = new PrimitiveType(File.class.getName(), outfile2, PrimitiveTypes.FILE, "NonProcessedSpecies", "Output file");
list.add(o2);
PrimitiveType o2 = new PrimitiveType(File.class.getName(), outfile2, PrimitiveTypes.FILE, "NonProcessedSpecies", "Output file with non processed species");
outputmap.put("File containing Non Processed Species", o2);
}
PrimitiveType output = new PrimitiveType(HashMap.class.getName(), outputmap, PrimitiveTypes.MAP, "ResultsMap", "Results Map");
AnalysisLogger.getLogger().debug("FAOMSY Output Managed");
return list;
return output;
}
@Override
@ -152,7 +165,13 @@ public class FAOMSY extends ActorNode {
config.setParam(processOutput, "FAOMSY_"+"output_"+uuid);
config.setParam(nonProcessedOutput, "FAOMSY_nonprocessed_"+"output_"+uuid);
File tempfile = new File(config.getPersistencePath(),"FAOMSY_input_"+(UUID.randomUUID()+".csv").replace("-", ""));
StorageUtils.downloadInputFile(config.getParam(stocksFile), tempfile.getAbsolutePath());
try{
if (config.getParam(stocksFile).toLowerCase().startsWith("https:"))
throw new Exception("Error in FAOMSY: https link not supported!");
StorageUtils.downloadInputFile(config.getParam(stocksFile), tempfile.getAbsolutePath());
}catch(Exception e){
throw new Exception("Error in FAOMSY: error in accessing file (alert: https not supported)");
}
nstocks = StorageUtils.calcFileRows(tempfile, true);
AnalysisLogger.getLogger().info("FAOMSY Found "+nstocks+" stocks!");
if (nstocks==0)
@ -212,6 +231,8 @@ public class FAOMSY extends ActorNode {
try {
String mainOutputfilename = config.getParam(processOutput);
String optionalOutputfilename = config.getParam(nonProcessedOutput);
processedSpOutputFile = new File(config.getPersistencePath(),mainOutputfilename).getAbsolutePath();
nonProcessedSpOutputFile = new File(config.getPersistencePath(),optionalOutputfilename).getAbsolutePath();
assembleFiles(mainOutputfilename);
assembleFiles(optionalOutputfilename);
AnalysisLogger.getLogger().debug("FAOMSY - Postprocess complete");

View File

@ -131,9 +131,9 @@ public class StorageUtils {
try {
int nfiles = filenames.size();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputfile));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File(localFolder,outputfile)));
for (int i=0;i<nfiles;i++){
BufferedReader br = new BufferedReader(new FileReader(filenames.get(i)));
BufferedReader br = new BufferedReader(new FileReader(new File(localFolder,filenames.get(i))));
String header = null;
if (hasheader && i==0){
header = br.readLine();