
! *** 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    (165 A bipolar )
  KmaxQE200 := 102.00/(Brhof*LQE) !max |K1| @ Ef for 1.085Q4.31 (200 A bipolar )
  KmaxQE120 :=  67.00/(Brhof*LQE) !max |K1| @ Ef for 1.085Q4.31 (120 A bipolar )
  KmaxQx    :=  20.00/(Brhof*LQx) !max |K1| @ Ef for 1.26Q3.5   ( 12 A bipolar )
  KmaxQE110 :=  60.00/(Brhof*LQE) !max |K1| @ Ef for 1.085Q4.31 (110 A unipolar)
  KmaxQu    :=  40.00/(Brhof*LQu) !max |K1| @ Ef for 0.433Q3.1  (  6 A bipolar )

 !VALUE, Ef,KmaxQA,KmaxQE200,KmaxQE120,KmaxQx,KmaxQE110,KmaxQu

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

  SETXL_8GeV : SUBROUTINE
    SET, Ef, 8.0 ; SET, Eu, Ef
   !COMMENT !turn on UMXL1 (default)
      SET, R11XL1,  1.024433796036150 
      SET, R12XL1,  1.678538794967410 
      SET, R21XL1,  0.029468846719147 
      SET, R22XL1,  1.024433796036150 
      SET, R33XL1,  0.975763600637818 
      SET, R34XL1,  1.651526938083830 
      SET, R43XL1, -0.028994619806734 
      SET, R44XL1,  0.975763600637818 
     !comment !UMXL1 on; WIGXL on (default)
        SET, SETXL2WIG, 1
        SET, KQVM3B,  0.863427867002
        SET, KQVM4B, -1.101535235179
        SET, KQEM1B,  1.806464277548
        SET, KQEM2B, -1.923208377284
        SET, KQEM3B,  1.176242101509
        SET, KQEM4B, -0.236898701321
        SET, KQE31B, -0.544533670079
        SET, KQFXL1,  1.132540574556
     !endcomment
      comment !UMXL1 on; WIGXL off
        SET, SETXL2WIG, 0
        SET, KQVM3B,  0.873170707561
        SET, KQVM4B, -1.099924454134
        SET, KQEM1B,  1.826689501
        SET, KQEM2B, -1.927814229769
        SET, KQEM3B,  1.173398514133
        SET, KQEM4B, -0.255265864423
        SET, KQE31B, -0.53680388464
        SET, KQFXL1,  1.104506103341
      endcomment
   !ENDCOMMENT
   !COMMENT !turn on UMXL3 and UMXL4 (default)
      SET, R11XL3,  1.024433796036150 ; SET, R11XL4, R11XL3
      SET, R12XL3,  1.678538794967410 ; SET, R12XL4, R12XL3
      SET, R21XL3,  0.029468846719147 ; SET, R21XL4, R21XL3
      SET, R22XL3,  1.024433796036150 ; SET, R22XL4, R22XL3
      SET, R33XL3,  0.975763600637818 ; SET, R33XL4, R33XL3
      SET, R34XL3,  1.651526938083830 ; SET, R34XL4, R34XL3
      SET, R43XL3, -0.028994619806734 ; SET, R43XL4, R43XL3
      SET, R44XL3,  0.975763600637818 ; SET, R44XL4, R44XL3
     !comment !UMXL3 and UMXL4 on; BCXXL self-seeding chicane on (default)
        SET, SETXL2SS, 1
        SET, KQFXL2,  0.80795621658
        SET, KQE36B, -0.076017918061
        SET, KQUM1B,  0.436004465553
        SET, KQUM2B, -0.384828858011
        SET, KQUM3B,  0.386916603682
        SET, KQUM4B, -0.581164562975
     !endcomment
      comment !UMXL3 and UMXL4 on; BCXXL self-seeding chicane off
        SET, SETXL2SS, 0
        SET, KQFXL2,  0.80795621658
        SET, KQE36B, -0.076061233913
        SET, KQUM1B,  0.480582856865
        SET, KQUM2B, -0.44017864195
        SET, KQUM3B,  0.319882398037
        SET, KQUM4B, -0.497182588436
      endcomment
   !ENDCOMMENT
  ENDSUBROUTINE

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

  MXL01 : SUBROUTINE !match into XLEAP-II
    BEAM, ENERGY=E00
    USE, CU_SXR
    VALUE, KQVM3B,KQVM4B,KQEM1B,KQEM2B,KQEM3B,KQEM4B,KQE31B,KQFXL1
    MATCH, BETA0=TWSSC
      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=-KmaxQE200, UPPER=+KmaxQE200
      VARY, KQEM2B, STEP=1.E-6, LOWER=-KmaxQE200, UPPER=+KmaxQE200
      VARY, KQEM3B, STEP=1.E-6, LOWER=-KmaxQE120, UPPER=+KmaxQE120
      VARY, KQEM4B, STEP=1.E-6, LOWER=-KmaxQE120, UPPER=+KmaxQE120
      VARY, KQE31B, STEP=1.E-6, LOWER=-KmaxQx,    UPPER=+KmaxQx
      VARY, KQFXL1, STEP=1.E-6, LOWER= 0,         UPPER=+KmaxQE110
      CONSTR, QEM1B[1], BETX<40, BETY<40
      CONSTR, QEM2B[1], BETX<40, BETY<40
      CONSTR, QEM3B[1], BETX<40, BETY<40
      CONSTR, QEM4B[1], BETX<40, BETY<40
      CONSTR, QE31B[1], BETX<65, BETY<65
      CONSTR, QFXL1[1], BETX<70, BETY<70
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0
      CONSTR, QE32B[1], LINE=(QE32B,DQEC,DQEC,QE33B,QE33B,DQEC,DQEC,QE32B)
      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, SAVE, BETA0=TWSSC, 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=E00
    USE, CU_SXR
    VALUE, KQFXL2,KQE36B,KQUM1B,KQUM2B,KQUM3B,KQUM4B
    MATCH, BETA0=TWSSC
     !VARY, KQFXL2, STEP=1.E-6, LOWER= 0,         UPPER=+KmaxQE110
      VARY, KQE36B, STEP=1.E-6, LOWER=-KmaxQx,    UPPER= 0
      VARY, KQUM1B, STEP=1.E-6, LOWER=-KmaxQE120, UPPER=+KmaxQE120
      VARY, KQUM2B, STEP=1.E-6, LOWER=-KmaxQE120, UPPER=+KmaxQE120
      VARY, KQUM3B, STEP=1.E-6, LOWER=-KmaxQE120, UPPER=+KmaxQE120
      VARY, KQUM4B, STEP=1.E-6, LOWER=-KmaxQE120, UPPER=+KmaxQE120
      CONSTR, QUM1B[1],  BETX<75, BETY<75
      CONSTR, QUM2B[1],  BETX<75, BETY<75
      CONSTR, QUM3B[1],  BETX<75, BETY<75
      CONSTR, QUM4B[1],  BETX<75, BETY<75
      CONSTR, QSXh16[1], BETX<80, BETY<80
      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, SAVE, BETA0=TWSSC, 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, SETCUS, CUSON
  SETK2cuS
  SETXL_8GeV

 !MXL01
 !MXL02

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

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

  STOP
  
