Source code for stosim.analysis.tester

#!/usr/bin/python

'''
tester
=======
'''

import sys
import os.path as osp
from shutil import rmtree
from subprocess import Popen

from stosim.sim import utils
from stosim.analysis import harvester


[docs]def ttest(simfolder, c, i, delim): ''' Run a T-test with Gnu R :param string simfolder: path to simulation folder :param ConfigParser c: the config file where this test is described :param int i: number of test in that config file ''' tmp_dir = '%s/tmp_tester' % simfolder # -- prepare data -- # for each of the two datasets, retrieve files and then values sets = [] for dset in [1,2]: d = utils.decode_search_from_confstr(c.get('ttest%i' % i, 'set%i' % dset), sim = c.get('meta', 'name')) if '_name' in d and '_col' in d and d['_col'].isdigit(): sets.append(d['_name']) searches = {d['_name'] : [(k, d[k]) for k in list(d.keys()) if not k in ['_name', '_col']]} harvester.collect_files(searches, "%s/data" % simfolder, tmp_dir) #TODO: custom selectors? if '_select' not in d: d['_select'] = 'all' harvester.collect_values("%s/%s" % (tmp_dir, d['_name']), delim, '%s/%s.dat' % (tmp_dir, d['_name']), cols=[int(d['_col'])], selector=d['_select'] ) else: print('[StoSim] Warning: Incomplete T-test specification for test %i in Experiment %s, dataset number %i. '\ 'Specify at least _name and _col.' % (i, c.get('meta', 'name'), dset)) # -- run test -- if osp.exists('%s/%s.dat' % (tmp_dir, sets[0])) and osp.exists('%s/%s.dat' % (tmp_dir, sets[1])): if c.has_option('ttest%i' %i, 'custom-script'): custom_script = c.get('ttest%i' % i, 'custom-script') if not osp.exists(custom_script): print("[StoSim] Cannot find custom script at [%s]. Aborting ..." % (custom_script)) print("") return print('[StoSim] Using custom script at %s' % custom_script) Popen('cp %s %s/ttest.r' % (custom_script, tmp_dir), shell=True).wait() else: rscript = open('%s/ttest.r' % tmp_dir, 'w') rscript.write("%s <- read.table('%s.dat')\n" % (sets[0], sets[0])) rscript.write("%s <- read.table('%s.dat')\n" % (sets[1], sets[1])) rscript.write("t.test(%s,%s)" % (sets[0], sets[1])) rscript.close() Popen('cd %s; R --vanilla --silent < ttest.r' % tmp_dir, shell=True).wait() if osp.exists(tmp_dir) and not '-k' in sys.argv: rmtree(tmp_dir)