Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F91870363
mkgmov
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 15, 08:01
Size
21 KB
Mime Type
text/x-python
Expires
Sun, Nov 17, 08:01 (1 d, 21 h)
Engine
blob
Format
Raw Data
Handle
22339465
Attached To
rPNBODY pNbody
mkgmov
View Options
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
'''
# do not reload if the file is similar
'''
import
sys
import
os
import
string
import
getopt
import
types
from
numpy
import
*
from
pNbody
import
*
from
pNbody
import
Movie
from
pNbody.param
import
*
from
pNbody.libutil
import
*
import
copy
SAVEDPARAMS
=
'saved_parameters.py'
global
gparam
####################################################################################
def
read_params
(
paramname
):
####################################################################################
'''
read param from a parameter Nbody file
'''
gparams
=
Params
(
paramname
,
None
)
# create new params
defparam
=
{}
for
param
in
gparams
.
params
:
param_name
=
param
[
0
]
param_valu
=
param
[
3
]
defparam
[
param_name
]
=
param_valu
# aditional parameters
defparam
[
'exec'
]
=
None
defparam
[
'macro'
]
=
None
defparam
[
'n1'
]
=
None
defparam
[
'n2'
]
=
None
defparam
[
'select'
]
=
None
defparam
[
'ftype'
]
=
None
defparam
[
'subs'
]
=
None
defparam
[
'fdir'
]
=
None
defparam
[
'tdir'
]
=
None
# track directory
defparam
[
'pfile'
]
=
None
return
defparam
####################################################################################
def
write_params
(
file
,
nh
,
nw
,
width
,
height
,
params
):
####################################################################################
fd
=
open
(
file
,
'w'
)
fd
.
write
(
'''
nh =
%d
# number of horizontal frame
nw =
%d
# number of vertical frame
# size of subfilms
width =
%d
height =
%d
# size of the film
numByte = width * nw
numLine = height * nh
# init parameters
param = initparams(nh,nw)
\n
'''
%
(
nh
,
nw
,
width
,
height
))
# take params from the first file
keys
=
params
.
keys
()
keys
.
sort
()
params
=
params
[
keys
[
0
]]
for
i
in
param
.
keys
():
fd
.
write
(
'
\n
'
)
for
key
in
param
[
i
]:
name
=
key
tpe
=
gparams
.
get_type
(
key
)
value
=
param
[
i
][
key
]
string
=
write_ascii_value
(
value
,
tpe
,
name
)
if
tpe
==
"String"
and
value
!=
None
:
line
=
'''param[
%d
]['
%s
'] = "
%s
"
\n
'''
%
(
i
,
name
,
string
)
else
:
line
=
'''param[
%d
]['
%s
'] =
%s
\n
'''
%
(
i
,
name
,
string
)
fd
.
write
(
line
)
fd
.
close
()
####################################################################################
def
initparams
(
nh
,
nw
):
####################################################################################
'''
create a dictionary "param" and full it with nh*nw empty dictionary
create a dictionary "allparam" and full it with nh*nw empty dictionary
allparam = all parameters (from file nbodyparams and from file .py)
param = parameters from file .py
'''
global
gparams
global
allparam
param
=
{}
allparam
=
{}
n
=
1
for
i
in
range
(
nh
*
nw
):
param
[
n
]
=
{
'tdir'
:
None
}
param
[
n
]
=
{
'pfile'
:
None
}
allparam
[
n
]
=
{}
n
=
n
+
1
return
param
####################################################################################
def
version
():
####################################################################################
print
'version 2.0'
sys
.
exit
(
0
)
####################################################################################
def
help_message
():
####################################################################################
print
'''Usage : mkgmov [option] output files
Options: -h -- this help message
-p -- parameter file
-f -- g-parameter file
-s -- disable the softening of rsp
-c -- enable auto cd for each image
-z -- convert time in redshift
-u -- do not reload file
--fits -- create fits output instead of .gmv film
--fitsdir -- directory where to save fits files
--info -- give the optimal factor for each files in the list
--help -- this help message
--version -- displays version
'''
sys
.
exit
(
0
)
####################################################################################
def
check_arguments
(
options
,
xarguments
):
####################################################################################
param
=
None
gparam
=
None
verbose
=
None
info
=
None
pio
=
'no'
sofrsp
=
1
arange
=
0
redshift
=
0
readonlyonce
=
0
mkfits
=
0
fitsdir
=
"fits"
for
a
in
options
[:]:
if
a
[
0
]
==
'-h'
:
help_message
()
if
a
[
0
]
==
'--help'
:
help_message
()
if
a
[
0
]
==
'--version'
:
version
()
if
a
[
0
]
==
'--info'
:
info
=
1
if
a
[
0
]
==
'--pio'
:
pio
=
"yes"
if
a
[
0
]
==
'-v'
:
verbose
=
1
if
a
[
0
]
==
'-s'
:
sofrsp
=
0
if
a
[
0
]
==
'-c'
:
arange
=
1
if
a
[
0
]
==
'-z'
:
redshift
=
1
if
a
[
0
]
==
'-u'
:
readonlyonce
=
1
if
a
[
0
]
==
'--fits'
:
mkfits
=
1
if
a
[
0
]
==
'--fitsdir'
:
if
a
[
1
]
==
''
:
help_message
()
else
:
fitsdir
=
a
[
1
]
continue
if
a
[
0
]
==
'-p'
:
if
a
[
1
]
==
''
:
help_message
()
else
:
param
=
a
[
1
]
continue
if
a
[
0
]
==
'-f'
:
if
a
[
1
]
==
''
:
help_message
()
else
:
gparam
=
a
[
1
]
continue
try
:
output
=
xarguments
[
0
]
except
:
help_message
()
files
=
xarguments
[
1
:]
files
.
sort
()
return
files
,
output
,
param
,
gparam
,
verbose
,
info
,
pio
,
sofrsp
,
arange
,
redshift
,
readonlyonce
,
mkfits
,
fitsdir
####################################################################################
#
# MAIN
#
####################################################################################
if
mpi
.
mpi_IsMaster
():
try
:
options
,
xarguments
=
getopt
.
getopt
(
sys
.
argv
[
1
:],
'p:f:hvscfzu'
,
[
'info'
,
'pio'
,
'fits'
,
'fitsdir'
,
'help'
,
'version'
])
except
getopt
.
error
:
help_message
()
sys
.
exit
(
0
)
# check arguments
files
,
output
,
param_file
,
gparam_file
,
verbose
,
info
,
pio
,
sofrsp
,
arange
,
redshift
,
readonlyonce
,
mkfits
,
fitsdir
=
check_arguments
(
options
,
xarguments
)
nbody_parameter_file
=
gparam_file
# verifie que output n'existe pas
complete
=
0
if
not
info
:
if
not
mkfits
:
if
(
os
.
path
.
exists
(
output
)
!=
0
):
answer
=
raw_input
(
'
%s
exists. Remove it (r) Continue it (c) Exit (q) ? '
%
(
output
))
if
len
(
answer
)
==
0
or
answer
[
0
]
==
'c'
:
if
not
os
.
path
.
exists
(
SAVEDPARAMS
):
print
"Warning :
%s
does not exists."
%
(
SAVEDPARAMS
)
print
"Using :
%s
instead."
%
(
SAVEDPARAMS
)
complete
=
1
param_file
=
SAVEDPARAMS
elif
answer
[
0
]
==
'r'
:
os
.
remove
(
output
)
else
:
sys
.
exit
()
###############################################################################################
# a partir de snapshots ou de files, cree une liste de files
###############################################################################################
##############################################################
# lit le fichier param s'il existe, sinon, valeurs par defaut
if
param_file
==
None
:
# nombre de sous film horiz et vertical
nh
=
1
nw
=
1
# size of subfilms
width
=
128
height
=
width
/
2
+
width
/
4
# info on subfilms
param
=
initparams
(
nh
,
nw
)
elif
os
.
path
.
exists
(
param_file
):
execfile
(
param_file
)
else
:
print
"Error :
%s
does not exists."
%
(
param_file
)
sys
.
exit
()
##############################################################
# compleete allparam with default values
##############################################################
if
nbody_parameter_file
!=
None
:
paramname
=
nbody_parameter_file
else
:
paramname
=
PARAMETERFILE
# read the default parameters
#paramname = PARAMETERFILE # ! ! ! not that good ! ! !
gparams
=
Params
(
paramname
,
None
)
defparam
=
read_params
(
paramname
)
# ! ! ! read again ! ! !
# compleete allparam
n
=
1
for
i
in
range
(
nh
*
nw
):
allparam
[
n
]
=
copy
.
deepcopy
(
defparam
)
n
=
n
+
1
#############################################
# read from pfile files if exists
n
=
1
# loop over all sub-images
for
i
in
range
(
nh
*
nw
):
n
=
i
+
1
if
param
[
n
][
'pfile'
]
!=
None
:
paramfile
=
param
[
n
][
'pfile'
]
if
not
os
.
path
.
isfile
(
paramfile
):
print
"file
%s
does not exists..."
%
(
paramfile
)
sys
.
exit
()
allparam
[
n
]
=
read_params
(
paramfile
)
##############################################################
# create params with allparam and add paramfiles
##############################################################
params
=
{}
listfiles
=
[]
basefiles
=
[]
for
file
in
files
:
basefiles
.
append
(
os
.
path
.
basename
(
file
))
#############################################
# read from trail files if exists
n
=
1
# loop over all sub-images and verify that tdir exists
for
i
in
range
(
nh
*
nw
):
if
not
param
[
n
]
.
has_key
(
'tdir'
):
param
[
n
][
'tdir'
]
=
None
n
=
n
+
1
n
=
1
# loop over all sub-images and verify that time exists
for
i
in
range
(
nh
*
nw
):
if
not
param
[
n
]
.
has_key
(
'time'
):
txt
=
"You must define the parameter time : ex param[1]['time'] = 'nb.time'"
raise
"parameter Error"
,
txt
n
=
n
+
1
# loop over all sub-images
n
=
1
for
i
in
range
(
nh
*
nw
):
if
param
[
n
][
'tdir'
]
!=
None
:
# here, we use param (init with .py)
directory
=
param
[
n
][
'tdir'
]
if
os
.
path
.
isdir
(
directory
):
paramfiles
=
glob
.
glob
(
'
%s
/*'
%
(
directory
))
paramfiles
.
sort
()
# loop over files
for
paramfile
in
paramfiles
:
snap_file
=
os
.
path
.
basename
(
paramfile
)
snap_file
=
os
.
path
.
splitext
(
snap_file
)[
0
]
try
:
index
=
basefiles
.
index
(
snap_file
)
except
ValueError
:
print
"file
%s
not in file list"
%
(
snap_file
)
sys
.
exit
()
listfiles
.
append
(
files
[
index
])
# stop after first time here
break
if
len
(
listfiles
)
!=
0
:
files
=
listfiles
# now, loop over files
old_name
=
''
num
=
-
1
listfiles
=
[]
for
file
in
files
:
# set name and redefine files (listfiles)
name
=
os
.
path
.
basename
(
file
)
# add number to the file
if
name
==
old_name
:
num
=
num
+
1
else
:
num
=
0
old_name
=
name
name
=
"
%s
.
%05d
"
%
(
name
,
num
)
file
=
"
%s
.
%05d
"
%
(
file
,
num
)
listfiles
.
append
(
file
)
n
=
1
# loop over images
param_for_this_file
=
{}
for
i
in
range
(
nh
*
nw
):
if
param
[
n
][
'tdir'
]
!=
None
:
directory
=
param
[
n
][
'tdir'
]
paramfile
=
os
.
path
.
join
(
directory
,
name
)
if
not
os
.
path
.
isfile
(
paramfile
):
print
"file
%s
does not exists..."
%
(
paramfile
)
sys
.
exit
()
param_for_this_file
[
n
]
=
read_params
(
paramfile
)
else
:
# if no params file for this image (use .py file)
param_for_this_file
[
n
]
=
allparam
[
n
]
# add parameter to the list
params
[
file
]
=
param_for_this_file
n
=
n
+
1
files
=
listfiles
##############################################################
# compleete params with param
##############################################################
# loop over files
for
file
in
files
:
n
=
1
# loop over images
for
i
in
range
(
nh
*
nw
):
keys
=
param
[
n
]
.
keys
()
for
key
in
keys
:
params
[
file
][
n
][
key
]
=
param
[
n
][
key
]
n
=
n
+
1
##############################################################
# open the movie file
##############################################################
if
not
mkfits
:
# size of the film
numByte
=
width
*
nh
numLine
=
height
*
nw
# ouverture du film
if
not
info
:
f
=
Movie
.
Movie
(
output
)
if
not
complete
:
f
.
new
(
numByte
,
numLine
)
else
:
f
.
open
(
'r+'
)
##############################################################
# create directory for file
##############################################################
else
:
if
not
os
.
path
.
exists
(
fitsdir
):
os
.
mkdir
(
fitsdir
)
else
:
info
=
None
pio
=
None
arange
=
None
redshift
=
None
readonlyonce
=
None
mkfits
=
None
nh
=
None
nw
=
None
width
=
None
height
=
None
files
=
None
params
=
None
#############################################################
# gather all parameters to the slaves
#############################################################
# gather options
info
=
mpi
.
mpi_bcast
(
info
,
0
)
pio
=
mpi
.
mpi_bcast
(
pio
,
0
)
arange
=
mpi
.
mpi_bcast
(
arange
,
0
)
redshift
=
mpi
.
mpi_bcast
(
redshift
,
0
)
readonlyonce
=
mpi
.
mpi_bcast
(
readonlyonce
,
0
)
mkfits
=
mpi
.
mpi_bcast
(
mkfits
,
0
)
nh
=
mpi
.
mpi_bcast
(
nh
,
0
)
nw
=
mpi
.
mpi_bcast
(
nw
,
0
)
width
=
mpi
.
mpi_bcast
(
width
,
0
)
height
=
mpi
.
mpi_bcast
(
height
,
0
)
files
=
mpi
.
mpi_bcast
(
files
,
0
)
params
=
mpi
.
mpi_bcast
(
params
,
0
)
###################################################################################
###################################################################################
##
## main loop over all files
##
###################################################################################
###################################################################################
mn_opt
=
0.
mx_opt
=
0.
cd_opt
=
0.
cflag
=
1
last_file
=
None
ifile
=
-
1
# loop over all files
for
file
in
files
:
ifile
=
ifile
+
1
# check if the frame already exists
if
mpi
.
mpi_IsMaster
():
if
complete
and
cflag
:
data
=
f
.
read_one
()
if
f
.
current_time
<
f
.
stoptime
:
continue
elif
f
.
current_time
==
f
.
stoptime
:
cflag
=
0
continue
# loop over all images
data
=
[]
for
fnum
in
range
(
1
,
nh
*
nw
+
1
):
###############################
## take parameters from params
###############################
obs
=
params
[
file
][
fnum
][
'obs'
]
if
type
(
obs
)
==
types
.
ListType
:
obs
=
read_ascii_value
(
obs
,
'ArrayObs'
,
'obs'
)
if
params
[
file
][
fnum
][
'x0'
]
==
None
:
x0
=
None
else
:
x0
=
array
(
params
[
file
][
fnum
][
'x0'
],
float
)
if
params
[
file
][
fnum
][
'xp'
]
==
None
:
xp
=
None
else
:
xp
=
array
(
params
[
file
][
fnum
][
'xp'
],
float
)
alpha
=
params
[
file
][
fnum
][
'alpha'
]
view
=
params
[
file
][
fnum
][
'view'
]
r_obs
=
params
[
file
][
fnum
][
'r_obs'
]
clip
=
params
[
file
][
fnum
][
'clip'
]
cut
=
params
[
file
][
fnum
][
'cut'
]
eye
=
params
[
file
][
fnum
][
'eye'
]
dist_eye
=
params
[
file
][
fnum
][
'dist_eye'
]
foc
=
params
[
file
][
fnum
][
'foc'
]
persp
=
params
[
file
][
fnum
][
'persp'
]
shape
=
(
width
,
height
)
#center = params[file][fnum]['center']
size
=
params
[
file
][
fnum
][
'size'
]
frsp
=
params
[
file
][
fnum
][
'frsp'
]
space
=
params
[
file
][
fnum
][
'space'
]
mode
=
params
[
file
][
fnum
][
'mode'
]
rendering
=
params
[
file
][
fnum
][
'rendering'
]
filter_name
=
params
[
file
][
fnum
][
'filter_name'
]
filter_opts
=
params
[
file
][
fnum
][
'filter_opts'
]
scale
=
params
[
file
][
fnum
][
'scale'
]
cd
=
params
[
file
][
fnum
][
'cd'
]
mn
=
params
[
file
][
fnum
][
'mn'
]
mx
=
params
[
file
][
fnum
][
'mx'
]
l_n
=
params
[
file
][
fnum
][
'l_n'
]
l_min
=
params
[
file
][
fnum
][
'l_min'
]
l_max
=
params
[
file
][
fnum
][
'l_max'
]
l_kx
=
params
[
file
][
fnum
][
'l_kx'
]
l_ky
=
params
[
file
][
fnum
][
'l_ky'
]
l_color
=
params
[
file
][
fnum
][
'l_color'
]
l_crush
=
params
[
file
][
fnum
][
'l_crush'
]
b_weight
=
params
[
file
][
fnum
][
'b_weight'
]
b_xopts
=
params
[
file
][
fnum
][
'b_xopts'
]
b_yopts
=
params
[
file
][
fnum
][
'b_yopts'
]
b_color
=
params
[
file
][
fnum
][
'b_color'
]
# other params
n1
=
params
[
file
][
fnum
][
'n1'
]
n2
=
params
[
file
][
fnum
][
'n2'
]
select
=
params
[
file
][
fnum
][
'select'
]
exec_param
=
params
[
file
][
fnum
][
'exec'
]
macro
=
params
[
file
][
fnum
][
'macro'
]
ftype
=
params
[
file
][
fnum
][
'ftype'
]
time
=
params
[
file
][
fnum
][
'time'
]
# multi images
subs
=
params
[
file
][
fnum
][
'subs'
]
# dir parameter
fdir
=
params
[
file
][
fnum
][
'fdir'
]
# set min and max
if
mn
==
0.
and
mx
==
0.
and
cd
==
0.
and
file
!=
files
[
0
]:
mn
=
params
[
files
[
0
]][
fnum
][
'mn'
]
mx
=
params
[
files
[
0
]][
fnum
][
'mx'
]
cd
=
params
[
files
[
0
]][
fnum
][
'cd'
]
#
# check if the file need to be read
#
must_be_read
=
True
if
readonlyonce
:
if
last_file
==
os
.
path
.
splitext
(
file
)[
0
]:
must_be_read
=
False
last_file
=
os
.
path
.
splitext
(
file
)[
0
]
if
must_be_read
:
# open the model (remove the particle if there is one !!! not good !!!)
fl
=
os
.
path
.
splitext
(
file
)[
0
]
if
pio
==
'yes'
:
fl
=
os
.
path
.
splitext
(
fl
)[
0
]
if
mpi
.
mpi_IsMaster
():
print
"reading "
,
fl
nb
=
Nbody
(
fl
,
ftype
=
ftype
,
pio
=
pio
)
###############################
## take parameters from dir
###############################
'''
not implemented now
'''
if
redshift
:
nb
.
tnow
=
1
/
nb
.
tnow
-
1
if
fdir
!=
None
:
tnow
=
nb
.
tnow
if
arange
==
1
:
mn
=
0.
mx
=
0.
cd
=
0.
if
view
==
'dk'
:
mat
=
zeros
(
width
*
height
)
mat
=
mat
.
astype
(
int8
)
mat
=
mat
.
tostring
()
data
.
append
(
mat
)
else
:
if
must_be_read
:
############
# set time
############
exec
(
"nb.tnow =
%s
"
%
time
)
############
# exec
############
if
exec_param
!=
None
:
exec
(
exec_param
)
############
# macro
############
if
macro
!=
None
:
execfile
(
macro
)
############
# sub (n1,n2)
############
if
n1
!=
None
and
n2
!=
None
:
nb
=
nb
.
sub
(
n1
,
n2
)
############
# select
############
if
select
!=
None
:
nb
=
nb
.
select
(
select
)
if
mkfits
:
mat
=
nb
.
CombiMap
(
obs
=
obs
,
x0
=
x0
,
xp
=
xp
,
alpha
=
alpha
,
view
=
view
,
r_obs
=
r_obs
,
eye
=
eye
,
dist_eye
=
dist_eye
,
foc
=
foc
,
mode
=
mode
,
rendering
=
rendering
,
space
=
space
,
persp
=
persp
,
clip
=
clip
,
size
=
size
,
cut
=
cut
,
frsp
=
frsp
,
shape
=
shape
)
if
mpi
.
mpi_IsMaster
():
fitsdir
=
'fits'
output
=
'
%04d
_
%04d
.fits'
%
(
ifile
,
fnum
)
output
=
os
.
path
.
join
(
fitsdir
,
output
)
print
"
%8.3f
%002d
%s
"
%
(
nb
.
tnow
,
fnum
,
output
)
if
os
.
path
.
exists
(
output
):
os
.
remove
(
output
)
print
time
header
=
[(
'TIME'
,
nb
.
tnow
,
'snapshot time'
)]
io
.
WriteFits
(
transpose
(
mat
),
output
,
extraHeader
=
header
)
else
:
# compute map1
mat
,
matint
,
mn_opts
,
mx_opts
,
cd_opts
=
nb
.
Map
(
obs
=
obs
,
x0
=
x0
,
xp
=
xp
,
alpha
=
alpha
,
view
=
view
,
r_obs
=
r_obs
,
eye
=
eye
,
dist_eye
=
dist_eye
,
foc
=
foc
,
mode
=
mode
,
rendering
=
rendering
,
space
=
space
,
persp
=
persp
,
clip
=
clip
,
size
=
size
,
cut
=
cut
,
frsp
=
frsp
,
shape
=
shape
,
filter_name
=
filter_name
,
filter_opts
=
filter_opts
,
scale
=
scale
,
cd
=
cd
,
mn
=
mn
,
mx
=
mx
,
l_color
=
l_color
,
l_n
=
l_n
,
l_min
=
l_min
,
l_max
=
l_max
,
l_kx
=
l_kx
,
l_ky
=
l_ky
,
l_crush
=
l_crush
,
b_weight
=
b_weight
,
b_xopts
=
b_xopts
,
b_yopts
=
b_yopts
,
b_color
=
b_color
,
subs
=
subs
)
# !!!!!!!!!!!!!!!!!!!!
# il faut recuperer les valeurs optimales
# !!!!!!!!!!!!!!!!!!!!
mn_opt
=
mn_opts
[
0
]
# !!! source de probleme, il faut tout garder...
mx_opt
=
mx_opts
[
0
]
cd_opt
=
cd_opts
[
0
]
# add the image to the matrices
matint
=
transpose
(
matint
.
astype
(
int8
))
data
.
append
(
matint
.
tostring
())
if
mpi
.
mpi_IsMaster
():
print
"
%8.3f
%002d
min=
%10.3e
max=
%10.3e
cd=
%10.3e
"
%
(
nb
.
tnow
,
fnum
,
mn_opt
,
mx_opt
,
cd_opt
)
if
file
==
files
[
0
]
and
mn
==
0.
and
mx
==
0.
and
cd
==
0.
:
params
[
file
][
fnum
][
'cd'
]
=
cd_opt
params
[
file
][
fnum
][
'mn'
]
=
mn_opt
params
[
file
][
fnum
][
'mx'
]
=
mx_opt
# save used parameters
if
file
==
files
[
0
]:
if
mpi
.
mpi_IsMaster
():
write_params
(
SAVEDPARAMS
,
nh
,
nw
,
width
,
height
,
params
)
if
not
mkfits
:
datac
=
''
for
i
in
range
(
nw
):
# loop over the lines
# append the nw pictures and sum to the one of the previous line
datac
=
datac
+
Movie
.
append_h
(
width
,
height
,
data
[
i
*
nh
:(
i
+
1
)
*
nh
])
if
not
info
:
if
mpi
.
mpi_IsMaster
():
f
.
write_pic
(
nb
.
tnow
,
datac
)
if
not
info
:
if
mpi
.
mpi_IsMaster
():
f
.
close
()
Event Timeline
Log In to Comment