-
Notifications
You must be signed in to change notification settings - Fork 0
LaTiS Data Model
The LaTiS data model was largely inspired by, and borrows the syntax from, the VisAD data model. The model is designed to represent arbitrarily complex datasets in terms of only three basic constructs:
- Scalar: A single Variable
- Tuple: A collection of Variables
- Function: A mapping from a domain Variable to a range Variable
Because a Variable can be any one of those types, they can be composed in any way to represent/model any dataset.
For example, imagine measuring the temperature every day. For this sequence of measurements, time is the independent (domain) variable and temperature is the dependent (range) variable. You can use these data to answer questions like, "what was the temperature on this day last year?" This time series dataset behaves as a function: give it an independent variable (time) and it will spit out the dependent variable (temperature). In the context of the LaTiS data model, we can say that the Scalar time maps to the Scalar temperature. This can be represented with the following syntax:
time -> temperature
If you also measure humidity, you now have two dependent scalar variables. A LaTiS Function can have only one range variable. The solution is to group the two scalars into a Tuple (denoted with parentheses) which is now the single range variable of the time series Function:
time -> (temperature, humidity)
Now imagine that you want to add wind measurements to your dataset. If you care about wind speed and direction, you can't simply represent it as a single Scalar. Instead of modeling them as unrelated parameters, you can represent the wind as a Tuple, a single Variable that encapsulates the wind measurement: (speed, direction). Now, you can model your dataset with LaTiS as:
time -> (temperature, humidity, (speed, direction))
Now suppose you are interested in monitoring the spectral variability of the sun and add a solar spectrum to your measurements. The spectrum itself represents a mapping from wavelength to flux, so we can model it as a LaTiS Function: (wavelength -> flux) and add that to our dataset model:
time -> (temperature, humidity, (speed, direction), (wavelength -> flux))
Now all your friends are jealous and want their own weather station like yours. To distinguish your temperature measurements from your friend's across town, you need to capture another bit of information: the location. You should think about what you are really trying to capture with this expanding dataset. The location, perhaps represented by a Tuple of latitude and longitude scalars: (lat,lon), could just be treated as another dependent variable:
time -> (temperature, (lon,lat))
This might be suitable, especially if you plan on moving your station around. In other words, the location itself is a function of time. But perhaps you are interested in the spatial variability of the weather. In that case you might want to treat location as an independent variable and model it as the domain of a LaTiS Function:
time -> ((lon,lat) -> temperature)
You can begin to see that there is no limit to how complex your dataset can be yet still be expressed with a LaTiS model using only the scalar, tuple, and function constructs.