[yt-users] simple calculation question
Robert Thompson
rthompsonj at gmail.com
Mon Aug 16 22:11:39 PDT 2010
Sorry for the delayed response! Thank you for your help that example
script helped a ton. It'll take some time before I dive into the numpy
array magic to speed up large calculations.
-Robert
On 08/12/2010 01:41 PM, John Wise wrote:
> You can also use some numpy "array magic" to speed the double loop up.
>
> http://mail.scipy.org/pipermail/numpy-discussion/2007-April/027203.html
>
> Here's a kD-tree implementation that I've used before when searching for nearest neighbors.
>
> http://pypi.python.org/pypi/scikits.ann/0.2.dev-r803
>
> John
>
> On 12 Aug 2010, at 16:24, Stephen Skory wrote:
>
>
>> Hi Robert,
>>
>>
>>
>>> How would I go about doing this in yt given the halo finder outputs. Thanks for
>>>
>>> the assistance!
>>>
>>
>> I was about to step through the whole process for you, but I realized that an
>> example script would be far more useful. I can't quite parse the units of your
>> box, so distances are in code units below and you can change that if you need
>> to. Remember that the halo velocity output of the HopAnalysis.out file is in
>> cgs, not code units.
>>
>> This double loop is not very scalable. If you are doing large lists of halos,
>> you might consider using a kD-tree which will speed things up significantly.
>>
>> ---------
>>
>> # Essential modules
>> from yt.mods import *
>> from yt.math_utils import *
>>
>> # The halo finder output file
>> infile = "HopAnalysis.out"
>> # Halo separation distance in code units.
>> dmin = 0.01
>>
>> # Define some lists to store our data. Depending on application,
>> # it is usally best to convert these into Numpy arrays, but it's not
>> # required for this.
>> Xctr, Yctr, Zctr, vx, vy, vz = [], [], [], [], [], []
>>
>> # Now we read it in.
>> data = file(infile, "r")
>> for line in data:
>> # Skip the header lines
>> if "#" in line: continue
>> # Splits the line up by spaces
>> line = lines.split()
>> # Store the data using the conventional columns for yt-halofinder output
>> Xctr.append(float(line[7]))
>> Yctr.append(float(line[8]))
>> Zctr.append(float(line[9]))
>> xv.append(float(line[10]))
>> yv.append(float(line[11]))
>> zv.append(float(line[12]))
>> # Close the text file.
>> data.close()
>>
>> # Now the double loop.
>> for i in range(0,len(Xctr)):
>> for j in range(i+1, len(Xctr)):
>> # This function periodic_dist comes from math_utils,
>> # and d is in code units because every input is in code units.
>> d = periodic_dist([Xctr[i], Yctr[i], Zctr[i]],
>> [Xctr[j], Yctr[j], Zctr[j]], 1.0)
>> if d< dmin:
>> dvx = vx[i] - vx[j]
>> dvy = vy[i] - vy[j]
>> dvz = vz[i] - vz[j]
>>
>> vrel = math.sqrt(dvx*dvx + dvy*dvy + dvz*dvz)
>>
>>
>>
>> _______________________________________________________
>> sskory at physics.ucsd.edu o__ Stephen Skory
>> http://physics.ucsd.edu/~sskory/ _.>/ _Graduate Student
>> ________________________________(_)_\(_)_______________
>>
>> _______________________________________________
>> yt-users mailing list
>> yt-users at lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>
More information about the yt-users
mailing list