Hi there,
I am currently trying to extend the WIP frontend for openPMD.
Let me be more specific about the magnetic unit problem: The already existing frontend was created on top of yt 3.2.1 and appeared to work fine. Recently, the code was migrated onto the yt_analysis/yt branch, which I understand to be your dev version. What appears to be the problem is this line of code in our openPMDDataset class: self.magnetic_unit = self.quan(1.0, "T")
This worked with out noticeable problems with the old codebase. After the migration, loading a oPMD file throws YTUnitsNotReducible:
In [1]: import yt In [2]: f = yt.load('/data/home/koller47/openpmd/example-2d/hdf5/data00000100.h5') Warning: Attribute author (recommended) does NOT exist in `/`! Found 1 iteration(s) Iteration 100 : found 4 meshes Iteration 100 : found 2 particle species Warning: Key particlePatches (recommended) does NOT exist in `/data/100/particles/Hydrogen1+`! Warning: Key particlePatches (recommended) does NOT exist in `/data/100/particles/electrons`! yt : [INFO ] 2016-05-26 19:22:56,315 openPMD: found 5 iterations in directory yt : [WARNING ] 2016-05-26 19:22:56,316 openPMD: only choose to load the first iteration (100) --------------------------------------------------------------------------- YTUnitsNotReducible Traceback (most recent call last) <ipython-input-7-b3e410e545a5> in <module>() ----> 1 f = yt.load('/data/home/koller47/openpmd/example-2d/hdf5/data00000100.h5')
/data/home/koller47/openpmd/yt/convenience.pyc in load(*args, **kwargs) 84 candidates = find_lowest_subclasses(candidates) 85 if len(candidates) == 1: ---> 86 return candidates[0](*args, **kwargs) 87 if len(candidates) == 0: 88 if ytcfg.get("yt", "enzo_db") != '' \
/data/home/koller47/openpmd/yt/frontends/openPMD/data_structures.pyc in __init__(self, filename, dataset_type, storage_filename, units_override) 294 self._setBasePath(self._handle, self._filepath) 295 Dataset.__init__(self, filename, dataset_type, --> 296 units_override=units_override) 297 self.storage_filename = storage_filename 298 self.fluid_types += ('openPMD',)
/data/home/koller47/openpmd/yt/data_objects/static_output.pyc in __init__(self, filename, dataset_type, file_style, units_override, unit_system) 235 self._create_unit_registry() 236 self._parse_parameter_file() --> 237 self.set_units() 238 self._setup_coordinate_handler() 239
/data/home/koller47/openpmd/yt/data_objects/static_output.pyc in set_units(self) 806 self.unit_registry.modify('a', 1/(1+self.current_redshift)) 807 --> 808 self.set_code_units() 809 810 if getattr(self, "cosmological_simulation", False):
/data/home/koller47/openpmd/yt/data_objects/static_output.pyc in set_code_units(self) 843 # If we do not have this set, but some fields come in in 844 # "code_magnetic", this will allow them to remain in that unit. --> 845 self.unit_registry.modify("code_magnetic", self.magnetic_unit) 846 vel_unit = getattr( 847 self, "velocity_unit", self.length_unit / self.time_unit)
/data/home/koller47/openpmd/yt/units/unit_registry.pyc in modify(self, symbol, base_value) 107 108 if hasattr(base_value, "in_base"): --> 109 base_value = base_value.in_base().value 110 111 self.lut[symbol] = (float(base_value), ) + self.lut[symbol][1:]
/data/home/koller47/openpmd/yt/units/yt_array.pyc in in_base(self, unit_system) 559 >>> E_new = E.in_base(unit_system="galactic") 560 """ --> 561 return self.in_units(self.units.get_base_equivalent(unit_system)) 562 563 def in_cgs(self):
/data/home/koller47/openpmd/yt/units/unit_object.pyc in get_base_equivalent(self, unit_system) 421 if unit_system == "cgs": 422 if current_mks in self.dimensions.free_symbols: --> 423 raise YTUnitsNotReducible(self, "cgs") 424 return yt_base_unit 425 else:
YTUnitsNotReducible: The unit 'T' cannot be reduced to a single expression within the cgs base system of units.
With self.magnetic_unit = self.quan(1.0, "gauss") loading the file works fine and as expected.
As for openPMD test data, you can get 2D and 3D ones from here: https://github.com/openPMD/openPMD-example-datasets
On 24/05/16 18:54, John Zuhone wrote:
The latest development version of yt now has “unit systems”:
http://yt-project.org/docs/dev/analyzing/units/unit_systems.html
But Nathan is correct—this doesn’t affect the Tesla unit per se—it should be fine. If we could get a script and a more specific error that you are seeing, that would help.
On May 24, 2016, at 12:30 PM, Huebl, Axel <a.huebl@hzdr.de mailto:a.huebl@hzdr.de> wrote:
Hi yt-devs,
I am forwarding this conversation to the public list to keep it open for others to join in and to build up a record that might help others.
Our new student Fabian updated our frontend and implemented particle readers. Unfortunately some details of the particle "fields" still cause some bumps that we can not get our head around.
We are now able to read fields and particles, even chunk-wise, and can work with the data we read in python scripts via the all_data() method.
Nevertheless, using the particle scatter plots such as yt.ParticlePlot seems not to work. We have some problems with unions / the "all" group and the fact that we have several particle species (e.g., "hot electrons", "cold electrons", "helium ions", "nitrogen ions", etc.)
Also since the last rebase: did someone recently change the unit system in yt? T for "Tesla" seems not to be understood any more. Is there a changelog somewhere available? Do we have to describe our data in cgs / mks?
Would someone be interested for a quick heads up via e.g., skype / web-rtc so we can ask specific questions?
Fabian is around on Tuesdays and Fridays, something like early CA time, and late GER time usually works great (e.g., 9pm-PDT / 6pm-CEST).
Our current branch HEAD can be found here (->yt->frontends->openPMD): https://bitbucket.org/C0nsultant/openpmd/src?at=yt
And an example script is attached.
Thanks a lot! Axel <read_openPMD.py>_______________________________________________ yt-dev mailing list yt-dev@lists.spacepope.org mailto:yt-dev@lists.spacepope.org http://lists.spacepope.org/listinfo.cgi/yt-dev-spacepope.org