# Using Mathematical Formulas To Create Datasets

You can use mathematical expressions to build datasets dynamically. You can use create seismic and horizon datasets.

### Seismic Datasets (calculator)

```
ISeismicData firstData = IData.factory.createNewInstance(..., ISeismicData.class);
ISeismicData secondData = IData.factory.createNewInstance(..., ISeismicData.class);
LinkedHashMap<String, ISeismicData> mappings = new LinkedHashMap<String, ISeismicData>();
mappings.put("A", firstData);
mappings.put("B", secondData);
ICalculatorSeismicData calculatorData = ICalculatorSeismicData.Factory.createNewInstance(mappings, "A + B", "A");
```

### Horizon Datasets

Deriving from other horizons (calculator)

```
IHorizonData firstData = ...
IHorizonData secondData = ...
LinkedHashMap<String, IData> mappings = new LinkedHashMap<String, IData>();
mappings.put("A", firstData);
mappings.put("B", secondData);
IHorizonData calculatorData = HorizonUtil.createCalculatorHorizonData(mappings, "myData", "A + B", "A");
```

Deriving from the trace header values of a seismic dataset (time horizon from header)

```
ISeismicData seismicData = ...
IHorizonData horizonData = HorizonUtil.createTraceHeaderHorizonData(seismicData, "myData", "MUTE_START * 1000");
```