public void CalculateProposedTauTest7() { Model model; MethodInfo calculateProposedTauMethod; MethodInfo resetModelStateMethod; var solver = DefaultSetupForCalculateProposedTauTests(out model, out calculateProposedTauMethod, out resetModelStateMethod); object[] inputArray1 = new object[1]; ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); resetModelStateMethod.Invoke(solver, null); ReflectionUtility.SetHiddenField("_regime", solver, 3); model.Species[0].Count = 3; model.Species[1].Count = 3; inputArray1[0] = 10; ReflectionUtility.SetHiddenField("nc", solver, 10); var tauOut7 = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.023677467222359326, tauOut7); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_regime", solver, 3); inputArray1[0] = 0.001; var tauOut7B = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.001, tauOut7B); }
public void CalculateProposedTauTest5() { Model model; MethodInfo calculateProposedTauMethod; MethodInfo resetModelStateMethod; var solver = DefaultSetupForCalculateProposedTauTests(out model, out calculateProposedTauMethod, out resetModelStateMethod); object[] inputArray1 = new object[1]; ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); //resetModelStateMethod.Invoke(solver, null); ReflectionUtility.SetHiddenField("_regime", solver, 3); model.Species[0].Count = 200; model.Species[1].Count = 10; ReflectionUtility.SetHiddenField("epsilon", solver, 0.1); inputArray1[0] = 10; var tauOut5 = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.052564102564102565, tauOut5); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_regime", solver, 3); inputArray1[0] = 0.01; var tauOut5B = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.01, tauOut5B); }
public TransportSSA(ModelInfo modelInfo, float duration, int repeats, int samples) : base(modelInfo, duration, repeats, samples) { Configuration config = Configuration.CurrentConfiguration; // Transport events diffusionReactions = model.Reactions.Where(r => !r.IsLocal).ToList(); // Reaction events reactionReactions = model.Reactions.Where(r => r.IsLocal).ToList(); currentReactionRates = new float[reactionReactions.Count]; kernels = new float[model.Species.Count][]; // jagged array (i.e. array of arrays) speciesIndices = new int[model.Species.Count][]; // nearest neighbors of the current species lambda = new int[model.Species.Count]; // X(t+tau) = X(t) + lambda, diffusion changes diffusionRates = new float[diffusionReactions.Count]; _partiallyExecutedReactionsEvents = new List <int>(); // Jagged array initialization for (int iSpecies = 0; iSpecies < model.Species.Count; ++iSpecies) { int numberOfNieghbors = NumberOfNeighbors(iSpecies) + 1; // +1 for the current node + number of neighbors kernels[iSpecies] = new float[numberOfNieghbors]; speciesIndices[iSpecies] = new int[numberOfNieghbors]; } epsilon = config.GetParameterWithDefault("tssa.epsilon", 0.01f); greensFunctionIterations = config.GetParameterWithDefault("tssa.greensFunctionIterations", 100); verbose = config.GetParameterWithDefault("tssa.verbose", false); _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); // Get the transport rates FindDiffusionRates(ref diffusionRates); }
// ReSharper restore InconsistentNaming // The algorithm presented here (specifically in regards to the critical // versus noncritical reactions to avoid negative species) can be found in // 'Avoiding Negative Populations in Explicit Poisson Tau-Leaping' // Cao, Gillespie, Petzold. Journal of Chemical Physics. public TauLeaping(ModelInfo modelInfo, float duration, int repeats, int samples, ModelBuilder modelBuilder = null) : base(modelInfo, duration, repeats, samples, modelBuilder) { Configuration config = Configuration.CurrentConfiguration; _currentRates = new float[model.Reactions.Count]; _jacobianMatrix = new float[model.Reactions.Count, model.Species.Count]; _nonCriticalReactions = new List <Reaction>(); _criticalReactions = new List <Reaction>(); // We'll need at most reactions.Count values in one or the other array _criticalRates = new float[model.Reactions.Count]; _noncriticalRates = new float[model.Reactions.Count]; epsilon = config.GetParameterWithDefault("tau-leaping.epsilon", 0.001f); nc = config.GetParameterWithDefault("tau-leaping.Nc", 2); multiple = config.GetParameterWithDefault("tau-leaping.Multiple", 10); SSAruns = config.GetParameterWithDefault("tau-leaping.SSARuns", 100); CheckParameters(); _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); Console.WriteLine("epsilon = {0}", epsilon); Console.WriteLine("nc = {0}", nc); Console.WriteLine("multiple = {0}", multiple); Console.WriteLine("SSA runs = {0}", SSAruns); }
public void CalculateProposedTauTest1() { Model model; MethodInfo calculateProposedTauMethod; MethodInfo resetModelStateMethod; var solver = DefaultSetupForCalculateProposedTauTests(out model, out calculateProposedTauMethod, out resetModelStateMethod); ReflectionUtility.SetHiddenField("_regime", solver, 0); double tauIn = 5; object[] inputArray1 = new object[1]; inputArray1[0] = tauIn; var tauOut1 = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.017758100416769496, tauOut1); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); inputArray1[0] = 0.0001; var tauOut1B = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(inputArray1[0], tauOut1B); }
public ExitTimes(ModelInfo modelInfo, double duration, int repeats, int samples) : base(modelInfo, duration, repeats, samples, new ModelBuilder()) { currentRates = new double[model.Reactions.Count]; lambda = new List <double>(); lambdaLists = new List <List <double> >(); exitTimes = new List <double>(); numberOfGammaRNs = 0.0; _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); Configuration config = Configuration.CurrentConfiguration; _epsilon = Math.Min(config.GetParameterWithDefault("et.epsilon", 0.5), 1.0); _eventName = config.GetParameterWithDefault("et.eventName", "exitTimeEvent"); _verbose = config.GetParameterWithDefault("et.verbose", false); _testing = config.GetParameterWithDefault("et.testing", false); _convergenceTest = config.GetParameterWithDefault("et.convergence", false); _efficiencyCutoff = config.GetParameterWithDefault("et.efficiencyCutoff", 0.2); targetCondition = model.Predicates.First(s => s.Name == _eventName); sampleNumber = 1; eventAchieved = false; if (_verbose) { Console.WriteLine("\n predicate: {0} with initial evaluation: {1} \n", targetCondition.Name, targetCondition.Value); Console.WriteLine("\n epsilon = {0} \n", _epsilon); } }
public BLeaping(ModelInfo modelInfo, double duration, int repeats, int samples) : base(modelInfo, duration, repeats, samples) { _currentRates = new double[model.Reactions.Count]; _tau = Configuration.CurrentConfiguration.GetParameterWithDefault("b-leaping.Tau", 0.1); _step = 1; _deltaTau = 0.0; _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); }
public Normal(float mean, float variance) { if (variance <= 0.0f) { throw new ArgumentException("Variance must be greater than 0."); } _mean = mean; _variance = variance; _distributionSampler = RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG()); }
public RLeaping(ModelInfo modelInfo, float duration, int repeats, int samples) : base(modelInfo, duration, repeats, samples) { Configuration config = Configuration.CurrentConfiguration; reactions = new List <Reaction>(model.Reactions); currentRates = new float[reactions.Count]; jacobianMatrix = new float[reactions.Count, model.Species.Count]; _probabilityVector = new float[reactions.Count]; _executionsPerReaction = new int[reactions.Count]; _epsilon = config.GetParameterWithDefault("r-leaping.epsilon", 0.1f); _theta = config.GetParameterWithDefault("r-leaping.theta", 0.0f); _sortingInterval = config.GetParameterWithDefault("r-leaping.sorting interval", 365.0f); _verbose = config.GetParameterWithDefault("r-leaping.verbose", false); _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); }
public MidPoint(ModelInfo modelInfo, float duration, int repeats, int samples) : base(modelInfo, duration, repeats, samples, new MpModelBuilder()) { Configuration config = Configuration.CurrentConfiguration; _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); epsilon = config.GetParameterWithDefault("midpoint.epsilon", 0.01f); nc = config.GetParameterWithDefault("midpoint.Nc", 2); multiple = config.GetParameterWithDefault("midpoint.Multiple", 10); SSAruns = config.GetParameterWithDefault("midpoint.SSARuns", 100); CheckParameters(); Console.WriteLine("epsilon = {0}", epsilon); Console.WriteLine("nc = {0}", nc); Console.WriteLine("multiple = {0}", multiple); Console.WriteLine("SSA runs = {0}", SSAruns); }
public RLeapingFast(ModelInfo modelInfo, double duration, int repeats, int samples) : base(modelInfo, duration, repeats, samples) { Configuration config = Configuration.CurrentConfiguration; reactions = new List <Reaction>(model.Reactions); currentRates = new double[reactions.Count]; _highestOrderReaction = new int[model.Species.Count]; _muHat = new double[model.Species.Count]; _sigmaHat2 = new double[model.Species.Count]; _varHat = new double[model.Species.Count]; _probabilityVector = new double[reactions.Count]; _executionsPerReaction = new int[reactions.Count]; _epsilon = config.GetParameterWithDefault("r-leaping.epsilon", 0.1); _sortingInterval = config.GetParameterWithDefault("r-leaping.sorting interval", 365.0); _verbose = config.GetParameterWithDefault("r-leaping.verbose", false); _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); }
public void CalculateProposedTauTest4() { Model model; MethodInfo calculateProposedTauMethod; MethodInfo resetModelStateMethod; var solver = DefaultSetupForCalculateProposedTauTests(out model, out calculateProposedTauMethod, out resetModelStateMethod); ReflectionUtility.SetHiddenField("_regime", solver, 0); object[] inputArray1 = new object[1]; ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); //resetModelStateMethod.Invoke(solver, null); ReflectionUtility.SetHiddenField("_regime", solver, 3); model.Species[0].Count = 3; model.Species[1].Count = 2; inputArray1[0] = 10; ReflectionUtility.SetHiddenField("nc", solver, 3); var tauOut4 = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.026637150625154243, tauOut4); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_regime", solver, 3); inputArray1[0] = 0.001; var tauOut4B = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.001, tauOut4B); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_regime", solver, 3); inputArray1[0] = 6.29010763; var tauOut4C = calculateProposedTauMethod.Invoke(solver, inputArray1); Assert.AreEqual(0.13335417718069428, tauOut4C); }
public FractionalDiffusion(ModelInfo modelInfo, float duration, int repeats, int samples) : base(modelInfo, duration, repeats, samples, new ModelBuilder()) { Configuration config = Configuration.CurrentConfiguration; #region initializeFields _reactions = new List <Reaction>(model.Reactions); _alpha = config.GetParameterWithDefault("fd.alpha", 0.5f); _verbose = config.GetParameterWithDefault("fd.verbose", false); _Dalpha = config.GetParameterWithDefault("fd.Dalpha", 1.0f); _constant = config.GetParameterWithDefault("fd.constant", 0.25f); _h = config.GetParameterWithDefault("fd.h", 1.0f); _truncationDistance = config.GetParameterWithDefault("fd.truncation", (int)Math.Round(((double)(modelInfo.Locales.Count() - 1)) / 4.0)); _fourierNumber = 0.5; _n = modelInfo.Locales.Count() - 1; _currentRates = new float[_reactions.Count]; _field = new int[_n]; _numberOfNonDiscretizedSpecies = modelInfo.Species.Count() / _n; _tau = (float)TimeStep(_fourierNumber, _constant, _h, _alpha, _Dalpha); _dispersalChanges = new int[model.Species.Count]; _executionsPerReaction = new int[model.Reactions.Count]; _distributionSampler = RandLibSampler.CreateRandLibSampler(rng); #endregion if (_verbose == true) { Console.WriteLine("number of locales = {0}", modelInfo.Locales.Count() - 1); Console.WriteLine("number of species = {0}", _numberOfNonDiscretizedSpecies); Console.WriteLine("truncation = {0}", _truncationDistance); Console.WriteLine("alpha = {0}", _alpha); Console.WriteLine("D_alpha = {0}", _Dalpha); Console.WriteLine("Fouier number (1d) = {0}", _fourierNumber); Console.WriteLine("h = {0}", _h); Console.WriteLine("C = {0}", _constant); Console.WriteLine("fractional diffusion tau = {0}", _tau); } }
public void LargeFactorialTest() { long fact = RandLibSampler.Factorial(20); Assert.AreEqual(2432902008176640000, fact); }
public void SmallFactorialTest() { long fact = RandLibSampler.Factorial(10); Assert.AreEqual(2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10, fact); }
private DistributionSampler GetAesCounterSampler() { DistributionSampler sampler = RandLibSampler.CreateRandLibSampler(AesCounterVariateGenerator.CreateAesCounterVariateGenerator(new uint[] { 20130110, 19680201 })); return(sampler); }
public void FireNonCriticalReactionsTest() { const string configString = @"{""solver"":""Tau"",""prng_seed"":123, ""prng_index"":1,""RNG"":{""type"":""PSEUDODES""}}"; Configuration.CurrentConfiguration = Configuration.ConfigurationFromString(configString); ModelInfo modelInfo = EmodlLoader.LoadEMODLFile("resources\\testmodelMidPoint.emodl"); const double duration = 6.28318531; const int repeats = 42; const int samples = 100; var solver = new TauLeaping(modelInfo, duration, repeats, samples); //Inputs for the method // Tau Step double tau1 = 0.0; var tau2 = (1.0 / 200.0); //Need a list of reactions var currentRates = new double[1]; var nonCriticalReaction = new List <Reaction>(); //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); MethodInfo updateAndSumRatesMethod = ReflectionUtility.GetHiddenMethod("UpdateAndSumRates", solver); //Find the model object var model = ReflectionUtility.GetHiddenField <Model>("model", solver); currentRates[0] = model.Reactions[0].Rate; nonCriticalReaction.Add(model.Reactions[0]); object[] inputArray1 = new object[3]; inputArray1[0] = tau1; inputArray1[1] = nonCriticalReaction; inputArray1[2] = currentRates; object[] inputArray2 = new object[3]; inputArray2[0] = tau2; inputArray2[1] = nonCriticalReaction; inputArray2[2] = currentRates; //Find Hidden Method. MethodInfo fireNonCriticalReactionsMethod = ReflectionUtility.GetHiddenMethod("FireNonCriticalReactions", solver); // First Test if Tau = 0; fireNonCriticalReactionsMethod.Invoke(solver, inputArray1); Assert.AreEqual(400, model.Species[0].Value); Assert.AreEqual(200, model.Species[1].Value); Assert.AreEqual(900, model.Species[2].Value); //Second Test if Tau = = 0.05. Set the RNG to a known seed number, in order to exactly know what is generated ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); fireNonCriticalReactionsMethod.Invoke(solver, inputArray2); Assert.AreEqual(384.0, model.Species[0].Value); Assert.AreEqual(184.0, model.Species[1].Value); Assert.AreEqual(916.0, model.Species[2].Value); resetModelStateMethod.Invoke(solver, null); object[] inputArray3 = new object[2]; inputArray3[0] = model.Reactions; inputArray3[1] = currentRates; updateAndSumRatesMethod.Invoke(solver, inputArray3); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); fireNonCriticalReactionsMethod.Invoke(solver, inputArray2); Assert.AreEqual(384.0, model.Species[0].Value); Assert.AreEqual(184.0, model.Species[1].Value); Assert.AreEqual(916.0, model.Species[2].Value); }
public void ExecuteReactionsTest() { //0. Setup 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 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 the method MethodInfo executeReactionsMethod = ReflectionUtility.GetHiddenMethod("ExecuteReactions", solver); //1. ==Regime.SSA ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_regime", solver, 0); ReflectionUtility.GetHiddenField <Reaction>("_ssaReaction", solver); //a. _ssaReaction == null; executeReactionsMethod.Invoke(solver, null); var regime = ReflectionUtility.GetHiddenField <int>("_regime", solver); Assert.AreEqual(0, regime); //b. _ssaReaction != null; ReflectionUtility.SetHiddenField("_remainingSSAsteps", solver, 1); ReflectionUtility.SetHiddenField("_ssaReaction", solver, model.Reactions[0]); ReflectionUtility.RunResetRngFactory(); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); executeReactionsMethod.Invoke(solver, null); regime = ReflectionUtility.GetHiddenField <int>("_regime", solver); Assert.AreEqual(3, regime); Assert.AreEqual(6.0, model.Species[0].Count); Assert.AreEqual(1.0, model.Species[1].Count); //2. == Regime.NonCritical ReflectionUtility.SetHiddenField("_regime", solver, 1); ReflectionUtility.RunResetRngFactory(); resetModelStateMethod.Invoke(solver, null); model.Species[0].Count = 100; model.Species[1].Count = 50; var nonCriticalReactionsList = new List <Reaction>(); nonCriticalReactionsList.Add(model.Reactions[0]); nonCriticalReactionsList.Add(model.Reactions[1]); var nonCriticalRates = new double[2]; nonCriticalRates[0] = model.Reactions[0].Rate; nonCriticalRates[1] = model.Reactions[1].Rate; ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_leapTau", solver, 0.01); ReflectionUtility.SetHiddenField("_nonCriticalReactions", solver, nonCriticalReactionsList); ReflectionUtility.SetHiddenField("_noncriticalRates", solver, nonCriticalRates); executeReactionsMethod.Invoke(solver, null); regime = ReflectionUtility.GetHiddenField <int>("_regime", solver); Assert.AreEqual(3, regime); Assert.AreEqual(103, model.Species[0].Count); Assert.AreEqual(47, model.Species[1].Count); //3. == Regime.Critical ) no noncriticalreactions ReflectionUtility.SetHiddenField("_regime", solver, 2); ReflectionUtility.RunResetRngFactory(); resetModelStateMethod.Invoke(solver, null); model.Species[0].Count = 100; model.Species[1].Count = 50; var criticalReactionsList = new List <Reaction>(); criticalReactionsList.Add(model.Reactions[0]); criticalReactionsList.Add(model.Reactions[1]); var criticalRates = new double[2]; criticalRates[0] = model.Reactions[0].Rate; criticalRates[1] = model.Reactions[1].Rate; MethodInfo updateAndSumRatesMethod = ReflectionUtility.GetHiddenMethod("UpdateAndSumRates", solver); object[] inputArray1 = new object[2]; inputArray1[0] = criticalReactionsList; inputArray1[1] = criticalRates; var a0Critical = updateAndSumRatesMethod.Invoke(solver, inputArray1); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_a0Critical", solver, a0Critical); ReflectionUtility.SetHiddenField("_criticalReactions", solver, criticalReactionsList); ReflectionUtility.SetHiddenField("_criticalRates", solver, criticalRates); ReflectionUtility.SetHiddenField("_nonCriticalReactions", solver, null); ReflectionUtility.SetHiddenField("_noncriticalRates", solver, null); executeReactionsMethod.Invoke(solver, null); regime = ReflectionUtility.GetHiddenField <int>("_regime", solver); Assert.AreEqual(3, regime); Assert.AreEqual(101, model.Species[0].Count); Assert.AreEqual(49, model.Species[1].Count); //3. == Regime.Critical b) noncriticalreactions and critical reactions ReflectionUtility.SetHiddenField("_regime", solver, 2); ReflectionUtility.RunResetRngFactory(); resetModelStateMethod.Invoke(solver, null); model.Species[0].Count = 100; model.Species[1].Count = 50; criticalReactionsList = new List <Reaction>(); nonCriticalReactionsList = new List <Reaction>(); criticalReactionsList.Add(model.Reactions[0]); nonCriticalReactionsList.Add(model.Reactions[1]); criticalRates = new double[1]; nonCriticalRates = new double[1]; criticalRates[0] = model.Reactions[0].Rate; nonCriticalRates[0] = model.Reactions[1].Rate; inputArray1[0] = criticalReactionsList; inputArray1[1] = criticalRates; a0Critical = updateAndSumRatesMethod.Invoke(solver, inputArray1); ReflectionUtility.SetHiddenField("_distributionSampler", solver, RandLibSampler.CreateRandLibSampler(RNGFactory.GetRNG())); ReflectionUtility.SetHiddenField("_a0Critical", solver, a0Critical); ReflectionUtility.SetHiddenField("_leapTau", solver, 0.01); ReflectionUtility.SetHiddenField("_criticalReactions", solver, criticalReactionsList); ReflectionUtility.SetHiddenField("_criticalRates", solver, criticalRates); ReflectionUtility.SetHiddenField("_nonCriticalReactions", solver, nonCriticalReactionsList); ReflectionUtility.SetHiddenField("_noncriticalRates", solver, nonCriticalRates); executeReactionsMethod.Invoke(solver, null); regime = ReflectionUtility.GetHiddenField <int>("_regime", solver); Assert.AreEqual(3, regime); Assert.AreEqual(100, model.Species[0].Count); Assert.AreEqual(50, model.Species[1].Count); //4. == Regime.AnythingElse ReflectionUtility.SetHiddenField("_regime", solver, 4); try { executeReactionsMethod.Invoke(solver, null); Assert.Fail(); } catch (ApplicationException ex) { Assert.That(ex.GetBaseException().ToString(), Is.StringContaining("Bad solver mode.")); } }