def upload_files(): """ Runs xenoGI.""" MAX_GB_FC = 20 MIN_GB_FC = 3 TREE_FN = "example.tre" if request.method == 'POST': treeFile = request.files['newick'] if treeFile and allowed_file(treeFile.filename): treeFileName = secure_filename(treeFile.filename) treeFileName = treeFileName.split('.')[0] now=datetime.datetime.now() thisFolderName = treeFileName + '-' + str(now.timestamp()).split('.')[0]# timestamp to make unique #this working directory is the user's "working directory" current_wd = os.path.join(app.config['WORK_DIRECTORY'], thisFolderName) os.chdir(WORK_DIRECTORY) os.system("mkdir "+thisFolderName) os.chdir(thisFolderName) treeFile.save(os.path.join(app.config['WORK_DIRECTORY'], thisFolderName, TREE_FN)) #rewrite the parameters file paramFN = os.path.join(CGI_DIRECTORY, "STARTER_FILES/params.py") rootFCUserInput= request.form['rootFocal'] paramD = parameters.loadParametersD(paramFN) paramD['rootFocalClade'] = rootFCUserInput paramD['fileNameMapFN'] = None writeParamFile(paramD, paramFN) #copy starter files over starter_files = os.path.join(CGI_DIRECTORY, "STARTER_FILES/*") system_command ="cp "+ starter_files + " " + (os.path.join(app.config['WORK_DIRECTORY'], thisFolderName)) os.system(system_command) gbffFiles = request.files.getlist("gbff[]") if (len(gbffFiles) > MAX_GB_FC) or (len(gbffFiles) < MIN_GB_FC) : return render_template("documentation.html") else: #make another directory *ncbi* for the gbfffiles GENBANK_FD= "ncbi" # this is set in params.py os.system("mkdir " + GENBANK_FD) for gbffFile in gbffFiles: if gbffFile and allowed_file(gbffFile.filename): gbffFileName = secure_filename(gbffFile.filename) gbffFile.save(os.path.join(app.config['WORK_DIRECTORY'], thisFolderName, GENBANK_FD, gbffFileName)) # go to the tree files # work around to be in the right directory return redirect(url_for('intermediate', tree_fn = thisFolderName)) else: #refer user back to the documentation return render_template("documentation.html") else: return "nope"
import sys import parameters, genbank, trees, genomes, scores, families, islands if __name__ == "__main__": paramFN = sys.argv[1] paramD = parameters.loadParametersD(paramFN) ## load data structures we'll use below tree, strainStr2NumD, strainNum2StrD = trees.readTree(paramD['treeFN']) # an object for gene name conversions geneNames = genomes.geneNames(paramD['geneOrderFN'], strainStr2NumD, strainNum2StrD) subtreeL = trees.createSubtreeL(tree) subtreeL.sort() geneOrderT = genomes.createGeneOrderTs(paramD['geneOrderFN'], geneNames, subtreeL, strainStr2NumD) ## read scores scoresO = scores.readScores(paramD['scoresFN'], geneNames) ## make gene families familyIslandFormationSummaryF = open( paramD['familyIslandFormationSummaryFN'], 'w') familyL = families.families( tree, subtreeL, geneNames, scoresO, paramD['minNormThresh'], paramD['minCoreSynThresh'], paramD['minSynThresh'], paramD['synAdjustThresh'], paramD['synAdjustExtent'], paramD['familyFN'], strainNum2StrD, familyIslandFormationSummaryF)
while True: s=f.readline() if s == "": break nodes = [] for strain in s.split('\t')[1].split(','): nodes.append(int(strainStr2NumD[strain])) if strain not in uniqueStrains: uniqueStrains.append(strain) nodesLL.append(nodes) return nodesLL,uniqueStrains if __name__ == "__main__": #loading parameters from command line that will be used below paramFN=sys.argv[1] paramD = parameters.loadParametersD(paramFN) strainStr = sys.argv[2] validationFile = sys.argv[3] minGenes = int(sys.argv[4]) tree,strainStr2NumD,strainNum2StrD = trees.readTree(paramD['treeFN']) strainNum = strainStr2NumD[strainStr] #node = strainStr2NumD[strainStr] # load islands and genes islandByNodeL=islands.readIslands(paramD['islandOutFN'],tree,strainStr2NumD) geneNames = genomes.geneNames(paramD['geneOrderFN'],strainStr2NumD,strainNum2StrD)
def upload_files(): """ Runs xenoGI.""" MAX_GB_FC = 20 MIN_GB_FC = 3 TREE_FN = "example.tre" if request.method == 'POST': treeFile = request.files['newick'] if treeFile and allowed_file(treeFile.filename): treeFileName = secure_filename(treeFile.filename) treeFileName = treeFileName.split('.')[0] now = datetime.datetime.now() thisFolderName = treeFileName + '-' + str( now.timestamp()).split('.')[0] # timestamp to make unique #this working directory is the user's "working directory" current_wd = os.path.join(app.config['WORK_DIRECTORY'], thisFolderName) os.chdir(WORK_DIRECTORY) os.system("mkdir " + thisFolderName) os.system("chmod ugo+rwx " + thisFolderName) os.chdir(thisFolderName) treeFile.save( os.path.join(app.config['WORK_DIRECTORY'], thisFolderName, TREE_FN)) #rewrite the parameters file from the xenoGI/examples/params.py paramDefaultFile = os.path.join(XENO_GI_DIRECTORY, "example", "params.py") thisFolderPath = os.path.join(WORK_DIRECTORY, thisFolderName) os.system("cp " + paramDefaultFile + " " + ".") paramFN = os.path.join(thisFolderPath, "params.py") paramD = parameters.loadParametersD(paramFN) paramD[ 'fileNameMapFN'] = None # we assume the user does not have a human to gbff file mapping #if you want to add another parameter # then add additional line to form, following "rootFocal" # 1) update template/forms.html # 2) copy requst.forms[<parameter_name>] # 3) overwrite the paramD (loaded file from xenoGI/example/params.py) rootFCUserInput = request.form['rootFocal'] # copy this line paramD[ 'rootFocalClade'] = rootFCUserInput # copy this line too - changing the value writeParamFile(paramD, paramFN) #rewrites paramFN gbffFiles = request.files.getlist("gbff[]") if (len(gbffFiles) > MAX_GB_FC) or (len(gbffFiles) < MIN_GB_FC): return render_template("documentation.html") else: #make another directory *ncbi* for the gbfffiles GENBANK_FD = "ncbi" # this is set in params.py os.system("mkdir " + GENBANK_FD) for gbffFile in gbffFiles: if gbffFile and allowed_file(gbffFile.filename): gbffFileName = secure_filename(gbffFile.filename) gbffFile.save( os.path.join(app.config['WORK_DIRECTORY'], thisFolderName, GENBANK_FD, gbffFileName)) os.system("chmod ugo+rwx " + thisFolderName + "/ncbi/*") os.system("chmod ugo+rwx " + thisFolderName + "/*") # go to the tree files # work around to be in the right directory return redirect(url_for('intermediate', tree_fn=thisFolderName)) else: #refer user back to the documentation return render_template("documentation.html") else: return "nope"