Exemple #1
0
        private void RunSimulation(CancellationToken cancellationToken)
        {
            var simulationTime = simulationSettings.SimulationTime;
            var dT             = simulationSettings.TimeStep;

            for (CurrentTime = 0.To(Unit.Second); CurrentTime < simulationTime; CurrentTime += dT)
            {
                cancellationToken.ThrowIfCancellationRequested();

                var compactnessForces = simulationSettings.UseCompactingForce
                    ? compactnessForceCalculator.Calculate(CompactnessMeasurer.Measure(Peptide))
                    : new Dictionary <ApproximatedAminoAcid, ApproximateAminoAcidForces>();
                var ramachandranForces = simulationSettings.UseRamachandranForce
                    ? ramachandranForceCalculator.Calculate(Peptide)
                    : new Dictionary <ApproximatedAminoAcid, ApproximateAminoAcidForces>();
                var bondForces = bondForceCalculator.Calculate(Peptide);
                foreach (var aminoAcid in Peptide.AminoAcids)
                {
                    var resultingForce = new ApproximateAminoAcidForces();
                    if (compactnessForces.ContainsKey(aminoAcid))
                    {
                        var compactnessForce = compactnessForces[aminoAcid];
                        resultingForce += compactnessForce;
                    }
                    if (ramachandranForces.ContainsKey(aminoAcid))
                    {
                        var ramachandranForce = ramachandranForces[aminoAcid];
                        resultingForce += ramachandranForce;
                    }
                    if (bondForces.ContainsKey(aminoAcid))
                    {
                        var bondForce = bondForces[aminoAcid];
                        resultingForce += bondForce;
                    }
                    ApplyForce(aminoAcid, resultingForce, dT, simulationSettings.ReservoirTemperature);
                }
                OnSimulationTimestepComplete(new SimulationTimestepCompleteEventArgs(CurrentTime, Peptide));
            }
            SimulationCompleted?.Invoke(this, EventArgs.Empty);
            IsSimulating = false;
        }
        /// <summary>
        /// Measured time, invokes simulation completed event and logs simulation completed event.
        /// Simulation completed message: "Calculated *simulation name* simulation in *measured time*ms".
        /// </summary>
        /// <param name="schematic">Schematic for which to perform the simulation</param>
        /// <param name="simulationLogic">Action that is responsible for performing and saving simulation results</param>
        /// <param name="simulationName">Name to use in simulation ended message</param>
        /// <param name="simulationType">Type of the simulation, for simulation ended event purposes</param>
        private void SimulationRunWrapper(ISchematic schematic, Action <AdmittanceMatrixFactory> simulationLogic, string simulationName,
                                          SimulationType simulationType)
        {
            // Create a stopwatch to measure the duration of simulation
            Stopwatch watch = new Stopwatch();

            // Start measuring time
            watch.Start();

            // Create an admittance matrix factory and use it to invoke passed simulation logic
            simulationLogic(new AdmittanceMatrixFactory(schematic));

            // Stop time measurement
            watch.Stop();

            // Invoke simulation completed event
            SimulationCompleted?.Invoke(this, new SimulationCompletedEventArgs(simulationType));

            // Log the simulation time
            IoC.Log("Completed " + simulationName + $" in {watch.ElapsedMilliseconds}ms",
                    InfoLoggerMessageDuration.Short);
        }
Exemple #3
0
 /// <summary>
 /// Invoked when a job is completed.
 /// </summary>
 /// <param name="sender">The sender of the event.</param>
 /// <param name="e">The event arguments.</param>
 private void OnJobCompleted(object sender, JobCompleteArguments e)
 {
     AddException(e.ExceptionThrowByJob);
     SimulationCompleted?.Invoke(this, e);
 }
Exemple #4
0
 private void OnSimulationFinished()
 {
     SimulationCompleted?.Invoke(this, EventArgs.Empty);
 }