示例#1
0
文件: wxgi.py 项目: ksl0/webserver
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"
示例#2
0
文件: xenoGI.py 项目: dstoebel/xenoGI
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)
示例#3
0
文件: validation.py 项目: ksl0/xenoGI
    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)
示例#4
0
文件: wxgi.py 项目: ksl0/webserver
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"