8#ifndef _wooferTweeterDM_hpp__
9#define _wooferTweeterDM_hpp__
22struct wooferTweeterDMSpec
25 std::string basisName;
27 deformableMirrorSpec woofer;
28 deformableMirrorSpec tweeter;
39template <
typename floatT>
44 Eigen::Array<floatT, Eigen::Dynamic, Eigen::Dynamic>
wooferVect;
48 Eigen::Array<floatT, Eigen::Dynamic, Eigen::Dynamic>
tweeterVect;
51template <
typename _
floatT>
55 typedef _floatT floatT;
57 typedef std::complex<floatT> complexT;
63 typedef Eigen::Array<floatT, Eigen::Dynamic, Eigen::Dynamic> imageT;
65 typedef wooferTweeterDMSpec specT;
70 deformableMirror<floatT> woofer;
71 deformableMirror<floatT> tweeter;
76 std::string _basisName;
82 int initialize( specT &spec,
const std::string &pupil );
86 void calAmp( floatT ca );
88 void applyMode( wavefrontT &wf,
int modeNo, floatT amp, floatT lambda );
90 template <
typename commandT>
91 void setShape( commandT &commandV );
93 void applyShape( wavefrontT &wf, floatT lambda );
97 return woofer.nModes() + tweeter.nModes();
100 double t0, t1, t_mm, t_sum;
106 std::string basisName()
112template <
typename _
floatT>
113wooferTweeterDM<_floatT>::wooferTweeterDM()
115 ds9_interface_set_title( &woofer.ds9i_shape,
"Woofer_Shape" );
116 ds9_interface_set_title( &woofer.ds9i_phase,
"Woofer_Phase" );
117 ds9_interface_set_title( &woofer.ds9i_acts,
"Woofer_Acts" );
118 ds9_interface_set_title( &tweeter.ds9i_shape,
"Tweeter_Shape" );
119 ds9_interface_set_title( &tweeter.ds9i_phase,
"Tweeter_Phase" );
120 ds9_interface_set_title( &tweeter.ds9i_acts,
"Tweeter_Acts" );
126template <
typename _
floatT>
127int wooferTweeterDM<_floatT>::initialize( specT &spec,
const std::string &pupil )
131 _basisName = spec.basisName;
133 woofer.initialize( spec.woofer, pupil );
135 tweeter.initialize( spec.tweeter, pupil );
137 _wooferModes = spec.wooferModes;
147template <
typename _
floatT>
148void wooferTweeterDM<_floatT>::calAmp( _floatT ca )
151 tweeter.calAmp( ca );
154template <
typename _
floatT>
155void wooferTweeterDM<_floatT>::applyMode( wavefrontT &wf,
int modeNo, floatT amp, floatT lambda )
158 if( modeNo < _wooferModes )
160 woofer.applyMode( wf, modeNo, amp, lambda );
164 tweeter.applyMode( wf, modeNo - _wooferModes, amp, lambda );
168template <
typename _
floatT>
169template <
typename commandT>
170void wooferTweeterDM<_floatT>::setShape( commandT &commandV )
173 static commandT avgWoofV;
175 commandT woofV, tweetV;
178 woofV.measurement = commandV.measurement.block( 0, 0, 1, _wooferModes );
179 woofV.iterNo = commandV.iterNo;
185 tweetV.measurement = commandV.measurement.block( 0, _wooferModes, 1, commandV.measurement.cols() - _wooferModes );
186 tweetV.iterNo = commandV.iterNo;
190 woofer.setShape( woofV );
207 tweeter.setShape( tweetV );
227template <
typename _
floatT>
228void wooferTweeterDM<_floatT>::applyShape( wavefrontT &wf, floatT lambda )
231 woofer.applyShape( wf, lambda );
232 tweeter.applyShape( wf, lambda );
Structure containing the phase and amplitude of a wavefront.
A paired command for woofer and tweeter deformable mirrors.
bool tweeter
Whether the tweeter command is active.
bool woofer
Whether the woofer command is active.
Eigen::Array< floatT, Eigen::Dynamic, Eigen::Dynamic > tweeterVect
Tweeter modal command vector.
Eigen::Array< floatT, Eigen::Dynamic, Eigen::Dynamic > wooferVect
Woofer modal command vector.