public FusionBridge(string debugMzML, string logDir, bool showConsoleLogs) { Logs = new List <string>(); LogDir = logDir; ShowConsoleLogs = showConsoleLogs; IFusionInstrumentAccessContainer fusionContainer = null; if (!String.IsNullOrEmpty(debugMzML)) // create fake Fusion container that reads from mzML file { WriteLog("FusionBridge constructor called in debug mode"); WriteLog(string.Format("Reading scans from {0}", debugMzML)); fusionContainer = new MzMLFusionContainer(debugMzML); } else // needs license to connect to the real instrument { //// Use the Factory creation method to create a Fusion Access Container WriteLog("FusionBridge constructor called"); fusionContainer = getIFusionInstrumentAccessContainer(); } // Connect to the service by going 'online' fusionContainer.StartOnlineAccess(); // Wait until the service is connected // (better through the event, but this is nice and simple) while (!fusionContainer.ServiceConnected) { ; } // From the instrument container, get access to a particular instrument InstrumentAccess = fusionContainer.Get(1); ScanContainer = InstrumentAccess.GetMsScanContainer(0); WriteLog("Detector class: " + ScanContainer.DetectorClass); // Dump key-value pairs in cs.Values WriteLog("Custom scan parameters: "); InstrumentControl = InstrumentAccess.Control; ScanControl = InstrumentControl.GetScans(false); ICustomScan cs = ScanControl.CreateCustomScan(); foreach (KeyValuePair <string, string> kvp in cs.Values) { string kvpString = string.Format("- cs.Values\tKey = {0}, Value = {1}", kvp.Key, kvp.Value); WriteLog(kvpString); } // Print instrument state WriteLog("FusionBridge constructor initialised"); IState state = InstrumentControl.Acquisition.State; string msg = string.Format("System mode = {0}, system state = {1}", state.SystemMode, state.SystemState); WriteLog(msg); }
public bool CreateCustomScan(long runningNumber, double precursorMass, double isolationWidth, double collisionEnergy, int msLevel, string polarity, double firstMass, double lastMass, double singleProcessingDelay) { WriteLog(String.Format("Placing a custom scan (runningNumber={0}, singleProcessingDelay={1})", runningNumber, singleProcessingDelay)); // TODO: validate input if (ScanControl.PossibleParameters.Length > 0) { ICustomScan cs = ScanControl.CreateCustomScan(); cs.RunningNumber = runningNumber; // Allow an extra delay of 500 ms, we will answer as fast as possible, so this is a maximum value. cs.SingleProcessingDelay = singleProcessingDelay; // Set the custom scan parameters cs.Values["CollisionEnergy"] = collisionEnergy.ToString(); cs.Values["FirstMass"] = firstMass.ToString(); cs.Values["LastMass"] = lastMass.ToString(); cs.Values["Analyzer"] = "Orbitrap"; cs.Values["Polarity"] = polarity; cs.Values["IsolationWidth"] = isolationWidth.ToString(); cs.Values["PrecursorMass"] = precursorMass.ToString(); if (msLevel == 1) { cs.Values["ScanType"] = "Full"; cs.Values["OrbitrapResolution"] = "120000"; } else { cs.Values["ScanType"] = "MSn"; cs.Values["OrbitrapResolution"] = "7500"; } cs.Values["ActivationType"] = "HCD"; cs.Values["DataType"] = "Centroid"; cs.Values["AGCTarget"] = "30000"; cs.Values["MaxIT"] = "100"; cs.Values["Microscans"] = "3"; // Dump key-value pairs in cs.Values foreach (KeyValuePair <string, string> kvp in cs.Values) { string msg = string.Format("- cs.Values\tKey = {0}, Value = {1}", kvp.Key, kvp.Value); WriteLog(msg); } try { if (!ScanControl.SetCustomScan(cs)) { WriteLog(String.Format("FAILED to place a custom scan (runningNumber={0}): connection to service broken!!", cs.RunningNumber)); return(false); } else { if (cs.Values["ScanType"] == "Full") { WriteLog(String.Format("Successfully placed a custom fullscan scan (runningNumber={0})", cs.RunningNumber)); } else if (cs.Values["ScanType"] == "MSn") { WriteLog(String.Format("Successfully placed a custom MSn scan (runningNumber={0})", cs.RunningNumber)); } return(true); } } catch (Exception e) { WriteLog(String.Format("FAILED to place a custom scan (runningNumber={0}): {1}", cs.RunningNumber, e.Message)); WriteLog(String.Format("Stacktrace: {0}", e.StackTrace)); throw; } } else { WriteLog(String.Format("FAILED to place a custom scan (runningNumber={0}): no parameters available!!", runningNumber)); return(false); } }