public void TestSelectAndFireReaction() { const string configString = @"{""solver"":""DWSSA"", ""prng_seed"":123, ""prng_index"":1, ""RNG"":{""type"":""PSEUDODES""}, ""dwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":100000, ""reExpressionName"":""reExpression"", ""reValName"":""reVal"", ""gamma"":[2.0, 0.5]}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1; const int samples = 1; var solver = new dwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var startRealization = GetHiddenMethod("StartRealization", solver); startRealization.Invoke(solver, null); var method = solver.GetType().GetMethod("SelectAndFireReaction", BindingFlags.NonPublic | BindingFlags.Instance, Type.DefaultBinder, new[] { typeof(double) }, null); var inputArray1 = new object[] { 1.5 }; method.Invoke(solver, inputArray1); var reactions = GetHiddenField <ReactionSet>("_reactions", solver); Assert.AreEqual(reactions.Reactions[0].Reactants[0].Value, 99); }
public void TestSetRareEventType() { const string configString = @"{""solver"":""DWSSA"",""dwSSA"":{""gamma"": [1, 1]}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const float duration = 10.0f; const int repeats = 100000; const int samples = 1; var solver = new dwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var method = FindMethod("SetRareEventType", typeof(dwSSA)); method.Invoke(solver, null); var reExpression = GetHiddenField <Expression>("_reExpression", solver); var reEventValue = GetHiddenField <float>("_rareEventValue", solver); Assert.AreEqual(0, reExpression.Value); Assert.AreEqual(30.0f, reEventValue); Assert.AreEqual(1, GetHiddenField <int>("_rareEventType", solver)); }
public void CheckParametersTest() { var configString = @"{""solver"":""Tau"",""tau-leaping"":{""epsilon"": -1}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); var modelInfo = EmodlLoader.LoadEMODLFile("resources//testmodelTau.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; try { var solver = new TauLeaping(modelInfo, duration, repeats, samples); Assert.Fail(); } catch (ApplicationException ex) { Assert.That(ex.GetBaseException().ToString(), Is.StringContaining("Epsilon was set to less than or equal to zero.")); } configString = @"{""solver"":""Tau"",""tau-leaping"":{""Nc"": -1}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); try { var solver = new TauLeaping(modelInfo, duration, repeats, samples); Assert.Fail(); } catch (ApplicationException ex) { Assert.That(ex.GetBaseException().ToString(), Is.StringContaining("Nc was et to less than zero or equal to zero.")); } configString = @"{""solver"":""Tau"",""tau-leaping"":{""Multiple"": -1}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); try { var solver = new TauLeaping(modelInfo, duration, repeats, samples); Assert.Fail(); } catch (ApplicationException ex) { Assert.That(ex.GetBaseException().ToString(), Is.StringContaining("Multiple was set to less than or equal to zero.")); } configString = @"{""solver"":""Tau"",""tau-leaping"":{""SSARuns"": 0}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); try { var solver = new TauLeaping(modelInfo, duration, repeats, samples); Assert.Fail(); } catch (ApplicationException ex) { Assert.That(ex.GetBaseException().ToString(), Is.StringContaining("SSAruns was set to less than one.")); } }
public void TestStepOnceWithWeight() { const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""},""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 100000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var startRealization = GetHiddenMethod("StartRealization", solver); startRealization.Invoke(solver, null); var stepOnce = solver.GetType().GetMethod("StepOnce", BindingFlags.NonPublic | BindingFlags.Instance, Type.DefaultBinder, new[] { typeof(double).MakeByRefType() }, null); var inputArray1 = new object[] { 1.5 }; stepOnce.Invoke(solver, inputArray1); var currentTime = GetHiddenField <double>("_currentTime", solver); Assert.AreEqual(0.0075434142087234968, currentTime); }
public void TestInitialize() { const string configString = @"{""solver"":""SDWSSA"",""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1000000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); Assert.AreEqual(30.0, GetHiddenField <double>("_rareEventValue", solver)); Assert.AreEqual(0.0, GetHiddenField <Expression>("_reExpression", solver).Value); Assert.AreEqual(1, GetHiddenField <int>("_rareEventType", solver)); var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver); var reaction1 = biasingParameters.Locales[0].Reactions[0]; var reaction2 = biasingParameters.Locales[0].Reactions[1]; var gammas = GetHiddenField <List <double[]> >("_gamma", solver); var pcs = GetHiddenField <List <double[]> >("_propensityCutoff", solver); Assert.AreEqual(reaction1.RareEvents[1].Gammas, gammas[0]); Assert.AreEqual(reaction2.RareEvents[1].Gammas, gammas[1]); Assert.AreEqual(reaction1.RareEvents[1].Thresholds, pcs[0]); Assert.AreEqual(reaction2.RareEvents[1].Thresholds, pcs[1]); }
public void TestUpdateBinEdges() { const string configString = @"{""solver"":""SDWSSA""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1000000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); var startPC = new[] { 0.012, 0.432 }; var endPC = new[] { 0.899, 0.2134 }; const double a0 = 2.0; const int mu = 0; var inputObjectArray = new object[4]; inputObjectArray[0] = startPC; inputObjectArray[1] = endPC; inputObjectArray[2] = a0; inputObjectArray[3] = mu; GetHiddenMethod("UpdateBinEdges", solver).Invoke(solver, inputObjectArray); Assert.AreEqual(startPC[mu], 0.0); }
public void TestRunCrossEntropy() { const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const float duration = 10.0f; const int repeats = 100000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var startRealization = GetHiddenMethod("StartRealization", solver); startRealization.Invoke(solver, null); GetHiddenMethod("RunCrossEntropy", solver).Invoke(solver, null); var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver); Assert.AreEqual(biasingParameters.Locales[0].Reactions[0].RareEvents[0].Gammas, new[] { 2.0631374260651874, 1.6275260813957282, 1.2852465989965649, 1.1551778002545692, 1.0896852429443773, 1.0597861285148038, 1.0521305608249278, 1.0491667590772435, 1.0058609338670563, 1.0114445292874816, 1.0208331777734598, 1.01513053565442, 1.0298844136066307 }); }
public void TestLocaleAndReactionIndex() { const string configString = @"{""solver"":""SDWSSA"", ""sdwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1000000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); var reactionSet = GetHiddenField <StateDependentReactionSet>("_reactions", solver); var reaction1 = reactionSet.Reactions[0]; var inputObject = new object[2]; inputObject[0] = reaction1; inputObject[1] = 0; Assert.AreEqual(0, GetHiddenMethod("ReactionIndex", solver).Invoke(solver, inputObject)); var inputObject2 = new object[1]; inputObject2[0] = reaction1; Assert.AreEqual(0, GetHiddenMethod("LocaleIndex", solver).Invoke(solver, inputObject2)); }
public void TestSolveOnce() { const string configString = @"{""solver"":""DWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""},""dwSSA"":{""reExpressionName"":""reExpression"", ""reValName"":""reVal"", ""gamma"":[1, 1]}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1000000; const int samples = 1; var solver = new dwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var method = solver.GetType().GetMethod("SolveOnce", BindingFlags.NonPublic | BindingFlags.Instance, Type.DefaultBinder, new Type[] { }, null); method.Invoke(solver, null); var trajectoryCounter = GetHiddenField <int>("_trajectoryCounter", solver); var runningMean = GetHiddenField <double>("_runningMean", solver); var currentTime = GetHiddenField <double>("_currentTime", solver); Assert.AreEqual(1, trajectoryCounter); Assert.AreEqual(0.0, runningMean); Assert.GreaterOrEqual(currentTime, duration); }
public void TestSetRareEventType() { const string configString = @"{""solver"":""SDWSSA"",""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 100000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var method = FindMethod("SetRareEventType", typeof(sdwSSA)); method.Invoke(solver, null); var reExpression = GetHiddenField <Expression>("_reExpression", solver); var reEventValue = GetHiddenField <double>("_rareEventValue", solver); Assert.AreEqual(0, reExpression.Value); Assert.AreEqual(30.0, reEventValue); Assert.AreEqual(1, GetHiddenField <int>("_rareEventType", solver)); }
public void TestRunCrossEntropy() { const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 100000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var startRealization = GetHiddenMethod("StartRealization", solver); startRealization.Invoke(solver, null); GetHiddenMethod("RunCrossEntropy", solver).Invoke(solver, null); var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver); Console.Error.WriteLine("** TestRunCrossEntropy gammas **"); foreach (double value in biasingParameters.Locales[0].Reactions[0].RareEvents[0].Gammas) { Console.Error.WriteLine(value); } Assert.AreEqual(new[] { 2.0273575170009774, 1.6011280886463515, 1.2909305036960836, 1.1580792074159503, 1.1014233907817004, 1.0495114005076731, 1.0308762479433711, 1.01949884022247545, 1.0123811789981323, 1.013972793156378, 1.0147858262235918, 0.97835339270352839, 1.025712153478078 }, biasingParameters.Locales[0].Reactions[0].RareEvents[0].Gammas); }
public static ModelInfo LoadModel(String modelFileName) { ModelInfo model; var modelFileInfo = new FileInfo(modelFileName); switch (modelFileInfo.Extension.ToUpper().Substring(1)) { case "CMDL": throw new NotSupportedException("CMDL support not present."); case "EMODL": model = EmodlLoader.LoadEMODLFile(modelFileName); break; case "SBML": case "XML": throw new NotSupportedException("SBML [XML] support not yet present."); case "BNGL": throw new NotSupportedException("BNGL support not yet present."); default: Console.Error.WriteLine("Unknown model description language for '{0}'", modelFileName); throw new ArgumentException($"Unknown model description language for '{modelFileName}'", nameof(modelFileName)); } return(model); }
private static TauLeaping DefaultSetupForCalculateProposedTauTests(out Model model, out MethodInfo calculateProposedTauMethod, out MethodInfo resetModelStateMethod) { ////// /Setup the test ///////// const string configString = @"{""solver"":""Tau"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources//testmodelTau.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; ReflectionUtility.RunResetRngFactory(); var solver = new TauLeaping(modelInfo, duration, repeats, samples); //Find Hidden Method to in order to initialize the population of each of the species resetModelStateMethod = ReflectionUtility.GetHiddenMethod("ResetModelState", solver); resetModelStateMethod.Invoke(solver, null); //Find the model object model = ReflectionUtility.GetHiddenField <Model>("model", solver); //Find the method calculateProposedTauMethod = ReflectionUtility.GetHiddenMethod("CalculateProposedTau", solver); return(solver); }
private static MidPoint InstantiateSolver() { const string configString = @"{""solver"":""MID""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources//testmodel.emodl"); var solver = new MidPoint(modelInfo, 6.28318531f, 42, 100); return(solver); }
private static sdwSSA InstantiateSolver() { const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); var solver = new sdwSSA(modelInfo, 10.0, 1000000, 1); return(solver); }
public void TestToString() { const string configString = @"{""solver"":""Tau""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\testmodel.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new TauLeaping(modelInfo, duration, repeats, samples); Assert.AreEqual("Tau-Leaping", solver.ToString()); }
public void TestToString() { const string configString = @"{""solver"":""MID""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\testmodel.emodl"); const float duration = 6.28318531f; const int repeats = 42; const int samples = 100; var solver = new MidPoint(modelInfo, duration, repeats, samples); Assert.AreEqual("Mid-Point", solver.ToString()); }
public void GillespieTauTest() { ////// /Setup the test ///////// const string configString = @"{""solver"":""Tau"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources//testmodelTau.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new TauLeaping(modelInfo, duration, repeats, samples); //Find the method MethodInfo gillespieTauMethod = ReflectionUtility.GetHiddenMethod("GillespieTau", solver); //No need to test a0 = 0, since the method is only called when a0 != 0. // a0 != 0 ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("rng", solver, RNGFactory.GetRNG()); var inputArray = new object[1]; inputArray[0] = 1; var tauOut1 = gillespieTauMethod.Invoke(solver, inputArray); Assert.That(tauOut1, Is.EqualTo(0.21309720500123394)); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("rng", solver, RNGFactory.GetRNG()); inputArray[0] = 100; var tauOut2 = gillespieTauMethod.Invoke(solver, inputArray); Assert.That(tauOut2, Is.EqualTo(0.0021309720500123394)); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("rng", solver, RNGFactory.GetRNG()); inputArray[0] = 0.001; var tauOut3 = gillespieTauMethod.Invoke(solver, inputArray); Assert.That(tauOut3, Is.EqualTo(213.09720500123393)); }
public void TestCatchNaNPropensityTauLeaping() { const string configString = @"{""solver"":""TauLeaping""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\nanpropensity.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new TauLeaping(modelInfo, duration, repeats, samples); solver.Solve(); Assert.Fail("Execution should fail on reaction propensity evaluates to NaN."); }
public void TestCatchInfinitePropensityNextReaction() { const string configString = @"{""solver"":""NextReaction""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\infinitepropensity.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new GibsonBruck(modelInfo, duration, repeats, samples); solver.Solve(); Assert.Fail("Execution should fail on reaction propensity evaluates to infinity."); }
public void TestCatchNegativePropensityHybridSsa() { const string configString = @"{""solver"":""Hybrid""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\negativepropensity.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new HybridSSA(modelInfo, duration, repeats, samples); solver.Solve(); Assert.Fail("Execution should fail on negative reaction propensity."); }
public void TestsdwSSAConstructorWithBiasingParameters() { const string configString = @"{""solver"":""SDWSSA"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}, ""sdwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""biasingParametersFileName"":""resources\\rever_isom_sdwSSA_CEinfo.json""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1000000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); Assert.AreEqual(1000000, GetHiddenField <int>("_crossEntropyRuns", solver)); Assert.AreEqual(0.005, GetHiddenField <double>("_crossEntropyThreshold", solver)); Assert.AreEqual("resources\\rever_isom_sdwSSA_CEinfo.json", GetHiddenField <string>("_biasingParametersFileName", solver)); Assert.AreEqual(false, GetHiddenField <Boolean>("_biasingParametersFlag", solver)); var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver); Assert.AreEqual("global", biasingParameters.Locales[0].Name); Assert.AreEqual(2, biasingParameters.Locales[0].ReactionCount); Assert.AreEqual("reExpression", biasingParameters.RareEvent.ExpressionName); Assert.AreEqual("global", biasingParameters.RareEvent.ExpressionLocale); Assert.AreEqual(2, biasingParameters.RareEvent.IntermediateRareEventCount); Assert.That(new float[] { 23, 30 }, Is.EquivalentTo(biasingParameters.RareEvent.Thresholds)); var reaction1 = biasingParameters.Locales[0].Reactions[0]; Assert.AreEqual("interconvert1", reaction1.Name); Assert.AreEqual(13, reaction1.RareEvents[0].BinCount); Assert.AreEqual(new[] { 2.06313742606519, 1.62752608139573, 1.28524659899656, 1.1551778002545701, 1.08968524294438, 1.05978612851480, 1.05213056082493, 1.04916675907724, 1.00586093386706, 1.01144452928748, 1.02083317777346, 1.01513053565442, 1.02988441360663 }, reaction1.RareEvents[0].Gammas); Assert.AreEqual(new[] { 0.330135030236500, 0.381663104833693, 0.433191179430885, 0.484719254028077, 0.536247328625270, 0.587775403222462, 0.639303477819654, 0.690831552416846, 0.742359627014039, 0.845415776208423, 0.896943850805615, 0.948471925402808 }, reaction1.RareEvents[0].Thresholds); Assert.AreEqual(13, reaction1.RareEvents[1].BinCount); Assert.AreEqual(new[] { 2.476968001615, 1.64117464971143, 1.30252163933866, 1.16127755928718, 1.10320326699327, 1.06106835822293, 1.04512721554582, 1.03240567633747, 1.01985869635349, 1.01823044314009, 1.02103023510684, 1.01935203218744, 1.01472718645925 }, reaction1.RareEvents[1].Gammas); Assert.AreEqual(new[] { 0.3301350302365, 0.381663104833693, 0.433191179430885, 0.484719254028077, 0.53624732862527, 0.587775403222462, 0.639303477819654, 0.690831552416846, 0.742359627014039, 0.845415776208423, 0.896943850805615, 0.948471925402808 }, reaction1.RareEvents[1].Thresholds); var reaction2 = biasingParameters.Locales[0].Reactions[1]; Assert.AreEqual("interconvert2", reaction2.Name); Assert.AreEqual(14, reaction2.RareEvents[0].BinCount); Assert.AreEqual(new[] { 0.98850417047106398, 0.917309756657961, 1.03395184011107, 0.975731835263174, 1.00611856107535, 0.984970326735658, 0.94726738124926602, 0.96614763699818795, 0.93530750400835505, 0.910799215582815, 0.86803893648544395, 0.77448007324552304, 0.613574832946266, 0.499713830449480 }, reaction2.RareEvents[0].Gammas); Assert.AreEqual(new[] { 0.123991842069282, 0.170343933275611, 0.216696024481939, 0.263048115688268, 0.309400206894597, 0.355752298100925, 0.402104389307254, 0.448456480513583, 0.494808571719912, 0.541160662926240, 0.587512754132569, 0.633864845338898, 0.680216936545227 }, reaction2.RareEvents[0].Thresholds); Assert.AreEqual(14, reaction2.RareEvents[1].BinCount); Assert.AreEqual(new[] { 0.98423158970711, 1.01498329340952, 0.990253088665499, 0.975106365160516, 0.986861478077715, 0.978625997732093, 0.962392697806862, 0.949116411528197, 0.936334221304811, 0.909940261969898, 0.85882305727793, 0.76550824189768, 0.611330117387254, 0.413838468692494 }, reaction2.RareEvents[1].Gammas); Assert.AreEqual(new[] { 0.123991842069282, 0.170343933275611, 0.216696024481939, 0.263048115688268, 0.309400206894597, 0.355752298100925, 0.402104389307254, 0.448456480513583, 0.494808571719912, 0.54116066292624, 0.587512754132569, 0.633864845338898, 0.680216936545227 }, reaction2.RareEvents[1].Thresholds); }
public void ComputeLMoreThanOneReactantTest() { // Need to access the RHS of the or boolean (tempmin > tempminproposed)) // In order to do that I need more than one species in the reactants list ////// /Setup the test ///////// const string configString = @"{""solver"":""TAU""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); var modelInfo = EmodlLoader.LoadEMODLFile("resources//testmodelTau3.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new TauLeaping(modelInfo, duration, repeats, samples); //Find Hidden Method to in order to initialize the population of each of the species var resetModelStateMethod = ReflectionUtility.GetHiddenMethod("ResetModelState", solver); resetModelStateMethod.Invoke(solver, null); //Find the model object var model = ReflectionUtility.GetHiddenField <Model>("model", solver); //Find the method var computeLMethod = ReflectionUtility.GetHiddenMethod("ComputeL", solver); var criticalReactions = new List <Reaction>(); var nonCriticalReactions = new List <Reaction>(); //ComputeL(out List<Reaction> criticalReactions, out List<Reaction> nonCriticalReactions, int nc) // All noncritical var inputArray = new object[3]; inputArray[0] = criticalReactions; inputArray[1] = nonCriticalReactions; inputArray[2] = 2; computeLMethod.Invoke(solver, inputArray); Assert.AreEqual(criticalReactions, inputArray[0]); Assert.AreEqual(model.Reactions, inputArray[1]); }
public void SolverFactoryTest() { var model = EmodlLoader.LoadEMODLModel(_sirModel); ISolver solver = SolverFactory.CreateSolver("SSA", model, 1, 2.0, 3); Assert.IsTrue(solver is Gillespie); solver = SolverFactory.CreateSolver("FIRST", model, 1, 2.0, 3); Assert.IsTrue(solver is GillespieFirstReaction); solver = SolverFactory.CreateSolver("NEXT", model, 1, 2.0, 3); Assert.IsTrue(solver is GibsonBruck); solver = SolverFactory.CreateSolver("HYBRID", model, 1, 2.0, 3); Assert.IsTrue(solver is HybridSSA); solver = SolverFactory.CreateSolver("TAU", model, 1, 2.0, 3); Assert.IsTrue(solver is TauLeaping); solver = SolverFactory.CreateSolver("MID", model, 1, 2.0, 3); Assert.IsTrue(solver is MidPoint); solver = SolverFactory.CreateSolver("R", model, 1, 2.0, 3); Assert.IsTrue(solver is RLeaping); solver = SolverFactory.CreateSolver("RFAST", model, 1, 2.0, 3); Assert.IsTrue(solver is RLeapingFast); solver = SolverFactory.CreateSolver("BLEAP", model, 1, 2.0, 3); Assert.IsTrue(solver is BLeaping); solver = SolverFactory.CreateSolver("TSSA", model, 1, 2.0, 3); Assert.IsTrue(solver is TransportSSA); solver = SolverFactory.CreateSolver("DFSP", model, 1, 2.0, 3); Assert.IsTrue(solver is DFSP); solver = SolverFactory.CreateSolver("OTSSA", model, 1, 2.0, 3); Assert.IsTrue(solver is OptimalTransportSSA); /* Fractional diffusion solver doesn't handle single node models gracefully. * solver = SolverFactory.CreateSolver("LEVY", model, 1, 2.0, 3); * Assert.IsTrue(solver is FractionalDiffusion); */ /* Exit times solver doesn't handle missing target condition gracefully. * solver = SolverFactory.CreateSolver("EXITTIMES", model, 1, 2.0, 3); * Assert.IsTrue(solver is ExitTimes); */ /* dwSSA solver automatically starts solving * Configuration.CurrentConfiguration = Configuration.ConfigurationFromString("{\"dwSSA\":{\"re_name\":\"I\",\"re_val\":500}}"); * solver = SolverFactory.CreateSolver("DWSSA", model, 1, 2.0, 3); * Assert.IsTrue(solver is dwSSA); */ }
public void TestMidPointConstructorWithDefaults() { const string configString = @"{""solver"":""MID""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\testmodel.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new MidPoint(modelInfo, duration, repeats, samples); Assert.AreEqual(0.01, ReflectionUtility.GetHiddenField <double>("epsilon", solver)); Assert.AreEqual(2, ReflectionUtility.GetHiddenField <int>("nc", solver)); Assert.AreEqual(10, ReflectionUtility.GetHiddenField <int>("multiple", solver)); Assert.AreEqual(100, ReflectionUtility.GetHiddenField <int>("SSAruns", solver)); string regimeName = ReflectionUtility.GetSolverRegimeName(solver); Assert.AreEqual("Leaping", regimeName); }
public void TestMidPointConstructor() { const string configString = @"{""solver"":""MID"",""midpoint"":{""epsilon"":0.02,""Nc"":3,""Multiple"":8,""SSARuns"":50}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\testmodel.emodl"); const float duration = 6.28318531f; const int repeats = 42; const int samples = 100; var solver = new MidPoint(modelInfo, duration, repeats, samples); Assert.AreEqual(0.02f, ReflectionUtility.GetHiddenField <float>("epsilon", solver)); Assert.AreEqual(3, ReflectionUtility.GetHiddenField <int>("nc", solver)); Assert.AreEqual(8, ReflectionUtility.GetHiddenField <int>("multiple", solver)); Assert.AreEqual(50, ReflectionUtility.GetHiddenField <int>("SSAruns", solver)); string regimeName = ReflectionUtility.GetSolverRegimeName(solver); Assert.AreEqual("Leaping", regimeName); }
public void TestUpdateReactionInfo() { const string configString = @"{""solver"":""SDWSSA"", ""sdwSSA"":{""crossEntropyThreshold"":0.005, ""crossEntropyRuns"":1000000, ""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1000000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); var biasingParameters = GetHiddenField <BiasingParameters>("_biasingParameters", solver); var tempREInfo = biasingParameters.Locales[0].Reactions[0].RareEvents[0]; var inputArray = new object[] { tempREInfo, 0 }; GetHiddenMethod("UpdateReactionInfo", solver).Invoke(solver, inputArray); Assert.AreEqual(tempREInfo.Thresholds, biasingParameters.Locales[0].Reactions[0].RareEvents[2].Thresholds); }
public void TestSelectAndFireReaction() { const string configString = @"{""solver"":""SDWSSA"",""sdwSSA"":{""biasingParametersFileName"":""resources\\rever_isom_CEinfo.json""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 100000; const int samples = 1; var solver = new sdwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var method = FindMethod("SelectAndFireReaction", typeof(sdwSSA)); var inputArray = new object[] { 0.1 }; var mu = (int)method.Invoke(solver, inputArray); Assert.AreEqual(0, mu); }
public void ComputeNonlinearModelJacobianTest() { //0. Setup const string configString = @"{""solver"":""TAU""}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources//testmodelTau2.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new TauLeaping(modelInfo, duration, repeats, samples); //Find Hidden Method to in order to initialize the population of each of the species MethodInfo resetModelStateMethod = ReflectionUtility.GetHiddenMethod("ResetModelState", solver); resetModelStateMethod.Invoke(solver, null); //Find the model object var model = ReflectionUtility.GetHiddenField <Model>("model", solver); //Find methods MethodInfo computeJacobianMethod = ReflectionUtility.GetHiddenMethod("ComputeJacobian", solver); //Set currentRates double[] currentRates = new double[2]; currentRates[0] = model.Reactions[0].Rate; currentRates[1] = model.Reactions[1].Rate; ReflectionUtility.SetHiddenField("_currentRates", solver, currentRates); //Test Function var jacobian = computeJacobianMethod.Invoke(solver, null); double[,] check = new double[2, 2]; check[0, 0] = 4.0; check[0, 1] = 10.0; check[1, 0] = 2.0; check[1, 1] = 5.0; Assert.AreEqual(check, jacobian); }
private static dwSSA SetupCrossEntropy() { const string configString = @"{""solver"":""DWSSA"", ""prng_seed"":123, ""prng_index"":1, ""RNG"":{""type"":""PSEUDODES""}, ""dwSSA"":{""gamma"":[1, 1]}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); RunResetRNGFactory(); var modelInfo = EmodlLoader.LoadEMODLFile("resources\\rever_isom.emodl"); const double duration = 10.0; const int repeats = 1; const int samples = 1; var solver = new dwSSA(modelInfo, duration, repeats, samples); solver.Initialize(); var startRealization = GetHiddenMethod("StartRealization", solver); startRealization.Invoke(solver, null); return(solver); }