Compare commits
405 Commits
Author | SHA1 | Date | |
---|---|---|---|
d52dbbd9be | |||
36146893e6 | |||
2b4da82165 | |||
c612724378 | |||
1f2055d6b7 | |||
4dcbff3647 | |||
660f649670 | |||
d0f307c135 | |||
4ec79d2d9a | |||
1845fe2ba0 | |||
bad06e0bb9 | |||
5c65dc7e2c | |||
1c0ea0caee | |||
e21cd7b323 | |||
6be624e872 | |||
f1b3009f11 | |||
19163988e3 | |||
11fc34b1e3 | |||
ed486ddf2e | |||
ec71cbd7d7 | |||
dc8da8823e | |||
b5d2e8e181 | |||
21133af8f7 | |||
a1ab79024e | |||
633465e4c8 | |||
6a70e7a4db | |||
1d94b46777 | |||
98a9d581af | |||
260e0ad715 | |||
80e64afd04 | |||
f18b49b1c7 | |||
f29d48e879 | |||
ebda69049e | |||
5f1f4d0dc2 | |||
f001d12584 | |||
3d68d27a56 | |||
b6d1eb022e | |||
2e253450cd | |||
259add178e | |||
256133275c | |||
c50d34effc | |||
f2afcbc3fc | |||
1fbef303ff | |||
e28b66a294 | |||
58e7f6422b | |||
4ce6963428 | |||
14de18c507 | |||
53cbd8fed7 | |||
0858fd00e5 | |||
a1e57d7820 | |||
ec6f2a1edc | |||
648817cf0e | |||
f07ce85e46 | |||
5cfa505ae2 | |||
6c20de11c9 | |||
b46c381c3e | |||
fdf51c7c7f | |||
0a76e9c50f | |||
2020c13b97 | |||
cc9416b3f7 | |||
7e6bac20e1 | |||
1eabbc5c48 | |||
9c026a39d0 | |||
27e4504bf6 | |||
45a06fab7f | |||
d3eba1cd8b | |||
5739de0a61 | |||
444e524f44 | |||
c544c983e4 | |||
04b7cbb872 | |||
b313cf29bc | |||
1ad8b1a4f1 | |||
aa3ec28ec6 | |||
cb6d6b87cc | |||
6b78629946 | |||
a380093afc | |||
e6a671a8c0 | |||
b37ebe568f | |||
e417547923 | |||
14d24d02c2 | |||
848ba7f80c | |||
f83a16ec37 | |||
9e4f86c557 | |||
56a572c4ee | |||
ab9c1ec84b | |||
bf29661af9 | |||
e6625c975f | |||
ca267920d8 | |||
bed280353b | |||
a84731da30 | |||
163271fc17 | |||
083702b3b1 | |||
e80440472d | |||
4de9a58ae9 | |||
07477888bb | |||
5c2df5c163 | |||
6996aab2fa | |||
a94c3ed1cc | |||
ba7d8fc34f | |||
0e8d864ace | |||
7600abf372 | |||
05cf63e694 | |||
455b2a7a86 | |||
1798279a32 | |||
6379acca58 | |||
cef882b0a4 | |||
c862c8bb04 | |||
9242b88d07 | |||
90c84b768a | |||
057e2a9f1d | |||
d0a7b1cbc2 | |||
055c0ea4ac | |||
1a4d73f26b | |||
82dacc3dd1 | |||
27d935319c | |||
c26999e688 | |||
7ee7f0cf7e | |||
aef2e1daf0 | |||
ca51a0b382 | |||
b114d5aeec | |||
18f33decc7 | |||
6698ebe932 | |||
41f93c5989 | |||
7e9a0882f1 | |||
d9e5398865 | |||
16ed2fd9c9 | |||
dc43830752 | |||
7dbf28f65d | |||
21b63b17e5 | |||
7538710144 | |||
fa4604dbe5 | |||
01ef4bdedd | |||
ffe1ce6319 | |||
6ba8c6eb67 | |||
e06eeb6d17 | |||
26ab6c3fe7 | |||
a6af506ae0 | |||
fc91d17bdc | |||
d510e092e3 | |||
8d4848d5fa | |||
004cfe0a9f | |||
13b35180ee | |||
e08dba0924 | |||
04126e9c83 | |||
46c2a0c149 | |||
916fc4c046 | |||
168384f266 | |||
d055a1f882 | |||
4b80baf225 | |||
72e300c95e | |||
3f7215bc35 | |||
0523ebab05 | |||
e62a6ae9b3 | |||
0758ab8bfb | |||
7a0e2481eb | |||
94f4b276b9 | |||
b334e94b15 | |||
438e7cb918 | |||
2d419a9862 | |||
973470b595 | |||
da5b977042 | |||
83d76eac4f | |||
b233e4abc6 | |||
dc3893eecc | |||
f12fe23c1b | |||
4c24061575 | |||
63d6347f37 | |||
6e4db7ebe4 | |||
10eba079bc | |||
aa4007e208 | |||
0bc4a6e3f0 | |||
e84a202fbe | |||
50a6dae3f6 | |||
b39e71ca2b | |||
9ccdf97d07 | |||
1e18ac81de | |||
349cab3c51 | |||
9a2e259209 | |||
df88f44255 | |||
5cf34fc03f | |||
4b8f594966 | |||
47b89cc411 | |||
7fd4ac6225 | |||
b35f814ef0 | |||
dc7f7dbde2 | |||
a45743c31e | |||
91abf12f51 | |||
13dc6de5c1 | |||
1d517d0754 | |||
524c90fcf7 | |||
05274b4f0b | |||
939dba20ee | |||
54d271b841 | |||
a05d0faa0d | |||
7ea87e646a | |||
155dfada5c | |||
9db5991108 | |||
98f53d3448 | |||
7ee7aa968a | |||
dd04e28a62 | |||
850deeec0d | |||
75c7c51708 | |||
3f5d45d7af | |||
fae096afe4 | |||
a503ffcdf8 | |||
d29013a863 | |||
99987999db | |||
884804c49a | |||
b637a5badc | |||
4eaea2fe59 | |||
7b20f44fef | |||
e5cd8a8077 | |||
68cc583d2c | |||
ff8833a22c | |||
d6298a2d99 | |||
ff2c42902f | |||
2eb3d71a5d | |||
91032d729e | |||
7bdfdea23b | |||
c7bfefe358 | |||
335efe231a | |||
1ab558248c | |||
7272eb63d2 | |||
ebe7621817 | |||
f1301be67a | |||
a0faed2614 | |||
34ae426c86 | |||
90bb25eb55 | |||
31ac569c3e | |||
fefaffb2e3 | |||
28f0f53e8a | |||
a5c3a1f154 | |||
728c334e8a | |||
11eb3306b9 | |||
947cf8385f | |||
0904a59310 | |||
6f19fe1b4b | |||
0eff457910 | |||
3dc1867be4 | |||
6fe4ff3c59 | |||
b02773b4e6 | |||
dbe49b366d | |||
f6696dfacc | |||
1c48315a0f | |||
438a268b1d | |||
3d2492578e | |||
3bd21ab089 | |||
48047f1395 | |||
7f1f639ee7 | |||
22f6e3284c | |||
818dc0b2b0 | |||
212da78933 | |||
00dd3e8d9d | |||
51435d9fdc | |||
ac447546a2 | |||
a9981779a6 | |||
9cbefb5705 | |||
6cbf6d0689 | |||
6b2737efb9 | |||
f61bc353a9 | |||
5be2f1faf6 | |||
ae9a207a71 | |||
442b5fed5f | |||
f31795ac2a | |||
e01dd578cd | |||
ff070e5312 | |||
28e6c52f78 | |||
d699afa6a5 | |||
f8f3bd712e | |||
6101bf850c | |||
89636962a7 | |||
934640ea62 | |||
281337251d | |||
78183df0e9 | |||
b754a5df44 | |||
61cfd00558 | |||
059cddbc16 | |||
bf1ad1be87 | |||
1ba4bf5f82 | |||
686a1fdcd1 | |||
d27278241c | |||
4de65f1085 | |||
f73a6db0ee | |||
eacb44f32a | |||
d040f11c2f | |||
537dc9f0ec | |||
c0bbe24c39 | |||
a6fbef9cfa | |||
2f60d0663d | |||
5ed602f355 | |||
3ee8439e07 | |||
a614908436 | |||
41e8ed511b | |||
0d8702bb71 | |||
2bae169f38 | |||
28aca8c621 | |||
8c03338b75 | |||
48165d1aed | |||
f0b2660813 | |||
5800e7e362 | |||
a5955f9b59 | |||
c5c4f13a19 | |||
2cc4e86b0a | |||
a2195bcb4b | |||
93a2f404d2 | |||
6809c1a454 | |||
953662e1fb | |||
e6cf8f765a | |||
b17f04466b | |||
4319e8630e | |||
fc33c2dbfc | |||
15c89fb9b5 | |||
7eb13b14cb | |||
320cd97512 | |||
75b66914fd | |||
74cb30428c | |||
1863bfc564 | |||
a7c60ffe64 | |||
240b0a4a9f | |||
d1205ae67f | |||
37feb1c25b | |||
2cfa3ca415 | |||
63be80aa92 | |||
088f180b5d | |||
e716db3fd2 | |||
29509902df | |||
8e607c7b1a | |||
f064b7134d | |||
1d5929f14c | |||
ed2848beb3 | |||
48bb47ec86 | |||
aeb37cf4cd | |||
fa3722600c | |||
61bfc236e6 | |||
7a204a3426 | |||
1c2c2c8895 | |||
a65d79697f | |||
e03cc4ed4c | |||
7693f336ba | |||
f533344242 | |||
7c20e6d780 | |||
1ffbf4f9e7 | |||
06591e301e | |||
c3c6e85044 | |||
33c51505c4 | |||
f612dda72f | |||
ea4c0af6de | |||
cacb0a27b7 | |||
476c830a5e | |||
0a38cb7d4a | |||
ee447b688c | |||
58886726d8 | |||
ae3aa7e4aa | |||
08b7d8dd85 | |||
e4d7f8e5a2 | |||
4b1d16ea78 | |||
3340b1b7ac | |||
d4f5a92010 | |||
9274b044b7 | |||
060732d980 | |||
1e0b99f283 | |||
fa047e0171 | |||
6f050d4f10 | |||
1371bc1b1a | |||
f7fe171896 | |||
e08a8377ed | |||
ebd4fdae7b | |||
57e58e3910 | |||
d45ae4f480 | |||
75447d8840 | |||
c34f23190b | |||
3ef5522dd0 | |||
fac9346aad | |||
6aa1a1a817 | |||
880509f8a9 | |||
fb77ddb549 | |||
438dbd358b | |||
0b30aeac6f | |||
5491f5ce04 | |||
de4a65e7b3 | |||
cdb8d1b026 | |||
1f9a400057 | |||
f7ededa451 | |||
fe96772319 | |||
5d4700da20 | |||
fb3d9f2050 | |||
4153f06c60 | |||
375d45e0cc | |||
610812f265 | |||
c40f9a2947 | |||
bf951990f5 | |||
ba55678472 | |||
42f6fd7440 | |||
4b8ff16bbf | |||
eb203ea8ad | |||
9162deabac | |||
d9ec8f1611 | |||
eefbc438bc | |||
ebdf6d4aba | |||
16036e5b52 | |||
e09b3e3c3e | |||
e08cc8b816 | |||
f826931105 | |||
b1bfe1fe3e | |||
d9fd4fc127 |
61
LICENSE
@ -276,64 +276,3 @@ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
|
30
Makefile.m4
Normal file
@ -0,0 +1,30 @@
|
||||
PREFIX=M4_PREFIX
|
||||
BIN_DIR=M4_BINDIR
|
||||
DATA_DIR=M4_DATADIR
|
||||
PY_DIR=M4_PYDIR
|
||||
DOC_DIR=M4_DOCDIR
|
||||
|
||||
SCRIPTS_DIR=${DATA_DIR}/laydi/scripts/
|
||||
|
||||
install: install_laydi install_doc
|
||||
|
||||
install_laydi:
|
||||
## Install binary files
|
||||
install -m 755 -D bin/laydi ${BIN_DIR}/laydi
|
||||
install -m 755 -D bin/dataset ${BIN_DIR}/dataset
|
||||
|
||||
## Install library files
|
||||
find laydi/ -type f -name '*.py' -exec install -m 644 -D {} ${PY_DIR}/{} \;
|
||||
find laydi/ -type f -name '*.glade' -exec install -m 644 -D {} ${PY_DIR}/{} \;
|
||||
|
||||
## Install icons
|
||||
find icons/ -type f -name '*.png' -exec install -m 644 -D {} ${DATA_DIR}/{} \;
|
||||
|
||||
install_scripts:
|
||||
find scripts/ -type f -exec install -D {} ${SCRIPTS_DIR}/{} \;
|
||||
|
||||
install_doc:
|
||||
DOC_DIR=${DOC_DIR}/ make -C doc install
|
||||
install -m 644 README ${DOC_DIR}/
|
||||
install -m 644 LICENSE ${DOC_DIR}/
|
||||
|
10
R/laydi/DESCRIPTION
Normal file
@ -0,0 +1,10 @@
|
||||
Package: laydi
|
||||
Type: Package
|
||||
Title: Interface to Laydi
|
||||
Version: 0.1.0
|
||||
Date: 2011-03-05
|
||||
Author: Einar Ryeng <einarr@pvv.ntnu.no>
|
||||
Maintainer: Einar Ryeng <einarr@pvv.ntnu.no>
|
||||
Description: R interface to Laydi
|
||||
License: LGPL
|
||||
LazyLoad: yes
|
61
R/laydi/R/laydi.R
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
write.ftsv <- function(data, con, name="unnamed_dataset", rowdim="rows", coldim="cols") {
|
||||
# If con is a file name, open it
|
||||
opened.here = FALSE
|
||||
if (is.character(con)){
|
||||
con = file(con, "w")
|
||||
opened.here = TRUE
|
||||
}
|
||||
|
||||
# Substitute all whitespace with underscores in identifiers
|
||||
rows <- paste(gsub("\\s", "_", rownames(data)), collapse=" ")
|
||||
cols <- paste(gsub("\\s", "_", colnames(data)), collapse=" ")
|
||||
|
||||
# Write header
|
||||
writeLines(c("# type: dataset",
|
||||
paste("# dimension:", rowdim, rows, collapse=' '),
|
||||
paste("# dimension:", coldim, cols, collapse=' '),
|
||||
paste("# name:", name, collapse=' '),
|
||||
""),
|
||||
con=con)
|
||||
|
||||
# Write matrix
|
||||
write.table(data, file=con, col.names=FALSE, row.names=FALSE, sep="\t")
|
||||
|
||||
# If con was a string, close file now
|
||||
if (opened.here)
|
||||
close(con)
|
||||
}
|
||||
|
||||
write.laydi.selection <- function(data, con) {
|
||||
# If con is a file name, open it
|
||||
opened.here = FALSE
|
||||
if (is.character(con)){
|
||||
con = file(con, "w")
|
||||
opened.here = TRUE
|
||||
}
|
||||
|
||||
writeLines(gsub("\\s", "_", data), con=con)
|
||||
|
||||
# If con was a string, close file now
|
||||
if (opened.here)
|
||||
close(con)
|
||||
}
|
||||
|
||||
read.laydi.selection <- function(con) {
|
||||
# If con is a file name, open it
|
||||
opened.here = FALSE
|
||||
if (is.character(con)){
|
||||
con = file(con)
|
||||
opened.here = TRUE
|
||||
}
|
||||
|
||||
ids <- readLines(con=con, encoding="UTF-8")
|
||||
|
||||
# If con was a string, close file now
|
||||
if (opened.here)
|
||||
close(con)
|
||||
|
||||
ids
|
||||
}
|
||||
|
38
R/laydi/man/laydi-package.Rd
Normal file
@ -0,0 +1,38 @@
|
||||
\name{laydi-package}
|
||||
\alias{laydi-package}
|
||||
\alias{laydi}
|
||||
\docType{package}
|
||||
\title{Interface to Laydi}
|
||||
\description{
|
||||
Interface to Laydi files and projects. Allows writing R matrices to laydi data files.
|
||||
}
|
||||
\details{
|
||||
\tabular{ll}{
|
||||
Package: \tab laydi\cr
|
||||
Type: \tab Package\cr
|
||||
Version: \tab 0.1.0\cr
|
||||
Date: \tab 2011-03-05\cr
|
||||
License: \tab LGPL\cr
|
||||
LazyLoad: \tab yes\cr
|
||||
}
|
||||
|
||||
library(laydi)
|
||||
write.ftsv(matrix, file, ...)
|
||||
write.laydi.selection(idlist, file)
|
||||
|
||||
}
|
||||
\author{
|
||||
Einar Ryeng <einarr@pvv.org>\cr
|
||||
Arnar Flatberg <arnar.flatberg@gmail.com>
|
||||
|
||||
Maintainer: Einar Ryeng <einarr@pvv.org>
|
||||
}
|
||||
\references{
|
||||
}
|
||||
\keyword{ package }
|
||||
\seealso{
|
||||
% ~~ Optional links to other man pages, e.g. ~~
|
||||
% ~~ \code{\link[<pkg>:<pkg>-package]{<pkg>}} ~~
|
||||
}
|
||||
\examples{
|
||||
}
|
53
R/laydi/man/read.laydi.selection.Rd
Normal file
@ -0,0 +1,53 @@
|
||||
\name{read.laydi.selection}
|
||||
\alias{read.laydi.selection}
|
||||
\title{read.laydi.selection}
|
||||
\description{
|
||||
Reads a list of identifiers from a file.
|
||||
}
|
||||
\usage{
|
||||
read.laydi.selection(con)
|
||||
}
|
||||
\arguments{
|
||||
\item{con}{
|
||||
Connection (or file name) to read from. If con is a character string, it
|
||||
will be treated as a file name, and the file will be opened, read and
|
||||
closed. If con is an open connection (file descriptor), the file will
|
||||
remain open.
|
||||
}
|
||||
}
|
||||
|
||||
\details{
|
||||
%% ~~ If necessary, more details than the description above ~~
|
||||
}
|
||||
\value{
|
||||
%% ~Describe the value returned
|
||||
%% If it is a LIST, use
|
||||
%% \item{comp1 }{Description of 'comp1'}
|
||||
%% \item{comp2 }{Description of 'comp2'}
|
||||
%% ...
|
||||
}
|
||||
\references{
|
||||
Laydi and the laydi R package are not published in the litterature. Source code
|
||||
can be found at http://dev.pvv.ntnu.no/projects/laydi
|
||||
}
|
||||
\author{
|
||||
Einar Ryeng
|
||||
}
|
||||
\note{
|
||||
%% ~~further notes~~
|
||||
}
|
||||
|
||||
%% ~Make other sections like Warning with \section{Warning }{....} ~
|
||||
|
||||
\seealso{
|
||||
%% ~~objects to See Also as \code{\link{help}}, ~~~
|
||||
}
|
||||
\examples{
|
||||
|
||||
read.laydi.selection("/tmp/selected_samples")
|
||||
|
||||
}
|
||||
|
||||
\keyword{ IO }
|
||||
\keyword{ file }
|
||||
|
74
R/laydi/man/write.ftsv.Rd
Normal file
@ -0,0 +1,74 @@
|
||||
\name{write.ftsv}
|
||||
\alias{write.ftsv}
|
||||
\title{write.ftsv}
|
||||
\description{
|
||||
Writes a matrix to a ftsv (laydi dataset) file. The matrix must have rownames
|
||||
and colnames. Rownames and colnames must be unique, and whitespace characters
|
||||
will be replaced with underscores.
|
||||
}
|
||||
\usage{
|
||||
write.ftsv(data, con, name = "unnamed_dataset", rowdim = "rows", coldim = "cols")
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{
|
||||
A data matrix. All items in rownames(data) and colnames(data) must be
|
||||
unique, and all whitespace characters will be replaced wity underscores in
|
||||
the output. (Laydi requires unique identifiers along a dimension, and does
|
||||
not allow identifiers to contain spaces.)
|
||||
}
|
||||
\item{con}{
|
||||
Connection (or file name) to write the data to. If con is a character
|
||||
string, it will be treated as a file name, and a file by that name will be
|
||||
created, written to and closed. If con is an open connection (file descriptor),
|
||||
the file will remain open.
|
||||
}
|
||||
\item{name}{
|
||||
Datasets in laydi have a name.
|
||||
}
|
||||
\item{rowdim}{
|
||||
Laydi names all dimensions of matrices. rowdim is the dimension
|
||||
name for rows in the the file. E.g. "samples", if rows denotes samples.
|
||||
}
|
||||
\item{coldim}{
|
||||
Laydi names all dimensions of matrices. coldim is the dimension
|
||||
name for columns in the the file. E.g. "gene-ids" if columns represent
|
||||
genes.
|
||||
}
|
||||
}
|
||||
|
||||
\details{
|
||||
%% ~~ If necessary, more details than the description above ~~
|
||||
}
|
||||
\value{
|
||||
%% ~Describe the value returned
|
||||
%% If it is a LIST, use
|
||||
%% \item{comp1 }{Description of 'comp1'}
|
||||
%% \item{comp2 }{Description of 'comp2'}
|
||||
%% ...
|
||||
}
|
||||
\references{
|
||||
Laydi and this R package are not published in the litterature. Source code can be found at
|
||||
http://dev.pvv.ntnu.no/projects/laydi
|
||||
}
|
||||
\author{
|
||||
Einar Ryeng
|
||||
}
|
||||
\note{
|
||||
%% ~~further notes~~
|
||||
}
|
||||
|
||||
%% ~Make other sections like Warning with \section{Warning }{....} ~
|
||||
|
||||
\seealso{
|
||||
%% ~~objects to See Also as \code{\link{help}}, ~~~
|
||||
}
|
||||
\examples{
|
||||
|
||||
library(datasets)
|
||||
write.ftsv(randu, "/tmp/randu.ftsv")
|
||||
|
||||
}
|
||||
|
||||
\keyword{ IO }
|
||||
\keyword{ file }
|
||||
|
61
R/laydi/man/write.laydi.selection.Rd
Normal file
@ -0,0 +1,61 @@
|
||||
\name{write.laydi.selection}
|
||||
\alias{write.laydi.selection}
|
||||
\title{write.laydi.selection}
|
||||
\description{
|
||||
Writes a Laydi selection file from a list of identifiers. Identifiers are
|
||||
written one per line, with all whitespace characters substituted with
|
||||
underscores.
|
||||
}
|
||||
\usage{
|
||||
write.laydi.selection(data, con)
|
||||
}
|
||||
\arguments{
|
||||
\item{data}{
|
||||
A list of identifiers. All whitespace characters will be replaced wity
|
||||
underscores in the output. (Laydi requires unique identifiers along a
|
||||
dimension, and does not allow identifiers to contain spaces.) This method
|
||||
does not ensure that identifiers are unique.
|
||||
}
|
||||
\item{con}{
|
||||
Connection (or file name) to write the data to. If con is a character
|
||||
string, it will be treated as a file name, and a file by that name will be
|
||||
created, written to and closed. If con is an open connection (file descriptor),
|
||||
the file will remain open.
|
||||
}
|
||||
}
|
||||
|
||||
\details{
|
||||
%% ~~ If necessary, more details than the description above ~~
|
||||
}
|
||||
\value{
|
||||
%% ~Describe the value returned
|
||||
%% If it is a LIST, use
|
||||
%% \item{comp1 }{Description of 'comp1'}
|
||||
%% \item{comp2 }{Description of 'comp2'}
|
||||
%% ...
|
||||
}
|
||||
\references{
|
||||
Laydi and the laydi R package are not published in the litterature. Source code
|
||||
can be found at http://dev.pvv.ntnu.no/projects/laydi
|
||||
}
|
||||
\author{
|
||||
Einar Ryeng
|
||||
}
|
||||
\note{
|
||||
%% ~~further notes~~
|
||||
}
|
||||
|
||||
%% ~Make other sections like Warning with \section{Warning }{....} ~
|
||||
|
||||
\seealso{
|
||||
%% ~~objects to See Also as \code{\link{help}}, ~~~
|
||||
}
|
||||
\examples{
|
||||
|
||||
write.laydi.selection(c("sample1", "sample2", "sample3"), "/tmp/selected_samples")
|
||||
|
||||
}
|
||||
|
||||
\keyword{ IO }
|
||||
\keyword{ file }
|
||||
|
27
README
@ -1,27 +0,0 @@
|
||||
Fluents Data Analysis Software
|
||||
|
||||
LICENSE
|
||||
-------
|
||||
Fluents is relased under the terms of the GNU GPL, included in the LICENSE file
|
||||
in this directory.
|
||||
|
||||
DOCUMENTATION
|
||||
-------------
|
||||
The primary and canonical source of documentation is the source code. If a
|
||||
keyboard shortcut is listed on the wiki but it does not work in the program,
|
||||
the program is right, and the wiki is wrong.
|
||||
|
||||
That said, the next best place to look for documentation is the project wiki,
|
||||
located at https://dev.pvv.ntnu.no/projects/fluent/help
|
||||
|
||||
BUILDING
|
||||
--------
|
||||
Fluents is a python program, and as such, python will build compiled versions
|
||||
of each .py file as it loads them. You do not need to explicitly compile the
|
||||
program.
|
||||
|
||||
TODO
|
||||
----
|
||||
The current TODO list can be found on
|
||||
https://dev.pvv.ntnu.no/projects/fluent/report/1
|
||||
|
57
README.md
Normal file
@ -0,0 +1,57 @@
|
||||

|
||||
|
||||
# Laydi
|
||||
|
||||
## Look At Your Data Interactively
|
||||
|
||||
Laydi is an acronym for look at your data interactively, which is what the program is aimed at. It is a lightweight data analysis program for bilinear modeling (PCA and PLS) with a strong focus on interactive use. Laydi is released under the GNU GPL and the latest development snapshot can be downloaded from https://git.pvv.ntnu.no/Projects/laydi.git
|
||||
|
||||

|
||||
|
||||
## Features
|
||||
|
||||
- Principal Component Analysis (PCA)
|
||||
- Partial Least Squares Regression (PLS)
|
||||
- L-shaped PLS regression (L-PLS)
|
||||
- Easy mapping of variables between plots, selections in one plot propagates to other plots.
|
||||
|
||||
## Nonfeatures
|
||||
|
||||
- Does not import arbitrary files. Files must be prepared in a (simple) file format prior to import.
|
||||
- Saving and loading of projects is not implemented. (Datasets can be saved and loaded, though, and plots can be exported)
|
||||
- Not very stable
|
||||
|
||||
## Installation requirements
|
||||
|
||||
Laydi currently requires the following extra packages, available from apt on Debian and Ubuntu.
|
||||
|
||||
- python2.4 or python2.5
|
||||
- python-glade2
|
||||
- python-gnome2
|
||||
- python-gtk2
|
||||
- python-matplotlib
|
||||
- python-scipy
|
||||
- python-numpy
|
||||
|
||||
Partially needed
|
||||
|
||||
- python-networkx
|
||||
- python-pygraphviz
|
||||
|
||||
## Download laydi
|
||||
|
||||
Laydi is not debianized. To download it, use the clone the git repo.
|
||||
|
||||
```console
|
||||
git clone https://git.pvv.ntnu.no/Projects/laydi.git
|
||||
```
|
||||
|
||||
## User documentation
|
||||
|
||||
- [Frequently Asked Questions](./wiki/faq.md)
|
||||
- [Laydi help](./wiki/help.md) (the same as available through the help menu in the application.)
|
||||
- [Terminology](./wiki/Terminology.md)
|
||||
|
||||
## Developer documentation
|
||||
|
||||
- [Developer tips and tricks](./wiki/development/hints.md)
|
41
README.old
Normal file
@ -0,0 +1,41 @@
|
||||
Laydi Data Analysis Software
|
||||
|
||||
LICENSE
|
||||
-------
|
||||
Laydi is relased under the terms of the GNU GPL, included in the LICENSE file
|
||||
in this directory.
|
||||
|
||||
DOCUMENTATION
|
||||
-------------
|
||||
The primary and canonical source of documentation is the source code. If a
|
||||
keyboard shortcut is listed on the wiki but it does not work in the program,
|
||||
the program is right, and the wiki is wrong.
|
||||
|
||||
That said, the next best place to look for documentation is the project wiki,
|
||||
located at https://dev.pvv.ntnu.no/projects/laydi/help
|
||||
|
||||
Class documentation is in HTML form in the doc/ directory.
|
||||
|
||||
BUILDING
|
||||
--------
|
||||
Laydi is a python program, and as such, python will build compiled versions
|
||||
of each .py file as it loads them. You do not need to explicitly compile the
|
||||
program.
|
||||
|
||||
If you have just checked out the program to a directory named laydi, e.g. with
|
||||
the command:
|
||||
|
||||
svn co https://dev.pvv.org/svn/laydi/trunk laydi
|
||||
|
||||
you can run it by typing:
|
||||
|
||||
cd laydi
|
||||
./configure --prefix=`pwd`/build
|
||||
make
|
||||
./run-laydi
|
||||
|
||||
TODO
|
||||
----
|
||||
The current TODO list can be found on
|
||||
https://dev.pvv.ntnu.no/projects/laydi/report/1
|
||||
|
116
bin/dataset
Executable file
@ -0,0 +1,116 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import os,sys
|
||||
from laydi import dataset
|
||||
import cfgparse, optparse
|
||||
import re
|
||||
|
||||
PROGRAM_NAME = 'dataset'
|
||||
VERSION = '0.1.0'
|
||||
|
||||
def read_dataset_header(input):
|
||||
name = ""
|
||||
type = ""
|
||||
dimensions = []
|
||||
|
||||
kv_re = re.compile('^\s*#\s*(\w+)\s*:(.*)$')
|
||||
|
||||
lines = []
|
||||
line = input.readline()
|
||||
while line.startswith('#'):
|
||||
lines.append(line)
|
||||
line = input.readline()
|
||||
|
||||
for line in lines:
|
||||
match = kv_re.match(line)
|
||||
if not match:
|
||||
continue
|
||||
k, v = match.groups()
|
||||
k = k.strip()
|
||||
|
||||
if k == 'name':
|
||||
name = v
|
||||
elif k == 'type':
|
||||
type = v
|
||||
elif k == 'dimension':
|
||||
values = v.split()
|
||||
dimensions.append((values[0], values[1:]))
|
||||
|
||||
return (name, type, dimensions)
|
||||
|
||||
def show_info(input):
|
||||
name, type, dimensions = read_dataset_header(input)
|
||||
|
||||
print "Name: %s" % name
|
||||
print "Type: %s" % type
|
||||
print "Dimensions:",
|
||||
for i, dim in enumerate(dimensions):
|
||||
dimname = dim[0]
|
||||
length = len(dim[1])
|
||||
print "%s(%i)" % (dimname, length),
|
||||
if i < len(dimensions)-1:
|
||||
print "x",
|
||||
print
|
||||
|
||||
def list_dimension_ids(input, dimname):
|
||||
name, type, dimensions = read_dataset_header(input)
|
||||
for i, dim in enumerate(dimensions):
|
||||
name, ids = dim
|
||||
if name == dimname:
|
||||
for id in ids:
|
||||
print id
|
||||
|
||||
def parse_options():
|
||||
conf_files = ['/etc/laydirc',
|
||||
os.path.join(os.environ['HOME'], '.laydi')]
|
||||
|
||||
cp = cfgparse.ConfigParser()
|
||||
op = optparse.OptionParser()
|
||||
|
||||
op.add_option('-c', '--csv',
|
||||
action='store_true', default=False,
|
||||
help='Export as CSV file.')
|
||||
|
||||
op.add_option('-d', '--dimension',
|
||||
action='store', default=None,
|
||||
help='Get all identifiers along a dimension.')
|
||||
|
||||
op.add_option('-i', '--info',
|
||||
action='store_true', default=False,
|
||||
help='Show dataset information.')
|
||||
|
||||
op.add_option('-l', '--longinfo',
|
||||
action='store_true', default=False,
|
||||
help='Display more information than -i.')
|
||||
|
||||
op.add_option('-o', '--output-file',
|
||||
action='store_true', default=False,
|
||||
help='Send output to file instead of stdout.')
|
||||
|
||||
op.add_option('-t', '--transpose',
|
||||
action='store_true', default=False,
|
||||
help='Transpose dataset.')
|
||||
|
||||
op.add_option('-y', '--change-type',
|
||||
action='store_true', default=False,
|
||||
help='Set new dataset type.')
|
||||
|
||||
|
||||
for cf in conf_files:
|
||||
if os.path.isfile(cf):
|
||||
cp.add_file(cf)
|
||||
|
||||
return cp.parse(op)
|
||||
|
||||
if __name__ == '__main__':
|
||||
options, params = parse_options()
|
||||
input = sys.stdin
|
||||
output = sys.stdout
|
||||
|
||||
if options.info:
|
||||
show_info(input)
|
||||
sys.exit(0)
|
||||
|
||||
elif options.dimension != None:
|
||||
list_dimension_ids(input, options.dimension)
|
||||
|
50
bin/ftsv2csv
Executable file
@ -0,0 +1,50 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
|
||||
from laydi import dataset
|
||||
from getopt import getopt
|
||||
|
||||
def read_options():
|
||||
short_opts = ""
|
||||
long_opts = []
|
||||
|
||||
options, params = getopt(sys.argv[1:], short_opts, long_opts)
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def write_csv(fd, ds):
|
||||
rowdim, coldim = ds.get_dim_name()
|
||||
rowids = ds.get_identifiers(rowdim, sorted=True)
|
||||
colids = ds.get_identifiers(coldim, sorted=True)
|
||||
x = ds.asarray()
|
||||
|
||||
## Print ID row
|
||||
print >> fd, rowdim,
|
||||
for id in colids:
|
||||
print >> fd, id,
|
||||
print >> fd
|
||||
|
||||
## Print column IDs and data
|
||||
for i, row in enumerate(rowids):
|
||||
print >> fd, row,
|
||||
for j in range(len(colids)):
|
||||
print >> fd, x[i,j],
|
||||
print >> fd
|
||||
|
||||
if __name__ == "__main__":
|
||||
params = read_options()
|
||||
input_fn = params[0]
|
||||
|
||||
if len(params) == 2:
|
||||
output_fn = params[1]
|
||||
else:
|
||||
name, ext = input_fn.rsplit('.', 1)
|
||||
output_fn = name + '.csv'
|
||||
|
||||
ds = dataset.read_ftsv(input_fn)
|
||||
output_fd = open(output_fn, 'w')
|
||||
write_csv(output_fd, ds)
|
||||
output_fd.close()
|
||||
|
145
bin/laydi
Executable file
@ -0,0 +1,145 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from getopt import getopt
|
||||
import os
|
||||
import sys
|
||||
from laydi import laydi, project, projectview, workflow, main
|
||||
#import workflows
|
||||
from laydi import cfgparse
|
||||
import optparse
|
||||
|
||||
PROGRAM_NAME = 'laydi'
|
||||
VERSION = '0.1.0'
|
||||
|
||||
def list_workflows():
|
||||
print 'laydi %s' % VERSION
|
||||
print
|
||||
print 'Available workflows:'
|
||||
|
||||
wfs = workflow.workflow_list()
|
||||
for wf in wfs:
|
||||
print ' %s (%s)' % (wf.ident, wf.name)
|
||||
print
|
||||
|
||||
|
||||
def generate_config():
|
||||
fn = os.path.join(os.environ['HOME'], '.laydi')
|
||||
if not os.path.exists(fn):
|
||||
fd = open(fn, 'w')
|
||||
print >> fd, "home = %s" % os.environ['HOME']
|
||||
print >> fd, "datadir = %%(home)s/laydi/datasets"
|
||||
print >> fd, "workflowdir = %%(home)s/laydi/workflows"
|
||||
fd.close()
|
||||
|
||||
laydidir = os.path.join(os.environ['HOME'], 'laydi')
|
||||
if not os.path.exists(laydidir):
|
||||
os.mkdir(laydidir, 0755)
|
||||
|
||||
datadir = os.path.join(os.environ['HOME'], 'laydi/datasets')
|
||||
if not os.path.exists(datadir):
|
||||
os.mkdir(datadir, 0755)
|
||||
|
||||
workflowdir = os.path.join(os.environ['HOME'], 'laydi/workflows')
|
||||
if not os.path.exists(workflowdir):
|
||||
os.mkdir(workflowdir, 0755)
|
||||
|
||||
|
||||
def parse_options():
|
||||
conf_files = ['/etc/laydirc',
|
||||
os.path.join(os.environ['HOME'], '.laydi')]
|
||||
|
||||
cp = cfgparse.ConfigParser()
|
||||
|
||||
cp.add_option('home', type='string',
|
||||
default=os.environ['HOME'])
|
||||
|
||||
cp.add_option('datadir', type='string',
|
||||
default=os.environ['HOME'])
|
||||
cp.add_option('workflowdir', type='string',
|
||||
default='workflows')
|
||||
cp.parse()
|
||||
op = optparse.OptionParser()
|
||||
|
||||
op.add_option('-l', '--list-workflows',
|
||||
action='store_true',
|
||||
default=False,
|
||||
help='List available workflows.')
|
||||
|
||||
op.add_option('-w', '--workflow',
|
||||
default='default',
|
||||
help='Start with selected workflow')
|
||||
|
||||
op.add_option('-c', '--generate-config',
|
||||
action='store_true',
|
||||
help='Generate configuration file ~/.laydi if it does not exist.')
|
||||
|
||||
op.add_option('-n', '--new-project',
|
||||
action='store_true',
|
||||
help='Create new project directory.')
|
||||
|
||||
for cf in conf_files:
|
||||
if os.path.isfile(cf):
|
||||
cp.add_file(cf)
|
||||
|
||||
options, params = cp.parse(op)
|
||||
if len(params) != 1:
|
||||
print "error: project directory must be specified."
|
||||
print "notice: to create a new project use -n /path/to/project"
|
||||
sys.exit(1)
|
||||
|
||||
return options, params
|
||||
|
||||
if __name__ == '__main__':
|
||||
import gtk
|
||||
import gnome
|
||||
|
||||
gnome.program_init(PROGRAM_NAME, VERSION)
|
||||
|
||||
options, params = parse_options()
|
||||
|
||||
## Workflow setup
|
||||
main.options = options
|
||||
|
||||
for dir in main.options.workflowdir.split(';'):
|
||||
if dir.strip() != "" and os.path.exists(dir):
|
||||
sys.path.append(dir)
|
||||
|
||||
if options.list_workflows:
|
||||
list_workflows()
|
||||
sys.exit(0)
|
||||
|
||||
if options.generate_config:
|
||||
generate_config()
|
||||
sys.exit(0)
|
||||
|
||||
selected_wf = workflow.find_workflow(options.workflow)
|
||||
if selected_wf == None: selected_wf = workflow.EmptyWorkflow
|
||||
|
||||
# workflow_list = workflow.workflow_list()
|
||||
# for wf in workflow_list:
|
||||
# if wf.ident == options.workflow:
|
||||
# selected_wf = wf
|
||||
|
||||
main.set_workflow(selected_wf())
|
||||
main.set_options(options)
|
||||
app = laydi.LaydiApp()
|
||||
|
||||
## Project setup
|
||||
prjroot = params[0]
|
||||
if not project.is_project_directory(prjroot):
|
||||
if options.new_project:
|
||||
project.make_project_directory(prjroot)
|
||||
else:
|
||||
print "error: project directory not found: %s" % prjroot
|
||||
print "notice: use the -n option to make a new project"
|
||||
sys.exit(2)
|
||||
proj = project.Project(prjroot)
|
||||
main.project = proj
|
||||
|
||||
main.set_application(app)
|
||||
main.set_projectview(projectview.ProjectView(proj))
|
||||
|
||||
app.set_projectview(main.projectview)
|
||||
app.show()
|
||||
gtk.main()
|
||||
|
37
bin/mat2ftsv
Executable file
@ -0,0 +1,37 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
from getopt import getopt
|
||||
|
||||
def show_help():
|
||||
print "mat2ftsv - Matlab matrix to laydi dataset converter."
|
||||
print
|
||||
print "Usage: mat2ftsv <mat-file> [<matfile> ...]"
|
||||
print
|
||||
print "Description: For each mat file given as input, a ftsv file"
|
||||
print " will be created with the same name, but suffixed with.ftsv"
|
||||
print " in addition to .mat or any other suffix already on the"
|
||||
print " file name."
|
||||
|
||||
options, params = getopt(sys.argv[1:], 'h', ['help'])
|
||||
|
||||
for opt, val in options:
|
||||
if opt in ['-h', '--help']:
|
||||
show_help()
|
||||
sys.exit(0)
|
||||
|
||||
if len(params) == 0:
|
||||
show_help()
|
||||
sys.exit(0)
|
||||
|
||||
from scipy import io
|
||||
from numpy import ndarray
|
||||
from laydi import dataset
|
||||
|
||||
fn_in = params[0]
|
||||
data = io.loadmat(fn_in)
|
||||
for key, value in data.items():
|
||||
if isinstance(value, ndarray):
|
||||
ds = dataset.Dataset(value, name=key)
|
||||
dataset.write_ftsv(fn_in + '.ftsv', ds)
|
||||
|
100
bin/txt2ftsv
Executable file
@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import numpy
|
||||
import os.path
|
||||
import sys
|
||||
|
||||
from laydi import dataset
|
||||
from getopt import getopt
|
||||
|
||||
dimension = 'dim_doe'
|
||||
output_fn = '-'
|
||||
ds_name = None
|
||||
category = False
|
||||
sparse = False
|
||||
|
||||
def print_help():
|
||||
print
|
||||
print 'options:'
|
||||
print ' -h, --help Show this help text.'
|
||||
print ' -c, --category Make category dataset'
|
||||
print ' -d, --dimension=DIM Make output in dimension DIM'
|
||||
print ' -n, --name=NAME Set name of output dataset'
|
||||
print ' -o, --output=FILE Save output dataset in FILE'
|
||||
print ' -s, --sparse Save output in sparse format'
|
||||
print
|
||||
|
||||
def parse_options():
|
||||
global ds_name
|
||||
global output_fn
|
||||
|
||||
short_opts = 'cd:hn:o:'
|
||||
long_opts = ['help', 'category', 'dimension', 'name', 'output', 'sparse']
|
||||
options, params = getopt(sys.argv[1:], short_opts, long_opts)
|
||||
|
||||
for opt, val in options:
|
||||
if opt in ['-h', '--help']:
|
||||
print_help()
|
||||
sys.exit(0)
|
||||
elif opt in ['-c', '--category']:
|
||||
global category
|
||||
category = True
|
||||
elif opt in ['-d', '--dimension']:
|
||||
global dimension
|
||||
dimension = val
|
||||
elif opt in ['-n', '--name']:
|
||||
ds_name = val
|
||||
elif opt in ['-o', '--output']:
|
||||
output_fn = val
|
||||
elif opt in ['-s', '--sparse']:
|
||||
global sparse
|
||||
sparse = True
|
||||
|
||||
if ds_name == None:
|
||||
if output_fn != None:
|
||||
ds_name = output_fn
|
||||
else:
|
||||
ds_name = 'txt2ftsv'
|
||||
|
||||
if len(params) == 0:
|
||||
print_help()
|
||||
sys.exit(1)
|
||||
|
||||
return params
|
||||
|
||||
def read_file(fd):
|
||||
lines = fd.readlines()
|
||||
return [l.strip() for l in lines if l.strip() != '']
|
||||
|
||||
def build_dataset(dimension, id_lists, filenames):
|
||||
all_ids = list(reduce(set.union, [set(x) for x in id_lists]))
|
||||
x = numpy.zeros((len(all_ids), len(id_lists)), 'b')
|
||||
for i, idl in enumerate(id_lists):
|
||||
for id in idl:
|
||||
x[all_ids.index(id),i] = True
|
||||
|
||||
if category:
|
||||
ds = dataset.CategoryDataset(x, [(dimension, all_ids), ('files', filenames)], name=ds_name)
|
||||
else:
|
||||
ds = dataset.Dataset(x, [(dimension, all_ids), ('files', filenames)], name=ds_name)
|
||||
return ds
|
||||
|
||||
if __name__ == '__main__':
|
||||
id_lists = []
|
||||
|
||||
filenames = parse_options()
|
||||
for fn in filenames:
|
||||
if os.path.exists(fn):
|
||||
fd = open(fn)
|
||||
id_lists.append(read_file(fd))
|
||||
fd.close()
|
||||
elif fn == '-':
|
||||
id_lists.append(read_file(sys.stdin))
|
||||
|
||||
ds = build_dataset(dimension, id_lists, filenames)
|
||||
|
||||
if output_fn == '-':
|
||||
dataset.write_ftsv(sys.stdout, ds, sp_format=sparse)
|
||||
else:
|
||||
dataset.write_ftsv(output_fn, ds, sp_format=sparse)
|
||||
|
38
configure
vendored
Executable file
@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
|
||||
|
||||
TEMP=`getopt -o "" --long prefix:,bindir:,datadir:,pydir:,root: \
|
||||
-n 'configure' -- "$@"`
|
||||
|
||||
eval set -- "$TEMP"
|
||||
|
||||
while true ; do
|
||||
case "$1" in
|
||||
--prefix) PREFIX=$2 ; shift 2 ;;
|
||||
--bindir) BINDIR=$2 ; shift 2 ;;
|
||||
--datadir) DATADIR=$2 ; shift 2 ;;
|
||||
--pydir) PYDIR=$2 ; shift 2 ;;
|
||||
--root) ROOT=$2 ; shift 2 ;;
|
||||
--) shift ; break ;;
|
||||
*) echo "Internal error!" ; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
#if [[ $PREFIX == "" ]] ; then PREFIX=/usr/local ; fi
|
||||
if [[ $BINDIR == "" ]] ; then BINDIR=$PREFIX/bin ; fi
|
||||
if [[ $DATADIR == "" ]] ; then DATADIR=$PREFIX/share/laydi ; fi
|
||||
if [[ $DOCDIR == "" ]] ; then DOCDIR=$PREFIX/share/doc/laydi; fi
|
||||
if [[ $PYDIR == "" ]] ; then PYDIR=$PREFIX/share/pyshared/laydi; fi
|
||||
|
||||
m4 -D M4_PREFIX=$ROOT/$PREFIX -D M4_BINDIR=$ROOT/$BINDIR \
|
||||
-D M4_DATADIR=$ROOT/$DATADIR -D M4_DOCDIR=$ROOT/$DOCDIR \
|
||||
-D M4_PYDIR=$ROOT/$PYDIR Makefile.m4 > Makefile
|
||||
|
||||
m4 -D M4_PREFIX=$ROOT/$PREFIX -D M4_BINDIR=$ROOT/$BINDIR \
|
||||
-D M4_DATADIR=$ROOT/$DATADIR -D M4_DOCDIR=$ROOT/$DOCDIR \
|
||||
-D M4_PYDIR=$ROOT/$PYDIR doc/Makefile.m4 > doc/Makefile
|
||||
|
||||
m4 -D M4_PREFIX=$PREFIX -D M4_BINDIR=$BINDIR \
|
||||
-D M4_DATADIR=$DATADIR -D M4_DOCDIR=$DOCDIR \
|
||||
-D M4_PYDIR=$PYDIR laydi/paths.py.m4 > laydi/paths.py
|
||||
|
6
debian/changelog
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
laydi (0.1.0) unstable; urgency=low
|
||||
|
||||
* Initial packaging
|
||||
|
||||
-- Einar Ryeng <einarr@pvv.org> Tue, 11 Dec 2007 16:12:59 +0100
|
||||
|
1
debian/compat
vendored
Normal file
@ -0,0 +1 @@
|
||||
5
|
22
debian/control
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
Source: laydi
|
||||
Section: science
|
||||
Priority: optional
|
||||
Maintainer: Einar Ryeng <einarr@pvv.org>
|
||||
Build-Depends: debhelper (>= 5.0.37.2), python-dateutil, python-all-dev (>= 2.3.5-7), python-central (>= 0.5), python-epydoc, python-setuptools (>=0.6b3-1)
|
||||
Standards-Version: 3.7.2
|
||||
|
||||
Package: laydi
|
||||
Architecture: any
|
||||
Depends: ${python:Depends}, python-numpy (>= 1:1.0.1), python-dev
|
||||
Provides: ${python:Provides}
|
||||
Description: Python library of bilinear modeling algorithms.
|
||||
Bilinear modeling algorithms.
|
||||
|
||||
Package: laydi-doc
|
||||
Architecture: all
|
||||
Enhances: laydi
|
||||
Description: Laydi API documentation.
|
||||
Bilinear modeling algorithms.
|
||||
.
|
||||
This package contains documentation for Laydi
|
||||
|
32
debian/copyright
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
This package was debianized by Einar Ryeng <einarr@pvv.org> on
|
||||
2007-09-11.
|
||||
|
||||
It was downloaded from https://dev.pvv.org/projects/laydi/downloads
|
||||
|
||||
Upstream Author: Arnar Flatberg <arnar.flatberg@gmail.com>
|
||||
|
||||
Copyright: Arnar Flatberg <arnar.flatberg@gmail.com>
|
||||
|
||||
License:
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted under the terms of the BSD License.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
|
||||
On Debian systems, the complete text of the BSD License can be
|
||||
found in `/usr/share/common-licenses/BSD'.
|
||||
|
||||
|
||||
The Debian packaging is (C) 2007, Einar Ryeng <einarr@pvv.org> and
|
||||
is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
|
||||
|
1
debian/docs
vendored
Normal file
@ -0,0 +1 @@
|
||||
README
|
74
debian/rules
vendored
Executable file
@ -0,0 +1,74 @@
|
||||
#!/usr/bin/make -f
|
||||
# -*- makefile -*-
|
||||
# Sample debian/rules that uses debhelper.
|
||||
# This file was originally written by Joey Hess and Craig Small.
|
||||
# As a special exception, when this file is copied by dh-make into a
|
||||
# dh-make output file, you may use that output file without restriction.
|
||||
# This special exception was added by Craig Small in version 0.37 of dh-make.
|
||||
|
||||
# Uncomment this to turn on verbose mode.
|
||||
#export DH_VERBOSE=1
|
||||
|
||||
CFLAGS = -Wall -g
|
||||
PYVERS=$(shell pyversions -vs)
|
||||
|
||||
configure: configure-stamp
|
||||
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
touch configure-stamp
|
||||
|
||||
build: $(PYVERS:%=build-python%)
|
||||
|
||||
build-python%:
|
||||
dh_testdir
|
||||
# python$* setup.py build
|
||||
touch $@
|
||||
|
||||
clean:
|
||||
# Add here commands to clean up after the build process.
|
||||
-rm -r build
|
||||
dh_clean
|
||||
|
||||
install: build $(PYVERS:%=install-python%)
|
||||
install-python%:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
dh_installdirs
|
||||
./configure --root ${CURDIR}/debian/laydi --prefix /usr --pydir /usr/share/pyshared/
|
||||
make install
|
||||
# python$* setup.py install --root=$(CURDIR)/debian/laydi --install-data=/usr/share/laydi
|
||||
|
||||
# Remove all *.pyc files, created in the postinst
|
||||
# find $(CURDIR)/debian/python-networkx -name "*.pyc" -exec rm {} ';'
|
||||
|
||||
|
||||
# Build architecture-independent files here.
|
||||
binary-indep: build install
|
||||
make -C doc install
|
||||
# mkdir -p $(CURDIR)/debian/laydi-doc/usr/share/doc/laydi-doc/html
|
||||
# epydoc --html -o $(CURDIR)/debian/laydi-doc/usr/share/doc/laydi-doc/html laydi
|
||||
|
||||
# Build architecture-dependent files here.
|
||||
binary-arch: build install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installchangelogs
|
||||
dh_installdocs
|
||||
dh_installexamples
|
||||
# dh_install
|
||||
dh_pysupport
|
||||
dh_installman
|
||||
dh_link
|
||||
dh_strip
|
||||
dh_compress
|
||||
# dh_makeshlibs
|
||||
dh_installdeb
|
||||
dh_shlibdeps
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
.PHONY: build clean binary-indep binary-arch binary install configure
|
20
doc/Makefile.m4
Normal file
@ -0,0 +1,20 @@
|
||||
|
||||
DOC_DIR=M4_DOCDIR
|
||||
|
||||
all: html
|
||||
|
||||
html:
|
||||
@echo ----------------
|
||||
@echo Generating epydoc html code documentation.
|
||||
@echo See epydoc-html.log for epydoc log.
|
||||
@echo ----------------
|
||||
epydoc --html --inheritance listed -o html/ ../laydi 2> epydoc-html.log
|
||||
|
||||
install: html
|
||||
find html/ -type f -exec install -m 644 -D '{}' ${DOC_DIR}/'{}' \;
|
||||
|
||||
clean:
|
||||
-rm -rf html
|
||||
-rm epydoc-html.log
|
||||
|
||||
|
1
doc/examples/gastrin-ts/VERSION
Normal file
@ -0,0 +1 @@
|
||||
Laydi project version 1
|
27
doc/examples/gastrin-ts/data/x.ftsv
Normal file
215
doc/gui-overview.svg
Normal file
@ -0,0 +1,215 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:ns="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="744.09448819"
|
||||
height="1052.3622047"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.45.1"
|
||||
sodipodi:docname="gui-overview.svg"
|
||||
inkscape:output_extension="org.inkscape.output.svg.inkscape"
|
||||
sodipodi:docbase="/home/einarr/src/laydi/doc"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/doc/gui-overview.png"
|
||||
inkscape:export-xdpi="115"
|
||||
inkscape:export-ydpi="115">
|
||||
<defs
|
||||
id="defs4">
|
||||
<inkscape:perspective
|
||||
sodipodi:type="inkscape:persp3d"
|
||||
inkscape:vp_x="0 : 526.18109 : 1"
|
||||
inkscape:vp_y="0 : 1000 : 0"
|
||||
inkscape:vp_z="744.09448 : 526.18109 : 1"
|
||||
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
|
||||
id="perspective10" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
x="-0.010937911"
|
||||
width="1.0218758"
|
||||
y="-0.25053026"
|
||||
height="1.5010605"
|
||||
id="filter3210">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="2.1921397"
|
||||
id="feGaussianBlur3212" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3266">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="2.1921397"
|
||||
id="feGaussianBlur3268" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3306">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="2.4541485"
|
||||
id="feGaussianBlur3308" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3200">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="2.6375546"
|
||||
id="feGaussianBlur3202" />
|
||||
</filter>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter3240">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="2.5502183"
|
||||
id="feGaussianBlur3242" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
gridtolerance="10000"
|
||||
guidetolerance="10"
|
||||
objecttolerance="10"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="472.59664"
|
||||
inkscape:cy="577.79368"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="693"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="25">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid3171" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<ns:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</ns:Work>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:#e3e6ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2383"
|
||||
width="500"
|
||||
height="350"
|
||||
x="140"
|
||||
y="302.36218" />
|
||||
<rect
|
||||
style="fill:#eaf0ed;stroke:#000000;stroke-opacity:1;fill-opacity:1;filter:url(#filter3306)"
|
||||
id="rect3163"
|
||||
width="480"
|
||||
height="80"
|
||||
x="150"
|
||||
y="562.36218" />
|
||||
<rect
|
||||
style="fill:#eaf0ed;stroke:#000000;stroke-opacity:1;fill-opacity:1;filter:url(#filter3200)"
|
||||
id="rect3165"
|
||||
width="90"
|
||||
height="210"
|
||||
x="150"
|
||||
y="342.36218" />
|
||||
<rect
|
||||
style="fill:#eaf0ed;stroke:#000000;stroke-opacity:1;fill-opacity:1;filter:url(#filter3240)"
|
||||
id="rect3167"
|
||||
width="80"
|
||||
height="210"
|
||||
x="550"
|
||||
y="342.36218" />
|
||||
<rect
|
||||
style="fill:#eaf0ed;stroke:#000000;stroke-opacity:1;fill-opacity:1;filter:url(#filter3266)"
|
||||
id="rect3169"
|
||||
width="290"
|
||||
height="210"
|
||||
x="250"
|
||||
y="342.36218" />
|
||||
<rect
|
||||
style="fill:#eaf0ed;stroke:#000000;stroke-opacity:1;fill-opacity:1;filter:url(#filter3210)"
|
||||
id="rect3173"
|
||||
width="480"
|
||||
height="20"
|
||||
x="150"
|
||||
y="312.36218" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="336.85547"
|
||||
y="326.83582"
|
||||
id="text3175"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3177"
|
||||
x="336.85547"
|
||||
y="326.83582">Menus & Toolbars</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="562.50488"
|
||||
y="362.36218"
|
||||
id="text3179"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3181"
|
||||
x="562.50488"
|
||||
y="362.36218">Workflow</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="165.0498"
|
||||
y="362.36218"
|
||||
id="text3187"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3189"
|
||||
x="165.0498"
|
||||
y="362.36218">Navigator</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="380.26953"
|
||||
y="442.36218"
|
||||
id="text3191"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3193"
|
||||
x="380.26953"
|
||||
y="442.36218">Plots</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
|
||||
x="303.29297"
|
||||
y="602.36218"
|
||||
id="text3195"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3197"
|
||||
x="303.29297"
|
||||
y="602.36218">Log, Selections & Extensions</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.0 KiB |
68
fluents
@ -1,68 +0,0 @@
|
||||
#!/usr/bin/python2.4
|
||||
|
||||
from getopt import getopt
|
||||
import sys
|
||||
from system import fluents, project, workflow
|
||||
import workflows
|
||||
|
||||
PROGRAM_NAME = 'fluents'
|
||||
VERSION = '0.1.0'
|
||||
|
||||
parameters = {'workflow': workflow.EmptyWorkflow}
|
||||
|
||||
def show_help():
|
||||
print 'fluent %s' % VERSION
|
||||
print 'This software is released under the GNU General Public Licence'
|
||||
print
|
||||
print 'Usage: fluent [options]'
|
||||
print
|
||||
print 'Description:'
|
||||
print ' Fluent is a lightweight data analysis application for bilinear models.'
|
||||
print
|
||||
print 'Options:'
|
||||
print ' -h --help Show this help text'
|
||||
print ' -l --list-workflows Lists available workflows'
|
||||
print ' -w --workflow=<wf> Generates a new project based on workflow wf.'
|
||||
print
|
||||
|
||||
def list_workflows():
|
||||
print 'fluent %s' % VERSION
|
||||
print
|
||||
print 'Workflows:'
|
||||
|
||||
wfs = workflow.workflow_list()
|
||||
for wf in wfs:
|
||||
print ' %s (%s)' % (wf.ident, wf.name)
|
||||
print
|
||||
|
||||
def parse_options():
|
||||
short_opts = 'hlw:'
|
||||
long_opts = ['help', 'list-workflows', 'workflow=']
|
||||
|
||||
options, params = getopt(sys.argv[1:], short_opts, long_opts)
|
||||
|
||||
for opt, val in options:
|
||||
if opt in ['-h', '--help']:
|
||||
show_help()
|
||||
sys.exit(0)
|
||||
elif opt in ['-l', '--list-workflows']:
|
||||
list_workflows()
|
||||
sys.exit(0)
|
||||
elif opt in ['-w', '--workflow']:
|
||||
wfs = workflow.workflow_list()
|
||||
for wf in wfs:
|
||||
if wf.ident == val:
|
||||
parameters['workflow'] = wf
|
||||
parameters['workflow']
|
||||
|
||||
if __name__ == '__main__':
|
||||
parse_options()
|
||||
|
||||
import gtk
|
||||
import gnome
|
||||
|
||||
gnome.program_init(PROGRAM_NAME, VERSION)
|
||||
app = fluents.FluentApp(parameters['workflow'])
|
||||
app.set_project(project.Project())
|
||||
app.show()
|
||||
gtk.main()
|
Before Width: | Height: | Size: 666 B After Width: | Height: | Size: 621 B |
@ -11,35 +11,16 @@
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16px"
|
||||
height="16px"
|
||||
id="svg1617"
|
||||
id="svg8468"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43"
|
||||
sodipodi:docbase="/home/flatberg/fluent/icons"
|
||||
sodipodi:docbase="/home/flatberg/laydi/icons"
|
||||
sodipodi:docname="category_dataset.svg"
|
||||
inkscape:export-filename="/home/flatberg/fluent/icons/dataset.png"
|
||||
inkscape:export-filename="/home/flatberg/laydi/icons/category_dataset.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs1619">
|
||||
<linearGradient
|
||||
id="linearGradient9542">
|
||||
<stop
|
||||
style="stop-color:#978e8e;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9544" />
|
||||
<stop
|
||||
id="stop13091"
|
||||
offset="0.2857143"
|
||||
style="stop-color:#837d9e;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#b075a6;stop-opacity:0.24705882;"
|
||||
offset="1"
|
||||
id="stop13093" />
|
||||
<stop
|
||||
style="stop-color:#6f6daf;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop9546" />
|
||||
</linearGradient>
|
||||
id="defs8470">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8653">
|
||||
@ -53,40 +34,52 @@
|
||||
id="stop8657" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2500">
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient1362"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.048746,-7.497414e-10,1.276627e-10,0.992725,0.504498,4.555838)"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076" />
|
||||
<linearGradient
|
||||
id="linearGradient9542">
|
||||
<stop
|
||||
style="stop-color:#a8a8a8;stop-opacity:1;"
|
||||
style="stop-color:#a0a0a0;stop-opacity:0.85123968;"
|
||||
offset="0"
|
||||
id="stop2502" />
|
||||
id="stop9544" />
|
||||
<stop
|
||||
id="stop3387"
|
||||
offset="0.75510204"
|
||||
style="stop-color:#e5e5e5;stop-opacity:0.96907216;" />
|
||||
id="stop7591"
|
||||
offset="0.14835165"
|
||||
style="stop-color:#918e9f;stop-opacity:0.6745098;" />
|
||||
<stop
|
||||
style="stop-color:#ebebeb;stop-opacity:0;"
|
||||
id="stop13091"
|
||||
offset="0.2857143"
|
||||
style="stop-color:#837d9e;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#7975a6;stop-opacity:0.24705882;"
|
||||
offset="0.56043959"
|
||||
id="stop13093" />
|
||||
<stop
|
||||
id="stop7593"
|
||||
offset="1"
|
||||
id="stop2504" />
|
||||
style="stop-color:#7471aa;stop-opacity:0.12156863;" />
|
||||
<stop
|
||||
style="stop-color:#6f6daf;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop9546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient8659"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091642e-10,9.574695e-11,0.806589,-3.626117,6.632697)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient9542"
|
||||
id="linearGradient9548"
|
||||
id="linearGradient1360"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.048746,-7.497414e-10,1.276627e-10,0.992725,0.504498,4.555838)"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091642e-10,9.574695e-11,0.806589,-3.626117,6.632697)" />
|
||||
y2="3.2324076" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
@ -97,17 +90,17 @@
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="22.197802"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8"
|
||||
inkscape:cy="7.1848042"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="749"
|
||||
inkscape:window-height="540"
|
||||
inkscape:window-x="136"
|
||||
inkscape:window-y="107" />
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0" />
|
||||
<metadata
|
||||
id="metadata1622">
|
||||
id="metadata8473">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
@ -122,105 +115,90 @@
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient9548);fill-opacity:1;stroke:url(#linearGradient8659);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1625"
|
||||
width="11.395269"
|
||||
height="12.492741"
|
||||
x="-15.41898"
|
||||
y="2.9935551"
|
||||
transform="matrix(-1.602589e-3,-0.999999,0.999999,-1.530673e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.50445545"
|
||||
height="11.522277"
|
||||
x="15.495544"
|
||||
y="4.4777226" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect9550"
|
||||
width="0.59595656"
|
||||
height="11.990877"
|
||||
x="-16.000607"
|
||||
y="3.4989688"
|
||||
transform="matrix(-3.561914e-4,-1,1,-1.724514e-4,0,0)" />
|
||||
width="0.82326102"
|
||||
height="14.495289"
|
||||
x="-16.045271"
|
||||
y="1.0721804"
|
||||
transform="matrix(-3.116999e-4,-1,1,-1.970668e-4,0,0)" />
|
||||
<rect
|
||||
style="fill:#e7577b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;opacity:0.49746193"
|
||||
style="opacity:0.95890407;fill:url(#linearGradient1360);fill-opacity:1;stroke:url(#linearGradient1362);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1625"
|
||||
width="15.193709"
|
||||
height="15.375698"
|
||||
x="-15.219335"
|
||||
y="0.076888956"
|
||||
transform="matrix(-1.479312e-3,-0.999999,0.999999,-1.658227e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.62086815"
|
||||
height="15.000007"
|
||||
x="15.456053"
|
||||
y="1" />
|
||||
<rect
|
||||
style="opacity:1;fill:#fa96c7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect11308"
|
||||
width="3"
|
||||
height="3"
|
||||
x="4"
|
||||
y="5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="1.307693"
|
||||
y="1.333333" />
|
||||
<rect
|
||||
style="fill:#e7577b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#e68ab8;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect12183"
|
||||
width="3"
|
||||
height="3"
|
||||
x="4"
|
||||
y="8.5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="1.307693"
|
||||
y="6.0000024" />
|
||||
<rect
|
||||
style="fill:#e7577b;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#cc7aa3;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect12185"
|
||||
width="3"
|
||||
height="3"
|
||||
x="4"
|
||||
y="12" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="1.307693"
|
||||
y="10.666672" />
|
||||
<rect
|
||||
style="opacity:0.49746195;fill:#d9728e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#fa96d5;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13079"
|
||||
width="3"
|
||||
height="3"
|
||||
x="7.5945544"
|
||||
y="5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="5.8669081"
|
||||
y="1.333333" />
|
||||
<rect
|
||||
style="fill:#d9728e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#e68ac4;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13081"
|
||||
width="3"
|
||||
height="3"
|
||||
x="7.5945544"
|
||||
y="8.5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="5.8669081"
|
||||
y="6.0000024" />
|
||||
<rect
|
||||
style="fill:#d9728e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#cc7aae;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13083"
|
||||
width="3"
|
||||
height="3"
|
||||
x="7.5945544"
|
||||
y="12.000001" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="5.8669081"
|
||||
y="10.666674" />
|
||||
<rect
|
||||
style="opacity:0.49746195;fill:#f4909c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#fa96e1;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13085"
|
||||
width="3"
|
||||
height="3"
|
||||
x="11.564356"
|
||||
y="4.999999" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="10.617668"
|
||||
y="1.3333318" />
|
||||
<rect
|
||||
style="fill:#f4909c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#e68acf;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13087"
|
||||
width="3"
|
||||
height="3"
|
||||
x="11.564356"
|
||||
y="8.499999" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="10.617668"
|
||||
y="6.0000014" />
|
||||
<rect
|
||||
style="fill:#f4909c;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#cc7ab8;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13089"
|
||||
width="3"
|
||||
height="3"
|
||||
x="11.564356"
|
||||
y="12" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13095"
|
||||
width="1"
|
||||
height="1.9999686"
|
||||
x="-10.45223"
|
||||
y="0.99966687"
|
||||
transform="matrix(-3.540536e-5,-1,0.999998,-1.734922e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13097"
|
||||
width="1"
|
||||
height="16"
|
||||
x="0"
|
||||
y="0" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="10.617668"
|
||||
y="10.666672" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.3 KiB |
BIN
icons/cursor.png
Normal file
After Width: | Height: | Size: 354 B |
Before Width: | Height: | Size: 671 B After Width: | Height: | Size: 642 B |
@ -14,24 +14,35 @@
|
||||
id="svg1617"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43"
|
||||
sodipodi:docbase="/home/flatberg/fluent/icons"
|
||||
sodipodi:docname="dataset.svg">
|
||||
sodipodi:docbase="/home/flatberg/laydi/icons"
|
||||
sodipodi:docname="dataset.svg"
|
||||
inkscape:export-filename="/home/flatberg/laydi/icons/dataset.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs1619">
|
||||
<linearGradient
|
||||
id="linearGradient9542">
|
||||
<stop
|
||||
style="stop-color:#978e8e;stop-opacity:1;"
|
||||
style="stop-color:#a0a0a0;stop-opacity:0.85123968;"
|
||||
offset="0"
|
||||
id="stop9544" />
|
||||
<stop
|
||||
id="stop7591"
|
||||
offset="0.14835165"
|
||||
style="stop-color:#918e9f;stop-opacity:0.6745098;" />
|
||||
<stop
|
||||
id="stop13091"
|
||||
offset="0.2857143"
|
||||
style="stop-color:#837d9e;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#7975a6;stop-opacity:0.24705882;"
|
||||
offset="1"
|
||||
offset="0.56043959"
|
||||
id="stop13093" />
|
||||
<stop
|
||||
id="stop7593"
|
||||
offset="1"
|
||||
style="stop-color:#7471aa;stop-opacity:0.12156863;" />
|
||||
<stop
|
||||
style="stop-color:#6f6daf;stop-opacity:0;"
|
||||
offset="1"
|
||||
@ -52,13 +63,17 @@
|
||||
<linearGradient
|
||||
id="linearGradient2500">
|
||||
<stop
|
||||
style="stop-color:#a8a8a8;stop-opacity:1;"
|
||||
style="stop-color:#cacaca;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2502" />
|
||||
<stop
|
||||
id="stop3387"
|
||||
offset="0.75510204"
|
||||
style="stop-color:#e5e5e5;stop-opacity:0.96907216;" />
|
||||
<stop
|
||||
style="stop-color:#e8e8e8;stop-opacity:0.48627451;"
|
||||
offset="0.75510204"
|
||||
id="stop7589" />
|
||||
<stop
|
||||
style="stop-color:#ebebeb;stop-opacity:0;"
|
||||
offset="1"
|
||||
@ -66,24 +81,24 @@
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient8659"
|
||||
xlink:href="#linearGradient9542"
|
||||
id="linearGradient1360"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.048746,-7.497408e-10,1.276627e-10,0.992725,0.504626,4.478908)"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091642e-10,9.574695e-11,0.806589,-3.626117,6.632697)" />
|
||||
y2="3.2324076" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient9542"
|
||||
id="linearGradient9548"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient1362"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.048746,-7.497408e-10,1.276627e-10,0.992725,0.504626,4.478908)"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091642e-10,9.574695e-11,0.806589,-3.626117,6.632697)" />
|
||||
y2="3.2324076" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
@ -101,8 +116,8 @@
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="749"
|
||||
inkscape:window-height="540"
|
||||
inkscape:window-x="136"
|
||||
inkscape:window-y="107" />
|
||||
inkscape:window-x="236"
|
||||
inkscape:window-y="35" />
|
||||
<metadata
|
||||
id="metadata1622">
|
||||
<rdf:RDF>
|
||||
@ -119,105 +134,90 @@
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient9548);fill-opacity:1;stroke:url(#linearGradient8659);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1625"
|
||||
width="11.395269"
|
||||
height="12.492741"
|
||||
x="-15.41898"
|
||||
y="2.9935551"
|
||||
transform="matrix(-1.602589e-3,-0.999999,0.999999,-1.530673e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.50445545"
|
||||
height="11.522277"
|
||||
x="15.495544"
|
||||
y="4.4777226" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect9550"
|
||||
width="0.59595656"
|
||||
height="11.990877"
|
||||
x="-16.000607"
|
||||
y="3.4989688"
|
||||
transform="matrix(-3.561914e-4,-1,1,-1.724514e-4,0,0)" />
|
||||
width="0.8232609"
|
||||
height="14.495289"
|
||||
x="-16.045254"
|
||||
y="0.99525535"
|
||||
transform="matrix(-3.116999e-4,-1,1,-1.970668e-4,0,0)" />
|
||||
<rect
|
||||
style="fill:#5797e7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;opacity:0.49746193"
|
||||
style="fill:url(#linearGradient1360);fill-opacity:1.0;stroke:url(#linearGradient1362);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;opacity:0.95890411"
|
||||
id="rect1625"
|
||||
width="15.193706"
|
||||
height="15.375687"
|
||||
x="-15.219205"
|
||||
y="-3.7501515e-05"
|
||||
transform="matrix(-1.479312e-3,-0.999999,0.999999,-1.658229e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.62086815"
|
||||
height="15.000007"
|
||||
x="15.379128"
|
||||
y="1" />
|
||||
<rect
|
||||
style="opacity:1;fill:#96c8fa;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect11308"
|
||||
width="3"
|
||||
height="3"
|
||||
x="4"
|
||||
y="5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="1.230768"
|
||||
y="1.333333" />
|
||||
<rect
|
||||
style="fill:#5797e7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#8ab8e6;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect12183"
|
||||
width="3"
|
||||
height="3"
|
||||
x="4"
|
||||
y="8.5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="1.230768"
|
||||
y="6.0000019" />
|
||||
<rect
|
||||
style="fill:#5797e7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#7ba4cc;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect12185"
|
||||
width="3"
|
||||
height="3"
|
||||
x="4"
|
||||
y="12" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="1.230768"
|
||||
y="10.666671" />
|
||||
<rect
|
||||
style="opacity:0.49746195;fill:#57ade7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#96d5fa;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13079"
|
||||
width="3"
|
||||
height="3"
|
||||
x="7.5945544"
|
||||
y="5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="5.7899828"
|
||||
y="1.333333" />
|
||||
<rect
|
||||
style="fill:#57ade7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#8ac4e6;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13081"
|
||||
width="3"
|
||||
height="3"
|
||||
x="7.5945544"
|
||||
y="8.5" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="5.7899828"
|
||||
y="6.0000019" />
|
||||
<rect
|
||||
style="fill:#57ade7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#7baecc;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13083"
|
||||
width="3"
|
||||
height="3"
|
||||
x="7.5945544"
|
||||
y="12.000001" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="5.7899828"
|
||||
y="10.666673" />
|
||||
<rect
|
||||
style="opacity:0.49746195;fill:#57c2e7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#96e1fa;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13085"
|
||||
width="3"
|
||||
height="3"
|
||||
x="11.564356"
|
||||
y="4.999999" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="10.540743"
|
||||
y="1.3333317" />
|
||||
<rect
|
||||
style="fill:#57c2e7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#8acfe6;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13087"
|
||||
width="3"
|
||||
height="3"
|
||||
x="11.564356"
|
||||
y="8.499999" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="10.540743"
|
||||
y="6.000001" />
|
||||
<rect
|
||||
style="fill:#57c2e7;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="fill:#7bb8cc;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13089"
|
||||
width="3"
|
||||
height="3"
|
||||
x="11.564356"
|
||||
y="12" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13095"
|
||||
width="1"
|
||||
height="1.9999686"
|
||||
x="-10.45223"
|
||||
y="0.99966687"
|
||||
transform="matrix(-3.540536e-5,-1,0.999998,-1.734922e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13097"
|
||||
width="1"
|
||||
height="16"
|
||||
x="0"
|
||||
y="0" />
|
||||
width="3.692307"
|
||||
height="4.0000019"
|
||||
x="10.540743"
|
||||
y="10.666671" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
BIN
icons/filesave.png
Normal file
After Width: | Height: | Size: 873 B |
BIN
icons/freeze.png
Normal file
After Width: | Height: | Size: 724 B |
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 835 B |
@ -11,61 +11,49 @@
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16px"
|
||||
height="16px"
|
||||
id="svg1617"
|
||||
id="svg8468"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43"
|
||||
sodipodi:docbase="/home/flatberg/fluent/icons"
|
||||
sodipodi:docbase="/home/flatberg/laydi/icons"
|
||||
sodipodi:docname="graph_dataset.svg"
|
||||
inkscape:export-filename="/home/flatberg/fluent/icons/graph_dataset.png"
|
||||
inkscape:export-filename="/home/flatberg/laydi/icons/graph_dataset.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs1619">
|
||||
id="defs8470">
|
||||
<marker
|
||||
inkscape:stockid="Dot_s"
|
||||
inkscape:stockid="TriangleOutS"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Dot_s"
|
||||
id="TriangleOutS"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path23705"
|
||||
d="M -2.5,-1.0 C -2.5,1.7600000 -4.7400000,4.0 -7.5,4.0 C -10.260000,4.0 -12.5,1.7600000 -12.5,-1.0 C -12.5,-3.7600000 -10.260000,-6.0 -7.5,-6.0 C -4.7400000,-6.0 -2.5,-3.7600000 -2.5,-1.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none"
|
||||
transform="scale(0.2) translate(7.125493, 1)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path23776"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
id="path10489"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
|
||||
transform="scale(0.8)" />
|
||||
transform="scale(0.2)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="DistanceIn"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="DistanceIn"
|
||||
style="overflow:visible">
|
||||
<g
|
||||
id="g10541"
|
||||
transform="scale(0.6,0.6) translate(8,0)">
|
||||
<path
|
||||
id="path10543"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" />
|
||||
<path
|
||||
id="path10545"
|
||||
d="M -14.759949,-7 L -14.759949,65"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2pt;marker-start:none" />
|
||||
</g>
|
||||
</marker>
|
||||
<linearGradient
|
||||
id="linearGradient9542">
|
||||
<stop
|
||||
style="stop-color:#978e8e;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9544" />
|
||||
<stop
|
||||
id="stop13091"
|
||||
offset="0.2857143"
|
||||
style="stop-color:#837d9e;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#b075a6;stop-opacity:0.24705882;"
|
||||
offset="1"
|
||||
id="stop13093" />
|
||||
<stop
|
||||
style="stop-color:#6f6daf;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop9546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient8653">
|
||||
@ -79,40 +67,52 @@
|
||||
id="stop8657" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2500">
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient1362"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.048746,-7.497414e-10,1.276627e-10,0.992725,0.504498,4.555838)"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076" />
|
||||
<linearGradient
|
||||
id="linearGradient9542">
|
||||
<stop
|
||||
style="stop-color:#a8a8a8;stop-opacity:1;"
|
||||
style="stop-color:#a0a0a0;stop-opacity:0.85123968;"
|
||||
offset="0"
|
||||
id="stop2502" />
|
||||
id="stop9544" />
|
||||
<stop
|
||||
id="stop3387"
|
||||
offset="0.75510204"
|
||||
style="stop-color:#e5e5e5;stop-opacity:0.96907216;" />
|
||||
id="stop7591"
|
||||
offset="0.14835165"
|
||||
style="stop-color:#918e9f;stop-opacity:0.6745098;" />
|
||||
<stop
|
||||
style="stop-color:#ebebeb;stop-opacity:0;"
|
||||
id="stop13091"
|
||||
offset="0.2857143"
|
||||
style="stop-color:#837d9e;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#7975a6;stop-opacity:0.24705882;"
|
||||
offset="0.56043959"
|
||||
id="stop13093" />
|
||||
<stop
|
||||
id="stop7593"
|
||||
offset="1"
|
||||
id="stop2504" />
|
||||
style="stop-color:#7471aa;stop-opacity:0.12156863;" />
|
||||
<stop
|
||||
style="stop-color:#6f6daf;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop9546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient8659"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091644e-10,9.574701e-11,0.806589,-3.750022,6.643764)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient9542"
|
||||
id="linearGradient9548"
|
||||
id="linearGradient1360"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.048746,-7.497414e-10,1.276627e-10,0.992725,0.504498,4.555838)"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091644e-10,9.574701e-11,0.806589,-3.750022,6.643764)" />
|
||||
y2="3.2324076" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
@ -121,19 +121,19 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="44.395604"
|
||||
inkscape:cx="7.3431998"
|
||||
inkscape:cy="7.7311881"
|
||||
inkscape:zoom="31.392433"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8.3153731"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="955"
|
||||
inkscape:window-width="992"
|
||||
inkscape:window-height="672"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0" />
|
||||
<metadata
|
||||
id="metadata1622">
|
||||
id="metadata8473">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
@ -148,127 +148,112 @@
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient9548);fill-opacity:1;stroke:url(#linearGradient8659);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1625"
|
||||
width="11.395275"
|
||||
height="12.492744"
|
||||
x="-15.542892"
|
||||
y="3.0046201"
|
||||
transform="matrix(-1.602589e-3,-0.999999,0.999999,-1.530673e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.50445545"
|
||||
height="11.522277"
|
||||
x="15.495544"
|
||||
y="4.4777226" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect9550"
|
||||
width="0.59595656"
|
||||
height="11.990877"
|
||||
x="-16.000607"
|
||||
y="3.4989688"
|
||||
transform="matrix(-3.561914e-4,-1,1,-1.724514e-4,0,0)" />
|
||||
width="0.82326102"
|
||||
height="14.495289"
|
||||
x="-16.045271"
|
||||
y="1.0721804"
|
||||
transform="matrix(-3.116999e-4,-1,1,-1.970668e-4,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13095"
|
||||
width="1"
|
||||
height="1.9999686"
|
||||
x="-10.45223"
|
||||
y="0.99966687"
|
||||
transform="matrix(-3.540536e-5,-1,0.999998,-1.734922e-3,0,0)" />
|
||||
style="opacity:0.95890407;fill:url(#linearGradient1360);fill-opacity:1;stroke:url(#linearGradient1362);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1625"
|
||||
width="15.193709"
|
||||
height="15.375698"
|
||||
x="-15.219335"
|
||||
y="0.076888956"
|
||||
transform="matrix(-1.479312e-3,-0.999999,0.999999,-1.658227e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13097"
|
||||
width="1"
|
||||
height="16"
|
||||
x="0"
|
||||
y="0" />
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.62086815"
|
||||
height="15.000007"
|
||||
x="15.456053"
|
||||
y="1" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.89847711;fill:#eb9213;fill-opacity:1;stroke:#000000;stroke-width:0.11331103;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#fce100;fill-opacity:1;stroke:#000000;stroke-width:0.11344237;stroke-linecap:square;stroke-linejoin:round;marker-start:none;stroke-miterlimit:0.60000002;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path17466"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1507906,5.6771397"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1676788,5.8311826"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.1067046"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.936447,0,0,0.831711,0.751641,1.359412)" />
|
||||
sodipodi:end="6.2052379"
|
||||
transform="matrix(1.253157,0,0,1.113406,-3.467103,-3.568938)"
|
||||
sodipodi:open="true" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1;fill:#eb9213;fill-opacity:1;stroke:#000000;stroke-width:0.11331103;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stroke-linecap:round;marker-start:none"
|
||||
id="path18341"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1507906,5.6771397"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.1067046"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.936447,0,0,0.831711,5.220453,1.73664)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.89847711;fill:#eb9213;fill-opacity:1;stroke:#000000;stroke-width:0.11331103;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path18343"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1507906,5.6771397"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.1067046"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.936447,0,0,0.831711,1.369384,5.359412)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.89847711;fill:#eb9213;fill-opacity:1;stroke:#000000;stroke-width:0.11331103;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path18345"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1507906,5.6771397"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.1067046"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.936447,0,0,0.831711,8.751641,8.73664)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:0.89847711;fill:#eb9213;fill-opacity:1;stroke:#000000;stroke-width:0.11331103;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path18347"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1507906,5.6771397"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.1067046"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(0.936447,0,0,0.831711,5.751641,5.73664)" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 6.5302362,6.411702 C 8.4733797,6.5391212 8.4733797,6.5391212 8.4733797,6.5391212"
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.26768968;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 4.2658336,3.1945274 C 6.8661552,3.3651026 6.8661552,3.3651026 6.8661552,3.3651026"
|
||||
id="path19226" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 7.1195502,10.520973 C 9.0626937,10.648392 9.0626937,10.648392 9.0626937,10.648392"
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.26768968;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 5.0544557,8.6955802 C 7.6547772,8.8661552 7.6547772,8.8661552 7.6547772,8.8661552"
|
||||
id="path20976" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.17171589;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 11.154855,11.623699 C 12.364938,12.802918 12.364938,12.802918 12.364938,12.802918"
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.22983284;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 10.454515,10.171792 C 12.073852,11.750404 12.073852,11.750404 12.073852,11.750404"
|
||||
id="path20978" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.15874009;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 9.9153246,7.9660097 C 10.052976,9.4051342 10.052976,9.4051342 10.052976,9.4051342"
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.21246541;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 8.7957709,5.2752684 C 8.9799765,7.2018145 8.9799765,7.2018145 8.9799765,7.2018145"
|
||||
id="path20980" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.15874009;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 5.3866948,7.6172167 C 5.6087428,9.0457551 5.6087428,9.0457551 5.6087428,9.0457551"
|
||||
style="opacity:1;color:#000000;fill:#3a383b;fill-opacity:0.82485878;fill-rule:evenodd;stroke:#000000;stroke-width:0.21246541;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 2.7355425,4.8083416 C 3.0326879,6.7207162 3.0326879,6.7207162 3.0326879,6.7207162"
|
||||
id="path20982" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1;fill:#fce100;fill-opacity:1;stroke:#000000;stroke-width:0.11344237;stroke-linecap:round;stroke-linejoin:round;marker-start:none;stroke-miterlimit:0.60000002;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path11491"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1712767,5.9108317"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.2558287"
|
||||
transform="matrix(1.253157,0,0,1.113406,2.563866,-3.062839)"
|
||||
sodipodi:open="true" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1;fill:#fce100;fill-opacity:1;stroke:#000000;stroke-width:0.11344237;stroke-linecap:square;stroke-linejoin:round;marker-start:none;stroke-miterlimit:0.60000002;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path11493"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1687496,5.8483902"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.2161801"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(1.253157,0,0,1.113406,-2.616827,1.847557)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1;fill:#fce100;fill-opacity:1;stroke:#000000;stroke-width:0.11344237;stroke-linecap:square;stroke-linejoin:round;marker-start:none;stroke-miterlimit:0.60000002;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path11495"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1677975,5.8329691"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.2063743"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(1.253157,0,0,1.113406,3.14951,2.388151)" />
|
||||
<path
|
||||
sodipodi:type="arc"
|
||||
style="opacity:1;fill:#fce100;fill-opacity:1;stroke:#000000;stroke-width:0.11344237;stroke-linecap:square;stroke-linejoin:round;marker-start:none;stroke-miterlimit:0.60000002;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="path11497"
|
||||
sodipodi:cx="4.8202972"
|
||||
sodipodi:cy="5.9539604"
|
||||
sodipodi:rx="1.3514851"
|
||||
sodipodi:ry="1.5767326"
|
||||
d="M 6.1717824,5.9539604 A 1.3514851,1.5767326 0 1 1 6.1678722,5.8341073"
|
||||
sodipodi:start="0"
|
||||
sodipodi:end="6.2070983"
|
||||
sodipodi:open="true"
|
||||
transform="matrix(1.253157,0,0,1.113406,7.198788,6.458182)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
BIN
icons/home.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
icons/lasso.png
Normal file
After Width: | Height: | Size: 959 B |
62
icons/lasso.svg
Normal file
@ -0,0 +1,62 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="48px"
|
||||
height="48px"
|
||||
id="svg1337"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43"
|
||||
sodipodi:docbase="/home/flatberg/laydi/icons"
|
||||
sodipodi:docname="lasso.svg"
|
||||
inkscape:export-filename="/home/flatberg/laydi/icons/lasso.png"
|
||||
inkscape:export-xdpi="37.5"
|
||||
inkscape:export-ydpi="37.5">
|
||||
<defs
|
||||
id="defs1339" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="7"
|
||||
inkscape:cx="24"
|
||||
inkscape:cy="24"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="749"
|
||||
inkscape:window-height="540"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="155" />
|
||||
<metadata
|
||||
id="metadata1342">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<path
|
||||
style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:4,4;stroke-dashoffset:8.39999991;stroke-opacity:1"
|
||||
d="M 21.5,5.5 C 15.071429,6.5 10.5,10.5 10.5,10.5 C 10.5,10.5 10.642857,9.2142857 7.6428571,15.214286 C 4.6428571,21.214286 16.071429,20.214285 17.214286,26.785714 C 18.357143,33.357143 25.5,40.5 30.5,40.5 C 35.5,40.5 38.5,35.5 38.5,32.5 C 38.5,29.5 38.5,29.5 38.5,29.5 C 38.5,29.5 31.850409,25.775944 34.642857,21.071429 C 37.808688,15.737865 37.5,5.7857143 21.5,5.5 z "
|
||||
id="path2402"
|
||||
sodipodi:nodetypes="ccsssscsc" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 727 B After Width: | Height: | Size: 680 B |
@ -11,13 +11,16 @@
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="16px"
|
||||
height="16px"
|
||||
id="svg1617"
|
||||
id="svg8468"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43"
|
||||
sodipodi:docbase="/home/flatberg/fluent/icons"
|
||||
sodipodi:docname="line_plot.svg">
|
||||
sodipodi:docbase="/home/flatberg/laydi/icons"
|
||||
sodipodi:docname="line_plot.svg"
|
||||
inkscape:export-filename="/home/flatberg/laydi/icons/line_plot.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs1619">
|
||||
id="defs8470">
|
||||
<marker
|
||||
inkscape:stockid="SquareS"
|
||||
orient="auto"
|
||||
@ -32,41 +35,42 @@
|
||||
transform="scale(0.2)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Send"
|
||||
inkscape:stockid="TriangleOutS"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="Arrow1Send"
|
||||
style="overflow:visible;">
|
||||
id="TriangleOutS"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3456"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
|
||||
transform="scale(0.2) rotate(180)" />
|
||||
id="path10489"
|
||||
d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
|
||||
transform="scale(0.2)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="DistanceIn"
|
||||
orient="auto"
|
||||
refY="0.0"
|
||||
refX="0.0"
|
||||
id="DistanceIn"
|
||||
style="overflow:visible">
|
||||
<g
|
||||
id="g10541"
|
||||
transform="scale(0.6,0.6) translate(8,0)">
|
||||
<path
|
||||
id="path10543"
|
||||
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none" />
|
||||
<path
|
||||
id="path10545"
|
||||
d="M -14.759949,-7 L -14.759949,65"
|
||||
style="fill:none;fill-opacity:0.75000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.2pt;marker-start:none" />
|
||||
</g>
|
||||
</marker>
|
||||
<linearGradient
|
||||
id="linearGradient9542">
|
||||
<stop
|
||||
style="stop-color:#1d8b3d;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop9544" />
|
||||
<stop
|
||||
id="stop13091"
|
||||
offset="0.2857143"
|
||||
style="stop-color:#837d9e;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#7975a6;stop-opacity:0.24705882;"
|
||||
offset="1"
|
||||
id="stop13093" />
|
||||
<stop
|
||||
style="stop-color:#6f6daf;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop9546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient8653">
|
||||
<stop
|
||||
style="stop-color:#23fd00;stop-opacity:1;"
|
||||
style="stop-color:#3def19;stop-opacity:0.97540987;"
|
||||
offset="0"
|
||||
id="stop8655" />
|
||||
<stop
|
||||
@ -75,40 +79,52 @@
|
||||
id="stop8657" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2500">
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient1362"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1.048746,-7.497417e-10,1.276627e-10,0.992725,0.504627,4.478913)"
|
||||
x1="-13.565333"
|
||||
y1="3.2233276"
|
||||
x2="0.73984236"
|
||||
y2="3.2456837" />
|
||||
<linearGradient
|
||||
id="linearGradient9542">
|
||||
<stop
|
||||
style="stop-color:#a8a8a8;stop-opacity:1;"
|
||||
style="stop-color:#13e414;stop-opacity:0.92622954;"
|
||||
offset="0"
|
||||
id="stop2502" />
|
||||
id="stop9544" />
|
||||
<stop
|
||||
id="stop3387"
|
||||
offset="0.75510204"
|
||||
style="stop-color:#e5e5e5;stop-opacity:0.96907216;" />
|
||||
id="stop7591"
|
||||
offset="0.14835165"
|
||||
style="stop-color:#918e9f;stop-opacity:0.6745098;" />
|
||||
<stop
|
||||
style="stop-color:#ebebeb;stop-opacity:0;"
|
||||
id="stop13091"
|
||||
offset="0.2857143"
|
||||
style="stop-color:#837d9e;stop-opacity:0.49803922;" />
|
||||
<stop
|
||||
style="stop-color:#7975a6;stop-opacity:0.24705882;"
|
||||
offset="0.56043959"
|
||||
id="stop13093" />
|
||||
<stop
|
||||
id="stop7593"
|
||||
offset="1"
|
||||
id="stop2504" />
|
||||
style="stop-color:#7471aa;stop-opacity:0.12156863;" />
|
||||
<stop
|
||||
style="stop-color:#6f6daf;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop9546" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient8659"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
id="linearGradient1360"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091642e-10,9.574695e-11,0.806589,-3.626117,6.632697)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient8653"
|
||||
id="linearGradient9548"
|
||||
x1="-14.992936"
|
||||
y1="3.2324076"
|
||||
x2="-0.50547981"
|
||||
y2="3.2324076"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.786559,-6.091642e-10,9.574695e-11,0.806589,-3.626117,6.632697)" />
|
||||
gradientTransform="matrix(1.048746,-7.497417e-10,1.276627e-10,0.992725,0.504627,4.478913)"
|
||||
x1="-13.565333"
|
||||
y1="3.2233276"
|
||||
x2="0.73984236"
|
||||
y2="3.2456837" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
@ -117,19 +133,19 @@
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="22.197802"
|
||||
inkscape:cx="8.4320071"
|
||||
inkscape:cy="4.4085456"
|
||||
inkscape:zoom="31.392433"
|
||||
inkscape:cx="8"
|
||||
inkscape:cy="8.1498335"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
inkscape:grid-bbox="true"
|
||||
inkscape:document-units="px"
|
||||
inkscape:window-width="914"
|
||||
inkscape:window-height="712"
|
||||
inkscape:window-x="237"
|
||||
inkscape:window-y="43" />
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="699"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0" />
|
||||
<metadata
|
||||
id="metadata1622">
|
||||
id="metadata8473">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
@ -144,57 +160,42 @@
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer">
|
||||
<rect
|
||||
style="opacity:1;fill:url(#linearGradient9548);fill-opacity:1.0;stroke:url(#linearGradient8659);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1625"
|
||||
width="11.395269"
|
||||
height="12.492741"
|
||||
x="-15.41898"
|
||||
y="2.9935551"
|
||||
transform="matrix(-1.602589e-3,-0.999999,0.999999,-1.530673e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.50445545"
|
||||
height="11.522277"
|
||||
x="15.495544"
|
||||
y="4.4777226" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect9550"
|
||||
width="0.59595656"
|
||||
height="11.990877"
|
||||
x="-16.000607"
|
||||
y="3.4989688"
|
||||
transform="matrix(-3.561914e-4,-1,1,-1.724514e-4,0,0)" />
|
||||
width="0.82326102"
|
||||
height="14.495289"
|
||||
x="-16.045271"
|
||||
y="1.0721804"
|
||||
transform="matrix(-3.116999e-4,-1,1,-1.970668e-4,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13095"
|
||||
width="1"
|
||||
height="1.9999686"
|
||||
x="-10.45223"
|
||||
y="0.99966687"
|
||||
transform="matrix(-3.540536e-5,-1,0.999998,-1.734922e-3,0,0)" />
|
||||
style="opacity:0.95890407;fill:url(#linearGradient1360);fill-opacity:1.0;stroke:url(#linearGradient1362);stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect1625"
|
||||
width="15.193711"
|
||||
height="15.375704"
|
||||
x="-15.219207"
|
||||
y="-3.7717124e-05"
|
||||
transform="matrix(-1.479312e-3,-0.999999,0.999999,-1.658226e-3,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.86243388;fill:#929797;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect13097"
|
||||
width="1"
|
||||
height="16"
|
||||
x="0"
|
||||
y="0" />
|
||||
style="opacity:1;fill:#878e8e;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
|
||||
id="rect3393"
|
||||
width="0.62086815"
|
||||
height="15.000007"
|
||||
x="15.456053"
|
||||
y="1" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.30343372;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:url(#SquareS);marker-mid:url(#SquareS);marker-end:url(#SquareS);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 3.8080234,4.8809418 C 3.8080234,14.496824 3.8002372,14.496824 3.8002372,14.496824 L 3.8002372,14.496824"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.33539712;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:url(#SquareS);marker-mid:url(#SquareS);marker-end:url(#SquareS);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 1.6021029,2.0851203 C 1.6021029,13.166175 1.5938478,13.166175 1.5938478,13.166175 L 1.5938478,13.166175"
|
||||
id="path2423" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.35327095;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:url(#SquareS);marker-mid:url(#SquareS);marker-end:url(#SquareS);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 15.345903,9.6197631 C 3.8038219,9.5920041 3.8038979,9.5832116 3.8038979,9.5832116 L 3.8038979,9.5832116"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:0.39048415;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:url(#SquareS);marker-mid:url(#SquareS);marker-end:url(#SquareS);stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 13.834879,7.5459964 C 1.5976484,7.5140078 1.5977289,7.5038756 1.5977289,7.5038756 L 1.5977289,7.5038756"
|
||||
id="path3480" />
|
||||
<path
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#c72124;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 4.3,10.7 C 4.3,10.7 4.3009598,7.1690281 5.8146309,6.1007426 C 7.0219601,5.2486603 8.1832644,8.8588352 8.5982942,9.6868812 C 9.2420898,10.971349 9.6086599,13.094711 10.882205,13.263119 C 12.289868,13.449262 12.836966,11.8966 13.197551,11.060396 C 13.862121,9.519248 14.454234,7.1641089 14.454234,7.1641089 C 14.454234,7.1641089 14.90473,5.7056312 14.679482,5.6774752"
|
||||
style="opacity:1;color:#000000;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#fa0707;stroke-width:0.563;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
|
||||
d="M 2.12371,8.7908287 C 2.12371,8.7908287 2.1247276,4.7218426 3.7295633,3.4907823 C 5.0096068,2.5088681 6.2408535,6.6691258 6.6808795,7.6233413 C 7.3634493,9.1035237 7.752097,11.550423 9.1023444,11.744491 C 10.594787,11.958997 11.174836,10.169755 11.557138,9.2061391 C 12.261733,7.4301658 12.889508,4.7161739 12.889508,4.7161739 C 12.889508,4.7161739 13.367136,3.0354678 13.128322,3.0030216"
|
||||
id="path3482"
|
||||
sodipodi:nodetypes="csssscs"
|
||||
inkscape:export-filename="/home/flatberg/fluent/icons/line_plot.png"
|
||||
inkscape:export-filename="/home/flatberg/laydi/icons/line_plot.png"
|
||||
inkscape:export-xdpi="130.40465"
|
||||
inkscape:export-ydpi="130.40465" />
|
||||
</g>
|
||||
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.0 KiB |
BIN
icons/move.png
Normal file
After Width: | Height: | Size: 713 B |
176
icons/move.svg
Normal file
@ -0,0 +1,176 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
||||
[
|
||||
<!ATTLIST svg
|
||||
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
|
||||
]>
|
||||
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||
<svg
|
||||
width="128pt"
|
||||
height="128pt"
|
||||
id="svg1"
|
||||
sodipodi:version="0.27"
|
||||
sodipodi:docname="/mnt/windows/Themes/Work/Blue-Sphere/move.svg"
|
||||
sodipodi:docbase="/mnt/windows/Themes/Work/Blue-Sphere/"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs
|
||||
id="defs22">
|
||||
<linearGradient
|
||||
id="linearGradient168">
|
||||
<stop
|
||||
offset="0.000000"
|
||||
style="stop-color:#cdffff;stop-opacity:1;"
|
||||
id="stop169" />
|
||||
<stop
|
||||
offset="1.000000"
|
||||
style="stop-color:#0c5d7d;stop-opacity:0.905882;"
|
||||
id="stop170" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient90">
|
||||
<stop
|
||||
offset="0.000000"
|
||||
style="stop-color:#cdffff;stop-opacity:1;"
|
||||
id="stop91" />
|
||||
<stop
|
||||
offset="1.000000"
|
||||
style="stop-color:#006b97;stop-opacity:0.905882;"
|
||||
id="stop92" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient67">
|
||||
<stop
|
||||
offset="0.000000"
|
||||
style="stop-color:#d7ffff;stop-opacity:0.898039;"
|
||||
id="stop70" />
|
||||
<stop
|
||||
offset="1.000000"
|
||||
style="stop-color:#2ea6b9;stop-opacity:0.952941;"
|
||||
id="stop69" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient57">
|
||||
<stop
|
||||
offset="0.000000"
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
id="stop59" />
|
||||
<stop
|
||||
offset="1.000000"
|
||||
style="stop-color:#797979;stop-opacity:1;"
|
||||
id="stop58" />
|
||||
</linearGradient>
|
||||
<defs
|
||||
id="defs4">
|
||||
<radialGradient
|
||||
id="1"
|
||||
cx="869.603027"
|
||||
cy="1973.579956"
|
||||
r="2106.649902"
|
||||
fx="869.603027"
|
||||
fy="1973.579956"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient67" />
|
||||
</defs>
|
||||
<defs
|
||||
id="defs11">
|
||||
<linearGradient
|
||||
id="2"
|
||||
x1="255.848"
|
||||
y1="119.147"
|
||||
x2="375.686"
|
||||
y2="34.1009"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
offset="0"
|
||||
style="stop-color:#ffffff"
|
||||
id="stop13" />
|
||||
<stop
|
||||
offset="1"
|
||||
style="stop-color:#000000"
|
||||
id="stop14" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<defs
|
||||
id="defs16">
|
||||
<linearGradient
|
||||
id="3"
|
||||
x1="275.053009"
|
||||
y1="109.384003"
|
||||
x2="356.480988"
|
||||
y2="30.864300"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
xlink:href="#linearGradient57" />
|
||||
</defs>
|
||||
<radialGradient
|
||||
cx="3.03981e-14"
|
||||
cy="1.05578e-10"
|
||||
r="0.773346"
|
||||
fx="3.03981e-14"
|
||||
fy="1.05578e-10"
|
||||
xlink:href="#linearGradient168"
|
||||
id="radialGradient88"
|
||||
gradientUnits="objectBoundingBox"
|
||||
gradientTransform="matrix(0.945877,0,0,1.05722,0.264368,0.249996)"
|
||||
spreadMethod="pad" />
|
||||
<linearGradient
|
||||
x1="2.69643"
|
||||
y1="1.14655"
|
||||
x2="3.85147"
|
||||
y2="0.623116"
|
||||
xlink:href="#linearGradient67"
|
||||
id="linearGradient89"
|
||||
gradientUnits="objectBoundingBox"
|
||||
gradientTransform="translate(-2.65767,-0.201241)"
|
||||
spreadMethod="pad" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base">
|
||||
<sodipodi:guide
|
||||
orientation="horizontal"
|
||||
position="114.876968"
|
||||
id="sodipodi:guide589" />
|
||||
<sodipodi:guide
|
||||
orientation="vertical"
|
||||
position="47.041008"
|
||||
id="sodipodi:guide590" />
|
||||
<sodipodi:guide
|
||||
orientation="vertical"
|
||||
position="83.381706"
|
||||
id="sodipodi:guide655" />
|
||||
<sodipodi:guide
|
||||
orientation="horizontal"
|
||||
position="76.921135"
|
||||
id="sodipodi:guide1057" />
|
||||
<sodipodi:guide
|
||||
orientation="horizontal"
|
||||
position="42.195583"
|
||||
id="sodipodi:guide1058" />
|
||||
</sodipodi:namedview>
|
||||
<path
|
||||
d="M 32.5 12 L 56.8988 34.5471 L 42.9771 34.8537 L 42.7252 61.5867 L 22.2748 61.5867 L 22.0229 34.8537 L 8.21868 35.1477 L 32.5 12 z "
|
||||
transform="matrix(0.797584,0,0,1.24992,56.2305,-2.71824)"
|
||||
style="stroke-width:3.72423;fill:#0c5d7d;stroke:#0c5d7d;stroke-opacity:0.99;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:0.992157;"
|
||||
id="polygon3"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<path
|
||||
d="M 32.5 12 L 56.8988 34.5471 L 42.9771 34.8537 L 42.0791 72.0798 L 21.6287 72.0798 L 22.0229 34.8537 L 8.21868 35.1477 L 32.5 12 z "
|
||||
transform="matrix(9.95215e-19,0.781212,-1.22426,1.55963e-18,171.015,60.3555)"
|
||||
style="stroke-width:3.72423;fill:#0c5d7d;stroke:#0c5d7d;stroke-opacity:0.99;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:0.992157;"
|
||||
id="path651"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<path
|
||||
d="M 32.5 12 L 56.8988 34.5471 L 42.9771 34.8537 L 42.7252 61.018 L 22.2748 61.018 L 22.0229 34.8537 L 8.21868 35.1477 L 32.5 12 z "
|
||||
transform="matrix(-0.81341,2.07245e-18,-3.24781e-18,-1.27472,108.565,172.894)"
|
||||
style="stroke-width:3.72423;fill:#0c5d7d;stroke:#0c5d7d;stroke-opacity:0.99;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:0.992157;"
|
||||
id="path652"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<path
|
||||
d="M 32.5 12 L 56.8988 34.5471 L 42.9771 34.8537 L 42.7252 69.8962 L 22.2748 69.8962 L 22.0229 34.8537 L 8.21868 35.1477 L 32.5 12 z "
|
||||
transform="matrix(-3.07844e-18,-0.805497,1.26232,-4.82433e-18,-9.11143,111.473)"
|
||||
style="stroke-width:3.72423;fill:#0c5d7d;stroke:#0c5d7d;stroke-opacity:0.99;stroke-linejoin:miter;stroke-linecap:butt;fill-opacity:0.992157;"
|
||||
id="path653"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
</svg>
|
After Width: | Height: | Size: 5.8 KiB |
BIN
icons/select.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
icons/table_size.png
Normal file
After Width: | Height: | Size: 780 B |
346
icons/table_size.svg
Normal file
@ -0,0 +1,346 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://web.resource.org/cc/"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://inkscape.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="744.09448819"
|
||||
height="1052.3622047"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="0.43"
|
||||
sodipodi:docbase="/home/einarr/src/laydi/icons"
|
||||
sodipodi:docname="table_size.svg">
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2192">
|
||||
<stop
|
||||
style="stop-color:#00d07c;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2194" />
|
||||
<stop
|
||||
style="stop-color:#00d07c;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2196" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient2182">
|
||||
<stop
|
||||
style="stop-color:#0000ff;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop2184" />
|
||||
<stop
|
||||
style="stop-color:#0000ff;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2186" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2182"
|
||||
id="linearGradient2188"
|
||||
x1="425.21429"
|
||||
y1="850.93365"
|
||||
x2="425.21429"
|
||||
y2="125.84373"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2198"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,155.2857)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2202"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404"
|
||||
gradientTransform="translate(162.8571,155.2857)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2206"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(331.4286,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2221"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2223"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(162.8571,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2225"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(331.4286,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2235"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2237"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(162.8571,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2239"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(331.4286,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2247"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(0,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2249"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(162.8571,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2251"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(331.4286,155.2857)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2257"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(161.8571,160.5)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2260"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-1,160.5)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2275"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(161.8571,-4.7143)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2192"
|
||||
id="linearGradient2278"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-1,-4.7143)"
|
||||
x1="202.35713"
|
||||
y1="426.64789"
|
||||
x2="202.35713"
|
||||
y2="223.78404" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.35"
|
||||
inkscape:cx="375"
|
||||
inkscape:cy="520"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:window-width="823"
|
||||
inkscape:window-height="583"
|
||||
inkscape:window-x="91"
|
||||
inkscape:window-y="59" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<rect
|
||||
style="fill:url(#linearGradient2188);fill-opacity:1.0;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect1307"
|
||||
width="517.14288"
|
||||
height="517.14288"
|
||||
x="125.71429"
|
||||
y="235.21933"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient2260);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2190"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="144.71428"
|
||||
y="418.57648"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient2257);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2200"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="307.57144"
|
||||
y="418.57648"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:#f3f4f9;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2204"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="476.14285"
|
||||
y="418.57648"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:#f3f4f9;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2215"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="144.71428"
|
||||
y="583.79077"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:#f3f4f9;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2217"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="307.57144"
|
||||
y="583.79077"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:#f3f4f9;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2219"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="476.14285"
|
||||
y="583.79077"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient2278);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2229"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="144.71428"
|
||||
y="253.36218"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:url(#linearGradient2275);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2231"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="307.57144"
|
||||
y="253.36218"
|
||||
inkscape:export-filename="/home/einarr/src/laydi/icons/rect2233.png"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
<rect
|
||||
style="fill:#f3f4f9;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="rect2233"
|
||||
width="148.57143"
|
||||
height="148.57143"
|
||||
x="476.14285"
|
||||
y="253.36218"
|
||||
inkscape:export-xdpi="3.4739451"
|
||||
inkscape:export-ydpi="3.4739451" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 12 KiB |
BIN
icons/zoom_to_rect.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
3
laydi/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
import main
|
||||
|
100
laydi/annotations.py
Normal file
@ -0,0 +1,100 @@
|
||||
|
||||
_dim_annotation_handlers = {}
|
||||
|
||||
def get_dim_annotations(dimname, annotation, ids):
|
||||
"""Returns a list of annotations corresponding to the given ids in
|
||||
dimension dimname"""
|
||||
global _dim_annotation_handlers
|
||||
|
||||
if _dim_annotation_handlers.has_key(dimname):
|
||||
return _dim_annotation_handlers[dimname].get_annotations(annotation, ids)
|
||||
return None
|
||||
|
||||
def set_dim_handler(dimname, handler):
|
||||
"""Set the handler for the given dimension."""
|
||||
global _dim_annotation_handlers
|
||||
_dim_annotation_handlers[dimname] = handler
|
||||
|
||||
def get_dim_handler(dimname):
|
||||
"""Get the handler for the given dimension."""
|
||||
global _dim_annotation_handlers
|
||||
return _dim_annotation_handlers.get(dimname, None)
|
||||
|
||||
|
||||
class AnnotationHandler:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def get_annotations(self, annotationname, ids, default=None):
|
||||
return None
|
||||
|
||||
def get_annotation_names(self):
|
||||
return []
|
||||
|
||||
|
||||
class DictAnnotationHandler(AnnotationHandler):
|
||||
|
||||
def __init__(self, d=None):
|
||||
if d == None:
|
||||
d = {}
|
||||
self._dict = d
|
||||
|
||||
def get_annotations(self, annotationname, ids, default=None):
|
||||
d = self._dict
|
||||
retval = []
|
||||
for id in ids:
|
||||
if d[annotationname].has_key(id):
|
||||
retval.append(d[annotationname][id])
|
||||
else:
|
||||
retval.append(default)
|
||||
return retval
|
||||
|
||||
def add_annotations(self, annotationname, d):
|
||||
self._dict[annotationname] = d
|
||||
|
||||
def get_annotation_names(self):
|
||||
return self._dict.keys()
|
||||
|
||||
|
||||
def read_annotations_file(filename):
|
||||
"""Read annotations from file.
|
||||
|
||||
Reads annotations from a tab delimited file of the format::
|
||||
dimname annotation_name1 annotation_name2 ...
|
||||
id1 Foo 0.43
|
||||
id2 Bar 0.59
|
||||
"""
|
||||
|
||||
ann = DictAnnotationHandler()
|
||||
dimname = None
|
||||
annotation_dicts = []
|
||||
annotation_names = []
|
||||
|
||||
fd = open(filename)
|
||||
|
||||
## Read the first line, which contains the dimension name and
|
||||
## annotation names.
|
||||
line = fd.readline()
|
||||
values = [x.strip() for x in line.split('\t')]
|
||||
dimname = values[0]
|
||||
annotation_names = values[1:]
|
||||
annotation_dicts = [{} for x in annotation_names]
|
||||
|
||||
## Read the lines containing the annotations. The first value on
|
||||
## each line is an id along the dimension.
|
||||
while line:
|
||||
values = [x.strip() for x in line.split('\t')]
|
||||
for i, x in enumerate(values[1:]):
|
||||
annotation_dicts[i][values[0]] = x
|
||||
line = fd.readline()
|
||||
|
||||
fd.close()
|
||||
|
||||
## Add everything to the annotation object and add the object to
|
||||
## the specified dimension.
|
||||
for i, a in enumerate(annotation_names):
|
||||
ann.add_annotations(a, annotation_dicts[i])
|
||||
|
||||
_dim_annotation_handlers[dimname] = ann
|
||||
return ann
|
||||
|
1762
laydi/cfgparse.py
Normal file
862
laydi/dataset.py
Normal file
@ -0,0 +1,862 @@
|
||||
from scipy import ndarray, atleast_2d, asarray, intersect1d, zeros
|
||||
from scipy import empty, sparse, where
|
||||
from scipy import sort as array_sort
|
||||
from itertools import izip
|
||||
import shelve
|
||||
import copy
|
||||
import re
|
||||
|
||||
class Universe(object):
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self._ids = {}
|
||||
|
||||
def register(self, dim):
|
||||
"""Increase reference count for identifiers in Dimension object dim"""
|
||||
if dim.name != self.name:
|
||||
return
|
||||
for i in dim:
|
||||
self._ids[i] = self._ids.get(i, 0) + 1
|
||||
|
||||
def unregister(self, dim):
|
||||
"""Update reference count for identifiers in Dimension object dim
|
||||
Update reference count for identifiers in Dimension object dim, and remove all
|
||||
identifiers with a reference count of 0, as they do not (by definition) exist
|
||||
any longer.
|
||||
"""
|
||||
if dim.name != self.name:
|
||||
return
|
||||
for i in dim:
|
||||
refcount = self._ids[i]
|
||||
if refcount == 1:
|
||||
self._ids.pop(i)
|
||||
else:
|
||||
self._ids[i] -= 1
|
||||
|
||||
def __str__(self):
|
||||
return "%s: %i elements, %i references" % (self.name, len(self._ids), sum(self._ids.values()))
|
||||
|
||||
def __contains__(self, element):
|
||||
return self._ids.__contains__(element)
|
||||
|
||||
def __len__(self):
|
||||
return len(self._ids)
|
||||
|
||||
def intersection(self, dim):
|
||||
return set(self._ids).intersection(dim.idset)
|
||||
|
||||
|
||||
class Dimension(object):
|
||||
"""A Dimension represents the set of identifiers an object has along an axis.
|
||||
"""
|
||||
def __init__(self, name, ids=[]):
|
||||
self.name = name
|
||||
self.idset = set(ids)
|
||||
self.idlist = list(ids)
|
||||
|
||||
def __getitem__(self, element):
|
||||
return self.idlist[element]
|
||||
|
||||
def __getslice__(self, start, end):
|
||||
return self.idlist[start:end]
|
||||
|
||||
def __contains__(self, element):
|
||||
return self.idset.__contains__(element)
|
||||
|
||||
def __str__(self):
|
||||
return "%s: %s" % (self.name, str(self.idlist))
|
||||
|
||||
def __len__(self):
|
||||
return len(self.idlist)
|
||||
|
||||
def __iter__(self):
|
||||
return iter(self.idlist)
|
||||
|
||||
def intersection(self, dim):
|
||||
return self.idset.intersection(dim.idset)
|
||||
|
||||
|
||||
class Dataset(object):
|
||||
"""The Dataset base class.
|
||||
|
||||
A Dataset is an n-way array with defined string identifiers across
|
||||
all dimensions.
|
||||
|
||||
example of use:
|
||||
|
||||
---
|
||||
dim_name_rows = 'rows'
|
||||
names_rows = ('row_a','row_b')
|
||||
ids_1 = [dim_name_rows, names_rows]
|
||||
|
||||
dim_name_cols = 'cols'
|
||||
names_cols = ('col_a','col_b','col_c','col_d')
|
||||
ids_2 = [dim_name_cols, names_cols]
|
||||
|
||||
Array_X = rand(2,4)
|
||||
data = Dataset(Array_X,(ids_1,ids_2),name="Testing")
|
||||
|
||||
dim_names = [dim for dim in data]
|
||||
|
||||
column_identifiers = [id for id in data['cols'].keys()]
|
||||
column_index = [index for index in data['cols'].values()]
|
||||
|
||||
'cols' in data -> True
|
||||
|
||||
---
|
||||
|
||||
data = Dataset(rand(10,20)) (generates dims and ids (no links))
|
||||
"""
|
||||
|
||||
def __init__(self, array, identifiers=None, name='Unnamed dataset'):
|
||||
self._dims = [] #existing dimensions in this dataset
|
||||
self._map = {} # internal mapping for dataset: identifier <--> index
|
||||
self._name = name
|
||||
self._identifiers = identifiers
|
||||
|
||||
if not isinstance(array, sparse.spmatrix):
|
||||
array = atleast_2d(asarray(array))
|
||||
# vector are column (array)
|
||||
if array.shape[0] == 1:
|
||||
array = array.T
|
||||
self.shape = array.shape
|
||||
|
||||
if identifiers != None:
|
||||
self._validate_identifiers(identifiers)
|
||||
self._set_identifiers(identifiers, self._all_dims)
|
||||
else:
|
||||
self._identifiers = self._create_identifiers(self.shape, self._all_dims)
|
||||
self._set_identifiers(self._identifiers, self._all_dims)
|
||||
self._array = array
|
||||
|
||||
def __iter__(self):
|
||||
"""Returns an iterator over dimensions of dataset."""
|
||||
return self._dims.__iter__()
|
||||
|
||||
def __contains__(self,dim):
|
||||
"""Returns True if dim is a dimension name in dataset."""
|
||||
# return self._dims.__contains__(dim)
|
||||
return self._map.__contains__(dim)
|
||||
|
||||
def __len__(self):
|
||||
"""Returns the number of dimensions in the dataset"""
|
||||
return len(self._map)
|
||||
|
||||
def __getitem__(self,dim):
|
||||
"""Return the identifers along the dimension dim."""
|
||||
return self._map[dim]
|
||||
|
||||
def _create_identifiers(self, shape, all_dims):
|
||||
"""Creates dimension names and identifier names, and returns
|
||||
identifiers."""
|
||||
|
||||
dim_names = ['rows','cols']
|
||||
ids = []
|
||||
for axis, n in enumerate(shape):
|
||||
if axis < 2:
|
||||
dim_suggestion = dim_names[axis]
|
||||
else:
|
||||
dim_suggestion = 'dim'
|
||||
dim_suggestion = self._suggest_dim_name(dim_suggestion, all_dims)
|
||||
identifier_creation = [str(axis) + "_" + i for i in map(str, range(n))]
|
||||
ids.append((dim_suggestion, identifier_creation))
|
||||
all_dims.add(dim_suggestion)
|
||||
return ids
|
||||
|
||||
def _set_identifiers(self, identifiers, all_dims):
|
||||
"""Creates internal mapping of identifiers structure."""
|
||||
for dim, ids in identifiers:
|
||||
pos_map = ReverseDict()
|
||||
if dim not in self._dims:
|
||||
self._dims.append(dim)
|
||||
all_dims.add(dim)
|
||||
else:
|
||||
raise ValueError, "Dimension names must be unique whitin dataset"
|
||||
for pos, id in enumerate(ids):
|
||||
pos_map[id] = pos
|
||||
self._map[dim] = pos_map
|
||||
|
||||
def _suggest_dim_name(self,dim_name,all_dims):
|
||||
"""Suggests a unique name for dim and returns it"""
|
||||
c = 0
|
||||
new_name = dim_name
|
||||
while new_name in all_dims:
|
||||
new_name = dim_name + "_" + str(c)
|
||||
c += 1
|
||||
return new_name
|
||||
|
||||
def asarray(self):
|
||||
"""Returns the numeric array (data) of dataset"""
|
||||
if isinstance(self._array, sparse.spmatrix):
|
||||
return self._array.toarray()
|
||||
return self._array
|
||||
|
||||
def set_array(self, array):
|
||||
"""Adds array as an ArrayType object.
|
||||
A one-dim array is transformed to a two-dim array (row-vector)
|
||||
"""
|
||||
if not isinstance(array, type(self._array)):
|
||||
raise ValueError("Input array of type: %s does not match existing array type: %s") %(type(array), type(self._array))
|
||||
if self.shape != array.shape:
|
||||
raise ValueError, "Input array must be of similar dimensions as dataset"
|
||||
self._array = atleast_2d(asarray(array))
|
||||
|
||||
def get_name(self):
|
||||
"""Returns dataset name"""
|
||||
return self._name
|
||||
|
||||
def get_all_dims(self):
|
||||
"""Returns all dimensions in project"""
|
||||
return self._all_dims
|
||||
|
||||
def get_dim_name(self, axis=None):
|
||||
"""Returns dim name for an axis, if no axis is provided it
|
||||
returns a list of dims"""
|
||||
if type(axis) == int:
|
||||
return self._dims[axis]
|
||||
else:
|
||||
return [dim for dim in self._dims]
|
||||
|
||||
def common_dims(self, ds):
|
||||
"""Returns a list of the common dimensions in the two datasets."""
|
||||
dims = self.get_dim_name()
|
||||
ds_dims = ds.get_dim_name()
|
||||
return [d for d in dims if d in ds_dims]
|
||||
|
||||
def get_identifiers(self, dim, indices=None, sorted=False):
|
||||
"""Returns identifiers along dim, sorted by position (index)
|
||||
is optional.
|
||||
|
||||
You can optionally provide a list/ndarray of indices to get
|
||||
only the identifiers of a given position.
|
||||
|
||||
Identifiers are the unique names (strings) for a variable in a
|
||||
given dim. Index (Indices) are the Identifiers position in a
|
||||
matrix in a given dim.
|
||||
"""
|
||||
if indices != None:
|
||||
if len(indices) == 0:# if empty list or empty array
|
||||
return []
|
||||
if indices != None:
|
||||
# be sure to match intersection
|
||||
#indices = intersect1d(self.get_indices(dim),indices)
|
||||
ids = [self._map[dim].reverse[i] for i in indices]
|
||||
else:
|
||||
if sorted == True:
|
||||
ids = [self._map[dim].reverse[i] for i in array_sort(self._map[dim].values())]
|
||||
else:
|
||||
ids = self._map[dim].keys()
|
||||
|
||||
return ids
|
||||
|
||||
def get_indices(self, dim, idents=None):
|
||||
"""Returns indices for identifiers along dimension.
|
||||
You can optionally provide a list of identifiers to retrieve a
|
||||
index subset.
|
||||
|
||||
Identifiers are the unique names (strings) for a variable in a
|
||||
given dim. Index (Indices) are the Identifiers position in a
|
||||
matrix in a given dim. If none of the input identifiers are
|
||||
found an empty index is returned
|
||||
"""
|
||||
if not isinstance(idents, list) and not isinstance(idents, set):
|
||||
raise ValueError("idents needs to be a list/set got: %s" %type(idents))
|
||||
if idents == None:
|
||||
index = array_sort(self._map[dim].values())
|
||||
else:
|
||||
index = [self._map[dim][key]
|
||||
for key in idents if self._map[dim].has_key(key)]
|
||||
return asarray(index)
|
||||
|
||||
def existing_identifiers(self, dim, idents):
|
||||
"""Filters a list of identifiers to find those that are present in the
|
||||
dataset.
|
||||
|
||||
The most common use of this function is to get a list of
|
||||
identifiers who correspond one to one with the list of indices produced
|
||||
when get_indices is given an identifier list. That is
|
||||
ds.get_indices(dim, idents) and ds.exisiting_identifiers(dim, idents)
|
||||
will have the same order.
|
||||
|
||||
@param dim: A dimension present in the dataset.
|
||||
@param idents: A list of identifiers along the given dimension.
|
||||
@return: A list of identifiers in the same order as idents, but
|
||||
without elements not present in the dataset.
|
||||
"""
|
||||
if not isinstance(idents, list) and not isinstance(idents, set):
|
||||
raise ValueError("idents needs to be a list/set got: %s" %type(idents))
|
||||
|
||||
return [key for key in idents if self._map[dim].has_key(key)]
|
||||
|
||||
def copy(self):
|
||||
""" Returns deepcopy of dataset.
|
||||
"""
|
||||
return copy.deepcopy(self)
|
||||
|
||||
def subdata(self, dim, idents):
|
||||
"""Returns a new dataset based on dimension and given identifiers.
|
||||
|
||||
"""
|
||||
ds = self.copy()
|
||||
indices = array_sort(ds.get_indices(dim, idents))
|
||||
|
||||
idents = ds.get_identifiers(dim, indices=indices)
|
||||
if not idents:
|
||||
raise ValueError("No of identifers from: \n%s \nfound in %s" %(str(idents), ds._name))
|
||||
ax = [i for i, name in enumerate(ds._dims) if name == dim][0]
|
||||
subarr = ds._array.take(indices, ax)
|
||||
new_indices = range(len(idents))
|
||||
ds._map[dim] = ReverseDict(zip(idents, new_indices))
|
||||
ds.shape = tuple(len(ds._map[d]) for d in ds._dims)
|
||||
ds.set_array(subarr)
|
||||
return ds
|
||||
|
||||
def transpose(self):
|
||||
"""Returns a copy of transpose of a dataset.
|
||||
|
||||
As for the moment: only support for 2D-arrays.
|
||||
"""
|
||||
|
||||
assert(len(self.shape) == 2)
|
||||
ds = self.copy()
|
||||
ds._array = ds._array.T
|
||||
ds._dims.reverse()
|
||||
ds.shape = ds._array.shape
|
||||
return ds
|
||||
|
||||
def _validate_identifiers(self, identifiers):
|
||||
for dim_name, ids in identifiers:
|
||||
if len(set(ids)) != len(ids):
|
||||
raise ValueError("Identifiers not unique in : %s" %dim_name)
|
||||
identifier_shape = [len(i[1]) for i in identifiers]
|
||||
if len(identifier_shape) != len(self.shape):
|
||||
raise ValueError("Identifier list length must equal array dims")
|
||||
for ni, na in zip(identifier_shape, self.shape):
|
||||
if ni != na:
|
||||
raise ValueError, "Identifier-array mismatch: %s: (idents: %s, array: %s)" %(self._name, ni, na)
|
||||
|
||||
|
||||
class CategoryDataset(Dataset):
|
||||
"""The category dataset class.
|
||||
|
||||
A dataset for representing class information as binary
|
||||
matrices (0/1-matrices).
|
||||
|
||||
There is support for using a less memory demanding, sparse format. The
|
||||
prefered (default) format for a category dataset is the compressed sparse row
|
||||
format (csr)
|
||||
|
||||
Always has linked dimension in first dim:
|
||||
ex matrix:
|
||||
. go_term1 go_term2 ...
|
||||
gene_1
|
||||
gene_2
|
||||
gene_3
|
||||
.
|
||||
.
|
||||
.
|
||||
|
||||
"""
|
||||
|
||||
def __init__(self, array, identifiers=None, name='C'):
|
||||
Dataset.__init__(self, array, identifiers=identifiers, name=name)
|
||||
|
||||
def as_spmatrix(self):
|
||||
if isinstance(self._array, sparse.spmatrix):
|
||||
return self._array
|
||||
else:
|
||||
arr = self.asarray()
|
||||
return sparse.csr_matrix(arr.astype('i'))
|
||||
|
||||
def to_spmatrix(self):
|
||||
if isinstance(self._array, sparse.spmatrix):
|
||||
self._array = self._array.tocsr()
|
||||
else:
|
||||
self._array = sparse.scr_matrix(self._array)
|
||||
|
||||
def as_dictlists(self):
|
||||
"""Returns data as dict of identifiers along first dim.
|
||||
|
||||
ex: data['gene_1'] = ['map0030','map0010', ...]
|
||||
|
||||
fixme: Deprecated?
|
||||
"""
|
||||
data = {}
|
||||
for name, ind in self._map[self.get_dim_name(0)].items():
|
||||
if isinstance(self._array, ndarray):
|
||||
indices = self._array[ind,:].nonzero()[0]
|
||||
elif isinstance(self._array, sparse.spmatrix):
|
||||
if not isinstance(self._array, sparse.csr_matrix):
|
||||
array = self._array.tocsr()
|
||||
else:
|
||||
array = self._array
|
||||
indices = array[ind,:].indices
|
||||
if len(indices) == 0: # should we allow categories with no members?
|
||||
continue
|
||||
data[name] = self.get_identifiers(self.get_dim_name(1), indices)
|
||||
self._dictlists = data
|
||||
return data
|
||||
|
||||
def as_selections(self):
|
||||
"""Returns data as a list of Selection objects.
|
||||
|
||||
The list of selections is not ordered (sorted) by any means.
|
||||
"""
|
||||
ret_list = []
|
||||
for cat_name, ind in self._map[self.get_dim_name(1)].items():
|
||||
if isinstance(self._array, sparse.spmatrix):
|
||||
if not isinstance(self._array, sparse.csc_matrix):
|
||||
self._array = self._array.tocsc()
|
||||
indices = self._array[:,ind].indices
|
||||
else:
|
||||
indices = self._array[:,ind].nonzero()[0]
|
||||
if len(indices) == 0:
|
||||
continue
|
||||
ids = self.get_identifiers(self.get_dim_name(0), indices)
|
||||
selection = Selection(cat_name)
|
||||
selection.select(self.get_dim_name(0), ids)
|
||||
ret_list.append(selection)
|
||||
return ret_list
|
||||
|
||||
|
||||
class GraphDataset(Dataset):
|
||||
"""The graph dataset class.
|
||||
|
||||
A dataset class for representing graphs. The constructor may use an
|
||||
incidence matrix (possibly sparse) or (if networkx installed) a
|
||||
networkx.(X)Graph structure.
|
||||
|
||||
If the networkx library is installed, there is support for
|
||||
representing the graph as a networkx.Graph, or networkx.XGraph structure.
|
||||
"""
|
||||
|
||||
def __init__(self, input, identifiers=None, name='A', nodepos = None):
|
||||
if isinstance(input, sparse.spmatrix):
|
||||
arr = input
|
||||
else:
|
||||
try:
|
||||
arr = asarray(input)
|
||||
except:
|
||||
raise ValueError("Could not identify input")
|
||||
Dataset.__init__(self, array=arr, identifiers=identifiers, name=name)
|
||||
self._graph = None
|
||||
self.nodepos = nodepos
|
||||
|
||||
def as_spmatrix(self):
|
||||
if isinstance(self._array, sparse.spmatrix):
|
||||
return self._array
|
||||
else:
|
||||
arr = self.asarray()
|
||||
return sparse.csr_matrix(arr.astype('i'))
|
||||
|
||||
def to_spmatrix(self):
|
||||
if isinstance(self._array, sparse.spmatrix):
|
||||
self._array = self._array.tocsr()
|
||||
else:
|
||||
self._array = sparse.scr_matrix(self._array)
|
||||
|
||||
def asnetworkx(self):
|
||||
if self._graph != None:
|
||||
return self._graph
|
||||
dim0, dim1 = self.get_dim_name()
|
||||
node_ids = self.get_identifiers(dim0, sorted=True)
|
||||
edge_ids = self.get_identifiers(dim1, sorted=True)
|
||||
G, weights = self._graph_from_incidence_matrix(self._array, node_ids=node_ids, edge_ids=edge_ids)
|
||||
self._graph = G
|
||||
return G
|
||||
|
||||
def from_networkx(cls, G, node_dim, edge_dim, sp_format=True):
|
||||
"""Create graph dataset from networkx graph.
|
||||
|
||||
When G is a Graph/Digraph edge identifiers will be created,
|
||||
else (XGraoh/XDigraph) it is assumed that edge attributes are
|
||||
the edge identifiers.
|
||||
"""
|
||||
|
||||
import networkx as nx
|
||||
n = G.number_of_nodes()
|
||||
m = G.number_of_edges()
|
||||
|
||||
if isinstance(G, nx.DiGraph):
|
||||
G = nx.XDiGraph(G)
|
||||
elif isinstance(G, nx.Graph):
|
||||
G = nx.XGraph(G)
|
||||
|
||||
edge_ids = [e[2] for e in G.edges()]
|
||||
node_ids = map(str, G.nodes())
|
||||
n2ind = {}
|
||||
for ind, node in enumerate(node_ids):
|
||||
n2ind[node] = ind
|
||||
|
||||
if sp_format:
|
||||
I = sparse.lil_matrix((n, m))
|
||||
else:
|
||||
I = zeros((m, n), dtype='i')
|
||||
|
||||
for i, (h, t, eid) in enumerate(G.edges()):
|
||||
if eid != None:
|
||||
edge_ids[i] = eid
|
||||
else:
|
||||
edge_ids[i] = 'e_' + str(i)
|
||||
hind = n2ind[str(h)]
|
||||
tind = n2ind[str(t)]
|
||||
I[hind, i] = 1
|
||||
if G.is_directed():
|
||||
I[tind, i] = -1
|
||||
else:
|
||||
I[tind, i] = 1
|
||||
idents = [[node_dim, node_ids], [edge_dim, edge_ids]]
|
||||
if G.name != '':
|
||||
name = G.name
|
||||
else:
|
||||
name = 'A'
|
||||
ds = GraphDataset(I, idents, name)
|
||||
return ds
|
||||
|
||||
from_networkx = classmethod(from_networkx)
|
||||
|
||||
def _incidence2adjacency(self, I):
|
||||
"""Incidence to adjacency matrix.
|
||||
|
||||
I*I.T - eye(n)?
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
def _graph_from_incidence_matrix(self, I, node_ids, edge_ids):
|
||||
"""Creates a networkx graph class from incidence
|
||||
(possibly weighted) matrix and ordered labels.
|
||||
|
||||
labels = None, results in string-numbered labels
|
||||
"""
|
||||
try:
|
||||
import networkx as nx
|
||||
except:
|
||||
print "Failed in import of NetworkX"
|
||||
return None
|
||||
|
||||
m, n = I.shape
|
||||
assert(m == len(node_ids))
|
||||
assert(n == len(edge_ids))
|
||||
weights = []
|
||||
directed = False
|
||||
G = nx.XDiGraph(name=self._name)
|
||||
if isinstance(I, sparse.spmatrix):
|
||||
I = I.tocsr()
|
||||
for ename, col in izip(edge_ids, I.T):
|
||||
if isinstance(I, sparse.spmatrix):
|
||||
node_ind = col.indices
|
||||
w1, w2 = col.data
|
||||
else:
|
||||
node_ind = where(col != 0)[0]
|
||||
w1, w2 = col[node_ind]
|
||||
node1 = node_ids[node_ind[0]]
|
||||
node2 = node_ids[node_ind[1]]
|
||||
if w1 < 0: # w1 is tail
|
||||
directed = True
|
||||
assert(w2 > 0 and (w1 + w2) == 0)
|
||||
G.add_edge(node2, node1, ename)
|
||||
weights.append(w2)
|
||||
else: #w2 is tail or graph is undirected
|
||||
assert(w1 > 0)
|
||||
if w2 < 0:
|
||||
directed = True
|
||||
G.add_edge(node1, node2, ename)
|
||||
weights.append(w1)
|
||||
if not directed:
|
||||
G = G.to_undirected()
|
||||
return G, asarray(weights)
|
||||
|
||||
Dataset._all_dims = set()
|
||||
|
||||
|
||||
class ReverseDict(dict):
|
||||
"""A dictionary which can lookup values by key, and keys by value.
|
||||
|
||||
All values and keys must be hashable, and unique.
|
||||
|
||||
example:
|
||||
>>d = ReverseDict((['a',1],['b',2]))
|
||||
>>print d['a'] --> 1
|
||||
>>print d.reverse[1] --> 'a'
|
||||
"""
|
||||
def __init__(self, *args, **kw):
|
||||
dict.__init__(self, *args, **kw)
|
||||
self.reverse = dict([[v, k] for k, v in self.items()])
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
dict.__setitem__(self, key, value)
|
||||
try:
|
||||
self.reverse[value] = key
|
||||
except:
|
||||
self.reverse = {value:key}
|
||||
|
||||
|
||||
class Selection(dict):
|
||||
"""Handles selected identifiers along each dimension of a dataset"""
|
||||
|
||||
def __init__(self, title='Unnamed Selecton'):
|
||||
self.title = title
|
||||
|
||||
def __getitem__(self, key):
|
||||
if not self.has_key(key):
|
||||
return None
|
||||
return dict.__getitem__(self, key)
|
||||
|
||||
def dims(self):
|
||||
return self.keys()
|
||||
|
||||
def axis_len(self, axis):
|
||||
if self._selection.has_key(axis):
|
||||
return len(self._selection[axis])
|
||||
return 0
|
||||
|
||||
def select(self, axis, labels):
|
||||
self[axis] = labels
|
||||
|
||||
|
||||
def write_ftsv(fd, ds, decimals=7, sep='\t', fmt=None, sp_format=True):
|
||||
"""Writes a dataset in laydi tab separated values (ftsv) form.
|
||||
|
||||
@param fd: An open file descriptor to the output file.
|
||||
@param ds: The dataset to be written.
|
||||
@param decimals: Number of decimals, only supported for dataset.
|
||||
@param fmt: String formating
|
||||
The function handles datasets of these classes:
|
||||
Dataset, CategoryDataset and GraphDataset
|
||||
"""
|
||||
opened = False
|
||||
if isinstance(fd, str):
|
||||
fd = open(fd, 'w')
|
||||
opened = True
|
||||
|
||||
# Write header information
|
||||
if isinstance(ds, CategoryDataset):
|
||||
type = 'category'
|
||||
if fmt == None:
|
||||
fmt = '%d'
|
||||
elif isinstance(ds, GraphDataset):
|
||||
type = 'network'
|
||||
if fmt == None:
|
||||
fmt = '%d'
|
||||
elif isinstance(ds, Dataset):
|
||||
type = 'dataset'
|
||||
if fmt == None:
|
||||
fmt = '%%.%df' % decimals
|
||||
else:
|
||||
fmt = '%%.%d' %decimals + fmt
|
||||
else:
|
||||
raise Exception("Unknown object type")
|
||||
fd.write('# type: %s' %type + '\n')
|
||||
|
||||
for dim in ds.get_dim_name():
|
||||
fd.write("# dimension: %s" % dim)
|
||||
for ident in ds.get_identifiers(dim, sorted=True):
|
||||
fd.write(" " + ident)
|
||||
fd.write("\n")
|
||||
|
||||
fd.write("# name: %s" % ds.get_name() + '\n')
|
||||
# xy-node-positions
|
||||
if type == 'network' and ds.nodepos != None:
|
||||
fd.write("# nodepos:")
|
||||
node_dim = ds.get_dim_name(0)
|
||||
for ident in ds.get_identifiers(node_dim, sorted=True):
|
||||
fd.write(" %s,%s" %ds.nodepos[ident])
|
||||
fd.write("\n")
|
||||
|
||||
# Write data
|
||||
if hasattr(ds, "as_spmatrix") and sp_format == True:
|
||||
m = ds.as_spmatrix()
|
||||
else:
|
||||
m = ds.asarray()
|
||||
if isinstance(m, sparse.spmatrix):
|
||||
_write_sparse_elements(fd, m, fmt, sep)
|
||||
else:
|
||||
_write_elements(fd, m, fmt, sep)
|
||||
|
||||
if opened:
|
||||
fd.close()
|
||||
|
||||
def read_ftsv(fd, sep=None):
|
||||
"""Read a dataset in laydi tab separated values (ftsv) form and return it.
|
||||
|
||||
@param fd: An open file descriptor.
|
||||
@return: A Dataset, CategoryDataset or GraphDataset depending on the information
|
||||
read.
|
||||
"""
|
||||
opened = False
|
||||
if isinstance(fd, str):
|
||||
fd = open(fd)
|
||||
opened = True
|
||||
|
||||
split_re = re.compile('^#\s*(\w+)\s*:\s*(.+)')
|
||||
dimensions = []
|
||||
identifiers = {}
|
||||
type = 'dataset'
|
||||
name = 'Unnamed dataset'
|
||||
sp_format = False
|
||||
nodepos = None
|
||||
# graphtype = 'graph'
|
||||
|
||||
# Read header lines from file.
|
||||
line = fd.readline()
|
||||
while line:
|
||||
m = split_re.match(line)
|
||||
if m:
|
||||
key, val = m.groups()
|
||||
|
||||
# The line is on the form;
|
||||
# dimension: dimname id1 id2 id3 ...
|
||||
if key == 'dimension':
|
||||
values = [v.strip() for v in val.split(' ')]
|
||||
dimensions.append(values[0])
|
||||
identifiers[values[0]] = values[1:]
|
||||
|
||||
# Read type of dataset.
|
||||
# Should be dataset, category, or network
|
||||
elif key == 'type':
|
||||
type = val
|
||||
|
||||
elif key == 'name':
|
||||
name = val
|
||||
|
||||
# storage format
|
||||
# if sp_format is True then use coordinate triplets
|
||||
elif key == 'sp_format':
|
||||
if val in ['False', 'false', '0', 'F', 'f',]:
|
||||
sp_format = False
|
||||
elif val in ['True', 'true', '1', 'T', 't']:
|
||||
sp_format = True
|
||||
else:
|
||||
raise ValueError("sp_format: %s not valid " %sp_format)
|
||||
|
||||
elif key == 'nodepos':
|
||||
node_dim = dimensions[0]
|
||||
idents = identifiers[node_dim]
|
||||
nodepos = {}
|
||||
xys = val.split(" ")
|
||||
for node_id, xy in zip(idents, xys):
|
||||
x, y = map(float, xy.split(","))
|
||||
nodepos[node_id] = (x, y)
|
||||
|
||||
else:
|
||||
break
|
||||
line = fd.readline()
|
||||
|
||||
# Dimensions in the form [(dim1, [id1, id2, id3 ..) ...]
|
||||
dims = [(x, identifiers[x]) for x in dimensions]
|
||||
dim_lengths = [len(identifiers[x]) for x in dimensions]
|
||||
|
||||
# Create matrix and assign element reader
|
||||
if type == 'category':
|
||||
if sp_format:
|
||||
matrix = sparse.lil_matrix(dim_lengths)
|
||||
else:
|
||||
matrix = empty(dim_lengths, dtype='i')
|
||||
else:
|
||||
if sp_format:
|
||||
matrix = sparse.lil_matrix(dim_lengths)
|
||||
else:
|
||||
matrix = empty(dim_lengths)
|
||||
|
||||
if sp_format:
|
||||
matrix = _read_sparse_elements(fd, matrix)
|
||||
else:
|
||||
matrix = _read_elements(fd, matrix)
|
||||
|
||||
|
||||
# Create dataset of specified type
|
||||
if type == 'category':
|
||||
ds = CategoryDataset(matrix, dims, name)
|
||||
elif type == 'network':
|
||||
ds = GraphDataset(matrix, dims, name=name, nodepos=nodepos)
|
||||
else:
|
||||
ds = Dataset(matrix, dims, name)
|
||||
|
||||
if opened:
|
||||
fd.close()
|
||||
|
||||
return ds
|
||||
|
||||
def write_csv(fd, ds, decimals=7, sep='\t'):
|
||||
"""Write a dataset as comma/tab/whatever dilimited data.
|
||||
|
||||
@param fd: An open file descriptor to the output file.
|
||||
@param ds: The dataset to be written.
|
||||
@param decimals: Number of decimals, only supported for dataset.
|
||||
@param sep: Value separator
|
||||
"""
|
||||
|
||||
## Open file if a string is passed instead of a file descriptor
|
||||
opened = False
|
||||
if isinstance(fd, str):
|
||||
fd = open(fd, 'w')
|
||||
opened = True
|
||||
|
||||
## Get data
|
||||
rowdim, coldim = ds.get_dim_name()
|
||||
rowids = ds.get_identifiers(rowdim)
|
||||
colids = ds.get_identifiers(coldim)
|
||||
a = ds.asarray()
|
||||
y, x = a.shape
|
||||
fmt = '%%%if' % decimals
|
||||
|
||||
## Write header
|
||||
fd.write(rowdim)
|
||||
fd.write(sep)
|
||||
for i, id in enumerate(colids):
|
||||
fd.write(id)
|
||||
fd.write(sep)
|
||||
fd.write('\n')
|
||||
|
||||
## Write matrix data
|
||||
for j in range(y):
|
||||
fd.write(rowids[j])
|
||||
fd.write(sep)
|
||||
for i in range(x):
|
||||
fd.write(fmt % (a[j, i],))
|
||||
fd.write(sep)
|
||||
fd.write('\n')
|
||||
|
||||
## If we opened the stream, close it
|
||||
if opened:
|
||||
fd.close()
|
||||
|
||||
def _write_sparse_elements(fd, arr, fmt='%d', sep=None):
|
||||
""" Sparse coordinate format."""
|
||||
fd.write('# sp_format: True\n\n')
|
||||
fmt = '%d %d ' + fmt + '\n'
|
||||
csr = arr.tocsr()
|
||||
for ii in xrange(csr.size):
|
||||
ir, ic = csr.rowcol(ii)
|
||||
data = csr.getdata(ii)
|
||||
fd.write(fmt % (ir, ic, data))
|
||||
|
||||
def _write_elements(fd, arr, fmt='%f', sep='\t'):
|
||||
"""Standard value separated format."""
|
||||
fmt = fmt + sep
|
||||
fd.write('\n')
|
||||
y, x = arr.shape
|
||||
for j in range(y):
|
||||
for i in range(x):
|
||||
fd.write(fmt %arr[j, i])
|
||||
fd.write('\n')
|
||||
|
||||
def _read_elements(fd, arr, sep=None):
|
||||
line = fd.readline()
|
||||
i = 0
|
||||
while line:
|
||||
values = line.split(sep)
|
||||
for j, val in enumerate(values):
|
||||
arr[i,j] = float(val)
|
||||
i += 1
|
||||
line = fd.readline()
|
||||
return arr
|
||||
|
||||
def _read_sparse_elements(fd, arr, sep=None):
|
||||
line = fd.readline()
|
||||
while line:
|
||||
i, j, val = line.split()
|
||||
arr[int(i),int(j)] = float(val)
|
||||
line = fd.readline()
|
||||
return arr.tocsr()
|
||||
|
@ -4,11 +4,10 @@ import gtk
|
||||
import sys
|
||||
import os
|
||||
import gobject
|
||||
from system import logger, project, workflow
|
||||
import workflows
|
||||
import logger, projectview, workflow
|
||||
|
||||
DATADIR = os.path.dirname(sys.modules['system'].__file__)
|
||||
GLADEFILENAME = os.path.join(DATADIR, 'fluents.glade')
|
||||
DATADIR = os.path.dirname(sys.modules['laydi'].__file__)
|
||||
GLADEFILENAME = os.path.join(DATADIR, 'laydi.glade')
|
||||
|
||||
class CreateProjectDruid(gtk.Window):
|
||||
"""A druid for creating a new project.
|
||||
@ -17,9 +16,8 @@ class CreateProjectDruid(gtk.Window):
|
||||
Workflow, and asks the user to select one of these. A new project of
|
||||
the selected class is added to the application."""
|
||||
|
||||
def __init__(self, app):
|
||||
def __init__(self):
|
||||
gtk.Window.__init__(self)
|
||||
self.app = app
|
||||
self.widget_tree = gtk.glade.XML(GLADEFILENAME, 'new_project_druid')
|
||||
self.workflows = self.make_workflow_list()
|
||||
self.selected = None
|
||||
@ -63,10 +61,12 @@ class CreateProjectDruid(gtk.Window):
|
||||
|
||||
def finish(self, *rest):
|
||||
tree, it = self['workflow_list'].get_selection().get_selected()
|
||||
wf = self.workflows.get_value(it, 1)
|
||||
proj = project.Project()
|
||||
self.app.set_workflow(wf(self.app))
|
||||
self.app.set_project(proj)
|
||||
wf_class = self.workflows.get_value(it, 1)
|
||||
proj = projectview.ProjectView()
|
||||
main.set_workflow(wf_class())
|
||||
# self.app.set_workflow(wf(self.app))
|
||||
# self.app.set_project(proj)
|
||||
main.set_projectview(proj)
|
||||
self.hide()
|
||||
self.destroy()
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
<widget class="GnomeApp" id="appwindow">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes">Fluent</property>
|
||||
<property name="title" translatable="yes">Laydi</property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
<property name="modal">False</property>
|
||||
@ -101,78 +101,6 @@
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="edit1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock_item">GNOMEUIINFO_MENU_EDIT_TREE</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenu" id="edit1_menu">
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="cut1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock_item">GNOMEUIINFO_MENU_CUT_ITEM</property>
|
||||
<signal name="activate" handler="on_cut1_activate" last_modification_time="Thu, 13 Apr 2006 11:24:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="copy1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock_item">GNOMEUIINFO_MENU_COPY_ITEM</property>
|
||||
<signal name="activate" handler="on_copy1_activate" last_modification_time="Thu, 13 Apr 2006 11:24:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="paste1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock_item">GNOMEUIINFO_MENU_PASTE_ITEM</property>
|
||||
<signal name="activate" handler="on_paste1_activate" last_modification_time="Thu, 13 Apr 2006 11:24:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="clear1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock_item">GNOMEUIINFO_MENU_CLEAR_ITEM</property>
|
||||
<signal name="activate" handler="on_clear1_activate" last_modification_time="Thu, 13 Apr 2006 11:24:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkSeparatorMenuItem" id="separator2">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="properties1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock_item">GNOMEUIINFO_MENU_PROPERTIES_ITEM</property>
|
||||
<signal name="activate" handler="on_properties1_activate" last_modification_time="Thu, 13 Apr 2006 11:24:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkSeparatorMenuItem" id="separator3">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="preferences1">
|
||||
<property name="visible">True</property>
|
||||
<property name="stock_item">GNOMEUIINFO_MENU_PREFERENCES_ITEM</property>
|
||||
<signal name="activate" handler="on_preferences1_activate" last_modification_time="Thu, 13 Apr 2006 11:24:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="view1">
|
||||
<property name="visible">True</property>
|
||||
@ -181,10 +109,46 @@
|
||||
<child>
|
||||
<widget class="GtkMenu" id="view1_menu">
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="navigator1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Navigator</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">True</property>
|
||||
<signal name="activate" handler="on_navigator1_activate" last_modification_time="Thu, 06 Dec 2007 00:03:35 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="workflow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Workflow</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">True</property>
|
||||
<signal name="activate" handler="on_workflow1_activate" last_modification_time="Thu, 06 Dec 2007 00:03:35 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckMenuItem" id="information1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">_Information</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">True</property>
|
||||
<signal name="activate" handler="on_information1_activate" last_modification_time="Thu, 06 Dec 2007 00:03:35 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkSeparatorMenuItem" id="separator5">
|
||||
<property name="visible">True</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="large_view1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Large View</property>
|
||||
<property name="label" translatable="yes">One plot</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_large_view1_activate" last_modification_time="Fri, 26 May 2006 12:15:59 GMT"/>
|
||||
<accelerator key="plus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
@ -194,7 +158,7 @@
|
||||
<child>
|
||||
<widget class="GtkMenuItem" id="small_view1">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Small View</property>
|
||||
<property name="label" translatable="yes">All plots</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_small_view1_activate" last_modification_time="Fri, 26 May 2006 12:15:59 GMT"/>
|
||||
<accelerator key="minus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
|
||||
@ -270,7 +234,7 @@
|
||||
<child>
|
||||
<widget class="GtkImageMenuItem" id="index1">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Open the fluents documentation.</property>
|
||||
<property name="tooltip" translatable="yes">Open the laydi documentation.</property>
|
||||
<property name="label" translatable="yes">_Index</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="on_index1_activate" last_modification_time="Thu, 27 Apr 2006 09:21:48 GMT"/>
|
||||
@ -320,59 +284,13 @@
|
||||
<property name="shadow_type">GTK_SHADOW_OUT</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkToolbar" id="toolbar1">
|
||||
<widget class="GtkToolbar" id="toolbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
|
||||
<property name="toolbar_style">GTK_TOOLBAR_ICONS</property>
|
||||
<property name="tooltips">True</property>
|
||||
<property name="show_arrow">False</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkToolButton" id="button_new">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Ny fil</property>
|
||||
<property name="stock_id">gtk-new</property>
|
||||
<property name="visible_horizontal">True</property>
|
||||
<property name="visible_vertical">True</property>
|
||||
<property name="is_important">False</property>
|
||||
<signal name="clicked" handler="on_button_new_clicked" last_modification_time="Fri, 21 Apr 2006 13:46:38 GMT"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkToolButton" id="toolbutton2">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Åpne fil</property>
|
||||
<property name="stock_id">gtk-open</property>
|
||||
<property name="visible_horizontal">True</property>
|
||||
<property name="visible_vertical">True</property>
|
||||
<property name="is_important">False</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkToolButton" id="toolbutton3">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Lagre fil</property>
|
||||
<property name="stock_id">gtk-save</property>
|
||||
<property name="visible_horizontal">True</property>
|
||||
<property name="visible_vertical">True</property>
|
||||
<property name="is_important">False</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkToolButton" id="zoom_in_button">
|
||||
<property name="visible">True</property>
|
||||
@ -497,12 +415,23 @@
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="Custom" id="navigator_view">
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow11">
|
||||
<property name="visible">True</property>
|
||||
<property name="creation_function">create_navigator_view</property>
|
||||
<property name="int1">0</property>
|
||||
<property name="int2">0</property>
|
||||
<property name="last_modification_time">Sat, 15 Apr 2006 12:34:23 GMT</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
|
||||
<property name="shadow_type">GTK_SHADOW_IN</property>
|
||||
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
|
||||
|
||||
<child>
|
||||
<widget class="Custom" id="navigator_view">
|
||||
<property name="visible">True</property>
|
||||
<property name="creation_function">create_navigator_view</property>
|
||||
<property name="int1">0</property>
|
||||
<property name="int2">0</property>
|
||||
<property name="last_modification_time">Sat, 15 Apr 2006 12:34:23 GMT</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
@ -967,15 +896,16 @@ The functions of the workflow you select will be available on the right part of
|
||||
</widget>
|
||||
|
||||
<widget class="GtkAboutDialog" id="aboutdialog">
|
||||
<property name="border_width">5</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="destroy_with_parent">True</property>
|
||||
<property name="name" translatable="yes">Fluents</property>
|
||||
<property name="copyright" translatable="yes">Copyright (C) 2006 the Fluents Team
|
||||
<property name="name" translatable="yes">Laydi</property>
|
||||
<property name="copyright" translatable="yes">Copyright (C) 2006 the Laydi Team
|
||||
Released under the GNU General Public Licence
|
||||
</property>
|
||||
<property name="comments" translatable="yes">From WordNet (r) 2.0 [wn]: fluent (adj)
|
||||
<property name="comments" translatable="yes">From WordNet (r) 2.0 [wn]: laydi (adj)
|
||||
|
||||
1: easy and graceful in shape; "a yacht with long, fluent curves"
|
||||
1: easy and graceful in shape; "a yacht with long, laydi curves"
|
||||
|
||||
2: smooth and unconstrained in movement; "a long, smooth stride"; "the fluid motion of a cat"; "the liquid grace of a ballerina"; "liquid prose" [syn:{flowing}, {fluid}, {liquid}, {smooth}]
|
||||
|
||||
@ -983,9 +913,9 @@ Released under the GNU General Public Licence
|
||||
|
||||
|
||||
|
||||
From the Fluents team: fluents (sw)
|
||||
From the Laydi team: laydi (sw)
|
||||
|
||||
1: fluent software for lightweight data analysis.</property>
|
||||
1: laydi software for lightweight data analysis.</property>
|
||||
<property name="license" translatable="yes">GNU GENERAL PUBLIC LICENSE
|
||||
|
||||
|
||||
@ -1282,8 +1212,8 @@ NO WARRANTY
|
||||
END OF TERMS AND CONDITIONS
|
||||
</property>
|
||||
<property name="wrap_license">False</property>
|
||||
<property name="website">https://dev.pvv.ntnu.no/projects/fluent</property>
|
||||
<property name="website_label" translatable="yes">The Fluent project website</property>
|
||||
<property name="website">https://dev.pvv.ntnu.no/projects/laydi</property>
|
||||
<property name="website_label" translatable="yes">The Laydi project website</property>
|
||||
<property name="authors">Arnar Flatberg
|
||||
Einar Ryeng
|
||||
Truls A. Tangstad</property>
|
401
laydi/laydi.py
Normal file
@ -0,0 +1,401 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
import pygtk
|
||||
pygtk.require('2.0')
|
||||
import gobject
|
||||
import gtk
|
||||
import gtk.gdk
|
||||
import gtk.glade
|
||||
import gnome
|
||||
import gnome.ui
|
||||
import scipy
|
||||
import pango
|
||||
import projectview, workflow, dataset, view, navigator, dialogs, selections, plots, main
|
||||
from logger import logger, LogView
|
||||
|
||||
|
||||
PROGRAM_NAME = 'laydi'
|
||||
VERSION = '0.1.0'
|
||||
DATADIR = os.path.join(main.PYDIR, 'laydi')
|
||||
#ICONDIR = os.path.join(DATADIR,"..","icons")
|
||||
ICONDIR = main.ICONDIR
|
||||
GLADEFILENAME = os.path.join(main.PYDIR, 'laydi/laydi.glade')
|
||||
_icon_mapper = {dataset.Dataset: 'dataset',
|
||||
dataset.CategoryDataset: 'category_dataset',
|
||||
dataset.GraphDataset: 'graph_dataset',
|
||||
plots.Plot: 'line_plot'}
|
||||
|
||||
class IconFactory:
|
||||
"""Factory for icons that ensures that each icon is only loaded once."""
|
||||
|
||||
def __init__(self, path):
|
||||
self._path = path
|
||||
self._icons = {}
|
||||
|
||||
def get(self, iconname):
|
||||
"""Returns the gdk loaded PixBuf for the given icon.
|
||||
Reads the icon from file if necessary."""
|
||||
|
||||
# if iconname isnt a string, try to autoconvert
|
||||
if not isinstance(iconname, str):
|
||||
for cls in _icon_mapper.keys():
|
||||
if isinstance(iconname, cls):
|
||||
iconname = _icon_mapper[cls]
|
||||
|
||||
if self._icons.has_key(iconname):
|
||||
return self._icons[iconname]
|
||||
|
||||
icon_fname = os.path.join(self._path, '%s.png' % iconname)
|
||||
icon = gtk.gdk.pixbuf_new_from_file(icon_fname)
|
||||
self._icons[iconname] = icon
|
||||
return icon
|
||||
|
||||
icon_factory = IconFactory(ICONDIR)
|
||||
|
||||
class TableSizeSelection(gtk.Window):
|
||||
|
||||
def __init__(self):
|
||||
self._SIZE = size = 5
|
||||
gtk.Window.__init__(self, gtk.WINDOW_POPUP)
|
||||
self._table = gtk.Table(size, size, True)
|
||||
self._items = []
|
||||
|
||||
## Create a 3x3 table of EventBox object, doubly stored because
|
||||
## gtk.Table does not support indexed retrieval.
|
||||
|
||||
for y in range(size):
|
||||
line = []
|
||||
for x in range(size):
|
||||
ebox = gtk.EventBox()
|
||||
ebox.add(gtk.Frame())
|
||||
ebox.set_size_request(20, 20)
|
||||
ebox.set_visible_window(True)
|
||||
self._table.attach(ebox, x, x+1, y, y+1, gtk.FILL, gtk.FILL)
|
||||
line.append(ebox)
|
||||
self._items.append(line)
|
||||
|
||||
self.set_border_width(5)
|
||||
self.add(self._table)
|
||||
self.connect_signals()
|
||||
|
||||
def _get_child_pos(self, child):
|
||||
size = self._SIZE
|
||||
for x in range(size):
|
||||
for y in range(size):
|
||||
if self._items[y][x] == child:
|
||||
return (x, y)
|
||||
return None
|
||||
|
||||
def connect_signals(self):
|
||||
size = self._SIZE
|
||||
for x in range(size):
|
||||
for y in range(size):
|
||||
self._items[y][x].add_events(gtk.gdk.ENTER_NOTIFY_MASK)
|
||||
self._items[y][x].connect("enter-notify-event",
|
||||
self._on_enter_notify)
|
||||
self._items[y][x].connect("button-release-event",
|
||||
self._on_button_release)
|
||||
|
||||
def _on_enter_notify(self, widget, event):
|
||||
size = self._SIZE
|
||||
x, y = self._get_child_pos(widget)
|
||||
for i in range(size):
|
||||
for j in range(size):
|
||||
if i <= x and j <= y:
|
||||
self._items[j][i].set_state(gtk.STATE_SELECTED)
|
||||
else:
|
||||
self._items[j][i].set_state(gtk.STATE_NORMAL)
|
||||
self.x = x
|
||||
self.y = y
|
||||
|
||||
def _on_button_release(self, widget, event):
|
||||
size = self._SIZE
|
||||
self.emit('table-size-set', self.x+1, self.y+1)
|
||||
self.hide_all()
|
||||
|
||||
for x in range(size):
|
||||
for y in range(size):
|
||||
self._items[y][x].set_state(gtk.STATE_NORMAL)
|
||||
|
||||
|
||||
class ViewFrameToolButton (gtk.ToolItem):
|
||||
|
||||
def __init__(self):
|
||||
gtk.ToolItem.__init__(self)
|
||||
|
||||
fname = os.path.join(ICONDIR, "table_size.png")
|
||||
image = gtk.Image()
|
||||
image.set_from_file(fname)
|
||||
|
||||
self._button = gtk.Button()
|
||||
self._button.set_image(image)
|
||||
self._button.set_property("can-focus", False)
|
||||
|
||||
eb = gtk.EventBox()
|
||||
eb.add(self._button)
|
||||
self.add(eb)
|
||||
self._item = TableSizeSelection()
|
||||
self._button.connect("button-press-event", self._on_show_menu)
|
||||
image.show()
|
||||
self._image = image
|
||||
|
||||
self._item.connect("table-size-set", self._on_table_size_set)
|
||||
self._button.set_relief(gtk.RELIEF_NONE)
|
||||
self.show_all()
|
||||
|
||||
def _on_show_menu(self, widget, event):
|
||||
x, y = self._image.window.get_origin()
|
||||
x2, y2, w, h, b = self._image.window.get_geometry()
|
||||
|
||||
self._item.move(x, y+h)
|
||||
self._item.show_all()
|
||||
|
||||
def _on_table_size_set(self, widget, width, height):
|
||||
main.application['main_view'].resize_table(width, height)
|
||||
|
||||
|
||||
class LaydiApp:
|
||||
|
||||
def __init__(self): # Application variables
|
||||
self.current_data = None
|
||||
self._last_view = None
|
||||
self._plot_toolbar = None
|
||||
self._toolbar_state = None
|
||||
|
||||
gtk.glade.set_custom_handler(self.custom_object_factory)
|
||||
self.widget_tree = gtk.glade.XML(GLADEFILENAME, 'appwindow')
|
||||
# self.workflow = wf
|
||||
|
||||
self.idlist_crt = selections.IdListController(self['identifier_list'])
|
||||
self.sellist_crt = selections.SelectionListController(self['selection_tree'],
|
||||
self.idlist_crt)
|
||||
self.dimlist_crt = selections.DimListController(self['dim_list'],
|
||||
self.sellist_crt)
|
||||
self.sellist_crt.set_dimlist_controller(self.dimlist_crt)
|
||||
|
||||
def init_gui(self):
|
||||
self['appwindow'].set_size_request(800, 600)
|
||||
|
||||
# Set up workflow
|
||||
self.wf_view = workflow.WorkflowView(main.workflow)
|
||||
self.wf_view.show()
|
||||
self['workflow_vbox'].pack_end(self.wf_view)
|
||||
|
||||
self._wf_menu = workflow.WorkflowMenu(main.workflow)
|
||||
self._wf_menu.show()
|
||||
wf_menuitem = gtk.MenuItem('Fu_nctions')
|
||||
wf_menuitem.set_submenu(self._wf_menu)
|
||||
wf_menuitem.show()
|
||||
|
||||
self['menubar1'].insert(wf_menuitem, 2)
|
||||
|
||||
# Connect signals
|
||||
signals = {'on_quit1_activate' : (gtk.main_quit),
|
||||
'on_appwindow_delete_event' : (gtk.main_quit),
|
||||
'on_zoom_in_button_clicked' : (self.on_single_view),
|
||||
'on_zoom_out_button_clicked' : (self.on_multiple_view),
|
||||
'on_new1_activate' : (self.on_create_project),
|
||||
'on_button_new_clicked' : (self.on_create_project),
|
||||
'on_workflow_refresh_clicked' : (self.on_workflow_refresh_clicked),
|
||||
'on_index1_activate' : (self.on_help_index),
|
||||
'on_about1_activate' : (self.on_help_about),
|
||||
'on_report_bug1_activate' : (self.on_help_report_bug),
|
||||
'on_small_view1_activate' : (self.on_multiple_view),
|
||||
'on_large_view1_activate' : (self.on_single_view),
|
||||
|
||||
'on_left1_activate' : (self.on_left),
|
||||
'on_right1_activate' : (self.on_right),
|
||||
'on_up1_activate' : (self.on_up),
|
||||
'on_down1_activate' : (self.on_down),
|
||||
|
||||
'on_navigator1_activate' : (self.on_show_navigator),
|
||||
'on_workflow1_activate' : (self.on_show_workflow),
|
||||
'on_information1_activate' : (self.on_show_infopane),
|
||||
}
|
||||
self.widget_tree.signal_autoconnect(signals)
|
||||
|
||||
self['main_view'].connect('view-changed', self.on_view_changed)
|
||||
|
||||
# Log that we've set up the app now
|
||||
logger.debug('Program started')
|
||||
|
||||
# Add ViewFrame table size to toolbar
|
||||
tb = ViewFrameToolButton()
|
||||
self['toolbar'].add(tb)
|
||||
|
||||
def set_projectview(self, proj):
|
||||
logger.notice('Welcome to your new project. Grasp That Data!')
|
||||
self.navigator_view.add_projectview(proj)
|
||||
self.dimlist_crt.set_projectview(proj)
|
||||
self.sellist_crt.set_projectview(proj)
|
||||
|
||||
def set_workflow(self, workflow):
|
||||
main.workflow = workflow
|
||||
self.wf_view.set_workflow(main.workflow)
|
||||
|
||||
def show(self):
|
||||
self.init_gui()
|
||||
|
||||
def change_plot(self, plot):
|
||||
"""Sets the plot in the currently active ViewFrame. If the plot is
|
||||
already shown in another ViewFrame it will be moved from there."""
|
||||
# Set current selection in the plot before showing it.
|
||||
plot.selection_changed(None, main.projectview.get_selection())
|
||||
|
||||
self['main_view'].insert_view(plot)
|
||||
self._update_toolbar(plot)
|
||||
|
||||
def change_plots(self, plots):
|
||||
"""Changes all plots."""
|
||||
self['main_view'].set_all_plots(plots)
|
||||
v = self.get_active_view_frame().get_view()
|
||||
self._update_toolbar(v)
|
||||
|
||||
def get_active_view_frame(self):
|
||||
return self['main_view'].get_active_view_frame()
|
||||
|
||||
def _update_toolbar(self, view):
|
||||
"""Set the plot specific toolbar to the toolbar of the currently
|
||||
active plot."""
|
||||
|
||||
# don't do anything on no change
|
||||
if self._last_view == view:
|
||||
return
|
||||
self._last_view = view
|
||||
|
||||
logger.debug("view changed to %s" % view)
|
||||
|
||||
window = self['plot_toolbar_dock']
|
||||
if self._plot_toolbar:
|
||||
toolbar_state = self._plot_toolbar.get_mode()
|
||||
window.remove(self._plot_toolbar)
|
||||
else:
|
||||
toolbar_state = "default"
|
||||
|
||||
if view:
|
||||
self._plot_toolbar = view.get_toolbar()
|
||||
self._plot_toolbar.set_mode(toolbar_state)
|
||||
else:
|
||||
self._plot_toolbar = None
|
||||
|
||||
if self._plot_toolbar:
|
||||
window.add(self._plot_toolbar)
|
||||
|
||||
# Methods to create GUI widgets from CustomWidgets in the glade file.
|
||||
# The custom_object_factory calls other functions to generate specific
|
||||
# widgets.
|
||||
|
||||
def custom_object_factory(self, glade, fun_name, widget_name, s1, s2, i1, i2):
|
||||
"Called by the glade file reader to create custom GUI widgets."
|
||||
handler = getattr(self, fun_name)
|
||||
return handler(s1, s2, i1, i2)
|
||||
|
||||
def create_logview(self, str1, str2, int1, int2):
|
||||
self.log_view = LogView(logger)
|
||||
self.log_view.show()
|
||||
return self.log_view
|
||||
|
||||
def create_main_view(self, str1, str2, int1, int2):
|
||||
self.main_view = view.MainView()
|
||||
self.main_view.show()
|
||||
return self.main_view
|
||||
|
||||
def create_navigator_view(self, str1, str2, int1, int2):
|
||||
self.navigator_view = navigator.NavigatorView()
|
||||
self.navigator_view.show()
|
||||
return self.navigator_view
|
||||
|
||||
def create_dim_list(self, str1, str2, int1, int2):
|
||||
self.dim_list = selections.DimList()
|
||||
self.dim_list.show()
|
||||
return self.dim_list
|
||||
|
||||
def create_selection_tree(self, str1, str2, int1, int2):
|
||||
self.selection_tree = selections.SelectionTree()
|
||||
self.selection_tree.show()
|
||||
return self.selection_tree
|
||||
|
||||
def create_identifier_list(self, str1, str2, int1, int2):
|
||||
self.identifier_list = selections.IdentifierList()
|
||||
self.identifier_list.show()
|
||||
return self.identifier_list
|
||||
|
||||
def __getitem__(self, key):
|
||||
return self.widget_tree.get_widget(key)
|
||||
|
||||
# Event handlers.
|
||||
# These methods are called by the gtk framework in response to events and
|
||||
# should not be called directly.
|
||||
|
||||
def on_single_view(self, *ignored):
|
||||
self['main_view'].goto_large()
|
||||
|
||||
def on_multiple_view(self, *ignored):
|
||||
self['main_view'].goto_small()
|
||||
|
||||
def on_create_project(self, *rest):
|
||||
d = dialogs.CreateProjectDruid(self)
|
||||
d.run()
|
||||
|
||||
def on_help_about(self, *rest):
|
||||
widget_tree = gtk.glade.XML(GLADEFILENAME, 'aboutdialog')
|
||||
about = widget_tree.get_widget('aboutdialog')
|
||||
about.run()
|
||||
|
||||
def on_help_index(self, *ignored):
|
||||
gnome.help_display_uri('https://dev.pvv.org/projects/laydi/wiki/help')
|
||||
|
||||
def on_help_report_bug(self, *ignored):
|
||||
gnome.help_display_uri('https://dev.pvv.org/projects/laydi/newticket')
|
||||
|
||||
def on_workflow_refresh_clicked(self, *ignored):
|
||||
try:
|
||||
reload(sys.modules[main.workflow.__class__.__module__])
|
||||
except Exception, e:
|
||||
logger.warning('Cannot reload workflow')
|
||||
logger.warning(e)
|
||||
else:
|
||||
logger.notice('Successfully reloaded workflow')
|
||||
|
||||
def on_view_changed(self, widget, vf):
|
||||
self._update_toolbar(vf.get_view())
|
||||
|
||||
def on_show_navigator(self, item):
|
||||
if item.get_active():
|
||||
self['data_vbox'].show()
|
||||
else:
|
||||
self['data_vbox'].hide()
|
||||
|
||||
def on_show_workflow(self, item):
|
||||
if item.get_active():
|
||||
self['workflow_vbox'].show()
|
||||
else:
|
||||
self['workflow_vbox'].hide()
|
||||
|
||||
def on_show_infopane(self, item):
|
||||
if item.get_active():
|
||||
self['bottom_notebook'].show()
|
||||
else:
|
||||
self['bottom_notebook'].hide()
|
||||
|
||||
def on_left(self, item):
|
||||
self.main_view.move_focus_left()
|
||||
|
||||
def on_right(self, item):
|
||||
self.main_view.move_focus_right()
|
||||
|
||||
def on_up(self, item):
|
||||
self.main_view.move_focus_up()
|
||||
|
||||
def on_down(self, item):
|
||||
self.main_view.move_focus_down()
|
||||
|
||||
|
||||
gobject.signal_new('table-size-set', TableSizeSelection,
|
||||
gobject.SIGNAL_RUN_LAST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_INT, gobject.TYPE_INT))
|
||||
|
284
laydi/lib/R_utils.py
Normal file
@ -0,0 +1,284 @@
|
||||
"""A collection of functions that use R.
|
||||
|
||||
Most functions use libraries from bioconductor
|
||||
|
||||
depends on:
|
||||
(not updated)
|
||||
-- bioconductor min. install
|
||||
-- hgu133a
|
||||
-- hgu133plus2
|
||||
|
||||
"""
|
||||
|
||||
import scipy
|
||||
import Numeric as N
|
||||
import rpy
|
||||
silent_eval = rpy.with_mode(rpy.NO_CONVERSION, rpy.r)
|
||||
|
||||
def get_locusid(probelist=None,org="hgu133a"):
|
||||
"""Returns a dictionary of locus link id for each affy probeset
|
||||
and reverse mapping
|
||||
|
||||
innput:
|
||||
[probelist] -- probelist of affy probesets
|
||||
[org] -- chip type (organism)
|
||||
|
||||
out:
|
||||
aff2loc, loc2aff
|
||||
|
||||
The mapping is one-to-one for affy->locus_id
|
||||
However, there are several affy probesets for one locus_id
|
||||
|
||||
From bioc-mail-archive: BioC takes the GeneBank ids associated
|
||||
with the probes (provided by the manufacture) and then maps them
|
||||
to Entrez Gene ids using data from UniGene, Entrez Gene, and other
|
||||
available data sources we trust. The Entrez Gene id a probe is
|
||||
assigned to is determined by votes from all the sources used. If
|
||||
there is no agreement among the sources, we take the smallest
|
||||
Entrez Gene id.
|
||||
"""
|
||||
silent_eval("library("+org+")")
|
||||
silent_eval('locus_ids = as.list('+org+'LOCUSID)')
|
||||
silent_eval('pp<-as.list(locus_ids[!is.na(locus_ids)])')
|
||||
loc_ids = rpy.r("pp")
|
||||
for id in loc_ids:
|
||||
loc_ids[id] = str(loc_ids[id])
|
||||
|
||||
aff2loc = {}
|
||||
if probelist:
|
||||
for pid in probelist:
|
||||
try:
|
||||
aff2loc[pid]=loc_ids[pid]
|
||||
except:
|
||||
print "Affy probeset: %s has no locus id" %pid
|
||||
print "\nCONVERSION SUMMARY:\n \
|
||||
Number of probesets input %s \n \
|
||||
Number of translated locus ids: %s \n \
|
||||
Number of missings: %s" %(len(probelist),len(aff2loc),len(probelist)-len(aff2loc))
|
||||
else:
|
||||
aff2loc = loc_ids
|
||||
# reverse mapping
|
||||
loc2aff = {}
|
||||
for k,v in aff2loc.items():
|
||||
if loc2aff.has_key(v):
|
||||
loc2aff[v].append(k)
|
||||
else:
|
||||
loc2aff[v]=[k]
|
||||
|
||||
return aff2loc,loc2aff
|
||||
|
||||
def get_kegg_paths(org="hgu133plus2",id_type='aff',probelist=None):
|
||||
"""Returns a dictionary of KEGG maps.
|
||||
|
||||
input:
|
||||
org -- chip_type (see bioconductor.org)
|
||||
id_type -- id ['aff','loc']
|
||||
|
||||
key: affy_id, value = list of kegg map id
|
||||
example: '65884_at': ['00510', '00513']
|
||||
"""
|
||||
silent_eval("library("+org+")")
|
||||
silent_eval('xx<-as.list('+org+'PATH)')
|
||||
silent_eval('xp <- xx[!is.na(xx)]')
|
||||
aff2path = rpy.r("xp")
|
||||
dummy = rpy.r("xx")
|
||||
|
||||
if id_type=='loc':
|
||||
aff2loc,loc2aff = get_locusid(org=org)
|
||||
loc2path = {}
|
||||
for id,path in aff2path.items():
|
||||
if loc2path.has_key(id):
|
||||
pp = [path.append(i) for i in loc2path[id]]
|
||||
print "Found duplicate in path: %s" %path
|
||||
loc2path[aff2loc[id]]=path
|
||||
aff2path = loc2path
|
||||
out = {}
|
||||
|
||||
if probelist:
|
||||
for pid in probelist:
|
||||
try:
|
||||
out[pid]=aff2path[pid]
|
||||
except:
|
||||
print "Could not find id: %s" %pid
|
||||
else:
|
||||
out = aff2path
|
||||
for k,v in out.items():
|
||||
# if string convert tol list
|
||||
try:
|
||||
v + ''
|
||||
out[k] = [v]
|
||||
except:
|
||||
out[k] = v
|
||||
|
||||
return out
|
||||
|
||||
def get_probe_list(org="hgu133plus2"):
|
||||
rpy.r.library(org)
|
||||
silent_eval('probe_list<-ls('+org+'ACCNUM )')
|
||||
pl = rpy.r("probe_list")
|
||||
return pl
|
||||
|
||||
def get_GO_from_aff(org="hgu133plus2",id_type='aff',probelist=None):
|
||||
"""Returns a dictionary of GO terms.
|
||||
|
||||
input:
|
||||
org -- chip_type (see bioconductor.org)
|
||||
id_type -- id ['aff','loc']
|
||||
|
||||
key:
|
||||
example: '65884_at':
|
||||
"""
|
||||
silent_eval("library("+org+")")
|
||||
silent_eval('xx<-as.list('+org+'GO)')
|
||||
silent_eval('xp <- xx[!is.na(xx)]')
|
||||
aff2path = rpy.r("xp")
|
||||
dummy = rpy.r("xx")
|
||||
if id_type=='loc':
|
||||
LOC = get_locusid(org=org)
|
||||
loc2path = {}
|
||||
for id,path in aff2path.items():
|
||||
if loc2path.has_key(id):
|
||||
pp = [path.append(i) for i in loc2path[id]]
|
||||
print "Found duplicate in path: %s" %path
|
||||
loc2path[LOC[id]]=path
|
||||
aff2path = loc2path
|
||||
out = {}
|
||||
if probelist:
|
||||
for pid in probelist:
|
||||
try:
|
||||
out[pid]=aff2path[pid]
|
||||
except:
|
||||
print "Could not find id: %s" %pid
|
||||
return aff2path
|
||||
|
||||
def get_kegg_as_category(org="hgu133plus2",id_type='aff',probelist=None):
|
||||
"""Returns kegg pathway memberships in dummy (1/0) matrix (genes x maps)
|
||||
|
||||
"""
|
||||
kegg = get_kegg_paths(org=org, id_type=id_type, probelist=probelist)
|
||||
maps = set()
|
||||
for kpth in kegg.values():
|
||||
maps.update(kpth)
|
||||
|
||||
n_maps = len(maps)
|
||||
n_genes = len(kegg)
|
||||
gene2index = dict(zip(kegg.keys(), range(n_genes)))
|
||||
map2index = dict(zip(maps, range(n_maps)))
|
||||
C = scipy.zeros((n_genes, n_maps))
|
||||
for k,v in kegg.items():
|
||||
for m in v:
|
||||
C[gene2index[k], map2index[m]]=1
|
||||
|
||||
return C, list(maps), kegg.keys()
|
||||
|
||||
def impute(X, k=10, rowmax=0.5, colmax=0.8, maxp=1500, seed=362436069):
|
||||
"""
|
||||
A function to impute missing expression data, using nearest
|
||||
neighbor averaging. (from bioconductors impute)
|
||||
|
||||
input:
|
||||
|
||||
data: An expression matrix with genes in the rows, samples in the
|
||||
columns
|
||||
|
||||
k: Number of neighbors to be used in the imputation (default=10)
|
||||
|
||||
rowmax: The maximum percent missing data allowed in any row (default
|
||||
50%). For any rows with more than 'rowmax'% missing are
|
||||
imputed using the overall mean per sample.
|
||||
|
||||
colmax: The maximum percent missing data allowed in any column
|
||||
(default 80%). If any column has more than 'colmax'% missing
|
||||
data, the program halts and reports an error.
|
||||
|
||||
maxp: The largest block of genes imputed using the knn algorithm
|
||||
inside 'impute.knn' (default 1500); larger blocks are divided
|
||||
by two-means clustering (recursively) prior to imputation. If
|
||||
'maxp=p', only knn imputation is done
|
||||
|
||||
seed: The seed used for the random number generator (default
|
||||
362436069) for reproducibility.
|
||||
|
||||
|
||||
|