
! *** OPTICS=AD_ACCEL-11APR24s ***

! XLEAP-II optics

! ==============================================================================
! Modification History
! ------------------------------------------------------------------------------
! 07-APR-2024, M. Woodley
!  * remove UMXL2; move WIGXLH from SXR cell 18 to UMXL2 location
! ------------------------------------------------------------------------------

  KmaxQA := 150.00/(Brhof*LQA) !max |K1| @ Ef for 1.26Q12
  KmaxQE := 100.00/(Brhof*LQE) !max |K1| @ Ef for 1.085Q4.31
  KmaxQx :=  20.00/(Brhof*LQx) !max |K1| @ Ef for 1.26Q3.5

! ------------------------------------------------------------------------------

  SETXL_4GeV : SUBROUTINE
    SET, Ef, 4.0 ; SET, Eu, Ef
   !COMMENT !turn on UMXL1 (default)
      SET, R11XL1,  1.098929204922070
      SET, R12XL1,  1.719551869522400
      SET, R21XL1,  0.120755530037211
      SET, R22XL1,  1.098929204922070
      SET, R33XL1,  0.904229208659358
      SET, R34XL1,  1.611499871655030
      SET, R43XL1, -0.113167578486975
      SET, R44XL1,  0.904229208659358
     !comment !UMXL1 on; WIGXL on (default)
        SET, SETXL2WIG, 1
        SET, KQVM3B,  0.956858426517
        SET, KQVM4B, -1.258726626248
        SET, KQEM1B,  1.13498903608 
        SET, KQEM2B, -1.973605345053
        SET, KQEM3B,  1.331299697231
        SET, KQEM4B, -1.754833260497
        SET, KQE31B,  1.277595256176
        SET, KQFXL1,  1.090422741721
     !endcomment
      comment !UMXL1 on; WIGXL off
        SET, SETXL2WIG,  0
        SET, KQVM3B,  0.996734578956
        SET, KQVM4B, -1.267896202723
        SET, KQEM1B,  1.131536978222 
        SET, KQEM2B, -1.97159983606
        SET, KQEM3B,  1.260166289809
        SET, KQEM4B, -1.412266238303
        SET, KQE31B,  1.26102962501
        SET, KQFXL1,  1.065943150536
      endcomment
   !ENDCOMMENT
   !COMMENT !turn on UMXL3 and UMXL4 (default)
      SET, R11XL3,  1.098929204922070 ; SET, R11XL4, R11XL3
      SET, R12XL3,  1.719551869522400 ; SET, R12XL4, R12XL3
      SET, R21XL3,  0.120755530037211 ; SET, R21XL4, R21XL3
      SET, R22XL3,  1.098929204922070 ; SET, R22XL4, R22XL3
      SET, R33XL3,  0.904229208659358 ; SET, R33XL4, R33XL3
      SET, R34XL3,  1.611499871655030 ; SET, R34XL4, R34XL3
      SET, R43XL3, -0.113167578486975 ; SET, R43XL4, R43XL3
      SET, R44XL3,  0.904229208659358 ; SET, R44XL4, R44XL3
     !comment !UMXL3 and UMXL4 on; BCXXL self-seeding chicane on (default)
        SET, SETXL2SS, 1
        SET, KQE36B,  0.464496912086
        SET, KQFXL2,  3.389084494844
        SET, KQUM1B, -1.30389523291
        SET, KQUM2B,  1.028797335744
        SET, KQUM3B,  0.36629793601
        SET, KQUM4B, -0.495969051676
     !endcomment
      comment !UMXL3 and UMXL4 on; BCXXL self-seeding chicane off
        SET, SETXL2SS, 0
        SET, KQE36B,  0.464496912086
        SET, KQFXL2,  3.389084494844
        SET, KQUM1B, -1.309017694829
        SET, KQUM2B,  1.015728468219
        SET, KQUM3B,  0.401936147268
        SET, KQUM4B, -0.528966731815
      endcomment
   !ENDCOMMENT
  ENDSUBROUTINE

! ------------------------------------------------------------------------------

  MXL01 : SUBROUTINE !match into XLEAP-II
    BEAM, ENERGY=Ei
    USE, SC_SXRi
    VALUE, KQVM3B,KQVM4B,KQEM1B,KQEM2B,KQEM3B,KQEM4B,KQE31B,KQFXL1
    MATCH, BETA0=TWSSi
      VARY, KQVM3B, STEP=1.E-6, LOWER=-KmaxQA, UPPER=+KmaxQA
      VARY, KQVM4B, STEP=1.E-6, LOWER=-KmaxQA, UPPER=+KmaxQA
      VARY, KQEM1B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
      VARY, KQEM2B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
      VARY, KQEM3B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
      VARY, KQEM4B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
      VARY, KQE31B, STEP=1.E-6, LOWER=-0.95*KmaxQx, UPPER=+0.95*KmaxQx
      VARY, KQFXL1, STEP=1.E-6, LOWER=0, UPPER=+KmaxQE
      CONSTR, QEM2B[1], BETY<90
      CONSTR, QEM3B[1], BETX<90
      CONSTR, QFXL1[1], BETX<90
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0
      CONSTR, QE32B[1], LINE=ECELLb2
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
      LMDIF, TOL=1.E-20
      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQVM3B,KQVM4B,KQEM1B,KQEM2B,KQEM3B,KQEM4B,KQE31B,KQFXL1
    TWISS, BETA0=TWSSi, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=MM1B/WS34B, &
      STYLE=100, SPLINE, FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=VBOUTB/WS34B, &
      STYLE=100, SPLINE, FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=VBOUTB/MBLMS48, &
      STYLE=100, SPLINE, FILE="match"
  ENDSUBROUTINE

  MXL02 : SUBROUTINE !match XLEAP-II into UNDS
    BEAM, ENERGY=Ei
    USE, SC_SXRi
    VALUE, KQFXL2,KQE36B,KQUM1B,KQUM2B,KQUM3B,KQUM4B
    MATCH, BETA0=TWSSi
      VARY, KQUM1B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
      VARY, KQUM2B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
      VARY, KQUM3B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
      VARY, KQUM4B, STEP=1.E-6, LOWER=-KmaxQE, UPPER=+KmaxQE
     !VARY, KQE36B, STEP=1.E-6, LOWER=-KmaxQx, UPPER=+KmaxQx
      WEIGHT, X=0, PX=0, BETX=1, ALFX=0, DX=0, DPX=0, &
              Y=0, PY=0, BETY=1, ALFY=0, DY=0, DPY=0, &
              T=0, PT=0
      COUPLE, MUQS[1]/MUQS[3]
      COUPLE, MUQS[2]/MUQS[4]
      COUPLE, MUQS[1]/MUQS[5]
      COUPLE, MUQS[2]/MUQS[6]
      COUPLE, MUQS[1]/MUQS[7]
      COUPLE, MUQS[2]/MUQS[8]
      COUPLE, MUQS[1]/MUQS[9]
      COUPLE, MUQS[2]/MUQS[10]
      COUPLE, MUQS[1]/MUQS[11]
      COUPLE, MUQS[2]/MUQS[12]
      COUPLE, MUQS[1]/MUQS[13]
      COUPLE, MUQS[2]/MUQS[14]
      COUPLE, MUQS[1]/MUQS[15]
      COUPLE, MUQS[2]/MUQS[16]
      COUPLE, MUQS[1]/MUQS[17]
      COUPLE, MUQS[2]/MUQS[18]
      COUPLE, MUQS[1]/MUQS[19]
      COUPLE, MUQS[2]/MUQS[20]
      COUPLE, MUQS[1]/MUQS[21]
      LMDIF, TOL=1.E-20
      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQFXL2,KQE36B,KQUM1B,KQUM2B,KQUM3B,KQUM4B
    PRINT, FULL
    TWISS, BETA0=TWSSi, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE, RANGE=QE32B[1]/MBLMS48, FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE, RANGE=MM1B/MBLMS48, FILE="match"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------

! to run XLEAP-II optics, uncomment the SUBROUTINE(s) with the desired
! undulator(s) turned on (UMXL1 and/or UMXL3&UMXL4); within the selected
! SUBROUTINE(s), turn on WIGXL and/or BCXLSS chicane

  SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
  SETXL_4GeV

 !MXL01
 !MXL02

 !COMMENT !SXR from SC linac (XLEAP-II)
    ASSIGN, PRINT="LCLS2scS-XL2.print"
    BEAM, ENERGY=Ei
    USE, SC_SXRi
    PRINT, FULL
    TWISS, BETA0=TWSSi, SAVE, TAPE="LCLS2scS-XL2_twiss.tape" !, &
   !  RTAPE="LCLS2scS-XL2_rmat.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE, RANGE=MM1B/MBLMS48, FILE="LCLS2scS-XL2", &
      TITLE="XLEAP-II (from SC linac): LTUS-UNDS"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE, RANGE=MBLMS48/#E, FILE="LCLS2scS-XL2", &
      TITLE="XLEAP-II (from SC linac): DMPS"
 !ENDCOMMENT

! ------------------------------------------------------------------------------

  STOP
  
