Beispiel #1
0
 public void SetSink(SinkType stype, System.Windows.Forms.Control logger)
 {
     if ((stype == SinkType.CONTROL) && (logger == null))
     {
         throw new Exception("A Control object must be supplied for the CONTROL sink Type");
     }
     this.stype = stype;
     if (logger != null)
     {
         control = logger;
     }
 }
Beispiel #2
0
        private void frmSettings_Load(object sender, EventArgs e)
        {
            if (_container == null)
            {
                btnGenerateWikiDocs.Enabled = false;
            }

            _newAppSettings = new ApplicationSettings().GetOrCreateApplicationSettings();

            var engineSettings = _newAppSettings.EngineSettings;

            chkShowDebug.DataBindings.Add("Checked", engineSettings, "ShowDebugWindow", false, DataSourceUpdateMode.OnPropertyChanged);
            chkAutoCloseWindow.DataBindings.Add("Checked", engineSettings, "AutoCloseDebugWindow", false, DataSourceUpdateMode.OnPropertyChanged);
            chkEnableLogging.DataBindings.Add("Checked", engineSettings, "EnableDiagnosticLogging", false, DataSourceUpdateMode.OnPropertyChanged);
            chkAdvancedDebug.DataBindings.Add("Checked", engineSettings, "ShowAdvancedDebugOutput", false, DataSourceUpdateMode.OnPropertyChanged);
            chkTrackMetrics.DataBindings.Add("Checked", engineSettings, "TrackExecutionMetrics", false, DataSourceUpdateMode.OnPropertyChanged);
            txtCommandDelay.DataBindings.Add("Text", engineSettings, "DelayBetweenCommands", false, DataSourceUpdateMode.OnPropertyChanged);
            chkOverrideInstances.DataBindings.Add("Checked", engineSettings, "OverrideExistingAppInstances", false, DataSourceUpdateMode.OnPropertyChanged);
            chkAutoCalcVariables.DataBindings.Add("Checked", engineSettings, "AutoCalcVariables", false, DataSourceUpdateMode.OnPropertyChanged);

            cbxCancellationKey.DataSource = Enum.GetValues(typeof(Keys));
            cbxCancellationKey.DataBindings.Add("Text", engineSettings, "CancellationKey", false, DataSourceUpdateMode.OnPropertyChanged);

            SinkType loggingSinkType = engineSettings.LoggingSinkType;

            cbxSinkType.DataSource    = Enum.GetValues(typeof(SinkType));
            cbxSinkType.SelectedIndex = cbxSinkType.Items.IndexOf(loggingSinkType);

            LogEventLevel minLogLevel = engineSettings.MinLogLevel;

            cbxMinLogLevel.DataSource    = Enum.GetValues(typeof(LogEventLevel));
            cbxMinLogLevel.SelectedIndex = cbxMinLogLevel.Items.IndexOf(minLogLevel);

            txtLogging1.DataBindings.Add("Text", engineSettings, "LoggingValue1", false, DataSourceUpdateMode.OnPropertyChanged);

            var clientSettings = _newAppSettings.ClientSettings;

            chkAntiIdle.DataBindings.Add("Checked", clientSettings, "AntiIdleWhileOpen", false, DataSourceUpdateMode.OnPropertyChanged);
            txtAppFolderPath.DataBindings.Add("Text", clientSettings, "RootFolder", false, DataSourceUpdateMode.OnPropertyChanged);
            txtAttendedTaskFolder.DataBindings.Add("Text", clientSettings, "AttendedTasksFolder", false, DataSourceUpdateMode.OnPropertyChanged);
            chkInsertCommandsInline.DataBindings.Add("Checked", clientSettings, "InsertCommandsInline", false, DataSourceUpdateMode.OnPropertyChanged);
            chkSequenceDragDrop.DataBindings.Add("Checked", clientSettings, "EnableSequenceDragDrop", false, DataSourceUpdateMode.OnPropertyChanged);
            chkMinimizeToTray.DataBindings.Add("Checked", clientSettings, "MinimizeToTray", false, DataSourceUpdateMode.OnPropertyChanged);
            cboStartUpMode.DataBindings.Add("Text", clientSettings, "StartupMode", false, DataSourceUpdateMode.OnPropertyChanged);
            chkPreloadCommands.DataBindings.Add("Checked", clientSettings, "PreloadBuilderCommands", false, DataSourceUpdateMode.OnPropertyChanged);
            chkSlimActionBar.DataBindings.Add("Checked", clientSettings, "UseSlimActionBar", false, DataSourceUpdateMode.OnPropertyChanged);

            //get metrics
            bgwMetrics.RunWorkerAsync();
        }
Beispiel #3
0
 /// <summary>
 /// Clean up the internal state of the <see cref="BaseSink"/>.
 /// </summary>
 public virtual void CleanUp()
 {
     Type       = TargetSinkType;
     IsUsed     = false;
     ShouldSkip = false;
 }
Beispiel #4
0
        public MainWindow()
        {
            InitializeComponent();

            try
            {
                mCaptureManager = new CaptureManager("CaptureManager.dll");
            }
            catch (System.Exception)
            {
                try
                {
                    mCaptureManager = new CaptureManager();
                }
                catch (System.Exception)
                {
                }
            }

            if (mCaptureManager == null)
            {
                return;
            }

            XmlDataProvider lXmlDataProvider = (XmlDataProvider)this.Resources["XmlLogProvider"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            System.Xml.XmlDocument doc = new System.Xml.XmlDocument();

            string lxmldoc = "";

            mCaptureManager.getCollectionOfSources(ref lxmldoc);

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;

            mSourceControl = mCaptureManager.createSourceControl();



            mCaptureManager.getCollectionOfSinks(ref lxmldoc);


            lXmlDataProvider = (XmlDataProvider)this.Resources["XmlSinkFactoryCollectionProvider"];

            if (lXmlDataProvider == null)
            {
                return;
            }

            doc = new System.Xml.XmlDocument();

            doc.LoadXml(lxmldoc);

            lXmlDataProvider.Document = doc;


            mISessionControl = mCaptureManager.createSessionControl();

            mSinkControl = mCaptureManager.createSinkControl();

            mEncoderControl = mCaptureManager.createEncoderControl();

            mEncodersComboBox.SelectionChanged += delegate
            {
                do
                {
                    if (mEncoderControl == null)
                    {
                        break;
                    }

                    var lselectedNode = mEncodersComboBox.SelectedItem as XmlNode;

                    if (lselectedNode == null)
                    {
                        break;
                    }

                    var lEncoderNameAttr = lselectedNode.Attributes["Title"];

                    if (lEncoderNameAttr == null)
                    {
                        break;
                    }

                    var lCLSIDEncoderAttr = lselectedNode.Attributes["CLSID"];

                    if (lCLSIDEncoderAttr == null)
                    {
                        break;
                    }

                    Guid lCLSIDEncoder;

                    if (!Guid.TryParse(lCLSIDEncoderAttr.Value, out lCLSIDEncoder))
                    {
                        break;
                    }



                    var lSourceNode = mSourcesComboBox.SelectedItem as XmlNode;

                    if (lSourceNode == null)
                    {
                        return;
                    }

                    var lNode = lSourceNode.SelectSingleNode(
                        "Source.Attributes/Attribute" +
                        "[@Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK' or @Name='MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_SYMBOLIC_LINK']" +
                        "/SingleValue/@Value");

                    if (lNode == null)
                    {
                        return;
                    }

                    string lSymbolicLink = lNode.Value;

                    lSourceNode = mStreamsComboBox.SelectedItem as XmlNode;

                    if (lSourceNode == null)
                    {
                        return;
                    }

                    lNode = lSourceNode.SelectSingleNode("@Index");

                    if (lNode == null)
                    {
                        return;
                    }

                    uint lStreamIndex = 0;

                    if (!uint.TryParse(lNode.Value, out lStreamIndex))
                    {
                        return;
                    }

                    lSourceNode = mMediaTypesComboBox.SelectedItem as XmlNode;

                    if (lSourceNode == null)
                    {
                        return;
                    }

                    lNode = lSourceNode.SelectSingleNode("@Index");

                    if (lNode == null)
                    {
                        return;
                    }

                    uint lMediaTypeIndex = 0;

                    if (!uint.TryParse(lNode.Value, out lMediaTypeIndex))
                    {
                        return;
                    }



                    object lOutputMediaType;

                    if (mSourceControl == null)
                    {
                        return;
                    }

                    mSourceControl.getSourceOutputMediaType(
                        lSymbolicLink,
                        lStreamIndex,
                        lMediaTypeIndex,
                        out lOutputMediaType);

                    string lMediaTypeCollection;

                    if (!mEncoderControl.getMediaTypeCollectionOfEncoder(
                            lOutputMediaType,
                            lCLSIDEncoder,
                            out lMediaTypeCollection))
                    {
                        break;
                    }



                    XmlDataProvider lXmlEncoderModeDataProvider = (XmlDataProvider)this.Resources["XmlEncoderModeProvider"];

                    if (lXmlEncoderModeDataProvider == null)
                    {
                        return;
                    }

                    XmlDocument lEncoderModedoc = new XmlDocument();

                    lEncoderModedoc.LoadXml(lMediaTypeCollection);

                    lXmlEncoderModeDataProvider.Document = lEncoderModedoc;
                } while (false);
            };


            mEncodingModeComboBox.SelectionChanged += delegate
            {
                do
                {
                    if (mEncoderControl == null)
                    {
                        break;
                    }

                    var lselectedNode = mEncodingModeComboBox.SelectedItem as XmlNode;

                    if (lselectedNode == null)
                    {
                        break;
                    }

                    var lGUIDEncodingModeAttr = lselectedNode.Attributes["GUID"];

                    if (lGUIDEncodingModeAttr == null)
                    {
                        break;
                    }

                    Guid lGUIDEncodingMode;

                    if (!Guid.TryParse(lGUIDEncodingModeAttr.Value, out lGUIDEncodingMode))
                    {
                        break;
                    }

                    var lConstantMode = Guid.Parse("{CA37E2BE-BEC0-4B17-946D-44FBC1B3DF55}");

                    XmlDataProvider lXmlMediaTypeProvider = (XmlDataProvider)this.Resources["XmlMediaTypesCollectionProvider"];

                    if (lXmlMediaTypeProvider == null)
                    {
                        return;
                    }

                    XmlDocument lMediaTypedoc = new XmlDocument();

                    var lClonedMediaTypesNode = lMediaTypedoc.ImportNode(lselectedNode, true);

                    lMediaTypedoc.AppendChild(lClonedMediaTypesNode);

                    lXmlMediaTypeProvider.Document = lMediaTypedoc;
                } while (false);
            };

            mSinkFactoryComboBox.SelectionChanged += delegate
            {
                do
                {
                    if (mEncoderControl == null)
                    {
                        break;
                    }

                    var lselectedNode = mSinkFactoryComboBox.SelectedItem as XmlNode;

                    if (lselectedNode == null)
                    {
                        break;
                    }

                    var lAttr = lselectedNode.Attributes["GUID"];

                    if (lAttr == null)
                    {
                        throw new System.Exception("GUID is empty");
                    }

                    mContainerTypeComboBox.IsEnabled = false;

                    mSinkType = SinkType.Node;

                    if (lAttr.Value == "{D6E342E3-7DDD-4858-AB91-4253643864C2}")
                    {
                        mContainerTypeComboBox.IsEnabled = true;

                        mSinkType = SinkType.File;
                    }
                    else if (lAttr.Value == "{2E891049-964A-4D08-8F36-95CE8CB0DE9B}")
                    {
                        mContainerTypeComboBox.IsEnabled = true;

                        mSinkType = SinkType.BitStream;
                    }
                    else if (lAttr.Value == "{759D24FF-C5D6-4B65-8DDF-8A2B2BECDE39}")
                    {
                    }
                    else if (lAttr.Value == "{3D64C48E-EDA4-4EE1-8436-58B64DD7CF13}")
                    {
                    }
                    else if (lAttr.Value == "{2F34AF87-D349-45AA-A5F1-E4104D5C458E}")
                    {
                    }

                    XmlDataProvider lXmlMediaTypeProvider = (XmlDataProvider)this.Resources["XmlContainerTypeProvider"];

                    if (lXmlMediaTypeProvider == null)
                    {
                        return;
                    }

                    XmlDocument lMediaTypedoc = new XmlDocument();

                    var lClonedMediaTypesNode = lMediaTypedoc.ImportNode(lselectedNode, true);

                    lMediaTypedoc.AppendChild(lClonedMediaTypesNode);

                    lXmlMediaTypeProvider.Document = lMediaTypedoc;
                } while (false);
            };
        }
Beispiel #5
0
 public InfoSinkBase(SinkType sinkType)
 {
     sink      = new StringBuilder();
     mSinkType = sinkType;
 }
        public async Task <int> Start(CancellationToken token, IConsole console, int processId, int refreshInterval, SinkType sink, IEnumerable <FileInfo> jsonConfigs, IEnumerable <FileInfo> keyFileConfigs)
        {
            //CONSIDER The console sink uses the standard AddConsole, and therefore disregards IConsole.

            ServiceCollection    services = new ServiceCollection();
            ConfigurationBuilder builder  = new ConfigurationBuilder();

            if (jsonConfigs != null)
            {
                foreach (FileInfo jsonFile in jsonConfigs)
                {
                    builder.SetBasePath(jsonFile.DirectoryName).AddJsonFile(jsonFile.Name, optional: true);
                }
            }
            if (keyFileConfigs != null)
            {
                foreach (FileInfo keyFileConfig in keyFileConfigs)
                {
                    console.Out.WriteLine(keyFileConfig.FullName);
                    builder.AddKeyPerFile(keyFileConfig.FullName, optional: true);
                }
            }

            ConfigureNames(builder);

            IConfigurationRoot config = builder.Build();

            services.AddSingleton <IConfiguration>(config);

            //Specialized logger for diagnostic output from the service itself rather than as a sink for the data
            services.AddSingleton <ILogger <DiagnosticsMonitor> >((sp) => new ConsoleLoggerAdapter(console));

            if (sink.HasFlag(SinkType.Console))
            {
                services.AddSingleton <IMetricsLogger, ConsoleMetricsLogger>();
            }
            if (sink.HasFlag(SinkType.LogAnalytics))
            {
                services.AddSingleton <IMetricsLogger, MetricsLogger>();
            }

            services.AddLogging(builder =>
            {
                if (sink.HasFlag(SinkType.Console))
                {
                    builder.AddConsole();
                }
                if (sink.HasFlag(SinkType.LogAnalytics))
                {
                    builder.AddProvider(new LogAnalyticsLoggerProvider());
                }
            });
            services.Configure <ContextConfiguration>(config);
            if (sink.HasFlag(SinkType.LogAnalytics))
            {
                services.Configure <MetricsConfiguration>(config);
                services.Configure <ResourceConfiguration>(config);
            }

            await using var monitor = new DiagnosticsMonitor(services.BuildServiceProvider(), new MonitoringSourceConfiguration(refreshInterval));
            await monitor.ProcessEvents(processId, token);

            return(0);
        }
Beispiel #7
0
 public InfoSinkBase(SinkType sinkType)
 {
     sink = new StringBuilder();
     mSinkType = sinkType;
 }
        private void frmSettings_Load(object sender, EventArgs e)
        {
            newAppSettings = new ApplicationSettings();
            newAppSettings = newAppSettings.GetOrCreateApplicationSettings();

            var serverSettings = newAppSettings.ServerSettings;

            chkServerEnabled.DataBindings.Add("Checked", serverSettings, "ServerConnectionEnabled", false, DataSourceUpdateMode.OnPropertyChanged);
            chkAutomaticallyConnect.DataBindings.Add("Checked", serverSettings, "ConnectToServerOnStartup", false, DataSourceUpdateMode.OnPropertyChanged);
            chkRetryOnDisconnect.DataBindings.Add("Checked", serverSettings, "RetryServerConnectionOnFail", false, DataSourceUpdateMode.OnPropertyChanged);
            chkBypassValidation.DataBindings.Add("Checked", serverSettings, "BypassCertificateValidation", false, DataSourceUpdateMode.OnPropertyChanged);
            txtPublicKey.DataBindings.Add("Text", serverSettings, "ServerPublicKey", false, DataSourceUpdateMode.OnPropertyChanged);
            txtServerURL.DataBindings.Add("Text", serverSettings, "ServerURL", false, DataSourceUpdateMode.OnPropertyChanged);
            txtHttpsAddress.DataBindings.Add("Text", serverSettings, "HTTPServerURL", false, DataSourceUpdateMode.OnPropertyChanged);
            txtGUID.DataBindings.Add("Text", serverSettings, "HTTPGuid", false, DataSourceUpdateMode.OnPropertyChanged);

            var engineSettings = newAppSettings.EngineSettings;

            chkShowDebug.DataBindings.Add("Checked", engineSettings, "ShowDebugWindow", false, DataSourceUpdateMode.OnPropertyChanged);
            chkAutoCloseWindow.DataBindings.Add("Checked", engineSettings, "AutoCloseDebugWindow", false, DataSourceUpdateMode.OnPropertyChanged);
            chkEnableLogging.DataBindings.Add("Checked", engineSettings, "EnableDiagnosticLogging", false, DataSourceUpdateMode.OnPropertyChanged);
            chkAdvancedDebug.DataBindings.Add("Checked", engineSettings, "ShowAdvancedDebugOutput", false, DataSourceUpdateMode.OnPropertyChanged);
            chkTrackMetrics.DataBindings.Add("Checked", engineSettings, "TrackExecutionMetrics", false, DataSourceUpdateMode.OnPropertyChanged);
            txtCommandDelay.DataBindings.Add("Text", engineSettings, "DelayBetweenCommands", false, DataSourceUpdateMode.OnPropertyChanged);
            chkOverrideInstances.DataBindings.Add("Checked", engineSettings, "OverrideExistingAppInstances", false, DataSourceUpdateMode.OnPropertyChanged);
            chkAutoCalcVariables.DataBindings.Add("Checked", engineSettings, "AutoCalcVariables", false, DataSourceUpdateMode.OnPropertyChanged);

            cbxCancellationKey.DataSource = Enum.GetValues(typeof(Keys));
            cbxCancellationKey.DataBindings.Add("Text", engineSettings, "CancellationKey", false, DataSourceUpdateMode.OnPropertyChanged);

            SinkType loggingSinkType = engineSettings.LoggingSinkType;

            cbxSinkType.DataSource    = Enum.GetValues(typeof(SinkType));
            cbxSinkType.SelectedIndex = cbxSinkType.Items.IndexOf(loggingSinkType);

            LogEventLevel minLogLevel = engineSettings.MinLogLevel;

            cbxMinLogLevel.DataSource    = Enum.GetValues(typeof(LogEventLevel));
            cbxMinLogLevel.SelectedIndex = cbxMinLogLevel.Items.IndexOf(minLogLevel);

            txtLogging1.DataBindings.Add("Text", engineSettings, "LoggingValue1", false, DataSourceUpdateMode.OnPropertyChanged);
            txtLogging2.DataBindings.Add("Text", engineSettings, "LoggingValue2", false, DataSourceUpdateMode.OnPropertyChanged);
            txtLogging3.DataBindings.Add("Text", engineSettings, "LoggingValue3", false, DataSourceUpdateMode.OnPropertyChanged);
            txtLogging4.DataBindings.Add("Text", engineSettings, "LoggingValue4", false, DataSourceUpdateMode.OnPropertyChanged);

            var listenerSettings = newAppSettings.ListenerSettings;

            chkAutoStartListener.DataBindings.Add("Checked", listenerSettings, "StartListenerOnStartup", false, DataSourceUpdateMode.OnPropertyChanged);
            chkEnableListening.DataBindings.Add("Checked", listenerSettings, "LocalListeningEnabled", false, DataSourceUpdateMode.OnPropertyChanged);
            chkRequireListenerKey.DataBindings.Add("Checked", listenerSettings, "RequireListenerAuthenticationKey", false, DataSourceUpdateMode.OnPropertyChanged);
            txtListeningPort.DataBindings.Add("Text", listenerSettings, "ListeningPort", false, DataSourceUpdateMode.OnPropertyChanged);
            txtAuthListeningKey.DataBindings.Add("Text", listenerSettings, "AuthKey", false, DataSourceUpdateMode.OnPropertyChanged);
            chkEnableWhitelist.DataBindings.Add("Checked", listenerSettings, "EnableWhitelist", false, DataSourceUpdateMode.OnPropertyChanged);
            txtWhiteList.DataBindings.Add("Text", listenerSettings, "IPWhiteList", false, DataSourceUpdateMode.OnPropertyChanged);

            SetupListeningUI();

            var clientSettings = newAppSettings.ClientSettings;

            chkAntiIdle.DataBindings.Add("Checked", clientSettings, "AntiIdleWhileOpen", false, DataSourceUpdateMode.OnPropertyChanged);
            txtAppFolderPath.DataBindings.Add("Text", clientSettings, "RootFolder", false, DataSourceUpdateMode.OnPropertyChanged);
            txtAttendedTaskFolder.DataBindings.Add("Text", clientSettings, "AttendedTasksFolder", false, DataSourceUpdateMode.OnPropertyChanged);
            chkInsertCommandsInline.DataBindings.Add("Checked", clientSettings, "InsertCommandsInline", false, DataSourceUpdateMode.OnPropertyChanged);
            chkSequenceDragDrop.DataBindings.Add("Checked", clientSettings, "EnableSequenceDragDrop", false, DataSourceUpdateMode.OnPropertyChanged);
            chkMinimizeToTray.DataBindings.Add("Checked", clientSettings, "MinimizeToTray", false, DataSourceUpdateMode.OnPropertyChanged);
            cboStartUpMode.DataBindings.Add("Text", clientSettings, "StartupMode", false, DataSourceUpdateMode.OnPropertyChanged);
            chkPreloadCommands.DataBindings.Add("Checked", clientSettings, "PreloadBuilderCommands", false, DataSourceUpdateMode.OnPropertyChanged);
            chkSlimActionBar.DataBindings.Add("Checked", clientSettings, "UseSlimActionBar", false, DataSourceUpdateMode.OnPropertyChanged);

            //get metrics
            bgwMetrics.RunWorkerAsync();

            LocalTCPClient.ListeningStarted += AutomationTCPListener_ListeningStarted;
            LocalTCPClient.ListeningStopped += AutomationTCPListener_ListeningStopped;
        }
Beispiel #9
0
        /// <summary>
        /// Reads the particles and distributes them on the dictionaries
        /// </summary>
        /// <param name="shapefilename"></param>
        public IEnumerable <Particle> ReadParticleFile(string shapefilename, Func <DBFReader, int, SinkType, bool> ExcludeThis, bool DrainToBoundaryOption)
        {
            List <int> RedoxedParticles = new List <int>();
            Dictionary <int, Particle> NonRedoxedParticles = new Dictionary <int, Particle>();

            NewMessage("Reading particles from: " + shapefilename);
            int k = 0;


            using (DBFReader sr = new DBFReader(shapefilename))
            {
                try
                {
                    for (int i = 0; i < sr.NoOfEntries; i++)
                    {
                        int      id       = sr.ReadInt(i, "ID");
                        SinkType sinktype = (SinkType)Enum.Parse(typeof(SinkType), sr.ReadString(i, "SinkType"));
                        if (sinktype == SinkType.Active_cell) //Do not create a new particle
                        {
                            RedoxedParticles.Add(id);
                        }
                        else if (ExcludeThis != null && ExcludeThis(sr, i, sinktype))
                        {
                            k++;
                        }
                        else
                        {
                            Particle p = new Particle();

                            p.Registration = sr.ReadInt(i, "Registrati");
                            p.XStart       = sr.ReadDouble(i, "X-Birth");
                            p.YStart       = sr.ReadDouble(i, "Y-Birth");
                            p.ZStart       = sr.ReadDouble(i, "Z-Birth");
                            p.X            = sr.ReadDouble(i, "X-Reg");
                            p.Y            = sr.ReadDouble(i, "Y-Reg");
                            p.Z            = sr.ReadDouble(i, "Z-Reg");
                            p.TravelTime   = sr.ReadDouble(i, "TravelTime");
                            p.SinkType     = sinktype;
                            NonRedoxedParticles.Add(id, p);

                            if (DrainToBoundaryOption && p.SinkType == SinkType.Drain_to_Boundary)
                            {
                                p.X            = p.XStart;
                                p.Y            = p.YStart;
                                p.Z            = p.ZStart;
                                p.Registration = 0;
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    NewMessage("Error reading data");
                }
            }

            int nosink = 0;

            //Set the registration on all particles that have be redoxed
            foreach (var pid in RedoxedParticles)
            {
                if (NonRedoxedParticles.ContainsKey(pid))
                {
                    NonRedoxedParticles[pid].Registration = 1;
                }
                else
                {
                    nosink++;
                }
            }

            NewMessage("Excluded: " + k + " particles.");

            return(NonRedoxedParticles.Values);
        }