gafusion / omas

Ordered Multidimensional Array Structure
http://gafusion.github.io/omas
MIT License
32 stars 15 forks source link

Probably merging ods #167

Closed jmcclena closed 3 years ago

jmcclena commented 3 years ago

@orso82 Maybe I'm just doing something stupid, but I'm having trouble combining ods due to certain entries not having valid IMAS locations. Example script and its output are shown below.

def combine_ods(ods_1, ods_2, weight=0.5,update=True):
    from omas import ODS
    ods_n = ods_1
    if not update:
        ods_n = ODS().copy_attrs_from(ods_1)   

    for item in ods_1:

        if isinstance(ods_1[item], ODS):
            ods_n[item] = combine_ods(ods_1[item], ods_2[item], weight=weight,update=True)
        elif isinstance(ods_1[item], numpy.ndarray):
            ods_n[item] = ods_1[item] * (1.0-weight) + weight * ods_2[item]
        elif isinstance(ods_1[item], float):
            ods_n[item] = ods_1[item] * (1.0-weight) + weight * ods_2[item]
            print(item)
    print(ods_n.keys())
    return ods_n

try:
    ods1 = ODS()
    ods1['core_profiles.profiles_1d.0.ion.0.element[0].z_n'] = 1.
    ods2 = ODS()
    ods2['core_profiles.profiles_1d[0].ion[0].element[0].z_n'] = 2.
    ods_new = combine_ods(ods1, ods2,
     weight=0.5,update=False)
except Exception as err:
    print(err)

try:
    ods1 = ODS()
    ods1['equilibrium.time_slice[0].profiles_2d[0].psi'] = np.array([[0,1],[0,1]])
    ods2 = ODS()
    ods2['equilibrium.time_slice[0].profiles_2d[0].psi'] = np.array([[0,2],[0,2]])
    ods_new = combine_ods(ods1, ods2,weight=0.5,update=False)
except Exception as err:
    print(err)

outputs:

['z_n']
[0]
Not a valid IMAS 3.32.1 location: core_profiles.profiles_1d.0.ion.0.element
                                                                                 ^^^^^^^
Did you mean: element, temperature, density, velocity, temperature_fit, ...
['psi']
[0]
Not a valid IMAS 3.32.1 location: equilibrium.time_slice.0.profiles_2d
                                                                        ^^^^^^^^^^^
Did you mean: profiles_2d, profiles_1d, global_quantities, coordinate_system, constraints, ...