Dear all,
I want ultimately plot bound/unbound quantities such as mass, angular
momentum...
Britton suggested I used the clump finder. I have read the paragraph in
the Cookbook but did not manage to make it work. See below:
##########################################################################################
In [1]: from yt.mods import *
In [2]: import yt.raven as R
In [3]: fn = "DD0000/CommonEnvelope0000"
In [4]: field = "Density"
In [5]: step = 10.0
In [6]: pf = load(fn)
In [7]: whole_box = pf.h.all_data()
yt INFO 2010-05-19 13:47:49,272 Getting the
binary hierarchy
yt INFO 2010-05-19 13:47:49,275 Finished with
binary hierarchy reading
In [8]: total_mass =
whole_box.quantities['TotalQuantity']('CellMassMsun')
In [9]: data_source = pf.h.all_data()
In [10]: master_clump = Clump(data_source, None, field)
yt INFO 2010-05-19 13:47:49,371 Getting field
Density from 1
In [11]: c_min = 10**na.floor(na.log10(data_source[field]).min() )
In [12]: c_max = 10**na.floor(na.log10(data_source[field]).max()+1)
In [13]: step = 10
In [14]: find_clumps(master_clump, c_min, c_max, step)
Finding clumps: min: 1.000000e-05, max: 1.000000e+03, step:
10.000000
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,908 Coalescing 1
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,910 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:49,916 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:49,920 Identified 1
contours between 1.00000e-05 and 1.05005e+02
yt INFO 2010-05-19 13:47:49,931 Getting field
Density from 1
Finding clumps: min: 1.000000e-04, max: 1.000000e+03, step:
10.000000
Wiping out existing children clumps.
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,944 Coalescing 1
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,945 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:49,950 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:49,954 Identified 1
contours between 1.00000e-04 and 1.05005e+02
yt INFO 2010-05-19 13:47:49,957 Getting field
Density from 1
Finding clumps: min: 1.000000e-03, max: 1.000000e+03, step:
10.000000
Wiping out existing children clumps.
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,967 Coalescing 1
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,968 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:49,973 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:49,977 Identified 1
contours between 1.00000e-03 and 1.05005e+02
yt INFO 2010-05-19 13:47:49,980 Getting field
Density from 1
Finding clumps: min: 1.000000e-02, max: 1.000000e+03, step:
10.000000
Wiping out existing children clumps.
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,990 Coalescing 1
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:49,991 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:49,996 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,000 Identified 1
contours between 1.00000e-02 and 1.05005e+02
yt INFO 2010-05-19 13:47:50,003 Getting field
Density from 1
Finding clumps: min: 1.000000e-01, max: 1.000000e+03, step:
10.000000
Wiping out existing children clumps.
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,013 Coalescing 1
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,014 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,019 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,023 Identified 1
contours between 1.00000e-01 and 1.05005e+02
yt INFO 2010-05-19 13:47:50,026 Getting field
Density from 1
Finding clumps: min: 1.000000e+00, max: 1.000000e+03, step:
10.000000
Wiping out existing children clumps.
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,034 Coalescing 1
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,036 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,040 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,045 Identified 1
contours between 1.00000e+00 and 1.05005e+02
yt INFO 2010-05-19 13:47:50,047 Getting field
Density from 1
Finding clumps: min: 1.000000e+01, max: 1.000000e+03, step:
10.000000
Wiping out existing children clumps.
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,055 Coalescing 1
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,056 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,061 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,065 Identified 1
contours between 1.00000e+01 and 1.05005e+02
yt INFO 2010-05-19 13:47:50,067 Getting field
Density from 1
Finding clumps: min: 1.000000e+02, max: 1.000000e+03, step:
10.000000
Wiping out existing children clumps.
First pass100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
Calculating joins 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,073 Coalescing 0
joins
Joining 100%
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Time: 00:00:00
yt INFO 2010-05-19 13:47:50,075 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,080 Getting field
tempContours from 1
yt INFO 2010-05-19 13:47:50,084 Identified 0
contours between 1.00000e+02 and 1.05005e+02
In [15]: p = R.PlotCollection(pf)
yt.lagos INFO
2010-05-19 13:47:50,918 Max Value is 1.05005e+02 at 0.4843750000000000
0.4843750000000000 0.4843750000000000 in grid EnzoGrid_0001 at level 0
(15, 15, 15)
yt INFO 2010-05-19 13:47:50,919 Created plot
collection with default plot-center = [0.484375, 0.484375, 0.484375]
In [16]: p.add_slice("Density",2,center=[0.5, 0.5, 0.5])
yt INFO 2010-05-19 13:47:51,479 Added slice of
Density at z = 0.5 with 'center' = [0.5, 0.5, 0.5]
Out[16]: <yt.raven.PlotTypes.SlicePlot object at
0x42f1c10>
In [17]: p.plots[-1].modify["clumps"](master_clump)
Out[17]: 0
In [18]: p.save('testclumps', format = 'png')
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (10, 0))
---------------------------------------------------------------------------
TypeError Traceback (most
recent call last)
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/scripts/iyt in
<module>()
----> 1
2
3
4
5
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/raven/PlotCollection.pyc
in save(self, basename, format, override, force_save)
81 fn.append(plot.save_image(basename, \
82 format=format,
submit=self._run_id,
---> 83 override=override,
force_save=force_save))
84 if self.submit:
85 im = plot.im.copy()
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/raven/PlotTypes.pyc
in save_image(self, prefix, format, submit, override, force_save)
116 *override* will force no filename generation
beyond the prefix.
117 """
--> 118 self._redraw_image()
119 if not override:
120 self._generate_prefix(prefix)
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/raven/PlotTypes.pyc in
_redraw_image(self, *args)
404
self.norm.autoscale(na.array((newmin,newmax)))
405 self._reset_image_parameters()
--> 406 self._run_callbacks()
407
408 def _reset_image_parameters(self):
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/raven/PlotTypes.pyc in
_run_callbacks(self)
259 self._axes.texts = []
260 for cb in self._callbacks:
--> 261 cb(self)
262
263 def set_label(self, label):
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/raven/Callbacks.pyc in
__call__(self, plot)
451 nx, ny = plot.image._A.shape
452 buff = na.zeros((nx,ny),dtype='float64')
--> 453 for i,clump in
enumerate(reversed(self.clumps)):
454 mylog.debug("Pixelizing contour %s", i)
455
TypeError: object of type 'Clump' has no len()
##########################################################################################
If I also try to reproduce the example in the cookbook:
##########################################################################################
In [19]: f = open('%s_clump_hierarchy.txt' % pf,'w')
In [20]: write_clump_hierarchy(master_clump,0,f)
yt INFO 2010-05-19 14:00:24,974 Getting field
CellMassMsun from 1
yt INFO 2010-05-19 14:00:24,974 Getting field
CellVolume from 1
yt INFO 2010-05-19 14:00:24,974 Getting field dx
from 1
yt INFO 2010-05-19 14:00:24,978 Getting field dy
from 1
yt INFO 2010-05-19 14:00:24,981 Getting field dz
from 1
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (37, 0))
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (111, 0))
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (111, 0))
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (133, 0))
---------------------------------------------------------------------------
NeedsDataField Traceback (most
recent call last)
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/scripts/iyt in
<module>()
----> 1
2
3
4
5
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/Clump.pyc in
write_clump_hierarchy(clump, level, f_ptr)
196 f_ptr.write("\t")
197 f_ptr.write("Clump at level %d:\n" % level)
--> 198 clump.write_info(level,f_ptr)
199 f_ptr.write("\n")
200 f_ptr.flush()
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/Clump.pyc in
write_info(self, level, f_ptr)
102 value = item['quantity']()
103 else:
--> 104 value = eval(item['quantity'])
105 output = eval(item['format'])
106 f_ptr.write("%s%s" % ('\t'*level,output))
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/Clump.pyc in
<module>()
----> 1
2
3
4
5
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/DerivedQuantities.pyc
in __call__(self, *args, **kwargs)
70 self._data_source.pf.h.io)
71 if lazy_reader and not self.force_unlazy:
---> 72 return self._call_func_lazy(args,
kwargs)
73 else:
74 return self._call_func_unlazy(args, kwargs)
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/DerivedQuantities.pyc
in _call_func_lazy(self, args, kwargs)
77 self.retvals = [ [] for i in range(self.n_ret)]
78 for gi,g in enumerate(self._get_grids()):
---> 79 rv = self.func(GridChildMaskWrapper(g,
self._data_source), *args, **kwargs)
80 for i in range(self.n_ret):
self.retvals[i].append(rv[i])
81 g.clear_data()
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/DerivedQuantities.pyc
in _WeightedAverageQuantity(data, field, weight)
151 :param weight: The field to weight by
152 """
--> 153 num = (data[field] * data[weight]).sum()
154 den = data[weight].sum()
155 return num, den
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/DerivedQuantities.pyc
in __getitem__(self, item)
41 return getattr(self.grid, attr)
42 def __getitem__(self, item):
---> 43 return
self.data_source._get_data_from_grid(self.grid, item)
44
45 class DerivedQuantity(ParallelAnalysisInterface):
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseDataTypes.pyc in
save_state(self, grid, field)
41 old_keys = grid.data.keys()
42 grid.field_parameters = self.field_parameters
---> 43 tr = func(self, grid, field)
44 grid.field_parameters = old_params
45 grid.data = dict( [(k, grid.data[k]) for k in
old_keys] )
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseDataTypes.pyc in
_get_data_from_grid(self, grid, field)
1670 else:
1671 pointI = self._get_point_indices(grid)
-> 1672 if grid[field].size == 1: # dx, dy, dz,
cellvolume
1673 t = grid[field] *
na.ones(grid.ActiveDimensions, dtype='float64')
1674 return t[pointI].ravel()
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseGridType.pyc in
__getitem__(self, key)
133 """
134 if not self.data.has_key(key):
--> 135 self.get_data(key)
136 return self.data[key]
137
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseGridType.pyc in
get_data(self, field)
176 else: raise
177 else:
--> 178 self._generate_field(field)
179 return self.data[field]
180
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseGridType.pyc in
_generate_field(self, field)
121 self[field] = temp_array[sl]
122 else:
--> 123 self[field] =
self.pf.field_info[field](self)
124 else: # Can't find the field, try as it might
125 raise exceptions.KeyError, field
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/FieldInfoContainer.pyc
in __call__(self, data)
316 ii = self.check_available(data)
317 original_fields = data.keys() # Copy
--> 318 dd = self._function(self, data)
319 dd *= self._convert_function(data)
320 for field_name in data.keys():
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/UniversalFields.pyc
in _JeansMassMsun(field, data)
769
770 return (MJ_constant *
--> 771
((data["Temperature"]/data["MeanMolecularWeight"])**(1.5)) *
772 (data["Density"]**(-0.5)))
773 add_field("JeansMassMsun",function=_JeansMassMsun,
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseGridType.pyc in
__getitem__(self, key)
133 """
134 if not self.data.has_key(key):
--> 135 self.get_data(key)
136 return self.data[key]
137
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseGridType.pyc in
get_data(self, field)
176 else: raise
177 else:
--> 178 self._generate_field(field)
179 return self.data[field]
180
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/BaseGridType.pyc in
_generate_field(self, field)
111 # First we check the validator
112 try:
--> 113
self.pf.field_info[field].check_available(self)
114 except NeedsGridType, ngt_exception:
115 # This is only going to be raised if
n_gz > 0
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/FieldInfoContainer.pyc
in check_available(self, data)
283 """
284 for validator in self.validators:
--> 285 validator(data)
286 # If we don't get an exception, we're good to
go
287 return True
/rpod2/jcpassy/yt-x86_64/src/yt-trunk-svn/yt/lagos/FieldInfoContainer.pyc
in __call__(self, data)
381 doesnt_have.append(f)
382 if len(doesnt_have) > 0:
--> 383 raise NeedsDataField(doesnt_have)
384 return True
385
NeedsDataField: (['Temperature'])
##########################################################################################
Also, if I correctly understand the Cookbook and the reference, the
tree of clumps in contained in master_clump. It contains only the bound
clumps so if I do :
##########################################################################################
In [31]: master_clump.data.fields
Out[31]: ['Density', 'tempContours', 'CellMassMsun']
In [32]: a = master_clump.data['CellMassMsun']
In [33]: sum(a)
Out[33]: 0.98881452898337696
##########################################################################################
this will be the total bound mass. Does it automatically take into
account the thermal energy to determine whether a clump is bound or not
?
I would really appreciate if someone could give me a hint.
Thanks a lot,
Jean-Claude