Geopsy: Set header

From GeopsyWiki
Jump to navigation Jump to search

This section explains how to modify header information stored in a database in a very efficient way. Any information about signals can be viewed in a table. Signals can be modified one by one by cell editing (Ctrl+K). For huge number of signals this is boring and time consuming. Instead, you can create formulas and apply them with one single click. The syntax for these formulas is rather simple.

General presentation

Dialog box to editing header information

From any active signal viewer (which is by definition a list of signals), click on menu item Edit/Set headers. A dialog box will appear. You can type any number of equations in the left editor. To assist you, for instance for a correct spelling of signal field names, you can use the combos Variables, usual operators and Functions SetHeadersCombos.png


All formulas are separated by ; (like in C). If a line begins with //, all text is ignored until the end of the line (like C comments). The same way, all text included between /* and */ is considered as a comment. Commenting parts of an equation may be interesting to solve errors.

The general syntax is :

SignalData = value.


There are various assignment operators working for numbers and character strings:

SignalData =  value      // Set SignalData to value
value1 + value2          // Sum or concatenation operator
SignalData += value      // Set SignalData to the sum of its previous content with value
value1 == value2  	 // Returns a bool value, true if value1 and value2 are equal
value1 != value2  	 // Returns a bool value, true if value1 and value2 are not equal 

Some assignment operators work only for numbers:

value1 - value2          // Difference operator
value1 - value2          // Multiplication operator
value1 / value2          // Floating point division operator
value1 DIV value2        // Integer division operator. E.g. 5 DIV 2 produces 2
value1 < value2  	 // Returns a bool value, true if value1 is less than value2
value1 ≤ value2  	 // Returns a bool value, true if value1 is less than or equal to value2
value1 > value2  	 // Returns a bool value, true if value1 is greater than value2
value1 ≥ value2  	 // Returns a bool value, true if value1 is greater than or equal to value2
SignalData -= value      // Set SignalData to the difference between its previous content and value
SignalData *= value      // Set SignalData to the product of its previous content with value
SignalData /= value      // Set SignalData to the ratio between its previous content and value
                            A floating point division is performed
value1 [ value2 ]  	 // If value1 is an array, the value2 th  element is returned.
                            If value1 is not an array, value2 is ignored.


Additionally, you have access to some useful functions for text manipulation or for conditional operations:

if(value1, value2, value3)        // If value1 evaluates to true, value2 is returned else value3
justify(string, nchar, fillchar)  // Right justifies string to get a nchar length. Blanks are filled with fillchar.   
                                     fillchar must be 1 character length. E.g. justify( "45", 5, "0") produces "00045".
left(string, nchar)               // Returns the first nChar characters of string. E.g. left("45678",2) returns "45"
length(string)                    // Returns length of string. E.g. length("45678") returns 5
mid(string, pos, nchar)           // Returns nChars characters of string starting at pos. pos starts counting at 0.
                                     E.g. mid("45678", 1, 2) returns "56".
right(string, nchar)              // Returns the last nChar characters of string. E.g. left("45678",2) returns "78"


Any unrecognized name not starting by a number is considered as a custom variable. Custom variables are initialized by an empty string if there not in the left part of "=" assignment. They can be used in formulas like any constant or signal data.

When you click on ApplyButton.png, all equations are executed for all signals in the order the equations appear in the editor and in the order of signals in the viewer. Custom variables are persistent during the global loop. This way values can be "propagated" from the first signals to the next one.

The content of the editor can be saved or restored to a .headequ file (a simple text file in fact) by clicking on the button SaveButton.png and LoadButton.png respectively.



Examples

Example 1 : Modify signal names

ShortFileName is the original file name without its complete path

Name=mid( ShortFileName,3,5 );

Example 2 : Set the sampling frequency to 100 Hz

Set sampling frequency to 100 Hz. Can be useful when loading signal from text files without header information. The sampling frequency is the minimum field required to display signals.

SampFreq=100;

Example 3 : Set the components

Set the component from the signal file name. ShortFileName is the original file name without its complete path. We assume that the file name contains a keyword indicating the component.

if(mid( ShortFileName, 12, 1 )=="E", Component="East");
if(mid( ShortFileName, 12, 1 )=="N", Component="North");
if(mid( ShortFileName, 12, 1 )=="Z", Component="Vertical");

Example 4 : Set comments

 Comments="RING01"

The application of the equations shown is the examples No 1, 2, 3 and 4 modify the headers as follow:

Modified headers after applying the equations 1 to 4