diff --git a/src/mad_dynmap.cpp b/src/mad_dynmap.cpp index 2bc6f60e7..d151161d5 100644 --- a/src/mad_dynmap.cpp +++ b/src/mad_dynmap.cpp @@ -361,18 +361,19 @@ inline void changeref (cflw &m, num_t lw) mdump(0); lw *= m.sdir; + // (y/x/s)rotation maps do lw*tdir, so to get the same result as in lua we muliply by sdir if (rot && lw > 0) { - yrotation(m, m.edir, zero); - xrotation(m, -m.edir, zero); - srotation(m, m.edir, zero); + yrotation(m, m.sdir, zero); + xrotation(m, -m.sdir, zero); + srotation(m, m.sdir, zero); } if (trn) translate(m, 1, zero, zero, zero); if (rot && lw < 0) { - srotation(m, -m.edir, zero); - xrotation(m, m.edir, zero); - yrotation(m, -m.edir, zero); + srotation(m, -m.sdir, zero); + xrotation(m, m.sdir, zero); + yrotation(m, -m.sdir, zero); } mdump(1); } @@ -1509,63 +1510,63 @@ inline void rfcav_fringe (cflw &m, num_t lw) // --- patches --- -void mad_trk_xrotation_r (mflw_t *m, num_t lw) { +void mad_trk_xrotation_r (mflw_t *m, num_t lw, int _) { xrotation(m->rflw, lw, zero); } -void mad_trk_yrotation_r (mflw_t *m, num_t lw) { +void mad_trk_yrotation_r (mflw_t *m, num_t lw, int _) { yrotation(m->rflw, lw, zero); } -void mad_trk_srotation_r (mflw_t *m, num_t lw) { +void mad_trk_srotation_r (mflw_t *m, num_t lw, int _) { srotation(m->rflw, lw, zero); } -void mad_trk_translate_r (mflw_t *m, num_t lw) { +void mad_trk_translate_r (mflw_t *m, num_t lw, int _) { translate(m->rflw, lw, zero, zero, zero); } -void mad_trk_changeref_r (mflw_t *m, num_t lw) { +void mad_trk_changeref_r (mflw_t *m, num_t lw, int _) { changeref(m->rflw, lw); } -void mad_trk_xrotation_t (mflw_t *m, num_t lw) { +void mad_trk_xrotation_t (mflw_t *m, num_t lw, int _) { xrotation(m->tflw, lw, zero); } -void mad_trk_yrotation_t (mflw_t *m, num_t lw) { +void mad_trk_yrotation_t (mflw_t *m, num_t lw, int _) { yrotation(m->tflw, lw, zero); } -void mad_trk_srotation_t (mflw_t *m, num_t lw) { +void mad_trk_srotation_t (mflw_t *m, num_t lw, int _) { srotation(m->tflw, lw, zero); } -void mad_trk_translate_t (mflw_t *m, num_t lw) { +void mad_trk_translate_t (mflw_t *m, num_t lw, int _) { translate(m->tflw, lw, zero, zero, zero); } -void mad_trk_changeref_t (mflw_t *m, num_t lw) { +void mad_trk_changeref_t (mflw_t *m, num_t lw, int _) { changeref(m->tflw, lw); } -void mad_trk_xrotation_p (mflw_t *m, num_t lw) { +void mad_trk_xrotation_p (mflw_t *m, num_t lw, int _) { xrotation(m->pflw, lw, zero); } -void mad_trk_yrotation_p (mflw_t *m, num_t lw) { +void mad_trk_yrotation_p (mflw_t *m, num_t lw, int _) { yrotation(m->pflw, lw, zero); } -void mad_trk_srotation_p (mflw_t *m, num_t lw) { +void mad_trk_srotation_p (mflw_t *m, num_t lw, int _) { srotation(m->pflw, lw, zero); } -void mad_trk_translate_p (mflw_t *m, num_t lw) { +void mad_trk_translate_p (mflw_t *m, num_t lw, int _) { translate(m->pflw, lw, zero, zero, zero); } -void mad_trk_changeref_p (mflw_t *m, num_t lw) { +void mad_trk_changeref_p (mflw_t *m, num_t lw, int _) { changeref(m->pflw, lw); } // --- misalignment --- -void mad_trk_misalign_r (mflw_t *m, num_t lw) { +void mad_trk_misalign_r (mflw_t *m, num_t lw, int _) { misalign(m->rflw, lw); } -void mad_trk_misalign_t (mflw_t *m, num_t lw) { +void mad_trk_misalign_t (mflw_t *m, num_t lw, int _) { misalign(m->tflw, lw); } -void mad_trk_misalign_p (mflw_t *m, num_t lw) { +void mad_trk_misalign_p (mflw_t *m, num_t lw, int _) { misalign(m->pflw, lw); } diff --git a/src/mad_dynmap.h b/src/mad_dynmap.h index 569ddb569..0510826d6 100644 --- a/src/mad_dynmap.h +++ b/src/mad_dynmap.h @@ -39,28 +39,28 @@ void mad_trk_slice_tpt (mflw_t *m, num_t lw, trkfun *dft, trkfun *kck, int knd); void mad_trk_slice_one (mflw_t *m, num_t lw, trkfun *dft_or_kck); // single // -- patches -void mad_trk_xrotation_r (mflw_t *m, num_t lw); -void mad_trk_yrotation_r (mflw_t *m, num_t lw); -void mad_trk_srotation_r (mflw_t *m, num_t lw); -void mad_trk_translate_r (mflw_t *m, num_t lw); -void mad_trk_changeref_r (mflw_t *m, num_t lw); - -void mad_trk_xrotation_t (mflw_t *m, num_t lw); -void mad_trk_yrotation_t (mflw_t *m, num_t lw); -void mad_trk_srotation_t (mflw_t *m, num_t lw); -void mad_trk_translate_t (mflw_t *m, num_t lw); -void mad_trk_changeref_t (mflw_t *m, num_t lw); - -void mad_trk_xrotation_p (mflw_t *m, num_t lw); -void mad_trk_yrotation_p (mflw_t *m, num_t lw); -void mad_trk_srotation_p (mflw_t *m, num_t lw); -void mad_trk_translate_p (mflw_t *m, num_t lw); -void mad_trk_changeref_p (mflw_t *m, num_t lw); +void mad_trk_xrotation_r (mflw_t *m, num_t lw, int _); +void mad_trk_yrotation_r (mflw_t *m, num_t lw, int _); +void mad_trk_srotation_r (mflw_t *m, num_t lw, int _); +void mad_trk_translate_r (mflw_t *m, num_t lw, int _); +void mad_trk_changeref_r (mflw_t *m, num_t lw, int _); + +void mad_trk_xrotation_t (mflw_t *m, num_t lw, int _); +void mad_trk_yrotation_t (mflw_t *m, num_t lw, int _); +void mad_trk_srotation_t (mflw_t *m, num_t lw, int _); +void mad_trk_translate_t (mflw_t *m, num_t lw, int _); +void mad_trk_changeref_t (mflw_t *m, num_t lw, int _); + +void mad_trk_xrotation_p (mflw_t *m, num_t lw, int _); +void mad_trk_yrotation_p (mflw_t *m, num_t lw, int _); +void mad_trk_srotation_p (mflw_t *m, num_t lw, int _); +void mad_trk_translate_p (mflw_t *m, num_t lw, int _); +void mad_trk_changeref_p (mflw_t *m, num_t lw, int _); // -- misalign -void mad_trk_misalign_r (mflw_t *m, num_t lw); -void mad_trk_misalign_t (mflw_t *m, num_t lw); -void mad_trk_misalign_p (mflw_t *m, num_t lw); +void mad_trk_misalign_r (mflw_t *m, num_t lw, int _); +void mad_trk_misalign_t (mflw_t *m, num_t lw, int _); +void mad_trk_misalign_p (mflw_t *m, num_t lw, int _); // -- fringe maps void mad_trk_strex_fringe_r (mflw_t *m, num_t lw); diff --git a/src/madl_cmad.mad b/src/madl_cmad.mad index 7205a0e4b..c6e0b27ad 100644 --- a/src/madl_cmad.mad +++ b/src/madl_cmad.mad @@ -926,31 +926,31 @@ void mad_trk_slice_dkd (mflw_t *m, num_t lw, trkfun *dft, trkfun *kck, int ord); void mad_trk_slice_tkt (mflw_t *m, num_t lw, trkfun *dft, trkfun *kck, int ord); void mad_trk_slice_kmk (mflw_t *m, num_t lw, trkfun *dft, trkfun *kck, int ord); void mad_trk_slice_tpt (mflw_t *m, num_t lw, trkfun *dft, trkfun *kck, int knd); -void mad_trk_slice_one (mflw_t *m, num_t lw, trkfun *dft); +void mad_trk_slice_one (mflw_t *m, num_t lw, trkfun *dft_or_kck); // -- patches -void mad_trk_xrotation_r (mflw_t *m, num_t lw); -void mad_trk_yrotation_r (mflw_t *m, num_t lw); -void mad_trk_srotation_r (mflw_t *m, num_t lw); -void mad_trk_translate_r (mflw_t *m, num_t lw); -void mad_trk_changeref_r (mflw_t *m, num_t lw); - -void mad_trk_xrotation_t (mflw_t *m, num_t lw); -void mad_trk_yrotation_t (mflw_t *m, num_t lw); -void mad_trk_srotation_t (mflw_t *m, num_t lw); -void mad_trk_translate_t (mflw_t *m, num_t lw); -void mad_trk_changeref_t (mflw_t *m, num_t lw); - -void mad_trk_xrotation_p (mflw_t *m, num_t lw); -void mad_trk_yrotation_p (mflw_t *m, num_t lw); -void mad_trk_srotation_p (mflw_t *m, num_t lw); -void mad_trk_translate_p (mflw_t *m, num_t lw); -void mad_trk_changeref_p (mflw_t *m, num_t lw); +void mad_trk_xrotation_r (mflw_t *m, num_t lw, int _); +void mad_trk_yrotation_r (mflw_t *m, num_t lw, int _); +void mad_trk_srotation_r (mflw_t *m, num_t lw, int _); +void mad_trk_translate_r (mflw_t *m, num_t lw, int _); +void mad_trk_changeref_r (mflw_t *m, num_t lw, int _); + +void mad_trk_xrotation_t (mflw_t *m, num_t lw, int _); +void mad_trk_yrotation_t (mflw_t *m, num_t lw, int _); +void mad_trk_srotation_t (mflw_t *m, num_t lw, int _); +void mad_trk_translate_t (mflw_t *m, num_t lw, int _); +void mad_trk_changeref_t (mflw_t *m, num_t lw, int _); + +void mad_trk_xrotation_p (mflw_t *m, num_t lw, int _); +void mad_trk_yrotation_p (mflw_t *m, num_t lw, int _); +void mad_trk_srotation_p (mflw_t *m, num_t lw, int _); +void mad_trk_translate_p (mflw_t *m, num_t lw, int _); +void mad_trk_changeref_p (mflw_t *m, num_t lw, int _); // -- misalign -void mad_trk_misalign_r (mflw_t *m, num_t lw); -void mad_trk_misalign_t (mflw_t *m, num_t lw); -void mad_trk_misalign_p (mflw_t *m, num_t lw); +void mad_trk_misalign_r (mflw_t *m, num_t lw, int _); +void mad_trk_misalign_t (mflw_t *m, num_t lw, int _); +void mad_trk_misalign_p (mflw_t *m, num_t lw, int _); // -- fringe maps void mad_trk_strex_fringe_r (mflw_t *m, num_t lw); diff --git a/src/madl_etrck.mad b/src/madl_etrck.mad index 9701561d3..2f8a3a5b9 100644 --- a/src/madl_etrck.mad +++ b/src/madl_etrck.mad @@ -523,16 +523,16 @@ end local function crot (elm, m, dir) if m.cmap then - m.cflw.tlt = m.tlt - map[m.cmap][srotation](m.cflw_, dir) + m.cflw.dpsi = m.tlt*m.tdir -- dpsi is tilted in the cmap + map[m.cmap][srotation](m.cflw_, dir, 0) else - srotation(elm, m, dir) + srotation(elm, m, dir, m.tlt) end end local function cmisalign (elm, m, dir) if m.cmap then - map[m.cmap][misalign](m.cflw_, dir) + map[m.cmap][misalign](m.cflw_, dir, 0) else misalign(elm, m, dir) end @@ -707,11 +707,17 @@ local function track_marker (elm, m) trackone(elm, m, thinonly, fnil) end +local rot_angles = { + [yrotation] = "dthe", + [xrotation] = "dphi", + [srotation] = "dpsi", +} + local function track_rotation (elm, m, rot) m.ang = elm.angle if m.cmap then - m.cflw.ang = m.ang + m.cflw[rot_angles[rot]] = m.ang end trackone(elm, m, thinonly, rot)