Beispiel #1
0
 def test006(self):
     """Basic Test 006: fitting with double line profiles (spw='3', nfit=[2])"""
     tid = '006'
     for infile in self.infiles:
         infile_negative = self.outroot+tid+'.negative.ms'
         self._generateMSWithNegativeProfiles(infile, infile_negative)
         datacolumn = 'float_data'
         spw = '3'
         nfit = [2]
         fitfunc = infile.split('.')[0]
         print "testing " + fitfunc + " profile..."
         result = tsdfit(infile=infile_negative, datacolumn=datacolumn, spw=spw, nfit=nfit, fitfunc=fitfunc)
         shutil.rmtree(infile_negative)
         npol = 2
         nrow = 1
         answer = copy.deepcopy(self.answer3)
         self._generateAnswerForNegativeProfiles(answer)
         
         for key in result.keys():
             self.assertEqual(len(result[key]), nrow*npol, 
                              msg="The result data has wrong data length")
             for i in range(len(result[key])):
                 if (key == "nfit"):
                     self.assertEqual(result[key][i], sum(nfit), msg="%s has wrong value."%(key))
                 else:
                     self.assertEqual(len(result[key][i]), sum(nfit), msg="%s element has wrong length."%(key))
                     for j in range(len(result[key][i])):
                         thres = 3.0
                         if (key == "fwhm") and (i == 1) and (j == 0): thres = 18.0
                         result_lower = result[key][i][j][0] - thres * result[key][i][j][1]
                         result_upper = result[key][i][j][0] + thres * result[key][i][j][1]
                         #print infile="+infile+" --- "+"lower("+str(result_lower)+") - answer("+str(answer[key][i][j])+") - upper("+str(result_upper) +")"
                         self.assertTrue(((result_lower <= answer[key][i][j]) and (answer[key][i][j] <= result_upper)),
                                         msg="row%s, comp%s result inconsistent with answer"%(i, j))
Beispiel #2
0
    def test003(self):
        """Basic Test 003: fitting with double Gaussian (spw='3', nfit=[2])"""
        tid = '003'
        infile = self.infile
        outfile = self.outroot+tid+'.ms'
        datacolumn = 'float_data'
        spw = '3'
        nfit = [2]
        result = tsdfit(infile=infile, datacolumn=datacolumn, spw=spw, nfit=nfit)

        npol = 2
        nrow = 1

        answer = {'cent': [[2000.0, 6000.0], [3900.0, 4100.0]],
                  'peak': [[10.0, 10.0], [10.0, 5.0]],
                  'fwhm': [[100.0, 100.0], [20.0, 100.0]]
                  }
        for key in result.keys():
            self.assertEqual(len(result[key]), nrow*npol, 
                             msg="The result data has wrong data length")
            for i in range(len(result[key])):
                if (key == "nfit"):
                    self.assertEqual(result[key][i], sum(nfit), msg="%s has wrong value."%(key))
                else:
                    self.assertEqual(len(result[key][i]), sum(nfit), msg="%s element has wrong length."%(key))
                    for j in range(len(result[key][i])):
                        result_lower = result[key][i][j][0] - 3.0 * result[key][i][j][1]
                        result_upper = result[key][i][j][0] + 3.0 * result[key][i][j][1]
                        #print "lower("+str(result_lower)+") - answer("+str(answer[key][i][j])+") - upper("+str(result_upper) +")"
                        self.assertTrue(((result_lower <= answer[key][i][j]) and (answer[key][i][j] <= result_upper)),
                                        msg="row%s, comp%s result inconsistent with answer"%(i, j))
Beispiel #3
0
    def test003(self):
        """Basic Test 003: fitting with double lines (spw='3', nfit=[2])"""
        tid = '003'
        for infile in self.infiles:
            datacolumn = 'float_data'
            spw = '3'
            nfit = [2]
            fitfunc = infile.split('.')[0]
            print "testing " + fitfunc + " profile..."
            result = tsdfit(infile=infile, datacolumn=datacolumn, spw=spw, nfit=nfit, fitfunc=fitfunc)
            npol = 2
            nrow = 1
            answer = self.answer3

            for key in result.keys():
                self.assertEqual(len(result[key]), nrow*npol, 
                                 msg="The result data has wrong data length")
                for i in range(len(result[key])):
                    if (key == "nfit"):
                        self.assertEqual(result[key][i], sum(nfit), msg="%s has wrong value."%(key))
                    else:
                        self.assertEqual(len(result[key][i]), sum(nfit), msg="%s element has wrong length."%(key))
                        for j in range(len(result[key][i])):
                            result_lower = result[key][i][j][0] - 3.0 * result[key][i][j][1]
                            result_upper = result[key][i][j][0] + 3.0 * result[key][i][j][1]
                            #print "infile="+infile+" --- "+"lower("+str(result_lower)+") - answer("+str(answer[key][i][j])+") - upper("+str(result_upper) +")"
                            self.assertTrue(((result_lower <= answer[key][i][j]) and (answer[key][i][j] <= result_upper)),
                                            msg="row%s, comp%s result inconsistent with answer"%(i, j))
Beispiel #4
0
    def test001(self):
        """Basic Test 001: fitting with single Gaussian (spw='0,1,2', nfit=[1])"""
        tid = '001'
        infile = self.infile
        outfile = self.outroot + tid + '.ms'
        datacolumn = 'float_data'
        spw = '0,1,2'
        nfit = [1]
        result = tsdfit(infile=infile,
                        datacolumn=datacolumn,
                        spw=spw,
                        nfit=nfit)

        npol = 2
        nrow = len(spw.split(','))

        answer = {
            'cent': [[4000.0], [5000.0], [3000.0], [2000.0], [4500.0],
                     [5500.0]],
            'peak': [[10.0], [10.0], [10.0], [10.0], [10.0], [10.0]],
            'fwhm': [[500.0], [100.0], [20.0], [4.0], [100.0], [20.0]]
        }
        for key in result.keys():
            self.assertEqual(len(result[key]),
                             nrow * npol,
                             msg="The result data has wrong data length")
            for i in range(len(result[key])):
                if (key == "nfit"):
                    self.assertEqual(result[key][i],
                                     nfit[0],
                                     msg="%s has wrong value." % (key))
                else:
                    self.assertEqual(len(result[key][i]),
                                     nfit[0],
                                     msg="%s element has wrong length." %
                                     (key))
                    for j in range(len(result[key][i])):
                        result_lower = result[key][i][j][
                            0] - 3.0 * result[key][i][j][1]
                        result_upper = result[key][i][j][
                            0] + 3.0 * result[key][i][j][1]
                        #print "lower("+str(result_lower)+") - answer("+str(answer[key][i][j])+") - upper("+str(result_upper) +")"
                        self.assertTrue(
                            ((result_lower <= answer[key][i][j]) and
                             (answer[key][i][j] <= result_upper)),
                            msg="row%s, comp%s result inconsistent with answer"
                            % (i, j))
Beispiel #5
0
    def test002(self):
        """Basic Test 002: fitting with double fitrange (spw='3', nfit=[1,1])"""
        tid = '002'
        infile = self.infile
        outfile = self.outroot + tid + '.ms'
        datacolumn = 'float_data'
        spw = '3:0~4000;4001~8191'
        nfit = [1, 1]
        result = tsdfit(infile=infile,
                        datacolumn=datacolumn,
                        spw=spw,
                        nfit=nfit)

        npol = 2
        nrow = 1

        answer = {
            'cent': [[2000.0, 6000.0], [3900.0, 4100.0]],
            'peak': [[10.0, 10.0], [10.0, 5.0]],
            'fwhm': [[100.0, 100.0], [20.0, 100.0]]
        }
        for key in result.keys():
            self.assertEqual(len(result[key]),
                             nrow * npol,
                             msg="The result data has wrong data length")
            for i in range(len(result[key])):
                if (key == "nfit"):
                    self.assertEqual(result[key][i],
                                     sum(nfit),
                                     msg="%s has wrong value." % (key))
                else:
                    self.assertEqual(len(result[key][i]),
                                     sum(nfit),
                                     msg="%s element has wrong length." %
                                     (key))
                    for j in range(len(result[key][i])):
                        result_lower = result[key][i][j][
                            0] - 3.0 * result[key][i][j][1]
                        result_upper = result[key][i][j][
                            0] + 3.0 * result[key][i][j][1]
                        #print "lower("+str(result_lower)+") - answer("+str(answer[key][i][j])+") - upper("+str(result_upper) +")"
                        self.assertTrue(
                            ((result_lower <= answer[key][i][j]) and
                             (answer[key][i][j] <= result_upper)),
                            msg="row%s, comp%s result inconsistent with answer"
                            % (i, j))
Beispiel #6
0
    def test000(self):
        """Basic Test 000: default values for all parameters (nfit=[0] : no fitting)"""
        tid = '000'
        for infile in self.infiles:
            datacolumn = 'float_data'
            result = tsdfit(infile=infile, datacolumn=datacolumn)

            npol = 2
            with tbmanager(infile) as tb:
                nrow = tb.nrows()

            for key in result.keys():
                self.assertEqual(len(result[key]), nrow*npol, 
                                 msg="The result data has wrong data length")
                for i in range(len(result[key])):
                    if (key == "nfit"):
                        self.assertEqual(result[key][i], 0, msg="%s has wrong value."%(key))
                    else:
                        self.assertEqual(result[key][i], [], msg="%s has wrong value."%(key))
Beispiel #7
0
 def run_test(self, is_center, reference=None, **kwarg):
     param = dict(**self.common_param)
     param.update(kwarg)
     fit_val = tsdfit(**param)
     #print("Return:",fit_val)
     if reference is None:
         reference = self.get_reference_from_base(is_center)
     #print("Reference:",reference)
     for irow in range(len(fit_val['nfit'])):
         # test the number of detected lines
         self.assertEqual(fit_val['nfit'][irow], reference['nfit'][irow],
                          "The number of lines in row %d differ: %d (expected: %d)" % (irow, fit_val['nfit'][irow], reference['nfit'][irow]))
         nline = fit_val['nfit'][irow]
         for key in fit_val.keys():
             if key=='nfit': continue
             for iline in range(nline):
                 test = fit_val[key][irow][iline]
                 ref = reference[key][irow][iline][0]
                 self.assertTrue(numpy.allclose(test, ref, rtol=1.e2),
                                 "%s in row %d line %d differs" % (key, irow, iline))
Beispiel #8
0
    def test000(self):
        """Basic Test 000: default values for all parameters (nfit=[0] : no fitting)"""
        tid = '000'
        infile = self.infile
        outfile = self.outroot + tid + '.ms'
        datacolumn = 'float_data'
        result = tsdfit(infile=infile, datacolumn=datacolumn)

        npol = 2
        with tbmanager(infile) as tb:
            nrow = tb.nrows()

        for key in result.keys():
            self.assertEqual(len(result[key]),
                             nrow * npol,
                             msg="The result data has wrong data length")
            for i in range(len(result[key])):
                if (key == "nfit"):
                    self.assertEqual(result[key][i],
                                     0,
                                     msg="%s has wrong value." % (key))
                else:
                    self.assertEqual(result[key][i], [],
                                     msg="%s has wrong value." % (key))
Beispiel #9
0
 def run_test(self, sel_param, datacolumn):
     inparams = self._get_selection_string(sel_param)
     inparams.update(self.common_param)
     fit_val = tsdfit(datacolumn=datacolumn, **inparams)
     self._test_result(fit_val, sel_param, datacolumn)