405 Commits

Author SHA1 Message Date
d52dbbd9be Relocate wiki from trac 2023-01-25 13:36:26 +01:00
36146893e6 Fixed selections. points_inside_poly is deprecated, and all calls are therefore
rewritten to use Path.contains_points.
2014-04-04 19:16:59 +00:00
2b4da82165 Corrected URL to source code. 2013-10-17 08:24:43 +00:00
c612724378 Fixed bug that caused right-click in the identifier list to change the list's selection status. 2013-09-17 11:11:13 +00:00
1f2055d6b7 * Added selection directories. The selection/ directory in a project
should contain subdirectories per dimension. Selections are files within
  these subdirectories ending in .sel
* Renamed Universe.__getent__ to Universe.__getitem__
2012-01-25 18:13:54 +00:00
4dcbff3647 Added reference to Selector objects to avoid the object from going to GC.
This change is triggered by changes to mpl, but should not break with
old versions.
2011-10-25 15:15:01 +00:00
660f649670 Some functions have been moved from scipy to numpy. Updated import statements to reflect this. 2011-10-21 22:04:11 +00:00
d0f307c135 Removed debug print statements. 2011-07-07 13:11:12 +00:00
4ec79d2d9a Short code cleanup. 2011-06-02 15:14:21 +00:00
1845fe2ba0 Added rudimentary loading of annotation files. 2011-06-02 14:38:01 +00:00
bad06e0bb9 Removed unused import of the dataset module. 2011-06-02 14:07:42 +00:00
5c65dc7e2c Removed old comments. 2011-06-02 13:22:25 +00:00
1c0ea0caee Automatically load all datasets in the root data directory and add them to
navigator when project is loaded.

Recursion down in data hierarchy is not yet implemented.
2011-06-02 13:16:10 +00:00
e21cd7b323 More helpful error message if no project is specified. 2011-03-28 21:40:15 +00:00
6be624e872 Script to generate mapping files between identifiers found in tab separated files. 2011-03-24 08:46:17 +00:00
f1b3009f11 Fixed a bug in the output 2011-03-24 08:05:49 +00:00
19163988e3 Example project. 2011-03-17 10:49:08 +00:00
11fc34b1e3 Fixes #23 - Preserving the order of samples in subdata. 2011-03-08 09:27:06 +00:00
ed486ddf2e Changed default directories for:
* Load dataset
 * Import annotations
 * Export annotations
to the correct directories in the current project.
2011-03-07 16:19:45 +00:00
ec71cbd7d7 Fixes previous broken commit. 2011-03-06 23:11:29 +00:00
dc8da8823e Partial fix to #22. Laydi will require a project directory to run. If the
project directory does not exist, i.e. if a new project should be created, the
new -n switch is required. New syntax to run laydi is now
{{{
laydi [options] </path/to/project>
}}}
2011-03-06 23:08:09 +00:00
b5d2e8e181 Changed the name of the current Project class to ProjectView, to make room for a new
non-GUI project class.
2011-03-06 22:33:51 +00:00
21133af8f7 Removing old r-laydi directory. 2011-03-06 21:27:36 +00:00
a1ab79024e Adding simple workflow named "default" with PCA, PLS and LPLS. Changed the program to
use this as the default workflow.
2011-03-06 15:27:16 +00:00
633465e4c8 * Added function fro reading laydi selections.
* Fixed bug in documentation of write.laydi.selection.
2011-03-06 14:38:24 +00:00
6a70e7a4db Removed old laydi.R 2011-03-06 14:32:37 +00:00
1d94b46777 Added method for writing laydi selections. 2011-03-05 16:28:07 +00:00
98a9d581af Updated R package. The package now works and is documented. The only implemented
method is writing ftsv datasets from R.
2011-03-05 15:47:33 +00:00
260e0ad715 First attemt on laydi R package. 2011-03-05 13:49:15 +00:00
80e64afd04 Renamed R package to R. 2011-03-04 14:25:33 +00:00
f18b49b1c7 R package for communicating with Laydi. 2011-03-04 14:24:55 +00:00
f29d48e879 Laydi project directory for testing the new project structure. 2011-01-12 16:57:10 +00:00
ebda69049e Started working on Dimension and Universe objects (which will probably be renamed before actually being used in the program). 2011-01-05 15:48:00 +00:00
5f1f4d0dc2 Renamed directory illumina2ftsv to illumina to gather all Illumina-relevant
scripts there.  Added laydi-annot-illumina script that generates Laydi
annotation files from Illumina text annotation files.
2011-01-04 11:43:24 +00:00
f001d12584 Working version. 2010-09-27 19:45:56 +00:00
3d68d27a56 Begun writing illumina data to ftsv converter. 2010-09-24 15:18:52 +00:00
b6d1eb022e Fixes error during make in parent directory. 2010-06-30 08:30:15 +00:00
2e253450cd Removed debug print statments. 2010-01-19 17:08:50 +00:00
259add178e Removed matplotlibrc 2010-01-19 16:53:35 +00:00
256133275c * Changed build behaviour to suit newer Ubuntu releases (at least 9.10).
* Added -c option to generate intial configuration file and directories. This will create
  the file ~/.laydi and the directories ~/laydi/datasets and ~/laydi/workflows.
* Removed debug print statements.
2010-01-19 16:45:51 +00:00
c50d34effc Changed from deprecated scipy.stats.mean() to numpy.mean(). 2009-11-22 18:25:43 +00:00
f2afcbc3fc Fixed description to run laydi after checkout. 2009-11-19 21:58:07 +00:00
1fbef303ff Fixed warning about deprecated matplotlib setting. 2009-08-22 20:11:48 +00:00
e28b66a294 Removed annoying debug print statement. 2009-08-22 19:50:00 +00:00
58e7f6422b Added build info in README 2009-08-22 19:48:20 +00:00
4ce6963428 Fixing selections and drawing in newer versions of matplotlib. 2009-08-22 17:41:06 +00:00
14de18c507 IMPORTANT: identifiers in the resulting csv file were not correct before this patch. 2009-02-28 15:38:29 +00:00
53cbd8fed7 Added write_csv function to export a dataset to regular comma/tab/whatever separated files. 2009-02-09 23:05:09 +00:00
0858fd00e5 ftsv2csv - script to convert ftsv files to comma/tab separated values. 2009-02-09 22:12:39 +00:00
a1e57d7820 Smokers workflow automatically loads annotations on the go-terms and gene_ids dimensions. 2009-02-06 23:48:25 +00:00
ec6f2a1edc Removed page size from spin boxes as this has become deprecated in GTK. There are still complaints from
GTK/PyGTK, possibly due to PyGTK.
2009-02-06 22:24:33 +00:00
648817cf0e Removed debug print line. 2009-02-06 22:23:24 +00:00
f07ce85e46 Changes to DAG plot. 2009-02-06 22:21:51 +00:00
5cfa505ae2 Fixed critical bug in txt2ftsv that made output datasets incorrect if more than one list was used. 2009-02-06 22:21:19 +00:00
6c20de11c9 Added options to txt2ftsv to chose between datasets and category datasets and whether or not to use sparse format. 2009-02-05 20:08:51 +00:00
b46c381c3e Added txt2ftsv, a script to build ftsv category datasets from lists of identifiers.
Usages is txt2ftsv [-d dimension] [-o output.ftsv] [-n dsname] [FILE1 [FILE2 ...]]
Input and output can be - for STDIN/STDOUT respectively. The script is primarily ment
as a hack to easily load selections. Data is only half sanitized.
2009-02-05 00:11:48 +00:00
fdf51c7c7f Added box and bar plots to the right-click menu of datasets. 2008-12-07 23:31:03 +00:00
0a76e9c50f Made plot background color lighter and removed two parameters that newer versions of matplotlib does not recognize. 2008-12-07 23:30:33 +00:00
2020c13b97 Fixing the colours of the overview image. 2008-12-06 14:37:10 +00:00
cc9416b3f7 GUI overview figure. 2008-12-06 00:58:35 +00:00
7e6bac20e1 FIXING STUFF!
Rename should be complete or almost so.
2008-12-05 22:07:56 +00:00
1eabbc5c48 BREAKING STUFF!
Renaming fluents to laydi
2008-12-05 21:51:08 +00:00
9c026a39d0 BREAKING STUFF!
Renaming from fluents to laydi
2008-12-05 21:50:32 +00:00
27e4504bf6 BREAKING STUFF!
Rename fluents to laydi.
2008-12-05 21:48:24 +00:00
45a06fab7f debian/rules builds a bit smoother by running configure with both --root and --prefix. 2008-12-05 20:03:02 +00:00
d3eba1cd8b Deleted doc/Makefile because it should be generated by configure. 2008-12-05 20:02:13 +00:00
5739de0a61 Name change to Laydi. 2008-12-05 20:01:02 +00:00
444e524f44 Name cange to Laydi. 2008-12-05 19:59:55 +00:00
c544c983e4 Added --root to allow deb builds to go smoother. 2008-12-05 19:59:21 +00:00
04b7cbb872 Lots of changes in structure to make it possible to package the program while
still allowing workflows to be placed in several locations in the file system.

The installation procedure is now ./configure && make install configure will
run m4 on fluents/paths.py.m4, Makefile.m4 and doc/Makefile.m4 so that the
installation system and the program will know where some important directories
are located.

The paths.py.m4 and consequently also pahts.py files are just listings of
directories configured during install.  I did this to separate these from all
other files so that as little as possible is touched by m4. It is still
necessary to do an install now to get the program to run in a clean checkout.

Workflows can now be placed anywhere in the system. This is done by setting the
workflowdir variable in the configuration file. All workflow directories,
separated by semicolons, are added to the python path.

The use of setup.py is now deprecated.
2008-12-05 00:12:49 +00:00
b313cf29bc Workflow updates 2008-02-29 16:23:57 +00:00
1ad8b1a4f1 Fixed initial settings of axis in scatter 2008-02-29 16:16:17 +00:00
aa3ec28ec6 Switched hard-coded 3-s with a variable to determine size of viewport resizing
dialog on toolbar.
2008-02-27 17:38:01 +00:00
cb6d6b87cc Whatnot 2008-02-08 14:58:46 +00:00
6b78629946 Save identifier list. 2008-02-07 18:15:39 +00:00
a380093afc Added workflowdir to configuration file. workflowdir is a semicolon separated
path of directories where workflows can be found.
2008-02-07 14:20:52 +00:00
e6a671a8c0 Added function to split datasets on selection. 2008-02-06 19:54:17 +00:00
b37ebe568f Fixed subdata method so the correct identifiers are stored 2008-02-06 16:29:02 +00:00
e417547923 cc 2008-02-06 09:42:46 +00:00
14d24d02c2 Demo workflow 2008-02-05 11:34:14 +00:00
848ba7f80c Added drag-n-drop of matrices to idlist window to support ranking of selected variables. 2008-02-01 11:09:10 +00:00
f83a16ec37 Added new script. 2008-01-21 11:15:54 +00:00
9e4f86c557 Fixed writing of nodepos to assert ds type + added subdata function 2008-01-15 11:41:53 +00:00
56a572c4ee Removed unnecessary line from from_networkx. 2008-01-08 10:19:57 +00:00
ab9c1ec84b Sparse network support and nodepos read/write 2008-01-08 00:43:56 +00:00
bf29661af9 Added convertion to sparse format in category dataset 2008-01-07 13:13:27 +00:00
e6625c975f bugfix 2008-01-07 12:44:08 +00:00
ca267920d8 Removed a couple of output datasets that did not work from pls. 2008-01-07 10:47:17 +00:00
bed280353b Added support for sparse category-dataset 2008-01-06 17:01:00 +00:00
a84731da30 Support for icon assignment based on introspection 2007-12-17 18:52:49 +00:00
163271fc17 Correct behavior of dataset icons and names under transformations 2007-12-17 18:50:27 +00:00
083702b3b1 Fixed bug in color updating 2007-12-15 14:50:33 +00:00
e80440472d Fixed axes scaling error in scatterplot 2007-12-14 17:27:12 +00:00
4de9a58ae9 Made a LoadDataFunction instead of four almost identical specialiced Funcions. 2007-12-14 16:45:05 +00:00
07477888bb Fixed colormap bug 2007-12-14 15:43:35 +00:00
5c2df5c163 Removed get_project nonsense 2007-12-14 15:42:37 +00:00
6996aab2fa Added log transform, support for multi selections in navigator-scatter, removed get_project-nonsense 2007-12-14 15:42:17 +00:00
a94c3ed1cc Smoker workflow now loads data from correct path. 2007-12-14 15:15:01 +00:00
ba7d8fc34f Changed the way workflows are handled. You now specify a workflow by naming the
containing python module. The module must be in python's path.
2007-12-14 11:48:21 +00:00
0e8d864ace Does not need to import workflows. 2007-12-14 11:46:08 +00:00
7600abf372 Deleted all datasets. They don't belong here. 2007-12-12 17:02:28 +00:00
05cf63e694 Removes rpy, forcing scipy to be used. 2007-12-12 14:41:27 +00:00
455b2a7a86 Small fixes to setup.py and rules. 2007-12-11 19:49:36 +00:00
1798279a32 Files to debianize the program. 2007-12-11 18:26:47 +00:00
6379acca58 Added setup.py to do installation. 2007-12-11 18:25:08 +00:00
cef882b0a4 * Annotations are no longer cluttered as if they all belong to the same
dimension. There was a bug that actually gave the same annotation dictionary
   to all dictionary annotation handlers.
 * The selection window now remembers which annotation was shown for each
   dimension.
2007-12-11 13:47:29 +00:00
c862c8bb04 Added function to specify a specific workflow based on module name. 2007-12-11 11:40:27 +00:00
9242b88d07 Removed buttons that do not belong on the toolbar: "New", "Load", "Save".
Load and save are currently not implemented anyway, but they do not represent
frequently used actions anyway.
2007-12-11 10:13:31 +00:00
90c84b768a Changed help URLs. 2007-12-11 01:11:13 +00:00
057e2a9f1d About to change the way logging is normally called. 2007-12-11 01:02:47 +00:00
d0a7b1cbc2 Code cleanup. 2007-12-11 00:13:26 +00:00
055c0ea4ac Dataset dimensions are shown in statusbar. 2007-12-10 21:08:09 +00:00
1a4d73f26b Fixed the function menu. It now works, is placed before "Help", and the method
for running a function is moved to the workflow module instead of being hidden the
WorkflowView.
2007-12-10 16:57:38 +00:00
82dacc3dd1 Added menu items to toggle visibility of workflow, navigator and infopane. 2007-12-06 00:20:42 +00:00
27d935319c Added a delete function to the context menu on navigator elements. 2007-11-09 15:02:32 +00:00
c26999e688 Added line plot of matrices. 2007-11-08 11:47:36 +00:00
7ee7f0cf7e Added scatter plotting from dataset in navigator. 2007-11-07 12:44:22 +00:00
aef2e1daf0 Tralala ... 2007-11-07 12:34:13 +00:00
ca51a0b382 Added mat2ftsv to naïvely convert matlab matrices to ftsv files. Works in at
least one case, but does not try to guess anything sensible for identifiers.
2007-10-31 17:43:02 +00:00
b114d5aeec New crossval index generator 2007-09-25 06:31:40 +00:00
18f33decc7 Finnished the l-pls fdr 2007-09-21 13:16:40 +00:00
6698ebe932 Removed actiavtion in dimcontroller
opt. of compare func
2007-09-20 16:12:58 +00:00
41f93c5989 .... 2007-09-20 16:11:37 +00:00
7e9a0882f1 Updates 2007-09-20 16:10:40 +00:00
d9e5398865 GO (id, description, definition, ontology) 2007-08-28 09:39:24 +00:00
16ed2fd9c9 u 2007-08-24 11:48:29 +00:00
dc43830752 HS-entrez annotations 2007-08-24 09:15:16 +00:00
7dbf28f65d ... just lots of stuff 2007-08-24 09:14:24 +00:00
21b63b17e5 Fixed axis bug in barplot 2007-08-24 09:13:34 +00:00
7538710144 Enabled tree lines and set sensitivity on transforms 2007-08-24 09:12:52 +00:00
fa4604dbe5 load dataset defaults to datadir 2007-08-22 14:05:51 +00:00
01ef4bdedd Added support for identifiers sorting, and selection 2007-08-22 13:41:04 +00:00
ffe1ce6319 Fixed queries 2007-08-22 13:40:33 +00:00
6ba8c6eb67 ups 2007-08-21 10:31:09 +00:00
e06eeb6d17 ups 2007-08-21 10:25:23 +00:00
26ab6c3fe7 Added a "decimals" parameter to write_ftsv, so that datasets can be written
without full precision. Defaults to 7 digits after decimal point.
2007-08-16 10:02:54 +00:00
a6af506ae0 The reduced Uma X, for use in Lpls 2007-08-16 09:46:33 +00:00
fc91d17bdc The Uma affy, nci60 + drug data + tissue type 2007-08-16 09:17:07 +00:00
d510e092e3 Added SAM and conditioned enrichment analysis 2007-08-14 16:16:31 +00:00
8d4848d5fa Added explained variance 2007-08-14 16:12:28 +00:00
004cfe0a9f Quick fix for gray on NaNs 2007-08-14 16:10:35 +00:00
13b35180ee Fixed bug in DAG plot color mapping. 2007-08-08 12:24:14 +00:00
e08dba0924 read_ftsv and write_ftsv now supports filenames as well as file descriptors. 2007-08-08 12:23:45 +00:00
04126e9c83 New information content datasets. 2007-08-08 10:13:05 +00:00
46c2a0c149 New calculations (Z), based on updated X data 2007-08-07 11:45:16 +00:00
916fc4c046 Added scaling to navigator menu, moved transformations to a separate sub menu 2007-08-07 11:42:07 +00:00
168384f266 Cleaned esvd routine, added subfunc scale 2007-08-07 11:41:03 +00:00
d055a1f882 Some ..... 2007-08-07 11:39:16 +00:00
4b80baf225 Added information content drag'n'drop to z loadings plot. 2007-08-06 16:20:39 +00:00
72e300c95e Addded automatic bin selection in histogram plot 2007-08-04 10:37:22 +00:00
3f7215bc35 Factored out a mixin class for IC thresholding. 2007-08-03 12:09:17 +00:00
0523ebab05 Added dataset transpose option 2007-08-03 09:44:31 +00:00
e62a6ae9b3 Removed print statements 2007-08-02 14:51:53 +00:00
0758ab8bfb Fixed histogram plot to accept selections of one, and made ad-hoc choice of proportional color to patches 2007-08-02 14:37:19 +00:00
7a0e2481eb Full corrected X data 2007-08-02 11:22:05 +00:00
94f4b276b9 Fixed selection in DAG-plot to work both with and without IC set. 2007-08-02 11:20:30 +00:00
b334e94b15 New and corrected smokers data 2007-08-02 11:19:47 +00:00
438e7cb918 Irrelevant play 2007-08-02 11:19:16 +00:00
2d419a9862 Added GO-category enrichment analysis 2007-08-02 11:18:48 +00:00
973470b595 stuff 2007-08-02 11:18:18 +00:00
da5b977042 Moved less important datasets into a subfolder named "secondary". 2007-08-02 10:52:58 +00:00
83d76eac4f Fixed vorrect namespace for scipy funcs 2007-08-02 10:44:06 +00:00
b233e4abc6 Added spin buttons for minimum and maximum information content in DAG plot. 2007-08-02 10:20:33 +00:00
dc3893eecc Fixed a "main.project" bug 2007-08-02 10:19:16 +00:00
f12fe23c1b Fixed docstrings. 2007-08-02 10:08:52 +00:00
4c24061575 Fixed docstrings. 2007-08-02 10:08:27 +00:00
63d6347f37 Fixed makefile to not use lots of space on inherited function documentation. 2007-08-02 10:04:06 +00:00
6e4db7ebe4 Fixed plot focus signal problem. 2007-07-31 12:25:56 +00:00
10eba079bc iii 2007-07-30 18:04:42 +00:00
aa4007e208 Improved drag'n'drop of data into scatter plots so that it no longer requires
matching identifiers along dimensions.
2007-07-30 17:42:48 +00:00
0bc4a6e3f0 Fixed drag'n'drop of datasets to DAG-plots to convert inf/-inf to
maximum/minimum values of the dataset.
2007-07-30 14:15:23 +00:00
e84a202fbe Commented out unused functions. 2007-07-30 10:51:58 +00:00
50a6dae3f6 added full lpls data 2007-07-30 10:21:09 +00:00
b39e71ca2b Trying to fix cv_pls 2007-07-30 09:46:43 +00:00
9ccdf97d07 Changed filenames of information content datasets. 2007-07-30 07:55:36 +00:00
1e18ac81de Added names to datasets. 2007-07-30 07:54:22 +00:00
349cab3c51 ups 2007-07-28 16:05:11 +00:00
9a2e259209 c 2007-07-28 09:19:42 +00:00
df88f44255 clean up
ups
2007-07-28 09:18:48 +00:00
5cf34fc03f Added information content datasets.
They are in files named ICs<subgraph><number> where 
those numbered 0 uses all ECs while 5 uses only the safest ones.
2007-07-27 17:22:10 +00:00
4b8f594966 app -> main.application 2007-07-27 09:40:58 +00:00
47b89cc411 Fixed bug in esvd for m>n 2007-07-26 18:32:48 +00:00
7fd4ac6225 pls opt fix 2007-07-26 18:32:27 +00:00
b35f814ef0 Added center check button on lineview 2007-07-26 18:26:50 +00:00
dc7f7dbde2 Added existing_identifiers function to Dataset.
Added colouring drag'n'drop to DAGPlot in gobrowser module.
2007-07-26 15:45:42 +00:00
a45743c31e Added main.py that now contains the One & Only Singleton instance of these classes:
- Navigator
 - Aplication
 - Workflow
 - Project
 - Options
Corresponding changes have been added in lots of other files to account for this, but
the access to these objects should now be a lot easier.
2007-07-26 12:35:59 +00:00
91abf12f51 sd 2007-07-24 14:34:47 +00:00
13dc6de5c1 Name annotations to go-terms. 2007-07-24 13:34:40 +00:00
1d517d0754 Changed hardcoded absolute path to relative path. 2007-07-24 13:00:29 +00:00
524c90fcf7 Updated to handle new numpy/scipy. 2007-07-24 12:19:13 +00:00
05274b4f0b confidence 2007-07-23 18:07:10 +00:00
939dba20ee first import lpls 2007-07-23 17:35:28 +00:00
54d271b841 go test data 2007-07-23 17:35:04 +00:00
a05d0faa0d Lib updates 2007-07-23 17:33:21 +00:00
7ea87e646a Added DAG plot to gobrowser module and smokers workflow. 2007-07-23 17:02:28 +00:00
155dfada5c iups 2007-07-23 13:25:34 +00:00
9db5991108 2007-07-20 15:48:59 +00:00
98f53d3448 updates 2007-07-20 12:32:54 +00:00
7ee7aa968a Initial import 2007-07-20 09:36:26 +00:00
dd04e28a62 Query fix 2007-07-05 18:49:24 +00:00
850deeec0d Renamed gene identifers to gene_id 2007-07-05 18:40:29 +00:00
75c7c51708 DistanceToSelectionFunction 2007-07-05 18:36:59 +00:00
3f5d45d7af Renamed smalltest workflow to smokers. 2007-07-05 18:24:45 +00:00
fae096afe4 Changed workflow name from smalltest to smokers, because it is heavily based
on the smokers dataset.
2007-07-05 13:20:52 +00:00
a503ffcdf8 Fixed linewidth in selection in scatter plots. 2007-07-05 11:57:21 +00:00
d29013a863 T-test now works, and outputs a histogram as well as t-values and p-values. 2007-07-03 16:25:38 +00:00
99987999db Broke up a too long line. 2007-07-02 09:54:56 +00:00
884804c49a Added a dummy for the t-test function. Will be updated when I have access to my
office computer tomorrow.
2007-06-28 21:48:13 +00:00
b637a5badc Changed /usr/bin/python2.4 to /usr/bin/python, and hope that 2.5 will not have
trouble running the app.
2007-06-28 21:42:18 +00:00
4eaea2fe59 Added empty lists as default values for all_data and all_plots in Options, so
that subclasses of Options will work with the GUI without modifications.
2007-06-28 21:33:09 +00:00
7b20f44fef Added a GO similarity function that does not do anything useful yet. 2007-06-22 15:37:59 +00:00
e5cd8a8077 Started on a function to enhance gene lists by using GO similarities.
Not in a usable state.
2007-06-22 15:37:22 +00:00
68cc583d2c Added common_dimensions(ds) that lists common dimensions between two
datasets.
2007-06-22 15:35:45 +00:00
ff8833a22c Added read functions for the medium and large smokers sets. 2007-06-21 10:28:10 +00:00
d6298a2d99 Ensures that the GO is only loaded once. 2007-06-21 10:26:35 +00:00
ff2c42902f Commented out some log lines that just cluttered the log. 2007-06-21 10:25:17 +00:00
2eb3d71a5d Moved data/smokers-med to data/smokers-medium. 2007-05-16 15:35:25 +00:00
91032d729e Some more smoker data 2007-05-16 11:45:43 +00:00
7bdfdea23b Added -d option to get all identifiers along a single dimension. 2007-05-16 10:30:54 +00:00
c7bfefe358 Fixed resnik distances. 2007-05-15 18:16:07 +00:00
335efe231a go-gene-matrix takes a GO vs. GO distance matrix and a gene-go-mapping file
and makes a gene vs. go distance matrix based on the shortest distances found
between each gene and go term.
2007-05-15 18:15:51 +00:00
1ab558248c Piping information through dataset -i works. Added names of planned features
to the dataset script.
2007-05-09 21:52:59 +00:00
7272eb63d2 Working on a script to query datasets without starting fluents. 2007-05-09 17:41:50 +00:00
ebe7621817 some biocondoctur utilities 2007-05-06 13:51:06 +00:00
f1301be67a go-distance update. 2007-04-26 18:54:34 +00:00
a0faed2614 Forgot some ... 2007-04-24 17:21:40 +00:00
34ae426c86 Added correlation plot and moved colorbar to plots 2007-04-24 17:17:31 +00:00
90bb25eb55 added default mappable to None 2007-04-24 17:16:34 +00:00
31ac569c3e Added colorbar shortcut 2007-04-24 17:04:29 +00:00
fefaffb2e3 go-distance seems to be able to calculate resnik now. Not asserted with
calculations by hand.
2007-04-04 19:08:50 +00:00
28f0f53e8a go-distance script soon calculating resnik distances. 2007-04-03 13:08:48 +00:00
a5c3a1f154 A couple of extra lines of code in a script. 2007-03-27 13:02:22 +00:00
728c334e8a ontology distance script now accumulates annotations correctly. 2007-03-26 23:15:14 +00:00
11eb3306b9 Works a bit better. 2007-03-26 17:18:26 +00:00
947cf8385f Annotations on yeast from Stanford mdb. 2007-03-23 20:51:04 +00:00
0904a59310 Gene ontolgy distance script in C. Will hopefully speed up calculations when
finished.
2007-03-23 13:25:07 +00:00
6f19fe1b4b Resnick distance matrix 2007-03-16 17:05:46 +00:00
0eff457910 Added biological process info to the small smokers example, and a README file to
explain the dataset, at least the non-trivial parts.
2007-03-15 23:57:35 +00:00
3dc1867be4 Added entrez-go-mapping that maps entrez IDs to GO terms based on a file of the form:
affy_id ::: geneid_1 /// geneid_2 ::: go(bp) ::: go(cc) ::: go(mf)
2007-03-15 23:47:24 +00:00
6fe4ff3c59 Added scripts folder for small but useful scripts. 2007-03-15 12:46:41 +00:00
b02773b4e6 pls loading plot now have correct name 2007-03-15 10:38:52 +00:00
dbe49b366d added import of networkx 2007-03-15 10:38:05 +00:00
f6696dfacc Added gobrowser to smalltest workflow. 2007-03-14 21:08:56 +00:00
1c48315a0f Added debug output. 2007-03-14 17:26:40 +00:00
438a268b1d Inserted visible header sort 2007-03-14 16:34:50 +00:00
3d2492578e whitespace 2007-03-14 16:33:54 +00:00
3bd21ab089 metric support 2007-03-14 16:33:16 +00:00
48047f1395 Moved lots of stuff back to sandbox 2007-03-14 16:32:49 +00:00
7f1f639ee7 Updates on metric, whitespace 2007-03-14 16:31:25 +00:00
22f6e3284c whitespace 2007-03-14 16:30:18 +00:00
818dc0b2b0 added a logger for constructor calls 2007-03-14 16:27:23 +00:00
212da78933 correct comp update 2007-03-14 16:17:21 +00:00
00dd3e8d9d added validation on identifiers input 2007-03-14 16:06:16 +00:00
51435d9fdc Fixed dataset type to network 2007-03-14 10:27:08 +00:00
ac447546a2 Annotation file for dim: gene_id 2007-03-14 10:26:11 +00:00
a9981779a6 network of articles 2007-03-14 10:25:35 +00:00
9cbefb5705 in write_ftsv: adjusted so it splits specifically on tab, whitespace allowed in annotations 2007-03-14 10:24:49 +00:00
6cbf6d0689 Initial commit of small example test workflow 2007-03-13 15:24:20 +00:00
6b2737efb9 Added a line. 2007-03-09 14:33:09 +00:00
f61bc353a9 Typofix 2007-03-09 14:30:40 +00:00
5be2f1faf6 Initial import of Iris data 2007-03-04 21:00:39 +00:00
ae9a207a71 Added a tag column in the GO browser to help link it to selections. 2007-03-01 19:13:13 +00:00
442b5fed5f Moved all files to the smokers-small subdirectory. 2007-03-01 19:12:40 +00:00
f31795ac2a Corrected erroneous checkin. 2007-03-01 15:27:50 +00:00
e01dd578cd Preserves PYTHONPATH 2007-03-01 15:27:24 +00:00
ff070e5312 Preserves PYTHONPATH. 2007-03-01 15:26:38 +00:00
28e6c52f78 Fixed bug with hidden dimensions. 2007-03-01 15:06:33 +00:00
d699afa6a5 fixed bu when trying to drag anything over an empty view 2007-03-01 15:03:53 +00:00
f8f3bd712e Smoker example data 2007-03-01 15:01:30 +00:00
6101bf850c Changed CategoryDataset ftsv files to be written with 0 and 1 instead of True and False. 2007-02-28 16:33:11 +00:00
89636962a7 Added Workflow.get_data_file_name() which returns the full path to a given
data file, or None if the file does not exist. This is tested in the test
workflow.
2007-02-28 14:56:24 +00:00
934640ea62 Searches for /etc/fluentsrc and ~/.fluents configuration files. Adds the
home configuration variable.
2007-02-28 14:07:33 +00:00
281337251d Added selection of lines in network plot 2007-02-27 21:19:24 +00:00
78183df0e9 Alignment of function boxes 2007-02-27 18:14:58 +00:00
b754a5df44 Update from change of plots/view 2007-02-27 16:31:18 +00:00
61cfd00558 Division of plots -> view/plots 2007-02-27 16:28:03 +00:00
059cddbc16 Division of plots -> view/plots 2007-02-27 16:27:39 +00:00
bf1ad1be87 Removed old help function. 2007-02-27 16:25:48 +00:00
1ba4bf5f82 Initial config parser support. 2007-02-27 16:08:22 +00:00
686a1fdcd1 network/venn plot now maximizes the space available 2007-02-27 15:42:27 +00:00
d27278241c oops ... (broken code fixed) 2007-02-27 15:08:00 +00:00
4de65f1085 Clean up 2007-02-27 15:05:21 +00:00
f73a6db0ee Added ctrl+arrows to navigate between plots. 2007-02-26 23:00:25 +00:00
eacb44f32a Removed "Edit" menu. 2007-02-26 22:12:32 +00:00
d040f11c2f Added identifier list update on selection changed. 2007-02-26 18:02:34 +00:00
537dc9f0ec Cleanup of selection browser module. Added comments, fixed some bits of code. 2007-02-26 14:35:31 +00:00
c0bbe24c39 No selections in scatter marker now updates to no selection instead of last selection 2007-02-26 12:11:28 +00:00
a6fbef9cfa scatter plot selected markers are now on top (visible) 2007-02-26 11:20:02 +00:00
2f60d0663d Clean up of import statements 2007-02-26 09:08:50 +00:00
5ed602f355 Lots of changes .... (new selector, mode updates, histogram selection, ++) 2007-02-26 08:00:36 +00:00
3ee8439e07 Added selection listeners to plots in context menu 2007-02-26 07:58:33 +00:00
a614908436 Size of current selection is now updated in details 2007-02-23 11:12:03 +00:00
41e8ed511b Fixed dim_cursor_changed to to use the correct treemodel, and added show/hide on selection details 2007-02-23 10:46:04 +00:00
0d8702bb71 added show/hide on dimensions 2007-02-21 19:57:27 +00:00
2bae169f38 Annotation display now works (sort of). 2007-02-21 16:39:04 +00:00
28aca8c621 added project to selection controller 2007-02-21 13:57:48 +00:00
8c03338b75 hypergeometric test (scipy version has errors) 2007-02-21 13:03:51 +00:00
48165d1aed Updated the selection controller with sorting ++ 2007-02-21 12:41:37 +00:00
f0b2660813 Selection listeners are now notified when new dimensions are added (because
this implies that an empty selection is made on the new dimension).
2007-02-21 12:05:08 +00:00
5800e7e362 Fixed a bug that prevented the first selection on a dimension to come from a
dataset.
2007-02-21 11:49:43 +00:00
a5955f9b59 Now updates the DimListConroller when a CategoryDataset is drag'n'dropped into
SelectionListController.
2007-02-21 11:43:00 +00:00
c5c4f13a19 Fixed some excessively long lines. 2007-02-21 11:08:20 +00:00
2cc4e86b0a Split selections.py into three different controller classes, one for each list. There
is still some work to be done, and bugs to be fixed.
2007-02-21 00:00:26 +00:00
a2195bcb4b Added Import annotations option. 2007-02-16 11:23:29 +00:00
93a2f404d2 Data needed if annotationtest should run clean. 2007-02-15 23:09:49 +00:00
6809c1a454 Added some annotation support in selections.py, including the beginning of a
menu option to add an arbitrary annotation alongside identifiers.
2007-02-15 22:57:40 +00:00
953662e1fb Added a couple of more assertions to the test of read_annotations_file() 2007-02-15 22:54:08 +00:00
e6cf8f765a Added read_annotations_file() 2007-02-15 22:49:40 +00:00
b17f04466b Added read_annotations_file() which reads a tab delimited file containing
annotations to identifiers along a dimension.
2007-02-15 22:42:55 +00:00
4319e8630e fixed error in typechecking 2007-02-15 13:36:36 +00:00
fc33c2dbfc factored out packer 2007-02-09 14:02:58 +00:00
15c89fb9b5 Factored out packer
A    packer.py
2007-02-09 14:02:39 +00:00
7eb13b14cb Removed resolution arg to Circle to avoid construction of a circlepolygon (deprecated) 2007-02-02 12:21:19 +00:00
320cd97512 Removed noise generating print statements. 2007-01-31 14:58:37 +00:00
75b66914fd Fixed bug by removing hardcoded filename. 2007-01-31 14:56:43 +00:00
74cb30428c Added annotations to identifiers, and converted the unused annotationtest.py to
test the new module.
2007-01-31 14:19:23 +00:00
1863bfc564 Save plot enabled 2007-01-31 13:26:46 +00:00
a7c60ffe64 added venn diagram test plot 2007-01-31 13:03:27 +00:00
240b0a4a9f New lasso icon 2007-01-31 13:02:25 +00:00
d1205ae67f Removed colorbar 2007-01-31 13:01:09 +00:00
37feb1c25b bugfix on P scale 2007-01-31 13:00:36 +00:00
2cfa3ca415 spin on a/o, colorbar on keypress 2007-01-31 12:59:21 +00:00
63be80aa92 pls options added 2007-01-31 12:03:11 +00:00
088f180b5d Barplot, lots of changes in scatter, disabled modes, removed labels, bugfix on lasso 2007-01-31 12:02:11 +00:00
e716db3fd2 Added center option to validation, + naming updates 2007-01-31 11:59:23 +00:00
29509902df bugfix on shape 2007-01-31 11:57:59 +00:00
8e607c7b1a bugfixed scaling issues 2007-01-31 11:57:04 +00:00
f064b7134d Removed scale option added pack 2007-01-31 11:56:28 +00:00
1d5929f14c pls options glade file 2007-01-31 11:55:43 +00:00
ed2848beb3 Errors when identifers dont match shape, + whitespace 2007-01-31 11:54:54 +00:00
48bb47ec86 Bugfixed pca 2007-01-25 12:36:32 +00:00
aeb37cf4cd Added supportp for tall X in PCA 2007-01-25 12:17:16 +00:00
fa3722600c pca options glade file 2007-01-25 12:15:30 +00:00
61bfc236e6 Changed location of PCA options glade file. 2007-01-25 12:15:19 +00:00
7a204a3426 Added option page to option dialog 2007-01-25 12:10:18 +00:00
1c2c2c8895 Multiple lib changes 2007-01-25 11:58:10 +00:00
a65d79697f Added Expand/Collapse menu choices to the GO browser context menu. This is
particularly useful when searching for GO terms, because the gtk TreeView
widget does not do interactive search in collapsed parts of the tree.
2007-01-21 16:16:37 +00:00
e03cc4ed4c Added a ScrolledWindow around the navigator. 2007-01-19 14:00:10 +00:00
7693f336ba Added a singleton project in the project module, so that the current project is
easily accessible from anywhere in the code. As there is only one project at
any given time this should not be a problem.

The Gene Ontology browser needed this to be able to set the selection without
passing the current project through several constructors. 

Added a context menu in the GO browser that allows the user to select all GO
terms in the subgraph that starts on the current node.
2007-01-18 15:45:48 +00:00
f533344242 Added histogram in plot menu 2007-01-17 15:40:54 +00:00
7c20e6d780 Added simple histogram 2007-01-17 15:40:33 +00:00
1ffbf4f9e7 Added default implementation of set_current_selection in Plot, so that plots can safely
ignore selections without adding any code to the plot.

Rectangle select mode, lasso select mode and freeze are now grayed out in ImagePlot.
2007-01-17 15:35:12 +00:00
06591e301e Added "Plot" submenu in navigator context menu. Can create an ImagePlot of a dataset. 2007-01-17 14:06:07 +00:00
c3c6e85044 Added ImagePlot, which displays a dataset as an image. 2007-01-17 13:20:04 +00:00
33c51505c4 Fixed the dataset loading so that it returns a correctly named Dataset. 2007-01-16 12:41:29 +00:00
f612dda72f Fixed bug in ftsv save and open dialogs. The save dialog now looks as intended.
Added the possibility to load several datasets at once. Error handling should still
be improved.
2007-01-16 12:28:56 +00:00
ea4c0af6de fixed shift/control on lasso 2007-01-15 15:46:24 +00:00
cacb0a27b7 Added "Save dataset" option to navigator context menu. 2007-01-15 13:58:56 +00:00
476c830a5e lasso 2007-01-15 13:47:47 +00:00
0a38cb7d4a added lasso 2007-01-15 13:47:18 +00:00
ee447b688c Added context menu to NavigatorView that allows reading FTSV datasets directly, i.e. without
adding a function in the workflow for this.
2007-01-12 14:37:44 +00:00
58886726d8 Small updates. 2007-01-12 10:50:55 +00:00
ae3aa7e4aa Create Resnik distances and save them as ftsv. 2007-01-12 00:00:56 +00:00
08b7d8dd85 Added function to save fluents tab separated values (ftsv) files. 2007-01-11 23:24:05 +00:00
e4d7f8e5a2 Resnik distances between GO terms work now. 2007-01-11 22:01:31 +00:00
4b1d16ea78 Updated go-workflow. 2007-01-11 18:57:45 +00:00
3340b1b7ac Added support for union/intersection selections 2007-01-11 13:07:54 +00:00
d4f5a92010 Fixed typo. 2007-01-11 13:07:03 +00:00
9274b044b7 Added read_ftsv in dataset.py. This method reads fluents tab separated values
files and returns a dataset.
2007-01-10 17:35:58 +00:00
060732d980 More persumably non-working stuff. 2007-01-10 15:33:19 +00:00
1e0b99f283 small bugfix 2007-01-09 08:53:28 +00:00
fa047e0171 Committing non-working code that breaks go workflow. ;) 2007-01-08 21:13:22 +00:00
6f050d4f10 Fixed error in docstring. 2007-01-08 19:31:19 +00:00
1371bc1b1a Added function menu. Clicking the items still does not work, though. 2007-01-05 14:42:22 +00:00
f7fe171896 Added Optionsdialog for pca and pls 2007-01-04 13:53:47 +00:00
e08a8377ed Added Options and OptionsDialog 2007-01-04 13:53:03 +00:00
ebd4fdae7b Changed all places that load icons to do it through IconFactory. 2007-01-03 17:30:27 +00:00
57e58e3910 Renamed IconFactory.get_icon() -> IconFactory.get() 2007-01-03 13:46:39 +00:00
d45ae4f480 Added icon factory to ensure that all icons are loaded exactly once. This also
cleans up code and saves X pixmap memory.
2007-01-03 13:34:40 +00:00
75447d8840 Fixed function output bug. Datasets now appear as children of their first parent, also in gtk 2.10 2007-01-03 13:05:37 +00:00
c34f23190b init 2007-01-02 15:10:59 +00:00
3ef5522dd0 First import of chemometrics utils 2006-12-18 11:59:12 +00:00
fac9346aad Added very hackish annotation count reader. 2006-12-15 12:53:27 +00:00
6aa1a1a817 Code upgraded to adjust for new version of networkx 2006-11-24 13:29:09 +00:00
880509f8a9 Removed whitespace that broke plots. 2006-10-31 14:35:12 +00:00
fb77ddb549 Updated GO workflow. Options class test added. Reading the ontology takes too
long.
2006-10-26 16:51:42 +00:00
438dbd358b Dataset to colour of dragndrop in dataset + minor addjustments in networkplot 2006-10-25 12:56:21 +00:00
0b30aeac6f Updated GO workflow. 2006-10-22 23:19:54 +00:00
5491f5ce04 GO workflow. Does not work. 2006-10-22 15:31:36 +00:00
de4a65e7b3 Added the svg format icon for move 2006-10-18 12:47:01 +00:00
cdb8d1b026 Removed unit test for workflows. The only test file in the directory is
for a workflow that is not used.
2006-10-17 17:53:52 +00:00
1f9a400057 Added docstrings. 2006-10-17 17:50:42 +00:00
f7ededa451 Removed executable bit. 2006-10-17 17:50:18 +00:00
fe96772319 Expanded some documentation.
Added clean target to doc Makefile.
2006-10-17 17:18:46 +00:00
5d4700da20 Removed some example rubbish that was placed after the GPL and had gotten
inside the file due to sloppy cut-n-paste.
2006-10-17 17:17:50 +00:00
fb3d9f2050 Added documentation directory with a Makefile to generate source code
documentation. This adds python-epydoc as a build dependency.
2006-10-17 15:06:24 +00:00
4153f06c60 Added start-up script that sets PYTHONPATH and starts fluents. 2006-10-17 14:43:57 +00:00
375d45e0cc Updated import statements, and removed the workflows pca_workflow and
affy_workflow.
2006-10-17 14:42:27 +00:00
610812f265 Started to rename "system" package to "fluents". Repository will be broken
until this is completed.
2006-10-17 14:28:35 +00:00
c40f9a2947 Added a LineViewPlot in GenerateData 2006-10-17 13:59:31 +00:00
bf951990f5 Comments and cleanup in LineViewPlot 2006-10-17 13:58:33 +00:00
ba55678472 Added documentation strings and removed some unused code. 2006-10-17 12:33:30 +00:00
42f6fd7440 Yet another bugfix on the plot updates. View frames will now be updated from
the upper left corner, horizontally first.
2006-10-17 10:37:46 +00:00
4b8ff16bbf Another bug fix. Double-clicking function output works, also after changing table size. 2006-10-17 10:32:53 +00:00
eb203ea8ad Bugfix; keeping view if table size increases. 2006-10-17 10:06:27 +00:00
9162deabac Updated icon. 2006-10-16 20:16:50 +00:00
d9ec8f1611 Small code cleanup. Removed some lines of code that were commented out. 2006-10-16 20:01:08 +00:00
eefbc438bc The application is now a singleton. Added button to choose numer of
plots.
2006-10-16 19:57:40 +00:00
ebdf6d4aba Updated icons 2006-10-14 17:17:23 +00:00
16036e5b52 Removed text labels from toolbar. 2006-10-14 15:31:38 +00:00
e09b3e3c3e Changing active plot when plot title is clicked. 2006-10-14 14:50:27 +00:00
e08cc8b816 The active plot is now more visible. 2006-10-13 22:25:18 +00:00
f826931105 Toolbars now get automatically updated from the global mode setting when
the mouse enters a plot.
2006-10-12 18:33:38 +00:00
b1bfe1fe3e Fixed selection issues that were probably introduced by the merge from the
toolbar branch.
2006-10-12 17:38:41 +00:00
d9fd4fc127 Merged in the toolbar branch. The toolbar branch is now obsolte. 2006-10-12 14:58:36 +00:00
143 changed files with 51766 additions and 4184 deletions

61
LICENSE
View File

@ -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
View 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
View 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
View 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
}

View 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{
}

View 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
View 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 }

View 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
View File

@ -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
View File

@ -0,0 +1,57 @@
![](./wiki/graphics/project_icon.png)
# 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
![](./wiki/graphics/screenshot-00.png)
## 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View File

@ -0,0 +1 @@
5

22
debian/control vendored Normal file
View 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
View 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
View File

@ -0,0 +1 @@
README

74
debian/rules vendored Executable file
View 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
View 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

View File

@ -0,0 +1 @@
Laydi project version 1

File diff suppressed because one or more lines are too long

215
doc/gui-overview.svg Normal file
View 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 &amp; 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 &amp; Extensions</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

68
fluents
View File

@ -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()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

After

Width:  |  Height:  |  Size: 621 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 671 B

After

Width:  |  Height:  |  Size: 642 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

BIN
icons/freeze.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 724 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 762 B

After

Width:  |  Height:  |  Size: 835 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
icons/lasso.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 959 B

62
icons/lasso.svg Normal file
View 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 727 B

After

Width:  |  Height:  |  Size: 680 B

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 713 B

176
icons/move.svg Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
icons/table_size.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 780 B

346
icons/table_size.svg Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

3
laydi/__init__.py Normal file
View File

@ -0,0 +1,3 @@
import main

100
laydi/annotations.py Normal file
View 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

File diff suppressed because it is too large Load Diff

862
laydi/dataset.py Normal file
View 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()

View File

@ -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()

View File

@ -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; &quot;a yacht with long, fluent curves&quot;
1: easy and graceful in shape; &quot;a yacht with long, laydi curves&quot;
2: smooth and unconstrained in movement; &quot;a long, smooth stride&quot;; &quot;the fluid motion of a cat&quot;; &quot;the liquid grace of a ballerina&quot;; &quot;liquid prose&quot; [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
View 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
View 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.