Example #1
0
    def test_FluxfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag= ft.fitData()
        if flag!=None:
            resultFitFwhm=ResultFit(
                ambientTemp='20.1', 
                ftName='UNK',
                extrFitPos=min_focpos_fwhm, 
                extrFitVal=val_fwhm, 
                fitPar=par,
                fitFlag=flag,
                color='blue',
                ylabel='FWHM [px]: blue',
                titleResult='fwhm:{0:5d}'.format(int(min_focpos_fwhm))
                )

            fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
            fd.fitDisplay(dataFit=self.dataFitFwhm, resultFit=resultFitFwhm, xdisplay=False)

        x=np.array([p for p in self.dataFitFlux.pos])
        y=np.array([v for v in self.dataFitFlux.val])
        wmean= np.average(a=x, weights=y) 
        xy= zip(x,y)
        wstd = np.std(a=xy) 
        # scale the values [a.u.]
        sv = [max(self.dataFitFwhm.val) / max(self.dataFitFlux.val) * z for z in self.dataFitFlux.val]
        self.dataFitFlux.val=sv

        # gaussian
        self.parFlux= np.array([ 10., wmean, wstd/4., 2.])
        ft = FitFunction(dataFit=self.dataFitFlux, logger=logger)
        max_focpos_flux, val_flux, par, flag= ft.fitData()
        if flag!=None:
            resultFitFlux=ResultFit(
                ambientTemp='20.1', 
                ftName='UNK',
                extrFitPos=max_focpos_flux, 
                extrFitVal=val_flux, 
                fitPar=par,
                fitFlag=flag,
                color='red',
                ylabel='FWHM [px]: blue, Flux [a.u.]:red',
                titleResult='fwhm:{0:5d}, flux: {1:5d}'.format(int(resultFitFwhm.extrFitPos), int(max_focpos_flux))
                )

            fd.fitDisplay(dataFit=self.dataFitFlux, resultFit=resultFitFlux, xdisplay=False)
    def test_FwhmfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag = ft.fitData()

        resultFitFwhm = ResultFit(ambientTemp='20.1',
                                  ftName='UNK',
                                  extrFitPos=min_focpos_fwhm,
                                  extrFitVal=val_fwhm,
                                  fitPar=par,
                                  fitFlag=flag,
                                  color='blue',
                                  ylabel='FWHM [px]: blue',
                                  titleResult='fwhm:{0:5d}'.format(
                                      int(min_focpos_fwhm)))

        self.fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
        self.fd.fitDisplay(dataFit=self.dataFitFwhm,
                           resultFit=resultFitFwhm,
                           xdisplay=False)
Example #3
0
    def display(self):
        """Plot data, fitted function for FWHM and optionally flux.

        """

        # plot them through ds9 in parallel to the fit
        ds9DisplayThread = None
        if self.Ds9Display and self.xdisplay:
            # start thread 
            ds9DisplayThread = Ds9DisplayThread(debug=self.debug, dataSxtr=self.dataSxtr, logger= self.logger)
            ds9DisplayThread.start()

        elif self.Ds9Display and not self.xdisplay:
            self.logger.warn('analyze: OOOOOOOOPS, no ds9 display available')

        
        if self.dataSxtr[0].assocFn is not None:
            ft=FitDisplay(date = self.date, comment='ASSOC', logger=self.logger)
        else:
            ft=FitDisplay(date = self.date, logger=self.logger)

        if self.i_flux is None:
            ft.fitDisplay(dataFit=self.dataFitFwhm, resultFit=self.resultFitFwhm, display=self.FitDisplay, xdisplay = self.xdisplay)
        else:
            # plot FWHM but don't show
            ft.fitDisplay(dataFit=self.dataFitFwhm, resultFit=self.resultFitFwhm, show=False, display=self.FitDisplay, xdisplay = self.xdisplay)
            ft.fitDisplay(dataFit=self.dataFitFlux, resultFit=self.resultFitFlux, display=self.FitDisplay, xdisplay = self.xdisplay)
        # very important (otherwise all plots show up in next show())
        ft.ax1=None
        # http://stackoverflow.com/questions/741877/how-do-i-tell-matplotlib-that-i-am-done-with-a-plot
        ft.fig.clf()
        ft.fig=None
        ft=None
        # stop ds9 display thread
        if self.Ds9Display and self.xdisplay:
            ds9DisplayThread.join(timeout=1.)
    def test_FluxfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag = ft.fitData()
        if flag != None:
            resultFitFwhm = ResultFit(ambientTemp='20.1',
                                      ftName='UNK',
                                      extrFitPos=min_focpos_fwhm,
                                      extrFitVal=val_fwhm,
                                      fitPar=par,
                                      fitFlag=flag,
                                      color='blue',
                                      ylabel='FWHM [px]: blue',
                                      titleResult='fwhm:{0:5d}'.format(
                                          int(min_focpos_fwhm)))

            fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
            fd.fitDisplay(dataFit=self.dataFitFwhm,
                          resultFit=resultFitFwhm,
                          xdisplay=False)

        x = np.array([p for p in self.dataFitFlux.pos])
        y = np.array([v for v in self.dataFitFlux.val])
        wmean = np.average(a=x, weights=y)
        xy = zip(x, y)
        wstd = np.std(a=xy)
        # scale the values [a.u.]
        sv = [
            max(self.dataFitFwhm.val) / max(self.dataFitFlux.val) * z
            for z in self.dataFitFlux.val
        ]
        self.dataFitFlux.val = sv

        # gaussian
        self.parFlux = np.array([10., wmean, wstd / 4., 2.])
        ft = FitFunction(dataFit=self.dataFitFlux, logger=logger)
        max_focpos_flux, val_flux, par, flag = ft.fitData()
        if flag != None:
            resultFitFlux = ResultFit(
                ambientTemp='20.1',
                ftName='UNK',
                extrFitPos=max_focpos_flux,
                extrFitVal=val_flux,
                fitPar=par,
                fitFlag=flag,
                color='red',
                ylabel='FWHM [px]: blue, Flux [a.u.]:red',
                titleResult='fwhm:{0:5d}, flux: {1:5d}'.format(
                    int(resultFitFwhm.extrFitPos), int(max_focpos_flux)))

            fd.fitDisplay(dataFit=self.dataFitFlux,
                          resultFit=resultFitFlux,
                          xdisplay=False)
Example #5
0
    def test_FwhmfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag= ft.fitData()

        resultFitFwhm=ResultFit(
            ambientTemp='20.1', 
            ftName='UNK',
            extrFitPos=min_focpos_fwhm, 
            extrFitVal=val_fwhm, 
            fitPar=par,
            fitFlag=flag,
            color='blue',
            ylabel='FWHM [px]: blue',
            titleResult='fwhm:{0:5d}'.format(int(min_focpos_fwhm))
            )

        self.fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
        self.fd.fitDisplay(dataFit=self.dataFitFwhm, resultFit=resultFitFwhm, xdisplay=False)
Example #6
0
class TestFitDisplay(unittest.TestCase):

    def tearDown(self):
        try:
            os.unlink(self.plotFnIn)
        except:
            pass

    def setUp(self):
        from rts2saf.data import DataFitFwhm, DataFitFlux, DataSxtr

        pos       = np.asarray([ 2000., 2100., 2200., 2300., 2400., 2500., 2600., 2700., 2800., 2900., 3000.])
        fwhm      = np.asarray([   40.,   30.,   20.,   15.,   10.,    5.,   10.,   15.,   20.,   30.,   40.])
        stdFocPos = np.asarray([   20.,   20.,   20.,   20.,   20.,   20.,   20.,   20.,   20.,   20.,   20.])
        stdFwhm   = np.asarray([    2.,    2.,    2.,    2.,    2.,    2.,    2.,    2.,    2.,    2.,    2.])
        flux      = np.asarray([   2.2,   3.1,   4.8,   7.9,   10.1, 11.2,  11.1,   8.2,  5.4,   3.2,    2.2])
        stdFlux   = np.asarray([  0.5,    0.5,   0.5,   0.5,   0.5,   0.5,   0.5,   0.5,   0.5,   0.5,   0.5])

        dataSxtr=list()
        for i in range( 0, len(pos)-1):
            dataSxtr.append(
                DataSxtr(
                    focPos=pos[i],
                    stdFocPos=stdFocPos[i],
                    fwhm=fwhm[i],
                    stdFwhm=stdFwhm[i],
                    flux=flux[i],
                    stdFlux=stdFlux[i],
                    catalog=[1, 2, 3]
                    )
                )
        self.plotFnIn='./test-plot.png'
        self.date = '2013-09-08T09:30:09'

        self.dataFitFwhm=DataFitFwhm(
            dataSxtr=dataSxtr,
            ambientTemp='21.3',
            plotFn= self.plotFnIn)


        self.dataFitFlux=DataFitFlux(
            dataSxtr=dataSxtr,
            dataFitFwhm=self.dataFitFwhm,
            ambientTemp='21.3',
            plotFn= self.plotFnIn)
        
    #@unittest.skip('feature not yet implemented')
    def test_FwhmfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag= ft.fitData()

        resultFitFwhm=ResultFit(
            ambientTemp='20.1', 
            ftName='UNK',
            extrFitPos=min_focpos_fwhm, 
            extrFitVal=val_fwhm, 
            fitPar=par,
            fitFlag=flag,
            color='blue',
            ylabel='FWHM [px]: blue',
            titleResult='fwhm:{0:5d}'.format(int(min_focpos_fwhm))
            )

        self.fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
        self.fd.fitDisplay(dataFit=self.dataFitFwhm, resultFit=resultFitFwhm, xdisplay=False)

    #@unittest.skip('feature not yet implemented')
    def test_FluxfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag= ft.fitData()
        if flag!=None:
            resultFitFwhm=ResultFit(
                ambientTemp='20.1', 
                ftName='UNK',
                extrFitPos=min_focpos_fwhm, 
                extrFitVal=val_fwhm, 
                fitPar=par,
                fitFlag=flag,
                color='blue',
                ylabel='FWHM [px]: blue',
                titleResult='fwhm:{0:5d}'.format(int(min_focpos_fwhm))
                )

            fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
            fd.fitDisplay(dataFit=self.dataFitFwhm, resultFit=resultFitFwhm, xdisplay=False)

        x=np.array([p for p in self.dataFitFlux.pos])
        y=np.array([v for v in self.dataFitFlux.val])
        wmean= np.average(a=x, weights=y) 
        xy= zip(x,y)
        wstd = np.std(a=xy) 
        # scale the values [a.u.]
        sv = [max(self.dataFitFwhm.val) / max(self.dataFitFlux.val) * z for z in self.dataFitFlux.val]
        self.dataFitFlux.val=sv

        # gaussian
        self.parFlux= np.array([ 10., wmean, wstd/4., 2.])
        ft = FitFunction(dataFit=self.dataFitFlux, logger=logger)
        max_focpos_flux, val_flux, par, flag= ft.fitData()
        if flag!=None:
            resultFitFlux=ResultFit(
                ambientTemp='20.1', 
                ftName='UNK',
                extrFitPos=max_focpos_flux, 
                extrFitVal=val_flux, 
                fitPar=par,
                fitFlag=flag,
                color='red',
                ylabel='FWHM [px]: blue, Flux [a.u.]:red',
                titleResult='fwhm:{0:5d}, flux: {1:5d}'.format(int(resultFitFwhm.extrFitPos), int(max_focpos_flux))
                )

            fd.fitDisplay(dataFit=self.dataFitFlux, resultFit=resultFitFlux, xdisplay=False)
Example #7
0
    def display(self):
        """Plot data, fitted function for FWHM and optionally flux.

        """

        # plot them through ds9 in parallel to the fit
        ds9DisplayThread = None
        if self.Ds9Display and self.xdisplay:
            # start thread
            ds9DisplayThread = Ds9DisplayThread(debug=self.debug,
                                                dataSxtr=self.dataSxtr,
                                                logger=self.logger)
            ds9DisplayThread.start()

        elif self.Ds9Display and not self.xdisplay:
            self.logger.warn('analyze: OOOOOOOOPS, no ds9 display available')

        if self.dataSxtr[0].assocFn is not None:
            ft = FitDisplay(date=self.date,
                            comment='ASSOC',
                            logger=self.logger)
        else:
            ft = FitDisplay(date=self.date, logger=self.logger)

        if self.i_flux is None:
            ft.fitDisplay(dataFit=self.dataFitFwhm,
                          resultFit=self.resultFitFwhm,
                          display=self.FitDisplay,
                          xdisplay=self.xdisplay)
        else:
            # plot FWHM but don't show
            ft.fitDisplay(dataFit=self.dataFitFwhm,
                          resultFit=self.resultFitFwhm,
                          show=False,
                          display=self.FitDisplay,
                          xdisplay=self.xdisplay)
            ft.fitDisplay(dataFit=self.dataFitFlux,
                          resultFit=self.resultFitFlux,
                          display=self.FitDisplay,
                          xdisplay=self.xdisplay)
        # very important (otherwise all plots show up in next show())
        ft.ax1 = None
        # http://stackoverflow.com/questions/741877/how-do-i-tell-matplotlib-that-i-am-done-with-a-plot
        ft.fig.clf()
        ft.fig = None
        ft = None
        # stop ds9 display thread
        if self.Ds9Display and self.xdisplay:
            ds9DisplayThread.join(timeout=1.)
class TestFitDisplay(unittest.TestCase):
    def tearDown(self):
        try:
            os.unlink(self.plotFnIn)
        except:
            pass

    def setUp(self):
        from rts2saf.data import DataFitFwhm, DataFitFlux, DataSxtr

        pos = np.asarray([
            2000., 2100., 2200., 2300., 2400., 2500., 2600., 2700., 2800.,
            2900., 3000.
        ])
        fwhm = np.asarray(
            [40., 30., 20., 15., 10., 5., 10., 15., 20., 30., 40.])
        stdFocPos = np.asarray(
            [20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20.])
        stdFwhm = np.asarray([2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.])
        flux = np.asarray(
            [2.2, 3.1, 4.8, 7.9, 10.1, 11.2, 11.1, 8.2, 5.4, 3.2, 2.2])
        stdFlux = np.asarray(
            [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5])

        dataSxtr = list()
        for i in range(0, len(pos) - 1):
            dataSxtr.append(
                DataSxtr(focPos=pos[i],
                         stdFocPos=stdFocPos[i],
                         fwhm=fwhm[i],
                         stdFwhm=stdFwhm[i],
                         flux=flux[i],
                         stdFlux=stdFlux[i],
                         catalog=[1, 2, 3]))
        self.plotFnIn = './test-plot.png'
        self.date = '2013-09-08T09:30:09'

        self.dataFitFwhm = DataFitFwhm(dataSxtr=dataSxtr,
                                       ambientTemp='21.3',
                                       plotFn=self.plotFnIn)

        self.dataFitFlux = DataFitFlux(dataSxtr=dataSxtr,
                                       dataFitFwhm=self.dataFitFwhm,
                                       ambientTemp='21.3',
                                       plotFn=self.plotFnIn)

    #@unittest.skip('feature not yet implemented')
    def test_FwhmfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag = ft.fitData()

        resultFitFwhm = ResultFit(ambientTemp='20.1',
                                  ftName='UNK',
                                  extrFitPos=min_focpos_fwhm,
                                  extrFitVal=val_fwhm,
                                  fitPar=par,
                                  fitFlag=flag,
                                  color='blue',
                                  ylabel='FWHM [px]: blue',
                                  titleResult='fwhm:{0:5d}'.format(
                                      int(min_focpos_fwhm)))

        self.fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
        self.fd.fitDisplay(dataFit=self.dataFitFwhm,
                           resultFit=resultFitFwhm,
                           xdisplay=False)

    #@unittest.skip('feature not yet implemented')
    def test_FluxfitDisplay(self):
        logger.info('== {} =='.format(self._testMethodName))
        ft = FitFunction(dataFit=self.dataFitFwhm, logger=logger)
        min_focpos_fwhm, val_fwhm, par, flag = ft.fitData()
        if flag != None:
            resultFitFwhm = ResultFit(ambientTemp='20.1',
                                      ftName='UNK',
                                      extrFitPos=min_focpos_fwhm,
                                      extrFitVal=val_fwhm,
                                      fitPar=par,
                                      fitFlag=flag,
                                      color='blue',
                                      ylabel='FWHM [px]: blue',
                                      titleResult='fwhm:{0:5d}'.format(
                                          int(min_focpos_fwhm)))

            fd = FitDisplay(date=self.date, comment='unittest', logger=logger)
            fd.fitDisplay(dataFit=self.dataFitFwhm,
                          resultFit=resultFitFwhm,
                          xdisplay=False)

        x = np.array([p for p in self.dataFitFlux.pos])
        y = np.array([v for v in self.dataFitFlux.val])
        wmean = np.average(a=x, weights=y)
        xy = zip(x, y)
        wstd = np.std(a=xy)
        # scale the values [a.u.]
        sv = [
            max(self.dataFitFwhm.val) / max(self.dataFitFlux.val) * z
            for z in self.dataFitFlux.val
        ]
        self.dataFitFlux.val = sv

        # gaussian
        self.parFlux = np.array([10., wmean, wstd / 4., 2.])
        ft = FitFunction(dataFit=self.dataFitFlux, logger=logger)
        max_focpos_flux, val_flux, par, flag = ft.fitData()
        if flag != None:
            resultFitFlux = ResultFit(
                ambientTemp='20.1',
                ftName='UNK',
                extrFitPos=max_focpos_flux,
                extrFitVal=val_flux,
                fitPar=par,
                fitFlag=flag,
                color='red',
                ylabel='FWHM [px]: blue, Flux [a.u.]:red',
                titleResult='fwhm:{0:5d}, flux: {1:5d}'.format(
                    int(resultFitFwhm.extrFitPos), int(max_focpos_flux)))

            fd.fitDisplay(dataFit=self.dataFitFlux,
                          resultFit=resultFitFlux,
                          xdisplay=False)