casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables
test_ia_restoringbeam.py
Go to the documentation of this file.
00001 ##########################################################################
00002 # imfit_test.py
00003 #
00004 # Copyright (C) 2008, 2009
00005 # Associated Universities, Inc. Washington DC, USA.
00006 #
00007 # This script is free software; you can redistribute it and/or modify it
00008 # under the terms of the GNU Library General Public License as published by
00009 # the Free Software Foundation; either version 2 of the License, or (at your
00010 # option) any later version.
00011 #
00012 # This library is distributed in the hope that it will be useful, but WITHOUT
00013 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00015 # License for more details.
00016 #
00017 # You should have received a copy of the GNU Library General Public License
00018 # along with this library; if not, write to the Free Software Foundation,
00019 # Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
00020 #
00021 # Correspondence concerning AIPS++ should be adressed as follows:
00022 #        Internet email: aips2-request@nrao.edu.
00023 #        Postal address: AIPS++ Project Office
00024 #                        National Radio Astronomy Observatory
00025 #                        520 Edgemont Road
00026 #                        Charlottesville, VA 22903-2475 USA
00027 #
00028 # <author>
00029 # Dave Mehringer
00030 # </author>
00031 #
00032 # <summary>
00033 # Test suite for the CASA tool method ia.setrestoringbeam(), ia.restoringbeam()
00034 # </summary>
00035 #
00036 # <reviewed reviwer="" date="" tests="" demos="">
00037 # </reviewed
00038 #
00039 # <prerequisite>
00040 # <ul>
00041 # </ul>
00042 # </prerequisite>
00043 #
00044 # <etymology>
00045 # Test for the ia.restoringbeam() and ia.setrestoringbeam() tool methods
00046 # </etymology>
00047 #
00048 # <synopsis>
00049 # Test for the ia.restoringbeam() and ia.setrestoringbeam() tool methods
00050 # </synopsis> 
00051 #
00052 # <example>
00053 #
00054 # This test runs as part of the CASA python unit test suite and can be run from
00055 # the command line via eg
00056 # 
00057 # `echo $CASAPATH/bin/casapy | sed -e 's$ $/$'` --nologger --log2term -c `echo $CASAPATH | awk '{print $1}'`/code/xmlcasa/scripts/regressions/admin/runUnitTest.py test_ia_restoringbeam[test1,test2,...]
00058 #
00059 # </example>
00060 #
00061 # <motivation>
00062 # To provide a test standard for the ia.restoringbeam and ia.setrestoringbeam() tool methods to ensure
00063 # coding changes do not break the associated bits 
00064 # </motivation>
00065 #
00066 
00067 ###########################################################################
00068 import shutil
00069 import casac
00070 from tasks import *
00071 from taskinit import *
00072 from __main__ import *
00073 import unittest
00074 
00075 class ia_restoringbeam_test(unittest.TestCase):
00076     
00077     def setUp(self):
00078         self._myia = iatool()
00079     
00080     def tearDown(self):
00081         self._myia.done()
00082     
00083     def test_global_beam(self):
00084         """Test adding, deleting, and setting beams"""
00085         myia = self._myia
00086         myia.fromshape(shape=[10, 10, 4, 10])
00087         self.assertFalse(bool(myia.restoringbeam()))
00088         major = "4arcsec"
00089         minor = "3arcsec"
00090         pa = "10deg"
00091         myia.setrestoringbeam(major=major, minor=minor, pa=pa)
00092         beam = myia.restoringbeam()
00093         self.assertTrue(beam["major"] == qa.quantity(major))
00094         self.assertTrue(beam["minor"] == qa.quantity(minor))
00095         self.assertTrue(beam["positionangle"] == qa.quantity(pa))
00096         for channel in [-1, 0, 1, 2]:
00097             for polarization in [-1, 0, 1, 2]:
00098                 beam = myia.restoringbeam(channel=channel, polarization=polarization)
00099                 self.assertTrue(beam["major"] == qa.quantity(major))
00100                 self.assertTrue(beam["minor"] == qa.quantity(minor))
00101                 self.assertTrue(beam["positionangle"] == qa.quantity(pa))
00102         myia.setrestoringbeam(remove=T)
00103         self.assertFalse(bool(myia.restoringbeam()))
00104 
00105     def test_per_plane_beams(self):
00106         myia = self._myia
00107         nchan = 10
00108         npol = 4
00109         myia.fromshape(shape=[10, 10, npol, nchan])
00110         self.assertFalse(bool(myia.restoringbeam()))
00111         major = "4arcsec"
00112         minor = "3arcsec"
00113         pa = "10deg"
00114         myia.setrestoringbeam(major=major, minor=minor, pa=pa, channel=20, polarization=2)
00115         nmajor = "10arcsec"
00116         nminor = "5arcsec"
00117         npa = "40deg"
00118         myia.setrestoringbeam(
00119             major=nmajor, minor=nminor, pa=npa,
00120             channel=2, polarization=1
00121         )
00122         beams = myia.restoringbeam()
00123         self.assertTrue(beams["nChannels"] == nchan)
00124         self.assertTrue(beams["nStokes"] == npol)
00125         self.assertTrue(len(beams["beams"]) == nchan)
00126         for chan in range(nchan):
00127             rec = beams["beams"]["*" + str(chan)]
00128             for pol in range(npol):
00129                 bmaj = major
00130                 bmin = minor
00131                 bpa = pa
00132                 if chan == 2 and pol == 1:
00133                     bmaj = nmajor
00134                     bmin = nminor
00135                     bpa = npa
00136                 beam = rec["*" + str(pol)]
00137                 self.assertTrue(beam["major"] == qa.quantity(bmaj))
00138                 self.assertTrue(beam["minor"] == qa.quantity(bmin))
00139                 self.assertTrue(beam["positionangle"] == qa.quantity(bpa))
00140                 beam = myia.restoringbeam(channel=chan, polarization=pol)
00141                 self.assertTrue(beam["major"] == qa.quantity(bmaj))
00142                 self.assertTrue(beam["minor"] == qa.quantity(bmin))
00143                 self.assertTrue(beam["positionangle"] == qa.quantity(bpa))
00144         for chan in [-1, 10]:
00145             for pol in [-1, 10]:
00146                 if chan != -1 or pol != -1:
00147                     self.assertRaises(
00148                         Exception, myia.restoringbeam,
00149                         channel=chan, polarization=pol
00150                     )
00151 
00152 def suite():
00153     return [ia_restoringbeam_test]