[chronojump] If RDotNet crashes, captures without realtime data
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] If RDotNet crashes, captures without realtime data
- Date: Sun, 9 Mar 2014 23:29:30 +0000 (UTC)
commit 125c4cf825762ff94703beb85f0cf97b5be2f9ae
Author: Xavier de Blas <xaviblas gmail com>
Date: Mon Mar 10 00:28:25 2014 +0100
If RDotNet crashes, captures without realtime data
src/constants.cs | 3 +-
src/gui/encoder.cs | 77 +++++++++++++++++++++++++++++++++------------------
2 files changed, 52 insertions(+), 28 deletions(-)
---
diff --git a/src/constants.cs b/src/constants.cs
index b6498c3..71c907f 100644
--- a/src/constants.cs
+++ b/src/constants.cs
@@ -704,5 +704,6 @@ public class Constants
public enum MassType {
BODY, EXTRA, DISPLACED
}
-
+
+ public enum Status { ERROR, UNSTARTED, OK}
}
diff --git a/src/gui/encoder.cs b/src/gui/encoder.cs
index 429a778..bb66174 100644
--- a/src/gui/encoder.cs
+++ b/src/gui/encoder.cs
@@ -234,6 +234,7 @@ public partial class ChronoJumpWindow
//TODO: put a save graph and a html report
+ Constants.Status RInitialized;
private void encoderInitializeStuff() {
encoder_pulsebar_capture.Fraction = 1;
@@ -258,10 +259,18 @@ public partial class ChronoJumpWindow
encoderCaptureOptionsWin.FakeButtonClose.Clicked += new
EventHandler(on_encoder_capture_options_closed);
captureCurvesBarsData = new ArrayList(0);
+
+ RInitialized = Constants.Status.UNSTARTED;
}
void on_button_andoni_crash_clicked (object o, EventArgs args) {
runEncoderCaptureCsharpInitializeR();
+
+ if(RInitialized == Constants.Status.OK)
+ new DialogMessage(Constants.MessageTypes.INFO, "RDotNet OK");
+ else
+ new DialogMessage(Constants.MessageTypes.WARNING, "RDotNet does not work");
+
}
void on_button_encoder_select_clicked (object o, EventArgs args) {
@@ -1759,16 +1768,13 @@ public partial class ChronoJumpWindow
return true;
}
- bool RInitialized = false;
REngine rengine;
- private bool runEncoderCaptureCsharpInitializeR() {
- if(RInitialized)
- return true;
-
+ private void runEncoderCaptureCsharpInitializeR()
+ {
Log.WriteLine("initializing rdotnet");
- //RDotNet.StartupParameter rsup = new RDotNet.StartupParameter();
+ //RDotNet.StartupParameter rsup = new RDotNet.StartupParameter();
//rsup.Interactive = false;
//rsup.Quiet = false;
@@ -1777,12 +1783,14 @@ public partial class ChronoJumpWindow
// From v1.5, REngine requires explicit initialization.
// You can set some parameters.
- //try {
+ try {
//rengine.Initialize(rsup);
rengine.Initialize();
- //} catch {
+ } catch {
//return false;
- //}
+ RInitialized = Constants.Status.ERROR;
+ return;
+ }
//Previous command, unfortunatelly localizes all GUI to english
//then call Catalog.Init again in order to see new windows localised
//Catalog.Init("chronojump",System.IO.Path.Combine(Util.GetPrefixDir(),"share/locale"));
@@ -1795,25 +1803,30 @@ public partial class ChronoJumpWindow
}
*/
- // .NET Framework array to R vector.
- NumericVector group1 = rengine.CreateNumericVector(new double[] { 30.02, 29.99, 30.11, 29.97,
30.01, 29.99 });
- rengine.SetSymbol("group1", group1);
- // Direct parsing from R script.
- NumericVector group2 = rengine.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98, 30.02,
29.98)").AsNumeric();
-
- // Test difference of mean and get the P-value.
- GenericVector testResult = rengine.Evaluate("t.test(group1, group2)").AsList();
- double p = testResult["p.value"].AsNumeric().First();
-
- Console.WriteLine("Group1: [{0}]", string.Join(", ", group1));
- Console.WriteLine("Group2: [{0}]", string.Join(", ", group2));
- Console.WriteLine("P-value = {0:0.000}", p);
-
- RInitialized = true;
+ try {
+ // .NET Framework array to R vector.
+ NumericVector group1 = rengine.CreateNumericVector(new double[] { 30.02, 29.99,
30.11, 29.97, 30.01, 29.99 });
+ rengine.SetSymbol("group1", group1);
+ // Direct parsing from R script.
+ NumericVector group2 = rengine.Evaluate("group2 <- c(29.89, 29.93, 29.72, 29.98,
30.02, 29.98)").AsNumeric();
+
+ // Test difference of mean and get the P-value.
+ GenericVector testResult = rengine.Evaluate("t.test(group1, group2)").AsList();
+ double p = testResult["p.value"].AsNumeric().First();
+
+ Console.WriteLine("Group1: [{0}]", string.Join(", ", group1));
+ Console.WriteLine("Group2: [{0}]", string.Join(", ", group2));
+ Console.WriteLine("P-value = {0:0.000}", p);
+ } catch {
+ RInitialized = Constants.Status.ERROR;
+ return;
+ }
Log.WriteLine("initialized rdotnet");
+
+ RInitialized = Constants.Status.OK;
- return true;
+ return;
}
@@ -3932,6 +3945,9 @@ Log.WriteLine(str);
private void updateEncoderCaptureGraphRCalc(bool plotCurvesBars)
{
+ if(RInitialized == Constants.Status.UNSTARTED || RInitialized == Constants.Status.ERROR)
+ return;
+
if(! eccaCreated)
return;
if(ecca.ecc.Count <= ecca.curvesDone)
@@ -4459,14 +4475,21 @@ Log.WriteLine(str);
if( runEncoderCaptureCsharpCheckPort(chronopicWin.GetEncoderPort()) ) {
if(action == encoderActions.CAPTURE) {
- bool ok = runEncoderCaptureCsharpInitializeR();
- if(! ok) {
+ if(RInitialized == Constants.Status.UNSTARTED)
+ runEncoderCaptureCsharpInitializeR();
+
+ /*
+ * if error means a problem with RDotNet, not necessarily a problem
with R
+ * we can contnue but without realtime data
+ *
+ if(RInitialized == Constants.Status.ERROR) {
new DialogMessage(Constants.MessageTypes.WARNING,
Catalog.GetString("Sorry. Error doing
graph.") +
"\n" + Catalog.GetString("Maybe R or EMD are
not installed.") +
"\n\nhttp://www.r-project.org/");
return;
}
+ */
}
prepareEncoderGraphs();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]