Source code for moiety_modeling.cli
#!/usr/bin/python3
"""
The moiety_modeling command-line interface option
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Usage:
moiety_modeling -h | --help
moiety_modeling --version
moiety_modeling modeling [--combinedData=<combined_jsonfile>] [--models=<models_jsonfile] [--datasets=<datasets_jsonfile>] [--optimizations=<optimizations_jsonfile>] [--working=<working_dir>] [--repetition=<optim_count>] [--split] [--force] [--multiprocess] [--energyFunction=<function>] [--printOptimizationScripts]
moiety_modeling analyze optimizations --a <optimizationPaths_txtfile> [--working=<working_dir>]
moiety_modeling analyze optimizations --s <optimizationResults_jsonfile> [--working=<working_dir>]
moiety_modeling analyze rank <analysisPaths_txtfile> [--working=<working_dir>] [--rankCriteria=<rankCriteria>]
moiety_modeling analyze table <rankPaths_txtfile> [--working=<working_dir>]
moiety_modeling plot moiety <analysisResults_jsonfile> [--working=<working_dir>]
moiety_modeling plot isotopologue <analysisResults_jsonfile> [--working=<working_dir>]
Options:
-h, --help Show this screen.
--version Show version.
--combinedData=<combined_jsonfile> JSON description file of the combined data (eg: models, datasets, optimization settings)
--models=<models_jsonfile> JSON description file of the moiety models.
--datasets=<datasets_jsonfile> JSON description file of the datasets.
--optimizations=<optimizations_jsonfile> JSON description file of the optimization setting.
--working=<working_dir> Alternative path to save the results.
--repetition=<optim_count> The number of optimization repetitions to perform [default: 100].
--split To split the datasets or not.
--force To force optimization process if error occurs.
--multiprocess To perform with multiprocessing or not.
--printOptimizationScripts To print the optimization script or not.
--a To analyze a bunch of optimization results together with the path file.
--s To analyze a single moiety model optimization results.
--energyFunction=<enegyFunction> The energyFunction of the moiety modeling optimization.
--optimizationSetting=<optimizationSetting> The optimization setting of the moiety modeling optimization.
--rankCriteria=<rankCriteria> The criteria for model ranking [default: AICc].
"""
import jsonpickle
import os
from . import modeling
from . import analysis
[docs]def cli(args):
if args['modeling']:
dirName = ''
combinedData = {}
if args['--combinedData']:
dirName += os.path.splitext(os.path.basename(args['--combinedData']))[0] + '_'
with open(args['--combinedData']) as combinedFile:
combinedData = jsonpickle.decode(combinedFile.read())
if args['--models']:
dirName += os.path.splitext(os.path.basename(args['--models']))[0] + '_'
with open(args['--models']) as modelFile:
models = jsonpickle.decode(modelFile.read())['models']
elif 'models' in combinedData:
models = combinedData['models']
else:
raise ImportError("Model is missing!")
if args['--datasets']:
dirName += os.path.splitext(os.path.basename(args['--datasets']))[0] + '_'
with open(args['--datasets']) as datasetFile:
datasets = jsonpickle.decode(datasetFile.read())['datasets']
elif 'datasets' in combinedData:
datasets = combinedData['datasets']
else:
raise ImportError("Dataset is missing!")
if args['--optimizations']:
dirName += os.path.splitext(os.path.basename(args['--optimizations']))[0] + '_'
with open(args['--optimizations']) as settingFile:
optimizations = jsonpickle.decode(settingFile.read())['optimizations']
elif 'optimizations' in combinedData:
optimizations = combinedData['optimizations']
else:
raise ImportError("Optimization setting is missing!")
times = int(args['--repetition']) if args['--repetition'] else 100
dirName += 'T_{0}_'.format(times)
dirName += 'S_' if args['--split'] else 'noS_'
dirName += 'M_' if args['--multiprocess'] else 'noM_'
energyFunction = args['--energyFunction'] if args['--energyFunction'] else 'logDifference'
dirName += energyFunction
if args['--working']:
os.mkdir(args['--working'] + '/' + dirName)
path = args['--working'] + '/' + dirName
else:
if args['--datasets']:
datasetPath = os.path.dirname(args['--datasets'])
os.mkdir(datasetPath + '/' + dirName)
path = datasetPath + '/' + dirName
else:
combinedPath = os.path.dirname(args['--combinedData'])
os.mkdir(combinedPath + '/' + dirName)
path = combinedData + '/' + dirName
manager = modeling.OptimizationManager(models, datasets, optimizations, path, args['--split'], args['--multiprocess'], args['--force'], times, energyFunction, args['--printOptimizationScripts'])
manager.optimizeModels()
elif args['analyze'] or args['plot']:
if args['optimizations']:
if args['--a']:
base = os.path.basename(args['<optimizationPaths_txtfile>'])
baseName = os.path.splitext(base)[0]
path = args['--working'] if args['--working'] else '{0}/{1}_analysis/'.format(os.path.dirname(args['<optimizationPaths_txtfile>']), baseName)
os.mkdir(path)
analysisPathFile = open('{0}{1}_analysis.txt'.format(path, baseName), 'w')
with open(args['<optimizationPaths_txtfile>']) as pathFile:
for fileName in pathFile:
resAnalysis = analysis.ResultsAnalysis(fileName.replace("\n", ""), path)
resAnalysis.analyze()
analysisPathFile.write(resAnalysis.jsonfilePath + '\n')
analysisPathFile.close()
elif args['--s']:
path = args['--working'] if args['--working'] else None
resAnalysis = analysis.ResultsAnalysis(args['<optimizationResults_jsonfile>'], path)
resAnalysis.analyze()
else:
raise ImportError("Something is missing for optimization analysis!")
elif args['rank']:
if args['<analysisPaths_txtfile>']:
path = args['--working'] if args['--working'] else None
selectionCriteria = args['--rankCriteria'] if args['--rankCriteria'] else 'AICc'
modelRank = analysis.ModelRank(args['<analysisPaths_txtfile>'], path, selectionCriteria)
modelRank.rank()
else:
raise ImportError("Result path file is missing for model rank!")
elif args['table']:
if args['<rankPaths_txtfile>']:
path = args['--working'] if args['--working'] else None
comparisonTable = analysis.ComparisonTable(args['<rankPaths_txtfile>'], path)
comparisonTable.makeTable()
else:
raise ImportError("Rank path file is missing for comparison table!")
elif args['moiety']:
if args['<analysisResults_jsonfile>']:
path = args['--working'] if args['--working'] else None
moietyPlot = analysis.PlotMoietyDistribution(args['<analysisResults_jsonfile>'], path)
moietyPlot.plotMoiety()
else:
ImportError("Analysis results jsonfile is missing for moiety distribution plot!")
elif args['isotopologue']:
if args['<analysisResults_jsonfile>']:
path = args['--working'] if args['--working'] else None
isotopologuePlot = analysis.PlotIsotopologueIntensity(args['<analysisResults_jsonfile>'], path)
isotopologuePlot.plotIsotopologue()
else:
ImportError("Analysis results jsonfile is missing for observed and calculated isotoplogue comparison!")