Skip to content
Gijs Molenaar edited this page Feb 13, 2014 · 4 revisions

The briefest summary of !MeqTrees

The central idea behind MeqTrees is that arbitrary mathematical expressions can be implemented as trees (graphs, really) of software nodes, each of which has zero or more child nodes. The main function of a node is to return a Result upon receiving a Request. The latter specifies an n-dimensional grid of points (a.k.a. the Cells of the Domain) for which values are required. By default, a Domain is a rectangular area in freq-time space, but any number of dimensions can be specified. Whenever a node receives a Request, it passes it on to its children (if any), and waits for their Results. According to its function (e.g. Add), the node then combines its child Results into a Result of its own, and returns it.

Nodes with zero children are called "leaf nodes", which have their own ways to calculate a Result. A very important leaf node is the MeqParm, which represents a parameter of the expression. A MeqParm has access to zero or more "Funklets", usually stored in a table. By default, a Funklet is a Polc, a 2D array of polynomial coefficients that can be used to calculate values for arbitrary points in its "validity domain". Other types of Funklets are also supported. A very important function of MeqTrees is to solve for the Funklet coefficients of an arbitrary set of MeqParms.

Each node has an internal state record. Some of its control fields may be defined when the node is created, or dynamically during execution. The state record of every node may be inspected with the MeqBrowser.

A node may have multiple parent nodes, which may issue it with the same Request. Therefore, its state record includes a cache that may hold the last Result until a different Request comes in. This behaviour may be tuned.

Trees are generated by means of the Tree Definition Language ./TDL. An older version of this manual can be found in .

Reference Manual

Clone this wiki locally