Question
Magdy Sanad
mrsanad1 at yahoo.com
Mon Feb 12 06:26:37 EST 2007
Dear Dr.
I'm a Researcher from Cairo, Egypt.
I installed the language programmer (Python) on my PC. I executed the following statements to read unformatted fortran data. I have the original program which I translate it to the Python language :
pro rd_gadget, f=fname, d = data, h= hdr, swap=swap
;modified from Volker's read_snapshot_single.pro to be a free-standing
;program that reads fname, and returns data and header structures M-MML
6/16/06
;added option to swap byte order to read Intel files on PowerPC
;11/8/06 M-MML
if not keyword_set(fname) then
fname="/home/vspringe/ICs/galaxy.dat.intel"
npart=lonarr(6)
massarr=dblarr(6)
time=0.0D
redshift=0.0D
flag_sfr=0L
flag_feedback=0L
npartTotal=lonarr(6)
bytesleft=256-6*4 - 6*8 - 8 - 8 - 2*4-6*4
la=intarr(bytesleft/2)
openr,1,fname,/f77_unformatted, swap_endian = swap
readu,1,npart,massarr,time,redshift,flag_sfr,flag_feedback,npartTotal,la
hdr = { np: npart, mass: massarr, time: time, z: redshift, sfr: $
flag_sfr, fb: flag_feedback, nptot: npartTotal, la:
la}
N=total(npart)
pos=fltarr(3,N)
vel=fltarr(3,N)
id=lonarr(N)
ind=where((npart gt 0) and (massarr eq 0))
if ind(0) ne -1 then begin
Nwithmass= total(npart(ind))
mass=fltarr(Nwithmass)
endif else begin
Nwithmass= 0
endelse
nfield = 0
readu,1,pos
nm = 'position'
nfield = nfield + 1
readu,1,vel
nm = [nm, 'velocity']
nfield = nfield + 1
readu,1,id
nm = [nm, 'id']
nfield = nfield + 1
if Nwithmass gt 0 then begin
readu,1,mass
nm = [nm, 'mass']
nfield = nfield + 1
endif
NGas=npart(0)
if Ngas gt 0 then begin
u=fltarr(Ngas)
readu,1,u
nm = [nm, 'gas specific energy']
nfield = nfield + 1
rho=fltarr(Ngas)
readu,1,rho
nm = [nm, 'gas density']
nfield = nfield + 1
endif
close,1
if (nfield lt 3) or (nfield gt 6) then $
print,'RD_GADGET: Unexpected number of data fields, nfield =
',nfield $
else if nfield eq 3 then $
data = { nf: nfield, nm: nm, pos: pos, vel: vel, id: id } $
else if nfield eq 4 then $
data = { nf: nfield, nm: nm, pos: pos, vel: vel, id: id, mass: mass
} $
else if nfield eq 6 then $
data = { nf: nfield, nm: nm, pos: pos, vel: vel, id: id, mass:
mass, $
spe: u, den: rho }
end
Below you will find my attempt to translate the first part of this program to Python language
import scipy.io.mio
import Numeric
from Numeric import *
file_hdg = 'D:/mm/hdg'
# Integer (Long) Arrays
npart = array (6)
# Floating point (double precision) array
massarr = array(6)
time=0.0
redshift=0.0
flag_sfr=0L
flag_feedback=0L
npartTotal=array(6)
bytesleft=256-6*4 - 6*8 - 8 - 8 - 2*4-6*4
la=array(bytesleft/2)
def readdata ( filePath ):
fileHandle = scipy.io.mio.fopen( filePath, 'r')
def fort_read(self,fmt,dtype=None):
numberOfBlocks = fileHandle.fort_read( 1 , 'l' )
print numberOfBlocks
readdata (file_hdg),npart,massarr,time,redshift,flag_sfr,flag_feedback,npartTotal,la
All these commands are accepted, the result with the last command :
readdata(file_hdg),npart,massarr,time,redshift,flag_sfr,flag_feedback,npartTotal,la
Is
(None, 6, 6, 0.0, 0.0, 0L, 0L, 6, 68)
I will be very appreciated if you send me your opinion about this and what the
( None ) means in this result.
Best Regards
Magdy Sanad
National Research Institute of
Astronomy and Geophysics
Astronomy Department
Helwan - Cairo - Egypt
---------------------------------
Looking for earth-friendly autos?
Browse Top Cars by "Green Rating" at Yahoo! Autos' Green Center.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20070212/b7c9f637/attachment.html>
More information about the Python-list
mailing list