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

Home » Public Forums » archive » Getting mean from HDF SD files - stack in envi or read into IDL array?
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: Getting mean from HDF SD files - stack in envi or read into IDL array? [message #61162 is a reply to message #61071] Sat, 05 July 2008 11:58 Go to previous messageGo to previous message
bulrushmower is currently offline  bulrushmower
Messages: 19
Registered: February 2008
Junior Member
On Jul 5, 10:46 am, kathryn.davi...@googlemail.com wrote:
> On Jul 5, 4:33 pm, bulrushmo...@gmail.com wrote:
>
>
>
>
>
>> On Jul 4, 8:41 am, kathryn.davi...@googlemail.com wrote:
>
>>> Hi
>
>>> I am extremely new to IDL (2 weeks!) and have previously only used
>>> envi on a small scale.
>
>>> I want to read one SD dataset from from a each of a huge number of
>>> MODIS files and having looked at IDL and envi batch routines can't
>>> decide which is the best way.  Bear in mind my limited knowledge and a
>>> very short timeframe....  Should I write an envi batch programme and
>>> create a big (3000bands +) envi file or should I put straight into the
>>> an IDL array.  I need to get a mean value (one image or array) and
>>> even if it is easier in envi batch mode, would the routine
>>> ENVI_SUM_DATA_DOIT with the Mean option deal with the missing
>>> values???
>
>>> Looking at IDL I have managed to open HDF file from command line, read
>>> in appropriate data set to an array but how then could I build 3D
>>> array from absolutely loads of  2D arrays.
>
>>> Big questions I know - I am desperate to do this in a short time.
>
>>> Any help on any aspect much appreciated.
>
>>> K
>
>> Tell me more about how many bands you have in HDF file and how many
>> bands you want to read into IDL?- Hide quoted text -
>
>> - Show quoted text -
>
> Well I am going to be using around 3-4000 MODIS HDF files but I only
> want one band (the first) from each i.e. the Land Surface
> Temperature.  Since my last post I have thought about creating a huge
> multiband file in ENVI and then exporting as a variable to IDL (if the
> ENVI_SUM_DOIT doesn't work for the mean, as it may not deal with
> missing values very well, I need them to not be counted as opposed to
> counting as zero).  However that means extracting the SD dataset from
> all of the HDF files, converting them to ENVI standard files to build
> multi-band image.  I hope the data values are not corrupted by being
> converted to ENVI standard.  Also I could create an image stack in
> iIMAGE or mess about with iDataManager in some way but they do not
> seem to like reading ENVI standard files and keep asking me to fill in
> binary information - will the data values still be OK?
>
> Thanks
>
> Kathryn- Hide quoted text -
>
> - Show quoted text -
The simplest way to do it:
I am assuming you have IDL and ENVI, initiate batch mode by doing the
following

1. define the file directory
2. read them into IDL using envi_open_data_file
3. get their mean by
4. print them into a txt file

Try this code

Pro Mean_HDF
envi, /restore_base_save_files
envi_batch_init, log_file='batch.txt'

; Open the file directory and searh for HDF files to read, then
select the directory manually
files=file_search(dialog_pickfile(/dir),'*.HDF', count=numFiles);
or you can use files=file_search('D:\MODIS\*.hdf', count=numFiles)

; loop for the whole data set in the directory
FOR K = 0, numFiles-1 do begin
; get the file name only without file directory for final
output filename
fname = file_basename(files[K])
;select input file directory to subset
hdf_bands = 1 ; determines the HDF dataset bands to read

;start looping through opening bands from HDF
for i = 0, hdf_bands -1 do begin
envi_open_data_file, files[K], r_fid=fid, /hdf_sd,
hdfsd_dataset=i, hdfsd_interleave=0

;query new file for ns, nl, dims;
envi_file_query, fid, dims=dims, bnames=bnames, ns=ns,
nl=nl, nb=nb
pos=0

;get the mean of the data
result = MEAN(fid)
endfor
;if you want to export the results in screen do as
print, results
;if you want to export them into a txt file

OpenW, Lun, 'D:\test.txt', /get_lun
str= fname
printf,lun,str
endFOR

End
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Read Message
Previous Topic: IDL string trim
Next Topic: Re: weird font issue: string("305B) does not work any more?

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

Current Time: Fri Oct 10 17:38:53 PDT 2025

Total time taken to generate the page: 0.79764 seconds