Пример #1
0
    def testGetTrackSubsetTS(self):
        subsetField1Value2 = FlatTracksTS()
        subsetField1Value2['B'] = self.t2
        subsetField1Value2['C'] = self.t3
        self._assertEqualTrackStructure(
            subsetField1Value2,
            self.flatTrackStructure.getTrackSubsetTS('field 1', 'value 2'))

        subsetField2val6 = FlatTracksTS()
        subsetField2val6['B'] = self.t2
        self._assertEqualTrackStructure(
            subsetField2val6,
            self.flatTrackStructure.getTrackSubsetTS('field 2', '6'))

        subsetField3None = FlatTracksTS()
        subsetField3None['C'] = self.t3
        self._assertEqualTrackStructure(
            subsetField3None,
            self.flatTrackStructure.getTrackSubsetTS('field 3', 'None'))

        empty = FlatTracksTS()
        self._assertEqualTrackStructure(
            empty,
            self.flatTrackStructure.getTrackSubsetTS('field does not exist',
                                                     'value'))
        self._assertEqualTrackStructure(
            empty,
            self.flatTrackStructure.getTrackSubsetTS('field 1',
                                                     'val does not exist'))
Пример #2
0
    def testGetSplittedByCategoryTS(self):
        splitByField1 = TrackStructureV2()
        field1value1 = FlatTracksTS()
        field1value2 = FlatTracksTS()
        splitByField1['value 1'] = field1value1
        splitByField1['value 1']['A'] = self.t1
        splitByField1['value 2'] = field1value2
        splitByField1['value 2']['B'] = self.t2
        splitByField1['value 2']['C'] = self.t3
        self._assertEqualTrackStructure(
            splitByField1,
            self.flatTrackStructure.getSplittedByCategoryTS('field 1'))

        splitByField2 = TrackStructureV2()
        field2val6 = FlatTracksTS()
        splitByField2['6'] = field2val6
        splitByField2['6']['B'] = self.t2
        self._assertEqualTrackStructure(
            splitByField2,
            self.flatTrackStructure.getSplittedByCategoryTS('field 2'))

        splitByField3 = TrackStructureV2()
        field3None = FlatTracksTS()
        splitByField3['None'] = field3None
        splitByField3['None']['C'] = self.t3
        self._assertEqualTrackStructure(
            splitByField3,
            self.flatTrackStructure.getSplittedByCategoryTS("field 3"))

        empty = TrackStructureV2()
        self._assertEqualTrackStructure(
            empty,
            self.flatTrackStructure.getSplittedByCategoryTS(
                'field does not exist'))
Пример #3
0
    def _buildTestTrees(self):
        #  inputTree      splitOnA         splitOnB           pairwise (A vs B)
        #    /  \             |              /   \              /  \
        #   A    B            C             D     E         t1_t2  t1_t3
        #   |   / \          /  \          /\     /\         / \    / \
        #   C   D   E       A    B        A  B   A  B       Q   R  Q   R
        #   |   |   |       |   / \       |  |   |  |       |   |  |   |
        #   t1  t2  t3      t1 D   E      C  t2  C  t3      t1  t2 t1  t2
        #                      |   |      |      |
        #                      t2  t3     t1     t1

        self.t1 = SingleTrackTS(Track(['t1']), {'field 1': 'value 1'})
        self.t2 = SingleTrackTS(Track(['t2']), {
            'field 1': 'value 2',
            'field 2': '6'
        })
        self.t3 = SingleTrackTS(Track(['t3']), {
            'field 1': 'value 2',
            'field 3': 'None'
        })

        self.inputTree = TrackStructureV2()
        self.inputTree['A'] = TrackStructureV2()
        self.inputTree['A']['C'] = self.t1
        self.inputTree['B'] = TrackStructureV2()
        self.inputTree['B']['D'] = self.t2
        self.inputTree['B']['E'] = self.t3

        # correct result of the input tree splitted on node A
        self.splittedOnNodeA = TrackStructureV2()
        self.splittedOnNodeA['C'] = TrackStructureV2()
        self.splittedOnNodeA['C']['A'] = self.t1
        self.splittedOnNodeA['C']['B'] = TrackStructureV2()
        self.splittedOnNodeA['C']['B']['D'] = self.t2
        self.splittedOnNodeA['C']['B']['E'] = self.t3

        # correct result of the input tree splitted on node B
        self.splittedOnNodeB = TrackStructureV2()
        self.splittedOnNodeB['D'] = TrackStructureV2()
        self.splittedOnNodeB['D']['A'] = TrackStructureV2()
        self.splittedOnNodeB['D']['A']['C'] = self.t1
        self.splittedOnNodeB['D']['B'] = self.t2
        self.splittedOnNodeB['E'] = TrackStructureV2()
        self.splittedOnNodeB['E']['A'] = TrackStructureV2()
        self.splittedOnNodeB['E']['A']['C'] = self.t1
        self.splittedOnNodeB['E']['B'] = self.t3

        self.pairwiseCombinations = TrackStructureV2()
        self.pairwiseCombinations["['t1']_['t2']"] = TrackStructureV2()
        self.pairwiseCombinations["['t1']_['t2']"]['query'] = self.t1
        self.pairwiseCombinations["['t1']_['t2']"]['reference'] = self.t2
        self.pairwiseCombinations["['t1']_['t3']"] = TrackStructureV2()
        self.pairwiseCombinations["['t1']_['t3']"]['query'] = self.t1
        self.pairwiseCombinations["['t1']_['t3']"]['reference'] = self.t3

        self.flatTrackStructure = FlatTracksTS()
        self.flatTrackStructure['A'] = self.t1
        self.flatTrackStructure['B'] = self.t2
        self.flatTrackStructure['C'] = self.t3
Пример #4
0
 def testGetFlattenedTS(self):
     getFlattenedTsResult = FlatTracksTS()
     # TODO Lonneke find better way for naming these
     getFlattenedTsResult["['t1']"] = self.t1
     getFlattenedTsResult["['t1'] (2)"] = self.t1
     getFlattenedTsResult["['t2']"] = self.t2
     getFlattenedTsResult["['t3']"] = self.t3
     self._assertEqualTrackStructure(getFlattenedTsResult,
                                     self.splittedOnNodeB.getFlattenedTS())
Пример #5
0
def getFlatTracksTS(genome, guiSelectedGSuite):
    ts = FlatTracksTS()
    gsuite = getGSuiteFromGalaxyTN(guiSelectedGSuite)

    for gsTrack in gsuite.allTracks():
        assert gsTrack.trackName is not None, "Gstrack name is None %s" % gsTrack
        track = PlainTrack(gsTrack.trackName)
        metadata = OrderedDict(title=gsTrack.title, genome=str(genome))
        metadata.update(gsTrack.attributes)
        assert track is not None
        assert metadata is not None
        ts[gsTrack.title] = SingleTrackTS(track, metadata)
    return ts
Пример #6
0
    def setUp(self):

        stsRef1 = SingleTrackTS(Mock(spec=Track), dict(title="trackA"))

        ts1 = FlatTracksTS()
        ts1["reference"] = stsRef1
        ts1.result = 0.5
        ts1["query"] = Mock(spec=SingleTrackTS)

        stsRef2 = SingleTrackTS(Mock(spec=Track), dict(title="trackB"))

        ts2 = FlatTracksTS()
        ts2["reference"] = stsRef2
        ts2.result = 1.2
        ts2["query"] = Mock(spec=SingleTrackTS)

        self.resultTS = TrackStructureV2()
        self.resultTS['0'] = ts1
        self.resultTS['1'] = ts2
Пример #7
0
class TestTrackStructure(unittest.TestCase):
    def _buildTestTrees(self):
        #  inputTree      splitOnA         splitOnB           pairwise (A vs B)
        #    /  \             |              /   \              /  \
        #   A    B            C             D     E         t1_t2  t1_t3
        #   |   / \          /  \          /\     /\         / \    / \
        #   C   D   E       A    B        A  B   A  B       Q   R  Q   R
        #   |   |   |       |   / \       |  |   |  |       |   |  |   |
        #   t1  t2  t3      t1 D   E      C  t2  C  t3      t1  t2 t1  t2
        #                      |   |      |      |
        #                      t2  t3     t1     t1

        self.t1 = SingleTrackTS(Track(['t1']), {'field 1': 'value 1'})
        self.t2 = SingleTrackTS(Track(['t2']), {
            'field 1': 'value 2',
            'field 2': '6'
        })
        self.t3 = SingleTrackTS(Track(['t3']), {
            'field 1': 'value 2',
            'field 3': 'None'
        })

        self.inputTree = TrackStructureV2()
        self.inputTree['A'] = TrackStructureV2()
        self.inputTree['A']['C'] = self.t1
        self.inputTree['B'] = TrackStructureV2()
        self.inputTree['B']['D'] = self.t2
        self.inputTree['B']['E'] = self.t3

        # correct result of the input tree splitted on node A
        self.splittedOnNodeA = TrackStructureV2()
        self.splittedOnNodeA['C'] = TrackStructureV2()
        self.splittedOnNodeA['C']['A'] = self.t1
        self.splittedOnNodeA['C']['B'] = TrackStructureV2()
        self.splittedOnNodeA['C']['B']['D'] = self.t2
        self.splittedOnNodeA['C']['B']['E'] = self.t3

        # correct result of the input tree splitted on node B
        self.splittedOnNodeB = TrackStructureV2()
        self.splittedOnNodeB['D'] = TrackStructureV2()
        self.splittedOnNodeB['D']['A'] = TrackStructureV2()
        self.splittedOnNodeB['D']['A']['C'] = self.t1
        self.splittedOnNodeB['D']['B'] = self.t2
        self.splittedOnNodeB['E'] = TrackStructureV2()
        self.splittedOnNodeB['E']['A'] = TrackStructureV2()
        self.splittedOnNodeB['E']['A']['C'] = self.t1
        self.splittedOnNodeB['E']['B'] = self.t3

        self.pairwiseCombinations = TrackStructureV2()
        self.pairwiseCombinations["['t1']_['t2']"] = TrackStructureV2()
        self.pairwiseCombinations["['t1']_['t2']"]['query'] = self.t1
        self.pairwiseCombinations["['t1']_['t2']"]['reference'] = self.t2
        self.pairwiseCombinations["['t1']_['t3']"] = TrackStructureV2()
        self.pairwiseCombinations["['t1']_['t3']"]['query'] = self.t1
        self.pairwiseCombinations["['t1']_['t3']"]['reference'] = self.t3

        self.flatTrackStructure = FlatTracksTS()
        self.flatTrackStructure['A'] = self.t1
        self.flatTrackStructure['B'] = self.t2
        self.flatTrackStructure['C'] = self.t3

    def setUp(self):
        self._buildTestTrees()

    def _assertEqualTrackStructure(self, correct, output):
        self.assertEqual(correct.keys(), output.keys())
        for key, value in correct.items():
            self._assertEqualTrackStructure(correct[key], output[key])
            self.assertIsInstance(output[key], correct[key].__class__)
            self.assertIsInstance(output, TrackStructureV2)
            if isinstance(correct[key], SingleTrackTS):
                self.assertEqual(correct[key], output[key])

    def testMakeTreeSegregatedByCategory(self):
        # test splitting on a node that has a single category
        singleCategoryOutput = self.inputTree.makeTreeSegregatedByCategory(
            self.inputTree['A'])
        self._assertEqualTrackStructure(singleCategoryOutput,
                                        self.splittedOnNodeA)

        # test splitting on a node that has multiple categories
        singleCategoryOutput = self.inputTree.makeTreeSegregatedByCategory(
            self.inputTree['B'])
        self._assertEqualTrackStructure(singleCategoryOutput,
                                        self.splittedOnNodeB)

        # test splitting on a node without categories (should return an error)
        with self.assertRaises(AssertionError):
            self.inputTree.makeTreeSegregatedByCategory(
                self.inputTree['A']['C'])

        # TODO lonneke test with root as input
        # should this return the same structure as the input?
        # should metadata be moved around?
        # should the new structure be different from input and have more levels?

    def testMakePairwiseCombinations(self):
        pairwiseOutput = self.inputTree['A'].makePairwiseCombinations(
            self.inputTree['B'])
        self.assertEqual(pairwiseOutput, self.pairwiseCombinations)

        # combination between empty TrackStructures should result in just an empty TrackStructure
        empty = TrackStructureV2()
        empty.makePairwiseCombinations(empty)
        self.assertEqual(empty.makePairwiseCombinations(empty), empty)

        # TODO Lonneke add more border cases?

    def testGetMetadataField(self):
        self.assertItemsEqual(('field 1', 'field 2', 'field 3'),
                              self.flatTrackStructure.getMetadataFields())

    def testGetAllValuesForMetadataField(self):
        self.assertItemsEqual((
            'value 1',
            'value 2',
        ), self.flatTrackStructure.getAllValuesForMetadataField('field 1'))
        self.assertItemsEqual(
            ('6', ),
            self.flatTrackStructure.getAllValuesForMetadataField('field 2'))
        self.assertItemsEqual(
            ('None', ),
            self.flatTrackStructure.getAllValuesForMetadataField('field 3'))

    def testGetFlattenedTS(self):
        getFlattenedTsResult = FlatTracksTS()
        # TODO Lonneke find better way for naming these
        getFlattenedTsResult["['t1']"] = self.t1
        getFlattenedTsResult["['t1'] (2)"] = self.t1
        getFlattenedTsResult["['t2']"] = self.t2
        getFlattenedTsResult["['t3']"] = self.t3
        self._assertEqualTrackStructure(getFlattenedTsResult,
                                        self.splittedOnNodeB.getFlattenedTS())

    def testGetSplittedByCategoryTS(self):
        splitByField1 = TrackStructureV2()
        field1value1 = FlatTracksTS()
        field1value2 = FlatTracksTS()
        splitByField1['value 1'] = field1value1
        splitByField1['value 1']['A'] = self.t1
        splitByField1['value 2'] = field1value2
        splitByField1['value 2']['B'] = self.t2
        splitByField1['value 2']['C'] = self.t3
        self._assertEqualTrackStructure(
            splitByField1,
            self.flatTrackStructure.getSplittedByCategoryTS('field 1'))

        splitByField2 = TrackStructureV2()
        field2val6 = FlatTracksTS()
        splitByField2['6'] = field2val6
        splitByField2['6']['B'] = self.t2
        self._assertEqualTrackStructure(
            splitByField2,
            self.flatTrackStructure.getSplittedByCategoryTS('field 2'))

        splitByField3 = TrackStructureV2()
        field3None = FlatTracksTS()
        splitByField3['None'] = field3None
        splitByField3['None']['C'] = self.t3
        self._assertEqualTrackStructure(
            splitByField3,
            self.flatTrackStructure.getSplittedByCategoryTS("field 3"))

        empty = TrackStructureV2()
        self._assertEqualTrackStructure(
            empty,
            self.flatTrackStructure.getSplittedByCategoryTS(
                'field does not exist'))

    def testGetTrackSubsetTS(self):
        subsetField1Value2 = FlatTracksTS()
        subsetField1Value2['B'] = self.t2
        subsetField1Value2['C'] = self.t3
        self._assertEqualTrackStructure(
            subsetField1Value2,
            self.flatTrackStructure.getTrackSubsetTS('field 1', 'value 2'))

        subsetField2val6 = FlatTracksTS()
        subsetField2val6['B'] = self.t2
        self._assertEqualTrackStructure(
            subsetField2val6,
            self.flatTrackStructure.getTrackSubsetTS('field 2', '6'))

        subsetField3None = FlatTracksTS()
        subsetField3None['C'] = self.t3
        self._assertEqualTrackStructure(
            subsetField3None,
            self.flatTrackStructure.getTrackSubsetTS('field 3', 'None'))

        empty = FlatTracksTS()
        self._assertEqualTrackStructure(
            empty,
            self.flatTrackStructure.getTrackSubsetTS('field does not exist',
                                                     'value'))
        self._assertEqualTrackStructure(
            empty,
            self.flatTrackStructure.getTrackSubsetTS('field 1',
                                                     'val does not exist'))

    def testIsPairedTs(self):
        self.assertTrue(
            self.pairwiseCombinations["['t1']_['t2']"].isPairedTs())
Пример #8
0
    #     the name of the tool.
    #     """

def create_track(file_name, trackName):
    from gtrackcore.core.Api import importFile
    importFile(file_name, genome="hg18", trackName=trackName)
    t = PlainTrack([trackName])
    single_track_ts = SingleTrackTS(t, {"title": trackName})
    return single_track_ts


if __name__ == "__main__":
    from gold.track.TrackStructure import SingleTrackTS, FlatTracksTS
    from gold.track.Track import PlainTrack
    track1 = create_track("testfile8.bed", "testfile8")
    track2 = create_track("testfile7.bed", "testfile7")


    #run_analysis("testfile.k")
    #t = PlainTrack(["test"])
    ts = FlatTracksTS()
    ts["test1"] = track1
    ts["test2"] = track2

    print(ts)

    analysisBins = UserBinSource("chr1", "*", genome="hg18")
    RandomizationGuiTool.run_on_extracted_variables(ts, analysisBins, 1, WITHIN_TRACKS_CATEGORY,
                                   PERMUTED_SEGS_AND_INTERSEGS_STR, galaxyFn="./testfile.gsuite", genome="hg18")

    def execute(cls, 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.
        '''
        import numpy
        numpy.seterr(all='raise')
        cls._setDebugModeIfSelected(choices)
        genome = choices.genome
        analysisQuestion = choices.analysisName
        similaryStatClassName = choices.similarityFunc if choices.similarityFunc else GSuiteStatUtils.T5_RATIO_OF_OBSERVED_TO_EXPECTED_OVERLAP
        summaryFunc = choices.summaryFunc if choices.summaryFunc else 'average'
        reverse = 'Yes' if choices.reversed else 'No'

        gsuite = getGSuiteFromGalaxyTN(choices.gsuite)
        analysisBins = UserBinMixin.getUserBinSource(choices)
        # tracks = [Track(x.trackName, trackTitle=x.title) for x in gsuite.allTracks()]
        trackTitles = CommonConstants.TRACK_TITLES_SEPARATOR.join(
            [quote(x.title, safe='') for x in gsuite.allTracks()])

        import quick.gsuite.GuiBasedTsFactory as factory
        ts = factory.getFlatTracksTS(genome=genome,
                                     guiSelectedGSuite=choices.gsuite)

        additionalResultsDict = OrderedDict()
        additionalAttributesDict = OrderedDict()
        if analysisQuestion in [cls.Q1, cls.Q2, cls.Q3]:
            additionalAttributesDict = cls.getSelectedAttributesForEachTrackDict(
                choices.additionalAttributes, gsuite)
            # additional analysis
            stats = [CountStat, CountElementStat]
            additionalResultsDict = runMultipleSingleValStatsOnTracks(
                ts, stats, analysisBins)

        if analysisQuestion == cls.Q1:
            analysisSpec = AnalysisSpec(MultitrackSummarizedInteractionV2Stat)
            analysisSpec.addParameter('multitrackSummaryFunc', 'raw')
            analysisSpec.addParameter(
                'pairwiseStatistic', GSuiteStatUtils.
                PAIRWISE_STAT_LABEL_TO_CLASS_MAPPING[similaryStatClassName])
            analysisSpec.addParameter(
                'summaryFunc',
                GSuiteStatUtils.SUMMARY_FUNCTIONS_MAPPER[summaryFunc])
            analysisSpec.addParameter('reverse', reverse)
            analysisSpec.addParameter('ascending', 'No')
            analysisSpec.addParameter('trackTitles', trackTitles)
            results = dictifyTSResult(
                doAnalysis(analysisSpec, analysisBins,
                           ts).getGlobalResult()['Result'])

            gsPerTrackResultsModel = GSuitePerTrackResultModel(
                results,
                ['Similarity to rest of tracks in suite (%s)' % summaryFunc],
                additionalResultsDict=additionalResultsDict,
                additionalAttributesDict=additionalAttributesDict)
            if choices.leadAttribute and choices.leadAttribute != GSuiteConstants.TITLE_COL:
                columnTitles, decoratedResultsDict = \
                    gsPerTrackResultsModel.generateColumnTitlesAndResultsDict(choices.leadAttribute)
            else:
                columnTitles, decoratedResultsDict = \
                    gsPerTrackResultsModel.generateColumnTitlesAndResultsDict()

            core = HtmlCore()
            core.begin()
            core.divBegin(divId='results-page')
            core.divBegin(divClass='results-section')
            core.header(analysisQuestion)
            topTrackTitle = results.keys()[0]
            core.paragraph('''
                The track "%s" is the most representative track of the GSuite with %s %s similarity to the rest of the tracks
                as measured by "%s" track similarity measure.
            ''' % (topTrackTitle, results[topTrackTitle], summaryFunc,
                   similaryStatClassName))

            addTableWithTabularAndGsuiteImportButtons(
                core,
                choices,
                galaxyFn,
                cls.Q1_SHORT,
                decoratedResultsDict,
                columnTitles,
                gsuite=gsuite,
                results=results,
                gsuiteAppendAttrs=['similarity_score'],
                sortable=True)

            # plot
            columnInd = 0
            if choices.leadAttribute and choices.leadAttribute != GSuiteConstants.TITLE_COL:
                columnInd = 1
            res = GSuiteTracksCoincidingWithQueryTrackTool.drawPlot(
                results,
                additionalResultsDict,
                'Similarity to rest of tracks in suite (%s)' % summaryFunc,
                columnInd=columnInd)
            core.line(res)
            core.divEnd()
            core.divEnd()
            core.end()

        # elif analysisQuestion == cls.Q2:
        #     analysisSpec = AnalysisSpec(GSuiteRepresentativenessOfTracksRankingsWrapperStat)
        #     analysisSpec.addParameter('pairwiseStatistic', GSuiteStatUtils.PAIRWISE_STAT_LABEL_TO_CLASS_MAPPING[similaryStatClassName])
        #     analysisSpec.addParameter('summaryFunc', GSuiteStatUtils.SUMMARY_FUNCTIONS_MAPPER[summaryFunc])
        #     analysisSpec.addParameter('reverse', reverse)
        #     analysisSpec.addParameter('ascending', 'Yes')
        #     analysisSpec.addParameter('trackTitles', trackTitles)
        #     results = doAnalysis(analysisSpec, analysisBins, tracks).getGlobalResult()
        #
        #     gsPerTrackResultsModel = GSuitePerTrackResultModel(
        #         results, ['Similarity to rest of tracks in suite (%s)' % summaryFunc],
        #         additionalResultsDict=additionalResultsDict,
        #         additionalAttributesDict=additionalAttributesDict)
        #     if choices.leadAttribute and choices.leadAttribute != GSuiteConstants.TITLE_COL:
        #         columnTitles, decoratedResultsDict = \
        #             gsPerTrackResultsModel.generateColumnTitlesAndResultsDict(choices.leadAttribute)
        #     else:
        #         columnTitles, decoratedResultsDict = \
        #             gsPerTrackResultsModel.generateColumnTitlesAndResultsDict()
        #
        #     core = HtmlCore()
        #     core.begin()
        #     core.divBegin(divId='results-page')
        #     core.divBegin(divClass='results-section')
        #     core.header(analysisQuestion)
        #     topTrackTitle = results.keys()[0]
        #     core.paragraph('''
        #         The track "%s" is the most atypical track of the GSuite with %s %s similarity to the rest of the tracks
        #         as measured by the "%s" track similarity measure.
        #     ''' % (topTrackTitle, strWithNatLangFormatting(results[topTrackTitle]), summaryFunc, similaryStatClassName))
        #     # core.tableFromDictionary(results, columnNames=['Track title', 'Similarity to rest of tracks in suite (' + summaryFunc+')'], sortable=False)
        #
        #     from quick.util import CommonFunctions
        #     rawDataURIList = CommonFunctions.getHyperlinksForRawTableData(
        #         dataDict=decoratedResultsDict, colNames=columnTitles,
        #         tableId="resultsTable", galaxyFn=galaxyFn)
        #     core.tableFromDictionary(decoratedResultsDict, columnNames=columnTitles, sortable=True,
        #                              tableId='resultsTable', addInstruction=True,
        #                              addRawDataSelectBox=True, rawDataURIList=rawDataURIList)
        #     # core.tableFromDictionary(decoratedResultsDict, columnNames=columnTitles, sortable=True, tableId='resultsTable')
        #
        #     columnInd = 0
        #     if choices.leadAttribute and choices.leadAttribute != GSuiteConstants.TITLE_COL:
        #         columnInd = 1
        #     res = GSuiteTracksCoincidingWithQueryTrackTool.drawPlot(
        #         results, additionalResultsDict,
        #         'Similarity to rest of tracks in suite (%s)' % summaryFunc,
        #         columnInd=columnInd)
        #     core.line(res)
        #     core.divEnd()
        #     core.divEnd()
        #     core.end()
        #
        #     if choices.addResults == 'Yes':
        #         GSuiteStatUtils.addResultsToInputGSuite(
        #             gsuite, results, ['Similarity_score'],
        #             cls.extraGalaxyFn[GSUITE_EXPANDED_WITH_RESULT_COLUMNS_FILENAME])
        elif analysisQuestion == cls.Q3:

            q2TS = TrackStructureV2()
            randTvProvider = cls.createTrackViewProvider(
                choices, ts, analysisBins, genome)
            localAnalysis = randTvProvider.supportsLocalAnalysis()
            tsRand = getRandomizedVersionOfTs(ts, randTvProvider)

            for key in ts.keys():
                realTS = TrackStructureV2()
                realTS['query'] = ts[key]
                realTS['reference'] = FlatTracksTS(
                    dict([(refKey, refSTS)
                          for refKey, refSTS in ts.iteritems()
                          if refKey != key]))
                randTS = TrackStructureV2()
                randTS['query'] = tsRand[key]
                randTS['reference'] = FlatTracksTS([
                    (refKey, refSTS) for refKey, refSTS in tsRand.iteritems()
                    if refKey != key
                ])
                hypothesisTS = TrackStructureV2()
                hypothesisTS['real'] = realTS
                hypothesisTS['rand'] = randTS
                q2TS[key] = hypothesisTS

            mcfdrDepth = choices.mcfdrDepth if choices.mcfdrDepth else \
                AnalysisDefHandler(REPLACE_TEMPLATES['$MCFDRv5$']).getOptionsAsText().values()[0][0]
            analysisDefString = REPLACE_TEMPLATES[
                '$MCFDRv5$'] + ' -> ' + ' -> MultipleRandomizationManagerStat'
            analysisSpec = AnalysisDefHandler(analysisDefString)
            analysisSpec.setChoice('MCFDR sampling depth', mcfdrDepth)
            analysisSpec.addParameter(
                'rawStatistic',
                SummarizedInteractionWithOtherTracksV2Stat.__name__)
            analysisSpec.addParameter(
                'pairwiseStatistic', GSuiteStatUtils.
                PAIRWISE_STAT_LABEL_TO_CLASS_MAPPING[similaryStatClassName])
            analysisSpec.addParameter(
                'summaryFunc',
                GSuiteStatUtils.SUMMARY_FUNCTIONS_MAPPER[summaryFunc])
            analysisSpec.addParameter('multitrackSummaryFunc', 'raw')
            analysisSpec.addParameter('tail', 'right-tail')
            analysisSpec.addParameter('evaluatorFunc',
                                      'evaluatePvalueAndNullDistribution')
            analysisSpec.addParameter('runLocalAnalysis',
                                      'Yes' if localAnalysis else 'No')

            results = doAnalysis(analysisSpec, analysisBins,
                                 q2TS).getGlobalResult()
            resultsTuples = []
            for key, res in results['Result'].iteritems():
                curRes = res.getResult()
                curPval = curRes['P-value']
                curTestStat = curRes[
                    'TSMC_' +
                    SummarizedInteractionWithOtherTracksV2Stat.__name__]
                resultsTuples.append((key, [curTestStat, curPval]))
            resultsDict = OrderedDict(
                sorted(resultsTuples,
                       key=lambda t: (-t[1][1], t[1][0]),
                       reverse=True))
            core = HtmlCore()
            gsPerTrackResultsModel = GSuitePerTrackResultModel(
                resultsDict, [
                    'Similarity to rest of tracks in suite (%s)' % summaryFunc,
                    'P-value'
                ],
                additionalResultsDict=additionalResultsDict,
                additionalAttributesDict=additionalAttributesDict)
            if choices.leadAttribute and choices.leadAttribute != GSuiteConstants.TITLE_COL:
                columnTitles, decoratedResultsDict = \
                    gsPerTrackResultsModel.generateColumnTitlesAndResultsDict(choices.leadAttribute)
            else:
                columnTitles, decoratedResultsDict = \
                    gsPerTrackResultsModel.generateColumnTitlesAndResultsDict()

            core.begin()
            core.divBegin(divId='results-page')
            core.divBegin(divClass='results-section')
            core.header(analysisQuestion)
            topTrackTitle = resultsDict.keys()[0]
            core.paragraph('''
                The track "%s" has the lowest P-value of %s corresponding to %s %s similarity to the rest of the tracks
                as measured by "%s" track similarity measure.
            ''' % (topTrackTitle,
                   strWithNatLangFormatting(resultsDict[topTrackTitle][1]),
                   strWithNatLangFormatting(resultsDict[topTrackTitle][0]),
                   summaryFunc, similaryStatClassName))
            # core.tableFromDictionary(results, columnNames=['Track title', 'Similarity to rest of tracks in suite (' + summaryFunc+')', 'P-value'], sortable=False)

            addTableWithTabularAndGsuiteImportButtons(
                core,
                choices,
                galaxyFn,
                cls.Q3_SHORT,
                decoratedResultsDict,
                columnTitles,
                gsuite=gsuite,
                results=resultsDict,
                gsuiteAppendAttrs=['similarity_score', 'p_value'],
                sortable=True)

            core.divEnd()
            core.divEnd()
            core.end()
        else:  # Q4
            # mcfdrDepth = choices.mcfdrDepth if choices.mcfdrDepth else \
            #     AnalysisDefHandler(REPLACE_TEMPLATES['$MCFDR$']).getOptionsAsText().values()[0][0]
            # analysisDefString = REPLACE_TEMPLATES['$MCFDRv3$'] + ' -> CollectionSimilarityHypothesisWrapperStat'
            # analysisSpec = AnalysisDefHandler(analysisDefString)
            # analysisSpec.setChoice('MCFDR sampling depth', mcfdrDepth)
            # analysisSpec.addParameter('assumptions', 'PermutedSegsAndIntersegsTrack')
            # analysisSpec.addParameter('rawStatistic', 'MultitrackSummarizedInteractionV2Stat')
            # analysisSpec.addParameter('pairwiseStatistic', GSuiteStatUtils.PAIRWISE_STAT_LABEL_TO_CLASS_MAPPING[similaryStatClassName])
            # analysisSpec.addParameter('summaryFunc', GSuiteStatUtils.SUMMARY_FUNCTIONS_MAPPER[summaryFunc])
            # analysisSpec.addParameter('multitrackSummaryFunc', 'avg')  # should it be a choice?
            # analysisSpec.addParameter('tail', 'right-tail')
            # results = doAnalysis(analysisSpec, analysisBins, tracks).getGlobalResult()

            mcfdrDepth = choices.mcfdrDepth if choices.mcfdrDepth else \
                AnalysisDefHandler(REPLACE_TEMPLATES['$MCFDRv4$']).getOptionsAsText().values()[0][0]
            analysisDefString = REPLACE_TEMPLATES[
                '$MCFDRv4$'] + ' -> RandomizationManagerV3Stat'
            analysisSpec = AnalysisDefHandler(analysisDefString)
            analysisSpec.setChoice('MCFDR sampling depth', mcfdrDepth)
            analysisSpec.addParameter('rawStatistic',
                                      'MultitrackSummarizedInteractionV2Stat')
            analysisSpec.addParameter(
                'pairwiseStatistic', GSuiteStatUtils.
                PAIRWISE_STAT_LABEL_TO_CLASS_MAPPING[similaryStatClassName]
            )  # needed for call of non randomized stat for assertion
            analysisSpec.addParameter(
                'summaryFunc',
                GSuiteStatUtils.SUMMARY_FUNCTIONS_MAPPER[summaryFunc])
            analysisSpec.addParameter('multitrackSummaryFunc',
                                      'avg')  # should it be a choice?
            analysisSpec.addParameter('tail', 'right-tail')
            analysisSpec.addParameter(
                'tvProviderClass',
                getClassName(
                    createTrackViewProvider(choices.randType,
                                            choices.randAlg)))
            results = doAnalysis(analysisSpec, analysisBins,
                                 ts).getGlobalResult()

            pval = results['P-value']
            observed = results['TSMC_MultitrackSummarizedInteractionV2Stat']
            significanceLevel = 'strong' if pval < 0.01 else (
                'weak' if pval < 0.05 else 'no')
            core = HtmlCore()
            core.begin()
            core.divBegin(divId='results-page')
            core.divBegin(divClass='results-section')
            core.header(analysisQuestion)
            core.paragraph('''
                The tracks in the suite show %s significance in their collective similarity
                (average similarity of a track to the rest) of %s
                and corresponding p-value of %s,
                as measured by "%s" track similarity measure.
            ''' % (significanceLevel, strWithNatLangFormatting(observed),
                   strWithNatLangFormatting(pval), similaryStatClassName))
            core.divEnd()
            core.divEnd()
            core.end()

        print str(core)
Пример #10
0
class MockTrack(Track):
    def __new__(cls, *args):
        return object.__new__(cls)

    def __init__(self, name):
        object.__init__(self)
        self.trackName = [
            name
        ]  #because needed by hash in makeTreeSegregatedByCategory
        self.trackTitle = name


q = SingleTrackTS(MockTrack('t1'), OrderedDict(title='t1', cat='q'))

flat = FlatTracksTS()
flat['t2'] = SingleTrackTS(MockTrack('t2'), OrderedDict(title='t2', cat='C1'))
flat['t3'] = SingleTrackTS(MockTrack('t3'), OrderedDict(title='t3', cat='C1'))
flat['t4'] = SingleTrackTS(MockTrack('t4'), OrderedDict(title='t4', cat='C2'))

r = flat.getSplittedByCategoryTS('cat')

orig = TrackStructureV2()
orig['q'] = q
orig['r'] = r


def allInOne():
    print 'Orig: ', orig
    rerooted = orig.makeTreeSegregatedByCategory(orig['r'])
    print 'Rerooted: ', rerooted