PageRenderTime 66ms CodeModel.GetById 18ms app.highlight 20ms RepoModel.GetById 1ms app.codeStats 3ms

/AcquisitionInterface/bin/Release/API-1.0.xml

https://bitbucket.org/maccosslab/acquisitionwithqeapi
XML | 2666 lines | 2612 code | 54 blank | 0 comment | 0 complexity | a8c9e0b0ae87ae6418833e672630a8b6 MD5 | raw file

Large files files are truncated, but you can click here to view the full file

  1<?xml version="1.0"?>
  2<doc>
  3    <assembly>
  4        <name>API-1.0</name>
  5    </assembly>
  6    <members>
  7        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.AnalogTracePointEventArgs">
  8            <summary>
  9            This implementation of EventArgs carries an <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTracePoint"/>.
 10            </summary>
 11            <remarks>
 12            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer"/> for an example how this class can be used.
 13            <para>
 14            An instance of this class will be created by <see cref="E:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer.AnalogTracePointArrived"/>.
 15            </para>
 16            </remarks>
 17        </member>
 18        <member name="M:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.AnalogTracePointEventArgs.#ctor">
 19            <summary>
 20            Create a new <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.AnalogTracePointEventArgs"/>.
 21            </summary>
 22        </member>
 23        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.AnalogTracePointEventArgs.TracePoint">
 24            <summary>
 25            Get access to the analog trace point that has just arrived from the instrument.
 26            It has replaced already the LastValue in the <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer"/>.
 27            </summary>
 28        </member>
 29        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.IParameterDescription">
 30            <summary>
 31            This interface has information about a possible Set argument for an <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.InstrumentValues.IValue"/> or
 32            a property in a Scan parameter set.
 33            </summary>
 34            <remarks>
 35            An instance of this class will be created by <see cref="P:Thermo.Interfaces.InstrumentAccess_V1.Control.InstrumentValues.IValue.SetParameterDescription"/> or by
 36            <see cref="P:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans.PossibleParameters"/> or by
 37            IExactiveValue.Commands.
 38            </remarks>
 39        </member>
 40        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.IParameterDescription.Name">
 41            <summary>
 42            This is the name of the command/property this parameter description belongs to.
 43            </summary>
 44        </member>
 45        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.IParameterDescription.Selection">
 46            <summary>
 47            The selection is a little bit complicated. It can have these values:
 48            <list type="table">
 49            <listheader><description>value/example</description><description>description</description></listheader>
 50            <item><description>empty</description><description>This empty string is allowed and doesn't allow the user any selection</description></item>
 51            <item><description>string</description><description>This special value (verbatim "string") allows the user to enter an arbitrary string</description></item>
 52            <item><description>num1-num2</description><description>Integer selection between num1 and num2 inclusively</description></item>
 53            <item><description>num1.frac-num2.frac</description><description>Floating point selection between num1.frac and num2.frac inclusively, frac may be "0"</description></item>
 54            <item><description>selection1,selection2,...</description><description>lets the user select one of the shown values</description></item>
 55            </list>
 56            </summary>
 57        </member>
 58        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.IParameterDescription.DefaultValue">
 59            <summary>
 60            This value will be the default value for the argument or
 61            the empty string if it is unknown.
 62            </summary>
 63        </member>
 64        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.IParameterDescription.Help">
 65            <summary>
 66            This returns the empty string or some help about the command/property.
 67            </summary>
 68        </member>
 69        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer">
 70             <summary>
 71             All analog trace points of the instrument can be accessed by using this
 72             interface.
 73             <para>
 74             The last-seen value is accessible all the time but may change frequently.
 75             It is also possible to get notice of a new value as soon as it is accessible.
 76             </para>
 77             </summary>
 78             <remarks>
 79             An instance of this class will be created by <see cref="M:Thermo.Interfaces.InstrumentAccess_V1.IInstrumentAccess.GetAnalogTraceContainer(System.Int32)"/>.
 80             </remarks>
 81             <example>
 82             In the following example it is assumed that the instrument has two analog
 83             input devices as most Orbitrap systems and many other MS instruments have:
 84             <code>
 85             using System;
 86             using System.Collections.Generic;
 87             using System.Linq;
 88             using System.Text;
 89            
 90             using Thermo.Interfaces.ExactiveAccess_V1;
 91             using Thermo.Interfaces.InstrumentAccess_V1;
 92             using Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer;
 93            
 94             namespace UserAccess
 95             {
 96            		/// <summary>
 97            		/// This class displays the output of the analog channels when they arrive.
 98            		/// </summary>
 99            		internal class AnalogOutput
100            		{
101            			/// &lt;summary&gt;
102            			/// Create a new &lt;see cref="AnalogOutput"/&gt; and make sure two analog channels are observed.
103            			/// &lt;/summary&gt;
104            			/// &lt;param name="instrument"&gt;the instrument instance&lt;/param&gt;
105            			internal AnalogOutput(IInstrumentAccess instrument)
106            			{
107            				Analog1 = instrument.GetAnalogTraceContainer(0);
108            				Analog1.AnalogTracePointArrived += new EventHandler{AnalogTracePointEventArgs}(Instrument_AnalogTracePointArrived);
109            				Analog2 = instrument.GetAnalogTraceContainer(1);
110            				Analog2.AnalogTracePointArrived += new EventHandler{AnalogTracePointEventArgs}(Instrument_AnalogTracePointArrived);
111            			}
112            
113            			/// &lt;summary&gt;
114            			/// Cleanup this instance.
115            			/// &lt;/summary&gt;
116            			internal void CloseDown()
117            			{
118            				// Be tolerant to thread-switches
119            				IAnalogTraceContainer analogContainer;
120            
121            				analogContainer = Analog1;
122            				Analog1 = null;
123            				if (analogContainer != null)
124            				{
125            					analogContainer.AnalogTracePointArrived -= new EventHandler{AnalogTracePointEventArgs}(Instrument_AnalogTracePointArrived);
126            				}
127            
128            				analogContainer = Analog2;
129            				Analog2 = null;
130            				if (analogContainer != null)
131            				{
132            					analogContainer.AnalogTracePointArrived -= new EventHandler{AnalogTracePointEventArgs}(Instrument_AnalogTracePointArrived);
133            				}
134            			}
135            
136            			/// &lt;summary&gt;
137            			/// Access to the first analog container.
138            			/// &lt;/summary&gt;
139            			private IAnalogTraceContainer Analog1 { get; set; }
140            
141            			/// &lt;summary&gt;
142            			/// Access to the second analog container.
143            			/// &lt;/summary&gt;
144            			private IAnalogTraceContainer Analog2 { get; set; }
145            
146            			/// &lt;summary&gt;
147            			/// When an analog event arrives we dump the content.
148            			/// &lt;/summary&gt;
149            			/// &lt;param name="sender"&gt;used to identify the channel&lt;/param&gt;
150            			/// &lt;param name="e"&gt;content will be dumped&lt;/param&gt;
151            			private void Instrument_AnalogTracePointArrived(object sender, AnalogTracePointEventArgs e)
152            			{
153            				IAnalogTraceContainer analogTrace = sender as IAnalogTraceContainer;
154            				if (analogTrace != null)
155            				{
156            					Console.WriteLine("{0}: [{1} - {2}]: {3} at {4} s", analogTrace.DetectorClass, analogTrace.Minimum, analogTrace.Maximum, e.TracePoint.Value, e.TracePoint.Occurrence.TotalSeconds);
157            				}
158            			}
159            		}
160            	}
161             </code>
162             </example>
163        </member>
164        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer.DetectorClass">
165            <summary>
166            Get access to the detector class.
167            <para>
168            Example: The detector name may be "PDA", but "Analog Input Channel 1"
169            or something similar is also possible.
170            </para>
171            </summary>
172        </member>
173        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer.Minimum">
174            <summary>
175            Get access to the lowest possible value of the detector or analog input.
176            </summary>
177        </member>
178        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer.Maximum">
179            <summary>
180            Get access to the highest possible value of the detector or analog input.
181            </summary>
182        </member>
183        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer.UpdateFrequencyHz">
184            <summary>
185            Get access to acquisition frequency of the values. null is returned if the
186            system has no specific frequency. The value is returned in 1/s (Hertz).
187            </summary>
188        </member>
189        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer.LastValue">
190            <summary>
191            Get access to the last value seen in the system.
192            The value can be null initially.
193            </summary>
194        </member>
195        <member name="E:Thermo.Interfaces.InstrumentAccess_V1.AnalogTraceContainer.IAnalogTraceContainer.AnalogTracePointArrived">
196            <summary>
197            This event will be fired when a new analog value has been emitted by the
198            instrument. There may be no specific update frequency.
199            </summary>
200        </member>
201        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.MsScanContainer.IMsScanContainer">
202            <summary>
203            All MS scans of the instrument can be accessed by using this
204            interface.
205            <para>
206            The last-seen scan is accessible all the time but may change frequently.
207            It is also possible to get notice of a new scan as soon as it is accessible.
208            </para>
209            </summary>
210            <remarks>
211            An instance of this class will be created by <see cref="M:Thermo.Interfaces.InstrumentAccess_V1.IInstrumentAccess.GetMsScanContainer(System.Int32)"/>.
212            </remarks>
213            <example>
214            In the following example it is assumed that the instrument has at least one
215            MS device. Most functions and classes of this namesspace are used.
216            <code>
217            using System;
218            using System.Collections.Generic;
219            using System.Linq;
220            using System.Text;
221            
222            using Thermo.Interfaces.InstrumentAccess_V1;
223            using Thermo.Interfaces.InstrumentAccess_V1.MsScanContainer;
224            
225            namespace UserAccess
226            {
227            	/// &lt;summary&gt;
228            	/// This class presents the output of the scans being acquired by the instrument.
229            	/// &lt;/summary&gt;
230            	internal class ScansOutput
231            	{
232            		/// &lt;summary&gt;
233            		/// Crate a new &lt;see cref="ScansOutput"/&gt;
234            		/// &lt;/summary&gt;
235            		/// &lt;param name="instrument"&gt;the instrument instance&lt;/param&gt;
236            		internal ScansOutput(IInstrumentAccess instrument)
237            		{
238            			ScanContainer = instrument.GetMsScanContainer(0);
239            			Console.WriteLine("Detector class: " + ScanContainer.DetectorClass);
240            
241            			ScanContainer.AcquisitionStreamOpening += new EventHandler&lt;MsAcquisitionOpeningEventArgs&gt;(ScanContainer_AcquisitionStarted);
242            			ScanContainer.AcquisitionStreamClosing += new EventHandler(ScanContainer_AcquisitionEnded);
243            			ScanContainer.MsScanArrived += new EventHandler&lt;MsScanEventArgs&gt;(ScanContainer_ScanArrived);
244            		}
245            
246            		/// &lt;summary&gt;
247            		/// Show the last acquired scan if that exists and cleanup.
248            		/// &lt;/summary&gt;
249            		internal void CloseDown()
250            		{
251            			// Be tolerant to thread-switches
252            			IMsScanContainer scanContainer = ScanContainer;
253            			ScanContainer = null;
254            
255            			if (scanContainer != null)
256            			{
257            				scanContainer.MsScanArrived -= new EventHandler&lt;MsScanEventArgs&gt;(ScanContainer_ScanArrived);
258            				scanContainer.AcquisitionStreamClosing -= new EventHandler(ScanContainer_AcquisitionEnded);
259            				scanContainer.AcquisitionStreamOpening -= new EventHandler&lt;MsAcquisitionOpeningEventArgs&gt;(ScanContainer_AcquisitionStarted);
260            				using (IMsScan scan = scanContainer.GetLastMsScan())
261            				{
262            					DumpScan("GetLastScan()", scan);
263            				}
264            			}
265            		}
266            
267            		/// &lt;summary&gt;
268            		/// Access to the scan container hosted by this instance.
269            		/// &lt;/summary&gt;
270            		private IMsScanContainer ScanContainer { get; set; }
271            
272            		/// &lt;summary&gt;
273            		/// When a new acquisition starts we dump that information.
274            		/// &lt;/summary&gt;
275            		/// &lt;param name="sender"&gt;doesn't matter&lt;/param&gt;
276            		/// &lt;param name="e"&gt;doesn't matter&lt;/param&gt;
277            		private void ScanContainer_AcquisitionStarted(object sender, EventArgs e)
278            		{
279            			Console.WriteLine("START OF ACQUISITION");
280            		}
281            
282            		/// &lt;summary&gt;
283            		/// When an acquisitions ends we dump that information.
284            		/// &lt;/summary&gt;
285            		/// &lt;param name="sender"&gt;doesn't matter&lt;/param&gt;
286            		/// &lt;param name="e"&gt;doesn't matter&lt;/param&gt;
287            		private void ScanContainer_AcquisitionEnded(object sender, EventArgs e)
288            		{
289            			Console.WriteLine("END OF ACQUISITION");
290            		}
291            
292            		/// &lt;summary&gt;
293            		/// When a new scan arrives we dump that information in verbose mode.
294            		/// &lt;/summary&gt;
295            		/// &lt;param name="sender"&gt;doesn't matter&lt;/param&gt;
296            		/// &lt;param name="e"&gt;used to access the scan information&lt;/param&gt;
297            		private void ScanContainer_ScanArrived(object sender, MsScanEventArgs e)
298            		{
299            			Console.WriteLine("Scan arrived");
300            			// As an example we access all centroids
301            			using (IMsScan scan = e.GetScan())
302            			{
303            				DumpScan("Scan arrived", scan);
304            			}
305            		}
306            
307            		/// &lt;summary&gt;
308            		/// Dump a scan and prepend it with an intro string.
309            		/// &lt;/summary&gt;
310            		/// &lt;param name="intro"&gt;string to prepend&lt;/param&gt;
311            		/// &lt;param name="scan"&gt;thing to dump&lt;/param&gt;
312            		private void DumpScan(string intro, IMsScan scan)
313            		{
314            			StringBuilder sb = new StringBuilder();
315            			sb.AppendFormat(Instrument.Now.ToString(Program.TimeFormat));
316            			sb.Append(": ");
317            			sb.Append(intro);
318            			sb.Append(", ");
319            			if (scan == null)
320            			{
321            				sb.Append("(empty scan)");
322            				Console.WriteLine(sb.ToString());
323            				return;
324            			}
325            			else
326            			{
327            				sb.Append("detector=");
328            				sb.Append(scan.DetectorName);
329            				string id;
330            				if (scan.SpecificInformation.TryGetValue("Access Id:", out id))
331            				{
332            					sb.Append(", id=");
333            					sb.Append(id);
334            				}
335            				Console.WriteLine(sb.ToString());
336            			}
337            
338            			// This is rather noisy, dump all variables:
339            			DumpVars(scan);
340            
341            			Console.Write("  Noise: ");
342            			foreach (INoiseNode noise in scan.NoiseBand)
343            			{
344            				Console.Write("[{0}, {1}], ", noise.Mz, noise.Intensity);
345            			}
346            			Console.WriteLine();
347            
348            			// Not so useful:
349            			Console.WriteLine("{0} centroids, {1} profile peaks", scan.CentroidCount ?? 0, scan.ProfileCount ?? 0);
350            
351            			// Iterate over all centroids and access dump all profile elements for each.
352            			foreach (ICentroid centroid in scan.Centroids)
353            			{
354            				Console.WriteLine(" {0,10:F5}, I={1:E5}, C={2}, E={3,-5} F={4,-5} M={5,-5} R={6,-5}",
355            									centroid.Mz, centroid.Intensity, centroid.Charge ?? -1, centroid.IsExceptional, centroid.IsFragmented, centroid.IsMerged, centroid.IsReferenced);
356            				Console.Write("    Profile:");
357            				try
358            				{
359            					foreach (IMassIntensity profilePeak in centroid.Profile)
360            					{
361            						Console.Write(" [{0,10:F5},{1:E5}] ", profilePeak.Mz, profilePeak.Intensity);
362            					}
363            				}
364            				catch
365            				{
366            				}
367            				Console.WriteLine();
368            			}
369            		}
370            
371            		/// &lt;summary&gt;
372            		/// Dump all variables belonging to a scan
373            		/// &lt;/summary&gt;
374            		/// &lt;param name="scan"&gt;the scan for which to dump all variables&lt;/param&gt;
375            		private void DumpVars(IMsScan scan)
376            		{
377            			Console.WriteLine("  COMMON");
378            			DumpVars(scan.CommonInformation);
379            			Console.WriteLine("  SPECIFIC");
380            			DumpVars(scan.SpecificInformation);
381            		}
382            
383            		/// &lt;summary&gt;
384            		/// Dump all scan variables belonging to a specific container in a scan.
385            		/// &lt;/summary&gt;
386            		/// &lt;param name="container"&gt;container to dump all contained variables for&lt;/param&gt;
387            		private void DumpVars(IInfoContainer container)
388            		{
389            			foreach (string s in container.Names)
390            			{
391            				DumpVar(container, s);
392            			}
393            		}
394            
395            		/// &lt;summary&gt;
396            		/// Dump the content of a single variable to the console after testing the consistency.
397            		/// &lt;/summary&gt;
398            		/// &lt;param name="container"&gt;container that variable belongs to&lt;/param&gt;
399            		/// &lt;param name="name"&gt;name of the variable&lt;/param&gt;
400            		/// &lt;param name="sb"&gt;buffer to be reused for speed&lt;/param&gt;
401            		private void DumpVar(IInfoContainer container, string name)
402            		{
403            			object o = null;
404            			string s = null;
405            			MsScanInformationSource i = MsScanInformationSource.Unknown;
406            
407            			if (container.TryGetValue(name, out s, ref i))
408            			{
409            				// i should have a reasonable value now
410            				if (container.TryGetRawValue(name, out o, ref i))
411            				{
412            					Console.WriteLine("  {0}: type={1}, text='{2}', raw='{3}'",
413            						name, i, s, o);
414            				}
415            			}
416            		}
417            	}
418            }
419            </code>
420            </example>
421        </member>
422        <member name="M:Thermo.Interfaces.InstrumentAccess_V1.MsScanContainer.IMsScanContainer.GetLastMsScan">
423            <summary>
424            Get access to the last scan seen in the system.
425            The value can be null initially.
426            <para>
427            Note that accessing this property forces the consumer to dispose
428            the item as soon as possible in order to free its shared memory resources.
429            </para>
430            </summary>
431            <returns>The method returns the latest scan the framework is aware off. It may be null.</returns>
432        </member>
433        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.MsScanContainer.IMsScanContainer.DetectorClass">
434            <summary>
435            Get access to the detector class. The class should include describe
436            the instrument detector set precisely, although the individual
437            detector type of a scan uses only a part of the instrument set.
438            <para>
439            Example: The instrument name may be "Thermo Orbitrap Velos Pro", the
440            detector class may be "Hybrid LinearIonTrap Orbitrap" and the
441            scan detector name may be "LinearIonTrap".
442            </para>
443            </summary>
444        </member>
445        <member name="E:Thermo.Interfaces.InstrumentAccess_V1.MsScanContainer.IMsScanContainer.MsScanArrived">
446            <summary>
447            This event will be fired when a new scan has been emitted by the
448            instrument.
449            <para>
450            Any listener to this event must handle the event as fast as possible.
451            It is good practice by analyzing tool to enqueue the scan into
452            queue and process that queue in another thread.
453            </para>
454            </summary>
455        </member>
456        <member name="E:Thermo.Interfaces.InstrumentAccess_V1.MsScanContainer.IMsScanContainer.AcquisitionStreamOpening">
457            <summary>
458            This event will be fired when a new acquisition is started and the system
459            is about to open rawfiles, etc.
460            <para>
461            Scans may be created without an explicite acquisition if the instrument is
462            'just' set to running. An acquisition is not necessarily bound to a
463            rawfile, but it is in most cases.
464            </para>
465            <para>
466            The specific information of a scan will reflect the information whether
467            a scan belongs to an acquisition or not.
468            </para>
469            </summary>
470        </member>
471        <member name="E:Thermo.Interfaces.InstrumentAccess_V1.MsScanContainer.IMsScanContainer.AcquisitionStreamClosing">
472            <summary>
473            This event will be fired when the current acquisition ended.
474            <para>
475            Scans may be created without an explicite acquisition, so further scans may
476            arrive after an acquisition stopped. It may even be possible that few scans
477            belonging to the last acquisition may arrive and that an opened rawfile
478            will gather them because of a flushing data queue on the transport layer.
479            </para>
480            <para>
481            The specific information of a scan will reflect the information whether
482            a scan belongs to an acquisition or not.
483            </para>
484            </summary>
485        </member>
486        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScanDefinition">
487            <summary>
488            This interface covers the functionality to define a custom or repeating scan.
489            </summary>
490            <remarks>
491            This is a base interface of <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.ICustomScan"/> and <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IRepeatingScan"/>.
492            </remarks>
493        </member>
494        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScanDefinition.Values">
495            <summary>
496            Get access to the value set. Any value nor defined will be replaced by the
497            value defined in the default scan.
498            <para>
499            Illegal values will be ignored, values out of range will not be accepted.
500            </para>
501            <para>
502            The set of possible values can be queried by accessing PossibleParameters
503            in <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans"/>. The key must be an <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.IParameterDescription"/> Name,
504            the value must match the Selection definition.
505            </para>
506            </summary>
507        </member>
508        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScanDefinition.RunningNumber">
509            <summary>
510            This number will be passed along with the scan job and can be used
511            to identify it later when the acquired scan results arrive.
512            0 is a reserved value. The default value is 1.
513            </summary>
514        </member>
515        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Methods.NamespaceDoc">
516            <summary>
517            This namespace covers the functionality that a user may have to manipulate methods of an instrument.
518            These manipulations can be applied to the running acquisition.
519            <para>
520            Most functionality in this namespace is accessible offline.
521            </para>
522            <para>
523            Obtain <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.IControl"/>.<see cref="P:Thermo.Interfaces.InstrumentAccess_V1.Control.IControl.Methods"/>
524            to create the desired base class.
525            </para>
526            </summary>
527        </member>
528        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.StateChangedEventArgs">
529            <summary>
530            This implementation of EventArgs carries an <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IState"/>.
531            </summary>
532            <remarks>
533            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition"/> for an example how this class can be used.
534            <para>
535            An instance of this class will be created by <see cref="E:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition.StateChanged"/>.
536            </para>
537            </remarks>
538        </member>
539        <member name="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.StateChangedEventArgs.#ctor">
540            <summary>
541            Create a new <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.StateChangedEventArgs"/>.
542            </summary>
543        </member>
544        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.StateChangedEventArgs.State">
545            <summary>
546            Get access to the current state of the instrument.
547            It has replaced already the State in the <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition"/>.
548            </summary>
549        </member>
550        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.Modes.IOnMode">
551            <summary>
552            This mode lets an instrument enter the On state or change the behaviour in the On state.
553            The request may be rejected if the instrument is in a state that should not be disturbed. See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.Modes.IForcedStandbyMode"/>.
554            </summary>
555            <remarks>
556            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition"/> for an example how this interface can be used.
557            <para>
558            An instance of this class will be created by <see cref="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition.CreateOnMode"/>.
559            </para>
560            </remarks>
561        </member>
562        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.Modes.IMode">
563            <summary>
564            A mode is a more or less complex information that selects a new operation mode of an instrument.
565            </summary>
566        </member>
567        <member name="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.Modes.IMode.ToString">
568            <summary>
569            This is an informational description of the new mode.
570            </summary>
571            <returns>The returned string gives a short description of the mode.</returns>
572        </member>
573        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.Modes.IMode.AdditionalValues">
574            <summary>
575            Get access to a collection of additional values. This will not be used in most cases.
576            </summary>
577        </member>
578        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.Modes.IForcedOffMode">
579            <summary>
580            This mode lets an instrument enter the Off state. The request will be honoured even if the
581            instrument is within an acquisition or another state where it is usually better to continue.
582            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.Modes.IForcedOffMode"/>.
583            </summary>
584            <remarks>
585            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition"/> for an example how this interface can be used.
586            <para>
587            An instance of this class will be created by <see cref="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition.CreateForcedOffMode"/>.
588            </para>
589            </remarks>
590        </member>
591        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.ChangeResult">
592            <summary>
593            Defines the result of a requested instrument mode change.
594            </summary>
595            <remarks>
596            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition"/> for an example how this enumeration can be used.
597            </remarks>
598        </member>
599        <member name="F:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.ChangeResult.Submitted">
600            <summary>
601            This state change request has been submitted to the instrument. The instrument itself may dishonour this request
602            if the needed condition to apply the state change request have changed between the submitting and the arrival
603            in the instrument.
604            </summary>
605        </member>
606        <member name="F:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.ChangeResult.InstrumentDisconnected">
607            <summary>
608            The instrument is disconnected.
609            </summary>
610        </member>
611        <member name="F:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.ChangeResult.IllegalValues">
612            <summary>
613            The state change request has illegal values.
614            </summary>
615        </member>
616        <member name="F:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.ChangeResult.UnknownRequestType">
617            <summary>
618            The state change request is of an unknown type. Use <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.IAcquisition"/> to generate a valid type.
619            </summary>
620        </member>
621        <member name="F:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.ChangeResult.ForeignControl">
622            <summary>
623            The instrument is under exclusive use of a different component or software package.
624            </summary>
625        </member>
626        <member name="F:Thermo.Interfaces.InstrumentAccess_V1.Control.Acquisition.ChangeResult.IllegalOperationState">
627            <summary>
628            The instrument is not in the proper condition to accept the state change request.
629            </summary>
630        </member>
631        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.IError">
632            <summary>
633            An IError describes an error coming from the instrument during an acquisition.
634            This interface will not be used for status reports or messages of the
635            transport layer.
636            </summary>
637            <remarks>
638            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.ErrorsArrivedEventArgs"/> for an example how this interface can be used.
639            <para>
640            An instance of this class will be created by <see cref="P:Thermo.Interfaces.InstrumentAccess_V1.ErrorsArrivedEventArgs.Errors"/>.
641            </para>
642            </remarks>
643        </member>
644        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.IError.Content">
645            <summary>
646            The textual content of the error.
647            </summary>
648        </member>
649        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.IError.Occurrence">
650            <summary>
651            The time difference between acquisition start and this error occurred.
652            </summary>
653        </member>
654        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.ICustomScan">
655            <summary>
656            This scan definition can be placed in the instrument's
657            job queue with individual properties. A custom scan will
658            be executed only once.
659            </summary>
660            <remarks>
661            See <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans"/> for an example how this interface can be used.
662            <para>
663            An instance of this class will be created by <see cref="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans.CreateCustomScan"/>.
664            </para>
665            </remarks>
666        </member>
667        <member name="P:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.ICustomScan.SingleProcessingDelay">
668            <summary>
669            The instrument will not execute any further custom scan
670            if this property is positive until the delay has expired
671            or a new custom scan has been defined.
672            <para>
673            The unit of this property is seconds and possible values are
674            between 0 and 600 inclusively. The default value is 0.
675            </para>
676            </summary>
677        </member>
678        <member name="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans">
679            <summary>
680            This interface allows the control over the next scan to be performed by the
681            instrument with or without a method.
682            <para>
683            Either this interface or the <see cref="T:Thermo.Interfaces.InstrumentAccess_V1.Control.Methods.IMethods"/> interface should be used.
684            </para>
685            </summary>
686            <remarks>
687            An instance of this class will be created by <see cref="M:Thermo.Interfaces.InstrumentAccess_V1.Control.IControl.GetScans(System.Boolean)"/>.
688            <para>
689            Using this interface allows one to insert some scans in the normal flow of
690            operation. It has several three layers of execution.
691            </para>
692            <para>
693            The lowest layer is defined by the instrument. It performs those steps that
694            are defined elsewhere, this can be either method execution, tuning or other things.
695            </para>
696            <para>
697            The next layer that has a higher priority is the repeated scans layer which are
698            defined here. If they are set they will be executed instead of the previous layer.
699            A further Set call replaces the previous repition. A Cancel call will stop
700            the repetition and operation falls back one layer. A custom scan can still be
701            defined, though. The repition can be switched on and off on demand as often
702            as desired.
703            </para>
704            <para>
705            The most prioritized layer is that of custom scans. They will be executed before
706            any furcher scan defined in the other layers. However, a Set operation may result
707            in undefined behaviour (but no system fault happens) if the previous scan has not been
708            started yet. It is best to avoid this situation. The custom scan will be scheduled and
709            the AcceptsNextScan event will be fired at the next possible point in time. If a
710            custom scan has a delay time set the instrument will wait this additional time
711            until it falls back to a lower layer; either the repetition scans if they are
712            defined or the normal operation mode.
713            </para>
714            </remarks>
715            <example>
716            The following code illustrates the use of most functionality in this namespace.
717            A running acquisition (Press "On" in Tune) will be modified so that the polarity
718            will be toggled between each scan.
719            <code>
720            using System;
721            using System.Collections.Generic;
722            using System.Linq;
723            using System.Text;
724            using System.Threading;
725            using System.Globalization;
726            
727            using Thermo.Interfaces.InstrumentAccess_V1;
728            using Thermo.Interfaces.InstrumentAccess_V1.Control;
729            using Thermo.Interfaces.InstrumentAccess_V1.Control.Scans;
730            
731            namespace UserAccess
732            {
733                /// &lt;summary&gt;
734                /// This class demonstrates the use of the &lt;see cref="IScans"/&gt; interface.
735                /// &lt;/summary&gt;
736                internal class ScansTest : IDisposable
737                {
738                    private IScans m_scans;
739                    private bool m_startCustomScan = true;
740                    private object m_lock = new object();
741                    private int m_disposed;
742                    private long m_runningNumber = 12345;	// start with an offset to make sure it's "us"
743                    private int m_polarity = 0;
744                    
745                    /// &lt;summary&gt;
746                    /// Create a new &lt;see cref="ScansTest"/&gt; and start the performance test immediately.
747                    /// &lt;/summary&gt;
748                    /// &lt;param name="instrument"&gt;the instrument instance&lt;/param&gt;
749                    /// &lt;param name="arguments"&gt;program arguments&lt;/param&gt;
750                    internal ScansTest(IInstrumentAccess instrument)
751                    {
752                        m_scans = instrument.Control.GetScans(false);
753                        m_scans.CanAcceptNextCustomScan += new EventHandler(Scans_CanAcceptNextCustomScan);
754                        m_scans.PossibleParametersChanged += new EventHandler(Scans_PossibleParametersChanged);
755                        
756                        DumpPossibleParameters();
757                        bool startNewScan = false;
758                        lock (m_lock)
759                        {
760                            if (m_scans.PossibleParameters.Length &gt; 0)
761                            {
762                                startNewScan = m_startCustomScan;
763                                m_startCustomScan = false;
764                            }
765                        }
766                        
767                        if (startNewScan)
768                        {
769                            StartNewScan();
770                        }
771                    }
772                    
773                    /// &lt;summary&gt;
774                    /// The final destructor releases allocated system resources.
775                    /// &lt;/summary&gt;
776                    ~ScansTest()
777                    {
778                        // Let the GC dispose managed members itself.
779                        Dispose(false);
780                    }
781                
782                    /// &lt;summary&gt;
783                    /// Clean up any resources being used.
784                    /// &lt;/summary&gt;
785                    /// &lt;param name="disposeEvenManagedStuff"&gt;true to dispose managed and unmanaged resources; false to dispose unmanaged resources&lt;/param&gt;
786                    protected void Dispose(bool disposeEvenManagedStuff)
787                    {
788                        // prevent double disposing
789                        if (Interlocked.Exchange(ref m_disposed, 1) != 0)
790                        {
791                            return;
792                        }
793                    
794                        if (disposeEvenManagedStuff)
795                        {
796                            if (m_scans != null)
797                            {
798                                m_scans.CanAcceptNextCustomScan -= new EventHandler(Scans_CanAcceptNextCustomScan);
799                                m_scans.PossibleParametersChanged -= new EventHandler(Scans_PossibleParametersChanged);
800                                m_scans.Dispose();
801                                m_scans = null;
802                            }
803                        }
804                    }
805                    
806                    /// &lt;summary&gt;
807                    /// Clean up any resources being used.
808                    /// &lt;/summary&gt;
809                    virtual public void Dispose()
810                    {
811                        // Dispose managed and unmanaged resources and tell GC we don't need the destructor getting called.
812                        Dispose(true);
813                        GC.SuppressFinalize(this);
814                    }
815                    
816                    /// &lt;summary&gt;
817                    /// Get access to the flag whether this object is disposed.
818                    /// &lt;/summary&gt;
819                    internal bool Disposed { get { return m_disposed != 0; } }
820                    
821                    /// &lt;summary&gt;
822                    /// Dump the list of possible commands.
823                    /// &lt;/summary&gt;
824                    private bool DumpPossibleParameters()
825                    {
826                        IParameterDescription[] parameters = m_scans.PossibleParameters;
827                        if (parameters.Length == 0)
828                        {
829                            Console.WriteLine("No possible IScans parameters known.");
830                            return false;
831                        }
832                        
833                        Console.WriteLine("IScans parameters:");
834                        foreach (IParameterDescription parameter in parameters)
835                        {
836                            StringBuilder sb = new StringBuilder();
837                            sb.AppendFormat("   '{0}' ", parameter.Name);
838                            if (parameter.Selection == "")
839                            {
840                                sb.AppendFormat("doesn't accept an argument, help: {0}", parameter.Help);
841                            }
842                            else
843                            {
844                                sb.AppendFormat("accepts '{0}', default='{1}', help: {2}", parameter.Selection, parameter.DefaultValue, parameter.Help);
845                            }
846                            Console.WriteLine(sb.ToString());
847                        }
848                        return true;
849                    }
850                
851                    /// &lt;summary&gt;
852                    /// Start a new custom scan.
853                    /// &lt;/summary&gt;
854                    private void StartNewScan()
855                    {
856                        ICustomScan cs = m_scans.CreateCustomScan();
857                        cs.RunningNumber = m_runningNumber++;
858                        
859                        // Allow an extra delay of 500 ms, we will answer as fast as possible, so this is a maximum value.
860                        cs.SingleProcessingDelay = 0.50D;
861                        
862                        // Toggle the polarity:
863                        m_polarity = (m_polarity == 0) ? 1 : 0;
864                        cs.Values["pol"] = m_polarity.ToString(NumberFormatInfo.InvariantInfo);
865                        
866                        try
867                        {
868                            DateTime now = Instrument.Now;
869                            if (!m_scans.SetCustomScan(cs))
870                            {
871                                Console.WriteLine("NEW CUSTOM SCAN HAS NOT BEEN PLACED, CONNECTION TO SERVICE BROKEN.");
872                            }
873                            Console.WriteLine(now.ToString(Program.TimeFormat) + ": Placed a new custom scan(" + cs.RunningNumber + ")");
874                        }
875                        catch (Exception e)
876                        {
877                            Console.WriteLine("PLACING A NEW SCAN: " + e.Message);
878                        }
879                    }
880                    
881                    /// &lt;summary&gt;
882                    /// Called when the current custom scan has been processed and the next custom scan can be accepted.
883                    /// We start a new scan.
884                    /// &lt;/summary&gt;
885                    /// &lt;param name="sender"&gt;doesn't matter&lt;/param&gt;
886                    /// &lt;param name="e"&gt;doesn't matter&lt;/param&gt;
887                    private void Scans_CanAcceptNextCustomScan(object sender, EventArgs e)
888                    {
889                        Console.WriteLine(Instrument.Now.ToString(Program.TimeFormat) + ": CanAcceptNextCustomScan");
890                        if ((m_scans != null) &amp;&amp; (m_scans.PossibleParameters.Length &gt; 0))
891                        {
892                            // Assume we are able to place a new scan.
893                            StartNewScan();
894                        }
895                    }
896                  
897                    /// &lt;summary&gt;
898                    /// Called when the list of possible commands have changed we dump them.
899                    /// Additionally we start a new scan.
900                    /// &lt;/summary&gt;
901                    /// &lt;param name="sender"&gt;doesn't matter&lt;/param&gt;
902                    /// &lt;param name="e"&gt;doesn't matter&lt;/param&gt;
903                    private void Scans_PossibleParametersChanged(object sender, EventArgs e)
904                    {
905                        if (!DumpPossibleParameters())
906                        {
907                            return;
908                        }
909                     
910                        bool startNewScan = false;
911                        lock (m_lock)
912                        {
913                            if (m_scans.PossibleParameters.Length &gt; 0)
914                            {
915                                startNewScan = m_startCustomScan;
916                                m_startCustomScan = false;
917                            }
918                        }
919                        
920                        if (startNewScan)
921                        {
922                            StartNewScan();
923                        }
924                    }
925                }
926            }    
927            </code>
928            </example>
929        </member>
930        <member name="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans.SetRepetitionScan(Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IRepeatingScan)">
931            <summary>
932            Define or replace the repetition scan to be performed.
933            <para>
934            The scan may be partially defined in which case the properties of the previously
935            executed scan will be used. At least one property needs to be specified.
936            </para>
937            </summary>
938            <param name="scan">object containing new default scan definitions</param>
939            <returns>true if the command has been sent to the instrument, false otherwise</returns>
940        </member>
941        <member name="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans.CancelRepetition">
942            <summary>
943            Cancels any repetition of scans that have been defined by <see cref="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans.SetRepetitionScan(Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IRepeatingScan)"/>.
944            </summary>
945            <returns>true if the command has been sent to the instrument, false otherwise</returns>
946        </member>
947        <member name="M:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans.SetCustomScan(Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.ICustomScan)">
948            <summary>
949            Define a scan to be performed next. The current standard operation (method, prepetition scan, etc)
950            will continue after this scan and maybe following custom scans have been acquired.
951            <para>
952            The operation on the instrument is undefined if several custom scans are set without having the
953            instrument dealt with the previous custom scans. However, the instrument will not stop
954            to run, choke or show any other fatal error.
955            </para>
956            <para>
957            The event <see cref="E:Thermo.Interfaces.InstrumentAccess_V1.Control.Scans.IScans.CanAcceptNextCustomScan"/> is fired once after the instrument has processed a
958            custom scan. The further custom scan can be set then or within the delay time that
959            might haveā€¦

Large files files are truncated, but you can click here to view the full file