Esempio n. 1
0
    def test_QWP_SS(self):
        """ Test that S polarised light passing through a quarter wave plate at
        0° degrees to the vertical, reflecting off a mirror then passing back
        through the same waveplate results in S polarised light.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Waveplate, 'qwp', ('n1', 'n2'))
        model.add_component(ts.components.Mirror, 'outMirror', 'n3')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n3'))

        model.add_detector('out', 'n0', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        model.components['qwp'].rotation = 0
        model.components['qwp'].retardance = np.pi / 2
        model.components['qwp'].update()

        model.build()
        model.evaluate()

        back_intensity_P = np.abs(model.detectors['out'].amplitudes[2])**2
        back_intensity_S = np.abs(model.detectors['out'].amplitudes[3])**2

        self.assertAlmostEqual(back_intensity_P, 0)
        self.assertAlmostEqual(back_intensity_S, 1)
Esempio n. 2
0
    def test_45(self):
        """Test that vertically (S) polarised light passing through an 45°
        polarising linear polariser results in pure 45° polarised light.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Polariser, 'inPol', ('n1', 'n2'))
        model.add_component(ts.components.Dump, 'outDump', 'n3')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 'sOut', ('n2', 'n3'))

        model.add_detector('out', 'n3', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        model.components['inPol'].rotation = np.pi / 4
        model.components['inPol'].extinction = 0
        model.components['inPol'].loss = 0
        model.components['inPol'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].amplitudes[0],
                               model.detectors['out'].amplitudes[1])
    def test_ideal(self):
        """Test that 45° polarised light reflected off of an ideal mirror
        through an isolator does not reach the source.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.IdealIsolator, 'isolator',
                            ('n1', 'n2'))
        model.add_component(ts.components.Mirror, 'mirror', 'n3')

        model.add_component(ts.components.Stack, 's01', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's23', ('n2', 'n3'))

        model.add_detector('out', 'n0', ('amplitude'))

        model.components['laser'].amplitude[0] = 1 / np.sqrt(2)
        model.components['laser'].amplitude[1] = 1 / np.sqrt(2)

        model.components['mirror'].rP = 1
        model.components['mirror'].rS = 1

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].amplitudes[0],
                               1 / np.sqrt(2))
        self.assertAlmostEqual(model.detectors['out'].amplitudes[1],
                               1 / np.sqrt(2))
        self.assertAlmostEqual(model.detectors['out'].amplitudes[2], 0)
        self.assertAlmostEqual(model.detectors['out'].amplitudes[3], 0)
Esempio n. 4
0
    def test_extinction(self):
        """Test that 45° polarised light passing through an S polarising
        linear polariser with an extinction ratio of 0.01 results in the
        correct output intensities for each polarisation.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Polariser, 'inPol', ('n1', 'n2'))
        model.add_component(ts.components.Dump, 'outDump', 'n3')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 'sOut', ('n2', 'n3'))

        model.add_detector('out', 'n3',
                           ('amplitude', 'S intensity', 'P intensity'))

        model.components['laser'].amplitude[0] = 1
        model.components['laser'].amplitude[1] = 1

        model.components['inPol'].rotation = 0
        model.components['inPol'].extinction = 0.01
        model.components['inPol'].loss = 0
        model.components['inPol'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(
            model.detectors['out'].P_intensity /
            model.detectors['out'].S_intensity, 0.01)
Esempio n. 5
0
    def test_LHC(self):
        """Test passing left hand circularly  polarised light through a stack
        to a dump and detector.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Dump, 'dump', 'n1')

        model.add_component(ts.components.Stack, 'stack', ('n0', 'n1'))

        model.add_detector('out', 'n1', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 1
        model.components['laser'].amplitude[1] = 1j
        model.components['laser'].amplitude = \
            model.components['laser'].amplitude / np.sqrt(2)

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].amplitudes[0],
                               1 / np.sqrt(2))
        self.assertAlmostEqual(model.detectors['out'].amplitudes[1],
                               1j / np.sqrt(2))
        self.assertAlmostEqual(model.detectors['out'].intensity, 1)
    def test_extinction(self):
        """ Test that 45° polarised light passing through a polarising
        beamsplitter with a transmission extinction of 0.01 and a reflection
        extinction of 0.02 results in the correct intensity outputs.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.PolarisingBeamSplitter, 'pbs',
                            ('n1', 'n2', 'n3', 'n4'))
        model.add_component(ts.components.Dump, 'd1', 'n5')
        model.add_component(ts.components.Dump, 'd2', 'n6')
        model.add_component(ts.components.Dump, 'd3', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n5'))
        model.add_component(ts.components.Stack, 's2', ('n3', 'n6'))
        model.add_component(ts.components.Stack, 's3', ('n4', 'n7'))

        model.add_detector(
            'pd1', 'n5',
            ('amplitude', 'intensity', 'S intensity', 'P intensity'))
        model.add_detector(
            'pd2', 'n6',
            ('amplitude', 'intensity', 'S intensity', 'P intensity'))
        model.add_detector('pd3', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 1
        model.components['laser'].amplitude[1] = 1

        model.components['pbs'].rExtinction = 0.02
        model.components['pbs'].tExtinction = 0.01
        model.components['pbs'].rLoss = 0
        model.components['pbs'].tLoss = 0
        model.components['pbs'].theta0 = 0
        model.components['pbs'].theta1 = 0
        model.components['pbs'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(
            model.detectors['pd1'].intensity +
            model.detectors['pd2'].intensity, 2)
        self.assertAlmostEqual(
            model.detectors['pd1'].P_intensity /
            model.detectors['pd1'].S_intensity,
            model.components['pbs'].rExtinction)
        self.assertAlmostEqual(
            model.detectors['pd2'].S_intensity /
            model.detectors['pd2'].P_intensity,
            model.components['pbs'].tExtinction)
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[0], 0)
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[1], 0)
Esempio n. 7
0
    def test_isolator(self):
        """Test that S polarised light passing through a Faraday isolator
        consisting of an S polarising polariser, a 45° Faraday rotator and a
        45° rotated polariser is correctly isolated.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Polariser, 'inPol', ('n1', 'n2'))
        model.add_component(ts.components.FaradayRotator, 'fr', ('n3', 'n4'))
        model.add_component(ts.components.Polariser, 'outPol', ('n5', 'n6'))
        model.add_component(ts.components.Mirror, 'mirror', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n3'))
        model.add_component(ts.components.Stack, 's2', ('n4', 'n5'))
        model.add_component(ts.components.Stack, 'sOut', ('n6', 'n7'))

        model.add_detector('out', 'n0', ('amplitude', 'intensity'))
        model.add_detector('mir', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        model.components['fr'].rotation = np.pi / 4
        model.components['fr'].update()

        model.components['inPol'].rotation = 0
        model.components['inPol'].extinction = 0
        model.components['inPol'].loss = 0
        model.components['inPol'].update()

        model.components['outPol'].rotation = np.pi / 4
        model.components['outPol'].extinction = 0
        model.components['outPol'].loss = 0
        model.components['outPol'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(np.abs(model.detectors['mir'].amplitudes[0]),
                               1 / np.sqrt(2))
        self.assertAlmostEqual(np.abs(model.detectors['mir'].amplitudes[1]),
                               1 / np.sqrt(2))
        self.assertAlmostEqual(
            np.sign(model.detectors['mir'].amplitudes[1] *
                    model.detectors['mir'].amplitudes[0]), 1)
        self.assertAlmostEqual(model.detectors['out'].amplitudes[2], 0)
        self.assertAlmostEqual(model.detectors['out'].amplitudes[3], 0)
Esempio n. 8
0
    def test_set_length(self):
        """Test that the set_length method produces the correct phase changes.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Dump, 'dump', 'n1')

        model.add_component(ts.components.Stack, 'stack', ('n0', 'n1'))

        model.add_detector('out', 'n1', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 1
        model.components['laser'].amplitude[1] = 1

        model.components['stack'].set_length(0)

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].amplitudes[0], 1)
        self.assertAlmostEqual(model.detectors['out'].amplitudes[1], 1)

        model.components['stack'].set_length(0.25)

        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].amplitudes[0],
                               np.exp(1j * 2 * np.pi * 0.25))
        self.assertAlmostEqual(model.detectors['out'].amplitudes[1],
                               np.exp(1j * 2 * np.pi * 0.25))

        model.components['stack'].set_length(0.634)

        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].amplitudes[0],
                               np.exp(1j * 2 * np.pi * 0.634))
        self.assertAlmostEqual(model.detectors['out'].amplitudes[1],
                               np.exp(1j * 2 * np.pi * 0.634))

        model.components['stack'].set_length(0, loss=0.5)

        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].intensity, 1)
Esempio n. 9
0
    def test_HWP_SP(self):
        """Test that S polarised light passing through a half wave plate at 45°
        degrees to the vertical results in P polarised light.

        Polarisers are used to filter inputs and outputs; the polariser unit
        tests should be run first to ensure any issues can reasonably be
        isolated to the waveplate.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Polariser, 'inPol', ('n1', 'n2'))
        model.add_component(ts.components.Waveplate, 'hwp', ('n3', 'n4'))
        model.add_component(ts.components.Polariser, 'outPol', ('n5', 'n6'))
        model.add_component(ts.components.Dump, 'outDump', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n3'))
        model.add_component(ts.components.Stack, 's2', ('n4', 'n5'))
        model.add_component(ts.components.Stack, 'sOut', ('n6', 'n7'))

        model.add_detector('out', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        model.components['hwp'].rotation = np.pi / 4
        model.components['hwp'].retardance = np.pi
        model.components['hwp'].update()

        model.components['inPol'].rotation = 0
        model.components['inPol'].extinction = 0
        model.components['inPol'].loss = 0
        model.components['inPol'].update()

        model.components['outPol'].rotation = np.pi / 2
        model.components['outPol'].extinction = 0
        model.components['outPol'].loss = 0
        model.components['outPol'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].intensity, 1)
    def test_45(self):
        """Test that 45° polarised light passing through an unrotated
        polarising beamsplitter produces S and P polarised beams.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.PolarisingBeamSplitter, 'pbs',
                            ('n1', 'n2', 'n3', 'n4'))
        model.add_component(ts.components.Dump, 'd1', 'n5')
        model.add_component(ts.components.Dump, 'd2', 'n6')
        model.add_component(ts.components.Dump, 'd3', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n5'))
        model.add_component(ts.components.Stack, 's2', ('n3', 'n6'))
        model.add_component(ts.components.Stack, 's3', ('n4', 'n7'))

        model.add_detector('pd1', 'n5', ('amplitude', 'intensity'))
        model.add_detector('pd2', 'n6', ('amplitude', 'intensity'))
        model.add_detector('pd3', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = np.sqrt(2)
        model.components['laser'].amplitude[1] = np.sqrt(2)

        model.components['pbs'].rExtinction = 0
        model.components['pbs'].tExtinction = 0
        model.components['pbs'].rLoss = 0
        model.components['pbs'].tLoss = 0
        model.components['pbs'].theta0 = 0
        model.components['pbs'].theta1 = 0
        model.components['pbs'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['pd1'].amplitudes[0], 0)
        self.assertAlmostEqual(model.detectors['pd1'].amplitudes[1],
                               np.sqrt(2))
        self.assertAlmostEqual(model.detectors['pd2'].amplitudes[0],
                               np.sqrt(2))
        self.assertAlmostEqual(model.detectors['pd2'].amplitudes[1], 0)
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[0], 0)
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[1], 0)
Esempio n. 11
0
    def test_S(self):
        """Test that S polarised light passing through a beamsplitter produces
        two equal intensity S polarised beams.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.BeamSplitter, 'bs',
                            ('n1', 'n2', 'n3', 'n4'))
        model.add_component(ts.components.Dump, 'd1', 'n5')
        model.add_component(ts.components.Dump, 'd2', 'n6')
        model.add_component(ts.components.Dump, 'd3', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n5'))
        model.add_component(ts.components.Stack, 's2', ('n3', 'n6'))
        model.add_component(ts.components.Stack, 's3', ('n4', 'n7'))

        model.add_detector('pd1', 'n5', ('amplitude', 'intensity'))
        model.add_detector('pd2', 'n6', ('amplitude', 'intensity'))
        model.add_detector('pd3', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['pd1'].amplitudes[0], 0)
        self.assertAlmostEqual(
            model.detectors['pd1'].amplitudes[1],
            1 / np.sqrt(2))
        self.assertAlmostEqual(model.detectors['pd2'].amplitudes[0], 0)
        self.assertAlmostEqual(
            model.detectors['pd2'].amplitudes[1],
            1 / np.sqrt(2))
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[0], 0)
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[1], 0)

        self.assertAlmostEqual(model.detectors['pd1'].intensity, 0.5)
        self.assertAlmostEqual(model.detectors['pd2'].intensity, 0.5)
        self.assertAlmostEqual(model.detectors['pd3'].intensity, 0)
    def test_loss(self):
        """Test that 45° polarised light passing through a polarising
        beamsplitter with 10% intensity loss for the reflected beam and 20%
        loss for the transmitted beam results in the correct output intensity.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.PolarisingBeamSplitter, 'pbs',
                            ('n1', 'n2', 'n3', 'n4'))
        model.add_component(ts.components.Dump, 'd1', 'n5')
        model.add_component(ts.components.Dump, 'd2', 'n6')
        model.add_component(ts.components.Dump, 'd3', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n5'))
        model.add_component(ts.components.Stack, 's2', ('n3', 'n6'))
        model.add_component(ts.components.Stack, 's3', ('n4', 'n7'))

        model.add_detector('pd1', 'n5', ('amplitude', 'intensity'))
        model.add_detector('pd2', 'n6', ('amplitude', 'intensity'))
        model.add_detector('pd3', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 1
        model.components['laser'].amplitude[1] = 1

        model.components['pbs'].rExtinction = 0
        model.components['pbs'].tExtinction = 0
        model.components['pbs'].sLoss = 0.9
        model.components['pbs'].pLoss = 0.8
        model.components['pbs'].theta0 = 0
        model.components['pbs'].theta1 = 0
        model.components['pbs'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['pd1'].intensity, 0.9)
        self.assertAlmostEqual(model.detectors['pd2'].intensity, 0.8)
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[0], 0)
        self.assertAlmostEqual(model.detectors['pd3'].amplitudes[1], 0)
    def test_theta1(self):
        """ Test that S polarised light passing through a polarising beam
        splitter (from the first node) rotated by 45° about the axis from the
        first to the third node results in an even distribution of light in
        both outputs.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.PolarisingBeamSplitter, 'pbs',
                            ('n1', 'n2', 'n3', 'n4'))
        model.add_component(ts.components.Dump, 'd1', 'n5')
        model.add_component(ts.components.Dump, 'd2', 'n6')
        model.add_component(ts.components.Dump, 'd3', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n2'))
        model.add_component(ts.components.Stack, 's1', ('n1', 'n5'))
        model.add_component(ts.components.Stack, 's2', ('n3', 'n6'))
        model.add_component(ts.components.Stack, 's3', ('n4', 'n7'))

        model.add_detector('pd1', 'n5', ('amplitude', 'intensity'))
        model.add_detector('pd2', 'n6', ('amplitude', 'intensity'))
        model.add_detector('pd3', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        model.components['pbs'].rExtinction = 0
        model.components['pbs'].tExtinction = 0
        model.components['pbs'].rLoss = 0
        model.components['pbs'].tLoss = 0
        model.components['pbs'].theta0 = 0
        model.components['pbs'].theta1 = np.pi / 4
        model.components['pbs'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['pd1'].intensity, 0.5)
        self.assertAlmostEqual(model.detectors['pd2'].intensity, 0)
        self.assertAlmostEqual(model.detectors['pd3'].intensity, 0.5)
Esempio n. 14
0
    def test_rot(self):
        """Test that S polarised light passing through a Faraday rotator with a
        rotation of 45° results in light polarised at 45°.
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Polariser, 'inPol', ('n1', 'n2'))
        model.add_component(ts.components.FaradayRotator, 'fr', ('n3', 'n4'))
        model.add_component(ts.components.Polariser, 'outPol', ('n5', 'n6'))
        model.add_component(ts.components.Dump, 'outDump', 'n7')

        model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
        model.add_component(ts.components.Stack, 's1', ('n2', 'n3'))
        model.add_component(ts.components.Stack, 's2', ('n4', 'n5'))
        model.add_component(ts.components.Stack, 'sOut', ('n6', 'n7'))

        model.add_detector('out', 'n7', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        model.components['fr'].rotation = np.pi / 4
        model.components['fr'].update()

        model.components['inPol'].rotation = 0
        model.components['inPol'].extinction = 0
        model.components['inPol'].loss = 0
        model.components['inPol'].update()

        model.components['outPol'].rotation = np.pi / 4
        model.components['outPol'].extinction = 0
        model.components['outPol'].loss = 0
        model.components['outPol'].update()

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].intensity, 1)
Esempio n. 15
0
###
#   This script produces Figure 7 in "Polarisation-sensitive transfer matrix
#   modelling for displacement measuring interferometry", A. Bridges, A. Yacoot,
#   T. Kissinger and R. P. Tatam.
#
#   Last updated by Angus Bridges, 24/03/2020.
###

import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
import strapy as ts
import pyctmm

model = ts.Model()

model.add_component(ts.components.Source, 'laser', 'n0')
model.add_component(ts.components.Stack, 'sIn', ('n0', 'n1'))
model.add_component(ts.components.PolarisingBeamSplitter, 'pbs', \
    ('n1', 'n2', 'n3', 'n4'))
model.add_component(ts.components.Stack, 'sRefA', ('n2', 'n5'))
model.add_component(ts.components.Waveplate, 'qwpRef', ('n5', 'n6'))
model.add_component(ts.components.Stack, 'sRefB', ('n6', 'n7'))
model.add_component(ts.components.Mirror, 'mRef', 'n7')
model.add_component(ts.components.Stack, 'sMesA', ('n3', 'n8'))
model.add_component(ts.components.Waveplate, 'qwpMes', ('n8', 'n9'))
model.add_component(ts.components.Stack, 'sMesB', ('n9', 'n10'))
model.add_component(ts.components.Mirror, 'mMes', 'n10')
model.add_component(ts.components.Stack, 'sOutA', ('n4', 'n11'))
model.add_component(ts.components.BeamSplitter, 'npbs', \
    ('n11', 'n12', 'n13', 'nNPBSdumpA'))
Esempio n. 16
0
    def test_set_pyctmm_free_space(self):
        """Test that the set_ctmm method produces the correct results.

        This does not aim to fully test the pyctmm library, but tests a few
        simple cases:
            phase change through free space
            reflection from air-glass interface
            destructive interference at air-glass interface (half-wave layer)
        """

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Dump, 'dump', 'n1')

        model.add_component(ts.components.Stack, 'stack', ('n0', 'n1'))

        model.add_detector('out', 'n1', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        cstack = pyctmm.create_stack(1, model.wavelength, 0)

        pyctmm.set_ind(cstack, 0, 1, 0)
        pyctmm.set_d(cstack, 0, model.wavelength / 4)

        model.components['stack'].set_pyctmm(cstack)

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['out'].amplitudes[0], 0)
        self.assertAlmostEqual(model.detectors['out'].amplitudes[1],
                               np.exp(-1j * np.pi / 2))
        self.assertAlmostEqual(model.detectors['out'].amplitudes[2], 0)
        self.assertAlmostEqual(model.detectors['out'].amplitudes[3], 0)

        del cstack
        del model

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Dump, 'dump', 'n1')

        model.add_component(ts.components.Stack, 'stack', ('n0', 'n1'))

        model.add_detector('in', 'n0', ('amplitude', 'intensity'))
        model.add_detector('out', 'n1', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        cstack = pyctmm.create_stack(2, model.wavelength, 0)

        pyctmm.set_ind(cstack, 0, 1, 0)
        pyctmm.set_ind(cstack, 1, 1.5, 0)
        pyctmm.set_d(cstack, 0, 0)
        pyctmm.set_d(cstack, 1, 0)

        model.components['stack'].set_pyctmm(cstack)

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['in'].intensity - 1,
                               ((1 - 1.5) / (1 + 1.5))**2)

        del cstack
        del model

        model = ts.Model()
        model.wavelength = 633e-9

        model.add_component(ts.components.Source, 'laser', 'n0')
        model.add_component(ts.components.Dump, 'dump', 'n1')

        model.add_component(ts.components.Stack, 'stack', ('n0', 'n1'))

        model.add_detector('in', 'n0', ('amplitude', 'intensity'))
        model.add_detector('out', 'n1', ('amplitude', 'intensity'))

        model.components['laser'].amplitude[0] = 0
        model.components['laser'].amplitude[1] = 1

        cstack = pyctmm.create_stack(3, model.wavelength, 0)

        pyctmm.set_ind(cstack, 0, 1, 0)
        pyctmm.set_ind(cstack, 1, 1.515, 0)
        pyctmm.set_ind(cstack, 2, 1, 0)
        pyctmm.set_d(cstack, 0, 0)
        pyctmm.set_d(cstack, 1, (model.wavelength / 1.515) / 2)
        pyctmm.set_d(cstack, 2, 0)

        model.components['stack'].set_pyctmm(cstack)

        model.build()
        model.evaluate()

        self.assertAlmostEqual(model.detectors['in'].intensity - 1, 0)
        self.assertAlmostEqual(model.detectors['out'].intensity, 1)
Esempio n. 17
0
except:
    print("\nmatplotlib is not installed, install now (y/n)?")
    installFlag = input()

    if installFlag == 'y':
        import subprocess
        import sys
        subprocess.check_call(
            [sys.executable, "-m", "pip", "install", "matplotlib"])
    try:
        from matplotlib import pyplot as plt
    except:
        print("matplotlib is still not installed, exiting.\n")
        exit()

model = strapy.Model()

model.add_component(strapy.components.Source, 'laser', 'n0')
model.add_component(strapy.components.BeamSplitter, 'BS',
                    ('n1', 'n2', 'n3', 'n4'))
model.add_component(strapy.components.Mirror, 'Mmes', 'n5')
model.add_component(strapy.components.Mirror, 'Mref', 'n6')
model.add_component(strapy.components.Polariser, 'pol', ('n7', 'n8'))
model.add_component(strapy.components.Stack, 's01', ('n0', 'n1'))
model.add_component(strapy.components.Stack, 's35', ('n3', 'n5'))
model.add_component(strapy.components.Stack, 's26', ('n2', 'n6'))
model.add_component(strapy.components.Stack, 's47', ('n4', 'n7'))
model.add_component(strapy.components.Stack, 's89', ('n8', 'n9'))
model.add_component(strapy.components.Dump, 'd9', 'n9')

model.add_detector('PD1', 'n9', ('amplitude', 'intensity'))