Put Entire IDSΒΆ

This example focuses on putting IDS into entry and passing IDS validation.

See also

API documentation for imas.open, put

public static void putEntireIDS() throws Exception {
    
    try {
        int dataEntry = imas.open("imas:mdsplus?path=./testdb_mdsplus", LowLevel.FORCE_CREATE_PULSE);
        imas.equilibrium emptyEquilibrium = new imas.equilibrium();

        // set mandatory field of equilibrium IDS
        emptyEquilibrium.ids_properties.homogeneous_time = LowLevel.IDS_TIME_MODE_HOMOGENEOUS;

        // when ids_properties.homogeneous_time is set to IDS_TIME_MODE_HOMOGENEOUS,
        // all time-dependent fields values correspond to <ids>.time vector.
        double[] timeArray = {1.0, 2.0, 3.0};
        emptyEquilibrium.time = new Vect1DDouble(timeArray);

        // intentional error when entering data. equilibrium/vacuum_toroidal_field/b0 should have the same size as equilibrium/time
        double[] incorrectVacuumToroidalField_b0Size = {1.0};
        emptyEquilibrium.vacuum_toroidal_field.b0 = new Vect1DDouble(incorrectVacuumToroidalField_b0Size);

        // NOTE: putting ids into entry will trigger validate function.
        // IDS fields types and dimensions will be checked
        try {
            emptyEquilibrium.put(dataEntry, "equilibrium", emptyEquilibrium);
        } catch (Exception e) {
            System.out.println("Caught exception (raised intentionally): " + e.getMessage());
        }

        // to fix it we need to set proper size of that field in IDS
        double[] correctVacuumToroidalField_b0Size = {1.0, 2.0, 3.0};
        emptyEquilibrium.vacuum_toroidal_field.b0 = new Vect1DDouble(correctVacuumToroidalField_b0Size);
        emptyEquilibrium.put(dataEntry, "equilibrium", emptyEquilibrium);

        imas.close(dataEntry);
        // NOTE: some IDS fields are put automatically by Access Layer. Examples of this type of fields are:
        // - <ids>/ids_properties/version_put/data_dictionary
        // - <ids>/ids_properties/version_put/access_layer
        // - <ids>/ids_properties/version_put/access_layer_language

        // IDSs can be printed this way
        try {
            int dataEntry1 = imas.open("imas:mdsplus?path=./testdb_mdsplus", LowLevel.OPEN_PULSE);
            imas.equilibrium savedEquilibrium = imas.equilibrium.get(dataEntry1, "equilibrium");
            System.out.println("Saved equilibrium/vacuum_toroidal_field/b0 field: " + savedEquilibrium.vacuum_toroidal_field.b0);
            imas.close(dataEntry1);
        } catch (Exception e) {
            System.out.println("Caught exception (raised intentionally): " + e.getMessage());
            throw e;
        }

    } catch (Exception e) {
        System.err.println("Following exception occurred\n" + e.getMessage());
        throw e;
    }
}