Brain Vision Analyzer OLE Automation Referenzhandbuch Version 1.05 © Brain Products GmbH 1999 - 2004 Der Inhalt dieses Handbuchs ist geistiges Eigentum der Brain Products GmbH. Er kann ohne besondere Ankündigung geändert werden. Die Brain Products GmbH übernimmt keine Gewähr oder Haftung für die Richtigkeit einzelner Aussagen bzw. geht mit diesem Dokument keine Verpflichtung ein. Alle in diesem Dokument aufgeführten Warenzeichen sind geschützte Marken ihrer jeweiligen Inhaber. 2 Inhalt 1. Übersicht ....................................................................................................................................4 2. Objekt-Hierarchie.......................................................................................................................5 3. Objektklassen ............................................................................................................................5 3.1. 3.2. 3.3. 3.4. 3.5. 3.6. 3.7. 3.8. 3.9. 3.10. 3.11. 3.12. 3.13. 3.14. 3.15. 3.16. 3.17. 3.18. 3.19. 3.20. 3.21. 3.22. 3.23. 3.24. 3.25. 3.26. 4. Aufrufbare Transformationen ................................................................................................30 4.1. 4.2. 4.3. 5. Band-rejection Filters (Bandsperrfilter) .................................................................................31 Filters (Filter) .........................................................................................................................32 Formula Evaluator (Formelauswerter) ..................................................................................33 Aufzählungstypen ...................................................................................................................34 5.1. 5.2. 5.3. 5.4. 6. Application ...............................................................................................................................5 Channel ...................................................................................................................................7 ChannelPosition ......................................................................................................................8 Channels .................................................................................................................................8 CurrentWorkspace ..................................................................................................................8 Dataset ....................................................................................................................................9 FastArray ...............................................................................................................................11 HistoryExplorer ......................................................................................................................15 HistoryFile .............................................................................................................................15 HistoryFiles............................................................................................................................16 HistoryNode ..........................................................................................................................17 HistoryNodes .........................................................................................................................19 HistoryTemplateNode ...........................................................................................................19 Landmark ..............................................................................................................................19 Landmarks.............................................................................................................................19 Marker ...................................................................................................................................20 Markers .................................................................................................................................20 NewHistoryNode ...................................................................................................................20 ProgressBar ..........................................................................................................................24 Segment ................................................................................................................................25 Segments ..............................................................................................................................25 Transformation ......................................................................................................................25 Window..................................................................................................................................27 Windows ................................................................................................................................28 Workspace ............................................................................................................................29 Workspaces...........................................................................................................................29 VisionDataType .....................................................................................................................34 VisionDataUnit ......................................................................................................................34 VisionSegType ......................................................................................................................34 VisionLayerIncFunction .........................................................................................................34 Fehlercodes .............................................................................................................................35 Vision Analyzer OLE Automation Referenzhandbuch 3 1. Übersicht Der Vision Analyzer lässt sich über OLE Automation steuern. Das geschieht entweder über den eingebauten Basic-Interpreter, oder aber über externe Programme. Der Programm-ID (ProgID) für den externen Zugriff auf den Analyzer lautet "VisionAnalyzer.Application". Der Analyzer enthält eine registrierte Typenbibliothek. Diese Typenbibliothek ist gespeichert in "Analyzer.exe". Der Eintrag der Typenbibliothek in der Registry ist "Vision Analyzer x.x Type Library", wobei "x.x" für die aktuelle Version steht. 4 2. Objekt-Hierarchie Die folgende Abbildung zeigt die Objekt-Hierarchie im Analyzer. Sie dient der Orientierung im Zusammenhang mit der Objektklassenbeschreibung im folgenden Kapitel. Application CurrentWorkspace FastArray HistoryExplorer NewHistoryNode HistoryFiles (HistoryFile) ProgressBar HistoryNodes (HistoryNode) DataSet Channels (Channel) ChannelPosition Markers (Marker) HistoryNodes (HistoryNode) Segments (Segment) DataSet ... Windows (Window) ... Transformation Windows (Window) HistoryNode ... Workspaces (Workspace) Legende Objekt und Auflistung Nur Objekt Abbildung 1: Objekt-Hierarchie 3. Objektklassen Die Objektklassen werden in der üblichen Basic-Syntax beschrieben. Das heißt jedoch nicht, dass sie nicht auch mit anderen Programmiersprachen ansprechbar sind. Die "Auflistungen" (engl. Collections) dienen als Container für Objekte. Die Objekte können über eine Indexnummer indiziert werden, wobei der erste Index immer 1 und nicht 0 ist. Einige Auflistungen erlauben auch die Indizierung über den Namen oder Titel des gesuchten Objekts. Das ist allerdings nur machbar, wenn der Name nur einmal in der Auflistung vertreten ist. Eine andere Möglichkeit Auflistungen zu durchlaufen, ist der "For Each"-Befehl in Basic. Der erste Index in den Datenfeldern (engl. Arrays) ist ebenfalls 1. Die meisten Objekte verfügen über ein so genanntes Standardelement. Dabei handelt es sich um eine Methode oder Eigenschaft, die nicht explizit erwähnt werden muss. Beim "Channel"-Objekt handelt es sich z.B. um die Eigenschaft "DataPoint". Daher sind die folgenden Befehlssequenzen gleichwertig: fValue = Channels(1).DataPoint(1) fValue = Channels(1)(1) 3.1. Application Beschreibung Vision Analyzer OLE Automation Referenzhandbuch 5 Von der Application-Klasse gibt es nur ein Objekt, das das Programm als ganzes repräsentiert. Es ist das Standardobjekt, was bedeutet, dass die Methoden und Eigenschaften dieses Objekts direkt ansprechbar sind, d.h. z.B. "Visible" entspricht "Application.Visible". Methoden Function Ask(Text as String) as Long Stellt eine Frage, die mit Ja/Nein beantwortet werden kann. Liefert je nach Antwort "vbYes" (6) oder "vbNo" (7) zurück. Diese Funktion ist nützlich für Basic-Skripts in History-Vorlagen, da sie bei der Umleitung von Meldungen in Log-Dateien im Gegensatz zur eingebauten Funktion "MsgBox" ebenfalls berücksichtigt werden. Sub ExecuteMenuItem(MenuItem as String) Führt einen Menüpunkt aus. Dieser wird als Text eingegeben. Beispielsweise kann die FilterTransformation mit ExecuteMenuItem "transformations\filters" oder ExecuteMenuItem "Transformations\Filters" aufgerufen werden. Groß-/Kleinschreibung, sowie Leerzeichen und Punkte im Menü-Text werden ignoriert. Function Message(Text as String) as Long Gibt einen Text aus, der mit Ok/Abbrechen quittiert werden kann. Liefert je nach Antwort "vbOk" (1) oder "vbCancel" (2) zurück. Diese Funktion wird ebenso wie "Ask" beim Umleiten von Meldungen in Log-Dateien berücksichtigt. Sub MessageStatus(Text as String) Gibt einen Text in der Statuszeile aus. Sub Quit() Beendet das Programm. Eigenschaften ActiveTemplateNode As HistoryTemplateNode Schreibgeschützt Falls sich der Analyzer bei der Abarbeitung einer Vorlage befindet, beschreibt dieses Objekt den aktuell abgearbeitenen Vorlagen-Knoten. ActiveWindow As Window Schreibgeschützt Das aktive Fenster im Arbeitsbereich des Analyzers. Wenn kein Fenster geöffnet ist, ist dieser Wert "Nothing" (in anderen Programmiersprachen u.a. NULL bzw. NIL). CurrentWorkspace As CurrentWorkspace Schreibgeschützt Aktueller Workspace HistoryExplorer As HistoryExplorer Schreibgeschützt Der History-Explorer HistoryFiles As HistoryFiles Schreibgeschützt Auflistung aller History-Dateien InstalledComponents as String Schreibgeschützt Installierte Komponenten als Text TemplateMode As Boolean Flag, wenn "True" (-1), befindet sich das Programm bei der Ausführung einer Vorlage. Version As Double Schreibgeschützt Gibt die aktuelle Programmversion an Visible As Boolean Flag, wenn "False" (0), dann ist das Programm nicht sichtbar. Windows As Windows Schreibgeschützt Auflistung aller Arbeitsfenster WorkFileFolder As String Schreibgeschützt 6 Verzeichnis der Arbeitsdateien Workspaces As Workspaces Schreibgeschützt Auflistung aller Workspaces im Verzeichnis der Arbeitsdateien 3.2. Channel Beschreibung Dieses Objekt beschreibt einen Kanal in einem History-Knoten. Da "DataPoint" das Standardelement ist, kann auf einen einzelnen Datenpunkt sehr einfach zugegriffen werden. Beispiel: Dim fValue As Single Dim hn As HistoryNode Dim hf As HistoryFile Dim ch As Channel Set hf = HistoryFiles(1) ' Erste History-Ddatei. hf.Open Set hn = hf(1) ' Erster Datensatz Set ch = hn.Dataset(1) ' Erster Kanal f Value = ch(1) ' Erster Datenpunkt Set ch = hn.Dataset("FP1") ' Alternativer Zugriff über den Kanalnamen. f Value = ch(1) ' Erster Datenpunkt hf.Close Alternative Kurzfassung: Dim fValue As Single HistoryFiles(1).Open fValue = HistoryFiles(1)(1).Dataset(1)(1) HistoryFiles(1).Close Falls größere Datenmengen gelesen werden sollen, empfiehlt sich aus Geschwindigkeitsgründen das einmalige Einlesen eines Vektors mit "GetData()". Beispiel: Dim fVector() As Single ch.GetData(1, 1000, fVector) Noch erheblich schneller geht das Einlesen mehrerer Kanäle mit Dataset.GetData(). Weitere Einzelheiten hierzu finden Sie unter Dataset. Methoden Sub GetData(Position As Long, Points As Long, Data() As Single) Liest einen Datenvektor in "Data()" ein, beginnend ab "Position". Die Anzahl der Datenpunkte, die eingelesen werden, bestimmt "Points". Falls es sich bei dem Datensatz um komplexe Daten handelt, hat jeder Datenpunkt zwei Werte, der erste Wert ist der reelle Anteil, und der zweite der Imaginäranteil der Zahl, d.h. z.B. "Data(1)" ist der reelle Anteil des ersten Datenpunktes, "Data(2)" der imaginäre. Der zweite Datenpunkt belegt nun "Data(3)", "Data(4)" usw.. Eigenschaften DataPoint(Index As Long) As Single Standardelement, schreibgeschützt Datenpunkt, der Index gibt die Position im Datensatz an (1-...). Im Falle, dass es sich beim Datensatz um komplexe Daten handelt, gibt diese Variable den reellen Anteil der komplexen Zahl an. DataPointLayered(Index As Long, Layer As Long) As Single schreibgeschützt Diese Eigenschaft entspricht "DataPoint", allerdings kann für Daten mit mehreren Ebenen (wie z.B. bei kontinuierlichen Wavelets) zusätzlich die Ebene ("Layer") angegeben werden. ImgPoint(Index As Long) As Single Vision Analyzer OLE Automation Referenzhandbuch 7 Schreibgeschützt Imaginäranteil einer komplexen Zahl, wenn der Datentyp komplex ist. Der Index gibt die Position im Datensatz an. ImgPointLayered(Index As Long, Layer As Long) As Single Schreibgeschützt Diese Eigenschaft entspricht "ImgPoint", allerdings kann für Daten mit mehreren Ebenen (wie z.B. bei kontinuierlichen Wavelets) zusätzlich die Ebene ("Layer") angegeben werden. Name As String Schreibgeschützt Kanalname Position As ChannelPosition Schreibgeschützt Kopfposition des Kanals. ReferenceChannel As String Schreibgeschützt Referenzkanalname Unit As VisionDataUnit Schreibgeschützt Einheit der Daten in diesem Kanal, wie z.B. μV, μV2 usw., s.a. "VisionDataUnit" im Kapitel "Aufzählungstypen". 3.3. ChannelPosition Beschreibung Dieses Objekt beschreibt die Position eines Kanals Methoden Eigenschaften Phi As Single Schreibgeschützt Phi in Grad. Radius As Single Schreibgeschützt Radius in Millimeter, 0 bedeutet ungültige Positionsangabe, 1 nimmt den Kopf als ideale Kugel mit Einheitsradius an. Theta As Single Schreibgeschützt Theta in Grad. 3.4. Channels Beschreibung Dieses Objekt ist eine Auflistung von "Channel"-Objekten. Methoden Eigenschaften Count As Long Schreibgeschützt Anzahl der Kanäle in der Auflistung Item(NameOrIndex As Variant) As Channel Standardelement, schreibgeschützt Liefert bei Angabe des Kanalnamens oder des Indexes (1-...) ein "Channel"-Objekt. 3.5. CurrentWorkspace Beschreibung Das Objekt repräsentiert den aktuellen Workspace Methoden Sub Load(FileName As String, [SingleHistoryFile As String]) Lädt die angegebene Workspace-Datei "FileName". 8 Der optionale Parameter "SingleHistoryFile" ermöglicht das Laden einer einzelnen HistoryDatei. Sub Save() Sichert die aktuelle Workspace-Datei. Sub SaveAs(FileName As String) Sichert die aktuelle Workspace-Datei unter einem neuen Namen. Eigenschaften ExportFileFolder As String Schreibgeschützt Standardverzeichnis der exportierten Dateien FullName As String schreibgeschützt Name der Workspace-Datei mit voller Pfadangabe HistoryFileFolder As String Schreibgeschützt Verzeichnis der History-Dateien Name As String schreibgeschützt Basisname der Workspace-Datei ohne Verzeichnisangabe und Dateierweiterung. RawFileFolder As String Schreibgeschützt Rohdatenverzeichnis 3.6. Dataset Beschreibung Das Objekt repräsentiert einen Datensatz, entweder die Daten in einem History-Knoten in ihrer Gesamtheit, oder aber die Daten eines einzelnen Segments innerhalb des Gesamtdatensatzes. Die Eigenschaften, die mit dem Präfix "Layer" ausgestattet sind, werden nur im Zusammenhang von Daten mit mehreren Ebenen, also gewissermaßen dreidimensionalen Datensätzen angewendet. Ein Bespiel für Datensätze mit mehreren Ebenen sind kontinuierliche Wavelets. Methoden Function GetData(Position As Long, Points As Long, [ChannelList as Variant]) as Single() Liefert die Daten eines Ausschnitts beginnend ab "Position" als Matrix zurück. Die Anzahl der Datenpunkte, die eingelesen werden, bestimmt "Points". Der optionale "ChannelList"Parameter kann entweder ein Array von Kanälen enthalten oder einen einzelnen Kanal. Die Kanalangaben können als Indizes (Kanalpositionen) oder als Namen gemacht werden. Wird dieser Parameter nicht verwendet, werden die Daten aller Kanäle zurück geliefert. Die Daten werden gemultiplext geliefert, d.h. zuerst alle Daten des ersten Abtastpunktes, dann des zweiten usw. Dieses Format entspricht der internen Datenverwaltung in den HistoryKnoten. Daraus ergibt sich ein beträchtlicher Geschwindigkeitsgewinn gegenüber Channel.GetData(). Falls es sich bei dem Datensatz um komplexe Daten handelt, hat jeder Datenpunkt zwei Werte, der erste Wert ist der reelle Anteil, und der zweite der Imaginäranteil der Zahl, d.h. z.B. "Data(1)" ist der reelle Anteil des ersten Datenpunktes, "Data(2)" der imaginäre. Beispiele Dim Data() as Single ' Die ersten 2000 Punkte, alle Kanäle Data = ds.GetData(1, 2000) ' Die ersten 2000 Punkte, Kanäle "Fp1" und "Fp2" Data = ds.GetData(1, 2000, Array("FP1", "Fp2")) ' Die ersten 2000 Punkte, erster und zwölfter Kanal Data = ds.GetData(1, 2000, Array(1, 12)) ' Die ersten 2000 Punkte, Kanal "F3" Data = ds.GetData(1, 2000, "F3") Vision Analyzer OLE Automation Referenzhandbuch 9 Dim a(1 to 2) as Long a(1) = 12 a(2) = 24 ' Die ersten 2000 Punkte, 12. und 24. Kanal Data = ds.GetData(1, 2000, a) Eigenschaften Averaged As Boolean Schreibgeschützt Flag, wenn "True" (-1), dann geht der Datensatz direkt oder indirekt aus einer Mittelung hervor. AverageCount As Long Schreibgeschützt Anzahl der Segmente, die in die Mittelung eingingen. Nur gültig, wenn "Averaged" Flag "True" (-1) ist. Channels As Channels Standardelement, schreibgeschützt Auflistung der Kanalobjekte im Datensatz. LayerFunction As VisionLayerIncFunction Schreibgeschützt Schrittweiten-Funktion zwischen den Ebenen ("Layers") eines Datensatzes. Solche Ebenen treten bei dreidimensionalen Daten, wie z.B. kontinuierliche Wavelets, auf. Die möglichen Werte dieser Eigenschaft finden Sie im Kapitel "Aufzählungstypen". LayerLowerLimit As Double Schreibgeschützt Der Wert der untersten Ebene eines mehrschichtigen Datensatzes. Layers As Long Schreibgeschützt Anzahl der Ebenen im Datensatz. Daten mit mehreren Ebenen kommen z.B. bei kontinuierlichen Wavelets zur Anwendung. LayerUpperLimit As Double Schreibgeschützt Der Wert der obersten Ebene eines mehrschichtigen Datensatzes. Length As Long Schreibgeschützt Länge des Datensatzes in Datenpunkten. Markers As Markers Schreibgeschützt Auflistung der Marker im Datensatz. SamplingInterval As Double Schreibgeschützt Auflösung in Mikrosekunden für Daten im Zeitbereich und Hertz für Daten im Frequenzbereich. Die folgende Formel konvertiert die Auflösung für Daten im Zeitbereich in die Abtastfrequenz: Frequency = 1000000.0 / SamplingInterval SegmentationType as VisionSegType Schreibgeschützt Gibt die Art der Segmentierung dieses Datensatzes an (siehe Kapitel 5.2). Type As VisionDataType Schreibgeschützt Typ der Daten in diesem Datensatz, s.a. "VisionDataType" im Kapitel "Aufzählungstypen". 10 3.7. FastArray Bei diesem Objekt handelt es sich um eine Hilfsklasse zum Beschleunigen des Zugriffs auf Datenfelder (engl. Arrays). Der Einsatz macht eigentlich nur Sinn im eingebauten Basic. Obwohl dieses in einer Sekunde durchaus einige Hunderttausend Manipulationen an Datenfeldern durchführen kann, lohnt es sich unter bestimmten Umständen, Objekte vom Typ "FastArray" einzusetzen. Hier können bei geschickter Anordnung mehrere Hundertmillionen Manipulationen in einer Sekunde durchgeführt werden. Die Manipulationen bestehen aus Zuweisungen und einfachen Rechenoperationen. Bei den Rechenoperationen ist das Zielfeld (Variable "TargetData") gleichzeitig auch linker Operand. Das Quellenfeld (Variable "SourceData") bleibt unverändert. Beispiel einer Division: Ziel = Ziel / Quelle (TargetData = TargetData / SourceData). Bei Operationen mit nur einem Operanden ist das Zielfeld ("TargetData") gleichzeitig das Quellenfeld. Beispiel einer Absolutwertberechnung ("RectifyData"): Ziel = abs(Ziel) Alle Indizes, die in den Manipulationen verwendet werden, beziehen sich auf den Anfang eines Datenfeldes, d.h. dass ein Datenfeld das mit "Dim Data(12 to 24) As Single" deklariert wurde, seinen ersten Datenpunkt bei "Data(12)" hat. Ein Index-Parameter von 1 wird nun diesen Startpunkt betreffen. Wir empfehlen daher aus Gründen der Übersicht, ein Datenfeld besser als "Dim Data(1 to …) As Single" zu deklarieren. Alle Datenfelder, die übergeben werden, müssen eindimensional sein und bereits eine definierte Feldlänge aufweisen. Extrahieren / Definieren von Datenfeld-Untermengen Die drei Parameter "StartIndex", "Step" und "Count" werden in den meisten Funktionen zum Beschreiben einer Untermenge von Elementen eines Datenfeldes verwendet. Die resultierende Untermenge wird wie folgt bestimmt: "StartIndex" bestimmt den ersten Datenpunkt. Der nächste Datenpunkt ist um "Step" verschoben. Der übernächste entsprechend. Die maximale Anzahl von Datenpunkten ist "Count". Ist das Datenfeld kleiner als "Count", so wird die Datenmenge durch das Ende des Datenfeldes begrenzt. Ist "Count" auf -1 gesetzt, so fällt es als Abbruchkriterium heraus und nur das Ende des Datenfeldes begrenzt die Untermenge. Beispiele (StartIndex, Step, Count): 1,1,-1 komplettes Datenfeld (Standardeinstellung) 1,2,-1 alle ungeraden Elemente eines Datenfeldes 200, -1, -1 alle Elemente ab Position 200 rückwärts 7, 32, -1 der 7., 39. ,71. … Datenpunkt. Haben wir z.B. mit Dataset.GetData() Daten gemultiplext angefordert und die Anzahl der Kanäle ist 32, so entspricht 7, 32, -1 den Daten des 7. Kanals. Dies ist allerdings nur korrekt, solange es sich um nichtkomplexe Daten mit nur einer Ebene handelt. Um auch Untermengen zu definieren, die Kanäle beschreiben, deren Datenpunkte z.B. komplex sind (2 Werte pro Punkt) können Sie die Methode "RepeatNextOperation(Count As Long, [TargetIndexIncrement As Long], [SourceIndexIncrement As Long])" verwenden. Diese Methode weißt die nachfolgende Methode an, sich selbst "Count" mal zu wiederholen mit inkrementierten Startindizes, unabhängig zu setzen für Ziel ("TargetIndexIncrement") und Quelle ("SourceIndexIncrement"). Die Methode wiederholt die nächste Operation um die dort definierten Untermengen zu erweitern. Angenommen also, wir haben wieder gemultiplexte Daten - diesmal komplex - mit 32 Kanälen und wollen den 7. Kanal in ein separates Datenfeld kopieren. Die Befehlssequenz lautet: Dim fa As New FastArray Dim ChannelData() As Single ... SourceData = ds.GetData(...) fa.RepeatNextCommand(-1,,64) ChannelData = fa.GetSelectedElements(SourceData,13,,2) Der erste Datenpunkt des 7. Kanals beginnt an Position 13. Das ist der Startindex. Es werden zwei Punkte kopiert. Anschließend wird der Startindex des Quellenfeldes um 64 erhöht und die Operation wiederholt. Dies geschieht bis zu den Grenzen des Datenfeldes. Namenskonventionen Die Parameternamen unterliegen einer Konvention. Alle Namen mit dem Präfixe "Target" beziehen sich auf das Zieldatenfeld und alle Namen mit dem Präfix "Source" beziehen sich auf das Quelldatenfeld. Beispiel (abgekürzt): Sub CopyArray(TargetData, SourceData, TargetStartIndex, TargetStep, SourceStartIndex, SourceStep, Count) Vision Analyzer OLE Automation Referenzhandbuch 11 Hier wird die Untermenge des Zieldatenfeldes "TargetData" durch "TargetStartIndex", "TargetStep" und "Count" festgelegt. Die Untermenge des Quelldatenfeldes ist definiert durch "SourceData", "SourceStartIndex", "SourceStep" und "Count". Erstellen eines Objekts Ein Objekt vom Typ FastArray kann in Basic auf zwei Arten erzeugt werden. Mit "New": Dim fa as New FastArray In diesem Falle muss die Typenbibliothek vorhanden sein (beim eingebauten Basic ist das der Fall). Alternativ ohne Typenbibliothek: Set fa = CreateObject("VisionAnalyzer.FastArray") Methoden Sub AddArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1], [TargetStep As Long = 1], [SourceStartIndex As Long = 1], [SourceStep As Long = 1], [Count As Long = -1]) Addiert eine Untermenge von "SourceData" zu einer Untermenge von "TargetData". Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder. Sub AddValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0]) Addiert den festen Wert "Value" zu einer Untermenge von "TargetData". "Value" wird nach jeder Operation um "ValueIncrement" erhöht. Sub Atan2Array(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1], [TargetStep As Long = 1], [SourceStartIndex As Long = 1], [SourceStep As Long = 1], [Count As Long = -1]) Berechnet den Arcus Tangens einer Untermenge von "TargetData" und "SourceData". (TargetData = Atan2(TargetData/SourceData)). Das Ergebnis wird in Radiantwerten (Bereich +/- π) in "TargetData" abgelegt. Sub CopyArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1], [TargetStep As Long = 1], [SourceStartIndex As Long = 1], [SourceStep As Long = 1], [Count As Long = -1]) Kopiert eine Untermenge von "SourceData" in eine Untermenge von "TargetData". Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder. Sub CopyValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0]) Kopiert den festen Wert "Value" in eine Untermenge von "TargetData". "Value" wird nach jeder Operation um "ValueIncrement" erhöht. Sub DivideArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1], [TargetStep As Long = 1], [SourceStartIndex As Long = 1], [SourceStep As Long = 1], [Count As Long = -1]) Dividiert eine Untermenge von "TargetData" mit einer Untermenge von "SourceData" (TargetData = TargetData / SourceData) . Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder. Sub DivideValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0]) Dividiert eine Untermenge von "TargetData" mit dem festen Wert "Value" "TargetData" (TargetData = TargetData / Value). "Value" wird nach jeder Operation um "ValueIncrement" erhöht. Function GetMaximumValue(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) As Single Liefert den größten Wert einer Untermenge von "SourceData". 12 Function GetMeanValue(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) As Single Liefert den Mittelwert einer Untermenge von "SourceData". Function GetMinimumValue(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) As Single Liefert den kleinsten Wert einer Untermenge von "SourceData". Function GetSelectedElements(SourceData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) As Single() Liefert eine Untermenge von "SourceData". Sub MultiplyArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1], [TargetStep As Long = 1], [SourceStartIndex As Long = 1], [SourceStep As Long = 1], [Count As Long = -1]) Multipliziert eine Untermenge von "TargetData" mit einer Untermenge von "SourceData" (TargetData = TargetData * SourceData) . Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder. Sub MultiplyValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0]) Multipliziert den festen Wert "Value" zu einer Untermenge von "TargetData" (TargetData = TargetData * Value). "Value" wird nach jeder Operation um "ValueIncrement" erhöht. Sub RectifyArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) Alle Elemente einer ausgewählten Untermenge werden in ihren Absolutwert umgerechnet (gleichgerichtet). Quelle und Ziel ist "TargetData". Sub RepeatNextOperation([Count As Long = -1], [TargetIndexIncrement As Long = 1], [SourceIndexIncrement As Long = 1]) Wiederholt die nächste Operation um die dort definierten Datenfeld-Untermengen zu erweitern. Dies geschieht "Count"-mal, bzw. wird durch das Ende von Datenfeldern begrenzt. Bei jeder Wiederholung werden der Zielindex um "TargetIndexIncrement" und der Quellindex um "SourceIndexIncrement" erhöht. Verfügt die nächste Operation nicht über ein Ziel- oder Quellenfeld, so wird der betreffende Parameter ignoriert. In der aktuellen Version dürfen "TargetIndexIncrement" und "SourceIndexIncrement" keine negativen Werte haben. Auch dürfen die "Step"-Parameter der nachfolgenden Operation nicht negativ sein. Sub RootArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) Es wird die Quadratwurzel aller Elemente einer ausgewählten Untermenge basierend auf ihren Absolutwert berechnet. Das bedeutet, dass auch negative Werte im Ausgangsdatensatz vorhanden sein können. Quelle und Ziel ist "TargetData". Sub RotateLeftArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) Alle Elemente einer ausgewählten Untermenge werden nach links rotiert. Das erste Element erhält den Wert des zweiten, das zweite den Wert des dritten usw. Der ursprünglich erste Wert wird zum letzten Wert. Sub RotateRightArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) Alle Elemente einer ausgewählten Untermenge werden nach rechts rotiert. Das zweite Element erhält den Wert des ersten, das dritte den Wert des zweiten usw. Der ursprünglich letzte Wert wird zum ersten Wert. Vision Analyzer OLE Automation Referenzhandbuch 13 Sub SortArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) Alle Elemente einer ausgewählten Untermenge werden in aufsteigender Folge sortiert. Quelle und Ziel ist "TargetData". Sub SquareArray(TargetData() As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1]) Alle Elemente einer ausgewählten Untermenge werden quadriert.. Quelle und Ziel ist "TargetData". Sub SubtractArray(TargetData() As Single, SourceData() As Single, [TargetStartIndex As Long = 1], [TargetStep As Long = 1], [SourceStartIndex As Long = 1], [SourceStep As Long = 1], [Count As Long = -1]) Subtrahiert eine Untermenge von "TargetData" mit einer Untermenge von "SourceData" (TargetData = TargetData - SourceData) . Die Operation wird begrenzt durch die kleinere Untermenge der beiden Datenfelder. Sub SubtractValue(TargetData() As Single, Value As Single, [StartIndex As Long = 1], [Step As Long = 1], [Count As Long = -1], [ValuleIncrement As Single = 0]) Subtrahiert den festen Wert "Value" von einer Untermenge von "TargetData" (TargetData = TargetData - Value). "Value" wird nach jeder Operation um "ValueIncrement" erhöht. 14 3.8. HistoryExplorer Beschreibung Dieses Objekt repräsentiert den History-Explorer. Methoden Eigenschaften Visible As Boolean Flag, wenn "False" (0), dann ist der Historyie-Explorer nicht sichtbar. 3.9. HistoryFile Beschreibung Dieses Objekt repräsentiert eine History-Datei. Methoden Sub AppendFile(FileName As String) Hängt die Rohdaten der angegebenen History-Datei an diese History-Datei an. Erläuterungen zu dem Verfahren finden Sie im Benutzerhandbuch, Kapitel "Aneinanderhängen mehrerer Rohdatensätze". Beispiel ' Haenge "P300b" an "P300a" Dim hf as HistoryFile Set hf = HistoryFiles("p300a") hf.AppendFile "p300b" Sub ApplyTemplate(FileName As String) Wendet die angegebene History-Vorlage auf die History-Datei an. Der Dateiname kann entweder komplett oder teilweise angegeben werden und wird – soweit möglich – automatisch ergänzt. Sub Close() Schließt die History-Datei. Das sollte geschehen, sobald die Datei nicht mehr benötigt wird, da eine offene Datei unter Umständen erheblichen Speicherbedarf hat. Sub Compress() Komprimiert die History-Datei. History-Dateien können eventuell größere "Löcher" enthalten, wenn vorhandene Knoten gelöscht wurden. Diese Löcher lassen sich dann mit Hilfe der Kompression entfernen. Sub Open() Öffnet die History-Datei. Erst nach dem Öffnen ist ein Zugriff auf die assoziierten Historyknoten möglich. Function FindNextNode() As HistoryNode Sucht nach dem nächsten History-Knoten mit dem Namen wie in "FindNode()" angegeben. Function FindNode(Name As String) As HistoryNode Sucht den ersten History-Knoten mit dem gegebenen Namen. Beispiel ' Benenne alle Knoten mit dem Namen "Average" um nach "Avg". Dim hn As HistoryNode Dim hf as HistoryFile Set hf = HistoryFiles(1) Set hn = hf.FindNode("Average") Do while Not hn Is Nothing hn.Name = "Avg" Set hn = hf.FindNext() Loop Eigenschaften DisplayName As String Aliasname der History-Datei, der vom Analyzer zur Darstellung verwendet wird. Dieser Name ist nach dem Laden einer Workspace zuerst identisch mit der Eigenschaft "Name". Ein Datenbankprogramm, das den Analyzer steuert, kann diese Eigenschaft verwenden, um z.B. Probandennamen anzuzeigen. FullName As String schreibgeschützt Vision Analyzer OLE Automation Referenzhandbuch 15 Name der History-Datei mit voller Pfadangabe HistoryNodes As HistoryNodes Standardelement, schreibgeschützt Auflistung der Basisknoten dieser History-Datei. Diese Basisknoten repräsentieren meistens eine Roh-EEG-Datei. Die meisten History-Dateien haben nur einen Basisknoten, da die RohEEG-Datei nur einen Datensatz enthält. Neben Roh-EEG-Dateien können die Basisknoten aber auch beliebige andere Datensätze repräsentieren, z.B. Grandaverages. IsOpen As Boolean schreibgeschützt Flag, zeigt an, ob die History-Datei geöffnet ist. LinkedData As Boolean schreibgeschützt Flag, zeigt an, ob die History-Datei einen Rohdatensatz repräsentiert (primäre History-Datei). Name As String schreibgeschützt Basisname der History-Datei ohne Verzeichnisangabe und Dateierweiterung. SubjectInfos As String schreibgeschützt Informationen über den Probanden/Patienten. Diese Informationen stehen nicht bei allen Dateiformaten zur Verfügung. 3.10. HistoryFiles Beschreibung Dieses Objekt ist eine Auflistung von "HistoryFile"-Objekten. Methoden Function FindFile(Name As String) As HistoryFile Sucht eine History-Datei nach ihrem Basisnamen ohne Verzeichnisangabe und Dateierweiterung. Sub KillFile(DisplayName as String) Löscht die angegebene History-Datei. "DisplayName" ist der Aliasname der Datei. Sub Refresh() Erzeugt oder lädt gegebenenfalls neue History-Dateien falls nach dem Laden des Workspaces neue Rohdaten-EEGs oder History-Dateien erzeugt wurden. Sub Sort() Sortiert die History-Dateien in der Auflistung und in der Darstellung im History-Explorer. Eigenschaften Count As Long Schreibgeschützt Anzahl der History-Dateien in der Auflistung Item(DisplayNameOrIndex As Variant) As HistoryFile Standardelement, schreibgeschützt Liefert bei Angabe des Aliasnamens oder des Indexes (1-...) ein "HistoryFile"-Objekt. 16 3.11. HistoryNode Beschreibung Dieses Objekt beschreibt einen Knoten in der Baumstruktur einer History-Datei. Ein solcher Knoten repräsentiert einen Datensatz. Der Datensatz ist ein Roh-EEG oder wurde von einer Transformation angelegt. Da die Eigenschaft "HistoryNodes" als Standardelement festgelegt ist, kann der Zugriff auf Unterknoten sehr einfach erfolgen. Bespiel: Dim hn As HistoryNode Set hn = HistoryFiles("File1")(Raw Data")("Segmentation")("Filter")("Average") oder: Set hn = HistoryFiles(1)(1)(1)(1)(1) Methoden Sub ApplyTemplate(FileName As String) Wendet die angegebene History-Vorlage auf den History-Knoten an. Der Dateiname kann entweder komplett oder teilweise angegeben werden und wird – soweit möglich – automatisch ergänzt. Sub Delete() Entfernt den Knoten und alle Unterknoten aus der History-Datei. Function GetHeadSurface(Data() As Single) as Boolean Füllt das Array "Data" mit den Koordinaten einer Punktwolke, die die Kopfoberfläche beschreibt. Die Daten bestehen aus einer fortlaufende Sequenz von Koordinaten, die in der Reihenfolge Radius, Theta und Phi die Punkte beschreiben. Wenn keine Koordinaten vorhanden sind, liefert die Funktion "False" zurück. Sub Hide() Schließt alle mit dem Knoten assoziierten Datenfenster. Sub Show() Eröffnet ein Fenster und stellt die Daten des Knotens dar. Sub ShowDescription() Zeigt die Beschreibung, die in "Description" und "Description2" gespeichert ist, in einer Dialogbox an. Eigenschaften Class As String Schreibgeschützt Name der Komponente, die den Knoten erzeugt hat Comment As String Kommentar des Anwenders. ContainsData As Boolean Schreibgeschützt Flag, das angibt, ob dieser Knoten Daten enthält. Der Knoten kann auch z.B. eine Exportkomponente repräsentieren. In diesem Falle enthält er keine Daten. DataAvailable As Boolean Schreibgeschützt Flag, das angibt, ob die Daten, die der Knoten enthält, verfügbar sind. Befindet sich das zugehörige Rohdaten-EEG nicht im Rohdatenverzeichnis, so sind im Allgemeinen die meisten Datensätze einer History-Datei nicht verfügbar. Erst der gemittelte Datensatz ("Average"-Transformation) und alle ihm folgenden speichern ihre Daten in der History-Datei ab. Dataset As Dataset Dieser Datensatz beschreibt die mit dem History-Knoten assoziierten Daten. Er bezieht sich auf die Gesamtdaten, im Gegensatz zu dem Datensatz in einem Segmentobjekt. Description As String Schreibgeschützt Beschreibung des Knotens, d.h. Informationen über die Operation, die den Knoten hervorbrachte und ihre Eingangsparameter. Diese Beschreibung wird zusammen mit "Description2" dargestellt mit "ShowDescription". Description2 As String Schreibgeschützt Vision Analyzer OLE Automation Referenzhandbuch 17 Operationsergebnisse, diese Informationen können bei gleicher Operation für verschiedene Eingangsdatensätze variieren, wie z.B. beim Averagen die Anzahl der Segmente. FullPath As String Schreibgeschützt Voller Pfad des Knoten. Der Pfad enthält den Namen der History-Datei, der der Knoten angehört, sowie die Namen aller Vorgänger-Knoten, getrennt durch ein "/". HistoryFile As HistoryFile Schreibgeschützt History-Datei, die diesen History-Knoten beherbergt. HistoryNodes As HistoryNodes Standardelement, schreibgeschützt Auflistung der Unterknoten dieses Knotens. Landmarks As Landmarks Schreibgeschützt Auflistung der Landmarks dieses Knotens. Name As String Name des Knotens, wie er im History-Explorer erscheint ParentNode as HistoryNode Schreibgeschützt Elternknoten dieses History-Knotens RecordingInfos As String Informationen, die bei der Aufnahme eingegeben wurden, wie z.B. Kommentare oder Fehlermeldungen. Diese Informationen stehen normalerweise nur bei Knoten zur Verfügung, die Rohdaten darstellen. Auch hängt es vom Aufnahmesystem und dem verwendeten Dateiformat ab, ob Informationen zur Verfügung stehen. Segments As Segments Schreibgeschützt Auflistung aller Segmentobjekte in diesem Knoten. Version As String Schreibgeschützt Version der Komponente, die den Knoten erzeugt hat. Diese Information ist ab der Analyzer Version 1.05 verfügbar. Windows As Windows Schreibgeschützt Auflistung aller Datenfenster dieses Knotens 18 3.12. HistoryNodes Beschreibung Dieses Objekt ist eine Auflistung von "HistoryNode"-Objekten. Methoden Eigenschaften Count As Long Schreibgeschützt Anzahl der History-Knoten in der Auflistung Item(NameOrIndex As Variant) As HistoryNode Standardelement, schreibgeschützt Liefert bei Angabe des Knotennamens oder des Indexes (1-...) ein "HistoryNode"-Objekt. 3.13. HistoryTemplateNode Beschreibung Dieses Objekt beschreibt einen einzelnen Knoten einer History-Vorlage. Eingesetzt wird es in Application.ActiveTemplateNode. Methoden Eigenschaften Description As String Schreibgeschützt Beschreibung des Knotens, d.h. Informationen über die Operation, die den Knoten hervorbrachte und ihre Eingangsparameter. 3.14. Landmark Beschreibung Dieses Objekt dient der Markierung von markanten Kopfpositionen. Methoden Eigenschaften Name As String Schreibgeschützt Name des Landmarks Phi As Single Schreibgeschützt Phi in Grad. Radius As Single Schreibgeschützt Radius in Millimeter, 0 bedeutet ungültige Positionsangabe, 1 nimmt den Kopf als ideale Kugel mit Einheitsradius an. Theta As Single Schreibgeschützt Theta in Grad. 3.15. Landmarks Beschreibung Dieses Objekt ist eine Auflistung von "Landmark"-Objekten. Methoden Eigenschaften Count As Long Schreibgeschützt Anzahl der Marker in der Auflistung Item(NameOrIndex As Variant) As Landmark Standardelement, schreibgeschützt Liefert bei Angabe des Landmark-Namens oder des Indexes (1-...) ein "Landmark"-Objekt. Vision Analyzer OLE Automation Referenzhandbuch 19 3.16. Marker Beschreibung Dieses Objekt repräsentiert einen einzelnen Marker in einem Datensatz. Methoden Eigenschaften ChannelNumber As Long Schreibgeschützt Kanal, den der Marker markiert (1-...). Ein Wert von 0 bedeutet, dass sich der Marker auf alle Kanäle bezieht. DateTime As Date Schreibgeschützt Datum/Zeit , die der Marker repräsentiert. Dieser Wert ist nur gültig bei Markern des Typs "New Segment". Description As String Schreibgeschützt Beschreibung des Markers. Invisible As Boolean Schreibgeschützt Flag, das angibt, ob dieser Marker unsichtbar ist bei der Darstellung des EEGs. Points As Long Schreibgeschützt Anzahl der Datenpunkte die der Marker markiert. Position As Long Schreibgeschützt Position des Markers in Datenpunkten (1-...). Type As String Schreibgeschützt Typ des Markers 3.17. Markers Beschreibung Dieses Objekt ist eine Auflistung von "Marker"-Objekten. Methoden Eigenschaften Count As Long Schreibgeschützt Anzahl der Marker in der Auflistung Item(Index As Long) As Marker Standardelement, schreibgeschützt Liefert bei Angabe des Indexes (1-...) ein "Marker"-Objekt. 3.18. NewHistoryNode Beschreibung Mit diesem Objekt können neue History-Knoten angelegt werden, sowohl als abgeleitete Child-Knoten, als auch in neuen History-Dateien. Ein Objekt dieser Klasse kann in Basic auf zwei Arten erzeugt werden. Mit "New": Dim nhn as New NewHistoryNode In diesem Falle muss die Typenbibliothek vorhanden sein (beim eingebauten Basic ist das der Fall). Alternativ ohne Typenbibliothek: set nhn = CreateObject("VisionAnalyzer.NewHistoryNode") Es gibt im Prinzip drei verschiedene Arten neuer History-Knoten: neue History-Datei. Child-Knoten eines vorhandenen History-Knotens. 20 Child-Knoten eines vorhandenen History-Knotens, der alle Eigenschaften seines Parent erbt. Hier können die Daten nicht manipuliert werden, aber alle anderen Eigenschaften, wie Kanalnamen und –Positionen, sowie Marker gesetzt oder gelöscht werden. Der Mechanismus zur Erzeugung eines neuen Knotens ist im folgenden Beispiel beschrieben: Sub Main Set hn = HistoryFiles(1)(1) Set nhn = New NewHistoryNode nhn.Create "BasicTest", hn, "", False, _ viDtTimeDomain, 32, 10000, hn.Dataset.SamplingInterval nhn.SetChannelName 1, "Fp1" nhn.SetChannelName 2, "Fp2" nhn.AddMarker 0, 200, 100, "Bad Interval", "", False Dim Data() As Single hn.Dataset(3).GetData 1, 10000, Data ' Copy data from channel 3 nhn.WriteData 1, 1, 10000, Data ' Write data to channel 1. nhn.Description = "Line1" & vbCrLf & "Line2" nhn.SetChannelPosition 4, 1, 0, 90 nhn.Finish End Sub Im Wesentlichen sind zwei Prozeduren für die Erstellung und Fertigstellung des Knotens zuständig: "Create" und "Finish". Zwischen diesen beiden Prozeduren können die Kanalnamen, Marker und Daten gesetzt werden. Wurde "Create" erfolgreich aufgerufen und die Daten nicht vererbt vom Parent, wird ein Datensatz mit Standardeinstellungen erstellt. Dieser kann nun manipuliert werden. "Finish" schließt den Erstellungsprozess ab. Die neu erzeugten History-Knoten können eingeschränkt auch in History-Vorlagen eingesetzt werden. Das ist aber nur möglich, wenn sie mit dem eingebauten Basic-Interpreter erzeugt wurden. Außerdem muss der neue Knoten als Child-Knoten der vordefinierten Variablen "ActiveNode" erzeugt werden. Diese Variable ist immer definiert, wenn der Basic-Interpreter läuft und zwar wie folgt: Dim ActiveNode As HistoryNode Der Knoten repräsentiert das aktuell offene Datenfenster. Ist kein Datenfenster geöffnet, so enthält dieser Knoten keine Daten. Um also ein vorlagenfähigen Datensatz zu erzeugen, sollte man alle offenen Datenfenster schließen, bis auf das Fenster, das als Parent für den neuen Child-Knoten dienen soll. Dann wird der Code des Basic-Makros ausgeführt. Es ist zu beachten, dass die Ausführung des Makros automatisch beendet wird, wenn die NewHistoryNode.Finish()-Methode ausgeführt wird. Beim Erstellen des neuen Knotens wird der gesamte Makro-Code in den Knoten kopiert. Jetzt kann man den Knoten wie eine gewöhnliche Transformation auf andere Knoten ziehen, um die Operation zu wiederholen. Der Knoten kann auch in eine History-Vorlage aufgenommen werden. Sieht man sich mit der rechten Maustaste am Knoten die so genannten "Operation Infos" an, so wird zusätzlich der Code angezeigt, der zur Erstellung des Knotens geführt hat. Beispiel eines vorlagenfähigen Makros: ' Add a marker to the data set. Sub Main Set nhn = New NewHistoryNode nhn.Create "Added Marker", ActiveNode nhn.AddMarker 0, 200, 1, "Stimulus", "S1", False nhn.Finish End Sub Dieses Makro setzt einen zusätzlichen Marker an Datenpunkt 200. Methoden Sub AddMarker(ChannelNumber As Long, Position As Long, Points As Long, Type As String, Description As String, [Invisible As Boolean = False]) Fügt einen Marker in den neuen Datensatz ein. Die Parameter im Einzelnen: ChannelNumber Vision Analyzer OLE Automation Referenzhandbuch 21 Kanalnummer, eine 0 bedeutet, dass der Marker für alle Kanäle gilt. Position Position im Datensatz, gerechnet in Datenpunkten (1-...) Points Länge des markierten Intervalls in Datenpunkten. Type Beliebiger Markertyp als Text. Sondertypen sind "New Segment" und "Time 0". Description Beschreibung des Markers, diese erscheint dann in der EEG-Darstellung. Optionale Parameter: Invisible Wenn dieses Flag auf True gesetzt wird, ist das ein Hinweis, dass dieser Marker unsichtbar bleiben sollte. Sub Cancel() Diese Funktion bricht den Erstellungsprozess des neuen Knotens ab. Sub Create(NodeName As String, ParentNode As HistoryNode, [FileName As String = ""], [InheritData As Boolean = True], [Type As VisionDataType = viDtTimeDomain], [NumOfChannels As Long = 0], [Length As Long = 0], [SamplingInterval As Double = 0]) Erstellt den neuen Datensatz. Die Parameter im Einzelnen: NodeName Name des neuen Knotens ParentNode Der Parent-Knoten. Dieser Knoten dient als direkter Vorfahre des neuen Knotens. Wenn er auf Nothing gesetzt wurde, muss "FileName" gesetzt sein. Optionale Parameter: FileName Dateiname ohne Pfad und Endung. Ist dieser Parameter nicht mit "" oder vbNullChar (in anderen Programmiersprachen NULL oder NIL) gesetzt, so wird eine neue History-Datei mit diesem Namen im aktuellen Workspace erzeugt. InheritData Wenn dieses Flag nicht "False" (0) ist, und "ParentNode" verwendet wird, dann werden die Daten, Eigenschaften und Marker des direkten Vorfahren geerbt. Dies dient im Wesentlichen dem Hinzufügen und Löschen von Markern. "Type", "NumOfChannels", "Length" und "SamplingInterval" werden in diesem Falle ignoriert. Type Typ des neuen Datensatzes. Die folgenden vier Typen sind zulässig: viDtTimeDomain, viDtTimeDomainComplex, viDtFrequencyDomain und viDtFrequencyDomainComplex (siehe Kapitel 5.1). NumOfChannels Anzahl der Kanäle im neuen Datensatz Length Länge des neuen Datensatzes in Datenpunkten SamplingInterval Abtastinterval in Mikrosekunden Sub CreateEx(NodeName As String, ParentNode As HistoryNode, [FileName As String = ""], [InheritData As Boolean = True], [Type As VisionDataType = viDtTimeDomain], [NumOfChannels As Long = 0], [Length As Long = 0], [SamplingInterval As Double=0], [Layers As Long = 1], [LayerLowerLimit As Double=0], [LayerUpperLimit As Double=0], [LayerFunction As VisionLayerIncFunction= viLifLinear])) Diese Funktion ist eine erweiterte Version von "Create()". Sie ermöglicht das Anlegen von Datensätzen mit mehreren Ebenen, wie sie z.B. bei der kontinuierlichen WaveletTransformation auftreten. Deshalb unterstützt der Parameter "Type" auch die Typen "viDtTimeFrequencyDomain" und "viDTimeFrequencyDomainComplex". Die Layer..-Parameter im einzelnen: Layers As Long 22 Anzahl der Ebenen im Datensatz. LayerLowerLimit As Long Der Wert der untersten Ebene. LayerUpperLimit As Long Der Wert der obersten Ebene. LayerFunction As VisionLayerIncFunction Schrittweiten-Funktion zwischen den Ebenen eines Datensatzes. Die möglichen Werte dieser Eigenschaft finden Sie im Kapitel "Aufzählungstypen". Sub Finish() Diese Funktion schließt die Erstellung des neuen Knotens ab. Sub RemoveMarker(ChannelNumber As Long, Position As Long, Points As Long, Type As String, Description As String) Entfernen eines Markers, der zu der Beschreibung passt. Die Parameter entsprechen denen in "AddMarker". Die Groß-/Kleinschreibung sowie Leerzeichen in "Type" und "Description" werden beim Vergleich ignoriert. Sub SetChannelName(ChannelNumber As Long, NewName As String) Setzen eines Kanalnamens. Hierbei wird implizit die Positionsangabe angepasst. Sub SetChannelPosition(ChannelNumber As Long, Radius As Single, Theta As Single, Phi As Single) Setzen einer Kanalposition. Sub SetChannelUnit(ChannelNumber As Long, Unit As VisionDataUnit) Setzen der Einheit der Daten für einen Kanal, wie z.B. μV, μV2 u. ä. (s. a. "VisionDataUnit" im Kapitel "Aufzählungstypen"). Wird die Einheit nicht individuell gesetzt, so erhält der Kanal die Einheit, die in der Eigenschaft "Unit" festgelegt wurde. Sub SetHeadSurface(Data() As Single) Beschreiben der Kopfoberfläche als Punktwolke. "Data" steht für eine fortlaufende Sequenz von Koordinaten, die in der Reihenfolge Radius, Theta und Phi die Punkte beschreiben. Sub SetHeadLandmark(Name As String, Radius As Single, Theta As Single, Phi As Single) Setzen eines mit "Name" benannten Landmarks zur Orientierung. Sub SetRefChannelName(ChannelNumber As Long, NewName As String) Setzen eines Referenzkanalnamens. Sub TryLater() Diese Funktion wird nur benötigt, wenn ein Makro in einer History-Vorlage eingesetzt wird. Wenn in diesem Falle zur Berechnung des neuen Datensatzes Informationen aus einem History-Knoten benötigt werden, der weder der aktuelle Knoten noch ein direkter Vorfahre des aktuellen Knotens ist, kann es sein, dass dieser Knoten eventuell noch gar nicht berechnet wurde. Durch den Aufruf dieser Funktion wird das dem Programm mitgeteilt. In diesem Falle wird das Programm mit dem Erzeugen anderer History-Knoten fortfahren und später erneut versuchen, den Knoten zu erstellen. Sub WriteData(ChannelNumber As Long, Position As Long, Points As Long, Data() As Single) Schreiben eines Datenblocks Die Parameter im Einzelnen: ChannelNumber Kanalnummer, eine 0 bedeutet, dass der Block alle Kanäle umfasst. In diesem Falle müssen die Daten gemultiplext vorliegen. Position Position im Datensatz, gerechnet in Datenpunkten (1-...) Points Länge des Datenblocks in Datenpunkten. Data Der Datenblock. Eigenschaften Averaged As Boolean Hinweis, ob der Datensatz bereits gemittelt wurde. Dies ist insbesondere für die Freischaltung und Sperrung von Transformationen im "Transformations"-Menü von Relevanz. Description As String Beschreibung der Operation und ihrer Eingangsparameter. Description2 As String Beschreibung der Operationsergebnisse. SegmentationType As VisionSegType Vision Analyzer OLE Automation Referenzhandbuch 23 Segmentierungstyp wie in Kapitel 5.3 beschrieben. Ebenfalls relevant für die Freischaltung und Sperrung von Transformationen im "Transformations"-Menü. Unit As VisionDataUnit Einheit der Daten in diesem Datensatz, wie z.B. μV, μV2 usw., s. a. "VisionDataUnit" im Kapitel "Aufzählungstypen". Diese Einheit gilt für alle Kanäle, deren Einheit nicht explizit mit "SetChannelUnit()" gesetzt wurde. 3.19. ProgressBar Beschreibung Dieses Objekt stellt eine Fortschrittsanzeige, einen so genannten "Progressbar" dar. Dieser gibt dem Anwender bei längeren Operationen Hinweise auf den Fortschritt. Ein Objekt dieser Klasse kann in Basic auf zwei Arten erzeugt werden. Mit "New": Dim pb as New ProgressBar In diesem Falle muss die Typenbibliothek vorhanden sein (beim eingebauten Basic ist das der Fall). Alternativ ohne Typenbibliothek: set pb = CreateObject("VisionAnalyzer.ProgressBar") Es können mehrere Progressbars gleichzeitig verschachtelt erzeugt werden. Diese werden dann in einem Fenster untereinander dargestellt. Durch die Eigenschaft "UserCanceled" kann überprüft werden, ob der Anwender die Operation abbrechen möchte. Das folgende Beispiel zeigt eine fiktive Anwendung mit zwei verschachtelten Progressbars: ' Progressbar demo Sub Main Dim pb1 As New ProgressBar Dim pb2 As New ProgressBar pb1.Init "ProgressBar Demo", "First Bar" pb2.Init "This title will not be shown", "Second Bar" pb1.SetRange 0, 5 pb2.SetRange 0, 100 pb1.SetStep 1 pb2.SetStep 1 For i = 1 To 5 For j = 1 To 100 If pb2.UserCanceled Then Exit For End If pb2.StepIt Wait .001 Next j pb1.StepIt Next i pb1.SetText "Done 1" pb2.SetText "Done 2" Wait 2 End Sub Methoden Sub Init(Title As String, Text As String) Initialisiert den Progressbar und stellt ihn dar. Die Parameter im Einzelnen: Title Titel des Progressbars. Bei verschachtelten Progressbars wird nur der Titel des ersten Bars angezeigt. Text Der zum Bar gehörige Text. Der Text kann mit "SetText" nachträglich geändert werden. Sub SetText(Text As String) Diese Funktion ersetzt den vorhandenen Text. Sub SetRange(Lower As Long, Upper As Long) 24 Setzen der unteren und oberen Bereichsbegrenzungen. Standardmäßig sind diese Werte auf 0 und 100 gesetzt. Sub SetPosition(Position As Long) Setzen der Position des Bars. Sub OffsetPosition(Position As Long) Setzen der Position des Bars relativ zur aktuellen Position. Sub SetStep(Step As Long) Setzen der Schrittlänge die bei "StepIt" verwendet wird. Standard ist 10. Sub StepIt() Vorrücken der Position um die bei "SetStep" eingestellte Schrittlänge. Sub Hide() Das Progressbar-Fenster wird unsichtbar. Sub Show() Das Progressbar-Fenster wird wieder sichtbar. Eigenschaften UserCanceled As Boolean Der Anwender hat den "Cancel"-Button betätigt. 3.20. Segment Beschreibung Diese Objekt beschreibt ein einzelnes Segment in den Daten eines History-Knotens. Methoden Eigenschaften Dataset As Dataset Schreibgeschützt Ein Datensatz-Objekt, das die Daten in dem Segment beschreibt. Alle Positionsangaben beziehen sich auf den Anfang des Segments. Es handelt sich bei dem Datensatz um eine Untermenge des Datensatzes, der als Eigenschaft des History-Knotens auftritt. Die "Markers"-Auflistung dieses Objekts enthält keine "New Segment"-Marker mehr. DateTime As Date Schreibgeschützt Datum/Zeit zu Beginn des Segments. 3.21. Segments Beschreibung Dieses Objekt ist eine Auflistung von "Segment"-Objekten. Methoden Eigenschaften Count As Long Schreibgeschützt Anzahl der Segmente in der Auflistung Item(Index As Long) As Segment Standardelement, schreibgeschützt Liefert bei Angabe des Indexes (1-...) ein "Segment"-Objekt. 3.22. Transformation Beschreibung Mit diesem Objekt ist es möglich, einige primäre Transformationen des Analyzers mit Parametern aufzurufen. Eine Liste der unterstützten Transformationen und ihrer Parameter finden Sie im Kapitel "Aufrufbare Transformationen". Der Vorteil dieser Vorgehensweise gegenüber dem Aufruf über das "Transformations"-Menü besteht in der Möglichkeit der dynamischen Parametrisierung. Das bedeutet, dass die Parameter für die Transformation zur Laufzeit ermittelt werden können. Es können also Ergebnisse von Operationen, die vorher abgelaufen sind, bei der Parameterberechnung berücksichtigt werden. Vision Analyzer OLE Automation Referenzhandbuch 25 Die neu erzeugten History-Knoten können auch in History-Vorlagen eingesetzt werden. Soll hierbei die dynamische Parametrisierung gewahrt bleiben, so müssen bestimmte Regeln eingehalten werden. In diesem Falle muss der Knoten mit dem eingebauten Basic-Interpreter erzeugt wurden. Außerdem muss der neue Knoten als Child-Knoten der vordefinierten Variablen "ActiveNode" erzeugt werden (s. a. NewHistoryNode). Diese Variable ist immer definiert, wenn der Basic-Interpreter läuft und zwar wie folgt: Dim ActiveNode As HistoryNode Der Knoten repräsentiert das aktuell offene Datenfenster. Ist kein Datenfenster geöffnet, so enthält dieser Knoten keine Daten. Um also einen solchen dynamischen Datensatz zu erzeugen, sollte man alle offenen Datenfenster schließen, bis auf das Fenster, das als Parent für den neuen Child-Knoten dienen soll. Dann wird der Code des Basic-Makros ausgeführt. Es ist zu beachten, dass die Ausführung automatisch beendet wird, nachdem Transformation.Do() aufgerufen wurde. Beim Erstellen des neuen Knotens wird der gesamte Makro-Code in den Knoten kopiert. Jetzt kann man den Knoten wie eine gewöhnliche Transformation auf andere Knoten ziehen, um die Operation zu wiederholen. Der Knoten kann auch in eine History-Vorlage aufgenommen werden. Sieht man sich mit der rechten Maustaste am Knoten die so genannten "Operation Infos" an, so wird zusätzlich der Code angezeigt, der zur Erstellung des Knotens geführt hat. Hält man die eben besprochenen Regeln nicht ein, d.h. verwendet man nicht den Basic-Interpreter und "ActiveNode", so ist der neue Knoten ebenfalls vorlagenfähig. Die Parameter sind jedoch eingefroren, werden also bei der Neuanlage eines Knoten nicht dynamisch berechnet. Der Knoten verhält sich, als wäre er über das "Transformations"-Menü erzeugt worden. Beispiel eines Makros, das eine Filteroperation ausführt (keine dynamische Parametrisierung): ' Filter Data. Sub Main HistoryFiles(1).Open Dim hn As HistoryNode Set hn = HistoryFiles(1)(1) Transformation.Do "Filters", "HighCutoff=30,48;Notch=50", hn, "FilterTest" End Sub Im folgenden Bespiel werden Daten des aktuellen Knotens zur Erstellung von Parametern verwendet. Dieses Beispiel soll hierbei nur die Möglichkeiten der dynamischen Parametrisierung aufzeigen. Eine ernsthafte Anwendung ist es nicht. ' Filter Data. Sub Main Dim nChannels as Long nChannels = ActiveNode.Dataset.Channels.Count ' Create parameters string based on number of channels Dim sParameters As String For i = 1 To nChannels sParameters = sParameters & "highcutoff(" & i & ")=" & i + nChannels Next Transformation.Do "Filters", sParameters, ActiveNode, "Filters" End Sub & ";" Methoden Sub Do(Transformation As String, Parameters As String, ParentNode As HistoryNode, [NodeName As String]) Führt eine Transformation aus. Die Parameter im Einzelnen: Transformation Name der Transformation Parameters Transformationsparameter ParentNode Der Parent-Knoten. Optionaler Parameter: NodeName 26 Name des neuen Knotens. Wenn kein Name eingegeben wird, so wird er von der Transformation vergeben. Sub TryLater() Diese Funktion wird nur benötigt, wenn ein Makro in einer History-Vorlage eingesetzt wird. Wenn in diesem Falle zur Berechnung des neuen Datensatzes Informationen aus einem History-Knoten benötigt werden, der weder der aktuelle Knoten noch ein direkter Vorfahre des aktuellen Knotens ist, kann es sein, dass dieser Knoten eventuell noch gar nicht berechnet wurde. Durch den Aufruf dieser Funktion wird das dem Programm mitgeteilt. In diesem Falle wird das Programm mit dem Erzeugen anderer History-Knoten fortfahren und später erneut versuchen, den Knoten zu erstellen. 3.23. Window Beschreibung Diese Objekt beschreibt ein einzelnes Fenster im Arbeitsbereich. Methoden Sub ActivateTransientTransformation(Name As String) Ermöglicht den Aufruf einer transienten Transformation, wenn ein Intervall markiert ist. Beispiel einer FFT: ActiveNode.Windows(1).ActivateTransientTransformation "FFT" Sub Close() Schließt das Fenster. Sub Copy() Nur für Type = "EEGData": kopiert den Inhalt des Fensters in die Zwischenablage (Clipboard). Sub Maximize() Fenstergröße maximieren Sub Minimize() Fenstergröße minimieren Sub Print() Nur für Type = "EEGData": druckt den Inhalt des Fensters. Sub Restore() Fenster auf normale Größe zurücksetzen Sub SetDisplayedInterval(Position as Long, DataPoints as Long) Nur für Type = "EEGData": bestimmt das dargestellte Datenintervall. Sub SetMarkedInterval(Position as Long, DataPoints as Long) Nur für Type = "EEGData": bestimmt das markierte Datenintervall. Der Bereich muss innerhalb des dargestellten Intervalls liegen. Sub MoveMarkedInterval(Position as Long) Nur für Type = "EEGData": bewegt das das markierte Datenintervall. Der Bereich muss innerhalb des dargestellten Intervalls liegen. Sub SetScalingRange(MinValue as Single, MaxValue as Single) Nur für Type = "EEGData": Einstellung der Skalierung. Sub ResetScalingRange() Nur für Type = "EEGData": Rücksetzen der Skalierung auf den voreingestellten Wert. Eigenschaften DisplayBaselineCorrection As Boolean Nur für Type = "EEGData": Baseline-Korrektur der Kurvendarstellung ein/aus. Hierbei wird nur die Baseline der Darstellung verändert, nicht die Daten selbst. DisplayDataPoints as Long Schreibgeschützt Nur für Type = "EEGData": gibt die Anzahl der Datenpunkte im dargestellten Datenintervall an. DisplayStartPosition as Long Schreibgeschützt Nur für Type = "EEGData": gibt die Startposition des dargestellten Datenintervalls in Datenpunkten an (1 - ...). HistoryNode As HistoryNode Schreibgeschützt Vision Analyzer OLE Automation Referenzhandbuch 27 Für den Fall, dass es sich bei dem Fenster um ein EEG-Datenfenster handelt (Type = "EEGData"), repräsentiert dieses Objekt den assoziierten History-Knoten. MarkedIntervalDataPoints as Long Schreibgeschützt Nur für Type = "EEGData": gibt die Anzahl der Datenpunkte im markierten Intervall an. MarkedIntervalStartPosition as Long Schreibgeschützt Nur für Type = "EEGData": gibt die Startposition des markierten Intervalls in Datenpunkten an (1 - ...). Title As String Fenstertitel. Type As String Schreibgeschützt Beschreibung des Fenstertyps. Aktuell definierte Typen sind: "EEGData" EEG-Datenfenster "Macro" Makrofenster, d.h. Fenster zum Editieren von Basic-Quellcode. "Template" History-Vorlagenfenster 3.24. Windows Beschreibung Dieses Objekt ist eine Auflistung von "Window"-Objekten, die den offenen Fenstern im Arbeitsbereich entsprechen. Methoden Eigenschaften Count As Long Schreibgeschützt Anzahl der offenen Fenster Item(TitleOrIndex As Variant) As Window Standardelement, schreibgeschützt Liefert bei Angabe des Titels oder des Indexes (1-...) ein "Window"-Objekt. 28 3.25. Workspace Beschreibung Diese Objekt beschreibt einen einzelnen Workspace. Methoden Eigenschaften ExportFileFolder As String Schreibgeschützt Standardverzeichnis der exportierten Dateien FullName As String schreibgeschützt Name der Workspace-Datei mit voller Pfadangabe HistoryFileFolder Schreibgeschützt Verzeichnis der History-Dateien Name As String schreibgeschützt Basisname der Workspace-Datei ohne Verzeichnisangabe und Dateierweiterung. RawFileFolder As String Schreibgeschützt Rohdatenverzeichnis 3.26. Workspaces Beschreibung Dieses Objekt ist eine Auflistung von "Workspace"-Objekten. Es wird im Objekt "Application" genutzt, um alle Workspaces im Arbeitsverzeichnis aufzulisten. Methoden Sub Refresh() Diese Methode dient der Auffrischung der Workspace-Informationen. Eigenschaften Count As Long Schreibgeschützt Anzahl der verfügbaren Workspaces Item(NameOrIndex As Variant) As Workspace Standardelement, schreibgeschützt Liefert bei Angabe des Namens oder des Indexes (1-...) ein "Workspace"-Objekt. Vision Analyzer OLE Automation Referenzhandbuch 29 4. Aufrufbare Transformationen In diesem Kapitel werden die aktuell verfügbaren Transformationen und ihre Parameter aufgelistet, die mit Transformation.Do(Transformation As String, Parameters As String, ParentNode As HistoryNode, [NodeName As String]) aufgerufen werden können. Es gibt hier zwei Funktionsargumente, "Transformation" und "Parameters", die in den folgenden Unterkapiteln für die verschiedenen Transformationen erläutert werden. Die folgenden Regeln gelten für die Transformationsparameter. Es gibt immer das Paar Variable=Wert. Transformation.Do "Filters", "Highcutoff=70", ActiveNode Werden mehrere Variablen eingegeben, so werden diese mit einem Semikolon (";") getrennt. Transformation.Do "Filters", "Highcutoff=70;Lowcutoff=2;Notch=50", ActiveNode Gehören einer Variablen mehrere Werte an, so werden sie durch Komma (",") getrennt. Transformation.Do "Filters", "Highcutoff=70,48;Lowcutoff=2,24;Notch=50", ActiveNode Wenn Variablen als Vektoren vorgesehen sind, so werden die Elemente mit Klammern indiziert "()". Der erste Index ist die 1. Ein Wert ohne Klammern wird einem Wert mit Index (1) gleichgesetzt, d.h. "Highcutoff" ist gleich "Highcutoff(1)". Transformation.Do "Filters", "Highcutoff = 12,48; Highcutoff(3)=70,48; Lowcutoff(3) = 2; Notch(3)=50", ActiveNode Groß- und Kleinschreibung der Variablennamen werden ignoriert. Die Variablenzuweisung kann in beliebiger Reihenfolge erfolgen. Die nachfolgenden Transformationen werden im Benutzerhandbuch genauer erläutert. Wir beschränken uns hier nur auf ihre Parameter-Syntax. 30 4.1. Band-rejection Filters (Bandsperrfilter) Transformationsname: BandRejection Variable Filter Channels NamedChannels Beschreibung Hier wird ein Bandsperrfilter definiert. Da mehrere Filter definiert werden können, kann die Variable indiziert werden. Ein Filter wird immer durch drei Werte beschrieben: Frequenz, Bandbreite und Ordnung. Die Ordnung kann nur die Werte 2 oder 4 annehmen. Beispiel: Filter(1)=17,2,4;Filter(2)=50,2,2; Diese Variable listet die Kanäle, die gefiltert werden sollen, numerisch auf. Beispiel: Channels=1,2,15 Die Variable darf nicht gleichzeitig mit der Variablen "NamedChannels" definiert sein. Ist weder "Channels" noch "NamedChannels" definiert, werden alle Kanäle gefiltert. Hier können die Kanäle, die gefiltert werden sollen, mit ihren Namen aufgelistet werden. Beispiel: NamedChannels=Fp1,F7,Oz Diese Variable darf nicht gleichzeitig mit der Variablen "Channels" definiert sein. Beispiele: Transformation.Do "BandRejection", "Filter=20,2,4", ActiveNode Es wird ein Bandsperrfilter bei 20 Hertz mit einer Bandbreite von 2 Hertz und einer Ordnung von 4 eingestellt. Es werden alle Kanäle gefiltert. Transformation.Do "BandRejection", "Filter(1)=20,2,4; Filter(2)=30,3,4;Channels=2,4,16", ActiveNode Hier werden ein Bandsperrfilter bei 20 Hertz mit einer Bandbreite von 2 Hertz und einer Ordnung von 4, sowie ein Filter bei 30 Hertz, einer Bandbreite von 3 Hertz und einer Ordnung von 4 definiert. Der zweite, der vierte und der sechzehnte Kanal werden gefiltert. Transformation.Do "BandRejection", "Filter=20,2,2;NamedChannels=Fp1", ActiveNode Der Kanal "Fp1" wird mit einem Bandsperrfilter von 20 Hertz, einer Bandbreite von 2 Hertz und einer Ordnung von 2 gefiltert. Vision Analyzer OLE Automation Referenzhandbuch 31 4.2. Filters (Filter) Transformationsname: Filters Variable LowCutoff HighCutoff Notch IndividualFilters Beschreibung Hier wird ein Hochpassfilter definiert. Die Variable kann indiziert werden. In diesem Falle bezeichnet der Index die Nummer des Kanals, der gefiltert werden soll. Das Filter wird durch zwei Werte beschrieben, Frequenz und Steilheit in db/Oktave. Die Steilheit kann die Werte 12, 24 oder 48 annehmen. Wird sie nicht angegeben, so wird sie mit 12 angesetzt. Beispiel: LowCutoff(1)=2,24;LowCutoff(2)=4; Diese Variable bezeichnet ein Tiefpassfilter. Ansonsten trifft die Beschreibung des Hochpassfilters auch auf dieses Filter zu. Beispiel: HighCutoff(1)=70,24;HighCutoff(2)=70; Hier kann das Bandsperrfilter für das Netzbrummen angegeben werden. Es kann hier ebenso wie bei Hoch- und Tiefpass ein Kanal indiziert werden. Die zulässigen Werte für das Netzfilter sind 50 oder 60. Beispiel: Notch=50 Dies ist eine so genannte boolsche Variable. Sie kann die Werte "false" (Falsch) oder "true" annehmen. Diese Variable entscheidet, ob die Kanäle individuell gefiltert werden oder alle mit denselben Filtern versehen werden. Normalerweise entscheidet das Programm selbsttätig, ob individuell gefiltert wird. Wenn irgendwo in den Filterparametern ein Index größer als eins auftaucht, wird auf individuelle Filterung umgeschaltet. Ansonsten werden alle Kanäle gleich gefiltert. Nur für den Fall also, dass ausschließlich der erste Kanal gefiltert werden soll, ist diese Variable auf "true" zu setzen.. Beispiel: IndividualFilters=true Beispiele: Transformation.Do "Filters", "HighCutoff=70", ActiveNode Hier wird ein Tiefpassfilter von 70 Hertz definiert. Da die Steilheit nicht angegeben wurde wird sie mit 12 db/Oktave angesetzt. Es werden alle Kanäle mit diesem Wert gefiltert. Transformation.Do "Filters", "LowCutoff(10)=0.535,48;HighCutoff(10)=70,48;Notch(10)=50", ActiveNode Nur der zehnte Kanal wird hier mit einem Hochpass von 0,535 Hertz, 48db/Oktave, einem Tiefpass von 70 Hertz, 48 db/Oktave sowie einem Netzsperrfilter von 50 Hertz gefiltert. Transformation.Do "Filters", "IndividualFilters=True; LowCutoff(1)=2", ActiveNode Hier wird nur der erste Kanal mit einem Hochpassfilter von 2 Hertz gefiltert. 32 4.3. Formula Evaluator (Formelauswerter) Transformationsname: Formula Variable Formula Unit KeepOldChannels Beschreibung Die Variable beschreibt die Formel für einen neuen Kanal als Text. Da mehrere Formeln definiert werden können, kann die Variable indiziert werden. Die Formel wird gemäß der Syntax des Formelauswerters eingegeben. Diese Syntax finden Sie im Benutzerhandbuch. Beispiel: Formula(1) = Fp1Power = Fp1 * Fp1 Diese Variable beschreibt die Einheit mit der ein neu formulierter Kanal versehen wird. Wenn die Einheit nicht angegeben wird, wird Mikrovolt angenommen. Die möglichen Werte sind ("µ" kann durch "u", "²" kann durch "2" ersetzt werden, Groß-, Kleinschreibung wird ignoriert): "None" (einheitenlos) "µV" oder "uV" "μV/Hz" oder "uV/Hz" "μV²" oder "uV2" "μV²/Hz" oder "uV2/Hz" "μV/m²" oder "uV/m2" Beispiel: Unit(1) = uV2 Dies ist eine so genannte boolsche Variable. Sie kann die Werte "false" (Falsch) oder "true" annehmen. Diese Variable entscheidet, ob die Daten des Vorgängerknotens in den neuen Datensatz übernommen werden. Beispiel: KeepOldChannels = true Beispiele: Transformation.Do "Formula", "Formula(1) = RelationFp1Fp2 = Fp1 / Fp2; Unit(1) = none", ActiveNode Der neue Datensatz enthält einen neuen Kanal mit dem Namen "RelationFp1Fp2". Die Daten sind einheitenlos. Die Daten des Vorgängerknotens werden nicht übernommen. Transformation.Do "Formula", "Formula(1) = Fp1' = (shift(Fp1, -1) + Fp1 + shift(Fp1, 1)) / 3; Formula(2) = Fp2' = (shift(Fp2, -1) + Fp2 + shift(Fp2, 1)) / 3; KeepOldChannels = true", ActiveNode Die zwei neuen Kanäle "Fp1'" und "Fp2'" werden erstellt. Die Einheiten sind, da nicht definiert, µV. Die Daten des Vorgängerknotens werden übernommen. Vision Analyzer OLE Automation Referenzhandbuch 33 5. Aufzählungstypen Im Folgenden werden die verschiedenen Aufzählungstypen (Enumeratoren) erläutert. Zu beachten ist, dass der eingebaute Basic-Interpreter keine Deklaration von Variablen eines Aufzählungstyps erlaubt, sofern der Aufzählungstyp über eine Automatisierungsschnittstelle importiert wird. Überall wo diese Typen auftreten, ist daher der Typ "Long" zu verwenden. Beispiel: Nicht: Dim vdt As VisionDataType ' Gibt Fehlermeldung vdt = viDtTimeDomain Sondern: Dim vdt As Long ' Korrekt vdt = viDtTimeDomain 5.1. VisionDataType Konstanten für die verschiedenen Datentypen, die ein History-Knoten verwalten kann. Enum VisionDataType viDtTimeDomain = &H101 ' Daten im Zeitbereich viDtTimeDomainComplex = &H102 ' Komplexe Daten im Zeitbereich viDtFrequencyDomain = &H201 ' Daten im Frequenzbereich viDtFrequencyDomainComplex = &H202 ' Komplexe Daten im Frequenzbereich viDtTimeFrequencyDomain = &H301 ' Daten im Zeit-, Frequenzbereich (z.B. Wavelet-Daten) viDtTimeFrequencyDomainComplex = &H302 ' Daten im Zeit-, Frequenzbereich, komplex viDtUserDefined = &H10001 ' Benutzerdefinierter Typ viDtUserDefinedComplex = &H10002 ' Benutzerdefinierter Typ, komplex viDtUserDefinedNoMatrix = &H100FF ' Benutzerdefinierter Typ, der nicht in das ' Standardraster passt. End Enum 5.2. VisionDataUnit Konstanten für die verschiedenen Einheiten, die Daten eines Kanals haben können. Enum VisionDataUnit viDuMicrovolt = 0 ' μV viDuUnitless = 1 ' Keine Einheit. viDuMicrovoltsPerHertz = 2 ' μV/Hz viDuMicrovoltSquare = 3 ' μV2 viDuMicrovoltSquarePerHertz = 4 ' μV2/Hz viDuMicrovoltPerMeterSquare = 5 ' μV/m2 End Enum 5.3. VisionSegType Konstanten für die verschiedenen Segmentierungsarten. Enum VisionSegType viStNotSegmented = 0 ' Unsegmentiert viStMarker = 1 ' Segmentiert relativ zu Markerpositionen viStMarkerAndABE = 2 ' Segmentiert relativ zu Markerpositionen mit Hilfe eines ABE-Ausdrucks viStFixedTime = 3 ' Segmentiert in festen Zeiteinheiten vistManual = 4 ' Manuell segmentiert, Segmente unterschiedlicher Länge möglich End Enum 5.4. VisionLayerIncFunction Konstanten für die Schrittweiten-Funktion zwischen den Ebenen ("Layers") eines Datensatzes. Solche Ebenen treten bei dreidimensionalen Daten, wie z.B. kontinuierliche Wavelets, auf. Enum VisionLayerIncFunction viLifLinear = 0 ' Linear, d.h. gleicher Abstand zwischen den Ebenen viLifLogarithmic = 1 ' Logarithmischer Abstand zwischen den Ebenen End Enum 34 6. Fehlercodes Dieses Kapitel listet die Fehlercodes und die mit ihnen assoziierten Meldungen auf, die in den verschiedenen Funktionen auftreten können. Die Fehlernummern kennzeichnen nur die unteren 15 Bits des Fehlercodes. Um also den entsprechenden Fehlercode zu extrahieren, müssen die oberen Bits ausmaskiert werden. Beispiel: Sub Main On Error GoTo CheckError ' Initialize error handling. Set hf = HistoryFiles(1) MsgBox "First channel name: " + hf(1).Dataset.Channels(1).Name Exit Sub CheckError: nError = Err.Number And &h7fff ' Extract pure error code. Select Case nError Case 1501 ' History file is closed. MsgBox "History file was closed. Please open the first history file " _ " and then retry" End Select End Sub Nachfolgend die finden Sie die Fehlercodes: Code 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 Meldung Display name of History File: Invalid characters found in '%s'. '%s' can't be used for naming. History file is closed. Can't handle this data type. History node is invalid. History node not found. The data set is currently not available. History file is invalid. History node does not contain data. History file not found. Can't access workspace. Index is out of range. A history node with the same name already exists. Rename History Node: Invalid characters found in '%s'. '%s' can't be used for naming. Channel not found. No workspace is loaded. Window does no longer exist. Requested data is out of segment range. Window not found. History node collection is invalid. History template not found. History Template: Type mismatch. User canceled history template processing. The start node '%s' was not found in the history template '%s'. User defined message. A history file with this display name already exists in the current workspace. Can't change display name on open history file. 'Create' has not been called. Invalid data size or format. Channel is out of range. NewHistoryNode.Create: Invalid data type. NewHistoryNode.Create: Parameters mismatch. NewHistoryNode.AddMarker: Marker out of range. NewHistoryNode.WriteData: Can't write data. Data set inherits data. Vision Analyzer OLE Automation Referenzhandbuch 35 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 36 Transformation.Do: Transformation '%s' not found. Transformation.Do: '%s', parameters '%s' are not correct. Transformation.Do: Type mismatch <Error, warning or other message from Transformation> Dataset.GetData: The "ChannelList" parameter is incorrect. The requested data layer is out of range. The requested number of layers is invalid. Wrong function for this type of data. Use NewHistoryNode.CreateEx(). The requested layer function is not supported. Workspace not found. Landmark not found. Marked interval can only be inside of a displayed interval. User canceled operation. Invalid characters in history node name. '\/:' can't be used for naming. Progress bar is not initialized. Menu item not found. FastArray: First element is out of range. FastArray: Division by Zero. FastArray: Source data array is not initialized. FastArray: Out of memory. Fast Array: Target data array is not initialized. FastArray: Only one dimensional floating point single precision arrays are supported. FastArray.Parameters lead into infinite loop. FastArray: Parameter exceeds the limt of 536870912. FastArray: The parameters would lead into more than 536870912 assignments. This means long lasting operations that can't be interrupted.