Raghu wrote:
> On Mar 16, 5:49 am, Vince Hradil <hrad...@[EMAIL PROTECTED]
> wrote:
> > Raghu wrote:
> > > On Mar 15, 7:31=EF=BF=BDpm, Vince Hradil <hrad...@[EMAIL PROTECTED]
> wrote:
> > > > On Mar 15, 4:07 pm, Vince Hradil <hrad...@[EMAIL PROTECTED]
> wrote:
> >
> > > > > On Mar 15, 3:53 pm, Raghu <raghuram.narasim...@[EMAIL PROTECTED]
> wrote:
> >
> > > > > > Hi,
> >
> > > > > > With reference to my recent posting (IDL batch indexing), i
unde=
rstood
> > > > > > 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
tr=
ials,
> > > > > > read them into the structure named data, and access each file
wi=
thin
> > > > > > the structure.
> >
> > > > > > pro strcutres
> > > > > > dir1=3D'D:\trials'
> > > > > > cd,dir1
> > > > > > files=3DFILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=3Dnumfiles)
> > > > > > i=3D0
> > > > > > while i lt numfiles do begin
> > > > > > named=3Dfiles(i)
> > > > > > print,named
> > > > > > data=3D{ID:'a',sizes:fltarr(2179,761)}
> > > > > > data=3Dreplicate(data,numfiles)
> > > > > > data.sizes=3Dfindgen(numfiles)
> > > > > > openr,1,named
> > > > > > readu,1,data[i].sizes
> > > > > > close,1
> > > > > > i=3Di+1
> > > > > > endwhile
> > > > > > end
> >
> > > > > > ERROR message- READU: Expression must be named variable in
this
> > > > > > context: <FLOAT =EF=BF=BD =EF=BF=BD 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=3D'D:\trials'
> > > > > cd,dir1
> > > > > files=3DFILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=3Dnumfiles)
> >
> > > > > data=3D{ID:'a',values:fltarr(2179,761)}
> > > > > data=3Dreplicate(data,numfiles)
> > > > > tempval =3D fltarr(2179,761)
> >
> > > > > for i=3D0L, numfiles-1 do begin
> > > > > named=3Dfiles(i)
> > > > > print,named
> >
> > > > > openr,1,named
> > > > > readu,1,tempval
> > > > > free_lun,1
> > > > > data[i].values =3D tempval
> >
> > > > > endfor
> >
> > > > > return
> > > > > end
> >
> > > > BTW - why do you want to use a structure again? =EF=BF=BDThe above
c=
ode makes
> > > > all the data.id's =3D 'a'.
> >
> > > > Why can't you just read the data into a matrix? =EF=BF=BDIf you
want=
the
> > > > structure to contain the filename then add data[i].id =3D named
insi=
de
> > > > 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 =3D 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=3D'D:\trials'
> cd,dir1
> files=3DFILE_SEARCH('*[^\.{hdr}]', /QUOTE,count=3Dnumfiles)
> print,files
> print,numfiles
>
> data=3Dfltarr(2179,761,numfiles)
>
> tempval =3D fltarr(2179,761)
> for i=3D0L, numfiles-1 do begin
> named=3Dfiles(i)
>
> openr,1,named
> readu,1,tempval
> close,1
> data[*,*,i]=3Dtempval
> avg=3Dmean(data[*,*,i],/nan)
> print,avg
> help,data[*,*,i]
> endfor
>
> return
>
> end
>
> What do you think ?
>
> -Raghu
Yes. That's what kind of what I was thinking. Of course, if you just
want the average, then there is no need to use the nx by ny by
numfiles array, just the tempval.
tempval =3D fltarr(nx,ny,/nozero)
for i=3D0l, numfiles-1 do begin
openr, lun, files[i], /get_lun
readu, lun, tempval
free_lun, lun
print, files[i], ' ', mean(tempval,/nan)
endfor


|