/// <summary>
        /// Creates a new instance of the <see cref="BiasingBehavior"/> class.
        /// </summary>
        /// <param name="name">The name of the behavior.</param>
        public BiasingBehavior(string name, ComponentBindingContext context) : base(name)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            // Get our resistor parameters (we want our A and B parameter values)
            _bp = context.GetParameterSet <BaseParameters>();

            // Get the simulation parameters (we want to use Gmin)
            _baseConfig = context.GetSimulationParameterSet <BiasingParameters>();

            // Request the node variables
            var state = context.GetState <IBiasingSimulationState>();

            _nodeA = state.GetSharedVariable(context.Nodes[0]);
            _nodeB = state.GetSharedVariable(context.Nodes[1]);

            // We need 4 matrix elements and 2 RHS vector elements
            var indexA = state.Map[_nodeA];
            var indexB = state.Map[_nodeB];

            _elements = new ElementSet <double>(state.Solver, new[] {
                new MatrixLocation(indexA, indexA),
                new MatrixLocation(indexA, indexB),
                new MatrixLocation(indexB, indexA),
                new MatrixLocation(indexB, indexB)
            }, new[] { indexA, indexB });
        }
Beispiel #2
0
        public sdwSSA(ModelInfo modelinfo, double duration, int repeats, int samples)
            : base(modelinfo, duration, repeats, samples)
        {
            Configuration config = Configuration.CurrentConfiguration;

            _reactions = new StateDependentReactionSet(model.Reactions, _gammaSize);

            _trajectoryCounter = 0;
            _runningMean       = 0.0;
            _runningVariance   = 0.0;

            _crossEntropyRuns        = config.GetParameterWithDefault("sdwSSA.crossEntropyRuns", 100000);
            _crossEntropyThreshold   = config.GetParameterWithDefault("sdwSSA.crossEntropyThreshold", 0.01);
            _crossEntropyMinDataSize = config.GetParameterWithDefault("sdwSSA.crossEntropyMinDataSize", 200);
            _reExpressionName        = config.GetParameterWithDefault("sdwSSA.reExpressionName", "reExpression");
            _reValName         = config.GetParameterWithDefault("sdwSSA.reValName", "reVal");
            _gammaSize         = config.GetParameterWithDefault("sdwSSA.gammaSize", 15);
            _binCountThreshold = config.GetParameterWithDefault("sdwSSA.binCount", 20);

            _reExpression   = model.Expressions.FirstOrDefault(e => e.Name == _reExpressionName);
            _rareEventValue = 0.0;
            _rareEventTest  = new EqualTo(_reExpression, new ConstantValue(_rareEventValue));

            _gamma            = new List <double[]>();
            _propensityCutoff = new List <double[]>();
            _gammaIndex       = new int[_reactions.NumReactions];
            _binIndex         = new int[_reactions.NumReactions];

            _biasingParametersFileName = config.GetParameterWithDefault("sdwSSA.biasingParametersFileName", modelinfo.Name + "_biasingParameters.json");
            _biasingParametersFlag     = (String.CompareOrdinal(_biasingParametersFileName, modelinfo.Name + "_biasingParameters.json") == 0);
            _biasingParameters         = _biasingParametersFlag ? new BiasingParameters() : BiasingParametersDeserializer.ReadParametersFromJsonFile(_biasingParametersFileName);

            _outputFileName = config.GetParameterWithDefault("sdwSSA.outputFileName", modelInfo.Name + "_sdwSSA_1e" + Math.Log(SamplingParams.RealizationCount, 10) + ".txt");
        }
Beispiel #3
0
        public void BiasingParametersLoadParametersFromNull()
        {
            // ReSharper disable UnusedVariable
            var parameters = BiasingParameters.LoadParametersFromJson(null);

            // ReSharper restore UnusedVariable
            Assert.Fail("LoadParametersFromJson(null) should throw an ArgumentNullException.");
        }
Beispiel #4
0
        public void BiasingParametersJsonFileBinCountNotCutoffSize()
        {
            const string inputFile = "resources\\biasing_sample_BIN_COUNT_not_CUTOFF_array_size.json";
            // ReSharper disable UnusedVariable
            var parameters = BiasingParameters.LoadParametersFromJson(inputFile);

            // ReSharper restore UnusedVariable
            Assert.Fail("BiasingParametersJsonFileBinCountNotCutoffSize() should throw a System.ArgumentException.");
        }
Beispiel #5
0
        public void BiasingParametersJsonFileIreCountNotRareEventInfoSize()
        {
            const string inputFile = "resources\\biasing_sample_IRE_COUNT_not_RARE_EVENT_INFO_array_size.json";
            // ReSharper disable UnusedVariable
            var parameters = BiasingParameters.LoadParametersFromJson(inputFile);

            // ReSharper restore UnusedVariable
            Assert.Fail("BiasingParametersJsonFileIreCountNotRareEventInfoSize() should throw a System.ArgumentException.");
        }
Beispiel #6
0
        public void BiasingParametersJsonFileReactionCountLessThanReactionArraySize()
        {
            const string inputFile = "resources\\biasing_sample_REACTION_COUNT_less_than_REACTION_array_size.json";
            // ReSharper disable UnusedVariable
            var parameters = BiasingParameters.LoadParametersFromJson(inputFile);

            // ReSharper restore UnusedVariable
            Assert.Fail("BiasingParametersJsonFileReactionCountLessThanReactionArraySize() should throw a System.ArgumentException.");
        }
Beispiel #7
0
        public void BiasingParametersJsonFileMissingIreCountParameter()
        {
            const string inputFile = "resources\\biasing_sample_IRE_COUNT_missing.json";
            // ReSharper disable UnusedVariable
            var parameters = BiasingParameters.LoadParametersFromJson(inputFile);

            // ReSharper restore UnusedVariable
            Assert.Fail("BiasingParametersJsonFileMissingIreCountParameter() should throw a System.ArgumentException.");
        }
Beispiel #8
0
        public void BiasingParametersLoadParametersFromInvalidJson()
        {
            const string jsonFilename = "resources\\invalid.json";
            // ReSharper disable UnusedVariable
            var parameters = BiasingParameters.LoadParametersFromJson(jsonFilename);

            // ReSharper restore UnusedVariable
            Assert.Fail("LoadParametersFromInvalidJson({0}) should throw an ArgumentException.", jsonFilename);
        }
Beispiel #9
0
        public void BiasingParametersConstructor()
        {
            var parameters = new BiasingParameters();

            Assert.AreEqual(string.Empty, parameters.RareEvent.ExpressionLocale);
            Assert.AreEqual(string.Empty, parameters.RareEvent.ExpressionName);
            Assert.AreEqual(0, parameters.RareEvent.IntermediateRareEventCount);
            Assert.IsEmpty(parameters.RareEvent.Thresholds);
            Assert.IsEmpty(parameters.Locales);
        }
Beispiel #10
0
        public void BiasingParametersLoadParametersFromMissingFile()
        {
            string tempFileName = Path.GetTempFileName();

            File.Delete(tempFileName);
            // ReSharper disable UnusedVariable
            var parameters = BiasingParameters.LoadParametersFromJson(tempFileName);

            // ReSharper restore UnusedVariable
            Assert.Fail("LoadParametersFromMissingFile(tempFileName) should throw an IO.FileNotFoundException.");
        }
Beispiel #11
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Biasing"/> class.
        /// </summary>
        /// <param name="context">The binding context.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception>
        public Biasing(IComponentBindingContext context)
            : base(context)
        {
            var state = context.GetState <IBiasingSimulationState>();

            _config    = context.GetSimulationParameterSet <BiasingParameters>();
            _iteration = context.GetState <IIterationSimulationState>();
            _args      = new MosfetContributionEventArgs(_contributions);
            context.TryGetState(out _time);
            context.TryGetState(out _method);
            _variables = new MosfetVariables <double>(context, state);

            // Get matrix pointers
            _elements = new ElementSet <double>(state.Solver,
                                                _variables.GetMatrixLocations(state.Map),
                                                _variables.GetRhsIndices(state.Map));
        }
Beispiel #12
0
        public void BiasingParametersLoadParametersFromJson()
        {
            const string filename   = "resources\\biasing_sample.json";
            var          parameters = BiasingParameters.LoadParametersFromJson(filename);

            // Verify rare event spec
            Assert.AreEqual("site_1", parameters.RareEvent.ExpressionLocale);
            Assert.AreEqual("reExpression", parameters.RareEvent.ExpressionName);
            Assert.AreEqual(2, parameters.RareEvent.IntermediateRareEventCount);
            Assert.AreEqual(24, parameters.RareEvent.Thresholds[0]);
            Assert.AreEqual(32, parameters.RareEvent.Thresholds[1]);

            // Verify locale[s]
            Assert.AreEqual(1, parameters.Locales.Count);
            var localeInfo = parameters.Locales[0];

            Assert.AreEqual("site_1", localeInfo.Name);
            Assert.AreEqual(8, localeInfo.ReactionCount);
            Assert.AreEqual(8, localeInfo.Reactions.Count);

            // Verify first reaction
            var reactionInfo = localeInfo.Reactions[0];

            Assert.AreEqual("R1", reactionInfo.Name);
            Assert.AreEqual(2, reactionInfo.RareEvents.Count);
            var rareEventInfo = reactionInfo.RareEvents[0];

            Assert.AreEqual(2, rareEventInfo.BinCount);
            Assert.AreEqual(2, rareEventInfo.Gammas.Length);
            Assert.AreEqual(1, rareEventInfo.Thresholds.Length);
            Assert.AreEqual(1.06863, rareEventInfo.Gammas[0]);
            Assert.AreEqual(1.56882, rareEventInfo.Gammas[1]);
            Assert.AreEqual(0.00031386, rareEventInfo.Thresholds[0]);

            // Verify last reaction
            reactionInfo = localeInfo.Reactions[localeInfo.ReactionCount - 1];
            Assert.AreEqual("R8", reactionInfo.Name);
            Assert.AreEqual(2, reactionInfo.RareEvents.Count);
            rareEventInfo = reactionInfo.RareEvents[1];
            Assert.AreEqual(7, rareEventInfo.BinCount);
            Assert.AreEqual(7, rareEventInfo.Gammas.Length);
            Assert.AreEqual(6, rareEventInfo.Thresholds.Length);
            Assert.AreEqual(2.37130, rareEventInfo.Gammas[0]);
            Assert.AreEqual(2.191004, rareEventInfo.Gammas[6]);
            Assert.AreEqual(0.3935499, rareEventInfo.Thresholds[5]);
        }
Beispiel #13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Biasing"/> class.
        /// </summary>
        /// <param name="context">The binding context.</param>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="context"/> is <c>null</c>.</exception>
        public Biasing(IComponentBindingContext context)
            : base(context)
        {
            var state = context.GetState <IBiasingSimulationState>();

            _config    = context.GetSimulationParameterSet <BiasingParameters>();
            _iteration = context.GetState <IIterationSimulationState>();
            _args      = new MosfetContributionEventArgs(_contributions);
            context.TryGetState(out _time);
            context.TryGetState(out _method);

            _variables = new MosfetVariables <double>(Name, state, context.Nodes,
                                                      !ModelParameters.DrainResistance.Equals(0.0) || !ModelParameters.SheetResistance.Equals(0.0) && Parameters.DrainSquares > 0,
                                                      !ModelParameters.SourceResistance.Equals(0.0) || !ModelParameters.SheetResistance.Equals(0.0) && Parameters.SourceSquares > 0);

            // Get matrix pointers
            _elements = new ElementSet <double>(state.Solver,
                                                _variables.GetMatrixLocations(state.Map),
                                                _variables.GetRhsIndices(state.Map));
        }
Beispiel #14
0
        public void BiasingParametersWriteParametersToJson()
        {
            const string inputFile  = "resources\\biasing_sample.json";
            var          parameters = BiasingParameters.LoadParametersFromJson(inputFile);
            string       outputFile = Path.GetTempFileName();
            bool         areSame    = false;

            try
            {
                Console.WriteLine("Writing biasing parameters to '{0}'...", outputFile);
                parameters.WriteParametersToJsonFile(outputFile);
                FileAssert.AreEqual(inputFile, outputFile);
                areSame = true;
            }
            finally
            {
                if (areSame)
                {
                    File.Delete(outputFile);
                }
            }
        }