aboutsummaryrefslogtreecommitdiff
path: root/web/webqtl/networkGraph/networkGraphUtils.py
diff options
context:
space:
mode:
Diffstat (limited to 'web/webqtl/networkGraph/networkGraphUtils.py')
-rw-r--r--web/webqtl/networkGraph/networkGraphUtils.py750
1 files changed, 0 insertions, 750 deletions
diff --git a/web/webqtl/networkGraph/networkGraphUtils.py b/web/webqtl/networkGraph/networkGraphUtils.py
deleted file mode 100644
index fd0e7484..00000000
--- a/web/webqtl/networkGraph/networkGraphUtils.py
+++ /dev/null
@@ -1,750 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
-
-# graphviz:
-# a library for sending trait data to the graphviz utilities to get
-# graphed
-
-# ParamDict: a dictionary of strings that map to strings where the keys are
-# valid parameters and the values are validated versions of those parameters
-#
-# The list below also works for visualize.py; different parameters apply to different
-# functions in the pipeline. See visualize.py for more details.
-#
-# parameters:
-# filename: an input file with comma-delimited data to visualize
-# kValue:
-# how to filter the edges; edges with correlation coefficents in
-# [-k, k] are not drawn
-# whichValue: which of the two correlation coefficents are used;
-# 0 means the top half (pearson) and
-# 1 means the bottom half (spearman)
-# width: the width of the graph in inches
-# height: the height of the graph in inches
-# --scale: an amount to multiply the length factors by to space out the nodes
-# spline: whether to use splines instead of straight lines to draw graphs
-# tune: whether to automatically pick intelligent default values for
-# kValue and spline based on the number of edges in the input data
-# whichVersion: whether to display the graph zoomed or fullscreen
-# 0 means zoom
-# 1 means fullscreen
-# printIslands: whether to display nodes with no visible edges
-#
-
-# DataMatrix: a one-dimensional array of DataPoints in sorted order by i first
-
-
-
-import copy
-import os
-#import os.path
-import math
-import string
-
-from base import webqtlConfig
-from utility import webqtlUtil
-#import trait
-from nGraphException import nGraphException
-from ProcessedPoint import ProcessedPoint
-
-
-# processDataMatrix: DataMatrix -> ParamDict -> void
-# this is the second part after filterDataMatrix
-# To process the set of points in a DataMatrix as follows
-# 1) choose an appropriate color for the data point
-# 2) filter those between k values
-# 3) to use an r-to-Z transform to spread out the correlation
-# values from [-1,1] to (-inf, inf)
-# 4) to invert the values so that higher correlations result in
-# shorter edges
-#
-# Note: this function modifies the matrix in-place. My functional
-# programming instincts tell me that this is a bad idea.
-def processDataMatrix(matrix, p):
- for pt2 in matrix:
- # filter using k
- if (-p["kValue"] <= pt2.value) and (pt2.value <= p["kValue"]):
- pt2.value = 0.00
-
- # Lei Yan
- # 05/28/2009
- # fix color
-
- # pick a color
- if pt2.value >= 0.7:
- pt2.color = p["cL6Name"]
- pt2.style = p["L6style"]
- elif pt2.value >= 0.5:
- pt2.color = p["cL5Name"]
- pt2.style = p["L5style"]
- elif pt2.value >= 0.0:
- pt2.color = p["cL4Name"]
- pt2.style = p["L4style"]
- elif pt2.value >= -0.5:
- pt2.color = p["cL3Name"]
- pt2.style = p["L3style"]
- elif pt2.value >= -0.7:
- pt2.color = p["cL2Name"]
- pt2.style = p["L2style"]
- else:
- pt2.color = p["cL1Name"]
- pt2.style = p["L1style"]
-
- # r to Z transform to generate the length
- # 0 gets transformed to infinity, which we can't
- # represent here, and 1 gets transformed to 0
- if p["lock"] == "no":
- if -0.01 < pt2.value and pt2.value < 0.01:
- pt2.length = 1000
- elif pt2.value > 0.99 or pt2.value < -0.99:
- pt2.length = 0
- else:
- pt2.length = pt2.value
- pt2.length = 0.5 * math.log((1 + pt2.length)/(1 - pt2.length))
-
- # invert so higher correlations mean closer edges
- #pt2.length = abs(p["scale"] * 1/pt2.length)
- pt2.length = abs(1/pt2.length)
- else:
- pt2.length = 2
-
-
-# tuneParamDict: ParamDict -> Int -> Int -> ParamDict
-# to adjust the parameter dictionary for a first-time run
-# so that the graphing doesn't take so long, especially since
-# small parameter changes can make a big performance difference
-# note: you can pass this function an empty dictionary and
-# get back a good set of default parameters for your
-# particular graph
-def tuneParamDict(p, nodes, edges):
- newp = copy.deepcopy(p)
-
- if nodes > 50:
- newp["splines"] = "no"
- else:
- newp["splines"] = "yes"
-
- if edges > 1000:
- newp["printIslands"] = 0
- else:
- newp["printIslands"] = 1
-
- if edges > 1000:
- newp["kValue"] = 0.8
- elif edges > 500:
- newp["kValue"] = 0.7
- elif edges > 250:
- newp["kValue"] = 0.6
-
- if nodes > 50:
- # there's no magic here; this formula
- # just seems to work
- dim = 3*math.sqrt(nodes)
- newp["width"] = round(dim,2)
- newp["height"] = round(dim,2)
-
- # the two values below shouldn't change
- # newp["scale"] = round(dim/10.0,2)
- # newp["fontsize"] = round(14*newp["scale"],0)
-
- else:
- newp["width"] = 40.0
- newp["height"] = 40.0
-
- return newp
-
-# fixLabel : string -> string
-def fixLabel(lbl):
- """
- To split a label with newlines so it looks a bit better
- Note: we send the graphing program literal '\n' strings and
- it converts these into newlines
- """
- lblparts = lbl.split(" ")
- newlbl = ""
- i = 0
- for part in lblparts:
- if 10*(i+1) < len(newlbl):
- i += 1
- newlbl = newlbl + r"\n" + part
- else:
- newlbl = newlbl + " " + part
- return newlbl
- #return "\N"
-
-def writeGraphFile(matrix, traits, filename, p):
- """
- Expresses the same information as the neato file, only in
- eXtensible Graph Markup and Modeling Language (XGMML) so the user can develop his/her
- own graph in a program such as Cytoscape
- """
- inputFile1 = open(filename + "_xgmml_symbol.txt", "w")
- inputFile2 = open(filename + "_xgmml_name.txt", "w")
- inputFile3 = open(filename + "_plain_symbol.txt", "w")
- inputFile4 = open(filename + "_plain_name.txt", "w")
-
- inputFile1.write("<graph directed=\"1\" label=\"Network Graph\">\n")
- inputFile2.write("<graph directed=\"1\" label=\"Network Graph\">\n")
-
- #Write out nodes
- traitEdges = []
- for i in range(0, len(traits)):
- traitEdges.append(0)
-
- for i in range(0, len(traits)):
-
- labelName = traits[i].symbol
- inputFile1.write("\t<node id=\"%s\" label=\"%s\"></node>\n" % (i, labelName))
-
- for i in range(0, len(traits)):
-
- labelName = traits[i].name
- inputFile2.write("\t<node id=\"%s\" label=\"%s\"></node>\n" % (i, labelName))
-
- #Write out edges
- for point in matrix:
-
- traitEdges[point.i] = 1
- traitEdges[point.j] = 1
- if p["edges"] == "complex":
- _traitValue = "%.3f" % point.value
- inputFile1.write("\t<edge source=\"%s\" target=\"%s\" label=\"%s\"></edge>\n"
- % (point.i,
- point.j,
- _traitValue))
- inputFile2.write("\t<edge source=\"%s\" target=\"%s\" label=\"%s\"></edge>\n"
- % (point.i,
- point.j,
- _traitValue))
-
- inputFile1.write("</graph>")
- inputFile2.write("</graph>")
-
- for edge in matrix:
- inputFile3.write("%s\t%s\t%s\n" % (traits[edge.i].symbol, edge.value, traits[edge.j].symbol))
-
-
- for edge in matrix:
- inputFile4.write("%s\t%s\t%s\n" % (traits[edge.i].name, edge.value, traits[edge.j].name))
-
- inputFile1.close()
- inputFile2.close()
- inputFile3.close()
- inputFile4.close()
-
- return (os.path.split(filename))[1]
-
-# writeNeatoFile : DataMatrix -> arrayof Traits -> String -> ParamDict -> String
-def writeNeatoFile(matrix, traits, filename, GeneIdArray, p):
- """
- Given input data, to write a valid input file for neato, optionally
- writing entries for nodes that have no edges.
-
- NOTE: There is a big difference between removing an edge and zeroing
- its value. Because writeNeatoFile is edge-driven, zeroing an edge's value
- will still result in its node being written.
- """
- inputFile = open(filename, "w")
-
- """
- This file (inputFile_pdf) is rotated 90 degrees. This is because of a bug in graphviz
- that causes pdf output onto a non-landscape layout to often be cut off at the edge
- of the page. This second filename (which is just the first + "_pdf" is then read
- in the "visualizePage" class in networkGraph.py and used to generate the postscript
- file that is converted to pdf.
- """
- inputFile_pdf = open(filename + "_pdf", "w")
-
-
- if p["splines"] == "yes":
- splines = "true"
- else:
- splines = "false"
-
- # header
- inputFile.write('''graph webqtlGraph {
- overlap="false";
- start="regular";
- splines="%s";
- ratio="auto";
- fontpath = "%s";
- node [fontname="%s", fontsize=%s, shape="%s"];
- edge [fontname="%s", fontsize=%s];
- ''' % (splines, webqtlConfig.PIDDLE_FONT_PATH,
- p["nfont"], p["nfontsize"], p["nodeshapeType"],
- p["cfont"], p["cfontsize"]))
-
- inputFile_pdf.write('''graph webqtlGraph {
- overlap="false";
- start="regular";
- splines="%s";
- rotate="90";
- center="true";
- size="11,8.5";
- margin="0";
- ratio="fill";
- fontpath = "%s";
- node [fontname="%s", fontsize=%s, shape="%s"];
- edge [fontname="%s", fontsize=%s];
- ''' % (splines, webqtlConfig.PIDDLE_FONT_PATH,
- p["nfont"], p["nfontsize"], p["nodeshapeType"],
- p["cfont"], p["cfontsize"]))
-
- # traitEdges stores whether a particular trait has edges
- traitEdges = []
- for i in range(0, len(traits)):
- traitEdges.append(0)
-
- if p["dispcorr"] == "yes":
- _dispCorr = 1
- else:
- _dispCorr = 0
- # print edges first while keeping track of nodes
- for point in matrix:
- if point.value != 0:
- traitEdges[point.i] = 1
- traitEdges[point.j] = 1
- if p["edges"] == "complex":
- if _dispCorr:
- _traitValue = "%.3f" % point.value
- else:
- _traitValue = ""
- if p["correlationName"] == "Pearson":
- inputFile.write('%s -- %s [len=%s, weight=%s, label=\"%s\", color=\"%s\", style=\"%s\", edgeURL=\"javascript:showCorrelationPlot2(db=\'%s\',ProbeSetID=\'%s\',CellID=\'\',db2=\'%s\',ProbeSetID2=\'%s\',CellID2=\'\',rank=\'%s\');\", edgetooltip="%s"];\n'
- % (point.i,
- point.j,
- point.length,
- point.length,
- _traitValue,
- point.color,
- point.style,
- str(traits[point.i].datasetName()),
- str(traits[point.i].nameNoDB()),
- str(traits[point.j].datasetName()),
- str(traits[point.j].nameNoDB()),
- "0",
- "Pearson Correlation Plot between " + str(traits[point.i].symbol) + " and " + str(traits[point.j].symbol)))
- elif p["correlationName"] == "Spearman":
- inputFile.write('%s -- %s [len=%s, weight=%s, label=\"%s\", color=\"%s\", style=\"%s\", edgeURL=\"javascript:showCorrelationPlot2(db=\'%s\',ProbeSetID=\'%s\',CellID=\'\',db2=\'%s\',ProbeSetID2=\'%s\',CellID2=\'\',rank=\'%s\');\", edgetooltip="%s"];\n'
- % (point.i,
- point.j,
- point.length,
- point.length,
- _traitValue,
- point.color,
- point.style,
- str(traits[point.j].datasetName()),
- str(traits[point.j].nameNoDB()),
- str(traits[point.i].datasetName()),
- str(traits[point.i].nameNoDB()),
- "1",
- "Spearman Correlation Plot between " + str(traits[point.i].symbol) + " and " + str(traits[point.j].symbol)))
- elif p["correlationName"] == "Tissue":
- inputFile.write('%s -- %s [len=%s, weight=%s, label=\"%s\", color=\"%s\", style=\"%s\", edgeURL=\"javascript:showTissueCorrPlot(fmName=\'showDatabase\', X_geneSymbol=\'%s\', Y_geneSymbol=\'%s\', rank=\'0\');\", edgetooltip="%s"];\n'
- % (point.i,
- point.j,
- point.length,
- point.length,
- _traitValue,
- point.color,
- point.style,
- str(traits[point.i].symbol),
- str(traits[point.j].symbol),
- "Tissue Correlation Plot between " + str(traits[point.i].symbol) + " and " + str(traits[point.j].symbol)))
- else:
- inputFile.write('%s -- %s [len=%s, weight=%s, label=\"%s\", color=\"%s\", style=\"%s\", edgeURL=\"javascript:showCorrelationPlot2(db=\'%s\',ProbeSetID=\'%s\',CellID=\'\',db2=\'%s\',ProbeSetID2=\'%s\',CellID2=\'\',rank=\'%s\');\", edgetooltip="%s"];\n'
- % (point.i,
- point.j,
- point.length,
- point.length,
- _traitValue,
- point.color,
- point.style,
- str(traits[point.i].datasetName()),
- str(traits[point.i].nameNoDB()),
- str(traits[point.j].datasetName()),
- str(traits[point.j].nameNoDB()),
- "0",
- "Correlation Plot between " + str(traits[point.i].symbol) + " and " + str(traits[point.j].symbol)))
- inputFile_pdf.write('%s -- %s [len=%s, weight=%s, label=\"%s\", color=\"%s\", style=\"%s\", edgetooltip="%s"];\n'
- % (point.i,
- point.j,
- point.length,
- point.length,
- _traitValue,
- point.color,
- point.style,
- "Correlation Plot between " + str(traits[point.i].symbol) + " and " + str(traits[point.j].symbol)))
-
- else:
- inputFile.write('%s -- %s [color="%s", style="%s"];\n'
- % (point.i,
- point.j,
- point.color,
- point.style))
- inputFile_pdf.write('%s -- %s [color="%s", style="%s"];\n'
- % (point.i,
- point.j,
- point.color,
- point.style))
-
- # now print nodes
- # the target attribute below is undocumented; I found it by looking
- # in the neato code
- for i in range(0, len(traits)):
- if traitEdges[i] == 1 or p["printIslands"] == 1:
- _tname = str(traits[i])
- if _tname.find("Publish") > 0:
- plotColor = p["cPubName"]
- elif _tname.find("Geno") > 0:
- plotColor = p["cGenName"]
- else:
- plotColor = p["cMicName"]
- if p['nodelabel'] == 'yes':
- labelName = _tname
- else:
- labelName = traits[i].symbol
-
- inputFile.write('%s [label="%s", href="javascript:showDatabase2(\'%s\',\'%s\',\'\');", color="%s", style = "filled"];\n'
- % (i, labelName, traits[i].datasetName(), traits[i].nameNoDB(), plotColor))# traits[i].color
- inputFile_pdf.write('%s [label="%s", href="javascript:showDatabase2(\'%s\',\'%s\',\'\');", color="%s", style = "filled"];\n'
- % (i, labelName, traits[i].datasetName(), traits[i].nameNoDB(), plotColor))# traits[i].color
-
- # footer
- inputFile.write("}\n")
- inputFile_pdf.write("]\n")
- inputFile.close()
- inputFile_pdf.close()
-
- # return only the filename portion, omitting the directory
- return (os.path.split(filename))[1]
-
-# runNeato : string -> string -> string
-def runNeato(filename, extension, format, gType):
- """
- to run neato on the dataset in the given filename and produce an image file
- in the given format whose name we will return. Right now we assume
- that format is a valid neato output (see graphviz docs) and a valid extension
- for the source datafile. For example,
- runNeato('input1', 'png') will produce a file called 'input1.png'
- by invoking 'neato input1 -Tpng -o input1.png'
- """
- # trim extension off of filename before adding output extension
- if filename.find(".") > 0:
- filenameBase = filename[:filename.find(".")]
- else:
- filenameBase = filename
-
- imageFilename = filenameBase + "." + extension
-
- #choose which algorithm to run depended upon parameter gType
- #neato: energy based algorithm
- #circular: nodes given circular structure determined by which nodes are most closely correlated
- #radial: first node listed (when you search) is center of the graph, all other nodes are in a circular structure around it
- #fdp: force based algorithm
-
- if gType == "none":
- # to keep the output of neato from going to stdout, we open a pipe
- # and then wait for it to terminate
-
- if format in ('gif', 'cmapx', 'ps'):
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/neato", "/usr/local/bin/neato", "-s", "-T", format, webqtlConfig.IMGDIR + filename, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- else:
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/neato", "/usr/local/bin/neato", webqtlConfig.IMGDIR + filename, "-T", format, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- if neatoExit == 0:
- return imageFilename
-
- return imageFilename
-
-
- elif gType == "neato":
- # to keep the output of neato from going to stdout, we open a pipe
- # and then wait for it to terminate
- if format in ('gif', 'cmapx', 'ps'):
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/neato", "/usr/local/bin/neato", "-s", "-T", format, webqtlConfig.IMGDIR + filename, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- else:
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/neato", "/usr/local/bin/neato", webqtlConfig.IMGDIR + filename, "-T", format, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- if neatoExit == 0:
- return imageFilename
-
- return imageFilename
-
- elif gType == "circular":
-
- if format in ('gif', 'cmapx', 'ps'):
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/circo", "/usr/local/bin/circo", "-s", "-T", format, webqtlConfig.IMGDIR + filename, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- else:
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/circo", "/usr/local/bin/circo", webqtlConfig.IMGDIR + filename, "-T", format, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- if neatoExit == 0:
- return imageFilename
-
- return imageFilename
-
- elif gType == "radial":
-
- if format in ('gif', 'cmapx', 'ps'):
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/twopi", "/usr/local/bin/twopi", "-s", "-T", format, webqtlConfig.IMGDIR + filename, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- else:
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/twopi", "/usr/local/bin/twopi", webqtlConfig.IMGDIR + filename, "-T", format, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- if neatoExit == 0:
- return imageFilename
-
- return imageFilename
-
- elif gType == "fdp":
-
- if format in ('gif', 'cmapx', 'ps'):
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/fdp", "/usr/local/bin/fdp", "-s", "-T", format, webqtlConfig.IMGDIR + filename, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- else:
- neatoExit = os.spawnlp(os.P_WAIT, "/usr/local/bin/fdp", "/usr/local/bin/fdp", webqtlConfig.IMGDIR + filename, "-T", format, "-o", webqtlConfig.IMGDIR + imageFilename)
-
- if neatoExit == 0:
- return imageFilename
-
- return imageFilename
-
-
- return imageFilename
-# runPsToPdf: string -> int -> intstring
-# to run Ps2Pdf to convert the given input postscript file to an 8.5 by 11
-# pdf file The width and height should be specified in inches. We assume
-# that the PS files output by GraphViz are 72 dpi.
-def runPsToPdf(psfile, width, height):
- # we add 1 for padding b/c sometimes a small part of the graph gets
- # cut off
- newwidth = int((width + 1) * 720)
- newheight = int((height + 1) * 720)
-
- # replace the ps extension with a pdf one
- pdffile = psfile[:-2] + "pdf"
-
- os.spawnlp(os.P_WAIT, "ps2pdf",
- "-g%sx%s" % (newwidth, newheight),
- webqtlConfig.IMGDIR + psfile, webqtlConfig.IMGDIR + pdffile)
-
- return pdffile
-
-# buildParamDict: void -> ParamDict
-# to process and validate CGI arguments,
-# looking up human-readable names where necessary
-# see the comment at the top of the file for valid cgi parameters
-def buildParamDict(fs, sessionfile):
- params = {}
-
- params["inputFile"] = fs.formdata.getvalue("inputFile", "")
- params["progress"] = fs.formdata.getvalue("progress", "1")
- params["filename"] = fs.formdata.getvalue("filename", "")
- params["session"] = sessionfile
-
- if type("1") != type(fs.formdata.getvalue("searchResult")):
- params["searchResult"] = string.join(fs.formdata.getvalue("searchResult"),'\t')
- else:
- params["searchResult"] = fs.formdata.getvalue("searchResult")
-
- params["riset"] = fs.formdata.getvalue("RISet", "")
- #if params["filename"] == "":
- # raise nGraphException("Required parameter filename missing")
-
- #parameter determining whether export button returns an xgmml graph file or plain text file
- params["exportFormat"] = fs.formdata.getvalue("exportFormat", "xgmml")
-
- #parameter determining whether or not traits in the graph file are listed by their symbol or name
- params["traitType"] = fs.formdata.getvalue("traitType", "symbol")
-
- #parameter saying whether or not graph structure should be locked when you redraw the graph
- params["lock"] = fs.formdata.getvalue("lock", "no")
-
- #parameter saying what algorithm should be used to draw the graph
- params["gType"] = fs.formdata.getvalue("gType", "none")
-
- params["kValue"] = webqtlUtil.safeFloat(fs.formdata.getvalue("kValue", "0.5"), 0.5)
- params["whichValue"] = webqtlUtil.safeInt(fs.formdata.getvalue("whichValue","0"),0)
-
- # 1 inch = 2.54 cm
- # 1 cm = 0.3937 inch
-
- params["width"] = webqtlUtil.safeFloat(fs.formdata.getvalue("width", "40.0"), 40.0)
- params["height"] = webqtlUtil.safeFloat(fs.formdata.getvalue("height", "40.0"), 40.0)
-
- yesno = ["yes", "no"]
-
- params["tune"] = webqtlUtil.safeString(fs.formdata.getvalue("tune", "yes"), yesno, "yes")
-
- params["printIslands"] = webqtlUtil.safeInt(fs.formdata.getvalue("printIslands", "1"),1)
- params["nodeshape"] = webqtlUtil.safeString(fs.formdata.getvalue("nodeshape","yes"), yesno, "yes")
- params["nodelabel"] = webqtlUtil.safeString(fs.formdata.getvalue("nodelabel","no"), yesno, "no")
- params["nfont"] = fs.formdata.getvalue("nfont","Arial")
- params["nfontsize"] = webqtlUtil.safeFloat(fs.formdata.getvalue("nfontsize", "10.0"), 10.0)
-
- params["splines"] = webqtlUtil.safeString(fs.formdata.getvalue("splines","yes"), yesno, "yes")
- params["dispcorr"] = webqtlUtil.safeString(fs.formdata.getvalue("dispcorr","no"), yesno, "no")
- params["cfont"] = fs.formdata.getvalue("cfont","Arial")
- params["cfontsize"] = webqtlUtil.safeFloat(fs.formdata.getvalue("cfontsize", "10.0"), 10.0)
-
- params["cPubName"] = fs.formdata.getvalue("cPubName","palegreen")
- params["cMicName"] = fs.formdata.getvalue("cMicName","lightblue")
- params["cGenName"] = fs.formdata.getvalue("cGenName","lightcoral")
-
- params["cPubColor"] = fs.formdata.getvalue("cPubColor","98fb98")
- params["cMicColor"] = fs.formdata.getvalue("cMicColor","add8e6")
- params["cGenColor"] = fs.formdata.getvalue("cGenColor","f08080")
-
- params["cL1Name"] = fs.formdata.getvalue("cL1Name","blue")
- params["cL2Name"] = fs.formdata.getvalue("cL2Name","green")
- params["cL3Name"] = fs.formdata.getvalue("cL3Name","black")
- params["cL4Name"] = fs.formdata.getvalue("cL4Name","pink")
- params["cL5Name"] = fs.formdata.getvalue("cL5Name","orange")
- params["cL6Name"] = fs.formdata.getvalue("cL6Name","red")
-
- params["cL1Color"] = fs.formdata.getvalue("cL1Color","0000ff")
- params["cL2Color"] = fs.formdata.getvalue("cL2Color","00ff00")
- params["cL3Color"] = fs.formdata.getvalue("cL3Color","000000")
- params["cL4Color"] = fs.formdata.getvalue("cL4Color","ffc0cb")
- params["cL5Color"] = fs.formdata.getvalue("cL5Color","ffa500")
- params["cL6Color"] = fs.formdata.getvalue("cL6Color","ff0000")
-
- params["L1style"] = fs.formdata.getvalue("L1style","bold")
- params["L2style"] = fs.formdata.getvalue("L2style","")
- params["L3style"] = fs.formdata.getvalue("L3style","dashed")
- params["L4style"] = fs.formdata.getvalue("L4style","dashed")
- params["L5style"] = fs.formdata.getvalue("L5style","")
- params["L6style"] = fs.formdata.getvalue("L6style","bold")
-
- if params["splines"] == "yes":
- params["splineName"] = "curves"
- else:
- params["splineName"] = "lines"
-
- if params["nodeshape"] == "yes":
- params["nodeshapeType"] = "box"
- else:
- params["nodeshapeType"] = "ellipse"
-
- if params["whichValue"] == 0:
- params["correlationName"] = "Pearson"
- elif params["whichValue"] == 1:
- params["correlationName"] = "Spearman"
- elif params["whichValue"] == 2:
- params["correlationName"] = "Literature"
- else:
- params["correlationName"] = "Tissue"
-
- # see graphviz::writeNeatoFile to find out what this done
- params["edges"] = "complex"
-
- return params
-
-def optimalRadialNode(matrix):
- """
- Automatically determines the node with the most/strongest correlations with
- other nodes. If the user selects "radial" for Graph Type and then "Auto" for the
- central node then this node is used as the central node. The algorithm is simply a sum of
- each node's correlations that fall above the threshold set by the user.
- """
-
- optMatrix = [0]*(len(matrix)+1)
-
- for pt in matrix:
- if abs(pt.value) > 0.5:
- optMatrix[pt.i] += abs(pt.value)
- optMatrix[pt.j] += abs(pt.value)
-
- optPoint = 0
- optCorrTotal = 0
-
- j = 0
-
- for point in optMatrix:
- if (float(point) > float(optCorrTotal)):
- optPoint = j
- optCorrTotal = point
- j += 1
-
-
- return optPoint
-
-# filterDataMatrix : DataMatrix -> ParamDict -> DataMatrix
-def filterDataMatrix(matrix, p):
- """
- To convert a set of input RawPoints to a set of
- ProcessedPoints and to choose the appropriate
- correlation coefficent.
- """
- newmatrix = []
- for pt in matrix:
- pt2 = ProcessedPoint(pt.i, pt.j) # XZ, 09/11/2008: add module name
-
- # pick right value
- if p["whichValue"] == 0:
- pt2.value = pt.pearson
- elif p["whichValue"] == 1:
- pt2.value = pt.spearman
- elif p["whichValue"] == 2:
- pt2.value = pt.literature
- elif p["whichValue"] == 3:
- pt2.value = pt.tissue
- else:
- raise nGraphException("whichValue should be either 0, 1, 2 or 3")
-
- try:
- pt2.value = float(pt2.value)
- except:
- pt2.value = 0.00
-
- newmatrix.append(pt2)
-
-
-
- return newmatrix
-
-def generateSymbolList(traits):
- """
- Generates a list of trait symbols to be displayed in the central node
- selection drop-down menu when plotting a radial graph
- """
-
- traitList = traits
-
- symbolList = [None]*len(traitList)
-
- i=0
- for trait in traitList:
- symbolList[i] = str(trait.symbol)
- i = i+1
-
- symbolListString = "\t".join(symbolList)
-
- return symbolListString
-