Re: Pair Counts in an Annulus, for large data sets [message #51259 is a reply to message #51258] |
Sat, 11 November 2006 03:51   |
enod
Messages: 41 Registered: November 2004
|
Member |
|
|
Maybe you can try WHERE((seperation gt (r)) and (seperation lt (r +
deltar_r)).
Tian
On Nov 11, 1:52 pm, fatcat3...@gmail.com wrote:
> Hi There
>
> I have a large data set (~350,000 galaxies) of x,y points. For a given
> radius R [R=sqrt(x^2+y^2)], I need to count the total number of pairs
> in the annulus R+deltaR. That is, I choose a given data point as my
> center, then count the number of points that lie inside that annulus. I
> then do this for each of my data points to get the total number of
> pairs. A simplified version of the code I'm using now is as follows:
>
> ****************
> n = n_elements(x) ; number of data points
> seperation = fltarr(n) ; the seperation between data points
>
> for i=0L,n-1 do begin
> seperation = sqrt((x - x[i])^2 + (y - y[i])^2) ;distance between the
> two points, centering on point "i"
> seperation[i] = 999 ;simply because I don't want it to count itself
> as a pair
>
> if_inside = ((seperation gt (r)) and (seperation lt (r + deltar_r))
> ;has value "1" for points which lie inside, "0" for those outside
> counter = counter + total(if_sep) ;count up the number of pairs
> endfor
>
> num_pairs = counter / 2 ; since I don't want to count everything twice
> *****************
>
> I've tried my best to avoid the urge to put lots of for loops
> everywhere (you should have seen it before!), but I just don't know how
> to make it drastically more efficient. There must be a way though,
> because the computations for my code are just ridiculous.... Is there a
> way to eliminate that nasty loop I have, which would help things?
>
> Any help you can give would be greatly appreciated. I'm very new to
> IDL, as you surely know. I'm and undergrad, too.
>
> Tara.
|
|
|