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
Hide 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
MDANSE : Molecular Dynamics Analysis for Neutron Scattering Experiments
#------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------
#Copyright (C)
Copyright (C)
#2015- Eric C. Pellegrini Institut Laue-Langevin
2015- Eric C. Pellegrini Institut Laue-Langevin
#BP 156
BP 156
#6, rue Jules Horowitz
6, rue Jules Horowitz
#38042 Grenoble Cedex 9
38042 Grenoble Cedex 9
#France
France
#pellegrini[at]ill.fr
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
#This library is free software; you can redistribute it and/or
License as published by the Free Software Foundation; either
#modify it under the terms of the GNU Lesser General Public
version 2.1 of the License, or (at your option) any later version.
#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
#This library is distributed in the hope that it will be useful,
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#but WITHOUT ANY WARRANTY; without even the implied warranty of
Lesser General Public License for more details.
#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
#You should have received a copy of the GNU Lesser General Public
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#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
@author: pellegrini
'''
'''
import
abc
import
os
import
os
import
re
import
StringIO
import
tarfile
import
numpy
import
numpy
from
MDANSE
import
REGISTRY
from
Scientific.IO.NetCDF
import
NetCDFFile
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'
extension
=
".dat"
extensions
=
[
'.dat'
,
'.txt'
]
from
MDANSE.Framework.Formats.IFormat
import
IFormat
@
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'
)
class
NetCDFFormat
(
IFormat
):
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
):
type
=
'netcdf'
type
=
'netcdf'
...
@@ -136,9 +59,6 @@ class NetCDFFormat(Format):
...
@@ -136,9 +59,6 @@ class NetCDFFormat(Format):
filename
=
"%s%s"
%
(
filename
,
cls
.
extensions
[
0
])
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.
# The NetCDF output file is opened for writing.
outputFile
=
NetCDFFile
(
filename
,
'w'
)
outputFile
=
NetCDFFile
(
filename
,
'w'
)
...
@@ -170,45 +90,3 @@ class NetCDFFormat(Format):
...
@@ -170,45 +90,3 @@ class NetCDFFormat(Format):
# The NetCDF file is closed.
# The NetCDF file is closed.
outputFile
.
close
()
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