comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Anyway to avoid this last for loop
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Anyway to avoid this last for loop [message #64579 is a reply to message #64572] Thu, 08 January 2009 09:31 Go to previous messageGo to previous message
hldevil is currently offline  hldevil
Messages: 6
Registered: September 2008
Junior Member
On 8 Jan., 15:28, Tom McGlynn <t...@milkyway.gsfc.nasa.gov> wrote:
> On Jan 8, 4:59 am, hlde...@gmx.de wrote:
>
>> ;AClength is how many frames are thrown out after one AC Hit ->
>> multiple entries can fall into one bin
>
>> detHist=histogram(data,REVERSE_INDICES=ri, /L64, binSize=AClength)
>> acHist=histogram(ACdeletes, /L64, binSize=AClength)
>
>> ;renormalize to one
>>  dI=where(detHist GT 1, cntD)
>>  aI=where(acHist GT 1, cntA)
>>  IF cntD NE 0 THEN detHist[dI]=1
>>  IF cntA NE 0 THEN acHist[aI]=1
>
> Can't these last four lines be replaced by
>    detHist = detHist<1
>    acHist  = acHist<1
>
> The < and > operators are useful though not necessarily intuitive.
>
>
>
>
>
>>  ;subtract the two histograms. All detector frames which have
>> corresponding AC frame should now have value 0, if AC frame exists but
>> not detector frame then value is -1. If only detector frame exists
>> (the ones we want) value stays 1!!!
>> diffHist=detHist-acHist
>
>> ;keep the ones with one
>>  keep=where(diffHist EQ 1, cnt)
>
>> ;And now my problem. I need the indices of the keep-frames but there
>> can be more than one in a bin so I'm stuck with this loop:
>
>> FOR k=0L, cnt-1 DO BEGIN
>>                     keepIndices=[keepIndices,ri[ri[keep[k]]:ri[keep[k]+1]-1]]
>> ENDFOR
>
> To do it all at once, I think you can just go back to the data array
> as below:
>
>     keepHist = where (diffHist EQ 1, cnt)   ; From the original
>     if (cnt gt 0) then begin
>         keepers = intarr(n_elements(detHist))
>         keepers[keepHist] = 1;
>         keepIndices = where(keepers[data/ACLENGTH] eq 1)
>     endif else begin
>         keepIndices = [-1]
>     endelse
>
> Haven't tested it, but it seems like it or something like it should
> work reasonably efficiently.
>
>     Good luck,
>     Tom McGlynn

Seems reasonable. I'll try it and see if I get the same results as
with the for loop.

Thanks,

Steffen
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: Compile/Restore on Startup
Next Topic: How to write an array into a dateset as a band, not a dateset?

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Fri Oct 10 15:23:08 PDT 2025

Total time taken to generate the page: 1.35956 seconds