Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Scientific Software
MDANSE
Commits
f84243a0
Commit
f84243a0
authored
Mar 27, 2015
by
eric pellegrini
Browse files
Created Format package that contains the whole Format interface
parent
a6012205
Changes
5
Show whitespace changes
Inline
Side-by-side
MDANSE/Framework/Formats/ASCIIFormat.py
0 → 100644
View file @
f84243a0
#MDANSE : Molecular Dynamics Analysis for Neutron Scattering Experiments
#------------------------------------------------------------------------------------------
#Copyright (C)
#2015- Eric C. Pellegrini Institut Laue-Langevin
#BP 156
#6, rue Jules Horowitz
#38042 Grenoble Cedex 9
#France
#pellegrini[at]ill.fr
#goret[at]ill.fr
#aoun[at]ill.fr
#
#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU Lesser General Public
#License as published by the Free Software Foundation; either
#version 2.1 of the License, or (at your option) any later version.
#
#This library is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public
#License along with this library; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
'''
Created on Mar 27, 2015
@author: pellegrini
'''
import
os
import
StringIO
import
tarfile
import
numpy
from
MDANSE.Framework.Formats.IFormat
import
IFormat
class
ASCIIFormat
(
IFormat
):
type
=
'ascii'
extension
=
".dat"
extensions
=
[
'.dat'
,
'.txt'
]
@
classmethod
def
write
(
cls
,
filename
,
data
,
header
=
""
):
filename
=
os
.
path
.
splitext
(
filename
)[
0
]
filename
=
"%s_%s.tar"
%
(
filename
,
cls
.
type
)
tf
=
tarfile
.
open
(
filename
,
'w'
)
for
var
in
data
.
values
():
tempStr
=
StringIO
.
StringIO
()
if
header
:
tempStr
.
write
(
header
)
tempStr
.
write
(
'
\n\n
'
)
tempStr
.
write
(
var
.
info
())
tempStr
.
write
(
'
\n\n
'
)
cls
.
write_array
(
tempStr
,
var
)
tempStr
.
seek
(
0
)
info
=
tarfile
.
TarInfo
(
name
=
'%s%s'
%
(
var
.
name
,
cls
.
extensions
[
0
]))
info
.
size
=
tempStr
.
len
tf
.
addfile
(
tarinfo
=
info
,
fileobj
=
tempStr
)
tf
.
close
()
@
classmethod
def
write_array
(
cls
,
fileobject
,
array
,
slices
=
None
):
if
slices
is
None
:
slices
=
[
0
]
*
array
.
ndim
slices
[
-
2
:]
=
array
.
shape
[
-
2
:]
if
array
.
ndim
>
2
:
for
a
in
array
:
cls
.
write_array
(
fileobject
,
a
,
slices
)
slices
[
len
(
slices
)
-
array
.
ndim
]
=
slices
[
len
(
slices
)
-
array
.
ndim
]
+
1
else
:
fileobject
.
write
(
'#slice:%s
\n
'
%
slices
)
numpy
.
savetxt
(
fileobject
,
array
)
fileobject
.
write
(
'
\n
'
)
MDANSE/Framework/Formats/IFormat.py
0 → 100644
View file @
f84243a0
#MDANSE : Molecular Dynamics Analysis for Neutron Scattering Experiments
#------------------------------------------------------------------------------------------
#Copyright (C)
#2015- Eric C. Pellegrini Institut Laue-Langevin
#BP 156
#6, rue Jules Horowitz
#38042 Grenoble Cedex 9
#France
#pellegrini[at]ill.fr
#goret[at]ill.fr
#aoun[at]ill.fr
#
#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU Lesser General Public
#License as published by the Free Software Foundation; either
#version 2.1 of the License, or (at your option) any later version.
#
#This library is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public
#License along with this library; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
'''
Created on Mar 27, 2015
@author: pellegrini
'''
import
abc
from
MDANSE
import
REGISTRY
class
IFormat
(
object
):
'''
This is the base class for nmoldyn data.
'''
__metaclass__
=
REGISTRY
type
=
"format"
@
abc
.
abstractmethod
def
write
(
self
,
filename
,
data
,
header
=
""
):
pass
MDANSE/Framework/
IO/
Formats.py
→
MDANSE/Framework/Formats
/NetCDFFormat
.py
View file @
f84243a0
#MDANSE : Molecular Dynamics Analysis for Neutron Scattering Experiments
#------------------------------------------------------------------------------------------
#Copyright (C)
#2015- Eric C. Pellegrini Institut Laue-Langevin
#BP 156
#6, rue Jules Horowitz
#38042 Grenoble Cedex 9
#France
#pellegrini[at]ill.fr
#goret[at]ill.fr
#aoun[at]ill.fr
#
#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU Lesser General Public
#License as published by the Free Software Foundation; either
#version 2.1 of the License, or (at your option) any later version.
#
#This library is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public
#License along with this library; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
'''
MDANSE : Molecular Dynamics Analysis for Neutron Scattering Experiments
------------------------------------------------------------------------------------------
Copyright (C)
2015- Eric C. Pellegrini Institut Laue-Langevin
BP 156
6, rue Jules Horowitz
38042 Grenoble Cedex 9
France
pellegrini[at]ill.fr
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Created on Mar 23, 2015
Created on Mar 27, 2015
@author: pellegrini
'''
import
abc
import
os
import
re
import
StringIO
import
tarfile
import
numpy
from
MDANSE
import
REGISTRY
from
MDANSE.Core.Error
import
Error
from
MDANSE.Externals.svgfig.svgfig
import
_hacks
,
Frame
,
Poly
_hacks
[
"inkscape-text-vertical-shift"
]
=
True
class
FormatError
(
Error
):
pass
def
format_unit_string
(
unitString
):
return
re
.
sub
(
'[%()]'
,
''
,
unitString
)
class
Format
(
object
):
'''
This is the base class for nmoldyn data.
'''
__metaclass__
=
REGISTRY
type
=
"format"
@
abc
.
abstractmethod
def
write
(
self
,
filename
,
data
,
header
=
""
):
pass
class
ASCIIFormat
(
Format
):
type
=
'ascii'
from
Scientific.IO.NetCDF
import
NetCDFFile
extension
=
".d
at
"
from
MDANSE.Framework.Formats.IFormat
import
IForm
at
extensions
=
[
'.dat'
,
'.txt'
]
@
classmethod
def
write
(
cls
,
filename
,
data
,
header
=
""
):
filename
=
os
.
path
.
splitext
(
filename
)[
0
]
filename
=
"%s_%s.tar"
%
(
filename
,
cls
.
type
)
tf
=
tarfile
.
open
(
filename
,
'w'
)
for
var
in
data
.
values
():
tempStr
=
StringIO
.
StringIO
()
if
header
:
tempStr
.
write
(
header
)
tempStr
.
write
(
'
\n\n
'
)
tempStr
.
write
(
var
.
info
())
tempStr
.
write
(
'
\n\n
'
)
cls
.
write_array
(
tempStr
,
var
)
tempStr
.
seek
(
0
)
info
=
tarfile
.
TarInfo
(
name
=
'%s%s'
%
(
var
.
name
,
cls
.
extensions
[
0
]))
info
.
size
=
tempStr
.
len
tf
.
addfile
(
tarinfo
=
info
,
fileobj
=
tempStr
)
tf
.
close
()
@
classmethod
def
write_array
(
cls
,
fileobject
,
array
,
slices
=
None
):
if
slices
is
None
:
slices
=
[
0
]
*
array
.
ndim
slices
[
-
2
:]
=
array
.
shape
[
-
2
:]
if
array
.
ndim
>
2
:
for
a
in
array
:
cls
.
write_array
(
fileobject
,
a
,
slices
)
slices
[
len
(
slices
)
-
array
.
ndim
]
=
slices
[
len
(
slices
)
-
array
.
ndim
]
+
1
else
:
fileobject
.
write
(
'#slice:%s
\n
'
%
slices
)
numpy
.
savetxt
(
fileobject
,
array
)
fileobject
.
write
(
'
\n
'
)
class
NetCDFFormat
(
Format
):
class
NetCDFFormat
(
IFormat
):
type
=
'netcdf'
...
...
@@ -136,9 +59,6 @@ class NetCDFFormat(Format):
filename
=
"%s%s"
%
(
filename
,
cls
.
extensions
[
0
])
# Import the NetCDFFile function.
from
Scientific.IO.NetCDF
import
NetCDFFile
# The NetCDF output file is opened for writing.
outputFile
=
NetCDFFile
(
filename
,
'w'
)
...
...
@@ -170,45 +90,3 @@ class NetCDFFormat(Format):
# The NetCDF file is closed.
outputFile
.
close
()
class
SVGFormat
(
Format
):
type
=
'svg'
extension
=
".svg"
extensions
=
[
'.svg'
]
@
classmethod
def
write
(
cls
,
filename
,
data
,
header
=
""
):
filename
=
os
.
path
.
splitext
(
filename
)[
0
]
filename
=
"%s.tar"
%
filename
tf
=
tarfile
.
open
(
filename
,
'w'
)
for
var
in
data
.
values
():
if
var
.
ndim
!=
1
:
continue
if
var
.
axis
in
data
:
axis
=
data
[
var
.
axis
]
xtitle
=
"%s (%s)"
%
(
axis
.
name
,
format_unit_string
(
axis
.
units
))
else
:
axis
=
numpy
.
arange
(
len
(
var
))
xtitle
=
'index'
ytitle
=
"%s (%s)"
%
(
var
.
name
,
format_unit_string
(
var
.
units
))
pl
=
Poly
(
zip
(
axis
,
var
),
stroke
=
'blue'
)
svgfilename
=
os
.
path
.
join
(
os
.
path
.
dirname
(
filename
),
'%s%s'
%
(
var
.
name
,
cls
.
extensions
[
0
]))
Frame
(
min
(
axis
),
max
(
axis
),
min
(
var
),
max
(
var
),
pl
,
xtitle
=
xtitle
,
ytitle
=
ytitle
).
SVG
().
save
(
svgfilename
)
tf
.
add
(
svgfilename
,
arcname
=
'%s%s'
%
(
var
.
name
,
cls
.
extensions
[
0
]))
os
.
remove
(
svgfilename
)
tf
.
close
()
MDANSE/Framework/Formats/SVGFormat.py
0 → 100644
View file @
f84243a0
#MDANSE : Molecular Dynamics Analysis for Neutron Scattering Experiments
#------------------------------------------------------------------------------------------
#Copyright (C)
#2015- Eric C. Pellegrini Institut Laue-Langevin
#BP 156
#6, rue Jules Horowitz
#38042 Grenoble Cedex 9
#France
#pellegrini[at]ill.fr
#goret[at]ill.fr
#aoun[at]ill.fr
#
#This library is free software; you can redistribute it and/or
#modify it under the terms of the GNU Lesser General Public
#License as published by the Free Software Foundation; either
#version 2.1 of the License, or (at your option) any later version.
#
#This library is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#Lesser General Public License for more details.
#
#You should have received a copy of the GNU Lesser General Public
#License along with this library; if not, write to the Free Software
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
'''
Created on Mar 27, 2015
@author: pellegrini
'''
import
os
import
re
import
tarfile
import
numpy
from
MDANSE.Externals.svgfig.svgfig
import
_hacks
,
Frame
,
Poly
from
MDANSE.Framework.Formats.IFormat
import
IFormat
_hacks
[
"inkscape-text-vertical-shift"
]
=
True
def
format_unit_string
(
unitString
):
return
re
.
sub
(
'[%()]'
,
''
,
unitString
)
class
SVGFormat
(
IFormat
):
type
=
'svg'
extension
=
".svg"
extensions
=
[
'.svg'
]
@
classmethod
def
write
(
cls
,
filename
,
data
,
header
=
""
):
filename
=
os
.
path
.
splitext
(
filename
)[
0
]
filename
=
"%s.tar"
%
filename
tf
=
tarfile
.
open
(
filename
,
'w'
)
for
var
in
data
.
values
():
if
var
.
ndim
!=
1
:
continue
if
var
.
axis
in
data
:
axis
=
data
[
var
.
axis
]
xtitle
=
"%s (%s)"
%
(
axis
.
name
,
format_unit_string
(
axis
.
units
))
else
:
axis
=
numpy
.
arange
(
len
(
var
))
xtitle
=
'index'
ytitle
=
"%s (%s)"
%
(
var
.
name
,
format_unit_string
(
var
.
units
))
pl
=
Poly
(
zip
(
axis
,
var
),
stroke
=
'blue'
)
svgfilename
=
os
.
path
.
join
(
os
.
path
.
dirname
(
filename
),
'%s%s'
%
(
var
.
name
,
cls
.
extensions
[
0
]))
Frame
(
min
(
axis
),
max
(
axis
),
min
(
var
),
max
(
var
),
pl
,
xtitle
=
xtitle
,
ytitle
=
ytitle
).
SVG
().
save
(
svgfilename
)
tf
.
add
(
svgfilename
,
arcname
=
'%s%s'
%
(
var
.
name
,
cls
.
extensions
[
0
]))
os
.
remove
(
svgfilename
)
tf
.
close
()
MDANSE/Framework/Formats/__init__.py
0 → 100644
View file @
f84243a0
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment