The Colony Detection workflow is a key feature of the PIXL. This workflow is made up of the following key steps:
The Colony Detection workflow is broken down into a flow diagram that can be viewed here.
From a clients point of view the following need steps need to be implemented in order to run a Colony Detection workflow:
Whenever there is a pending plate interaction it can be cancelled by calling the Abort method event on the PIXLClient.
Once the workflow has been triggered and all plates loaded the PIXL will run the workflow. By providing the name of a Project Template the settings the PIXL uses to create the run the workflow can be adjusted. If an empty string is provided the last used Project Template is used.
Running the Colony Detection workflow with the last used Project Template |
Copy Code
|
---|---|
pixl.RunColonyDetectionWorkflow("ID1234", string.Empty); |
The Colony Detection workflow returns an instance of the RunColonyDetectionWorkflowCommandResponse class, which contains information on the status of the finished operation as well as all data captured relating to the workflow.
Running the Colony Detection workflow and displaying all captured data on the Console |
Copy Code
|
---|---|
// Run the workflow. var result = pixl.RunColonyDetectionWorkflow("ID1234", string.Empty).Result; // Display the result. Console.WriteLine(result.Result.Message.ToString()); // Display the local tracking base path. Console.WriteLine($"Tracking base: {result.TrackingPath}"); // Display the program ID. Console.WriteLine($"Program ID: {result.ProgramInformation.ProgramID}"); // Use a StringBuilder to concatenate all information to display. var stringBuilder = new StringBuilder(); // Concatenate colony information. for (var i = 0; i < result.ProgramInformation.ColonyInformation.Length; i++) { var colony = result.ProgramInformation.ColonyInformation[i]; stringBuilder.AppendLine($"---{i + 1} of {result.ProgramInformation.ColonyInformation.Length}:"); stringBuilder.AppendLine($"------ID: {colony.ID}"); stringBuilder.AppendLine($"------Name: {colony.Name}"); stringBuilder.AppendLine($"------IsSelected: {colony.IsSelected}"); stringBuilder.AppendLine($"------SectorID: {colony.SectorID}"); stringBuilder.AppendLine($"------X: {colony.X}"); stringBuilder.AppendLine($"------Y: {colony.Y}"); stringBuilder.AppendLine($"------Area: {colony.Area}"); stringBuilder.AppendLine($"------Diameter: {colony.Diameter}"); stringBuilder.AppendLine($"------Brightness: {colony.Brightness}"); stringBuilder.AppendLine($"------AverageRed: {colony.AverageRed}"); stringBuilder.AppendLine($"------AverageGreen: {colony.AverageGreen}"); stringBuilder.AppendLine($"------AverageBlue: {colony.AverageBlue}"); stringBuilder.AppendLine($"------Redness: {colony.Redness}"); stringBuilder.AppendLine($"------Greenness: {colony.Greenness}"); stringBuilder.AppendLine($"------Blueness: {colony.Blueness}"); stringBuilder.AppendLine($"------ProximityToClosest: {colony.ProximityToClosest}"); } // If there were no colonies add an entry to inform the user of this. if (result.ProgramInformation.ColonyInformation.Length == 0) stringBuilder.AppendLine("---None"); // Display pinning header. Console.WriteLine("Colonies:"); // Display colony information. Console.WriteLine(stringBuilder.ToString()); |
It is recommended that all plates should be removed from the PIXL when it finishes a workflow. After a plate has been removed call the PlateRemoved method on the PIXLClient to notify the PIXL of all plates that have been removed.