diff --git a/.travis.yml b/.travis.yml index 29957d2b..87a0dff9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,3 +2,12 @@ sudo: required services: - docker + +env: + - OCTAVE_VERSION=5.1.0 + +before_install: + - docker pull mtmiller/octave:${OCTAVE_VERSION} + +script: + - docker run -v $(pwd):/SCINGE -w /SCINGE --entrypoint "/bin/bash" mtmiller/octave:${OCTAVE_VERSION} -c "./install_glmnet_docker.sh; octave -v; octave SCINGE_Example.m" diff --git a/SCINGE_Example.m b/SCINGE_Example.m index 6b0b73d7..d62ff24e 100644 --- a/SCINGE_Example.m +++ b/SCINGE_Example.m @@ -33,4 +33,4 @@ gene_list = tf; %% Run SCINGE -[ranked_edges, gene_influence] = SCINGE(gene_list,Data,outdir,num_replicates,param_list); \ No newline at end of file +[ranked_edges, gene_influence] = SCINGE(gene_list,Data,outdir,num_replicates,param_list); diff --git a/code/GLG_Instance.m b/code/GLG_Instance.m index a78bc1ef..1a245212 100644 --- a/code/GLG_Instance.m +++ b/code/GLG_Instance.m @@ -6,43 +6,7 @@ function GLG_Instance(Data,varargin) % tic %%% InputParser -p = inputParser; -def_lambda = 0.01; -def_dT = 1; -def_rep = 0; -def_width = 2; -def_probzero = 0; -def_family = 'gaussian'; -def_L = 15; -def_ID = 0; -def_outdir = 'Output'; -def_prob_remove_samples = 0.2; -def_date = date; -% -expected_family = {'gaussian','poisson'}; -validScalar = @(x) isnumeric(x) && isscalar(x) && (x >= 0); -validFile = @(x) isfilecomp(x); -validString = @(x) ischar(x) && isempty(regexp(x,'[\/?*''."<>|]','once')); -validInteger = @(x) (x - floor(x)==0) && (x >= 0); -validLags = @(x) (x - floor(x)==0) && (p.Results.dT*x)<100; -validProb = @(x) isnumeric(x) && isscalar(x) && (x >= 0) &&(x<1); -validDate = @(x) any(ismember({datestr(datenum(x) ,['mm/dd/yyyy']) datestr(datenum(x))},x)); -addRequired(p,'Data',validFile); -addParameter(p,'family',def_family,@(x) any(validatestring(x,expected_family))); -addParameter(p,'outdir',def_outdir,validString); -addParameter(p,'lambda',def_lambda,validScalar); -addParameter(p,'dT',def_dT,validScalar); -addParameter(p,'num_lags',def_L,validLags); -addParameter(p,'kernel_width',def_width,validScalar); -addParameter(p,'prob_zero_removal',def_probzero,validProb); -addParameter(p,'prob_remove_samples',def_prob_remove_samples,validProb); -addParameter(p,'replicate',def_rep,validInteger); -addParameter(p,'ID',def_ID,validInteger); -addParameter(p,'date',def_date,validDate); -parse(p,Data,varargin{:}); -params = p.Results; -params.p1 = p.Results.dT*p.Results.num_lags; -params.DateNumber = datenum(params.date); +params = parseParams(Data,varargin{:}) mkdir(params.outdir) %%% End InputParser tic; @@ -89,20 +53,4 @@ function GLG_Instance(Data,varargin) if isdeployed quit; end -end - -function y = isfilecomp(x) -if verLessThan('matlab','9.3') - if (exist([x '.mat'], 'file') == 2)||(exist(x, 'file') == 2) - y = 1; - else - y = 0; - end -else - if (isfile([x '.mat'])||isfile(x)) - y = 1; - else - y = 0; - end -end end \ No newline at end of file diff --git a/code/parseParams.m b/code/parseParams.m new file mode 100644 index 00000000..66abad74 --- /dev/null +++ b/code/parseParams.m @@ -0,0 +1,47 @@ +function params = parseParams(Data,varargin) +p = inputParser; +def_lambda = 0.01; +def_dT = 1; +def_rep = 0; +def_width = 2; +def_probzero = 0; +def_family = 'gaussian'; +def_L = 15; +def_ID = 0; +def_outdir = 'Output'; +def_prob_remove_samples = 0.2; +def_date = date; +% +expected_family = {'gaussian','poisson'}; +validScalar = @(x) isnumeric(x) && isscalar(x) && (x >= 0); +validFile = @(x) isfilecomp(x); +validString = @(x) ischar(x) && isempty(regexp(x,'[\/?*''."<>|]','once')); +validInteger = @(x) (x - floor(x)==0) && (x >= 0); +validLags = @(x) (x - floor(x)==0) && (p.Results.dT*x)<100; +validProb = @(x) isnumeric(x) && isscalar(x) && (x >= 0) &&(x<1); +validDate = @(x) any(ismember({datestr(datenum(x) ,['mm/dd/yyyy']) datestr(datenum(x))},x)); +addRequired(p,'Data',validFile); +addParameter(p,'family',def_family,@(x) any(validatestring(x,expected_family))); +addParameter(p,'outdir',def_outdir,validString); +addParameter(p,'lambda',def_lambda,validScalar); +addParameter(p,'dT',def_dT,validScalar); +addParameter(p,'num_lags',def_L,validLags); +addParameter(p,'kernel_width',def_width,validScalar); +addParameter(p,'prob_zero_removal',def_probzero,validProb); +addParameter(p,'prob_remove_samples',def_prob_remove_samples,validProb); +addParameter(p,'replicate',def_rep,validInteger); +addParameter(p,'ID',def_ID,validInteger); +addParameter(p,'date',def_date,validDate); +parse(p,Data,varargin{:}); +params = p.Results; +params.p1 = p.Results.dT*p.Results.num_lags; +params.DateNumber = datenum(params.date); +end + +function y = isfilecomp(x) + if (exist([x '.mat'], 'file') == 2)||(exist(x, 'file') == 2) + y = 1; + else + y = 0; + end +end \ No newline at end of file diff --git a/install_glmnet_docker.sh b/install_glmnet_docker.sh new file mode 100755 index 00000000..5696d1fc --- /dev/null +++ b/install_glmnet_docker.sh @@ -0,0 +1,15 @@ +#!/bin/bash +# Install Glmnet by downloading from +# http://web.stanford.edu/~hastie/glmnet_matlab/index.html +# and compiling for Octave +curl -O http://web.stanford.edu/~hastie/glmnet_matlab/glmnet_matlab.zip +unzip glmnet_matlab.zip + +cd glmnet_matlab +curl -O https://raw.githubusercontent.com/SheffieldML/GPmat/master/kern/mex/fintrf.h +mkoctfile --verbose --mex glmnetMex.F GLMnet.f + +cd .. + +# To help debugging +gfortran --version