def writeTraitPage(filename, title, desc, commonGenes, pfilter_cutoff):
    traitpage = htmltools.createPage(title, scripts={'sorttable.js':'javascript'})
    htmltools.pageDescription(traitpage, desc)
    
    traitChi = computeTraitStatistics(commonGenes, pfilter_cutoff)
    
    significance_pairs = [ (i, trait, traitChi[trait][5]) for i, trait in enumerate(traitChi.keys()) ]
    significance_levels = [ pval for (i, trait, pval) in significance_pairs ]

    FDR = computePermutationTest(traitChi, commonGenes, significance_levels, __ITERATIONS)
    FDR_map = dict( [ ( trait, FDR[i] ) for (i, trait, pval) in significance_pairs ] )
    
    traitTable = []
    for trait in traitChi:
        (cnt, oddsratio, kappa, numgenes, fisher_exact, fisher_p, genes) = traitChi[trait]
        fdr_value = FDR_map[trait]

        translate = trait.replace(" ","_").replace("/", " or ").replace("\\", " or ")

        if len(trait) > 38:
            trait = trait[:35] + "..."
        alink = "<a href=\"traitlists/%s.html\">%s</a>" % (translate, trait)

        entry = [alink, cnt, numgenes, "%.7f" % (fisher_exact), "%.7f" %
                (fisher_p), "%.1f" % (oddsratio), "%.4f" % (kappa), fdr_value]
        traitTable.append(entry)

    traitTable = sorted(traitTable, key=lambda item: -item[1])

    htmltools.createTable(
              traitpage,
              traitTable,
            ["Disease/Trait", "# RE Genes", "# Trait Genes",
                "fisher exact", "p-value", "odds ratio", "kappa",
                "FDR"],
             "traitlisthead",
              None,
            ["traitcol", "recol", "genecol", "fishercol","pcol",
                "oddscol", "kappacol","bencol"],
             "sortable", None)
    htmltools.endPage(traitpage)
    htmltools.savePage(traitpage, filename)
def writeGenePage(output_dir, filename, title, desc, total, geneTable):
    genepage = htmltools.createPage(title)

    htmltools.pageDescription(genepage, desc)
    
    newTable=[]
    for row in geneTable:
        drugcount = 0
        if row[0] in drugDB.__drugDict:
            drugcount = len(drugDB.__drugDict[row[0]])

        if os.path.exists(os.sep.join([output_dir,"genelists",row[0]+".html"])):
            newTable.append(["<a href=\"genelists/%s.html\">%s</a>" % (row[0], geneDB.__original_names[row[0]]), row[1], drugcount])
        else:
            newTable.append([geneDB.__original_names[row[0]], row[1], drugcount])
    
    htmltools.createTable(genepage, newTable, ["Gene","#Associated Traits", "#Targeted Drugs"], "genelisthead", None, ["genecol","traitcol", "drugcol"],"genetable",None)
    
    htmltools.endPage(genepage)
    htmltools.savePage(genepage, filename)
 
 overlap = commonGenes & studyGenes & drugDB.__geneSet
 
 indexpage.div.open(class_="links")
 indexpage.p.open()
 indexpage.add("Total overlap of drugbank, GWAS, and Rapidly Evolving geneset: ")
 indexpage.a(str(len(overlap)), href="all_genes.html")
 
 if os.path.exists(os.sep.join([output_dir, "DAVID", "david_all.xhtml"])):
     indexpage.br()
     indexpage.a("DAVID Results", href="DAVID/david_all.xhtml")
 
 indexpage.p.close()
 indexpage.div.close()
 
 htmltools.endPage(indexpage)
 htmltools.savePage(indexpage, os.sep.join([output_dir, "index.html"]))
 
 print ""
 
 if not skip_listings:
     print "Creating trait listings..."
     computeTraitGeneLists(studyGenes, drugDB.__geneSet, pfilter_cutoff)
     computeTraitDrugLists(studyGenes, drugDB.__geneSet, pfilter_cutoff)
     createTraitListingsHTML(os.sep.join([output_dir, "traitlists"]))
     print "Creating gene listings..."
     createGeneListingsHTML(os.sep.join([output_dir,"genelists"]))
 
 print "Creating referenced HTML gene and trait list reports..."
 
 # write trait frequency tables