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

Home » Public Forums » archive » Where and lists of regions
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Switch to threaded view of this topic Create a new topic Submit Reply
Where and lists of regions [message #41320] Mon, 11 October 2004 05:47
Ben Panter is currently offline  Ben Panter
Messages: 102
Registered: July 2003
Senior Member
Hi,

I'm in the middle of trying to simplify a large body of code which I
inherited a few years ago and have been mangling ever since. Among other
things, I'd be interested in anyone's thoughts on simplfying the case
statement I use (full code below). Basically I have a list of regions
which I want to remove from a vector. At the moment I use CASE to call
WHERE to remove the regions elements (case to choose how many where
statements are required). This is fine for a few regions, but I'm sure
there must be a neater way, as when I need 10 regions, or even 20, this
code is going to look terrible...

I've written a code with EXECUTE, but I may want to use VM in the future
so I'd like to avoid it if possible.

Many Thanks,

Ben

CODE:

function em_screen, wave, em_string

; returns a list of indes which are to be included. EXCLUDED regions
; are contained in a string with the format:
; '4400-5000,6500-6700,8000-8900'
; The ranges must be monotonic

print, 'Emission line regions:'+em_string

if em_string[0] eq 'none' then output=wave else begin

em_list=strsplit(em_string, ',', /extract)
n_region=n_elements(em_list)
em=intarr(n_region,2)
case n_region of

1: begin
for i=0,n_region-1 do em[i,*]=strsplit(em_list[i], '-', /extract)
output=where((wave le em[0,0]) or (wave ge em[0,1]))
end
2: begin
for i=0,n_region-1 do em[i,*]=strsplit(em_list[i], '-', /extract)
output=where((wave le em[0,0]) or ((wave ge em[0,1]) and (wave le
em[1,0])) or (wave ge em[1,1]))
end
3: begin
for i=0,n_region-1 do em[i,*]=strsplit(em_list[i], '-', /extract)
output=where((wave le em[0,0]) or ((wave ge em[0,1]) and (wave le
em[1,0])) or ((wave ge em[1,1]) and (wave le em[2,0])) or (wave ge em[2,1]))
end
4: begin
for i=0,n_region-1 do em[i,*]=strsplit(em_list[i], '-', /extract)
output=where((wave le em[0,0]) or ((wave ge em[0,1]) and (wave le
em[1,0])) or ((wave ge em[1,1]) and (wave le em[2,0])) or ((wave ge
em[2,1]) and (wave le em[3,0])) or (wave ge em[3,1]))
end
5: begin
for i=0,n_region-1 do em[i,*]=strsplit(em_list[i], '-', /extract)
output=where((wave le em[0,0]) or ((wave ge em[0,1]) and (wave le
em[1,0])) or ((wave ge em[1,1]) and (wave le em[2,0])) or ((wave ge
em[2,1]) and (wave le em[3,0])) or ((wave ge em[3,1]) and (wave le
em[4,0])) or (wave ge em[4,1]))
end

else: begin
print, 'ERROR: Something is wrong with the format of the em_list string'
print, 'Use either none or 3000-4000,5000-5500 etc. CASE SENSITIVE'
end
endcase

end

return, output

END
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Re: uniform expansion
Next Topic: Re: Where and lists of regions

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

Current Time: Fri Oct 10 16:21:47 PDT 2025

Total time taken to generate the page: 1.27720 seconds