You can use mathematical expressions to build datasets dynamically. You can use create seismic and horizon datasets.
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");
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");