0. Another 'brute force' method of removing TT data. This time we remove the TT infomation from the DM voltages: 1. summary: // cal temp primary out delta_drive[a] = pr_sign * lp->data.inverse[a][s] * signal[s] temp_primary_out[a] = lp->data.primary_out[a] + (lp->data.delta_drive[a] * lp->parm.pr_gain) // take out tilt-from using temp primary_out. tt_dd[a] = tt_sign * ttdm_inverse[a][s] * temp_primary_out[s] pr_out_tt[s] = input_imat[s][a] * tt_dd[a]; temp_primary_out[a] = temp_primary_out[a] - (pr_out_tt[s] * gain2); // output to hardware: primary_out = temp_primary_out[a]; 2. source code: /*------------------------------------------------------------------ ** pr_servo_remove_tt() - performs the primary loop. but first tries ** to remove the tt information from the sigal[s] data. **------------------------------------------------------------------ */ static int pr_servo_remove_tt( lp_shmem_t * lp ) { int a, s; double total, out; float temp_primary_out[AO_NUM_P_ACTUATORS]; float pr_out_tt[AO_NUM_P_ACTUATORS]; float tt_dd[AO_NUM_TT_ACTUATORS]; lp->status.lp_indicator |= 0x02; /****************************************************************** ** cal temp_primary_out[a] ****************************************************************** */ /*-------------------------------------------------------- ** delta_drive[a] = pr_sign * inverse[a][s] * signal[s] ** Note: using modified signal[s] */ for (a=0; adata.inverse[a][s] * lp->data.signal[s]; lp->data.delta_drive[a] = lp->parm.pr_sign * total; } /*-------------------------------------------- ** temp_primary_out[a] = delta_drive[a] * pr_gain */ for( a=0; adata.primary_out[a] + (lp->data.delta_drive[a] * lp->parm.pr_gain); } /****************************************************************** ** try to take out tilt from temp_primary_out[a] ****************************************************************** */ /*--------------------------------------------------------------- ** tt_dd[a] = tt_sign * (ttdm_inverse[a][s] * temp_primary_out[s] ) */ for (a=0; adata.ttdm_inverse[a][s] * temp_primary_out[s]; tt_dd[a] = lp->parm.tt_sign * total; } /*--------------------------------------------------------------- ** pr_out_tt[s] = input_imat[s][a] * tt_dd[a] ** cal pr_out values related only to tiptilt. */ for (s=0; sdata.input_imat[s][a] * tt_dd[a]; pr_out_tt[s] = total; } /*--------------------------------------------------------------- ** temp_primary_out[a] = temp_primary_out[a] - (pr_out_tt[a] * pr_gain2) ** removes tiptilt component from temp_primary_out[a] */ for (a=0; aparm.pr_gain2); } /****************************************************************** * perform primary loop using modified signal[s] ****************************************************************** */ /*-------------------------------------------- ** primary_out[a] = delta_drive[a] * pr_gain */ for( a=0; a