summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormguetlein <martin.guetlein@gmail.com>2011-12-07 16:29:53 +0100
committermguetlein <martin.guetlein@gmail.com>2011-12-07 16:29:53 +0100
commit7857133b8f3de2ee7bc8d247b0f8ca8ffd8c9b1b (patch)
tree321b90b0dafc3d9223850851f36fc0c5c946c52a
parent3e091b1934e824f2e63266aa86545ad63a205da9 (diff)
parent77717b7e8ec648cac15cb477bdce5d3993d8f217 (diff)
Merge branch 'development' of github.com:opentox/test into development
-rw-r--r--5x_cv/5x_crossvalidation.rb58
-rwxr-xr-x5x_cv/comparealgs_dv.sh14
-rw-r--r--5x_cv/dataset_config13
-rw-r--r--5x_cv/exceptions_config.yaml6
-rw-r--r--5x_cv/factors_config1
-rw-r--r--5x_cv/lib/cv_am.rb161
-rwxr-xr-x5x_cv/wrapper5cv.sh38
-rw-r--r--lazar.rb68
-rw-r--r--toxcreate.rb198
9 files changed, 403 insertions, 154 deletions
diff --git a/5x_cv/5x_crossvalidation.rb b/5x_cv/5x_crossvalidation.rb
new file mode 100644
index 0000000..bdde2dc
--- /dev/null
+++ b/5x_cv/5x_crossvalidation.rb
@@ -0,0 +1,58 @@
+# Do a five times 10-fold crossvalidation
+# # Author: Andreas Maunz, David Vorgrimmler
+# # @params: CSV-File, Method (LAST, BBRC), Minimum Frequency
+
+require 'rubygems'
+require 'opentox-ruby'
+require 'lib/cv_am.rb'
+
+subjectid = nil
+
+if ARGV.size != 1
+ puts
+ puts "Error! Arguments: <algorithm_params> in the form p1=v1;p2=v2;...;pn=vn"
+ exit 1
+end
+
+# Arguments for lib/cv.rb: file_or_dataset_uri feature_generation min_frequency min_chisq_significance backbone stratified random_seed prediction_algorithm local_svm_kernel nr_hits conf_stdev
+position_mapper={
+ "dataset_uri" => 0,
+ "feature_generation_uri" => 1,
+ "min_frequency" => 2,
+ "min_chisq_significance" => 3,
+ "backbone" => 4,
+ "stratified" => 5,
+ "random_seed" => 6,
+ "prediction_algorithm" => 7,
+ "local_svm_kernel" => 8,
+ "nr_hits" => 9,
+ "conf_stdev" => 10
+}
+
+param_str=$ARGV[0]
+puts param_str
+params = Array.new(position_mapper.size,"")
+param_str.split(";").each { |param|
+ k,v = param.split("=")
+ params[position_mapper[k]] = v
+}
+params[5]="false" # stratified
+
+exception_config = YAML.load_file("exceptions_config.yaml")
+if ! exception_config[params[0]].nil?
+ exception_config[params[0]].each { |k,v|
+ puts "Setting exception: #{k} => #{v}"
+ params[position_mapper[k]] = v
+ }
+end
+
+for i in 1..5
+ begin
+ puts
+ puts "Round #{i.to_s}."
+ params[6]=i # random seed
+ cv(params)
+ rescue Exception => e
+ puts "Error in 5xCV: #{e.message}: #{e.backtrace}"
+ end
+end
diff --git a/5x_cv/comparealgs_dv.sh b/5x_cv/comparealgs_dv.sh
new file mode 100755
index 0000000..1b7a7b4
--- /dev/null
+++ b/5x_cv/comparealgs_dv.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+if [ $# -ne 4 ]; then
+ echo "\"validation_uri1,validation_uri2,...\" \"identifier1,identifier2,...\" \"significance [0.95-0.6]\" \"attributes: weighted_r_square,weighted_root_mean_squared_error,weighted_mean_absolute_error,r_square,root_mean_squared_error,sample_correlation_coefficient\""
+ exit 1
+fi
+
+uris="$1"
+iden="$2"
+signi="$3" #default 0.9; 0.95 - 0.6
+attri="$4" #weighted_r_square,weighted_root_mean_squared_error,weighted_mean_absolute_error,r_square,root_mean_squared_error,sample_correlation_coefficient
+host="toxcreate3.in-silico.ch:8080"
+
+curl -X POST -d "validation_uris=$uris" -d "identifier=$iden" -d "ttest_significance=$signi" -d "ttest_attributes=$attri" http://$host/validation/report/algorithm_comparison
diff --git a/5x_cv/dataset_config b/5x_cv/dataset_config
new file mode 100644
index 0000000..a52649c
--- /dev/null
+++ b/5x_cv/dataset_config
@@ -0,0 +1,13 @@
+#EPA v4b Fathead Minnow Acute Toxicity LC50_mmol
+http://toxcreate3.in-silico.ch:8080/dataset/2133
+#CPDBAS_v5d_20Nov2008_rat_TD50
+#http://toxcreate3.in-silico.ch:8080/dataset/1408
+#CPDBAS_v5d_20Nov2008_mouse_TD50
+#http://toxcreate3.in-silico.ch:8080/dataset/1384
+#MultiCellCall: DSSTox Carcinogenic Potency DBS MultiCellCall_no_duplicates.csv
+#http://toxcreate3.in-silico.ch:8080/dataset/130
+#Bloodbarr: bloodbarr_no_duplicate.csv
+#http://toxcreate3.in-silico.ch:8080/dataset/271
+#Salmonella Mutagenicity: DSSTox Carcinogenic Potency DBS Mutagenicity_no_duplicates.csv
+#http://toxcreate3.in-silico.ch:8080/dataset/233
+
diff --git a/5x_cv/exceptions_config.yaml b/5x_cv/exceptions_config.yaml
new file mode 100644
index 0000000..7124c62
--- /dev/null
+++ b/5x_cv/exceptions_config.yaml
@@ -0,0 +1,6 @@
+http://toxcreate3.in-silico.ch:8080/dataset/271:
+ min_frequency: 12
+http://x61s.fdm.uni-freiburg.de/dataset/3546:
+ min_frequency: 8
+http://x61s.fdm.uni-freiburg.de/dataset/3543:
+ min_frequency: 6
diff --git a/5x_cv/factors_config b/5x_cv/factors_config
new file mode 100644
index 0000000..72dbb5f
--- /dev/null
+++ b/5x_cv/factors_config
@@ -0,0 +1 @@
+feature_generation_uri=http://toxcreate3.in-silico.ch:8080/algorithm/fminer/bbrc
diff --git a/5x_cv/lib/cv_am.rb b/5x_cv/lib/cv_am.rb
new file mode 100644
index 0000000..965cd5b
--- /dev/null
+++ b/5x_cv/lib/cv_am.rb
@@ -0,0 +1,161 @@
+# Do a 10-fold crossvalidation with mutiple datasets
+# Author: Andreas Maunz, David Vorgrimmler
+# @params: CSV-File, Method (LAST, BBRC), Minimum Frequency
+
+def cv (args)
+
+ subjectid = nil#OpenTox::Authorization.authenticate(guest,guest)
+
+ if args.size != 11
+ puts
+ puts "Error! Arguments: file_or_dataset_uri feature_generation min_frequency min_chisq_significance backbone stratified random_seed prediction_algorithm local_svm_kernel nr_hits conf_stdev"
+ exit 1
+ end
+
+ reg=/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
+
+ file=args[0]
+
+
+ # dataset_is_uri=false
+ # if reg.match(file)? true : false
+ # #file.include? "http"
+ # puts "Uri is valid"
+ dataset_is_uri=true
+# files = [ file ]
+ # elsif ! File.exists? file
+ # puts "File #{file} missing"
+ # exit 1
+ # end
+
+# if args[1].to_s != "last" && args[1].to_s != "bbrc"
+ if !(args[1].to_s.include? "/algorithm/fminer/bbrc") && !(args[1].to_s.include? "/algorithm/fminer/last")
+ puts "feature_generation_uri must contain '/algorithm/fminer/last' or '/algorithm/fminer/bbrc'"
+# puts "feature_generation must be 'last' or 'bbrc'"
+ exit 1
+ end
+
+ if ! args[2] == ""
+ if args[2].to_i < 2
+ puts "min_frequency must be at least 2 or \"\""
+ exit 1
+ end
+ end
+
+ if ! args[3] == ""
+ if ! (args[3].to_f <= 1.0 && args[3].to_f >= 0.0)
+ puts "min_chisq_significance must be between 0 and 1 or \"\""
+ exit 1
+ end
+ end
+
+ if ! args[4] == ""
+ if args[4].to_s != "true" && args[4].to_s != "false"
+ puts "backbone must be 'true' or 'false'."
+ exit 1
+ end
+ end
+
+
+ if args[5].to_s != "true" && args[5].to_s != "false"
+ puts "stratified must be 'true' or 'false'"
+ exit 1
+ end
+
+ if ! args[6] == ""
+ if ! (args[6].to_i <= 1)
+ puts "random_seed must be a natural number or \"\""
+ exit 1
+ end
+ end
+
+ if ! args[7] == ""
+ if ! (args[7] == "local_svm_classification")
+ puts "lazar_prediction_method must be \"local_svm_classification\""
+ exit 1
+ end
+ end
+
+ if ! args[8] == ""
+ if ! (args[8] == "weighted_tanimoto" || args[8] == "propositionalized")
+ puts "local_svm_kernel must be \"weighted_tanimoto\" or \"propositionalized\""
+ exit 1
+ end
+ end
+
+ if ! args[9] == ""
+ if ! (args[9] == "true")
+ puts "nr_hits must be \"true\""
+ exit 1
+ end
+ end
+
+ if ! args[10] == ""
+ if ! (args[10] == "true")
+ puts "conf_stdev must be \"true\""
+ exit 1
+ end
+ end
+
+
+
+ #if !dataset_is_uri
+ # # Upload a dataset
+ # training_dataset = OpenTox::Dataset.create_from_csv_file(file, subjectid)
+ # prediction_feature = training_dataset.features.keys[0]
+ # training_dataset_uri=training_dataset.uri
+ # puts prediction_feature
+ #else
+ training_dataset_uri=file
+ puts training_dataset_uri
+ prediction_feature = OpenTox::Dataset.find(training_dataset_uri).features.keys.first
+ puts prediction_feature
+ # end
+ puts training_dataset_uri
+
+
+ # Crossvalidation
+ # @param [Hash] params (required:algorithm_uri,dataset_uri,prediction_feature, optional:algorithm_params,num_folds(10),random_seed(1),stratified(false))
+ alg_params = "feature_generation_uri=#{args[1]}";
+ alg_params = alg_params << ";min_frequency=#{args[2]}" unless args[2]==""
+ alg_params = alg_params << ";min_chisq_significance=#{args[3]}" unless args[3]==""
+ alg_params = alg_params << ";backbone=#{args[4]}" unless args[4]==""
+ alg_params = alg_params << ";prediction_algorithm=#{args[7]}" unless args[7]==""
+ alg_params = alg_params << ";local_svm_kernel=#{args[8]}" unless args[8]==""
+ alg_params = alg_params << ";nr_hits=#{args[9]}" unless args[9]==""
+ alg_params = alg_params << ";conf_stdev=#{args[10]}" unless args[10]==""
+
+ stratified_param = args[5]
+ random_seed_param = args[6]
+
+ cv_args = {:dataset_uri => training_dataset_uri, :prediction_feature => prediction_feature, :algorithm_uri => args[1].split('fminer')[0] + "lazar", :algorithm_params => alg_params, :stratified => stratified_param }
+ cv_args[:random_seed] = random_seed_param unless random_seed_param == ""
+ puts file
+ puts cv_args.to_yaml
+ puts
+ begin
+ lazar_single_args = {}
+ lazar_single_args[:feature_generation_uri] = "#{args[1]}";
+ lazar_single_args[:min_frequency] = args[2] unless args[2]==""
+ lazar_single_args[:min_chisq_significance] = args[3] unless args[3]==""
+ lazar_single_args[:backbone] = args[4] unless args[4]==""
+ lazar_single_args[:prediction_algorithm] = args[7] unless args[7]==""
+ lazar_single_args[:local_svm_kernel] = args[8] unless args[8]==""
+ lazar_single_args[:nr_hits] = args[9] unless args[9]==""
+ lazar_single_args[:conf_stdev] = args[10] unless args[10]==""
+ #m = OpenTox::Algorithm::Lazar.new.run({:dataset_uri => training_dataset_uri, :subjectid => subjectid}.merge lazar_single_args ).to_s
+ #puts m
+ cv = OpenTox::Crossvalidation.create(cv_args).uri
+ puts cv
+ cvr = OpenTox::CrossvalidationReport.create( cv , subjectid).uri
+ puts cvr
+ #qmrfr = OpenTox::QMRFReport.create(m).uri
+ #puts qmrfr
+ #cv_stat = OpenTox::Validation.from_cv_statistics( cv, subjectid )
+ #puts cv_stat.metadata.to_yaml
+ #[ cv_stat, training_dataset_uri ]
+ rescue Exception => e
+ puts "cv failed: #{e.message} #{e.backtrace}"
+ end
+
+end
diff --git a/5x_cv/wrapper5cv.sh b/5x_cv/wrapper5cv.sh
new file mode 100755
index 0000000..2155635
--- /dev/null
+++ b/5x_cv/wrapper5cv.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+# Wrapper Skript for CV
+# Set Factors, Datasets, Exceptions in the respective config_files
+# AM, 2011
+
+if [ $# -lt 2 ]; then
+ echo "Usage: $0 factors datasets"
+ exit
+fi
+
+# Configure basics
+source $HOME/.bash_aliases
+otconfig
+THIS_DATE=`date +%Y%m%d_%H_`
+FACTORS="$1"
+DATASETS="$2"
+
+# Don't start when running
+while ps x | grep 5x | grep -v grep >/dev/null 2>&1; do sleep 3; done
+
+LOGFILE="$THIS_DATE""$USER""_wrapper5cv.log"
+rm "$LOGFILE" >/dev/null 2>&1
+
+cat $DATASETS | while read dataset_uri; do
+ if ! [[ "$dataset_uri" =~ "#" ]]; then # allow comments
+ cat $FACTORS | while read factor; do
+ if ! [[ "$factor" =~ "#" ]]; then # allow comments
+ echo "${THIS_DATE}: $factor" >> $LOGFILE>&1
+ factor="$factor;dataset_uri=$dataset_uri"
+ echo "ruby 5x_crossvalidation.rb $factor" >> $LOGFILE 2>&1
+ ruby 5x_crossvalidation.rb $factor >> $LOGFILE 2>&1
+ fi
+ done
+ else
+ echo >> $LOGFILE 2>&1
+ echo $dataset_uri >> $LOGFILE 2>&1
+ fi
+done
diff --git a/lazar.rb b/lazar.rb
index a46e2f2..6aa8239 100644
--- a/lazar.rb
+++ b/lazar.rb
@@ -65,8 +65,8 @@ class LazarTest < Test::Unit::TestCase
def test_create_regression_model
create_model :dataset_uri => @@regression_training_dataset.uri
predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
- assert_equal 1.09.round_to(2), @predictions.first.value(@compounds.first).round_to(2)
- assert_equal 0.453.round_to(3), @predictions.first.confidence(@compounds.first).round_to(3)
+ assert_in_delta @predictions.first.value(@compounds.first), 0.517, 0.1
+ assert_equal 0.61.round_to(3), @predictions.first.confidence(@compounds.first).round_to(3)
assert_equal 253, @predictions.first.neighbors(@compounds.first).size
cleanup
end
@@ -74,7 +74,7 @@ class LazarTest < Test::Unit::TestCase
def test_create_regression_prop_model
create_model :dataset_uri => @@regression_training_dataset.uri, :local_svm_kernel => "propositionalized"
predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
- assert_equal 0.453.round_to(3), @predictions.first.confidence(@compounds.first).round_to(3)
+ assert_equal 0.61.round_to(3), @predictions.first.confidence(@compounds.first).round_to(3)
assert_equal 253, @predictions.first.neighbors(@compounds.first).size
assert_equal 131, @model.features.size
cleanup
@@ -91,7 +91,7 @@ class LazarTest < Test::Unit::TestCase
# assertions
# single prediction
assert_equal "false", @predictions[0].value(@compounds[0])
- assert_equal 0.2938.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4)
+ assert_equal 0.3383.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4)
assert_equal 16, @predictions[0].neighbors(@compounds[0]).size
# dataset activity
assert !@predictions[1].measured_activities(@compounds[1]).empty?
@@ -103,7 +103,7 @@ class LazarTest < Test::Unit::TestCase
assert_equal "true", @predictions[2].measured_activities(c).first.to_s
c = OpenTox::Compound.from_smiles("c1ccccc1NN")
assert_equal "false", @predictions[2].value(c)
- assert_equal 0.2938.round_to(4) , @predictions[2].confidence(c).round_to(4)
+ assert_equal 0.3383.round_to(4) , @predictions[2].confidence(c).round_to(4)
# model
assert_equal 41, @model.features.size
cleanup
@@ -116,7 +116,7 @@ class LazarTest < Test::Unit::TestCase
predict_dataset OpenTox::Dataset.create_from_csv_file("data/multicolumn.csv", @@subjectid)
assert_equal "false", @predictions[0].value(@compounds[0])
- assert_equal 0.3952.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4)
+ assert_equal 0.5587.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4)
assert_equal 16, @predictions[0].neighbors(@compounds[0]).size
c = OpenTox::Compound.from_smiles("c1ccccc1NN")
@@ -135,7 +135,7 @@ class LazarTest < Test::Unit::TestCase
assert_equal "false", @predictions[0].value(@compounds[0])
#assert_equal 0.2938.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4)
- assert_equal 0.3952.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4)
+ assert_equal 0.5587.round_to(4), @predictions[0].confidence(@compounds[0]).round_to(4)
assert_equal 16, @predictions[0].neighbors(@compounds[0]).size
c = OpenTox::Compound.from_smiles("c1ccccc1NN")
@@ -146,33 +146,33 @@ class LazarTest < Test::Unit::TestCase
cleanup
end
- def test_regression_mlr_prop_model
- create_model :dataset_uri => @@regression_training_dataset.uri, :prediction_algorithm => "local_mlr_prop"
- predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
- assert_equal 0.453, @predictions.first.confidence(@compounds.first).round_to(3)
- assert_equal 0.265, @predictions.first.value(@compounds.first).round_to(3)
- assert_equal 253, @predictions.first.neighbors(@compounds.first).size
- assert_equal 131, @model.features.size
- end
-
- def test_regression_mlr_prop_conf_stdev
- create_model :dataset_uri => @@regression_training_dataset.uri, :prediction_algorithm => "local_mlr_prop", :conf_stdev => "true"
- predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
- assert_equal 0.154, @predictions.first.confidence(@compounds.first).round_to(3)
- assert_equal 0.265, @predictions.first.value(@compounds.first).round_to(3)
- assert_equal 253, @predictions.first.neighbors(@compounds.first).size
- assert_equal 131, @model.features.size
- end
-
-
- def test_regression_mlr_prop_weighted_model
- create_model :dataset_uri => @@regression_training_dataset.uri, :prediction_algorithm => "local_mlr_prop", :nr_hits => "true"
- predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
- assert_equal 0.453, @predictions.first.confidence(@compounds.first).round_to(3)
- assert_equal 0.265, @predictions.first.value(@compounds.first).round_to(3)
- assert_equal 253, @predictions.first.neighbors(@compounds.first).size
- assert_equal 131, @model.features.size
- end
+# def test_regression_mlr_prop_model
+# create_model :dataset_uri => @@regression_training_dataset.uri, :prediction_algorithm => "local_mlr_prop"
+# predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
+# assert_equal 0.453, @predictions.first.confidence(@compounds.first).round_to(3)
+# assert_equal 0.265, @predictions.first.value(@compounds.first).round_to(3)
+# assert_equal 253, @predictions.first.neighbors(@compounds.first).size
+# assert_equal 131, @model.features.size
+# end
+#
+# def test_regression_mlr_prop_conf_stdev
+# create_model :dataset_uri => @@regression_training_dataset.uri, :prediction_algorithm => "local_mlr_prop", :conf_stdev => "true"
+# predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
+# assert_equal 0.154, @predictions.first.confidence(@compounds.first).round_to(3)
+# assert_equal 0.265, @predictions.first.value(@compounds.first).round_to(3)
+# assert_equal 253, @predictions.first.neighbors(@compounds.first).size
+# assert_equal 131, @model.features.size
+# end
+#
+#
+# def test_regression_mlr_prop_weighted_model
+# create_model :dataset_uri => @@regression_training_dataset.uri, :prediction_algorithm => "local_mlr_prop", :nr_hits => "true"
+# predict_compound OpenTox::Compound.from_smiles("c1ccccc1NN")
+# assert_equal 0.453, @predictions.first.confidence(@compounds.first).round_to(3)
+# assert_equal 0.265, @predictions.first.value(@compounds.first).round_to(3)
+# assert_equal 253, @predictions.first.neighbors(@compounds.first).size
+# assert_equal 131, @model.features.size
+# end
def test_conf_stdev
params = {:sims => [0.6,0.72,0.8], :acts => [1,1,1], :neighbors => [1,1,1], :conf_stdev => true} # stdev = 0
diff --git a/toxcreate.rb b/toxcreate.rb
index 9b40e0e..14e61c4 100644
--- a/toxcreate.rb
+++ b/toxcreate.rb
@@ -4,12 +4,14 @@ require 'opentox-ruby'
require 'test/unit'
require 'akephalos'
require 'capybara/dsl'
+gem 'capybara-envjs'
+require 'capybara/envjs' # gem install capybara-envjs
+# requires firefox 3.6 for akephalos and selenium !!!
Capybara.default_driver = :akephalos # use this without visual inspection
#Capybara.default_driver = :selenium # use this for visual inspection
Capybara.run_server = false
Capybara.default_wait_time = 1000
-#Capybara.javascript_driver = :selenium
-
+Capybara.javascript_driver = :envjs
class ToxCreateTest < Test::Unit::TestCase
include Capybara
@@ -18,37 +20,38 @@ class ToxCreateTest < Test::Unit::TestCase
@user = "guest"
@password = "guest"
end
-
- def teardown
- end
-
-=begin
+=begin # works only with AA enabled
def test_01_login
visit File.join(CONFIG[:services]["opentox-toxcreate"], "login")
- click_button "Login"
- puts "Login without credentials"
- assert page.has_content?("Please enter username and password.")
+ assert page.has_content?('User: guest')
fill_in('Username', :with => @user)
fill_in('Password', :with => @password + "nonsense")
- click_button "Login"
- puts "Login with wrong password"
- assert page.has_content?('Login failed. Please try again.')
- fill_in('Username', :with => "anonymous")
- fill_in('Password', :with => "anonymous")
- click_button "Login"
- assert page.has_content?("Welcome anonymous!")
+ click_button('Login')
+ assert page.has_content? "Login failed. Please try again."
+ fill_in('Username', :with => @user)
+ fill_in('Password', :with => @password)
+ click_button('Login')
+ assert page.has_content? "Welcome #{@user}!"
visit File.join(CONFIG[:services]["opentox-toxcreate"], "login")
- click_button "Login as guest"
- puts "Login as user guest"
- assert page.has_content?("Welcome guest!")
+ assert page.has_content?('User: guest')
+ fill_in('Username', :with => @user)
+ fill_in('Password', :with => @password + "nonsense")
+ click_button('Login')
+ assert page.has_content? "Login failed. Please try again."
+ click_button('Login as guest')
+ assert page.has_content? "Welcome #{@user}!"
end
-
+=end
def test_02_toxcreate # works only with akephalos
+ # create a model and check status is complete
Capybara.current_driver = :akephalos
- #login(@browser, @user, @password)
- visit CONFIG[:services]["opentox-toxcreate"]
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "create")
assert page.has_content?('Upload training data')
- attach_file('file', "./data/hamster_carcinogenicity.mini.csv")
+ attach_file('file', "./data/hamster_carcinogenicity.csv")
+ assert page.has_button?('endpoint_list_button')
+ click_on "Select endpoint"
+ choose('EcotoxicEffects')
+ choose('Acute_toxicity_to_fish_lethality')
click_on "Create model"
assert first("h2").has_content? "hamster_carcinogenicity"
time = 0
@@ -57,119 +60,84 @@ class ToxCreateTest < Test::Unit::TestCase
time +=5
end
assert first(".model_status").has_content?("Completed")
+ sleep 5
end
-=end
+
def test_03_predict
+ # predict with the model from test_02
Capybara.register_driver :akephalos do |app|
Capybara::Driver::Akephalos.new(app, :validate_scripts => false)
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "predict")
+ fill_in 'identifier', :with => 'NNc1ccccc1'
+ find(:xpath, '//form/fieldset[2]/input[contains(@name, "select")]').click
+ click_button("Predict")
+ click_button("Details")
+ page.has_content? "false"
+ page.has_content? "0.294"
+ page.has_content? "0.875"
+ page.has_content? "next"
end
- session = Capybara::Session.new(:akephalos)
- session.visit CONFIG[:services]["opentox-toxcreate"]
- session.click_on "Predict"
- session.fill_in "or enter a Smiles string", :with => "NNc1ccccc1"
- session.check "hamster carcinogenicity"
- session.click_button "Predict"
- assert session.has_content?("Not enough similar compounds in training dataset")
- session.click_on "Confidence"
- assert session.has_content?("Indicates the applicability domain of a model")
- session.click_button "Details"
-
- #assert page.has_content? "false"
- #assert page.has_content? "0.294"
- #assert page.has_content? "0.875"
- end
-=begin
- def test_04_inspect_policies
- Capybara.current_driver = :selenium
- visit CONFIG[:services]["opentox-toxcreate"]
- click_on "Inspect"
- assert first('h2').has_content? 'hamster_carcinogenicity'
- click_on "edit"
- click_on "manage policy"
- within(:xpath, '//form[contains(@id, "form_policy_group_member_")]') do
- find(:xpath, './/input[5]').click
- click_on "update"
- end
- sleep 5
- end
-
- def test_05_inspect_policies
- Capybara.current_driver = :selenium
- visit CONFIG[:services]["opentox-toxcreate"]
- click_on "Inspect"
- assert first('h2').has_content? 'hamster_carcinogenicity'
- click_on "edit"
- click_on "manage policy"
-
- within(:xpath, '//form[contains(@id, "form_policy_group_member_")]') do
- find(:xpath, './/input[4]').click
- click_on "update"
- end
- sleep 5
- end
-
- def test_06_inspect_policies
- Capybara.current_driver = :selenium
- visit CONFIG[:services]["opentox-toxcreate"]
- click_on "Inspect"
- assert first('h2').has_content? 'hamster_carcinogenicity'
- click_on "edit"
- click_on "manage policy"
- within(:xpath, '//form[contains(@id, "form_development")]') do
- find(:xpath, './/input[4]').click
- click_on "add"
- end
- sleep 5
end
-
- def test_07_inspect_policies
- Capybara.current_driver = :selenium
- visit CONFIG[:services]["opentox-toxcreate"]
- click_on "Inspect"
- assert first('h2').has_content? 'hamster_carcinogenicity'
- click_on "edit"
- click_on "manage policy"
- within(:xpath, '//form[contains(@id, "form_policy_group_development_")]') do
- find(:xpath, './/input[3]').click
- click_on "update"
- end
+
+ def test_04_delete_model
+ # delete the model from test_02
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "models")
+ assert (first(".model_status").has_content?("Completed") or first(".model_status").has_content?("Error"))
+ click_on "delete"
+ page.evaluate_script('window.confirm = function() { return true; }')
sleep 5
- page.evaluate_script('window.confirm = function() { return true; }')
- click_on "delete"
end
-
=begin
- def test_08_multi_cell_call
+ def test_09_multi_cell_call
#login(@browser, @user, @password)
- Capybara.current_driver = :akephalos
- visit CONFIG[:services]["opentox-toxcreate"]
+ #Capybara.current_driver = :akephalos
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "create")
assert page.has_content?('Upload training data')
attach_file('file', "./data/multi_cell_call.csv")
click_on "Create model"
end
- def test_09_kazius
- Capybara.current_driver = :akephalos
+ def test_10_kazius
+ #Capybara.current_driver = :akephalos
#login(@browser, @user, @password)
- visit CONFIG[:services]["opentox-toxcreate"]
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "create")
assert page.has_content?('Upload training data')
attach_file('file', "./data/kazius.csv")
# wait until validation is completed
# check results (links, reports, results)
puts @browser.url
end
-
- def test_10_parallel_models
- #login(@browser, @user, @password)
- 10.times do
- visit CONFIG[:services]["opentox-toxcreate"]
+
+ def test_11_parallel_models
+ 5.times do
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "create")
assert page.has_content?('Upload training data')
- attach_file('file', "./data/multi_cell_call.csv")
+ attach_file('file', "./data/hamster_carcinogenicity.csv")
click_on "Create model"
end
+ while (first(".model_status").has_no_content?("Completed") and first(".model_status").has_no_content?("Error")) do
+ sleep 1
+ end
+ assert first(".model_status").has_content?("Completed")
+ end
+
+ def test_12_delete_parallel_models
+ 5.times do
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "models")
+ click_on "delete"
+ page.evaluate_script('window.confirm = function() { return true; }')
+ #sleep 5
+ end
+ sleep 5
+ visit File.join(CONFIG[:services]["opentox-toxcreate"], "models")
+ while page.has_no_content? "There are currently no models" do
+ sleep 1
+ end
+ assert page.has_content? "There are currently no models"
end
+=begin
# raises capybara errors, but gui works from browser
- def test_11_toxcreate_sdf # works only with akephalos
+ def test_12_toxcreate_sdf # works only with akephalos
Capybara.current_driver = :akephalos
#login(@browser, @user, @password)
visit CONFIG[:services]["opentox-toxcreate"]
@@ -186,14 +154,4 @@ class ToxCreateTest < Test::Unit::TestCase
end
=end
-
-=begin
-def login(browser, user, password)
- browser.goto File.join(CONFIG[:services]["opentox-toxcreate"], "login")
- browser.text_field(:id, "username").set(user)
- browser.text_field(:id, "password").set(password)
- browser.button(:value, "Login").click
-end
-
-=end
end