Esempio n. 1
0
    sifFile = args[0]
    featureFile = args[1]

    iplMatrix = None
    global verbose, globalList, globalPathway
    for o, a in opts:
        if o == "-q":
            verbose = False
        elif o == "-i":
            iplMatrix = a

    ## build sourceList
    typeFile = "/".join(re.split("/", sifFile)[:-2] + ["TYPE.NA"])
    sourceList = re.split("/", sifFile)[-2] + ".list_t"

    h = mData.rList(featureFile)
    (n, i) = mPathway.rSIF(sifFile, typef=typeFile)
    (gn, gi) = mPathway.rPathway(globalPathway)
    p = mPathway.Pathway(n, i)
    s = mPathway.sortConnected(p)
    f = open(sourceList, "w")
    c = 1
    for i in s:
        u = list(set(i) & set(h))
        if len(u) >= 5:
            f.write("component_%s\t%s\n" % (c, "\t".join(u)))
            c += 1
            break
    f.write("component_all\t%s\n" % ("\t".join(list(set(n.keys()) & set(h)))))
    f.write("all\t%s\n" % ("\t".join(list(set(gn.keys()) & set(h)))))
    f.close()
def cli_routine(outputDir, circleFiles, orderFiles, sampleFile, featureFile, orderFeature, centerFile, colorscaleFile, printLabel, verbose, cohortMinMax=False, purpleHack = True):
	"""Routine for program execution via command-line."""
	# I've tried not to touch this method as much as possible.
	# I don't want to break the way it was working for Sam Ng.
	# chrisw
	
	## execute
	samples = []
	features = []
	if sampleFile != None:
		samples = mData.rList(sampleFile)
	if featureFile != None:
		features = mData.rList(featureFile)
	# end section for getting lists of samples and features
	
	## read circleFiles
	# circleData is a list of dict[col][row]=score from each circleFile
	circleData = []
	# circleColorsPalette is a list of (minColor),(zeroColor),(maxColor)
	circleColorsPalette = []

	## read colorscaleFile
	# the format is as follows - header compulsory:
	# min/max	color coding	color1		color2		color 3
	# -2,2		rgb		155,155,155	255,255,255	0,0,0,
	# -		rgb		155,0,155	255,0,255	0,0,0,
	# the "color format" is intended to support more color format, as I have 
	# seen the html-colors in the code.
	# Michael ([email protected])
	colorscaleData = None
	if colorscaleFile != None:

		if cohortMinMax:
			log("WARNING: The -k option overrides -m")

		colorscaleData = mData.retRows(colorscaleFile,aslist=True)
		line=1 
		for cs in colorscaleData:
			line = line + 1
			if len(cs) != 5:
				log("ERROR: color scale needs five fields: datapoints, colorcoding(rgb) and three colors\n", die = True)
			try:
				cs[0] =  [float(x) for x in cs[0].split(",")]
			except ValueError:
				pass
			if len(cs[0]) != 2 and cs[0] != "-":
				print cs[0]
				log("ERROR: Two data points or dash needed for color scale\n", die = True)
			if cs[1].lower() == "rgb":
				try:
					cs[2] =  rgb(*[float(x) for x in cs[2].split(",")])
					cs[3] =  rgb(*[float(x) for x in cs[3].split(",")])
					cs[4] =  rgb(*[float(x) for x in cs[4].split(",")])
				except TypeError:
						log("ERROR: RGB needs three values on line " + str(line) + "\n", die = True)
				except ValueError:
						log("ERROR: RGB color not correctly defined on line " + str(line) + "\n", die=True)
			else:
				log("ERROR: Unknown color coding on line " + str(line) + ": " + str(cs[1]) + "\n", die=True)


	for i in xrange(len(circleFiles)):
		# get data, samples, and features from each circleFile
		# data is a dict[col][row]=score
		# cols is a list of sample names
		# features is a list of feature names
		(data, cols, rows) = mData.rCRSData(circleFiles[i], retFeatures=True)
		circleData.append(data)
		minCol = lightBlueRGB
		zerCol = whiteRGB
		maxCol = redRGB
		if colorscaleFile != None and i<len(colorscaleData):
			#get colors from specified colorscaleFile
			minCol = colorscaleData[i][2]
			zerCol = colorscaleData[i][3]
			maxCol = colorscaleData[i][4]

		# special cases for -meth and -mut
#		if circleFiles[i].endswith("meth"):
#			maxCol = blueRGB
#			minCol = redRGB
#			log("Color: meth\n")
#		elif circleFiles[i].endswith("mut"):
#			maxCol = blackRGB
#			minCol = whiteRGB
#			log("Color: mut\n")

		circleColorsPalette.append((minCol, zerCol, maxCol))

		# if no sampleFile/featureFile, default to using samples/features from circleFiles
		if sampleFile == None:
			samples = list(set(cols) | set(samples))
		if featureFile == None:
			features = list(set(rows) | set(features))
	# end section for reading circleFiles

	## read centerFile
	centerData = None
	if centerFile != None:
		centerData = mData.r2Col(centerFile, header=True)

	## sort
	if orderFeature != None:
		if len(orderFiles) > 0:
			orderData = []
			orderColors = []
			for i in xrange(len(orderFiles)):
				orderData.append(mData.rCRSData(orderFiles[i]))
				minCol = whiteRGB
				zerCol = whiteRGB
				maxCol = blackRGB
				orderColors.append((minCol, zerCol, maxCol))
		else:
			orderData = circleData

		# sort samples based on sample score in orderData
		# priority of sorting determined by orderFiles parameter
		samples.sort(lambda x, y: scmp(x, y, orderFeature, orderData))

		## cohort png
		# cgi will probably not use orderFiles
		if len(orderFiles) > 0:
			imgFile = "%s/Cohort.png" % (outputDir)
			label = "Cohort"
			centerCol = whiteRGB.tohex()
			cohortCircleCols = []
			for i in xrange(len(orderData)):
				ringCols = []
				ringVals = []
				for sample in samples:
					if sample in orderData[i]:
						if orderFeature in orderData[i][sample]:
							ringVals.append(orderData[i][sample][orderFeature])
						elif "*" in orderData[i][sample]:
							ringVals.append(orderData[i][sample]["*"])
				minVal = min([-0.01] + mData.floatList(ringVals))
				maxVal = max([0.01] + mData.floatList(ringVals))
				for sample in samples:
					if sample in orderData[i]:
						if orderFeature in orderData[i][sample]:
							ringCols.append(getColor(orderData[i][sample][orderFeature], minVal, maxVal, minColor=orderColors[i][0], zeroColor=orderColors[i][1], maxColor=orderColors[i][2]))
						elif "*" in orderData[i][sample]:
							ringCols.append(getColor(orderData[i][sample]["*"], minVal, maxVal, minColor=orderColors[i][0], zeroColor=orderColors[i][1], maxColor=orderColors[i][2]))
						else:
							ringCols.append(greyRGB.tohex())
					else:
						ringCols.append(greyRGB.tohex())
				cohortCircleCols.append(ringCols)
			plotCircle(imgFile, label=label, centerCol=centerCol, circleCols=cohortCircleCols, innerRadTotal=0.2, outerRadTotal=0.5, width=5)
	# end section for sample ordering

	## plot images
	if centerData != None:
		centerDataFloatList = mData.floatList(centerData.values())
		centerDataMinVal = min([-0.01] + centerDataFloatList)
		centerDataMaxVal = max([0.01] + centerDataFloatList)

	# get min/max values for datasets
	if cohortMinMax:
		(minValList, maxValList) = getCohortMinMaxValues(features, samples, circleData)
	else:
		(minValList, maxValList) = (None, None)

	if colorscaleData != None:
		(minValList, maxValList) = getColorScaleMinMaxValues(minValList, maxValList, len(circleData), colorscaleData)

	for feature in features:
		log("Drawing %s\n" % (feature))
		centerColHex = None
		if centerData != None:
			if feature in centerData:
				centerColHex = getColor(centerData[feature], centerDataMinVal, centerDataMaxVal, minColor=lightBlueRGB, zeroColor=whiteRGB, purple0Hack=purpleHack)
				
		imgFile = "%s/%s.png" % (outputDir, re.sub("[/:]", "_", feature))

		label = ""
		if printLabel:
			label = feature

		image_width = 5.0

		drawCircleImageForFeature(feature, samples, label, imgFile, circleData, circleColorsPalette, width=image_width, centerColHex=centerColHex, minValList=minValList, maxValList=maxValList, purple0Hack=purpleHack)

	for sample in samples:
		log("ordered samples: %s\n" % (sample))
Esempio n. 3
0
             orderFiles = []
         else:
             orderFeature = sa[0]
             orderFiles = re.split(",", sa[1])
     elif o == "-c":
         centerFile = a
     elif o == "-l":
         printLabel = True
     elif o == "-q":
         verbose = False
 
 ## execute
 samples = []
 features = []
 if sampleFile != None:
     samples = mData.rList(sampleFile)
 if featureFile != None:
     features = mData.rList(featureFile)
 
 ## read circleFiles
 circleData = []
 circleColors = []
 for i in range(len(circleFiles)):
     (data, cols, rows) = mData.rCRSData(circleFiles[i], retFeatures = True)
     circleData.append(data)
     minCol = rgb(0, 0, 255)
     zerCol = rgb(255, 255, 255)
     maxCol = rgb(255, 0, 0)
     if circleFiles[i].endswith("meth"):
         maxCol = rgb(0, 0, 255)
         minCol = rgb(255, 0, 0)
Esempio n. 4
0
    sifFile = args[0]
    featureFile = args[1]

    iplMatrix = None
    global verbose, globalList, globalPathway
    for o, a in opts:
        if o == "-q":
            verbose = False
        elif o == "-i":
            iplMatrix = a

    ## build sourceList
    typeFile = "/".join(re.split("/", sifFile)[:-2] + ["TYPE.NA"])
    sourceList = re.split("/", sifFile)[-2] + ".list_t"

    h = mData.rList(featureFile)
    (n, i) = mPathway.rSIF(sifFile, typef=typeFile)
    (gn, gi) = mPathway.rPathway(globalPathway)
    p = mPathway.Pathway(n, i)
    s = mPathway.sortConnected(p)
    f = open(sourceList, "w")
    c = 1
    for i in s:
        u = list(set(i) & set(h))
        if len(u) >= 5:
            f.write("component_%s\t%s\n" % (c, "\t".join(u)))
            c += 1
            break
    f.write("component_all\t%s\n" % ("\t".join(list(set(n.keys()) & set(h)))))
    f.write("all\t%s\n" % ("\t".join(list(set(gn.keys()) & set(h)))))
    f.close()
Esempio n. 5
0
import os, re
import mData

assert (os.path.exists("first.props"))
assert (os.path.exists("include.features"))

features = mData.rList("include.features")

f = open("first.props", "r")
o = open("all.props", "w")
for line in f:
    if line.startswith(
            "nodeCustomGraphics1.default-Node\ Custom\ Graphics\ 1-Discrete\ Mapper.mapping.map"
    ):
        pline = re.split(",", line.rstrip("\r\n"))
        imgCounter = int(pline[1])
        for feature in features:
            reline = re.sub(features[0], feature,
                            pline[0]) + "," + str(imgCounter) + "," + re.sub(
                                features[0], feature,
                                pline[1]) + "," + pline[2]
            imgCounter += 1
    else:
        o.write(line)
f.close()
o.close()
Esempio n. 6
0
def cli_routine(outputDir,
                circleFiles,
                orderFiles,
                sampleFile,
                featureFile,
                orderFeature,
                centerFile,
                colorscaleFile,
                printLabel,
                verbose,
                cohortMinMax=False,
                purpleHack=True):
    """Routine for program execution via command-line."""
    # I've tried not to touch this method as much as possible.
    # I don't want to break the way it was working for Sam Ng.
    # chrisw

    ## execute
    samples = []
    features = []
    if sampleFile != None:
        samples = mData.rList(sampleFile)
    if featureFile != None:
        features = mData.rList(featureFile)
    # end section for getting lists of samples and features

    ## read circleFiles
    # circleData is a list of dict[col][row]=score from each circleFile
    circleData = []
    # circleColorsPalette is a list of (minColor),(zeroColor),(maxColor)
    circleColorsPalette = []

    ## read colorscaleFile
    # the format is as follows - header compulsory:
    # min/max	color coding	color1		color2		color 3
    # -2,2		rgb		155,155,155	255,255,255	0,0,0,
    # -		rgb		155,0,155	255,0,255	0,0,0,
    # the "color format" is intended to support more color format, as I have
    # seen the html-colors in the code.
    # Michael ([email protected])
    colorscaleData = None
    if colorscaleFile != None:

        if cohortMinMax:
            log("WARNING: The -k option overrides -m")

        colorscaleData = mData.retRows(colorscaleFile, aslist=True)
        line = 1
        for cs in colorscaleData:
            line = line + 1
            if len(cs) != 5:
                log("ERROR: color scale needs five fields: datapoints, colorcoding(rgb) and three colors\n",
                    die=True)
            try:
                cs[0] = [float(x) for x in cs[0].split(",")]
            except ValueError:
                pass
            if len(cs[0]) != 2 and cs[0] != "-":
                print cs[0]
                log("ERROR: Two data points or dash needed for color scale\n",
                    die=True)
            if cs[1].lower() == "rgb":
                try:
                    cs[2] = rgb(*[float(x) for x in cs[2].split(",")])
                    cs[3] = rgb(*[float(x) for x in cs[3].split(",")])
                    cs[4] = rgb(*[float(x) for x in cs[4].split(",")])
                except TypeError:
                    log("ERROR: RGB needs three values on line " + str(line) +
                        "\n",
                        die=True)
                except ValueError:
                    log("ERROR: RGB color not correctly defined on line " +
                        str(line) + "\n",
                        die=True)
            else:
                log("ERROR: Unknown color coding on line " + str(line) + ": " +
                    str(cs[1]) + "\n",
                    die=True)

    for i in xrange(len(circleFiles)):
        # get data, samples, and features from each circleFile
        # data is a dict[col][row]=score
        # cols is a list of sample names
        # features is a list of feature names
        (data, cols, rows) = mData.rCRSData(circleFiles[i], retFeatures=True)
        circleData.append(data)
        minCol = lightBlueRGB
        zerCol = whiteRGB
        maxCol = redRGB
        if colorscaleFile != None and i < len(colorscaleData):
            #get colors from specified colorscaleFile
            minCol = colorscaleData[i][2]
            zerCol = colorscaleData[i][3]
            maxCol = colorscaleData[i][4]

        # special cases for -meth and -mut


#		if circleFiles[i].endswith("meth"):
#			maxCol = blueRGB
#			minCol = redRGB
#			log("Color: meth\n")
#		elif circleFiles[i].endswith("mut"):
#			maxCol = blackRGB
#			minCol = whiteRGB
#			log("Color: mut\n")

        circleColorsPalette.append((minCol, zerCol, maxCol))

        # if no sampleFile/featureFile, default to using samples/features from circleFiles
        if sampleFile == None:
            samples = list(set(cols) | set(samples))
        if featureFile == None:
            features = list(set(rows) | set(features))
    # end section for reading circleFiles

    ## read centerFile
    centerData = None
    if centerFile != None:
        centerData = mData.r2Col(centerFile, header=True)

    ## sort
    if orderFeature != None:
        if len(orderFiles) > 0:
            orderData = []
            orderColors = []
            for i in xrange(len(orderFiles)):
                orderData.append(mData.rCRSData(orderFiles[i]))
                minCol = whiteRGB
                zerCol = whiteRGB
                maxCol = blackRGB
                orderColors.append((minCol, zerCol, maxCol))
        else:
            orderData = circleData

        # sort samples based on sample score in orderData
        # priority of sorting determined by orderFiles parameter
        samples.sort(lambda x, y: scmp(x, y, orderFeature, orderData))

        ## cohort png
        # cgi will probably not use orderFiles
        if len(orderFiles) > 0:
            imgFile = "%s/Cohort.png" % (outputDir)
            label = "Cohort"
            centerCol = whiteRGB.tohex()
            cohortCircleCols = []
            for i in xrange(len(orderData)):
                ringCols = []
                ringVals = []
                for sample in samples:
                    if sample in orderData[i]:
                        if orderFeature in orderData[i][sample]:
                            ringVals.append(orderData[i][sample][orderFeature])
                        elif "*" in orderData[i][sample]:
                            ringVals.append(orderData[i][sample]["*"])
                minVal = min([-0.01] + mData.floatList(ringVals))
                maxVal = max([0.01] + mData.floatList(ringVals))
                for sample in samples:
                    if sample in orderData[i]:
                        if orderFeature in orderData[i][sample]:
                            ringCols.append(
                                getColor(orderData[i][sample][orderFeature],
                                         minVal,
                                         maxVal,
                                         minColor=orderColors[i][0],
                                         zeroColor=orderColors[i][1],
                                         maxColor=orderColors[i][2]))
                        elif "*" in orderData[i][sample]:
                            ringCols.append(
                                getColor(orderData[i][sample]["*"],
                                         minVal,
                                         maxVal,
                                         minColor=orderColors[i][0],
                                         zeroColor=orderColors[i][1],
                                         maxColor=orderColors[i][2]))
                        else:
                            ringCols.append(greyRGB.tohex())
                    else:
                        ringCols.append(greyRGB.tohex())
                cohortCircleCols.append(ringCols)
            plotCircle(imgFile,
                       label=label,
                       centerCol=centerCol,
                       circleCols=cohortCircleCols,
                       innerRadTotal=0.2,
                       outerRadTotal=0.5,
                       width=5)
    # end section for sample ordering

    ## plot images
    if centerData != None:
        centerDataFloatList = mData.floatList(centerData.values())
        centerDataMinVal = min([-0.01] + centerDataFloatList)
        centerDataMaxVal = max([0.01] + centerDataFloatList)

    # get min/max values for datasets
    if cohortMinMax:
        (minValList,
         maxValList) = getCohortMinMaxValues(features, samples, circleData)
    else:
        (minValList, maxValList) = (None, None)

    if colorscaleData != None:
        (minValList,
         maxValList) = getColorScaleMinMaxValues(minValList, maxValList,
                                                 len(circleData),
                                                 colorscaleData)

    for feature in features:
        log("Drawing %s\n" % (feature))
        centerColHex = None
        if centerData != None:
            if feature in centerData:
                centerColHex = getColor(centerData[feature],
                                        centerDataMinVal,
                                        centerDataMaxVal,
                                        minColor=lightBlueRGB,
                                        zeroColor=whiteRGB,
                                        purple0Hack=purpleHack)

        imgFile = "%s/%s.png" % (outputDir, re.sub("[/:]", "_", feature))

        label = ""
        if printLabel:
            label = feature

        image_width = 5.0

        drawCircleImageForFeature(feature,
                                  samples,
                                  label,
                                  imgFile,
                                  circleData,
                                  circleColorsPalette,
                                  width=image_width,
                                  centerColHex=centerColHex,
                                  minValList=minValList,
                                  maxValList=maxValList,
                                  purple0Hack=purpleHack)

    for sample in samples:
        log("ordered samples: %s\n" % (sample))
Esempio n. 7
0
import os, re
import mData

assert(os.path.exists("first.props"))
assert(os.path.exists("include.features"))

features = mData.rList("include.features")

f = open("first.props", "r")
o = open("all.props", "w")
for line in f:
    if line.startswith("nodeCustomGraphics1.default-Node\ Custom\ Graphics\ 1-Discrete\ Mapper.mapping.map"):
        pline = re.split(",", line.rstrip("\r\n"))
        imgCounter = int(pline[1])
        for feature in features:
            reline = re.sub(features[0], feature, pline[0]) + "," + str(imgCounter) + "," + re.sub(features[0], feature, pline[1]) + "," + pline[2]
            imgCounter += 1
    else:
        o.write(line)
f.close()
o.close()
Esempio n. 8
0
				orderFiles = []
			else:
				orderFeature = sa[0]
				orderFiles = re.split(",", sa[1])
		elif o == "-c":
			centerFile = a
		elif o == "-l":
			printLabel = True
		elif o == "-q":
			verbose = False
	
	## execute
	samples = []
	features = []
	if sampleFile != None:
		samples = mData.rList(sampleFile)
	if featureFile != None:
		features = mData.rList(featureFile)

	## read circleFiles
	circleData = []
	circleColors = []
	##
	## record file types for each, effects the color scheme 
	## use the input index for each
	color_scheme_map = {}
	for i in range(len(circleFiles)):
		circleFile, colorScheme = circleFiles[i].split(':')
		color_scheme_map[i] = parseColorScheme(colorScheme)
		(data, cols, rows) = mData.rCRSData(circleFile, retFeatures = True)
		circleData.append(data)