In practice, each different calculation approach is implemented as a specific 'calculation layer'. Each layer acts as a black box that must take as input a set of physical properties to estimate and a calculation schema that controls how they should be estimated (e.g. how long simulations should be run for), and must return those properties which it was able to estimate as well as the uncertainty in those values. These calculations layers are then 'stacked' together, whereby the framework will first attempt to estimate the data set using the fastest layer at the top of the stack. Any properties which are estimated to within the specified uncertainty are then returned back to the user. Any properties which could not be estimated, for example, when an approach does not yet support estimated a particular type of property or the approach not being able to estimate a property to within the specified uncertainty, are then used as input for the next fastest layer. This process is then repeated until either all properties have been estimated, or there are no remaining calculations layers left to attempt (Figure ).