On Mar 16, 5:49 am, Vince Hradil <hrad...@yahoo.com> wrote:
> Raghu wrote:
>> On Mar 15, 7:31�pm, Vince Hradil <hrad...@yahoo.com> wrote:
>>> On Mar 15, 4:07 pm, Vince Hradil <hrad...@yahoo.com> wrote:
>
>>>> On Mar 15, 3:53 pm, Raghu <raghuram.narasim...@gmail.com> wrote:
>
>>>> > Hi,
>
>>>> > With reference to my recent posting (IDL batch indexing), i understood
>>>> > that i could structures. However, i haven't been able to figure out
>>>> > one step.
>
>>>> > Here is my code as of now:
>>>> > ; I want to search for all the images(files) in the directory trials,
>>>> > read them into the structure named data, and access each file within
>>>> > the structure.
>
>>>> > pro strcutres
>>>> > dir1='D:\trials'
>>>> > cd,dir1
>>>> > files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>>>> > i=0
>>>> > while i lt numfiles do begin
>>>> > named=files(i)
>>>> > print,named
>>>> > data={ID:'a',sizes:fltarr(2179,761)}
>>>> > data=replicate(data,numfiles)
>>>> > data.sizes=findgen(numfiles)
>>>> > openr,1,named
>>>> > readu,1,data[i].sizes
>>>> > close,1
>>>> > i=i+1
>>>> > endwhile
>>>> > end
>
>>>> > ERROR message- READU: Expression must be named variable in this
>>>> > context: <FLOAT � � Array[2179, 761]>.
>
>>>> > I am getting the error here because it seems like i am not able to
>>>> > read in the LUN 1 or named, into data[i].sizes.
>
>>>> > Where am i going wrong ?
>
>>>> > Raghu
>
>>>> Hoo boy - here you go.
>
>>>> 1-Yes, you need to use a named variable to readu
>>>> 2-You already defined "sizes" (weird name, by the way, how about
>>>> "values"), when you made the structure.
>
>>>> How about this:
>
>>>> pro strcutres
>>>> dir1='D:\trials'
>>>> cd,dir1
>>>> files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
>
>>>> data={ID:'a',values:fltarr(2179,761)}
>>>> data=replicate(data,numfiles)
>>>> tempval = fltarr(2179,761)
>
>>>> for i=0L, numfiles-1 do begin
>>>> named=files(i)
>>>> print,named
>
>>>> openr,1,named
>>>> readu,1,tempval
>>>> free_lun,1
>>>> data[i].values = tempval
>
>>>> endfor
>
>>>> return
>>>> end
>
>>> BTW - why do you want to use a structure again? �The above code makes
>>> all the data.id's = 'a'.
>
>>> Why can't you just read the data into a matrix? �If you want the
>>> structure to contain the filename then add data[i].id = named inside
>>> the loop.- Hide quoted text -
>
>>> - Show quoted text -
>
>> Hi,
>
>> Are you asking why i'm using structures in the first place ?
>> If yes, my initial idea (from python lessons) was to create something
>> like an empty array and then read in each file into this empty array
>> by concatenation. That way each element would have a unique ID which i
>> could use to access them.
>> But it seems like i can't create an empty 2-d array of a certain size
>> and number of files to be read ('numfiles' in my case).
>> When you say create a matrix, is this what you meant ?
>
>> I got the idea of using structures only from responses in my previous
>> emails on 'batch indexing'.
>
>> -R
>
> I guess I'm still confused. I was suggesting just doing:
> data = fltarr(nx,ny,numfiles)
>
> then for each files[i] the image is data[*,*,i]
>
> It's unique simply by the index.- Hide quoted text -
>
> - Show quoted text -
Hi Vince,
I combined the ideas and it seems to have worked.
The file_search method is storing the filenames in a string array. So,
if i read them all one by one into data[*,*,numfiles-1], it is
placing each files[i] into the corresponding location in data[*,*,i].
This way i am able to access each file, and then compute the mean, for
e.g.
Here's the code:
pro structures_simple
dir1='D:\trials'
cd,dir1
files=FILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=numfiles)
print,files
print,numfiles
data=fltarr(2179,761,numfiles)
tempval = fltarr(2179,761)
for i=0L, numfiles-1 do begin
named=files(i)
openr,1,named
readu,1,tempval
close,1
data[*,*,i]=tempval
avg=mean(data[*,*,i],/nan)
print,avg
help,data[*,*,i]
endfor
return
end
What do you think ?
-Raghu
|