예제 #1
0
def plainRun(analysisDef, genome, track1Fn, track2Fn):
    '''
    Currently under development, not yet functioning.
    Note that file names (track1Fn, track2Fn) must either be a valid .dat-file from a Galaxy system,
      or be located in a path where the two deepest levels are numerical values above 1000, and unique between different runs by this tool'''
    #GalaxyInterface.runManual(trackNames, analysisDef, regSpec, binSpec, genome, galaxyFn=None, trackNameIntensity=None, username='', \
    #printResults=True, printProgress=True, printHtmlWarningMsgs=True, applyBoundaryFilter=False, printRunDescription=True, **kwArgs):

    from quick.application.ExternalTrackManager import ExternalTrackManager

    #fixme: is this correct?
    assert all(
        idPart > 1000
        for idPart in ExternalTrackManager.extractIdFromGalaxyFn(track1Fn))
    tn1 = ExternalTrackManager.constructGalaxyTnFromSuitedFn(track1Fn)
    assert all(
        idPart > 1000
        for idPart in ExternalTrackManager.extractIdFromGalaxyFn(track2Fn))
    tn2 = ExternalTrackManager.constructGalaxyTnFromSuitedFn(track2Fn)

    from quick.application.GalaxyInterface import GalaxyInterface
    userBinSource = GalaxyInterface._getUserBinSource('chrs', '*', genome, tn1,
                                                      tn2)

    from gold.application.StatRunner import AnalysisDefJob
    job = AnalysisDefJob(analysisDef, tn1, tn2, userBinSource)
    result = job.run(printProgress=False)
    return result
    def testCreateIntensityTrack(self):
        regions = [GenomeRegion(self._genome, self._chr, 1000, 5000),\
                   GenomeRegion(self._genome, self._chr, 6000, 7000),\
                   GenomeRegion(self._genome, self._chr, 10000, 16000)]
        job = AnalysisDefJob('[dataStat=SimpleBpIntensityStat] [outTrackName=' + '^'.join(self._trackName) + '] [numDiscreteVals=10] -> CreateFunctionTrackStat', \
                              ['nums'], ['points'], regions, genome=self._genome)
        for x in range(2):
            job.run()

        brShelve = BoundingRegionShelve(self._genome,
                                        self._trackName,
                                        allowOverlaps=False)
        self.assertRaises(OutsideBoundingRegionError, \
                          brShelve.getBoundingRegionInfo, GenomeRegion(self._genome, self._chr, 0, 1))
        #self.assertEquals(BoundingRegionInfo(0, 1, 0, 0, 0, 0),
        #                  brShelve.getBoundingRegionInfo(GenomeRegion(self._genome, self._chr, 0, 1)))
        self.assertEquals(
            BoundingRegionInfo(1000, 5000, 0, 4000, 0, 0),
            brShelve.getBoundingRegionInfo(
                GenomeRegion(self._genome, self._chr, 2000, 2001)))
        self.assertRaises(OutsideBoundingRegionError, \
                          brShelve.getBoundingRegionInfo, GenomeRegion(self._genome, self._chr, 5500, 5501))
        #self.assertEquals(BoundingRegionInfo(5500, 5501, 0, 0, 0, 0),
        #                  brShelve.getBoundingRegionInfo(GenomeRegion(self._genome, self._chr, 5500, 5501)))
        self.assertEquals(
            BoundingRegionInfo(6000, 7000, 4000, 5000, 0, 0),
            brShelve.getBoundingRegionInfo(
                GenomeRegion(self._genome, self._chr, 6500, 6501)))
        self.assertRaises(OutsideBoundingRegionError, \
                          brShelve.getBoundingRegionInfo, GenomeRegion(self._genome, self._chr, 8000, 8001))
        #self.assertEquals(BoundingRegionInfo(8000, 8001, 0, 0, 0, 0),
        #                  brShelve.getBoundingRegionInfo(GenomeRegion(self._genome, self._chr, 8000, 8001)))
        self.assertEquals(
            BoundingRegionInfo(10000, 16000, 5000, 11000, 0, 0),
            brShelve.getBoundingRegionInfo(
                GenomeRegion(self._genome, self._chr, 11000, 11001)))
        self.assertRaises(OutsideBoundingRegionError, \
                          brShelve.getBoundingRegionInfo, GenomeRegion(self._genome, self._chr, 16500, 16501))
        #self.assertEquals(BoundingRegionInfo(16500, 16501, 0, 0, 0, 0),
        #                  brShelve.getBoundingRegionInfo(GenomeRegion(self._genome, self._chr, 16500, 16501)))

        trackData = TrackSource().getTrackData(self._trackName, self._genome,
                                               None, False)
        self.assertListsOrDicts(['val'], trackData.keys())
        self.assertListsOrDicts((11000, ), trackData['val'].shape)
예제 #3
0
 def doAnalysisFromDefTwo(cls, tracks, analysisDef, regSpec, binSpec,
                          genome, flag):
     userBinSource = UserBinSource(regSpec, binSpec, genome)
     job = AnalysisDefJob(analysisDef.getDefAfterChoices(),
                          tracks[0].trackName,
                          tracks[1].trackName,
                          userBinSource,
                          galaxyFn=None)
     result = job.run()
     unorderedResults = [(str(key), result[key])
                         for key in result.getAllRegionKeys()]
     return list(cls.sortDictionaries(unorderedResults, flag))
예제 #4
0
def doAnalysis(analysisSpec, analysisBins, tracks):
    '''Performs an analysis,
    as specified by analysisSpec object,
    in each bin specified by analysisBins,
    on data sets specified in tracks.

    Typical usage:
    analysisSpec = AnalysisSpec(AvgSegLenStat)
    analysisSpec.addParameter("withOverlaps","no")
    analysisBins = GlobalBinSource('hg18')
    tracks = [ Track(['Genes and gene subsets','Genes','Refseq']) ]
    results = doAnalysis(analysisSpec, analysisBins, tracks)
    '''

    # TODO: handle multiple tracks analysis
    # assert len(tracks) in [1,2] #for now..
    # in an API setting, exceptions should not generally be hidden.
    # Maybe this should be optional.
    # setupDebugModeAndLogging()
    silenceRWarnings()
    silenceNumpyWarnings()

    if len(tracks) > 2:
        from gold.util.CommonConstants import MULTIPLE_EXTRA_TRACKS_SEPARATOR
        analysisSpec.addParameter(
            'extraTracks',
            MULTIPLE_EXTRA_TRACKS_SEPARATOR.join([
                '^'.join([quote(part) for part in x.trackName])
                for x in tracks[2:]
            ]))
    job = AnalysisDefJob(analysisSpec.getDefAfterChoices(),
                         tracks[0].trackName,
                         tracks[1].trackName if len(tracks) > 1 else None,
                         analysisBins,
                         galaxyFn=None)
    res = job.run(printProgress=False)  # printProgress should be optional?
    return res