def execute(choices, galaxyFn=None, username=''): gsuite = getGSuiteFromGalaxyTN(choices.gsuite) bedRegions = choices.bedRegions rp = RP(gsuite) bedData = rp.openBedFile(bedRegions) chrOrder, chrLength = rp.sortChrDict() dataDict, dataDictLine, elementOrder, listResCopy, newDictRegions = rp.countMutations( chrLength, bedData) vg = visualizationGraphs() tName = gsuite.allTrackTitles() uniformDictList = OrderedDict() # expected values observedDictList = OrderedDict() # observed values seriesNameRegionUDL = OrderedDict() seriesNameRegionODL = OrderedDict() seriesNameRegion = OrderedDict() GenerateDistributionOfPointsOfInterestTool.countRegionsForDistribution( newDictRegions, observedDictList, rp, seriesNameRegion, seriesNameRegionODL, seriesNameRegionUDL, tName, uniformDictList) res = '' for elK in uniformDictList.keys(): res += GenerateDistributionOfPointsOfInterestTool.drawDistribution( elK, observedDictList, seriesNameRegion, seriesNameRegionODL, seriesNameRegionUDL, uniformDictList, vg) htmlCore = HtmlCore() htmlCore.begin() htmlCore.line(res) htmlCore.end() htmlCore.hideToggle(styleClass='debug') print htmlCore
def execute(cls, choices, galaxyFn=None, username=''): #gsuite gsuite = getGSuiteFromGalaxyTN(choices.gsuite) #all boxes multiPlot = choices.multiPlot #scale = choices.scale #overlap = choices.overlap overlap = 'no' bps = int(choices.bps) rp = RP(gsuite) #get length of chromosomes and ordering chrItems = GenomeInfo.getStdChrLengthDict(gsuite.genome) chrOrder, chrLength = GenerateRainfallPlotTool.sortChrDict(chrItems) dataDict, dataDictLine, elementOrder, listResCopy, listDataCountPerBin, newResBinSizeListSum, chrList = GenerateRainfallPlotTool.countMutations( gsuite, chrLength, bps) seriesType, newSeriesNameRes, newSeriesNameResOE, yAxisMultiVal = rp.getOptionsForPlot( elementOrder, gsuite.allTrackTitles()) newResList, newResBinSizeList, newResBinSizeListSortedList = rp.generateBinSizeList( elementOrder, listResCopy, listDataCountPerBin, newResBinSizeListSum) vg = visualizationGraphs() res = '' if multiPlot == 'Single': res += GenerateRainfallPlotTool.drawSinglePlot( vg, newResBinSizeListSortedList, chrLength, newResList, newSeriesNameRes, newResBinSizeList, overlap, seriesType, yAxisMultiVal) else: res += GenerateRainfallPlotTool.drawMultiPlot( newResList, newSeriesNameRes, newResBinSizeList, vg, seriesType, yAxisMultiVal) htmlCore = HtmlCore() htmlCore.begin() htmlCore.line('Bin size: ' + str(bps)) htmlCore.line(res) htmlCore.end() htmlCore.hideToggle(styleClass='debug') print htmlCore
def helpTextForUserBinSource(self): core = HtmlCore() core.paragraph( str(HtmlCore().emphasize( 'Use the bounding regions of the selected ' 'track(s), if defined. If more than one track ' 'is selected, the intersection of the bounding ' 'regions is used, i.e. where the bounding ' 'regions are overlapping.'))) core2 = HtmlCore() core2.divBegin(divId='help_bounding_regions', divClass='infomessagesmall help', style='display: block;') core2.paragraph( 'Bounding regions are the regions where a track is defined, e.g. where ' 'there theoretically may be data. This means that if there is no data in ' 'a bounding region, the absence of data is informative, i.e. that the lack ' 'of data is not just caused by not looking at the particular region. ' 'Hence, the bounding region for most tracks should be defined without ' 'for instance the centromeres. For tracks with no explicitly defined ' 'bounding regions, the bounding regions are implicitly defined as all ' '(complete) chromosomes containing at least one track element.') core2.divEnd() core2.toggle('More information about bounding regions', styleId='help_bounding_regions') core.paragraph(str(core2)) core3 = HtmlCore() core3.styleInfoBegin(styleClass='infomessagesmall') core3.descriptionLine( 'Note', 'Intersecting bounding regions currently only supported for ' 'two tracks. If using a third track or an intensity track, ' 'only the bounding regions of the two first tracks are ' 'considered.') core3.styleInfoEnd() core.paragraph(str(core3)) self._appendChrArmNoteIfNeeded(core) core.hideToggle(styleId='help_bounding_regions') return str(core)
def execute(self, printHtmlBeginEnd=True, printTrackNamesTable=True): print GalaxyInterface.getHtmlBeginForRuns(self._galaxyFn) core = HtmlCore() if printTrackNamesTable: core.divBegin('trackNames') dataDict = OrderedDict([(x, []) for x in self._trackNames]) tblExpandable = True if len(self._trackNames) < 11: tblExpandable = False core.tableFromDictionary(dataDict, ['Tracks under analysis'], tableId="resTable", expandable=tblExpandable) # core.tableHeader(['Tracks under analysis:']) # for trackName in self._trackNames: # core.tableLine([trackName]) # core.tableFooter() core.divEnd() print core try: results = GalaxyInterface.run(self._tracks[0], self._tracks[1], self.getAnalysisDefinitionString(), self._regSpec, self._binSpec, self._genome, self._galaxyFn, printRunDescription=False, printHtmlBeginEnd=printHtmlBeginEnd, fromMainTool=False) if self.hasVisualization(): print self.visualizeResults(results) # except: # pass finally: core2 = HtmlCore() core2.hideToggle(styleClass='infomessagesmall') print core2 print GalaxyInterface.getHtmlEndForRuns()
def execute(choices, galaxyFn=None, username=''): ''' Is called when execute-button is pushed by web-user. Should print output as HTML to standard out, which will be directed to a results page in Galaxy history. If getOutputFormat is anything else than HTML, the output should be written to the file with path galaxyFn. If needed, StaticFile can be used to get a path where additional files can be put (e.g. generated image files). choices is a list of selections made by web-user in each options box. ''' from gold.application.LogSetup import setupDebugModeAndLogging setupDebugModeAndLogging() targetTrackNames, targetTrackCollection, targetTrackGenome = getGSuiteDataFromGalaxyTN( choices.gSuiteFirst) targetTracksDict = OrderedDict( zip(targetTrackNames, targetTrackCollection)) refTrackNames, refTrackCollection, refTrackCollectionGenome = getGSuiteDataFromGalaxyTN( choices.gSuiteSecond) assert targetTrackGenome == refTrackCollectionGenome, 'Reference genome must be the same one in both GSuite files.' refTracksDict = OrderedDict(zip(refTrackNames, refTrackCollection)) regSpec, binSpec = UserBinMixin.getRegsAndBinsSpec(choices) analysisDef = 'dummy -> RawOverlapStat' results = OrderedDict() for targetTrackName, targetTrack in targetTracksDict.iteritems(): for refTrackName, refTrack in refTracksDict.iteritems(): result = GalaxyInterface.runManual([targetTrack, refTrack], analysisDef, regSpec, binSpec, targetTrackGenome, galaxyFn, printRunDescription=False, printResults=False) if targetTrackName not in results: results[targetTrackName] = OrderedDict() results[targetTrackName][ refTrackName] = result.getGlobalResult() targetTrackTitles = results.keys() stat = choices.statistic statIndex = STAT_LIST_INDEX[stat] title = stat + ' analysis of track collections' processedResults = [] headerColumn = [] for targetTrackName in targetTrackTitles: resultRowDict = processRawResults(results[targetTrackName]) resultColumn = [] headerColumn = [] for refTrackName, statList in resultRowDict.iteritems(): resultColumn.append(statList[statIndex]) headerColumn.append(refTrackName) processedResults.append(resultColumn) transposedProcessedResults = [list(x) for x in zip(*processedResults)] tableHeader = ['Track names'] + targetTrackTitles htmlCore = HtmlCore() htmlCore.begin() htmlCore.header(title) htmlCore.divBegin('resultsDiv') htmlCore.tableHeader(tableHeader, sortable=True, tableId='resultsTable') for i, row in enumerate(transposedProcessedResults): line = [headerColumn[i]] + row htmlCore.tableLine(line) htmlCore.tableFooter() htmlCore.divEnd() addColumnPlotToHtmlCore(htmlCore, targetTrackNames, refTrackNames, stat, title + ' plot', processedResults, xAxisRotation=315) htmlCore.hideToggle(styleClass='debug') htmlCore.end() print htmlCore
def execute(cls, choices, galaxyFn=None, username=''): cls._setDebugModeIfSelected(choices) genome = choices.genome genomicRegions = choices.genomicRegions genomicRegionsTracks = choices.genomicRegionsTracks sourceTfs = choices.sourceTfs sourceTfsDetails = choices.sourceTfsDetails tfTracks = choices.tfTracks # Get Genomic Region track name: if genomicRegions == cls.REGIONS_FROM_HISTORY: galaxyTN = genomicRegionsTracks.split(':') genElementTrackName = ExternalTrackManager.getPreProcessedTrackFromGalaxyTN( genome, galaxyTN) #queryGSuite = getGSuiteFromGalaxyTN(genomicRegionsTracks) #queryTrackList = [Track(x.trackName, x.title) for x in queryGSuite.allTracks()] elif genomicRegions == 'Hyperbrowser repository': selectedGenRegTrack = TfbsTrackNameMappings.getTfbsTrackNameMappings( genome)[genomicRegionsTracks] if isinstance(selectedGenRegTrack, dict): genElementTrackName = selectedGenRegTrack.values() else: genElementTrackName = selectedGenRegTrack elif genomicRegions == 'Hyperbrowser repository (cell-type-specific)': genElementTrackName = ['Private', 'Antonio' ] + genomicRegionsTracks.split(':') else: return # Get TF track names: if isinstance(tfTracks, dict): selectedTfTracks = [ key for key, val in tfTracks.iteritems() if val == 'True' ] else: selectedTfTracks = [tfTracks] queryTrackTitle = '--'.join(genElementTrackName) trackTitles = [queryTrackTitle] tracks = [Track(genElementTrackName, trackTitle=queryTrackTitle)] for i in selectedTfTracks: if sourceTfs == 'Hyperbrowser repository': tfTrackName = TfTrackNameMappings.getTfTrackNameMappings( genome)[sourceTfsDetails] + [i] tracks.append( Track(tfTrackName, trackTitle=tfTrackName[len(tfTrackName) - 1])) trackTitles.append(tfTrackName[len(tfTrackName) - 1]) else: tfTrackName = i.split(':') queryGSuite = getGSuiteFromGalaxyTN(sourceTfsDetails) for x in queryGSuite.allTracks(): selectedTrackNames = (':'.join(x.trackName)) if i == selectedTrackNames: tracks.append(Track(x.trackName, x.title)) trackTitles.append(x.trackName[-1]) # queryGSuite = getGSuiteFromGalaxyTN(sourceTfsDetails) # tfTrackName = [x.trackName for x in queryGSuite.allTracks()] + [i] # tracks += [Track(x.trackName, x.title) for x in queryGSuite.allTracks()] # trackTitles += tfTrackName # print tfTrackName # print tracks # print trackTitles trackTitlesForStat = trackTitles trackTitles = CommonConstants.TRACK_TITLES_SEPARATOR.join(trackTitles) ##first statistic for Q2 resultsForStatistics = OrderedDict() similarityFunc = [ #GSuiteStatUtils.T7_RATIO_OF_OBSERVED_TO_EXPECTED_OVERLAP, GSuiteStatUtils.T5_RATIO_OF_OBSERVED_TO_EXPECTED_OVERLAP ] for similarityStatClassName in similarityFunc: regSpec, binSpec = UserBinMixin.getRegsAndBinsSpec(choices) analysisBins = GalaxyInterface._getUserBinSource(regSpec, binSpec, genome=genome) mcfdrDepth = AnalysisDefHandler( REPLACE_TEMPLATES['$MCFDR$']).getOptionsAsText().values()[0][0] analysisDefString = REPLACE_TEMPLATES[ '$MCFDR$'] + ' -> GSuiteSimilarityToQueryTrackRankingsAndPValuesWrapperStat' analysisSpec = AnalysisDefHandler(analysisDefString) analysisSpec.setChoice('MCFDR sampling depth', mcfdrDepth) analysisSpec.addParameter('assumptions', 'PermutedSegsAndIntersegsTrack_') analysisSpec.addParameter( 'rawStatistic', GSuiteStatUtils. PAIRWISE_STAT_LABEL_TO_CLASS_MAPPING[similarityStatClassName]) analysisSpec.addParameter( 'pairwiseStatistic', GSuiteStatUtils. PAIRWISE_STAT_LABEL_TO_CLASS_MAPPING[similarityStatClassName] ) #needed for call of non randomized stat for assertion analysisSpec.addParameter('tail', 'more') analysisSpec.addParameter('trackTitles', trackTitles) #that need to be string analysisSpec.addParameter('queryTracksNum', str(len(tracks))) results = doAnalysis(analysisSpec, analysisBins, tracks).getGlobalResult() if not similarityStatClassName in resultsForStatistics: resultsForStatistics[similarityStatClassName] = {} resultsForStatistics[similarityStatClassName] = results keyTitle = [ #'Normalized ratio of observed to expected overlap (normalized Forbes similarity measure)', 'Ratio of observed to expected overlap (Forbes similarity measure)' ] # 'Normalized Forbes coefficient: ratio of observed to expected overlap normalized in relation to the reference GSuite', # 'Forbes coefficient: ratio of observed to expected overlap' keyTitle = [ #GSuiteStatUtils.T7_RATIO_OF_OBSERVED_TO_EXPECTED_OVERLAP, GSuiteStatUtils.T5_RATIO_OF_OBSERVED_TO_EXPECTED_OVERLAP ] resultDict = AllTfsOfRegions.countStatistics(similarityFunc, choices, genome, tracks, trackTitlesForStat) resultDictShow = AllTfsOfRegions.countStatisticResults( resultDict, keyTitle, trackTitlesForStat) # print resultsForStatistics '''selectedTrackNames = [] if sourceTfs == 'History (user-defined)': if selectedTfTracks.split(":")[1] == "gsuite": gSuite = getGSuiteFromGalaxyTN(selectedTfTracks) for track in gSuite.allTracks(): selectedTrackNames.append(track.trackName) else: galaxyTN = selectedTfTracks.split(':') gRegTrackName = ExternalTrackManager.getPreProcessedTrackFromGalaxyTN(genome, galaxyTN) selectedTrackNames.append(gRegTrackName) else:''' tfNameList = [] #Intersection between TF Tracks and selected region (Table 1): n = 0 allTargetBins = [] alltfNames = [] table1 = [] for i in selectedTfTracks: n = n + 1 #newGalaxyFn = galaxyFn.split(".")[0] + str(n) + "." + "dat" if sourceTfs == 'Hyperbrowser repository': tfTrackName = TfTrackNameMappings.getTfTrackNameMappings( genome)[sourceTfsDetails] + [i] else: tfTrackName = i.split(':') tfTrackName.pop(0) #tfIntersection.expandReferenceTrack(upFlankSize, downFlankSize) tfIntersection = TrackIntersection(genome, genElementTrackName, tfTrackName, galaxyFn, str(n)) regFileNamer = tfIntersection.getIntersectedRegionsStaticFileWithContent( ) targetBins = tfIntersection.getIntersectedReferenceBins() #regSpec, targetBins = UserBinSelector.getRegsAndBinsSpec(choices) tfHits = [i] * len(targetBins) fixedTargetBins = [str(a).split(" ")[0] for a in targetBins] extendedTargetBins = [ list(a) for a in zip(fixedTargetBins, tfHits) ] allTargetBins = allTargetBins + extendedTargetBins tfName = i alltfNames = alltfNames + [tfName] # Save output table: tfNameList.append(tfName) line = [tfName] + [len(targetBins)] + [ regFileNamer.getLink('Download bed-file') ] + [ regFileNamer.getLoadToHistoryLink('Send bed-file to History') ] table1 = table1 + [line] # Computing totals: fullCase = ','.join(alltfNames) firstColumn = [item[0] for item in allTargetBins] uniqueAllTargetBins = list(set(firstColumn)) # Group TFs by bound region: d1 = defaultdict(list) for k, v in allTargetBins: d1[k].append(v) allTFTargetBins = dict((k, ','.join(v)) for k, v in d1.iteritems()) allTFTargetList = [] fullCaseTFTargetList = [] for key, value in allTFTargetBins.iteritems(): allTFTargetList = allTFTargetList + [[key, value]] if value == fullCase: fullCaseTFTargetList = fullCaseTFTargetList + [[key, value]] analysis3 = TrackIntersection.getFileFromTargetBins( allTFTargetList, galaxyFn, str(3)) analysis4 = TrackIntersection.getFileFromTargetBins( fullCaseTFTargetList, galaxyFn, str(4)) # Print output to table: title = 'TF targets and co-occupancy of ' + genElementTrackName[ -1] + ' genomic regions' htmlCore = HtmlCore() pf = plotFunction(tableId='resultsTable') htmlCore.begin() htmlCore.header(title) htmlCore.divBegin('resultsDiv') htmlCore.line(pf.createButton(bText='Show/Hide more results')) # htmlCore.tableHeader(['Transcription Factor', 'Normalized ratio of observed to expected overlap (normalized Forbes similarity measure) -- Similarity to genomic regions track', 'Normalized ratio of observed to expected overlap (normalized Forbes similarity measure) -- p-value','Ratio of observed to expected overlap (Forbes similarity measure) -- Similarity to genomic regions track', 'Ratio of observed to expected overlap (Forbes similarity measure) -- p-value', 'Number of TF-Target Track Regions', 'File of TF Target Regions', 'File of TF Target Regions', 'Number of TF-co-occupied Regions', 'File of TF co-occupied Regions', 'File of TF co-occupied Regions', 'Rank of TF co-occupancy motifs', 'Rank of TF co-occupancy motifs'], sortable=True, tableId='resultsTable') #previous ordering # htmlCore.tableHeader(['Transcription Factor', 'Normalized Forbes index --overlap score', # 'Normalized Forbes index --p-value', # 'Forbes index --overlap score', 'Forbes index --p-value', # 'Number of TF-Target Track Regions', 'File of TF Target Regions', # 'File of TF Target Regions', 'Number of target track regions occupied by this TF', # 'File of TF co-occupied Regions', 'File of TF co-occupied Regions', # 'Rank of TF co-occupancy motifs', 'Rank of TF co-occupancy motifs'], # sortable=True, tableId='resultsTable') htmlCore.tableHeader( [ 'Transcription Factor', 'Number of TF-Target Track Regions', 'File of TF Track Regions', 'Number of target track regions occupied by this TF', 'File of TF Target Regions', 'Forbes index --overlap score', 'Forbes index --p-value', #'Normalized Forbes index --overlap score', 'Normalized Forbes index --p-value', 'File of TF co-occupied Regions', 'Rank of TF co-occupancy motifs' ], sortable=True, tableId='resultsTable') # Adding co-occupancy results to table: n = 1000 genRegionNumElements = [ int(x) for x in getTrackRelevantInfo.getNumberElements( genome, genElementTrackName) ] for key0, it0 in resultsForStatistics.iteritems(): for el in tfNameList: if el not in it0: resultsForStatistics[key0][el] = [None, None] resultsPlotDict = {} resultPlotCat = [] resultsPlot = [] resultsForStatisticsProper = {} for key0, it0 in resultsForStatistics.iteritems(): if not key0 in resultsPlotDict: resultsPlotDict[key0] = {} resultsPlotPart = [] for key1, it1 in it0.iteritems(): resultsPlotPart.append(it1[0]) if not key1 in resultsForStatisticsProper: resultsForStatisticsProper[key1] = [] if not key1 in resultsPlotDict[key0]: resultsPlotDict[key0][key1] = None for el in it1: resultsForStatisticsProper[key1].append(el) resultsPlotDict[key0][key1] = it1[0] resultPlotCat.append(tfNameList) resultPlotCat.append(tfNameList) #resultPlotCatPart = tfNameList # print resultPlotCatPart for key0, it0 in resultsPlotDict.iteritems(): resultsPlotPart = [] for el in tfNameList: if el in it0: resultsPlotPart.append(it0[el]) else: resultsPlotPart.append(None) resultsPlot.append(resultsPlotPart) for i in table1: thisCaseTFTargetList = [] for key, value in allTFTargetList: if i[0] in value and ',' in value: thisCaseTFTargetList = thisCaseTFTargetList + [[ key, value ]] n = n + 1 thisAnalysis = TrackIntersection.getFileFromTargetBins( thisCaseTFTargetList, galaxyFn, str(n)) thisCaseCoCountsList = [] thing = [x[1] for x in thisCaseTFTargetList] for k in list(set(thing)): thisCount = thing.count(k) thisCaseCoCountsList = thisCaseCoCountsList + \ [[k, thisCount, 100*float(thisCount)/float(sum(genRegionNumElements)), 100*float(thisCount)/float(len(thisCaseTFTargetList))]] thisCaseCoCountsList.sort(key=lambda x: x[2], reverse=True) n = n + 1 thisCoCountsAnalysis = TrackIntersection.getOccupancySummaryFile( thisCaseCoCountsList, galaxyFn, str(n)) thisLine = [len(thisCaseTFTargetList)] + \ [thisAnalysis.getLink('Download file')] + [thisAnalysis.getLoadToHistoryLink('Send file to History')] + \ [thisCoCountsAnalysis.getLink('Download file')] + [thisCoCountsAnalysis.getLoadToHistoryLink('Send file to History')] newLineI = [] tfName = i[0] newLineI.append(tfName) for el in resultsForStatisticsProper[tfName]: newLineI.append(el) for elN in range(1, len(i)): newLineI.append(i[elN]) # htmlCore.tableLine(i + thisLine) # htmlCore.tableHeader(['Transcription Factor', 'Normalized Forbes index --overlap score', # 'Normalized Forbes index --p-value', # 'Forbes index --overlap score', 'Forbes index --p-value', # 'Number of TF-Target Track Regions', 'File of TF Target Regions', # 'File of TF Target Regions', 'Number of target track regions occupied by this TF', # 'File of TF co-occupied Regions', 'File of TF co-occupied Regions', # 'Rank of TF co-occupancy motifs', 'Rank of TF co-occupancy motifs'], # sortable=True, tableId='resultsTable') # htmlCore.tableHeader(['Transcription Factor', 'Number of TF-Target Track Regions', 'File of TF Track Regions', # 'Number of target track regions occupied by this TF', 'File of TF Target Regions', # 'Forbes index --overlap score', 'Forbes index --p-value', # 'Normalized Forbes index --overlap score', 'Normalized Forbes index --p-value', # 'File of TF co-occupied Regions', 'Rank of TF co-occupancy motifs'], # sortable=True, tableId='resultsTable') tl = newLineI + thisLine # previous ordering tl - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 # actual ordering - 0, 5, 7, 8, 7, 3, 4, 1, 2, 9, 11 #ordering = [0, 5, 7, 8, 10, 3, 4, 1, 2, 10, 12] ordering = [0, 3, 5, 6, 8, 1, 2, 8, 10] #1, 2, => delete eoList = [] for eo in ordering: eoList.append(tl[eo]) htmlCore.tableLine(eoList) totalCoOccupancyTargetList = [] n = 2000 for key, value in allTFTargetList: n = n + 1 if ',' in value: totalCoOccupancyTargetList = totalCoOccupancyTargetList + [[ key, value ]] #newGalaxyFn = galaxyFn.split(".")[0] + str(n) + "." + "dat" totalCoOccupancyAnalysis = TrackIntersection.getFileFromTargetBins( totalCoOccupancyTargetList, galaxyFn, str(n)) #line = ['Total reported regions'] + [len(allTargetBins)] + [''] + [''] + [''] + [''] + [''] #line = ['Full co-occupancy of ' + fullCase] + ['-'] + ['-'] + ['-'] + ['-'] + ['-'] + ['-'] + ['-'] + [len(fullCaseTFTargetList)] + [analysis4.getLink('Download file')] + [analysis4.getLoadToHistoryLink('Send file to History')] + ['-'] + ['-'] line = ['Full co-occupancy of ' + fullCase] + \ ['-'] + \ ['-'] + \ [len(fullCaseTFTargetList)] + \ ['-'] + \ ['-'] + \ ['-'] + \ [analysis4.getLoadToHistoryLink('Send file to History')] + \ ['-'] htmlCore.tableLine(line) #line = ['Total unique regions'] + ['-'] + ['-'] + ['-'] + ['-'] + [len(allTFTargetList)] + [analysis3.getLink('Download bed-file')] + [analysis3.getLoadToHistoryLink('Send bed-file to History')] + [len(totalCoOccupancyTargetList)] + [totalCoOccupancyAnalysis.getLink('Download file')] + [totalCoOccupancyAnalysis.getLoadToHistoryLink('Send file to History')] + ['-'] + ['-'] line = ['Total unique regions'] + \ [len(allTFTargetList)] + \ ['-'] + \ [len(totalCoOccupancyTargetList)] + \ [analysis3.getLoadToHistoryLink('Send bed-file to History')] + \ ['-'] +\ ['-'] + \ [totalCoOccupancyAnalysis.getLoadToHistoryLink('Send file to History')] + \ ['-'] htmlCore.tableLine(line) htmlCore.tableFooter() htmlCore.divEnd() # htmlCore.line(pf.hideColumns(indexList=[2, 4])) # sumRes = 0 for r in resultsPlot[0]: if r != None: sumRes += r if sumRes != 0: vg = visualizationGraphs() result = vg.drawColumnCharts( [resultsPlot[0]], height=300, categories=resultPlotCat, legend=False, addOptions='width: 90%; float:left; margin: 0 4%;', #titleText=['Overlap between TFs and genomic region using normalized Forbes', 'Overlap between TFs and genomic region using Forbes'], titleText=[ 'Overlap between TFs and genomic region using Forbes' ], xAxisRotation=90, xAxisTitle='TF', yAxisTitle='value') htmlCore.line(result) for key0, it0 in resultDictShow.iteritems(): htmlCore.divBegin('resultsDiv' + str(key0)) htmlCore.header(key0) htmlCore.tableHeader(it0[0], sortable=True, tableId='resultsTable' + str(key0)) for elN in range(1, len(it0)): htmlCore.tableLine(it0[elN]) htmlCore.tableFooter() htmlCore.divEnd() htmlCore.hideToggle(styleClass='debug') htmlCore.end() print htmlCore
def execute(choices, galaxyFn=None, username=''): #targetTrackNames, targetTrackCollection, targetTrackGenome = getGSuiteDataFromGalaxyTN(choices.gSuiteFirst) gFirst = choices.gSuiteFirst.split(':') firstGSuite = ScreenTwoTrackCollectionsAgainstEachOther2LevelDepth.returnGSuiteDict3LevelDept( gFirst) gSecond = choices.gSuiteSecond.split(':') secondGSuite = ScreenTwoTrackCollectionsAgainstEachOther2LevelDepth.returnGSuiteDict2LevelDept( gSecond) regSpec, binSpec = UserBinMixin.getRegsAndBinsSpec(choices) if choices.intraOverlap == ScreenTwoTrackCollectionsAgainstEachOther2LevelDepth.MERGE_INTRA_OVERLAPS: analysisDef = 'dummy -> RawOverlapStat' else: analysisDef = 'dummy [withOverlaps=yes] -> RawOverlapAllowSingleTrackOverlapsStat' if choices.type == 'basic': results = [] for elFG in firstGSuite: for elSG in secondGSuite: if elFG['genome'] == elSG['genome']: targetTrackGenome = elFG['genome'] resultPartList3 = [] for targetTrackDetailFolder1 in elFG[ 'dataFolderValue0']: resultPartList2 = [] for targetTrackDetail in targetTrackDetailFolder1[ 'dataFolderValue1']: resultPartList1 = [] for el in elSG['dataFolderValue0']: result = GalaxyInterface.runManual( [ targetTrackDetail['trackPath'], el['trackPath'] ], analysisDef, regSpec, binSpec, elFG['genome'].split('-')[0], galaxyFn, printRunDescription=False, printResults=False) resultPartList1.append({ 'refTrackName': el['trackName'].replace( targetTrackGenome, ''), 'data': processResult(result.getGlobalResult()) }) resultPartList2.append({ 'folderName2': targetTrackDetail['folderName2'], 'targetTrackName': targetTrackDetail['trackName'], 'dataFolderValue2': resultPartList1 }) resultPartList3.append({ 'folderName1': targetTrackDetailFolder1['folderName1'], 'dataFolderValue1': resultPartList2 }) results.append({ 'genome': targetTrackGenome, 'dataFolderValue0': resultPartList3 }) else: from quick.statistic.NumT2SegsTouchedByT1SegsStat import NumT2SegsTouchedByT1SegsStat results = [] for elFG in firstGSuite: for elSG in secondGSuite: if elFG['genome'] == elSG['genome']: if choices.statistic == 'Number of touched segments': analysisSpec = AnalysisSpec( NumT2SegsTouchedByT1SegsStat) #analysisBins = UserBinSource('*', '10m', genome=elFG['genome'].split('-')[0]) analysisBins = GlobalBinSource( elFG['genome'].split('-')[0]) targetTrackGenome = elFG['genome'] resultPartList3 = [] for targetTrackDetailFolder1 in elFG[ 'dataFolderValue0']: resultPartList2 = [] for targetTrackDetail in targetTrackDetailFolder1[ 'dataFolderValue1']: resultPartList1 = [] for el in elSG['dataFolderValue0']: res = doAnalysis( analysisSpec, analysisBins, [ PlainTrack( targetTrackDetail['trackPath'] ), PlainTrack(el['trackPath']) ]) resultDict = res.getGlobalResult() resultPartList1.append({ 'refTrackName': el['trackName'].replace( targetTrackGenome, ''), 'data': [resultDict['Result']] }) resultPartList2.append({ 'folderName2': targetTrackDetail['folderName2'], 'targetTrackName': targetTrackDetail['trackName'], 'dataFolderValue2': resultPartList1 }) resultPartList3.append({ 'folderName1': targetTrackDetailFolder1['folderName1'], 'dataFolderValue1': resultPartList2 }) results.append({ 'genome': targetTrackGenome, 'dataFolderValue0': resultPartList3 }) if choices.type == 'basic': stat = choices.statistic #statIndex = STAT_LIST_INDEX[stat] statIndex = ScreenTwoTrackCollectionsAgainstEachOther2LevelDepth.STAT_LIST_INDEX statIndex = statIndex.index(stat) else: stat = '0' statIndex = 0 htmlCore = HtmlCore() htmlCore.begin() htmlCore.line(""" <style type="text/css"> .hidden { display: none; { .visible { display: block; } </style> """) folderValue0Unique = [] folderValue1Unique = [] folderValue2Unique = [] targetTrackFeatureTitles = [] for dataDetail0 in results: if dataDetail0['genome'] not in folderValue0Unique: folderValue0Unique.append(dataDetail0['genome']) for dataDetail1 in dataDetail0['dataFolderValue0']: if dataDetail1['folderName1'] not in folderValue1Unique: folderValue1Unique.append(dataDetail1['folderName1']) for dataDetail2 in dataDetail1['dataFolderValue1']: if dataDetail2['folderName2'] not in folderValue2Unique: folderValue2Unique.append(dataDetail2['folderName2']) for dataDetail3 in dataDetail2['dataFolderValue2']: if dataDetail3[ 'refTrackName'] not in targetTrackFeatureTitles: targetTrackFeatureTitles.append( dataDetail3['refTrackName']) #print 'folderValue0Unique=' + str(folderValue0Unique) #print 'folderValue1Unique=' + str(folderValue1Unique) #print 'folderValue2Unique=' + str(folderValue2Unique) #print 'targetTrackFeatureTitles=' + str(targetTrackFeatureTitles) targetTrackNameList = targetTrackFeatureTitles htmlCore.line('Statistic: ' + stat) htmlCore.line( addJS3levelOptionList(folderValue1Unique, folderValue2Unique, targetTrackFeatureTitles, targetTrackNameList, folderValue0Unique)) htmlCore.divBegin('results') #htmlCore.paragraph(preporcessResults(results, folderValue1Unique, folderValue2Unique, targetTrackFeatureTitles, statIndex)) htmlCore.paragraph( preporcessResults3(results, folderValue1Unique, folderValue2Unique, targetTrackFeatureTitles, folderValue0Unique, statIndex)) htmlCore.divEnd() htmlCore.hideToggle(styleClass='debug') htmlCore.end() print htmlCore
def execute(cls, choices, galaxyFn=None, username=''): genome = choices.genome from quick.multitrack.MultiTrackCommon import getGSuiteDataFromGalaxyTN trackTitles, refTrackNameList, genome = getGSuiteDataFromGalaxyTN(choices.gsuite) queryTrackName = ExternalTrackManager.extractFnFromGalaxyTN(choices.targetTrack) if choices.isBasic: suffix = ExternalTrackManager.extractFileSuffixFromGalaxyTN(choices.targetTrack, False) regSpec = suffix binSpec = queryTrackName else: regSpec, binSpec = UserBinMixin.getRegsAndBinsSpec(choices) #targetTrack = choices.targetTrack.split(':') #targetTrackTitle = targetTrack[-1] #print targetTrackTitle # #binSpec = targetTrackTitle #Phenotype and disease associations:Assorted experiments:Virus integration, HPV specific, Kraus and Schmitz, including 50kb flanks from gold.gsuite.GSuiteConstants import TITLE_COL from gold.gsuite.GSuite import GSuite from proto.hyperbrowser.StaticFile import GalaxyRunSpecificFile from gold.gsuite.GSuiteEditor import selectColumnsFromGSuite staticFile=[] results = [] for refTrack in refTrackNameList: analysisDef = '-> ProportionCountStat' #ProportionCountStat #CountStat res = GalaxyInterface.runManual([refTrack], analysisDef, regSpec, binSpec, genome, username=username, galaxyFn=galaxyFn, printRunDescription=False, printResults=False, printProgress=False) segCoverageProp = [res[seg]['Result'] for seg in res.getAllRegionKeys()] results.append(segCoverageProp) regFileNamer = GalaxyRunSpecificFile(refTrack, galaxyFn) staticFile.append([regFileNamer.getLink('Download bed-file'), regFileNamer.getLoadToHistoryLink('Download bed-file to History')]) refGSuite = getGSuiteFromGalaxyTN(choices.gsuite) if TITLE_COL == choices.selectColumns: selected = trackTitles else: selected = refGSuite.getAttributeValueList(choices.selectColumns) yAxisNameOverMouse=[] metadataAll =[] for x in range(0, len(selected)): if selected[x] == None: yAxisNameOverMouse.append(str(trackTitles[x]) + ' --- ' + 'None') else: if TITLE_COL == choices.selectColumns: yAxisNameOverMouse.append(selected[x].replace('\'', '').replace('"', '')) else: metadata = str(selected[x].replace('\'', '').replace('"', '')) yAxisNameOverMouse.append(str(trackTitles[x]) + ' --- ' + metadata) metadataAll.append(metadata) colorListForYAxisNameOverMouse = [] if len(metadataAll) > 0: import quick.webtools.restricted.visualization.visualizationGraphs as vg cList = vg.colorList().fullColorList() uniqueCList = list(set(metadataAll)) for m in metadataAll: colorListForYAxisNameOverMouse.append(cList[uniqueCList.index(m)]) #startEnd - order in res startEndInterval = [] startEnd = [] i=0 extraX=[] rowLabel = [] for ch in res.getAllRegionKeys(): rowLabel.append(str(ch.chr) + ":" + str(ch.start) + "-" + str(ch.end) + str(' (Pos)' if ch.strand else ' (Neg)')) if not i==0 and not i==len(res.getAllRegionKeys())-1: start = ch.start if start-end > 0: startEnd.append(start-end) else: startEnd.append('null') extraX.append("""{ color: 'orange', width: 5, value: '""" + str(i-0.5) + """' }""") startEndInterval.append(ch.end - ch.start) else: startEndInterval.append(ch.end - ch.start) end = ch.end i+=1 extraXAxis='plotLines: [ ' extraXAxis = extraXAxis + ",".join(extraX) extraXAxis = extraXAxis + """ ], """ #rowLabel = res.getAllRegionKeys() #rowLabel = [str(x) for x in rowLabel] import quick.webtools.restricted.visualization.visualizationPlots as vp htmlCore = HtmlCore() htmlCore.begin() htmlCore.divBegin(divId='results-page') htmlCore.divBegin(divClass='results-section') htmlCore.divBegin('plotDiv') htmlCore.line(vp.addJSlibs()) htmlCore.line(vp.useThemePlot()) htmlCore.line(vp.addJSlibsExport()) htmlCore.line(vp.axaddJSlibsOverMouseAxisisPopup()) #vp.addGuideline(htmlCore) htmlCore.line(vp._addGuidelineV1()) htmlCore.line(vp.addJSlibsHeatmap()) from config.Config import DATA_FILES_PATH from proto.StaticFile import StaticFile, GalaxyRunSpecificFile #sf = GalaxyRunSpecificFile(['result.txt'], galaxyFn) #outFile = sf.getDiskPath(ensurePath=True) htmlCore.divBegin() writeFile = open( cls.makeHistElement(galaxyExt='tabular', title='result'), 'w') # htmlCore.link('Get all results', sf.getURL()) htmlCore.divEnd() i = 0 writeFile.write('Track' + '\t' + '\t'.join(rowLabel)+ '\n') for rList in results: writeFile.write(str(yAxisNameOverMouse[i]) + '\t' + '\t'.join([str(r) for r in rList]) + '\n') i+=1 fileOutput = GalaxyRunSpecificFile(['heatmap.png'], galaxyFn) ensurePathExists(fileOutput.getDiskPath()) fileOutputPdf = GalaxyRunSpecificFile(['heatmap.pdf'], galaxyFn) ensurePathExists(fileOutputPdf.getDiskPath()) cls.generateStaticRPlot(results, colorListForYAxisNameOverMouse, rowLabel, yAxisNameOverMouse, colorMaps[choices.colorMapSelectList], fileOutput.getDiskPath(), fileOutputPdf.getDiskPath()) htmlCore.divBegin(divId='heatmap', style="padding: 10px 0 px 10 px 0px;margin: 10px 0 px 10 px 0px") htmlCore.link('Download heatmap image', fileOutputPdf.getURL()) htmlCore.divEnd() if len(results) * len(results[1]) >= 10000: htmlCore.image(fileOutput.getURL()) else: min = 1000000000 max = -1000000000 for rList in results: for r in rList: if min > r: min = r if max < r: max = r if max-min != 0: resultNormalised = [] for rList in results: resultNormalisedPart = [] for r in rList: resultNormalisedPart.append((r-min)/(max-min)) resultNormalised.append(resultNormalisedPart) addText = '(normalised to [0, 1])' else: resultNormalised = results addText = '' hm, heatmapPlotNumber, heatmapPlot = vp.drawHeatMap( resultNormalised, colorMaps[choices.colorMapSelectList], label='this.series.xAxis.categories[this.point.x] + ' + "'<br >'" + ' + yAxisNameOverMouse[this.point.y] + ' + "'<br>Overlap proportion" + str(addText) + ": <b>'" + ' + this.point.value + ' + "'</b>'", yAxisTitle= 'Reference tracks', categories=rowLabel, tickInterval=1, plotNumber=3, interaction=True, otherPlotNumber=1, titleText='Overlap with reference tracks for each local region', otherPlotData=[startEnd, startEndInterval], overMouseAxisX=True, overMouseAxisY=True, yAxisNameOverMouse=yAxisNameOverMouse, overMouseLabelY=" + 'Track: '" + ' + this.value + ' + "' '" + ' + yAxisNameOverMouse[this.value] + ', overMouseLabelX = ' + this.value.substring(0, 20) +', extrOp = staticFile ) htmlCore.line(hm) htmlCore.line(vp.drawChartInteractionWithHeatmap( [startEndInterval, startEnd], tickInterval=1, type='line', categories=[rowLabel, rowLabel], seriesType=['line', 'column'], minWidth=300, height=500, lineWidth=3, titleText=['Lengths of segments (local regions)','Gaps between consecutive segments'], label=['<b>Length: </b>{point.y}<br/>', '<b>Gap length: </b>{point.y}<br/>'], subtitleText=['',''], yAxisTitle=['Lengths','Gap lengths'], seriesName=['Lengths','Gap lengths'], xAxisRotation=90, legend=False, extraXAxis=extraXAxis, heatmapPlot=heatmapPlot, heatmapPlotNumber=heatmapPlotNumber, overMouseAxisX=True, overMouseLabelX = ' + this.value.substring(0, 20) +' )) htmlCore.divEnd() htmlCore.divEnd() htmlCore.divEnd() htmlCore.end() htmlCore.hideToggle(styleClass='debug') print htmlCore
def execute(choices, galaxyFn=None, username=''): ''' Is called when execute-button is pushed by web-user. Should print output as HTML to standard out, which will be directed to a results page in Galaxy history. If getOutputFormat is anything else than HTML, the output should be written to the file with path galaxyFn. If needed, StaticFile can be used to get a path where additional files can be put (e.g. generated image files). choices is a list of selections made by web-user in each options box. ''' # from gold.application.LogSetup import setupDebugModeAndLogging #setupDebugModeAndLogging() # targetTrackNames, targetTrackCollection, targetTrackGenome = getGSuiteDataFromGalaxyTN(choices.gSuiteFirst) # targetTracksDict = OrderedDict(zip(targetTrackNames, targetTrackCollection)) # refTrackNames, refTrackCollection, refTrackCollectionGenome = getGSuiteDataFromGalaxyTN(choices.gSuiteSecond) # refTracksDict = OrderedDict(zip(refTrackNames, refTrackCollection)) # targetGSuite = getGSuiteFromGalaxyTN(choices.gSuiteFirst) refGSuite = getGSuiteFromGalaxyTN(choices.gSuiteSecond) regSpec, binSpec = UserBinMixin.getRegsAndBinsSpec(choices) if choices.intraOverlap == TrackCollectionsAnalysis.MERGE_INTRA_OVERLAPS: analysisDef = 'dummy -> RawOverlapStat' else: analysisDef = 'dummy [withOverlaps=yes] -> RawOverlapAllowSingleTrackOverlapsStat' results = OrderedDict() # for targetTrackName, targetTrack in targetTracksDict.iteritems(): # for refTrackName, refTrack in refTracksDict.iteritems(): for targetTrack in targetGSuite.allTracks(): targetTrackName = targetTrack.title for refTrack in refGSuite.allTracks(): refTrackName = refTrack.title if targetTrack.trackName == refTrack.trackName: result = TrackCollectionsAnalysis.handleSameTrack(targetTrack.trackName, regSpec, binSpec, choices.genome, galaxyFn) else: result = GalaxyInterface.runManual([targetTrack.trackName, refTrack.trackName], analysisDef, regSpec, binSpec, choices.genome, galaxyFn, printRunDescription=False, printResults=False).getGlobalResult() if targetTrackName not in results : results[targetTrackName] = OrderedDict() results[targetTrackName][refTrackName] = result stat = choices.statistic statIndex = STAT_LIST_INDEX[stat] title = 'Screening track collections (' + stat + ')' processedResults = [] headerColumn = [] for targetTrackName in targetGSuite.allTrackTitles(): resultRowDict = processRawResults(results[targetTrackName]) resultColumn = [] headerColumn = [] for refTrackName, statList in resultRowDict.iteritems(): resultColumn.append(statList[statIndex]) headerColumn.append(refTrackName) processedResults.append(resultColumn) transposedProcessedResults = [list(x) for x in zip(*processedResults)] tableHeader = ['Track names'] + targetGSuite.allTrackTitles() htmlCore = HtmlCore() htmlCore.begin() htmlCore.header(title) htmlCore.divBegin('resultsDiv') htmlCore.tableHeader(tableHeader, sortable=True, tableId='resultsTable') for i, row in enumerate(transposedProcessedResults): line = [headerColumn[i]] + [strWithStdFormatting(x) for x in row] htmlCore.tableLine(line) htmlCore.tableFooter() htmlCore.divEnd() # #hicharts can't handle strings that contain ' or " as input for series names targetTrackNames = [x.replace('\'', '').replace('"','') for x in targetGSuite.allTrackTitles()] refTrackNames = [x.replace('\'', '').replace('"','') for x in refGSuite.allTrackTitles()] # # ''' # addColumnPlotToHtmlCore(htmlCore, targetTrackNames, refTrackNames, # stat, title + ' plot', # processedResults, xAxisRotation = -45, height=800) # ''' # ''' # addPlotToHtmlCore(htmlCore, targetTrackNames, refTrackNames, # stat, title + ' plot', # processedResults, xAxisRotation = -45, height=400) # ''' # from quick.webtools.restricted.visualization.visualizationGraphs import visualizationGraphs vg = visualizationGraphs() result = vg.drawColumnChart(processedResults, height=600, yAxisTitle=stat, categories=refTrackNames, xAxisRotation=90, seriesName=targetTrackNames, shared=False, titleText=title + ' plot', overMouseAxisX=True, overMouseLabelX = ' + this.value.substring(0, 10) +') htmlCore.line(result) #htmlCore.line(vg.visualizeResults(result, htmlCore)) htmlCore.hideToggle(styleClass='debug') htmlCore.end() print htmlCore
def execute(cls, choices, galaxyFn=None, username=''): cls._setDebugModeIfSelected(choices) targetGSuite = getGSuiteFromGalaxyTN(choices.gSuiteFirst) refGSuite = getGSuiteFromGalaxyTN(choices.gSuiteSecond) regSpec, binSpec = UserBinMixin.getRegsAndBinsSpec(choices) analysisDef = 'dummy -> RawOverlapStat' # analysisDef = 'dummy [withOverlaps=yes] -> RawOverlapAllowSingleTrackOverlapsStat' results = OrderedDict() for targetTrack in targetGSuite.allTracks(): targetTrackName = targetTrack.title for refTrack in refGSuite.allTracks(): refTrackName = refTrack.title if targetTrack.trackName == refTrack.trackName: # print targetTrack.title # print targetTrack.trackName result = DetermineSuiteTracksCoincidingWithAnotherSuite.handleSameTrack( targetTrack.trackName, regSpec, binSpec, targetGSuite.genome, galaxyFn) else: result = GalaxyInterface.runManual( [targetTrack.trackName, refTrack.trackName], analysisDef, regSpec, binSpec, targetGSuite.genome, galaxyFn, printRunDescription=False, printResults=False, printProgress=False).getGlobalResult() if targetTrackName not in results: results[targetTrackName] = OrderedDict() results[targetTrackName][refTrackName] = result stat = STAT_OVERLAP_COUNT_BPS statIndex = STAT_LIST_INDEX[stat] title = '' processedResults = [] headerColumn = [] for targetTrackName in targetGSuite.allTrackTitles(): resultRowDict = processRawResults(results[targetTrackName]) resultColumn = [] headerColumn = [] for refTrackName, statList in resultRowDict.iteritems(): resultColumn.append(statList[statIndex]) headerColumn.append(refTrackName) processedResults.append(resultColumn) outputTable = {} for elN in range(0, len(headerColumn)): outputTable[elN] = {} outputTable[elN]['id'] = headerColumn[elN] transposedProcessedResults = [list(x) for x in zip(*processedResults)] # second question sumSecondgSuite # first question numSecondgSuite # fifth question numSecondgSuitePercentage for i in range(0, len(transposedProcessedResults)): outputTable[i]['sumSecondgSuite'] = sum( transposedProcessedResults[i]) if not 'numSecondgSuite' in outputTable[i]: outputTable[i]['numSecondgSuite'] = 0 for j in range(0, len(transposedProcessedResults[i])): if transposedProcessedResults[i][j] >= 1: outputTable[i]['numSecondgSuite'] += 1 else: outputTable[i]['numSecondgSuite'] += 0 outputTable[i]['numSecondgSuitePercentage'] = float( outputTable[i]['numSecondgSuite']) / float( targetGSuite.numTracks()) * 100 from gold.statistic.CountSegmentStat import CountSegmentStat from gold.statistic.CountPointStat import CountPointStat from gold.description.TrackInfo import TrackInfo from gold.statistic.CountStat import CountStat # third question numPairBpSecondgSuite # fourth question numFreqBpSecondgSuite i = 0 for refTrack in refGSuite.allTracks(): formatName = TrackInfo(refTrack.genome, refTrack.trackName).trackFormatName analysisDef = CountStat analysisBins = GalaxyInterface._getUserBinSource( regSpec, binSpec, refTrack.genome) results = doAnalysis(AnalysisSpec(analysisDef), analysisBins, [PlainTrack(refTrack.trackName)]) resultDict = results.getGlobalResult() if len(resultDict) == 0: outputTable[i]['numPairBpSecondgSuite'] = None outputTable[i]['numFreqBpSecondgSuite'] = None outputTable[i]['numFreqUniqueBpSecondgSuite'] = None else: outputTable[i]['numPairBpSecondgSuite'] = resultDict['Result'] if outputTable[i]['numPairBpSecondgSuite'] != 0: outputTable[i]['numFreqBpSecondgSuite'] = float( outputTable[i]['sumSecondgSuite']) / float( outputTable[i]['numPairBpSecondgSuite']) else: outputTable[i]['numFreqBpSecondgSuite'] = None if outputTable[i]['sumSecondgSuite'] != 0: outputTable[i]['numFreqUniqueBpSecondgSuite'] = float( outputTable[i]['numPairBpSecondgSuite']) / float( outputTable[i]['sumSecondgSuite']) else: outputTable[i]['numFreqUniqueBpSecondgSuite'] = None i += 1 # sortTable outputTableLine = [] for key, item in outputTable.iteritems(): line = [ item['id'], item['numSecondgSuite'], item['sumSecondgSuite'], item['numPairBpSecondgSuite'], item['numFreqBpSecondgSuite'], item['numFreqUniqueBpSecondgSuite'], item['numSecondgSuitePercentage'] ] outputTableLine.append(line) import operator outputTableLineSort = sorted(outputTableLine, key=operator.itemgetter(1), reverse=True) tableHeader = [ 'Region ID ', 'Number of cases with at least one event ', 'Total number of events', 'Genome coverage (unique bp)', 'Number of events per unique bp', 'Number of unique bp per event', 'Percentage of cases with at least one event' ] htmlCore = HtmlCore() htmlCore.begin() htmlCore.line( "<b>Identification of genomic elements with high event recurrence</b> " ) htmlCore.header(title) htmlCore.divBegin('resultsDiv') htmlCore.tableHeader(tableHeader, sortable=True, tableId='resultsTable') for line in outputTableLineSort: htmlCore.tableLine(line) plotRes = [] plotXAxis = [] for lineInx in range(1, len(outputTableLineSort[0])): plotResPart = [] plotXAxisPart = [] for lineInxO in range(0, len(outputTableLineSort)): # if outputTableLineSort[lineInxO][lineInx]!=0 and # if outputTableLineSort[lineInxO][lineInx]!=None: plotResPart.append(outputTableLineSort[lineInxO][lineInx]) plotXAxisPart.append(outputTableLineSort[lineInxO][0]) plotRes.append(plotResPart) plotXAxis.append(plotXAxisPart) htmlCore.tableFooter() htmlCore.divEnd() htmlCore.divBegin('plot', style='padding-top:20px;margin-top:20px;') vg = visualizationGraphs() res = vg.drawColumnCharts( plotRes, titleText=tableHeader[1:], categories=plotXAxis, height=500, xAxisRotation=270, xAxisTitle='Ragion ID', yAxisTitle='Number of cases with at least one event', marginTop=30, addTable=True, sortableAccordingToTable=True, legend=False) htmlCore.line(res) htmlCore.divEnd() htmlCore.hideToggle(styleClass='debug') htmlCore.end() print htmlCore
def execute(cls, choices, galaxyFn=None, username=''): cls._setDebugModeIfSelected(choices) genome = choices.genome genomicRegionsSource = choices.genomicRegionsSource genomicRegions = choices.genomicRegions #upFlankSize = int(choices.upFlankSize) #downFlankSize = int(choices.downFlankSize) sourceTfs = choices.sourceTfs tfTracks = choices.tfTracks # Get TF track name: if sourceTfs == cls.REGIONS_FROM_HISTORY: galaxyTN = tfTracks.split(':') tfTrackName = ExternalTrackManager.getPreProcessedTrackFromGalaxyTN( genome, galaxyTN) else: tfTrackName = TfTrackNameMappings.getTfTrackNameMappings( genome)[sourceTfs] + [tfTracks] # Get Genomic Regions track names: selectedTrackNames = [] if isinstance(genomicRegions, dict): selectedGenRegions = [ key for key, val in genomicRegions.iteritems() if val == 'True' ] else: selectedGenRegions = genomicRegions if genomicRegionsSource == 'Hyperbrowser repository (single tracks)': for i in selectedGenRegions: selectedTrackNames.append( TfbsTrackNameMappings.getTfbsTrackNameMappings(genome)[i]) elif genomicRegionsSource == 'Hyperbrowser repository (cell-specific multi-tracks)': for i in selectedGenRegions: genElementGSuiteName = TfbsGSuiteNameMappings.getTfbsGSuiteNameMappings( genome)[i] gSuite = getGSuiteFromGSuiteFile(genElementGSuiteName) for track in gSuite.allTracks(): selectedTrackNames.append(track.trackName) elif genomicRegionsSource == 'History (user-defined)': if genomicRegions.split(":")[1] == "gsuite": gSuite = getGSuiteFromGalaxyTN(selectedGenRegions) for track in gSuite.allTracks(): selectedTrackNames.append(track.trackName) else: galaxyTN = selectedGenRegions.split(':') gRegTrackName = ExternalTrackManager.getPreProcessedTrackFromGalaxyTN( genome, galaxyTN) selectedTrackNames.append(gRegTrackName) else: return #Intersection: title = 'Targets of ' + tfTrackName[-1] + ' TF track' htmlCore = HtmlCore() htmlCore.begin() htmlCore.header(title) htmlCore.divBegin('resultsDiv') htmlCore.tableHeader([ 'Genomic Region', 'Number of Target Regions', 'Download bed file of Target Regions', 'Send bed file to history' ], sortable=True, tableId='resultsTable') n = 0 allTargetBins = [] dataY = [] allRefSetNames = [] #print 'all:', selectedTrackNames, '<p>' #print 'tf:', tfTrackName, '<p>' for i in selectedTrackNames: n = n + 1 #newGalaxyFn = galaxyFn.split(".")[0] + str(n) + "." + "dat" tfIntersection = TrackIntersection(genome, i, tfTrackName, galaxyFn, str(n)) #tfIntersection.expandReferenceTrack(upFlankSize, downFlankSize) regFileNamer = tfIntersection.getIntersectedRegionsStaticFileWithContent( ) targetBins = tfIntersection.getIntersectedReferenceBins() '''print 'Target Bins = ', targetBins, '<p>' if genomicRegionsSource=='Hyperbrowser repository (single tracks)': print '\"', tfTracks, '\" in \"', ":".join((i[len(i)-2],i[len(i)-1])), '":<p>' elif genomicRegionsSource=='History (user-defined)': print '\"', tfTracks, '\" in \"', i[len(i)-1], '":<p>' else: listGenRegion = i[0].split(":") maxIndex = len(listGenRegion)-1 print '\"', tfTracks, '\" in \"', ":".join((listGenRegion[maxIndex-1],listGenRegion[maxIndex])), '":<p>' print '<p>Number of Targets = ', len(targetBins), 'regions.</p>' print '<p>', regFileNamer.getLink('Download bed-file'), ' of all regions with 1 or more hits.</p>' print '<p>', regFileNamer.getLoadToHistoryLink('Download bed-file to History'), ' of all regions with 1 or more hits.</p>' print '<p>==============================================</p>' #with open(galaxyFn, 'w') as outFile: #print>>outFile, 'TargetBins=', targetBins, '<p>' #print >>outFile, selectedGenRegions, '<p>' ''' # Collect all target bins and data to plot: allTargetBins = allTargetBins + targetBins dataY = dataY + [ TrackIntersection.prepareDataForPlot(genome, targetBins) ] refSetName = i[len(i) - 1] allRefSetNames = allRefSetNames + [refSetName] # Print output to table: line = [refSetName] + [len(targetBins)] + [ regFileNamer.getLink('Download bed-file') ] + [ regFileNamer.getLoadToHistoryLink( 'Download bed-file to History') ] #print line, '<p>' htmlCore.tableLine(line) line = ['Total'] + [len(allTargetBins)] + [''] + [''] dataY = dataY + [ TrackIntersection.prepareDataForPlot(genome, allTargetBins) ] allRefSetNames = allRefSetNames + ['Total'] htmlCore.tableLine(line) htmlCore.tableFooter() htmlCore.divEnd() htmlCore.hideToggle(styleClass='debug') htmlCore.end() print htmlCore #print 'ALL Target Bins = ', allTargetBins, '<p>' #print 'dataY = ', dataY, '<p>' # Plot: if genome == 'hg19': chrNames = [ 'chr1', 'chr2', 'chr3', 'chr4', 'chr5', 'chr6', 'chr7', 'chr8', 'chr9', 'chr10', 'chr11', 'chr12', 'chr13', 'chr14', 'chr15', 'chr16', 'chr17', 'chr18', 'chr19', 'chr20', 'chr21', 'chr22', 'chrX', 'chrY' ] if genome == 'mm9': chrNames = [ 'chr1', 'chr2', 'chr3', 'chr4', 'chr5', 'chr6', 'chr7', 'chr8', 'chr9', 'chr10', 'chr11', 'chr12', 'chr13', 'chr14', 'chr15', 'chr16', 'chr17', 'chr18', 'chr19', 'chrX', 'chrY' ] titleText = 'Targets per Chromosome' dataX = [[dataY[i][j] for i in range(len(dataY))] for j in range(len(dataY[0]))] seriesType = ['column'] * len(dataX) categories = allRefSetNames yAxisTitle = 'Number of Targets' seriesName = chrNames shared = False legend = True xAxisRotation = 0 #print 'dataX = ', dataX, '<p>' htmlCore = HtmlCore() htmlCore.begin() title = 'Targets of ' + tfTrackName[-1] + ' TF track per chromosome' htmlCore.header(title) htmlCore.line('<a href="#" id="linkContainer1">Click to see plot</a>') htmlCore.divBegin(divId='plotDiv', style=' margin: 0 auto') htmlCore.line(vp.addJSlibs()) htmlCore.line(vp.useThemePlot()) htmlCore.line(vp.addJSlibsExport()) plot = vp.drawChart(dataX, type='column', legend=legend, height=600, xAxisRotation=xAxisRotation, seriesType=seriesType, seriesName=seriesName, shared=shared, titleText=titleText, overMouseAxisX=True, categories=categories, showChartClickOnLink=True) htmlCore.line(plot) htmlCore.divEnd() htmlCore.end() print htmlCore
def execute(choices, galaxyFn=None, username=''): ''' Is called when execute-button is pushed by web-user. Should print output as HTML to standard out, which will be directed to a results page in Galaxy history. If getOutputFormat is anything else than HTML, the output should be written to the file with path galaxyFn. If needed, StaticFile can be used to get a path where additional files can be put (e.g. generated image files). choices is a list of selections made by web-user in each options box. ''' genome = choices.genome targetTrack = ExternalTrackManager.getPreProcessedTrackFromGalaxyTN( genome, choices.targetTrack, printErrors=False, printProgress=False) refGSuite = getGSuiteFromGalaxyTN(choices.refTrackCollection) regSpec, binSpec = UserBinMixin.getRegsAndBinsSpec(choices) analysisBins = GalaxyInterface._getUserBinSource(regSpec, binSpec, genome=genome) results = TrackReportCommon.getOverlapResultsForTrackVsCollection( genome, targetTrack, refGSuite, analysisBins=analysisBins) processedResults = TrackReportCommon.processRawResults(results) targetTrackTitle = prettyPrintTrackName(targetTrack) title = 'Screening of track ' + targetTrackTitle sortedProcessedResultsTupleList = sorted( processedResults.iteritems(), key=lambda x: x[1][STAT_LIST_INDEX[STAT_FACTOR_OBSERVED_VS_EXPECTED ]], reverse=True) refTrackNames = [x[0] for x in sortedProcessedResultsTupleList] refTrackNames = [ x.replace('\'', '').replace('"', '') for x in refTrackNames ] plotData = [x[1] for x in sortedProcessedResultsTupleList] # plotData = zip(*plotData) #invert plotData = normalizeMatrixData(plotData) printVals = tuple([str(targetTrackTitle)]) + tuple( [str(x[0]) for x in sortedProcessedResultsTupleList[0:3]]) htmlCore = HtmlCore() htmlCore.begin() htmlCore.header(title) if choices.bmQid and choices.bmQid not in ['None']: htmlCore.append( str( quick.gsuite.GSuiteHbIntegration. getAnalysisQuestionInfoHtml(choices.bmQid))) htmlCore.divBegin('resultsDiv') htmlCore.paragraph(''' The query track <b>%s</b> overlaps most strongly (is most highly enriched) with the tracks <b>%s</b>, <b>%s</b> and <b>%s</b> from the selected collection. See below for a full (ranked) table of overlap and enrichment. ''' % printVals) htmlCore.paragraph(''' The coverage of the query track is %s bps. ''' % strWithNatLangFormatting( TrackReportCommon.getQueryTrackCoverageFromRawOverlapResults( results))) htmlCore.tableHeader(TrackReportCommon.HEADER_ROW, sortable=True, tableId='resultsTable') for refTrackName, refTrackResults in sortedProcessedResultsTupleList: line = [refTrackName ] + [strWithNatLangFormatting(x) for x in refTrackResults] htmlCore.tableLine(line) htmlCore.tableFooter() htmlCore.divEnd() ''' addColumnPlotToHtmlCore(htmlCore, refTrackNames, TrackReportCommon.HEADER_ROW[1:], 'stat', 'Results plot (data is normalized for better visual comparison) ', plotData, xAxisRotation = 315) ''' addPlotToHtmlCore( htmlCore, refTrackNames, TrackReportCommon.HEADER_ROW[1:], 'stat', 'Results plot (data is normalized for better visual comparison) ', plotData, xAxisRotation=315) htmlCore.hideToggle(styleClass='debug') htmlCore.end() print htmlCore