Hi all,
A little over a month ago Jeff put out a "yt user survey" which had
pretty good turnout, along with some very useful and helpful
responses. I'm writing with a brief summary (please feel free to
chime in, if you have further comments you'd like to bring up here on
the list) and a bit of a 'state of stuff' as well, to summarize how
this feedback has been received and acted upon.
The breakdown of responses:
* 80% said "yt is easy to use", 20% said "yt is difficult to use" and
0% said "…
[View More]yt is too hard to use"
* 80% said "yt is the right level of complexity" and 20% said "yt is
more complex than [they] use", with 0% saying it's too complex
* 70% said "yt docs are kind of hard to navigate", 15% said "pretty
easy to navigate" and 15% said "not easy to navigate"
* The request for what people would like to see more of peaked in
"cookbook recipes", "complex multi-step analysis procedures" and
"visualization techniques."
* Most people (80%) only ran scripts to analyze data.
* There was a 50/50 split on having run yt in parallel.
* There was a 50/50 split on whether or not a Web GUI would be useful.
* Most people were in favor of how the mailing lists are currently
run, and we had a few indicate they would like to use IRC.
This spurned a number of interesting discussions between developers,
along with some concrete responses to the feedback. I've summarized
these below.
1. We've registered an IRC channel on irc.freenode.net. You can
access this with any IRC client, such as Adium, irssi, XChat [Aqua],
and so on. We have also created a web interface to IRC:
http://yt.enzotools.org/irc.html . Typically there are three or four
people in the channel and a bot that echoes commits to the main yt
repo. So far I think it's been a success; please feel free to come
visit or ask questions there.
2. A few developers, led by Cameron Hummels, Jeff Oishi and Britton
Smith (with help from me) have written a web GUI. This will be a
focal point of the yt 2.2 release, which we anticipate happening in
the relatively near future. If you are interested in experimenting
with these BETA sequences, feel free to drop by IRC or shoot an email
to yt-dev and we can help you get started. Once the final release is
out we'll have some documentation that describes how to use it.
3. The next major build of the documentation will address the primary
complaint in the user survey: search in the docs is simply broken.
Too many results that are not germane are returned, as a result of the
inclusion of many redundant docstring pages. While the API docs are
nice, it is clear they overwhelm the search functionality and need to
be excluded. Additionally, the recipe system is going to be expanded.
Several new recipes have been added, but unfortunately we are now
reaching a scaling issue. If anyone has any suggestions how to scale
to dozens of recipes/snippets, they would be greatly appreciated!
4. Multi-step analysis routines are tricky, but Jeff Oishi and I are
going to try to include a few examples, including scripts that produce
publication plots and analysis. If anyone has any scripts they would
like to share, in particular that perform multi-step analysis, they
would be greatly appreciated.
5. We're moving all the old bugs and wiki pages to BitBucket soon, and
I'm going to add the ability to file bug reports from the command
line. This should enable much easier tracking of items and making
sure problems and issues don't get lost. We're also optimistic that
BitBucket will help to make developing easier; we've seen this so far
with the forking capabilities, and hopefully we'll continue seeing
this with the bug tracking and wiki transitions.
If anyone has any other suggestions or feedback, please consider this
an opportunity to raise your voice! If you have any ideas in
particular about future directions, or feelings on complexity or the
documentation, we'd love to hear them. If there's any way you'd like
to contribute -- either through developing, or non-technical
contributions like documentation, designing how the yt API works,
touching up the website or anything else -- please feel encouraged to
head on over to the yt-dev list or IRC and strike up a conversation.
Thanks everyone who responded to the survey!
-Matt
[View Less]
Hey folks:
Thanks for the camera help -- it worked nicely with both the north_vector on and the steady_north on. However, with the Camera object, when I ran the imaging, I now see artefacts at the grid edges (just clearly defined edges) which weren't there with the volume_rendering object. I ran the camera script with no_ghost set both to True and False, and didn't see any difference. I didn't see any other options that may affect this. Is there something else that may help with that?
…
[View More]Cheers,
andrew
*************************************************************
** Andrew J. Davis andrew.davis(a)yale.edu **
** Dept. of Astronomy 203-432-5119 **
** Yale University www.astro.yale.edu/adavis **
*************************************************************
[View Less]
Hi folks,
I'm doing some simple volume rendering, with the end goal to make a movie looking at the central object from a bunch of different angles (just going around in a circle). When I do the script below, some of the images are rotated 90 degrees from the others -- that is, the correct viewing direction, but just rotated clockwise 90 degrees. Any thoughts why that would be happening?
Cheers,
Andrew
tf=ColorTransferFunction((mi,ma))
tf.add_layers(6,w=0.02)
v,c=pf.h.find_max("Density")
W …
[View More]= 0.01/pf['pc']
Nvec=512
for i in range(200):
dy=4.*math.pi/199.
theta = i * dy
yval = math.cos(theta)
xval = math.sin(theta)
L=[xval,yval,0.]
vp=pf.h.volume_rendering(L,W,c,Nvec,tf,whole_box=True)
vp.ray_cast()
write_bitmap(vp.image,"VolTest_%03d.png" % i)
*************************************************************
** Andrew J. Davis andrew.davis(a)yale.edu **
** Dept. of Astronomy 203-432-5119 **
** Yale University www.astro.yale.edu/adavis **
*************************************************************
[View Less]
Hi,
I suspect this is really a python query, but I've been unable to fix
it... An cluster upgrade has meant I have to submit all my yt scripts to
the queue, rather than running interactively. For some reason, my script
wants to pull up a window to show its plot and then panics because it
can't find a display when it's submitted to a node. I don't understand
why it wants to do this when I ask it to save, not show:
from yt.config import ytcfg; ytcfg["yt","serialize"] = "False"
from yt.…
[View More]analysis_modules.api import EnzoSimulation as ES
from yt.mods import *
.
.
.
.
stuff
.
.
.
pylab.plot(time, mass)
pylab.ylim([6.39e9, 6.5e9])
pylab.savefig("mass_fig.png")
I tried adding a "matplotlib.use('agg')" in there but to no avail.
Elizabeth
[View Less]
Hi,
When using the ray feature in yt, we hit problems if we try to plot any
variable that contains the cell volume. e.g.
def _Momentum(field, data):
return (data["Density"]*data["CellVolume"]*sqrt(
data["x-velocity"]**2.0
+ data["y-velocity"]**2.0
+ data["z-velocity"]**2.0 ))
ray = pf.h.ray([0.5, 0.5, 0.5], [1.0,1.0,1.0], "Momentum")
pylab.plot(ray["RadiusCode"], ray["Momentum"], 'o')
Gives:
IndexError Traceback (most …
[View More]recent call
last)
/saw_sfs/work/chris/yt/scripts/iyt in <module>()
----> 1
2
3
4
5
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
__getitem__(self, key)
274 if key not in
self.fields:
275
self.fields.append(key)
--> 276
self.get_data(key)
277 return
self.data[key]
278
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
get_data(self, fields, in_grids)
445 mylog.info("Getting field %s from %s", field,
len(self._grids))
446 if field not in self.hierarchy.field_list and not
in_grids:
--> 447 if field not in ("dts", "t") and
self._generate_field(field):
448 continue # True means we already assigned
it
449 self[field] =
na.concatenate(
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
_generate_field(self, field)
423 return
False
424
else:
--> 425 self[field] =
self.pf.field_info[field](self)
426 return
True
427 else: # Can't find the field, try as it
might
/saw_sfs/work/chris/yt/yt/data_objects/field_info_container.pyc in
__call__(self, data)
292 ii =
self.check_available(data)
293 original_fields = data.keys() #
Copy
--> 294 dd = self._function(self,
data)
295 dd *=
self._convert_function(data)
296 for field_name in
data.keys():
/saw_sfs/work/chris/yt/scripts/iyt in _Momentum(field, data)
14
15 def _Momentum(field, data):
---> 16 return (data["Density"]*data["CellVolume"]*sqrt(
17
data["x-velocity"]**2.0
18 +
data["y-velocity"]**2.0
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
__getitem__(self, key)
274 if key not in
self.fields:
275
self.fields.append(key)
--> 276
self.get_data(key)
277 return
self.data[key]
278
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
get_data(self, fields, in_grids)
445 mylog.info("Getting field %s from %s", field,
len(self._grids))
446 if field not in self.hierarchy.field_list and not
in_grids:
--> 447 if field not in ("dts", "t") and
self._generate_field(field):
448 continue # True means we already assigned
it
449 self[field] =
na.concatenate(
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
_generate_field(self, field)
423 return
False
424
else:
--> 425 self[field] =
self.pf.field_info[field](self)
426 return True
427 else: # Can't find the field, try as it might
/saw_sfs/work/chris/yt/yt/data_objects/field_info_container.pyc in
__call__(self, data)
292 ii = self.check_available(data)
293 original_fields = data.keys() # Copy
--> 294 dd = self._function(self, data)
295 dd *= self._convert_function(data)
296 for field_name in data.keys():
/saw_sfs/work/chris/yt/yt/data_objects/universal_fields.pyc in
_CellVolume(field, data)
392
393 def _CellVolume(field, data):
--> 394 if data['dx'].size == 1:
395 try:
396 return data['dx']*data['dy']*data['dx']*\
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
__getitem__(self, key)
274 if key not in self.fields:
275 self.fields.append(key)
--> 276 self.get_data(key)
277 return self.data[key]
278
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
get_data(self, fields, in_grids)
449 self[field] = na.concatenate(
450 [self._get_data_from_grid(grid, field)
--> 451 for grid in self._grids])
452 if not self.data.has_key(field):
453 continue
/saw_sfs/work/chris/yt/yt/data_objects/data_containers.pyc in
_get_data_from_grid(self, grid, field)
558 if field == 'dts': return self._dts[grid.id][mask]
559 if field == 't': return self._ts[grid.id][mask]
--> 560 return grid[field][mask]
561
562 @cache_mask
IndexError: invalid index to scalar variable.
Any ideas?
Elizabeth
[View Less]