[chronojump] graph.R RDotNet (80%)



commit 40d2205ae3c1c6a4f9bfcbcc06a5fd843fd1dd4e
Author: Xavier de Blas <xaviblas gmail com>
Date:   Wed May 7 00:09:29 2014 +0200

    graph.R RDotNet (80%)

 encoder/call_graph.R |    5 ++
 src/encoder.cs       |   55 ++++++++++++++++++++
 src/utilEncoder.cs   |  135 ++++++++++++++++++++++++++-----------------------
 3 files changed, 132 insertions(+), 63 deletions(-)
---
diff --git a/encoder/call_graph.R b/encoder/call_graph.R
index 502e9e2..2e3294d 100644
--- a/encoder/call_graph.R
+++ b/encoder/call_graph.R
@@ -50,6 +50,11 @@ options <- getOptionsFromFile(optionsFile, 32)
 
 #print(options)
 
+#---------------------------------------------------------------------
+#                      Attention
+#this code should be the same as utilEncoder.cs RunEncoderGraphRDotNet
+#---------------------------------------------------------------------
+
 OutputData2 <- options[4] #currently used to display processing feedback
 SpecialData <- options[5]
 OperatingSystem <- options[27]
diff --git a/src/encoder.cs b/src/encoder.cs
index e6e5f9f..c084ea7 100644
--- a/src/encoder.cs
+++ b/src/encoder.cs
@@ -191,6 +191,61 @@ public class EncoderStruct
        ~EncoderStruct() {}
 }
 
+public class EncoderGraphROptions
+{
+       public string inputData;
+       public string outputGraph;
+       public string outputData1;
+       public string outputData2;
+       public string specialData;
+       public EncoderParams ep;
+       public string title;
+       public string operatingSystem;
+       public string scriptUtilR;
+       public string scriptNeuromuscularProfile;
+       public string englishWords;
+       public string translatedWords;
+       public string scriptGraphR;
+       
+       public EncoderGraphROptions(
+                       string inputData, string outputGraph, string outputData1, 
+                       string outputData2, string specialData, 
+                       EncoderParams ep,
+                       string title, string operatingSystem,
+                       string scriptUtilR, string scriptNeuromuscularProfile,
+                       string englishWords, string translatedWords,
+                       string scriptGraphR) 
+       {
+               this.inputData = inputData;
+               this.outputGraph = outputGraph;
+               this.outputData1 = outputData1;
+               this.outputData2 = outputData2;
+               this.specialData = specialData;
+               this.ep = ep;
+               this.title = title;
+               this.operatingSystem = operatingSystem;
+               this.scriptUtilR = scriptUtilR;
+               this.scriptNeuromuscularProfile = scriptNeuromuscularProfile;
+               this.englishWords = englishWords;
+               this.translatedWords = translatedWords;
+               this.scriptGraphR = scriptGraphR;
+       }
+
+       public override string ToString() {
+               return inputData + "\n" + 
+                       outputGraph + "\n" + outputData1 + "\n" + 
+                       outputData2 + "\n" + specialData + "\n" + 
+                       ep.ToString2("\n") + "\n" + title + "\n" + operatingSystem + "\n" +
+                       scriptUtilR + "\n" + scriptNeuromuscularProfile + "\n" +
+                       englishWords + "\n" +
+                       translatedWords + "\n" + 
+                       scriptGraphR + "\n";
+       }
+
+       ~EncoderGraphROptions() {}
+}
+
+
 //used on TreeViews capture and analyze
 public class EncoderCurve
 {
diff --git a/src/utilEncoder.cs b/src/utilEncoder.cs
index 2f31082..d8fb9d6 100644
--- a/src/utilEncoder.cs
+++ b/src/utilEncoder.cs
@@ -255,31 +255,8 @@ public class UtilEncoder
        }
        */
        
-       //public static bool RunEncoderGraphRDotNet(REngine rengine, string title, EncoderStruct es, bool 
neuromuscularProfileDo) 
-       public static void RunEncoderGraphRDotNet(REngine rengine) 
+       private static EncoderGraphROptions prepareEncoderGraphOptions(string title, EncoderStruct es, bool 
neuromuscularProfileDo) 
        {
-               //if RDotNet is ok, graph.R is already loaded
-               
-               rengine.Evaluate("meanPower <- mean(c(2,3,4,5,6,7,8))");
-               double meanPower = rengine.GetSymbol("meanPower").AsNumeric().First();
-               Log.WriteLine(meanPower.ToString());
-               rengine.Evaluate("print(findPosInPaf(\"Power\", \"max\"))");
-       }
-       
-       public static bool RunEncoderGraph(string title, EncoderStruct es, bool neuromuscularProfileDo) 
-       {
-               CancelRScript = false;
-
-               ProcessStartInfo pinfo;
-               Process p;
-               //If output file is not given, R will try to write in the running folder
-               //in which we may haven't got permissions
-               
-               string pBin="";
-               pinfo = new ProcessStartInfo();
-
-               string operatingSystem = "Linux";
-               
                string scriptUtilR = GetEncoderScriptUtilR();
 
                string scriptNeuromuscularProfile = "none"; //cannot be blank
@@ -287,14 +264,10 @@ public class UtilEncoder
                        scriptNeuromuscularProfile = GetEncoderScriptNeuromuscularProfile();
 
                string scriptGraphR = GetEncoderScriptGraph();
-                       
-               pBin="Rscript";
-               //pBin="R";
+               
+               string operatingSystem = "Linux";
+               
                if (UtilAll.IsWindows()) {
-                       //on Windows we need the \"str\" to call without problems in path with spaces
-                       pBin = "\"" + System.IO.Path.Combine(Util.GetPrefixDir(), "bin" + 
Path.DirectorySeparatorChar + "Rscript.exe") + "\"";
-                       Log.WriteLine("pBin:" + pBin);
-
                        //convert accents to Unicode in order to be plotted correctly on R windows
                        title = Util.ConvertToUnicode(title);
 
@@ -322,16 +295,72 @@ public class UtilEncoder
                        encoderTranslatedWordsOK[count++] = temp;
                }
 
-               //--- way A. passing options to a file
-               string scriptOptions = es.InputData + "\n" + 
-               es.OutputGraph + "\n" + es.OutputData1 + "\n" + 
-               es.OutputData2 + "\n" + es.SpecialData + "\n" + 
-               es.Ep.ToString2("\n") + "\n" + title + "\n" + operatingSystem + "\n" +
-               scriptUtilR + "\n" + scriptNeuromuscularProfile + "\n" +
-               Util.StringArrayToString(Constants.EncoderEnglishWords,";") + "\n" +
-               Util.StringArrayToString(encoderTranslatedWordsOK,";") + "\n" + 
-               scriptGraphR + "\n";
+               return new EncoderGraphROptions( 
+                               es.InputData, es.OutputGraph, es.OutputData1, 
+                               es.OutputData2, es.SpecialData, 
+                               es.Ep,
+                               title, operatingSystem,
+                               scriptUtilR, scriptNeuromuscularProfile,
+                               Util.StringArrayToString(Constants.EncoderEnglishWords,";"),
+                               Util.StringArrayToString(encoderTranslatedWordsOK,";"), 
+                               scriptGraphR);
+       }
 
+       /*
+        * this method uses RDotNet
+        */     
+       //public static bool RunEncoderGraphRDotNet(REngine rengine, string title, EncoderStruct es, bool 
neuromuscularProfileDo) 
+       public static void RunEncoderGraphRDotNet(REngine rengine) 
+       {
+               //if RDotNet is ok, graph.R is already loaded
+               
+               /*
+               rengine.Evaluate("meanPower <- mean(c(2,3,4,5,6,7,8))");
+               double meanPower = rengine.GetSymbol("meanPower").AsNumeric().First();
+               Log.WriteLine(meanPower.ToString());
+               rengine.Evaluate("print(findPosInPaf(\"Power\", \"max\"))");
+               */
+
+               //EncoderGraphROptions roptions = prepareEncoderGraphOptions(title, es, 
neuromuscularProfileDo);
+
+               //--------------------------------------------
+               //              Attention
+               //this code should be the same as call_graph.R
+               //--------------------------------------------
+
+               //TODO: pass roptions to RDotNet objects and then call graph.R
+               rengine.SetSymbol("OutputData2", roptions.outputData2);
+               rengine.SetSymbol("SpecialData", roptions.specialData);
+               rengine.SetSymbol("OperatingSystem", roptions.operatingSystem);
+
+
+       }
+
+       /*
+        * this method don't use RDotNet, then has to call call_graph.R, who will call graph.R
+        * and has to write a Roptions.txt file
+        */
+       public static bool RunEncoderGraph(string title, EncoderStruct es, bool neuromuscularProfileDo) 
+       {
+               CancelRScript = false;
+
+               ProcessStartInfo pinfo;
+               Process p;
+               //If output file is not given, R will try to write in the running folder
+               //in which we may haven't got permissions
+               
+               string pBin="";
+               pinfo = new ProcessStartInfo();
+
+               pBin="Rscript";
+               if (UtilAll.IsWindows()) {
+                       //on Windows we need the \"str\" to call without problems in path with spaces
+                       pBin = "\"" + System.IO.Path.Combine(Util.GetPrefixDir(), "bin" + 
Path.DirectorySeparatorChar + "Rscript.exe") + "\"";
+                       Log.WriteLine("pBin:" + pBin);
+               }
+               
+
+               string scriptOptions = prepareEncoderGraphOptions(title, es, 
neuromuscularProfileDo).ToString();
 
                string optionsFile = Path.GetTempPath() + "Roptions.txt";
                TextWriter writer = File.CreateText(optionsFile);
@@ -349,29 +378,9 @@ public class UtilEncoder
                pinfo.Arguments = "\"" + getEncoderScriptCallGraph() + "\" " + optionsFile;
        
                Log.WriteLine("Arguments:" + pinfo.Arguments);
-               
-               /*
-               pinfo.Arguments = "CMD BATCH --no-save '--args optionsFile=\"" + optionsFile + "\"' \"" + 
-                       getEncoderScriptCallGraph() + "\" \"" + 
-                       Path.GetTempPath() + "error.txt\"";
-                       */
-               
-               //--- way B. put options as arguments
-               /*
-               string argumentOptions = es.InputData + " " + 
-                       es.OutputGraph + " " + es.OutputData1 + " " + es.OutputData2 + " " + 
-                       es.Ep.ToString2(" ") + " " + title;
-               
-               pinfo.Arguments = getEncoderScriptCallGraph() + " " + argumentOptions;
-               */
-
-               Log.WriteLine("------------- 1 ---");
-               Log.WriteLine(optionsFile.ToString());
-               Log.WriteLine("------------- 2 ---");
-               Log.WriteLine(scriptOptions.ToString());
-               Log.WriteLine("------------- 3 ---");
-               Log.WriteLine(pinfo.Arguments.ToString());
-               Log.WriteLine("------------- 4 ---");
+               Log.WriteLine("--- 1 --- " + optionsFile.ToString() + " ---");
+               Log.WriteLine("--- 2 --- " + scriptOptions + " ---");
+               Log.WriteLine("--- 3 --- " + pinfo.Arguments.ToString() + " ---");
                
                string outputFileCheck = "";
                string outputFileCheck2 = "";


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]