Beispiel #1
0
        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);
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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."));
            }
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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]);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
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 });
        }
Beispiel #8
0
        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));
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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));
        }
Beispiel #11
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 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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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());
        }
Beispiel #18
0
        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));
        }
Beispiel #19
0
        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.");
        }
Beispiel #20
0
        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.");
        }
Beispiel #21
0
        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.");
        }
Beispiel #22
0
        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);
        }
Beispiel #23
0
        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]);
        }
Beispiel #24
0
        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);
 */
        }
Beispiel #25
0
        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);
        }
Beispiel #27
0
        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);
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
        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);
        }
Beispiel #30
0
        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);
        }