Beispiel #1
0
    def test_kill_channels(self):

        instr = instrument.Instrument()

        # Create some channels.
        instr.create_focal_plane(nrow=10, ncol=10)
        self.assertEqual(instr.ndet, 200)

        # Kill some channels
        instr.kill_channels(killfrac=0.5, pairs=False)

        dead_count = 0
        for pair in instr.beams:
            if pair[0].dead:
                dead_count += 1
            if pair[1].dead:
                dead_count += 1

        self.assertEqual(dead_count, instr.ndet / 2.)

        # Redo but now with killing pairs
        instr_2 = instrument.Instrument()
        instr_2.create_focal_plane(nrow=10, ncol=10)
        instr_2.kill_channels(killfrac=0.5, pairs=True)
        dead_count = 0
        for pair in instr_2.beams:
            if pair[0].dead and pair[1].dead:
                dead_count += 2
            else:
                self.assertEqual(pair[0].dead, False)
                self.assertEqual(pair[1].dead, False)

        self.assertEqual(dead_count, instr_2.ndet / 2.)
Beispiel #2
0
    def test_global_prop(self):

        instr = instrument.Instrument()

        # Create some channels.
        instr.create_focal_plane(nrow=10, ncol=10, btype='PO')

        for pair in instr.beams:
            for beam in pair:
                self.assertEqual(beam.btype, 'PO')

        instr.set_global_prop(dict(btype='EG', polang_error=10))

        for pair in instr.beams:
            for beam in pair:
                self.assertEqual(beam.btype, 'EG')
                self.assertEqual(beam.polang_error, 10)

        # Add ghosts
        instr.create_reflected_ghosts()
        instr.create_reflected_ghosts()

        for pair in instr.beams:
            for beam in pair:
                for ghost in beam.ghosts:
                    self.assertEqual(ghost.btype, 'EG')
                    self.assertEqual(ghost.polang_error, 10)

        instr.set_global_prop(dict(btype='PO', polang_error=5))

        for pair in instr.beams:
            for beam in pair:
                for ghost in beam.ghosts:
                    self.assertEqual(beam.btype, 'PO')
                    self.assertEqual(beam.polang_error, 5)
Beispiel #3
0
    def test_create_focal_plane(self):
        '''
        Tests whether name, az, el, ghost, pol kwargs 
        are not propagated, but others are.
        '''
        instr = instrument.Instrument()

        with warnings.catch_warnings(record=True) as w:
            instr.create_focal_plane(name='name_that_should_not_appear',
                                     az=11,
                                     el=11,
                                     polang=10,
                                     ghost=True,
                                     pol='B',
                                     fov=10)
            self.assertEqual(len(w), 5)  # az, el, ghost, pol, name
        self.assertEqual(len(instr.beams), 1)
        self.assertEqual(instr.ndet, 2)

        for bidx, beam in enumerate(instr.beams[0]):
            self.assertNotEqual(beam.name, 'name_that_shoud_not_appear')
            self.assertEqual(beam.az, -5)
            self.assertEqual(beam.el, -5)
            if bidx == 0:
                self.assertEqual(beam.pol, 'A')
                self.assertEqual(beam.polang, 10)
            elif bidx == 1:
                self.assertEqual(beam.pol, 'B')
                self.assertEqual(beam.polang, 100)
            self.assertEqual(beam.ghost, False)

        instr.create_focal_plane()
        self.assertEqual(len(instr.beams), 2)
        self.assertEqual(instr.ndet, 4)
Beispiel #4
0
    def test_load_focal_plane(self):

        instr = instrument.Instrument()
        instr.load_focal_plane(test_fpu_dir)

        with warnings.catch_warnings(record=True) as w:
            # Should be ignored
            instr.load_focal_plane(test_fpu_dir, ghost=True, pol='B')
            self.assertEqual(len(w), 2)  # ghost and pol.
        self.assertEqual(len(instr.beams), 2)

        for pair in instr.beams:

            self.assertEqual(pair[0].az, self.beam_opts['az'])
            self.assertEqual(pair[0].el, self.beam_opts['el'])
            self.assertEqual(pair[0].polang, self.beam_opts['polang'])
            self.assertEqual(pair[0].btype, self.beam_opts['btype'])
            self.assertEqual(pair[0].amplitude, self.beam_opts['amplitude'])
            self.assertEqual(pair[0].po_file, self.beam_opts['po_file'])
            self.assertEqual(pair[0].name, self.beam_opts['name'] + 'A')
            self.assertEqual(pair[0].pol, 'A')
            self.assertEqual(pair[0].ghost, False)

            self.assertEqual(pair[1].az, self.beam_opts['az'])
            self.assertEqual(pair[1].el, self.beam_opts['el'])
            self.assertEqual(pair[1].polang, self.beam_opts['polang'])
            self.assertEqual(pair[1].btype, self.beam_opts['btype'])
            self.assertEqual(pair[1].amplitude, self.beam_opts['amplitude'])
            self.assertEqual(pair[1].po_file, self.beam_opts['po_file'])
            self.assertEqual(pair[1].name, self.beam_opts['name'] + 'B')
            self.assertEqual(pair[1].pol, 'B')
            self.assertEqual(pair[1].ghost, False)

        # load up third pair
        instr.load_focal_plane(test_fpu_dir, az=1, el=1, polang=1000)
        self.assertEqual(instr.beams[2][0].az, 1)
        self.assertEqual(instr.beams[2][0].el, 1)
        self.assertEqual(instr.beams[2][0].polang, 1000)
        self.assertEqual(instr.beams[2][1].polang, 1000)

        # Test whether you can change btype when loading up beam.
        instr.load_focal_plane(test_fpu_dir, btype='EG')
        self.assertEqual(instr.beams[3][0].btype, 'EG')

        # Test wheter you can overwrite existing beams
        instr.load_focal_plane(test_fpu_dir, combine=False)
        self.assertEqual(len(instr.beams), 1)

        # Test polang_A and polang_B.
        instr.load_focal_plane(test_fpu_dir, combine=False, polang=10)
        self.assertEqual(instr.beams[0][0].polang, 10)
        self.assertEqual(instr.beams[0][1].polang, 10)

        instr.load_focal_plane(test_fpu_dir,
                               combine=False,
                               polang=10,
                               polang_A=20,
                               polang_B=0)
        self.assertEqual(instr.beams[0][0].polang, 30)
        self.assertEqual(instr.beams[0][1].polang, 10)
Beispiel #5
0
    def test_remove_from_focal_plane(self):

        instr = instrument.Instrument()

        beam1 = Beam()
        beam2 = Beam()
        beam3 = Beam()
        beam4 = Beam()

        # Add single beam per pair.
        instr.add_to_focal_plane([beam1, beam2, beam3, beam4], combine=True)
        self.assertEqual(instr.ndet, 4)

        instr.remove_from_focal_plane([beam1, beam2, beam3, beam4])

        self.assertEqual(instr.ndet, 0)
        self.assertEqual(instr.beams, [])

        # Add pairs.
        instr.add_to_focal_plane([[beam1, beam2], [beam3, beam4]],
                                 combine=True)
        self.assertEqual(instr.ndet, 4)

        instr.remove_from_focal_plane([beam1, beam2, beam3])

        self.assertEqual(instr.ndet, 1)
        self.assertEqual(instr.beams, [[None, beam4]])
Beispiel #6
0
    def test_add_to_focal_plane(self):

        instr = instrument.Instrument()

        beam = Beam()

        # Add single beam.
        instr.add_to_focal_plane(beam, combine=True)
        self.assertEqual(instr.ndet, 1)

        for pair in instr.beams:

            self.assertEqual(pair[0], beam)
            self.assertEqual(pair[1], None)

        # Add three more individual beam.
        instr.add_to_focal_plane([beam, beam, beam], combine=True)

        self.assertEqual(instr.ndet, 4)
        for pair in instr.beams:

            self.assertEqual(pair[0], beam)
            self.assertEqual(pair[1], None)

        # Add a pair.
        instr.add_to_focal_plane([[beam, beam]], combine=True)

        self.assertEqual(instr.ndet, 6)
        for n, pair in enumerate(instr.beams):

            self.assertEqual(pair[0], beam)
            if n > 3:
                self.assertEqual(pair[1], beam)

        # Add two pair.
        instr.add_to_focal_plane([[beam, beam], [beam, beam]], combine=True)

        self.assertEqual(instr.ndet, 10)
        for n, pair in enumerate(instr.beams):

            self.assertEqual(pair[0], beam)
            if n > 3:
                self.assertEqual(pair[1], beam)

        # Start new focal plane with pair.
        instr.add_to_focal_plane([[beam, beam]], combine=False)

        self.assertEqual(instr.ndet, 2)

        for pair in instr.beams:

            self.assertEqual(pair[0], beam)
            self.assertEqual(pair[1], beam)
Beispiel #7
0
    def test_set_btypes(self):

        instr = instrument.Instrument()

        # Create some channels.
        instr.create_focal_plane(nrow=10, ncol=10, btype='PO')

        for pair in instr.beams:
            for beam in pair:
                self.assertEqual(beam.btype, 'PO')

        instr.set_btypes(btype='EG')

        for pair in instr.beams:
            for beam in pair:
                self.assertEqual(beam.btype, 'EG')

        # Test default behaviour
        instr.set_btypes()

        for pair in instr.beams:
            for beam in pair:
                self.assertEqual(beam.btype, 'Gaussian')
Beispiel #8
0
    def test_add_to_prop(self):

        instr = instrument.Instrument()

        # Create some channels.
        instr.create_focal_plane(nrow=10, ncol=10, btype='PO')

        # Add value
        instr.add_to_prop(dict(amplitude=10))

        for pair in instr.beams:
            for beam in pair:
                self.assertEqual(beam.amplitude, 11)

                for ghost in beam.ghosts:
                    self.assertEqual(ghost.amplitude, 11)

        # Add value only to main beams.
        instr.add_to_prop(dict(amplitude=10), incl_ghosts=False)

        for pair in instr.beams:
            for beam in pair:
                self.assertEqual(beam.amplitude, 21)

                for ghost in beam.ghosts:
                    self.assertEqual(ghost.amplitude, 11)

        # Add value only to A beams.
        instr.add_to_prop(dict(amplitude=10), incl_ghosts=True, no_B=True)

        for pair in instr.beams:
            self.assertEqual(pair[0].amplitude, 31)
            self.assertEqual(pair[1].amplitude, 21)

            for bidx, beam in enumerate(pair):

                for ghost in beam.ghosts:
                    if bidx == 0:
                        self.assertEqual(ghost.amplitude, 21)
                    else:
                        self.assertEqual(ghost.amplitude, 11)

        # Add random var per pair
        instr.add_to_prop(dict(polang=100), rand_stdev=30, per_pair=True)

        for pair in instr.beams:
            self.assertAlmostEqual(pair[0].polang, pair[1].polang - 90)

            for beam in pair:
                for ghost in beam.ghosts:
                    self.assertAlmostEqual(beam.polang, ghost.polang)

        # Add random var.
        instr.add_to_prop(dict(polang=100), rand_stdev=30)

        for pair in instr.beams:
            self.assertNotAlmostEqual(pair[0].polang, pair[1].polang - 90)

            for beam in pair:
                for ghost in beam.ghosts:
                    self.assertEqual(beam.polang, ghost.polang)