예제 #1
0
def test_REFLI_HARD():
    hard = ctrl.DegreeOfFreedom(HARD, 'pitch')
    hard2 = ctrl.DegreeOfFreedom(HARD, 'pitch', probes='REFL_I')
    tf1 = katTF.getTF('REFL_I', HARD, doftype='pitch')
    tf2 = katTF.getTF('REFL_I', hard)
    tf3 = katTF.getTF(hard2)
    ref = data['tf_REFLI_HARD']
    c1 = close.allclose(tf1, ref)
    c2 = close.allclose(tf2, ref)
    c3 = close.allclose(tf3, ref)
    assert np.all([c1, c2, c3])
예제 #2
0
def test_mech_SOFT2():
    soft = ctrl.DegreeOfFreedom(SOFT, 'pitch')
    tf1 = katTF.getMechTF(SOFT, soft, doftype='pitch')
    tf2 = katTF.getMechTF(soft, SOFT, doftype='pitch')
    ref = data['mech_SOFT']
    c1 = close.allclose(tf1, ref)
    c2 = close.allclose(tf2, ref)
    assert np.all([c1, c2])
예제 #3
0
def test_mMech_EX_EX2():
    ex = ctrl.DegreeOfFreedom('EX', doftype='pitch')
    mMech1 = katTF.getMechMod('EX', ex, doftype='pitch')
    mMech2 = katTF.getMechMod(ex, 'EX', doftype='pitch')
    mMech3 = katTF.getMechMod(ex, ex, doftype='pitch')
    mMech4 = katTF.getMechMod(ex, ex)
    ref = data['mMech_EX_EX']
    c1 = close.allclose(mMech1, ref)
    c2 = close.allclose(mMech2, ref)
    c3 = close.allclose(mMech3, ref)
    c4 = close.allclose(mMech4, ref)
    assert np.all([c1, c2, c3, c4])
예제 #4
0
    ctrl.catzp(ctrl.resRoots(2, 1), ctrl.resRoots(5, 1)),
    ctrl.catzp(0, 0, 0, ctrl.resRoots(0.5, 1), ctrl.resRoots(110, 1)), -1, 20)

filtCARM = filtDARM

filtBS = ctrl.Filter(
    ctrl.catzp(ctrl.resRoots(1, 1), ctrl.resRoots(3, 1)),
    ctrl.catzp(0, 0, 0, ctrl.resRoots(0.3, 1), ctrl.resRoots(90, 1)), -1, 15)

# simple constant feedforward filter
filtFF = ctrl.Filter([], [], -4.98e-3)

# Define control system
cs = ctrl.ControlSystem()

DARM_dof = ctrl.DegreeOfFreedom(DARM, 'pos', probesDARM, 'DARM')
BS_dof = ctrl.DegreeOfFreedom('BS', name='BS', probes=probesBS)

# define degrees of freedom
cs.addDOF(DARM_dof)
cs.addDOF('CARM', probesCARM, CARM)
cs.addDOF(BS_dof)

# define control filters
cs.addFilter('DARM', 'DARM', filtDARM)
cs.addFilter('CARM', 'CARM', filtCARM)
cs.addFilter('BS', 'BS', filtBS)

# add the feedforward
cs.addFilter('DARM', 'BS', ctrl.catfilt(filtFF, filtBS))
예제 #5
0
def test_mMech_IX_EX2():
    ex = ctrl.DegreeOfFreedom('EX', 'pitch')
    ix = ctrl.DegreeOfFreedom('IX', 'pitch')
    mMech = katTF.getMechMod(ix, ex)
    ref = data['mMech_IX_EX']
    assert close.allclose(mMech, ref)
예제 #6
0
def test_mech_HARD2():
    hard = ctrl.DegreeOfFreedom(HARD, 'pitch')
    tf = katTF.getMechTF(hard, hard)
    ref = data['mech_HARD']
    assert close.allclose(tf, ref)
예제 #7
0
    ctrl.catzp(0, 0, 0, ctrl.resRoots(0.5, 1), ctrl.resRoots(110, 1)), -1, 20)

filtCARM = filtDARM

filtBS = ctrl.Filter(
    ctrl.catzp(ctrl.resRoots(1, 1), ctrl.resRoots(3, 1)),
    ctrl.catzp(0, 0, 0, ctrl.resRoots(0.3, 1), ctrl.resRoots(90, 1)), -1, 15)

# simple constant feedforward filter
filtFF = ctrl.Filter([], [], 4.98e-3)

# Define control system
cs = ctrl.ControlSystem()

# define degrees of freedom
cs.addDOF(ctrl.DegreeOfFreedom(DARM, 'pos', probesDARM, 'DARM'))
cs.addDOF(ctrl.DegreeOfFreedom(CARM, probes=probesCARM, name='CARM'))
cs.addDOF('BS', probesBS, 'BS')

# define control filters
cs.addFilter('DARM', 'DARM', filtDARM)
cs.addFilter('CARM', 'CARM', filtCARM)
cs.addFilter('BS', 'BS', filtBS)

# add the feedforward
cs.addFilter('DARM', 'BS', ctrl.catfilt(filtFF, filtBS))

# set the optomechanical plant
cs.setOptomechanicalPlant(opt)

# compensation