
! *** OPTICS=LCLS2sc01OCT15 ***

! LCLS2sc matching routines

! ==============================================================================
! Modification History
! ------------------------------------------------------------------------------
! 25-SEP-2015, Y. Nosochkov
!  * update MDL2Mb routine, add new MDL2M2 routine
! 12-MAR-2015, Y. Nosochkov
!  * add routines for A-line match and CUSXR match
! 03-APR-2014, M. Woodley
!  * add missing "USE" command to MDLBXY routine
! ------------------------------------------------------------------------------

  OPTION, -ECHO

! ==============================================================================
! Injector/Linac matching
! ------------------------------------------------------------------------------

  ML0E : SUBROUTINE
    VALUE, GradL0
    BEAM, ENERGY=E0
    USE, (GUN,L0)
    MATCH, BETA0=TWSS0
      VARY, GradL0, STEP=1.E-6
      WEIGHT, ENERGY=1
      CONSTR, #E, ENERGY=Ei
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, GradL0
    BEAM, ENERGY=E0
    USE, (GUN,L0)
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=ENERGY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  ML1E : SUBROUTINE
    VALUE, GradL1
    BEAM, ENERGY=Ei
    USE, L1
    MATCH, BETX=1, BETY=1
      VARY, GradL1, STEP=1.E-6
      WEIGHT, ENERGY=1
      CONSTR, #E, ENERGY=E1
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, GradL1
    BEAM, ENERGY=Ei
    USE, L1
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=ENERGY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  ML2E : SUBROUTINE
    VALUE, GradL2
    BEAM, ENERGY=E1
    USE, L2
    MATCH, BETX=1, BETY=1
      VARY, GradL2, STEP=1.E-6
      WEIGHT, ENERGY=1
      CONSTR, #E, ENERGY=E2
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, GradL2
    BEAM, ENERGY=E1
    USE, L2
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=ENERGY, &
      STYLE=100, SPLINE=.T., FILE="L2"
  ENDSUBROUTINE

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

  ML3E : SUBROUTINE
    VALUE, GradL3
    BEAM, ENERGY=E2
    USE, L3
    MATCH, BETX=1, BETY=1
      VARY, GradL3, STEP=1.E-6
      WEIGHT, ENERGY=1
      CONSTR, #E, ENERGY=Ef
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, GradL3
    BEAM, ENERGY=E2
    USE, L3
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=ENERGY, &
      STYLE=100, SPLINE=.T., FILE="L3"
  ENDSUBROUTINE

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

  MCMfodo1 : SUBROUTINE
    VALUE, KQCMfodo1
    BEAM, ENERGY=1
    USE, CMfodo1
    CELL
      VARY, KQCMfodo1, STEP=1.E-6
      CONSTR, #E, MUX=45/360, MUY=45/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQCMfodo1
   !PRINT, FULL
    SAVEBETA, TWSSm, #S
    TWISS, SAVE
    SET, BXCMfodo1, TWSSm[BETX]
    SET, BYCMfodo1, TWSSm[BETY]
    VALUE, BXCMfodo1,BYCMfodo1
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MCMfodo2 : SUBROUTINE
    VALUE, KQCMfodo2
    BEAM, ENERGY=1
    USE, CMfodo2
    CELL
      VARY, KQCMfodo2, STEP=1.E-6
      CONSTR, #E, MUX=30/360, MUY=30/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQCMfodo2
   !PRINT, FULL
    SAVEBETA, TWSSm, #S
    TWISS, SAVE
    SET, BXCMfodo2, TWSSm[BETX]
    SET, BYCMfodo2, TWSSm[BETY]
    VALUE, BXCMfodo2,BYCMfodo2
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MCMfodo3 : SUBROUTINE
    VALUE, KQCMfodo3
    BEAM, ENERGY=1
    USE, CMfodo3
    CELL
      VARY, KQCMfodo3, STEP=1.E-6
      CONSTR, #E, MUX=30/360, MUY=30/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQCMfodo3
   !PRINT, FULL
    SAVEBETA, TWSSm, #S
    TWISS, SAVE
    SET, BXCMfodo3, TWSSm[BETX]
    SET, BYCMfodo3, TWSSm[BETY]
    VALUE, BXCMfodo3,BYCMfodo3
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MC0fodo : SUBROUTINE
    VALUE, KQColl0
    BEAM, ENERGY=E1
    USE, C0fodo
    CELL
      VARY, KQColl0, STEP=1.E-6
      CONSTR, #E, MUX=45/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQColl0
    USE, C0fodo
    SAVEBETA, TWSSm, #S
    TWISS, SAVE
    VALUE, TWSSm[BETX],TWSSm[BETY]
    USE, (3*C0fodo)
   !PRINT, FULL
    TWISS, BETA0=TWSSm, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MC1fodo : SUBROUTINE
    VALUE, KQColl1
    BEAM, ENERGY=E1
    USE, C1fodo
    CELL
      VARY, KQColl1,   STEP=1.E-6
      CONSTR, #E, MUX=45/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQColl1
    USE, C1fodo
    SAVEBETA, TWSSm, #S
    TWISS, SAVE
    VALUE, TWSSm[BETX],TWSSm[BETY]
    USE, (3*C1fodo)
   !PRINT, FULL
    TWISS, BETA0=TWSSm, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MC2fodo : SUBROUTINE
    VALUE, KQColl2
    BEAM, ENERGY=E2
    USE, C2fodo
    CELL
      VARY, KQColl2, STEP=1.E-6
      CONSTR, #E, MUX=45/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQColl2
    USE, C2fodo
    SAVEBETA, TWSSm, #S
    TWISS
    VALUE, TWSSm[BETX],TWSSm[BETY]
    USE, (3*C2fodo)
   !PRINT, FULL
    TWISS, BETA0=TWSSm, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MXfodo : SUBROUTINE
    VALUE, KQXfodo
    BEAM, ENERGY=Ef
    USE, Xfodo
    CELL
      VARY, KQXfodo, STEP=1.E-6
      CONSTR, #E, MUX=45/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQXfodo
    USE, Xfodo
    SAVEBETA, TWSSm, #S
    TWISS
    VALUE, TWSSm[BETX],TWSSm[BETY]
    USE, (4*Xfodo)
   !PRINT, FULL
    TWISS, BETA0=TWSSm, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MHEATER : SUBROUTINE !match with heater undulator OFF
    VALUE, BBh,ZhBBo,ABh*DEGRAD
    BEAM, ENERGY=Ei
    USE, LSRHTR
    MATCH, BETX=1, BETY=1
      VARY, BBh, STEP=1.E-6, LOWER=0
      VARY, ZhBBo, STEP=1.E-6
      CONSTR, HTRUND, DX=0.075
      RMATRIX, #S/#E, RM(5,6)=0.0035, WEIGHT(5,6)=1
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, BBh,ZhBBo,ABh*DEGRAD
   !PRINT, FULL
    SURVEY
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  MBC1 : SUBROUTINE
    VALUE, BB1
    BEAM, ENERGY=E1
    USE, BC1c0
    MATCH, BETX=1, BETY=1, SURVEY
      VARY, BB1, STEP=1.E-6, UPPER=0, LOWER=-1.3/ZB1
      RMATRIX, #S/#E, RM(5,6)=R56BC1, WEIGHT(5,6)=1
     !WEIGHT, XS=1
     !CONSTR, BCX12B, XS=0.32 !maximum traverse (wall side)
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
   !MATCH, BETX=1, BETY=1
   !  RMATRIX, #S/#E, RM(5,6)=0, WEIGHT(5,6)=1
   !ENDMATCH
    VALUE, BB1,Brho1*AB1
   !PRINT, FULL
    SURVEY
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  MBC2 : SUBROUTINE
    VALUE, BB2
    BEAM, ENERGY=E2
    USE, BC2c
    MATCH, BETX=1, BETY=1, SURVEY
      VARY, BB2, STEP=1.E-6
      RMATRIX, #S/#E, RM(5,6)=R56BC2, WEIGHT(5,6)=1
     !WEIGHT, XS=1
     !CONSTR, BCX22B, XS=-0.630 !maximum traverse (aisle side)
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
   !MATCH, BETX=1, BETY=1
   !  RMATRIX, #S/#E, RM(5,6)=0, WEIGHT(5,6)=1
   !ENDMATCH
    VALUE, BB2
   !PRINT, FULL
    SURVEY
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  MCCDLU : SUBROUTINE
    VALUE,BBCXDLU
    BEAM, ENERGY=Ef
    USE, CCDLU
    MATCH, BETX=1, BETY=1
      VARY, BBCXDLU, STEP=1.E-6
      RMATRIX, #S/#E, RM(5,6)=R56CCDLU, WEIGHT(5,6)=1
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, BBCXDLU
   !PRINT, FULL
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  MCCDLD : SUBROUTINE
    VALUE,BBCXDLD
    BEAM, ENERGY=Ef
    USE, CCDLD
    MATCH, BETX=1, BETY=1
      VARY, BBCXDLD, STEP=1.E-6
      RMATRIX, #S/#E, RM(5,6)=R56CCDLD, WEIGHT(5,6)=1
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, BBCXDLD
   !PRINT, FULL
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  MASTRA : SUBROUTINE
    VALUE, Lastra,DCAP0da[L],DCAP0db[L]
    BEAM, ENERGY=E0
    USE, (GUN,L0)
    MATCH, SURVEY, ZS=Zgun
      VARY, Lastra, STEP=1.E-6
      WEIGHT, ZS=1
      CONSTR, ASTRA, ZS=Za
     !LMDIF, TOL=1.E-20
     !MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, Lastra,DCAP0da[L],DCAP0db[L]
    BEAM, ENERGY=E0
    USE, (GUN,L0)
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Zgun
  ENDSUBROUTINE

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

  MTWSS0 : SUBROUTINE
    SET, QCM01[K1], 0
    VALUE, BX0,AX0,BY0,AY0
    BEAM, ENERGY=E0
    USE, (GUN,L0)
    MATCH, BETA0=TWSS0
      VARY, BX0, STEP=1.E-6, LOWER=0
      VARY, AX0, STEP=1.E-6
      CONSTR, ASTRA, BETX=BXa, ALFX=AXa
     !LMDIF, TOL=1.E-20, CALLS=10000
     !SIMPLEX
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    SET, BY0, BX0
    SET, AY0, AX0
    BEAM, ENERGY=E0
    USE, (GUN,L0)
    MATCH, BETA0=TWSS0
      CONSTR, ASTRA, BETX=BXa, ALFX=AXa, BETY=BYa, ALFY=AYa
    ENDMATCH
    VALUE, BX0,AX0,BY0,AY0
    BEAM, ENERGY=E0
    USE, (GUN,L0)
   !PRINT, FULL
    SAVEBETA, TWSSm, DCM4[1] !entrance to QCM01
    TWISS, COUPLE, BETA0=TWSS0
    VALUE, TWSSm[ENERGY],TWSSm[BETX],TWSSm[ALFX],TWSSm[BETY],TWSSm[ALFY]
  ENDSUBROUTINE

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

  ML0LH : SUBROUTINE
    VALUE, QCM01[K1],KQ0H01,KQ0H02,KQ0H03,KQ0H04
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR)
    MATCH, BETA0=TWSSi
      VARY, QCM01[K1], STEP=1.E-6, LOWER=0
      VARY, KQ0H01,    STEP=1.E-6, UPPER=0
      VARY, KQ0H02,    STEP=1.E-6, LOWER=0
      VARY, KQ0H03,    STEP=1.E-6, LOWER=0
      VARY, KQ0H04,    STEP=1.E-6, UPPER=0
      CONSTR, Q0H01[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q0H02[1], BETX<Bmax, BETY<Bmax
      CONSTR, WS0H, BETX=B0H04w, ALFX=0, BETY=B0H04w, ALFY=0
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, QCM01[K1],KQ0H01,KQ0H02,KQ0H03,KQ0H04
    VALUE, KQ0H05,KQ0H06,KQ0H07,KQ0H08
    MATCH, BETA0=TWSSi
      VARY, KQ0H05, STEP=1.E-6, UPPER=0
      VARY, KQ0H06, STEP=1.E-6, LOWER=0
      VARY, KQ0H07, STEP=1.E-6, LOWER=0
      VARY, KQ0H08, STEP=1.E-6, UPPER=0
      CONSTR, HTRUND, BETX=BXlh, ALFX=AXlh, BETY=BYlh, ALFY=AYlh
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQ0H05,KQ0H06,KQ0H07,KQ0H08
    USE, (LCLS2scI,HTR)
    PRINT, FULL
    TWISS, COUPLE, BETA0=TWSSi, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., VMIN=0, FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., VMIN=0, FILE="match"
  ENDSUBROUTINE

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

  MLHD0 : SUBROUTINE
    VALUE, KQHD01,KQHD02,KQHD03,KQHD04
    VALUE, DHD00[L],DHD01[L],DHD02[L],DHD03[L],DHD04[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,DIAG0)
    MATCH, BETA0=TWSSi
      VARY, KQHD01,   STEP=1.E-6, UPPER=0
      VARY, KQHD02,   STEP=1.E-6, LOWER=0
      VARY, KQHD03,   STEP=1.E-6, UPPER=0
      VARY, KQHD04,   STEP=1.E-6, LOWER=0
     !VARY, DHD00[L], STEP=1.E-3, LOWER=0.25
     !VARY, DHD01[L], STEP=1.E-3, LOWER=0.5
     !VARY, DHD02[L], STEP=1.E-3, LOWER=0.5
     !VARY, DHD03[L], STEP=1.E-3, LOWER=0.5
     !VARY, DHD04[L], STEP=1.E-3, LOWER=0.25
     !CONSTR, QHD02[1], BETX<50
     !CONSTR, QHD03[1], BETY<60
      CONSTR, OTRDG02, BETX=BMINDG0, ALFX=0, BETY=BMINDG0, ALFY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQHD01,KQHD02,KQHD03,KQHD04
    VALUE, DHD00[L],DHD01[L],DHD02[L],DHD03[L],DHD04[L]
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Za, TAPE="survey.tape"
    TWISS, COUPLE, BETA0=TWSSi, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match", RANGE=#S/SEQ01END
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., FILE="match", RANGE=BEGHTR/#E
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match", RANGE=BEGHTR/#E
  ENDSUBROUTINE

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

  MD0Coll0 : SUBROUTINE
    VALUE, KQC001,KQC002,KQC003,KQC004
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1)
    MATCH, BETA0=TWSSi, SURVEY, ZS=Zi
      VARY, KQC001,   STEP=1.E-6 !, LOWER=0
      VARY, KQC002,   STEP=1.E-6 !, LOWER=0
      VARY, KQC003,   STEP=1.E-6 !, UPPER=0
      VARY, KQC004,   STEP=1.E-6, LOWER=0
     !VARY, DC000[L], STEP=1.E-3, LOWER=0.25
     !VARY, DC001[L], STEP=1.E-3, LOWER=0.25
     !VARY, DC002[L], STEP=1.E-3, LOWER=0.25
     !VARY, DC003[L], STEP=1.E-3, LOWER=0.25
     !CONSTR, QC002[1], BETX<45
     !CONSTR, QC003[1], BETY<30
     !CONSTR, QC004[1], BETX<35
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0
      CONSTR, QC006[1], LINE=C0fodo
     !WEIGHT, ZS=1
     !CONSTR, CAVC011, ZS=Z1loc+LcavC/2
     !CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQC001,KQC002,KQC003,KQC004
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1)
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Zi, TAPE="survey.tape"
    TWISS, COUPLE, BETA0=TWSSi, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match", RANGE=COL0 !ENDHTR/CXC03
  ENDSUBROUTINE

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

  MColl0Coll1 : SUBROUTINE
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1)
    VALUE, KQC010,KQC011,KQC012,QCM02[K1],QCM03[K1],KQ1C01
    MATCH, BETA0=TWSSi
      VARY, KQC010,    STEP=1.E-6, LOWER=0
      VARY, KQC011,    STEP=1.E-6, UPPER=0
      VARY, KQC012,    STEP=1.E-6, LOWER=0
      VARY, QCM02[K1], STEP=1.E-6, UPPER=0
      VARY, QCM03[K1], STEP=1.E-6, LOWER=0
      VARY, KQ1C01,    STEP=1.E-6, LOWER=-1.25, UPPER=1.25
      CONSTR, QCM02[1], BETY=65
      CONSTR, QCM03[1], BETX=65
      CONSTR, BCX14A,   BETX=1.75, ALFX=0
      CONSTR, BC1cEND,  BETY<65
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQC010,KQC011,KQC012,QCM02[K1],QCM03[K1],KQ1C01
    VALUE, KQC101,KQC102,KQC103,KQC104,KQC105
    VALUE, DC102[L],DC103[L],DC104[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1)
    MATCH, BETA0=TWSSi
      VARY, KQC101,   STEP=1.E-6, UPPER=0
     !VARY, KQC102,   STEP=1.E-6, LOWER=0, UPPER=1.2
      VARY, KQC103,   STEP=1.E-6, LOWER=0, UPPER=1.2
      VARY, KQC104,   STEP=1.E-6, UPPER=0
      VARY, KQC105,   STEP=1.E-6, UPPER=0
     !VARY, DC102[L], STEP=1.E-6, LOWER=0.8
     !VARY, DC103[L], STEP=1.E-6, LOWER=1.0
     !VARY, DC104[L], STEP=1.E-6, LOWER=1.0
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0
     !CONSTR, QC106[1], LINE=C1fodo
      CONSTR, QC108[1], LINE=C1fodo
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQC101,KQC102,KQC103,KQC104,KQC105
    VALUE, DC102[L],DC103[L],DC104[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1)
   !PRINT, FULL
    TWISS, BETA0=TWSSi, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/BC1cEND, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=BC1cEND/QC110[1], &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/QC110[1], &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MColl1L2 : SUBROUTINE
    SET, QCM13[K1],  KQCMfodo2
    SET, QCM14[K1], -KQCMfodo2
    SET, QCM15[K1],  KQCMfodo2
    VALUE, KQC110,KQC111,KQC112
    VALUE, QCM04[K1],QCM05[K1],QCM06[K1],QCM07[K1],QCM08[K1],QCM09[K1]
    VALUE, QCM10[K1],QCM11[K1],QCM12[K1]
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1)
    SAVEBETA, TWSSm, #E
    TWISS, COUPLE, BETA0=TWSSi
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (COL1,L2)
    MATCH, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, KQC110,    STEP=1.E-6, LOWER=0
      VARY, KQC111,    STEP=1.E-6, UPPER=0
      VARY, KQC112,    STEP=1.E-6, LOWER=0
      VARY, QCM04[K1], STEP=1.E-6, UPPER=0
      VARY, QCM05[K1], STEP=1.E-6, LOWER=0
      VARY, QCM06[K1], STEP=1.E-6, UPPER=0
      VARY, QCM07[K1], STEP=1.E-6, LOWER=0
      VARY, QCM08[K1], STEP=1.E-6, UPPER=0
      VARY, QCM09[K1], STEP=1.E-6, LOWER=0
      VARY, QCM10[K1], STEP=1.E-6, UPPER=0
      VARY, QCM11[K1], STEP=1.E-6, LOWER=0
      VARY, QCM12[K1], STEP=1.E-6, UPPER=0
      CONSTR, QC111[1], BETY<45
      CONSTR, QC112[1], BETX<55
      CONSTR, QCM04[1], BETY<65 !=BXCMfodo2
      CONSTR, QCM05[1], BETX<65 !=BXCMfodo2
      CONSTR, QCM06[1], BETY=BXCMfodo2
      CONSTR, QCM07[1], BETX=BXCMfodo2
      CONSTR, QCM08[1], BETY=BXCMfodo2
      CONSTR, QCM09[1], BETX=BXCMfodo2
      CONSTR, QCM10[1], BETY=BXCMfodo2
      CONSTR, QCM11[1], BETX=BXCMfodo2
      CONSTR, QCM12[1], BETY=BXCMfodo2
      CONSTR, QCM13[1], BETX=BXCMfodo2
      CONSTR, QCM14[1], BETY=BXCMfodo2
      CONSTR, QCM15[1], BETX=BXCMfodo2
      WEIGHT, BETX=0.001, BETY=0.001
     !CONSTR, QCM04[1], BETX=BYCMfodo2
     !CONSTR, QCM05[1], BETY=BYCMfodo2
      CONSTR, QCM06[1], BETX=BYCMfodo2
      CONSTR, QCM07[1], BETY=BYCMfodo2
      CONSTR, QCM08[1], BETX=BYCMfodo2
      CONSTR, QCM09[1], BETY=BYCMfodo2
      CONSTR, QCM10[1], BETX=BYCMfodo2
      CONSTR, QCM11[1], BETY=BYCMfodo2
      CONSTR, QCM12[1], BETX=BYCMfodo2
      CONSTR, QCM13[1], BETY=BYCMfodo2
      CONSTR, QCM14[1], BETX=BYCMfodo2
      CONSTR, QCM15[1], BETY=BYCMfodo2
     !CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQC110,KQC111,KQC112
    VALUE, QCM04[K1],QCM05[K1],QCM06[K1],QCM07[K1],QCM08[K1],QCM09[K1]
    VALUE, QCM10[K1],QCM11[K1],QCM12[K1]
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (COL1,L2)
   !PRINT, FULL
    TWISS, COUPLE, SAVE, TAPE="twiss.tape", &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match", RANGE=#S/QCM12[1]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  ML2Coll2 : SUBROUTINE
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1)
    SAVEBETA, TWSSm, #E
    TWISS, COUPLE, BETA0=TWSSi
    VALUE, QCM13[K1],QCM14[K1],QCM15[K1],KQ2C01,KQC201,KQC202,KQC203
    VALUE, DC201[L],DC202[L]
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (L2,BC2,COL2)
    MATCH, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, QCM13[K1], STEP=1.E-6, LOWER=0
      VARY, QCM14[K1], STEP=1.E-6, UPPER=0
      VARY, QCM15[K1], STEP=1.E-6, LOWER=0
      VARY, KQ2C01,    STEP=1.E-6, LOWER=0
      VARY, KQC201,    STEP=1.E-6, UPPER=0
      VARY, KQC202,    STEP=1.E-6, LOWER=0
      VARY, KQC203,    STEP=1.E-6, UPPER=0
     !VARY, DC201[L],  STEP=1.E-3, LOWER=0.2
     !VARY, DC202[L],  STEP=1.E-3, LOWER=0.2
      CONSTR, BCX24B, BETX=2.5, ALFX=0
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0
      CONSTR, QC204[1], LINE=C2fodo
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=1000
     !MIGRAD, TOL=1.E-20, CALLS=1000
    ENDMATCH
    VALUE, QCM13[K1],QCM14[K1],QCM15[K1],KQ2C01,KQC201,KQC202,KQC203
    VALUE, DC201[L],DC202[L]
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (L2,BC2,COL2)
   !PRINT, FULL
    TWISS, COUPLE, SAVE, TAPE="twiss.tape", &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/QC209[1], &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QCM11[1]/QC204[1], &
      STYLE=100, SPLINE=.T., FILE="match"
   !PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
   !  STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  MColl2L3 : SUBROUTINE
    SET, QCM34[K1], -KQCMfodo3
    SET, QCM35[K1],  KQCMfodo3
    VALUE, KQC209,KQC210
    VALUE, QCM16[K1],QCM17[K1],QCM18[K1],QCM19[K1],QCM20[K1]
    VALUE, QCM21[K1],QCM22[K1],QCM23[K1],QCM24[K1],QCM25[K1]
    VALUE, QCM26[K1],QCM27[K1],QCM28[K1],QCM29[K1],QCM30[K1]
    VALUE, QCM31[K1]
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1,L2)
    SAVEBETA, TWSSm, #E
    TWISS, COUPLE, BETA0=TWSSi
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (BC2,COL2,L3)
    MATCH, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, KQC209,    STEP=1.E-3, UPPER=0
      VARY, KQC210,    STEP=1.E-3, LOWER=0
      VARY, QCM16[K1], STEP=1.E-6, UPPER=0
      VARY, QCM17[K1], STEP=1.E-6, LOWER=0
      VARY, QCM18[K1], STEP=1.E-6, UPPER=0
      VARY, QCM19[K1], STEP=1.E-6, LOWER=0
      VARY, QCM20[K1], STEP=1.E-6, UPPER=0
      VARY, QCM21[K1], STEP=1.E-6, LOWER=0
      VARY, QCM22[K1], STEP=1.E-6, UPPER=0
      VARY, QCM23[K1], STEP=1.E-6, LOWER=0
      CONSTR, QCM16[1], BETY<BXCMfodo3
      CONSTR, QCM17[1], BETX<BXCMfodo3
      CONSTR, QCM18[1], BETY=BXCMfodo3
      CONSTR, QCM19[1], BETX=BXCMfodo3
      CONSTR, QCM20[1], BETY=BXCMfodo3
      CONSTR, QCM21[1], BETX=BXCMfodo3
      CONSTR, QCM22[1], BETY=BXCMfodo3
      CONSTR, QCM23[1], BETX=BXCMfodo3
      CONSTR, QCM24[1], BETY=BXCMfodo3
      CONSTR, QCM25[1], BETX=BXCMfodo3
      WEIGHT, BETX=0.01, BETY=0.01
      CONSTR, QCM16[1], BETX=BYCMfodo3
      CONSTR, QCM17[1], BETY=BYCMfodo3
      CONSTR, QCM18[1], BETX=BYCMfodo3
      CONSTR, QCM19[1], BETY=BYCMfodo3
      CONSTR, QCM20[1], BETX=BYCMfodo3
      CONSTR, QCM21[1], BETY=BYCMfodo3
      CONSTR, QCM22[1], BETX=BYCMfodo3
      CONSTR, QCM23[1], BETY=BYCMfodo3
      CONSTR, QCM24[1], BETX=BYCMfodo3
      CONSTR, QCM25[1], BETY=BYCMfodo3
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (BC2,COL2,L3)
    MATCH, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, QCM24[K1], STEP=1.E-6, UPPER=0
      VARY, QCM25[K1], STEP=1.E-6, LOWER=0
      VARY, QCM26[K1], STEP=1.E-6, UPPER=0
      VARY, QCM27[K1], STEP=1.E-6, LOWER=0
      VARY, QCM28[K1], STEP=1.E-6, UPPER=0
      VARY, QCM29[K1], STEP=1.E-6, LOWER=0
      VARY, QCM30[K1], STEP=1.E-6, UPPER=0
      VARY, QCM31[K1], STEP=1.E-6, LOWER=0
      CONSTR, QCM24[1], BETY=BXCMfodo3
      CONSTR, QCM25[1], BETX=BXCMfodo3
      CONSTR, QCM26[1], BETY=BXCMfodo3
      CONSTR, QCM27[1], BETX=BXCMfodo3
      CONSTR, QCM28[1], BETY=BXCMfodo3
      CONSTR, QCM29[1], BETX=BXCMfodo3
      CONSTR, QCM30[1], BETY=BXCMfodo3
      CONSTR, QCM31[1], BETX=BXCMfodo3
      CONSTR, QCM32[1], BETY=BXCMfodo3
      CONSTR, QCM33[1], BETX=BXCMfodo3
      CONSTR, QCM34[1], BETY=BXCMfodo3
      CONSTR, QCM35[1], BETX=BXCMfodo3
      WEIGHT, BETX=0.01, BETY=0.01
      CONSTR, QCM24[1], BETX=BYCMfodo3
      CONSTR, QCM25[1], BETY=BYCMfodo3
      CONSTR, QCM26[1], BETX=BYCMfodo3
      CONSTR, QCM27[1], BETY=BYCMfodo3
      CONSTR, QCM28[1], BETX=BYCMfodo3
      CONSTR, QCM29[1], BETY=BYCMfodo3
      CONSTR, QCM30[1], BETX=BYCMfodo3
      CONSTR, QCM31[1], BETY=BYCMfodo3
      CONSTR, QCM32[1], BETX=BYCMfodo3
      CONSTR, QCM33[1], BETY=BYCMfodo3
      CONSTR, QCM34[1], BETX=BYCMfodo3
      CONSTR, QCM35[1], BETY=BYCMfodo3
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQC209,KQC210
    VALUE, QCM16[K1],QCM17[K1],QCM18[K1],QCM19[K1],QCM20[K1]
    VALUE, QCM21[K1],QCM22[K1],QCM23[K1],QCM24[K1],QCM25[K1]
    VALUE, QCM26[K1],QCM27[K1],QCM28[K1],QCM29[K1],QCM30[K1]
    VALUE, QCM31[K1]
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (BC2,COL2,L3)
   !PRINT, FULL
    TWISS, COUPLE, SAVE, TAPE="twiss.tape", &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QC203[1]/#E, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=COL2, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/DBREAK, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  ML3LX : SUBROUTINE
    VALUE, QCM34[K1],QCM35[K1],KQX01,KQX02
    VALUE, DX00[L],DX01[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1,L2,BC2,COL2)
    SAVEBETA, TWSSm, #E
    TWISS, COUPLE, BETA0=TWSSi
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (L3,EXT)
    MATCH, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, QCM34[K1], STEP=1.E-6, UPPER=0
      VARY, QCM35[K1], STEP=1.E-6, LOWER=0
      VARY, KQX01,     STEP=1.E-6, UPPER=0
      VARY, KQX02,     STEP=1.E-6, LOWER=0
     !VARY, DX00[L],   STEP=1.E-3, LOWER=0.25
     !VARY, DX01[L],   STEP=1.E-3, LOWER=0.25
     !CONSTR, QX01[1], BETY<134
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0
      CONSTR, QX03[1], LINE=Xfodo
     !CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, QCM34[K1],QCM35[K1],KQX01,KQX02
    VALUE, DX00[L],DX01[L]
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (L3,EXT)
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Z3beg, TAPE="survey.tape"
    TWISS, SAVE, TAPE="twiss.tape", &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match", RANGE=#S/QX05[1]
  ENDSUBROUTINE

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

  MDLGEO : SUBROUTINE
    BEAM, ENERGY=Ef
    VALUE, ANGA,ROLLA,AROBRB1,LTOTA
    USE, DLBP0
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xgun, YS=Ygun
      VARY, ANGA,    STEP=1.E-6
      VARY, ROLLA,   STEP=1.E-6, LOWER=-PI/2, UPPER=0
      VARY, AROBRB1, STEP=1.E-6
      VARY, LTOTA,   STEP=1.E-3
      WEIGHT, XS=1, YS=1, ZS=1, PSIS=1
      CONSTR, ROBRB1, PSIS=0
      CONSTR, #E, XS=XOFF, YS=YOFF, ZS=dZdog
     !LMDIF, TOL=1.E-20
     !MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, ANGA,ROLLA,AROBRB1,LTOTA
    VALUE, Cb*Ef*ANGA,Cb*10*ANGA
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, TAPE="survey.tape"
  ENDSUBROUTINE

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

  MDLDXY : SUBROUTINE
    BEAM, ENERGY=Ef
    VALUE, KQDOG,dLDBD
    USE, (QDOG1,DBD1,QDOG2,QDOG2,DBD1,QDOG1)
    MATCH
      VARY, KQDOG, STEP=1.E-6, LOWER=0
      CONSTR, #E, MUX=0.25
     !LMDIF, TOL=1.E-20
     !MIGRAD, TOL=1.E-20
    ENDMATCH
    USE, DLBP0
    MATCH
     !VARY, KQDOG, STEP=1.E-6, LOWER=0
      VARY, dLDBD,  STEP=1.E-6
      CONSTR, #E, DX=0, DPX=0, DY=0, DPY=0
     !LMDIF, TOL=1.E-20
     !MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQDOG,dLDBD
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun
    TWISS, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MDLBXY : SUBROUTINE
    BEAM, ENERGY=Ef
    VALUE, BXDLm,AXDLm,BYDLm,AYDLm
    USE, DLBP0
    MATCH, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm
      VARY, BXDLm, STEP=1.E-6, LOWER=0
      VARY, AXDLm, STEP=1.E-6
      VARY, BYDLm, STEP=1.E-6, LOWER=0
      VARY, AYDLm, STEP=1.E-6
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0
      CONSTR, QDOG1[1], LINE=(QDOG1,DBD1,QDOG2,QDOG2,DBD1,QDOG1)
     !LMDIF, TOL=1.E-20
     !MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, BXDLm,AXDLm,BYDLm,AYDLm
   !PRINT, FULL
    TWISS, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MDLDDXY : SUBROUTINE
    BEAM, ENERGY=Ef
   !VALUE, K2LSDOG1,K2LSDOG2,K2LSDOG3,K2LSDOG5,K2LSDOG6,K2LSDOG7
    VALUE, KSDOG1,KSDOG2,KSDOG3
   !VALUE, KSDOG1*LSx,KSDOG2*LSx,KSDOG3*LSx
    VALUE, T2SDOG1,T2SDOG2,T2SDOG3,T2SDOG5,T2SDOG6,T2SDOG7
   !USE, DLBP0
   !USE, DLBP0M
    USE, DLBP0S
    TWISS, CHROM, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm
    MATCH, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm
     !VARY, K2LSDOG1, STEP=1.E-6
     !VARY, T2SDOG1,  STEP=1.E-6, LOWER=-30, UPPER=+30
     !VARY, K2LSDOG2, STEP=1.E-6
     !VARY, T2SDOG2,  STEP=1.E-6, LOWER=-30, UPPER=+30
     !VARY, K2LSDOG3, STEP=1.E-6
     !VARY, T2SDOG3,  STEP=1.E-6, LOWER=-30, UPPER=+30
     !VARY, K2LSDOG5, STEP=1.E-6
     !VARY, T2SDOG5,  STEP=1.E-6, LOWER=-30, UPPER=+30
     !VARY, K2LSDOG6, STEP=1.E-6
     !VARY, T2SDOG6,  STEP=1.E-6, LOWER=-30, UPPER=+30
     !VARY, K2LSDOG7, STEP=1.E-6
     !VARY, T2SDOG7,  STEP=1.E-6, LOWER=-30, UPPER=+30
      VARY, KSDOG1,   STEP=1.E-6, LOWER=-12, UPPER=+12
      VARY, TSDOG1,   STEP=1.E-6, LOWER=-30, UPPER=+30
      VARY, KSDOG2,   STEP=1.E-6, LOWER=-12, UPPER=+12
      VARY, TSDOG2,   STEP=1.E-6, LOWER=-30, UPPER=+30
      VARY, KSDOG3,   STEP=1.E-6, LOWER=-12, UPPER=+12
      VARY, TSDOG3,   STEP=1.E-6, LOWER=-30, UPPER=+30
      WEIGHT, DDX=1, DDPX=1, DDY=1, DDPY=1
      CONSTR, #E, DDX=0, DDPX=0, DDY=0, DDPY=0
     !CONSTR, QDOG2[1], DDY<0.8
     !CONSTR, QDOG3[1], DDX>-0.8
     !CONSTR, MIDBD, DDX=0, DDY=0
     !CONSTR, QDOG6[1], DDY>-0.8
     !CONSTR, QDOG7[1], DDX<0.8
     !RMATRIX, #S/#E, RM(5,6)=0
      TMATRIX, #S/#E, TM(5,6,6)=0
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
      LMDIF, TOL=1.E-20
      MIGRAD, TOL=1.E-20
    ENDMATCH
   !VALUE, K2LSDOG1,K2LSDOG2,K2LSDOG3,K2LSDOG5,K2LSDOG6,K2LSDOG7
    VALUE, KSDOG1,KSDOG2,KSDOG3
   !VALUE, KSDOG1*LSx,KSDOG2*LSx,KSDOG3*LSx
    VALUE, T2SDOG1,T2SDOG2,T2SDOG3,T2SDOG5,T2SDOG6,T2SDOG7
    USE, (DLBP0S,Dmdw)
    PRINT, FULL
    TWISS, CHROM, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm, SAVE=CHROM
    PLOT, TABLE=CHROM, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=CHROM, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., FILE="match"
    PLOT, TABLE=CHROM, HAXIS=S, VAXIS=DDX,DDY, &
      STYLE=100, SPLINE=.F., FILE="match"
    PLOT, TABLE=CHROM, HAXIS=S, VAXIS=DDPX,DDPY, &
      STYLE=100, SPLINE=.F., FILE="match"
    PLOT, TABLE=CHROM, HAXIS=S, VAXIS=WX,WY, &
      STYLE=100, SPLINE=.F., FILE="match"
  ENDSUBROUTINE

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

  MLXDL : SUBROUTINE
    VALUE, KQX06,KQX07,KQX08,KQX09
    VALUE, DX07[L],DX08[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1,L2,BC2,COL2,L3)
    SAVEBETA, TWSSm, #E
    TWISS, COUPLE, BETA0=TWSSi
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, EXT0
    MATCH, BETA0=TWSSm, SURVEY, ZS=Z3end, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, KQX06,   STEP=1.E-6, LOWER=0
      VARY, KQX07,   STEP=1.E-6, UPPER=0
      VARY, KQX08,   STEP=1.E-6, LOWER=0
      VARY, KQX09,   STEP=1.E-6, UPPER=0
     !VARY, DX07[L], STEP=1.E-3, LOWER=0.25
     !VARY, DX08[L], STEP=1.E-3, LOWER=0.25
     !VARY, DX09[L], STEP=1.E-3, LOWER=12.7-QX09[L]
     !CONSTR, QX07[1], BETY<134
     !CONSTR, QX08[1], BETX<134
     !CONSTR, QX09[1], BETY<110
      CONSTR, #E, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm
     !CONSTR, #E, X=0, PX=0, Y=0, PY=0
      WEIGHT, ZS=1
      CONSTR, QX09[1], ZS<Zdog-12.7 !leave space for cryomodule transport
      CONSTR, #E, ZS=Zdog
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQX06,KQX07,KQX08,KQX09
    VALUE, DX07[L],DX08[L]
    USE, (EXT,DLBP)
   !PRINT, FULL
    SURVEY, Z0=Z3end, TAPE="survey.tape"
    TWISS, COUPLE, SAVE, TAPE="twiss.tape", &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QX09[1]/#E, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MDLBYP : SUBROUTINE
    VALUE, KQL1P,KQL2P,KQL3P,KQL4P
    VALUE, LL0,LL1,LL2,LL3,LL4
    BEAM, ENERGY=Ef
    USE, DLBM
    MATCH, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm, &
      SURVEY, XS=Xgun, YS=Ygun, ZS=Zdog
      VARY, KQL1P, STEP=1.E-4 !, LOWER= 0    , UPPER=0.332
      VARY, KQL2P, STEP=1.E-4 !, LOWER=-0.250, UPPER=0
      VARY, KQL3P, STEP=1.E-4 !, LOWER= 0    , UPPER=0.241
      VARY, KQL4P, STEP=1.E-4 !, LOWER=-0.241, UPPER=0
     !VARY, LL0, STEP=1.E-3
     !VARY, LL1, STEP=1.E-3, LOWER=0.4
     !VARY, LL2, STEP=1.E-3
     !VARY, LL3, STEP=1.E-3
     !VARY, LL4, STEP=1.E-3
     !CONSTR, QL1P[1], BETX<150
     !CONSTR, QL2P[1], BETY<250
     !CONSTR, QL3P[1], BETY<350
     !CONSTR, QL4P[1], BETY<400
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0, X=0, PX=0, Y=0, PY=0, T=0, PT=0
      CONSTR, MQBP13, LINE=Bfodo
      WEIGHT, ZS=1
      CONSTR, MQBP13, ZS=Zbyp
     !WEIGHT, X=1, PX=1, Y=1, PY=1
     !CONSTR, #E, X=0, PX=0, Y=0, PY=0
     !LMDIF, TOL=1.E-20
     !MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQL1P,KQL2P,KQL3P,KQL4P
    VALUE, LL0,LL1,LL2,LL3,LL4
    USE, (DLBM,FODOLa)
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Zdog
    TWISS, BETX=BXDLm, ALFX=AXDLm, BETY=BYDLm, ALFY=AYDLm, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/MQBP13, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=#S/MQBP13, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

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

  MDIAG0 : SUBROUTINE !match post laser heater diagnostics line
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR)
    SAVEBETA, TWSSm, #E
    TWISS, COUPLE, BETA0=TWSSi
    BEAM, ENERGY=Ei
    SET, SETDG0, DG0ON
    USE, DIAG0
    VALUE, YANG0,XANG0,SROL0,AROLL0K,AROLL0L,YK01,YK02,ZHH0,ZTWK0a,ZTWK0b
    VALUE, KQBF0,KQBD0
    MATCH, SURVEY, XS=0, YS=0, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, YANG0,   STEP=1.E-6
      VARY, XANG0,   STEP=1.E-6
      VARY, SROL0,   STEP=1.E-6
      VARY, AROLL0K, STEP=1.E-9
      VARY, AROLL0L, STEP=1.E-9
      VARY, YK01,    STEP=1.E-6
      VARY, YK02,    STEP=1.E-6
      VARY, ZHH0,    STEP=1.E-6
      VARY, ZTWK0a,  STEP=1.E-6
      VARY, ZTWK0b,  STEP=1.E-6
      VARY, KQBF0,   STEP=1.E-6, LOWER=0
      VARY, KQBD0,   STEP=1.E-6, UPPER=0
      WEIGHT, XS=1, YS=1, THETAS=1, PHIS=1, PSIS=1, ALFX=1.E-10, ALFY=1.E-10
      CONSTR, RODG0K, PSIS=0
      CONSTR, M1DG0, XS=-YKOFF0*SIN(SROL0), YS=YKOFF0*COS(SROL0)
      CONSTR, RODG0L, PSIS=0
      CONSTR, QDG002[1], ALFX=0, ALFY=0
      CONSTR, QDG003[2], DY=0, DPY=0
      CONSTR, M2DG0, DX=0, DPX=0, XS=DX0, YS=0, THETAS=0, PHIS=0 !, X=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, YANG0,XANG0,SROL0,AROLL0K,AROLL0L,YK01,YK02,ZHH0,ZTWK0a,ZTWK0b
    VALUE, KQBF0,KQBD0
    VALUE, KQDG004,KQDG005,KQDG006,KQDG007,KQDG008,KQDG009
    MATCH, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, KQDG004, STEP=1.E-6, LOWER=0
      VARY, KQDG005, STEP=1.E-6, UPPER=0
      VARY, KQDG006, STEP=1.E-6, LOWER=0
      VARY, KQDG007, STEP=1.E-6, UPPER=0
      VARY, KQDG008, STEP=1.E-6, LOWER=0
      VARY, KQDG009, STEP=1.E-6, UPPER=0
      CONSTR, QDG005[1], BETY<15 !=14  
      CONSTR, QDG006[1], BETX<20
      CONSTR, QDG007[1], BETY<20
      CONSTR, QDG008[1], BETX<20
      CONSTR, TCXDG0h[1], BETX>10
      CONSTR, OTRDG02, BETX=BMINDG0, ALFX=0, BETY=BMINDG0, ALFY=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQDG004,KQDG005,KQDG006,KQDG007,KQDG008,KQDG009
    VALUE, KQDG010,KQDG011
    MATCH, &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
      VARY, KQDG010, STEP=1.E-6, LOWER=0
      VARY, KQDG011, STEP=1.E-6, UPPER=0
      CONSTR, OTRDG04, BETY<0.16, BETX<6
      WEIGHT, MUX=1, BETX=0, ALFX=0, DX=0, DPX=0, &
              MUY=0, BETY=0, ALFY=0, DY=0, DPY=0, &
              T=0, PT=0
      COUPLE, TCXDG0h[1]/OTRDG04, MUX=270/360
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQDG010,KQDG011
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Zdg0, TAPE="survey.tape"
    TWISS, COUPLE, SAVE, TAPE="twiss.tape", &
      BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=DX, VAXIS2=DY, &
      STYLE=100, SPLINE=.T., FILE="match"
  ENDSUBROUTINE

! ==============================================================================
! Bypass/LTU matching
! ------------------------------------------------------------------------------
! set phase advance of FODO cell in bypass straight line

  TWSBYP : BETA0

  MSTRT : SUBROUTINE
    USE, FODO
    CELL
      VARY, KQY, STEP=1.E-4, LOWER=0, UPPER=0.08*1.5
      CONSTR, #E, MUX=45/360, MUY=45/360
!      LMDIF, TOL=1.E-20
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQY
!    SAVEBETA, TWSBYP, #S
!    TWISS
!    VALUE, TWSBYP[BETX],TWSBYP[BETY],TWSBYP[ALFX],TWSBYP[ALFY]
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match XYZ in HXR spreader

! a general note:
! using matching variables defined with formulas in .xsif (e.g. =...*SETKIKh)
! will invalidate the formula -- therefore, subsequent matching routines using
! a different setting of the formula (SETKIKh in this example) may not
! work correctly -- hence, match this variable, then comment it out in the
! matching routine (or do not call this routine) and then proceed with the
! next matching routine

  MXYZSPh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (FODOLa,SPRDh,SPhBSY)
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xbyp, YS=Ybyp, ZS=Zbyp, &
           THETAS=0, PHIS=0, PSIS=0
      VARY, ABRSPh , STEP=1.E-5
      VARY, TBRSPh , STEP=1.E-4
      VARY, dABXSPh, STEP=1.E-10
      VARY, AROSP1h, STEP=1.E-8
      VARY, AROSP2h, STEP=1.E-8
      VARY, ABCSP1h, STEP=1.E-6
      VARY, ABCSP2h, STEP=1.E-6
      VARY, dLDSP4h, STEP=1.E-4
      VARY, dLDSPh , STEP=1.E-4
      VARY, dLDSP17h, STEP=1.E-6
      WEIGHT, XS=1, YS=1, ZS=1, THETAS=1, PHIS=1, PSIS=1
      CONSTR, BYSP2hb, YS=Ybyp, PHIS=0, PSIS=0
      CONSTR, QSP3h[1], XS=Xbyp/2, THETAS=0, PSIS=0
      CONSTR, BSYEND, XS=0, YS=0, ZS=3224.022425, &
                      THETAS=0, PHIS=0, PSIS=0
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, ABRSPh,TBRSPh,dABXSPh,AROSP1h,AROSP2h
    VALUE, ABCSP1h,ABCSP2h,dLDSP4h,dLDSPh,dLDSP17h
!    PRINT, SPRDh ; PRINT, BSYEND
!    SURVEY, X0=Xbyp, Y0=Ybyp, Z0=Zbyp, THETA0=0, PHI0=0, PSI0=0
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match XYZ in SXR spreader

  MXYZSPs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, (BYPASS,BSYLTUsc)
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xbyp, YS=Ybyp, ZS=Zbyp, &
           THETAS=0, PHIS=0, PSIS=0
      VARY, dABXSPs , STEP=1.E-9
    !!VARY, ABLXSPs0, STEP=1.E-5
      VARY, ABCSP1s , STEP=1.E-6
      VARY, ABCSP2s , STEP=1.E-6
      VARY, AROSP1s , STEP=1.E-8
      VARY, dLDSP13s, STEP=1.E-6
      VARY, dLDSP2sa, STEP=1.E-4
      VARY, dDCYd   , STEP=1.E-4
      WEIGHT, XS=1, YS=1, ZS=1, THETAS=1, PHIS=1, PSIS=1
      CONSTR, BXSP1sb, XS=Xbyp-0.50, YS=Ybyp, THETAS=0, PHIS=0, PSIS=0
      CONSTR, BSYENDb, XS=Xbyp, YS=Ybyp, ZS=3224.022425, &
                       THETAS=0, PHIS=0, PSIS=0
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, dABXSPs,ABLXSPs0,ABCSP1s,ABCSP2s,AROSP1s
    VALUE, dLDSP13s,dLDSP2sa,dDCYd
!    PRINT, full;!SPRDs ; PRINT, BSYENDb
!    SURVEY, X0=Xbyp, Y0=Ybyp, Z0=Zbyp, THETA0=0, PHI0=0, PSI0=0
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match XYZ at D10 dump in BSY dumpline

  MXYZSPd : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPd
    USE, (FODOLa,SPRDd)
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xbyp, YS=Ybyp, ZS=Zbyp, &
           THETAS=0, PHIS=0, PSIS=0
      VARY, ABYSPd , STEP=1.E-5
    !!VARY, ABXSPd , STEP=1.E-5
      VARY, dLDSP6d, STEP=1.E-4
      WEIGHT, XS=1, YS=1, ZS=1, THETAS=1, PHIS=1, PSIS=1
    !!CONSTR, MUWALLd, XS=Xbyp+0.2, YS=0, ZS=3207.258425
      CONSTR, MUWALLd, YS=0, ZS=3207.258425 !when BXSP1d is off (new D10)
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, ABYSPd,dLDSP6d !,ABXSPd
!    PRINT, SPRDd
!    SURVEY, X0=Xbyp, Y0=Ybyp, Z0=Zbyp, THETA0=0, PHI0=0, PSI0=0
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! empirical match of initial XYZ at marker LTUSPLIT in BSY system

  MXYZBSY : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, (FODOLb,BYPM)
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xf, YS=Yf, ZS=Zf, &
           THETAS=THETAf, PHIS=PHIf, PSIS=PSIf
      VARY, Yf, STEP=1.E-4
      VARY, Zf, STEP=1.E-4
      WEIGHT, XS=1.E-6, YS=1, ZS=1, THETAS=1.E-6, PHIS=1.E-6, PSIS=1.E-6
      CONSTR, S100B, XS=Xf, YS=YOFF*COS(2*AVB), ZS=-YOFF*SIN(2*AVB), &
                     THETAS=THETAf, PHIS=PHIf, PSIS=PSIf
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, Xf,Yf,Zf,THETAf,PHIf,PSIf
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! fine tune XYZ in DL2 of HXR

  MXYZDL2h : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, BSYLCLS2scH
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xf, YS=Yf, ZS=Zf, &
           THETAS=THETAf, PHIS=PHIf, PSIS=PSIf
      VARY, AB3P, STEP=1.E-5
      VARY, dLDU0h, STEP=1.E-6
      WEIGHT, XS=1, ZS=1
      CONSTR, HXRTERM, XS=-1.25, ZS=669.586492
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, AB3P/RADDEG,dLDU0h
!    PRINT, HXRTERM
!    SURVEY, X0=Xf, Y0=Yf, Z0=Zf, THETA0=THETAf, PHI0=PHIf, PSI0=PSIf
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! fine tune XYZ in DL2 of SXR

  MXYZDL2s : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, BSYLCLS2scS
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xf, YS=Yf, ZS=Zf, &
           THETAS=THETAf, PHIS=PHIf, PSIS=PSIf
      VARY, AB3Pb, STEP=1.E-5
      VARY, DDVB, STEP=1.E-6
      VARY, dDMM, STEP=1.E-6
      VARY, dLDU0s, STEP=1.E-6
      WEIGHT, XS=1, YS=1, ZS=1
      CONSTR, DBMARK36b, YS=-0.8953042661, ZS=376.3663895
      CONSTR, SXRTERM, XS=1.25, ZS=669.586492
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, AB3Pb,DDVB,dDMM,dLDU0s
!    PRINT, SXRTERM
!    SURVEY, X0=Xf, Y0=Yf, Z0=Zf, THETA0=THETAf, PHI0=PHIf, PSI0=PSIf
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match XYZ in the main SXR dumpline in BSY coordinate system
! (note: this match is applicable to HXR dumpline as well)

  MXYZDMP : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, BSYLCLS2scS
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xf, YS=Yf, ZS=Zf, &
           THETAS=THETAf, PHIS=PHIf, PSIS=PSIf
      VARY, ABdm    , STEP=1.E-5
      VARY, ARODMP1S, STEP=1.E-5
      VARY, ARODMP2S, STEP=1.E-5
      VARY, dDSB0e  , STEP=1.E-4
      VARY, dDD1c   , STEP=1.E-4
      VARY, dDWSDUMP, STEP=1.E-4
      WEIGHT, XS=1, YS=1, ZS=1, PSIS=1
      CONSTR, BYD2BA, ZS=689.6517
      CONSTR, MQDMPb, ZS=704.3025
      CONSTR, DUMPFACEb, XS=0.9399, YS=-2.654105, ZS=715.9266, PSIS=0
!      LMDIF, TOL=1.E-20, CALLS=2000
    ENDMATCH
    VALUE, ABdm,ARODMP1S,ARODMP2S,dDSB0e,dDD1c,dDWSDUMP
!    PRINT, SXRTERM ; PRINT, BYD2BA ; PRINT, MQDMPb ; PRINT, DUMPFACEb
!    SURVEY, X0=Xf, Y0=Yf, Z0=Zf, THETA0=THETAf, PHI0=PHIf, PSI0=PSIf
!    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
!    USE, BSYLCLS2scH
!    PRINT, HXRTERM ; PRINT, BYD2A ; PRINT, MQDMP ; PRINT, DUMPFACE
!    SURVEY, X0=Xf, Y0=Yf, Z0=Zf, THETA0=THETAf, PHI0=PHIf, PSI0=PSIf
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! fine tune SXR drift length after QBP32 to match with end of CUSXR

  MZCUSXR : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, BYPASS
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xbyp, YS=Ybyp, ZS=Zbyp, &
           THETAS=0, PHIS=0, PSIS=0
      VARY, zMRGCUS, STEP=1.E-6
      WEIGHT, ZS=1
      CONSTR, MRGCUSXR, ZS=ZCuS2
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, zMRGCUS
!    PRINT, MRGCUSXR
!    SURVEY, X0=Xbyp, Y0=Ybyp, Z0=Zbyp, THETA0=0, PHI0=0, PSI0=0
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match HXR spreader line

  TBXSPM := 120.
  TBYSPM :=  60.

  MSPRDh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, SPRDh
    MATCH, BETA0=TWSSP
    !!VARY, dLDSP3h, STEP=1.E-3, LOWER=-2, UPPER=2
    !!VARY, dLDSP5h, STEP=1.E-3, LOWER=-7, UPPER=7
    !!VARY, dLDSP6h, STEP=1.E-3, LOWER=-7, UPPER=7
    !!VARY, TBXSP  , STEP=1.E-3, LOWER=0.01 !uncomment beta/alpha for R56 tuning
    !!VARY, TBYSP  , STEP=1.E-3, LOWER=0.01
    !!VARY, TAXSP  , STEP=1.E-4
    !!VARY, TAYSP  , STEP=1.E-4
      VARY, KQSP1h , STEP=1.E-4, LOWER=0, UPPER= 0.570
      VARY, KQSP2h , STEP=1.E-4, UPPER=0, LOWER=-2.807
      VARY, KQSP3h , STEP=1.E-4, LOWER=0, UPPER= 0.431
      VARY, KQSP4h , STEP=1.E-4, UPPER=0, LOWER=-0.570
      VARY, KQSP5h , STEP=1.E-4, LOWER=0, UPPER= 0.570
      VARY, KQSP6h , STEP=1.E-4, UPPER=0, LOWER=-0.570
      VARY, KQSP7h , STEP=1.E-4, LOWER=0, UPPER= 2.807
      VARY, KQSP10h, STEP=1.E-4, UPPER=0, LOWER=-0.570
      VARY, KQSP11h, STEP=1.E-4, LOWER=0, UPPER= 0.431
      VARY, KQSP12h, STEP=1.E-4, UPPER=0, LOWER=-2.807
      VARY, KQSP13h, STEP=1.E-4, LOWER=0, UPPER= 0.570
      RMATRIX, #S/#E, RM(5,6)=R56SPh, WEIGHT(5,6)=100
      CONSTR, #E, DX=0, DPX=0, DY=0, DPY=0
    !!WEIGHT, BETX=3.E-6, BETY=3.E-6 !for R56 tuning only
    !!WEIGHT, BETX=1.E-4, BETY=1
    !!CONSTR, #S, BETX<TBXSPM+1.E-8, BETY<TBYSPM+1.E-8
    !!WEIGHT, DX=1.E-4, DY=1.E-4
      CONSTR, QSP7h[1], DX=0, DY=0, ALFX=0, ALFY=0
      WEIGHT, BETX=1.E-5, BETY=1.E-5
    !!WEIGHT, BETX=3.E-6, BETY=3.E-6 !for R56 tuning only
      CONSTR, BYSP1HA[1], BETX<100
      CONSTR, BYSP2HA[1], BETX<100
      CONSTR, QSP1h[1] , BETX<210, BETY<210
      CONSTR, QSP2h[1] , BETX<210, BETY<210
      WEIGHT, BETX=1.E-5, BETY=1.E-5, DX=1.E-3, DY=1.E-3
    !!WEIGHT, BETX=1.E-6, BETY=1.E-6 !for R56 tuning only
      CONSTR, QSP3h[1] , BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP4h[1] , BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP5h[1] , BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP6h[1] , BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP7h[1] , BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP8h[1] , BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP9h[1] , BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP10h[1], BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      CONSTR, QSP11h[1], BETX<110, BETY<110, DX>-0.35,DX<0.35, DY>-0.15,DY<0.15
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      WEIGHT, ALFX=0,ALFY=0,DX=0,DPX=0,DY=0,DPY=0,X=0,PX=0,Y=0,PY=0,T=0,PT=0
      COUPLE, QSP1h[1]/QSP13h[1]
      COUPLE, QSP2h[1]/QSP12h[1]
      COUPLE, QSP3h[1]/QSP11h[1]
!      LMDIF, TOL=1.E-20, CALLS=50000
    ENDMATCH
    VALUE, dLDSP3h,dLDSP5h,dLDSP6h
    VALUE, TBXSP,TBYSP,TAXSP,TAYSP
    VALUE, KQSP1h,KQSP2h,KQSP3h,KQSP4h,KQSP5h,KQSP6h,KQSP7h
    VALUE, KQSP10h,KQSP11h,KQSP12h,KQSP13h
    TWISS, BETA0=TWSSP, MUX=0, MUY=0, SAVE, COUPLE, TAPE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, STYLE=100, SPLINE, &
      FILE="LCLS2sc", RANGE=#S/#E
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, STYLE=100, SPLINE, &
      FILE="LCLS2sc", RANGE=#S/#E
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match SXR spreader line

  MSPRDs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, SPRDs
    MATCH, BETA0=TWSSP
    !!VARY, dLDSPQ3, STEP=1.E-3, LOWER=-1, UPPER=16
    !!VARY, dLDSP2s, STEP=1.E-3, LOWER=-0.5, UPPER=5
    !!VARY, dLDSP3s, STEP=1.E-3, LOWER=-0.5, UPPER=5
    !!VARY, dLDSP5s, STEP=1.E-3, LOWER=-3, UPPER=3
    !!VARY, dLDSP6s, STEP=1.E-3, LOWER=-12.4, UPPER=-6.4
      VARY, KQSP1 , STEP=1.E-4, LOWER=0, UPPER= 0.570
      VARY, KQSP2 , STEP=1.E-4, UPPER=0, LOWER=-0.570
      VARY, KQSP1s, STEP=1.E-4, LOWER=0, UPPER= 0.431
      VARY, KQSP2s, STEP=1.E-4, UPPER=0, LOWER=-0.431
      VARY, KQSP3s, STEP=1.E-4, LOWER=0, UPPER= 0.431
      VARY, KQSP4s, STEP=1.E-4, UPPER=0, LOWER=-0.570
      VARY, KQSP5s, STEP=1.E-4, LOWER=0, UPPER= 0.570
      VARY, KQSP8s, STEP=1.E-4, UPPER=0, LOWER=-0.431
      VARY, KQSP9s, STEP=1.E-4, LOWER=0, UPPER= 0.431
      RMATRIX, #S/#E, RM(5,6)=R56SPs, WEIGHT(5,6)=100
      CONSTR, QSP5s[1], ALFX=0, ALFY=0, DPX=0
      CONSTR, #E, DX=0, DPX=0
      WEIGHT, DY=1.E-4, DPY=1.E-4
      CONSTR, #E, DY=0, DPY=0
      WEIGHT, BETX=1.E-5, BETY=1
      CONSTR, BKYSP1sa[1], BETX<100, BETY<TBYSPM
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, BLXSPsa[1] , BETY<100
      CONSTR, BYSP1Sa[1] , BETX<100
      CONSTR, BYSP2Sa[1] , BETX<100
    !!WEIGHT, BETX=1.E-6, BETY=1.E-6 !for R56 tuning only
      CONSTR, QSP1s[1], BETX<100, BETY<100
      CONSTR, QSP2s[1], BETX<100, BETY<140
      CONSTR, QSP3s[1], BETX<100, BETY<100
      CONSTR, QSP4s[1], BETX<100, BETY<100
      CONSTR, QSP5s[1], BETX<100, BETY<100
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      WEIGHT, ALFX=0,ALFY=0,DX=0,DPX=0,DY=0,DPY=0,X=0,PX=0,Y=0,PY=0,T=0,PT=0
      COUPLE, QSP1s[1]/QSP9s[1]
!      LMDIF, TOL=1.E-20, CALLS=50000
    ENDMATCH
    VALUE, dLDSPQ2, dLDSPQ3
    VALUE, dLDSP2s,dLDSP3s,dLDSP5s,dLDSP6s
    VALUE, KQSP1,KQSP2
    VALUE, KQSP1s,KQSP2s,KQSP3s,KQSP4s,KQSP5s,KQSP8s,KQSP9s
    TWISS, BETA0=TWSSP, MUX=0, MUY=0, SAVE !, COUPLE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, STYLE=100, SPLINE, &
      FILE="LCLS2sc", RANGE=#S/#E
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, STYLE=100, SPLINE, &
      FILE="LCLS2sc", RANGE=#S/#E
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match spreader to BSY dump

  MSPRDd : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPd
    USE, SPRDd
    MATCH, BETA0=TWSSP
      VARY, KQSP1d, STEP=1.E-4, LOWER=-0.570, UPPER=0.570
      VARY, KQSP2d, STEP=1.E-4, LOWER=-0.570, UPPER=0.570
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, #E, BETX<377, BETY<377
!      LMDIF, TOL=1.E-20, CALLS=2000
    ENDMATCH
    VALUE, KQSP1d,KQSP2d
    TWISS, BETA0=TWSSP, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., RANGE=#S/#E, FILE="LCLS2sc"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=#S/#E, FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match from bypass to LTUSPLIT

  MBYPSP : SUBROUTINE
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,LCLS2scC,FODOLa)
    MATCH, BETA0=TWSSi
      VARY, KQBP25, STEP=1.E-4, LOWER=-0.161, UPPER=0.161
      VARY, KQBP26, STEP=1.E-4, LOWER=-0.161, UPPER=0.161
      VARY, KQBP27, STEP=1.E-4, LOWER=-0.161, UPPER=0.161
      VARY, KQBP35, STEP=1.E-4, LOWER=-0.650, UPPER=0.650
      VARY, KQBP28, STEP=1.E-4, LOWER=-0.650, UPPER=0.650
      CONSTR, #E, BETX=TBXSP, BETY=TBYSP, ALFX=TAXSP, ALFY=TAYSP
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, QBP26[1], BETX<460, BETY<460
      CONSTR, QBP27[1], BETX<460, BETY<460
      CONSTR, QBP35[1], BETX<400, BETY<400
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQBP25,KQBP26,KQBP27,KQBP35,KQBP28
    TWISS, BETA0=TWSSi, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QBP23[1]/#E, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match DL2 dispersion in SXR

  MDL2Bb : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, DL2sc
    MATCH, BETA0=TWSSms
      VARY, KQDLb, STEP=1.E-4, LOWER=0, UPPER=0.570
      CONSTR, #E, DX=0, DPX=0
      RMATRIX, #S/#E, RM(1,6)=0, RM(2,6)=0, WEIGHT(1,6)=100, WEIGHT(2,6)=100
      TMATRIX, #S/#E, TM(5,6,6)=0, WEIGHT(5,6,6)=0
!      LMDIF, TOL=1.E-20, CALLS=1000
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQDLb
    TWISS, SAVE, BETA0=TWSSms
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! find initial twiss for DL2 cells in SXR

  MDL2Mb : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, DL2sc
    MATCH, BETA0=TWSSms
      VARY, MBETXs, STEP=1.E-4, LOWER=0.01
      VARY, MALFXs, STEP=1.E-5, LOWER=-20, UPPER=20
      VARY, MBETYs, STEP=1.E-4, LOWER=0.01
      VARY, MALFYs, STEP=1.E-5, LOWER=-20, UPPER=20
      CONSTR, QDL12[1], ALFX=0, ALFY=0
      CONSTR, QDL13[1], ALFX=0, ALFY=0
      CONSTR, QDL14[1], ALFX=0, ALFY=0
      CONSTR, QDL15[1], ALFX=0, ALFY=0
      CONSTR, QDL16[1], ALFX=0, ALFY=0
      CONSTR, QDL17[1], ALFX=0, ALFY=0
      CONSTR, QDL18[1], ALFX=0, ALFY=0
      CONSTR, QDL19[1], ALFX=0, ALFY=0
!      LMDIF, TOL=1.E-20, CALLS=2000
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, MBETXs,MALFXs,MBETYs,MALFYs
    TWISS, SAVE, BETA0=TWSSms
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match from bypass to horizontal dogleg bends in SXR LTU
! for nominal machine SC -> SXR with CUSXR beamline OFF

  MSPLTUs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, (FODOLb,BYPM,BSYLTUsc)
    MATCH, BETA0=TWSSP
    !!VARY, zQBP36, STEP=1.E-3, LOWER=-6, UPPER=6
    !!VARY, zQBP30, STEP=1.E-3, LOWER=-6, UPPER=6
    !!VARY, zQBP31, STEP=1.E-3, LOWER=-6, UPPER=6
    !!VARY, zQBP32, STEP=1.E-3, LOWER=-6, UPPER=6
    !!VARY, zQBP33, STEP=1.E-3, LOWER=-6, UPPER=6
    !!VARY, zQBP34, STEP=1.E-3, LOWER=-6, UPPER=0.1
      VARY, KQBP36, STEP=1.E-4, LOWER=-0.650, UPPER=0.650
      VARY, KQBP30, STEP=1.E-4, LOWER=-0.650, UPPER=0.650
      VARY, KQBP31, STEP=1.E-4, LOWER=-0.650, UPPER=0.650
      VARY, KQBP32, STEP=1.E-4, LOWER=-0.650, UPPER=0.650
      VARY, KQBP33, STEP=1.E-4, LOWER=-0.650, UPPER=0.650 !10 GeV
      VARY, KQBP34, STEP=1.E-4, LOWER=-0.650, UPPER=0.650 !10 GeV
      VARY, KQDBL1, STEP=1.E-4, LOWER=-2.807, UPPER=2.807 !10 GeV
      VARY, KQDBL2, STEP=1.E-4, LOWER=-2.807, UPPER=2.807 !10 GeV
      CONSTR, DBMARK34B, BETX=MBETXs, BETY=MBETYs, ALFX=MALFXs, ALFY=MALFYs
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, QBP36[1], BETX<80 , BETY<80
      CONSTR, QBP30[1], BETX<125, BETY<125
      CONSTR, QBP31[1], BETX<155, BETY<125
      CONSTR, QBP32[1], BETX<125, BETY<125
      CONSTR, QBP33[1], BETX<125, BETY<125
      CONSTR, QBP34[1], BETX<155, BETY<125
!      SIMPLEX, TOL=1.E-20, CALLS=1000
!      LMDIF, TOL=1.E-20, CALLS=20000
    ENDMATCH
    VALUE, zQBP36,zQBP30,zQBP31,zQBP32,zQBP33,zQBP34
    VALUE, KQBP36,KQBP30,KQBP31,KQBP32,KQBP33,KQBP34,KQDBL1,KQDBL2
    TWISS, BETA0=TWSSP, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=CNTSP2S/DBLDL21, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/DBLDL21, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
 ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match dispersion in VBENDb in SXR

  MVBENDb : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, VBENDb
    MATCH, BETX=10, BETY=10, ENERGY=Ef
      VARY, KQVBb, STEP=1.E-4, LOWER=-2.807, UPPER=0
      RMATRIX, #S/#E, RM(3,6)=0, RM(4,6)=0
      TMATRIX, #S/#E, TM(5,6,6)=0, WEIGHT(5,6,6)=0
!      LMDIF, TOL=1.E-20, CALLS=2000
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQVBb
    TWISS, BETX=10, BETY=10, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match from DL2sc to VBENDb in SXR

  MDL2VB : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, LTUsc
    MATCH, BETA0=TWSSms
      VARY, KQDL20, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      VARY, KQDL21, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      VARY, KQDL22, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      VARY, KQVM3b, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      CONSTR, BPMVB2B, ALFY=0, ALFX=0, BETY<10
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, QDL21[1], BETX<45, BETY<45
      CONSTR, QDL22[1], BETX<45, BETY<45
      CONSTR, QVM3B[1], BETX<45, BETY<45
      CONSTR, QVM4B[1], BETX<45, BETY<45
!      LMDIF, TOL=1.E-20, CALLS=5000
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQDL20,KQDL21,KQDL22,KQVM3b
    TWISS, BETA0=TWSSms, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QDL19[1]/QVM4B[2], &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=QDL19[1]/QVM4B[2], &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match FODO quad strength for 45-deg wire-to-wire phase adv. in SXR

  MECELL : SUBROUTINE
    USE, ECELLb
    CELL
      VARY, KQED2b, STEP=1.E-4, LOWER=0, UPPER=0.555
      CONSTR, #E, MUX=45/360
!      LMDIF, TOL=1.E-20, CALLS=1000
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQED2b
    TWISS, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/#E, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! find periodic beta's at wire scanners in LTU emit-diag section in SXR

  MED2P : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, EDSYSb
    MATCH, ENERGY=Ef, BETX=BX1, ALFX=AX1, BETY=BY1, ALFY=AY1
      VARY, BX1, STEP=1.E-4, LOWER=0.01, UPPER=100
      VARY, AX1, STEP=1.E-5, LOWER=-20 , UPPER=20
      VARY, BY1, STEP=1.E-4, LOWER=0.01, UPPER=100
      VARY, AY1, STEP=1.E-5, LOWER=-20 , UPPER=20
      CONSTR, WS31b, BETX=BX1, BETY=BY1
      CONSTR, WS32b, BETX=BX1, BETY=BY1
      CONSTR, WS33b, BETX=BX1, BETY=BY1
      CONSTR, WS34b, BETX=BX1, BETY=BY1
!      LMDIF, TOL=1.E-20, CALLS=1000
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, BX1,AX1,BY1,AY1
    TWISS, SAVE, BETX=BX1, ALFX=AX1, BETY=BY1, ALFY=AY1
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/#E, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match from VBENDb to emit-diag section in SXR

  MED2DL2b : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, LTUsc
    MATCH, BETA0=TWSSms
      VARY, KQVM3b, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      VARY, KQVM4b, STEP=1.E-4, LOWER=-1.405, UPPER=1.405
      VARY, KQEM1b, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      VARY, KQEM2b, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      VARY, KQEM3b, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      VARY, KQEM4b, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      CONSTR, WS31B, BETX=BX1, BETY=BY1, ALFX=AX1, ALFY=AY1
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, QEM1B[1], BETX<50, BETY<50
      CONSTR, QEM2B[1], BETX<55, BETY<55
      CONSTR, QEM3B[1], BETX<70, BETY<70
!      LMDIF, TOL=1.E-20, CALLS=10000
!      MIGRAD, TOL=1.E-20, CALLS=2000
    ENDMATCH
    VALUE, KQVM3b,KQVM4b,KQEM1b,KQEM2b,KQEM3b,KQEM4b
    TWISS, BETA0=TWSSms, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QDL19[1]/WS34B, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match beta through extension cells to entrance of SXR undulator

  MSXRXX : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, (LTUsc,SEQ08END,SEQ09BEG,SXRXX,SEQ09END,SEQ10BEG,SXR)
    MATCH, BETA0=TWSSms
      VARY, KQUM1b, STEP=1.E-4, UPPER= 2.807, LOWER=-2.807*0 !10 GeV
     !VARY, KQUM2b, STEP=1.E-4, LOWER=-2.807, UPPER= 2.807*0
      VARY, KQUM3b, STEP=1.E-4, UPPER= 2.807, LOWER=-2.807*0
      VARY, KQUM4b, STEP=1.E-4, LOWER=-2.807, UPPER= 2.807*0
      VARY, KQSX16, STEP=1.E-4, LOWER=-1.499, UPPER=1.499 !10 GeV
      VARY, KQSX19, STEP=1.E-4, LOWER=-1.499, UPPER=1.499
      VARY, KQSX21, STEP=1.E-4, LOWER=-1.499, UPPER=1.499
      VARY, KQSX24, STEP=1.E-4, LOWER=-1.499, UPPER=1.499
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0, X=0, PX=0, Y=0, PY=0, T=0, PT=0
      WEIGHT, BETX=1.E-5, BETY=1.E-5, ALFX=0, ALFY=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]
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, QUM2B[1] , BETX<65, BETY<65
      CONSTR, QUM3B[1] , BETX<65, BETY<65
      CONSTR, QUM4B[1] , BETX<65, BETY<65
      CONSTR, QSXh16[1], BETX<65, BETY<65
      CONSTR, QSXh19[1], BETX<60, BETY<60
      CONSTR, QSXh21[1], BETX<55, BETY<55
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQUM1b,KQUM2b,KQUM3b,KQUM4b
    VALUE, KQSX16,KQSX19,KQSX21,KQSX24
    TWISS, BETA0=TWSSms, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QE35B[1]/QSXh47[2], &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match dumpline in SXR

  MDUMPs : SUBROUTINE !old routine -- do not use
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, (LTUsc,SEQ08END,SXRUND,DUMPLINEb)
    MATCH, BETA0=TWSSms
      VARY, kQDSXm, STEP=1.E-4, LOWER=-0.999, UPPER=0.999 !15 GeV
      VARY, KQUE1b, STEP=1.E-4, LOWER=-0.380, UPPER=0.380 !15 GeV
      VARY, KQUE2b, STEP=1.E-4, LOWER=-0.570, UPPER=0.570 !10 GeV
      VARY, KQDMPb, STEP=1.E-4, LOWER=-0.182, UPPER=0.182 !17 GeV
      CONSTR, OTRDMPB, DY>0.46, BETY<0.6, BETX>100
      WEIGHT, ALFY=1.E-5
      CONSTR, OTRDMPB, ALFY=0
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, QUE1B[1] , BETY<150, BETX<350
      CONSTR, QUE2B[1] , BETY<150, BETX<350
      CONSTR, QDMP1B[1], BETY<150, BETX<350
      CONSTR, QDMP2B[1], BETY<150, BETX<350
      WEIGHT, DY=10, BETX=1.E-6
      CONSTR, DUMPFACEB, DY<0.4  , BETX<390
!!!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, kQDSXm,KQUE1b,KQUE2b,KQDMPb
    TWISS, BETA0=TWSSms, SAVE=TWISS
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QSXh45[1]/DUMPFACEB, &
      TITLE="SXR undulator to Dump, w/o coupling", FILE="LCLS2sc"
    TWISS, BETA0=TWSSms, SAVE=TWISS, COUPLE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QSXh45[1]/DUMPFACEB, &
      TITLE="SXR undulator to Dump, with coupling", FILE="LCLS2sc"
  ENDSUBROUTINE

  MDUMPs2 : SUBROUTINE !matching TCAV per Yuantao's requirements
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, (LTUsc,SEQ08END,SXRUND,DUMPLINEb)
    MATCH, BETA0=TWSSms
      VARY, kQDSXm, STEP=1.E-4, LOWER=-0.999, UPPER=0.999 !15 GeV
      VARY, KQUE1b, STEP=1.E-4, LOWER=-0.380, UPPER=0.380 !15 GeV
      VARY, KQUE2b, STEP=1.E-4, LOWER=-0.570, UPPER=0.570 !10 GeV
      VARY, KQDMPb, STEP=1.E-4, LOWER=-0.182, UPPER=0.182 !17 GeV
      WEIGHT, BETX=1.E-5 
      CONSTR, MTCXB, BETX>90 !need large betx (close to 100 m)
     !WEIGHT, DY=1.E-3, BETY=1, BETX=1 !relaxed Dy
      WEIGHT, DY=10, BETY=1.E-5, BETX=1 !relaxed bety
      CONSTR, OTRDMPB, DY>0.46, BETY<0.6, BETX>20 !need large betx
      WEIGHT, BETX=0, BETY=0, ALFX=0, ALFY=0, DX=0, DPX=0, DY=0, DPY=0
      WEIGHT, X=0, PX=0, Y=0, PY=0, T=0, PT=0
      WEIGHT, MUX=10, MUY=0
      COUPLE, MTCXB/OTRDMPB, MUX>70/360, MUX<110/360
      WEIGHT, MUX=1.E-4
      COUPLE, MTCXB/OTRDMPB, MUX=90/360
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, QUE1B[1] , BETY<150, BETX<350
      CONSTR, QUE2B[1] , BETY<150, BETX<350
      CONSTR, QDMP1B[1], BETY<150, BETX<350
      CONSTR, QDMP2B[1], BETY<150, BETX<350
      WEIGHT, DY=10, BETX=1.E-6
      CONSTR, DUMPFACEB, DY<0.4  , BETX<350
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, kQDSXm,KQUE1b,KQUE2b,KQDMPb
    PRINT, MTCXB ; PRINT, OTRDMPB
    TWISS, BETA0=TWSSms, SAVE=TWISS
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QSXh45[1]/DUMPFACEB, &
      TITLE="SXR undulator to Dump, w/o coupling", FILE="LCLS2sc"
    TWISS, BETA0=TWSSms, SAVE=TWISS, COUPLE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QSXh45[1]/DUMPFACEB, &
      TITLE="SXR undulator to Dump, with coupling", FILE="LCLS2sc"
  ENDSUBROUTINE

! ==============================================================================
! HXR matching
! ------------------------------------------------------------------------------

  MDL2B : SUBROUTINE !match DL2 dogleg dispersion in HXR
    BEAM, ENERGY=Ef
    USE, DL23
    MATCH, BETX=1, BETY=1
      VARY, KQDL, STEP=1.E-4, UPPER=0.827, LOWER=0
      RMATRIX, #S/#E, RM(1,6)=0, RM(2,6)=0
      TMATRIX, #S/#E, TM(5,6,6)=0, WEIGHT(5,6,6)=0
!      LMDIF, TOL=1.E-20
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQDL
    TWISS, BETX=1, BETY=1, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
     STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! note: not exact match here is due to slight asymmetry of the two bend
!       positions relative to the quad (per existing LCLS-I deck)
!       and focusing due to R56 chicane bends

  MDL2M : SUBROUTINE !old -- find symmetric beta through bend cells
    BEAM, ENERGY=Ef
    USE, DL23
    MATCH, BETA0=TWSSmh
      VARY, MBETXh, STEP=1.E-4, UPPER=100, LOWER=  0.01
      VARY, MALFXh, STEP=1.E-5, UPPER= 20, LOWER=-20
      VARY, MBETYh, STEP=1.E-4, UPPER=100, LOWER=  0.01
      VARY, MALFYh, STEP=1.E-5, UPPER= 20, LOWER=-20
      CONSTR, #E, BETX=MBETXh, ALFX=-MALFXh, BETY=MBETYh, ALFY=-MALFYh
      CONSTR, BPMDL3, BETX<5
!!!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, MBETXh,MALFXh,MBETYh,MALFYh
    TWISS, BETA0=TWSSmh, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

  MDL2M2 : SUBROUTINE !new -- find symmetric beta through bend cells
    BEAM, ENERGY=Ef
    USE, (MM1,DOGLG2A,DOGLG2B,MM2)
    MATCH, BETA0=TWSSmh
      VARY, MBETXh, STEP=1.E-4, UPPER=100, LOWER=0.01
      VARY, MBETYh, STEP=1.E-4, UPPER=100, LOWER=0.01
      VARY, MALFXh, STEP=1.E-5, UPPER=20 , LOWER=-20
      VARY, MALFYh, STEP=1.E-5, UPPER=20 , LOWER=-20
      WEIGHT, ALFX=5.E-2, ALFY=2.E-4
      CONSTR, QDL31[1], ALFX=0, ALFY=0, BETX<5
      CONSTR, QDL32[1], ALFX=0, ALFY=0, BETX<5
      CONSTR, QDL33[1], ALFX=0, ALFY=0, BETX<5
      CONSTR, QT12[1] , ALFX=0, ALFY=0
      CONSTR, QT22[1] , ALFX=0, ALFY=0
      CONSTR, QT32[1] , ALFX=0, ALFY=0
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, MBETXh,MALFXh,MBETYh,MALFYh
    TWISS, BETA0=TWSSmh, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match from end of HXR spreader through BSY to LTU

  MBSY : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (SPRDh,SPhBSY,LTU), RANGE=#S/MM1
    MATCH, BETA0=TWSSP
    !!VARY, zQ6   , STEP=1.E-4, LOWER=-5, UPPER=5
      VARY, KQ50Q3, STEP=1.E-4
      VARY, KQ4   , STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQ5   , STEP=1.E-4, LOWER=-0.949, UPPER=0.949 !17 GeV
      VARY, KQ6   , STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQA0  , STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM1 , STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM2 , STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM3 , STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM4 , STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      CONSTR, MM1, BETX=MBETXh, BETY=MBETYh, ALFX=MALFXh, ALFY=MALFYh
      WEIGHT, ALFX=2.E-5, ALFY=2.E-5
      CONSTR, QVB2[1], ALFX=0, ALFY=0
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, Q4[1]  , BETX<105, BETY<105
      CONSTR, Q5[1]  , BETX<120, BETY<105
      CONSTR, Q6[1]  , BETX<105, BETY<105
      CONSTR, QA0[1] , BETX<105, BETY<105
      CONSTR, QVM1[1], BETX<100, BETY<100
      CONSTR, QVM2[1], BETX<100, BETY<100
      CONSTR, QVB1[1], BETX<100, BETY<100
      CONSTR, QVB2[1], BETX<100, BETY<100
      CONSTR, QVB3[1], BETX<100, BETY<100
      CONSTR, QVM3[1], BETX<100, BETY<100
!      SIMPLEX, TOL=1.E-20, CALLS=5000
!      LMDIF, TOL=1.E-20, CALLS=20000
    ENDMATCH
    MATCH, BETA0=TWSSP
      VARY, KQVM1, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM2, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM3, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM4, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      CONSTR, MM1, BETX=MBETXh, ALFX=MALFXh, BETY=MBETYh, ALFY=MALFYh
!      LMDIF, TOL=1.E-20, CALLS=5000
    ENDMATCH
    !VALUE, zQ6
    VALUE, KQ50Q3,KQ4,KQ5,KQ6,KQA0,KQVM1,KQVM2,KQVM3,KQVM4
    TWISS, BETA0=TWSSP, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=SPhBSY/MM1, &
      STYLE=100, SPLINE, FILE="LCLS2sc"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/MM1, &
      STYLE=100, SPLINE, FILE="LCLS2sc"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=#S/MM1, &
      STYLE=100, SPLINE, FILE="LCLS2sc"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, STYLE=100, SPLINE=.T., &
      FILE="LCLS2sc", RANGE=LTU
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, STYLE=100, SPLINE=.T., &
      FILE="LCLS2sc", RANGE=LTU
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! not used any more

  MBSYDL2 : SUBROUTINE !match BSY to DL2 dogleg
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (SPRDh,SPhBSY,LTU)
    MATCH, BETA0=TWSSP
      VARY, KQVM1, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM2, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM3, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      VARY, KQVM4, STEP=1.E-4, LOWER=-0.949, UPPER=0.949
      CONSTR, MM1, BETX=MBETXh, ALFX=MALFXh, BETY=MBETYh, ALFY=MALFYh
!!!      LMDIF, TOL=1.E-20, CALLS=5000
    ENDMATCH
    VALUE, KQVM1,KQVM2,KQVM3,KQVM4
    TWISS, BETA0=TWSSP, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, STYLE=100, SPLINE=.T., &
      FILE="LCLS2sc", RANGE=LTU
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, STYLE=100, SPLINE=.T., &
      FILE="LCLS2sc", RANGE=LTU
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match from bend cells to emit-diag section

  MED2DL2 : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (SPRDh,SPhBSY,LTU)
    MATCH, BETA0=TWSSP
      VARY, KQEM1, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      VARY, KQEM2, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      VARY, KQEM3, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      VARY, KQEM4, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      CONSTR, WS31, BETX=BXEDh, ALFX=AXEDh, BETY=BYEDh, ALFY=AYEDh
!     LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, KQEM1,KQEM2,KQEM3,KQEM4
    TWISS, BETA0=TWSSP, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc", RANGE=LTU
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match beta in the HXR undulator

  MUNDh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (LTU,HXRUND), RANGE=MM1/#E
    MATCH, BETA0=TWSSmh
      VARY, KQUM1, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      VARY, KQUM2, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      VARY, KQUM3, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      VARY, KQUM4, STEP=1.E-4, UPPER=0.827, LOWER=-0.827
      WEIGHT, DX=0, DPX=0, DY=0, DPY=0, X=0, PX=0, Y=0, PY=0, T=0, PT=0
      WEIGHT, BETX=1.E-5, BETY=1.E-5, ALFX=0, ALFY=0
      COUPLE, MUQh[1]/MUQh[3]
      COUPLE, MUQh[2]/MUQh[4]
      COUPLE, MUQh[1]/MUQh[5]
      COUPLE, MUQh[2]/MUQh[6]
      COUPLE, MUQh[1]/MUQh[7]
      COUPLE, MUQh[2]/MUQh[8]
      COUPLE, MUQh[1]/MUQh[9]
      COUPLE, MUQh[2]/MUQh[10]
      COUPLE, MUQh[1]/MUQh[11]
      COUPLE, MUQh[2]/MUQh[12]
      COUPLE, MUQh[1]/MUQh[13]
      COUPLE, MUQh[2]/MUQh[14]
      COUPLE, MUQh[1]/MUQh[15]
      COUPLE, MUQh[2]/MUQh[16]
      COUPLE, MUQh[1]/MUQh[17]
      COUPLE, MUQh[2]/MUQh[18]
      COUPLE, MUQh[1]/MUQh[19]
      COUPLE, MUQh[2]/MUQh[20]
      COUPLE, MUQh[1]/MUQh[21]
      COUPLE, MUQh[2]/MUQh[22]
      COUPLE, MUQh[1]/MUQh[23]
      COUPLE, MUQh[2]/MUQh[24]
      COUPLE, MUQh[1]/MUQh[25]
      COUPLE, MUQh[2]/MUQh[26]
      COUPLE, MUQh[1]/MUQh[27]
      COUPLE, MUQh[2]/MUQh[28]
      COUPLE, MUQh[1]/MUQh[29]
      COUPLE, MUQh[2]/MUQh[30]
      COUPLE, MUQh[1]/MUQh[31]
      COUPLE, MUQh[2]/MUQh[32]
      COUPLE, MUQh[1]/MUQh[33]
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, QUM2[1], BETX<65, BETY<65
      CONSTR, QUM3[1], BETX<60, BETY<60
      CONSTR, QUM4[1], BETX<65, BETY<65
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQUM1,KQUM2,KQUM3,KQUM4
    TWISS, BETA0=TWSSmh, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=QE35[1]/QHXh50[2], &
      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match dumpline in HXR

  MDUMPh : SUBROUTINE !old -- do not use
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (LTU,HXRUND,DUMPLINE), RANGE=MM1/#E
    MATCH, BETA0=TWSSmh
      VARY, kQDHXm, STEP=1.E-4, LOWER=-0.999, UPPER=0.999 !15 GeV
      VARY, KQUE1 , STEP=1.E-4, LOWER=-0.149, UPPER=0.149 !17 GeV
      VARY, KQUE2 , STEP=1.E-4, LOWER=-0.169, UPPER=0.169 !15 geV
      VARY, KQDMP , STEP=1.E-4, LOWER=-0.182, UPPER=0.182 !17 GeV
      CONSTR, OTRDMP, DY>0.46, BETY<0.6, BETX>100
      WEIGHT, ALFY=1.E-5
      CONSTR, OTRDMP, ALFY=0
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, QUE1[1] , BETY<150, BETX<350
      CONSTR, QUE2[1] , BETY<150, BETX<350
      CONSTR, QDMP1[1], BETY<150, BETX<350
      CONSTR, QDMP2[1], BETY<150, BETX<350
      WEIGHT, DY=10, BETX=1.E-6
      CONSTR, DUMPFACE, DY<0.4  , BETX<450
!!!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, kQDHXm,KQUE1,KQUE2,KQDMP
    TWISS, BETA0=TWSSmh, SAVE=TWISS
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QHXh45[1]/DUMPFACE, &
      TITLE="HXR undulator to Dump, w/o coupling", FILE="LCLS2sc"
    TWISS, BETA0=TWSSmh, SAVE=TWISS, COUPLE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QHXh45[1]/DUMPFACE, &
      TITLE="HXR undulator to Dump, with coupling", FILE="LCLS2sc"
  ENDSUBROUTINE

  MDUMPh2 : SUBROUTINE !matching TCAV per Yuantao's requirements
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (LTU,HXRUND,DUMPLINE), RANGE=MM1/#E
    MATCH, BETA0=TWSSmh
      VARY, kQDHXm, STEP=1.E-4, LOWER=-0.999, UPPER=0.999 !15 GeV
      VARY, KQUE1 , STEP=1.E-4, LOWER=-0.149, UPPER=0.149 !17 GeV
      VARY, KQUE2 , STEP=1.E-4, LOWER=-0.169, UPPER=0.169 !15 geV
      VARY, KQDMP , STEP=1.E-4, LOWER=-0.182, UPPER=0.182 !17 GeV
      WEIGHT, DY=10, BETY=1, BETX=1
     !CONSTR, OTRDMP, DY>0.46, BETY<9, BETX>20 !relaxed bety, large betx
      CONSTR, OTRDMP, DY>0.46, BETY<5, BETX>20 !relaxed bety, large betx
     !WEIGHT, DY=1.E-3, BETY=1, BETX=1 !relaxed Dy
     !WEIGHT, DY=1.E-2, BETY=1.E-4, BETX=1 !relaxed bety
     !CONSTR, OTRDMP, DY>0.46, BETY<0.6, BETX>20
      WEIGHT, BETX=1.E-4
     !CONSTR, MTCX, BETX>80
      CONSTR, MTCX, BETX>56 !need large betx (up to 100 m)
      WEIGHT, BETX=0, BETY=0, ALFX=0, ALFY=0, DX=0, DPX=0, DY=0, DPY=0
      WEIGHT, X=0, PX=0, Y=0, PY=0, T=0, PT=0
      WEIGHT, MUX=10, MUY=0
      COUPLE, MTCX/OTRDMP, MUX>70/360, MUX<110/360
      WEIGHT, MUX=1.E-4
      COUPLE, MTCX/OTRDMP, MUX=90/360
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, QUE1[1] , BETY<150, BETX<350
      CONSTR, QUE2[1] , BETY<150, BETX<350
      CONSTR, QDMP1[1], BETY<150, BETX<350
      CONSTR, QDMP2[1], BETY<150, BETX<350
      WEIGHT, DY=10, BETX=1.E-6
      CONSTR, DUMPFACE, DY<0.4  , BETX<350
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, kQDHXm,KQUE1,KQUE2,KQDMP
    PRINT, MTCX ; PRINT, OTRDMP
    TWISS, BETA0=TWSSmh, SAVE=TWISS
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QHXh45[1]/DUMPFACE, &
      TITLE="HXR undulator to Dump, w/o coupling", FILE="LCLS2sc"
    TWISS, BETA0=TWSSmh, SAVE=TWISS, COUPLE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., RANGE=QHXh45[1]/DUMPFACE, &
      TITLE="HXR undulator to Dump, with coupling", FILE="LCLS2sc"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! match Twiss in A-line for SC beam
! make sure the A-line geometry is matched before this match

  MALINEsc : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALON
    USE, BSYLCLS2scAL, RANGE=#S/ALWALL
    MATCH, BETA0=TWSSP
      VARY, KQ10, STEP=1.E-4
      VARY, KQ11, STEP=1.E-4
      VARY, KQ19, STEP=1.E-4
      VARY, KQ20, STEP=1.E-4
      VARY, KQ27, STEP=1.E-4
      VARY, KQ28, STEP=1.E-4
      VARY, KQ30, STEP=1.E-4
      VARY, KQ38, STEP=1.E-4
      CONSTR, ALWALL[1], BETX=7.834394963E+03, ALFX=4.252254496E+02, &
                         BETY=4.018221983E+02, ALFY=2.208989467E+01, &
                         DX=0, DPX=0
      WEIGHT, BETX=1.E-6
      CONSTR, Q19[1], BETX<300
      CONSTR, Q20[1], BETX<200
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQ10,KQ11,KQ19,KQ20,KQ27,KQ28,KQ30,KQ38
    TWISS, COUPLE, SAVE, BETA0=TWSSP
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=rBETX,rBETY, SPLINE, &
      STYLE=100, TITLE="A-line", FILE="LCLS2sc", RANGE=ALINE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, SPLINE, &
      STYLE=100, TITLE="A-line", FILE="LCLS2sc", RANGE=ALINE
  ENDSUBROUTINE

! ==============================================================================
! R56 checks
! ------------------------------------------------------------------------------

  TWSSEXT : BETA0, ENERGY=Ef
  BEAM, ENERGY=Ei
  USE, (LCLS2scI,LCLS2scC)
  SAVEBETA, TWSSEXT, BEGEXT
  TWISS, BETA0=TWSSi

  MR56BYPDOG : SUBROUTINE
    BEAM, ENERGY=Ef
    USE, (EXT,DLBM)
    MATCH, BETA0=TWSSEXT
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, #S/#E, TM(6,6,6)=0
      RMATRIX, #S/#E, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

  MR56SPs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, SPRDs
    MATCH, BETA0=TWSSP
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, #S/#E, TM(6,6,6)=0
      RMATRIX, #S/#E, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

  MR56SPh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, SPRDh
    MATCH, BETA0=TWSSP
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, #S/#E, TM(6,6,6)=0
      RMATRIX, #S/#E, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

  MR56VBENDs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, LTUsc
    MATCH, BETA0=TWSSms
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, VBinb/VBoutb, TM(6,6,6)=0
      RMATRIX, VBinb/VBoutb, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

  MR56VBENDh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (SPRDh,SPhBSY,LTU)
    MATCH, BETA0=TWSSP
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, VBin/VBout, TM(6,6,6)=0
      RMATRIX, VBin/VBout, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

  MR56LTUs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, LTUsc
    MATCH, BETA0=TWSSms
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, #S/#E, TM(6,6,6)=0
      RMATRIX, #S/#E, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

  MR56LTUh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (SPRDh,SPhBSY,LTU)
    MATCH, BETA0=TWSSP
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, ENDSPH/#E, TM(6,6,6)=0
      RMATRIX, ENDSPH/#E, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

  MR56DOGLTUs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs ; SET, SETCUS, CUSOFF
    USE, (EXT,DLBM,LCLS2scS)
    MATCH, BETA0=TWSSEXT
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, #S/ENDLTUS, TM(6,6,6)=0
      RMATRIX, #S/ENDLTUS, RM(6,6)=1
    ENDMATCH
    TWISS, CHROM, BETA0=TWSSEXT, SAVE=TWISS
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      COLOUR=100, SPLINE=.T., RANGE=#S/ENDSXR, FILE="LCLS2sc", &
      TITLE="Dispersion from EXT to end of SXR undulator"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DDX,DDY, &
      COLOUR=100, SPLINE=.T., RANGE=#S/ENDSXR, FILE="LCLS2sc", &
      TITLE="2nd order dispersion from EXT to end of SXR undulator"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=WX,WY, &
      COLOUR=100, SPLINE=.T., RANGE=#S/ENDSXR, FILE="LCLS2sc", &
      TITLE="W-function from EXT to end of SXR undulator"
  ENDSUBROUTINE

  MR56DOGLTUh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALOFF
    USE, (EXT,DLBM,LCLS2scH)
    MATCH, BETA0=TWSSEXT
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, #S/ENDLTUH, TM(6,6,6)=0
      RMATRIX, #S/ENDLTUH, RM(6,6)=1
    ENDMATCH
    TWISS, CHROM, BETA0=TWSSEXT, SAVE=TWISS
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      COLOUR=100, SPLINE=.T., RANGE=#S/ENDHXR, FILE="LCLS2sc", &
      TITLE="Dispersion from EXT to end of HXR undulator"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DDX,DDY, &
      COLOUR=100, SPLINE=.T., RANGE=#S/ENDHXR, FILE="LCLS2sc", &
      TITLE="2nd order dispersion from EXT to end of HXR undulator"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=WX,WY, &
      COLOUR=100, SPLINE=.T., RANGE=#S/ENDHXR, FILE="LCLS2sc", &
      TITLE="W-function from EXT to end of HXR undulator"
  ENDSUBROUTINE

  MR56ALINE : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh ; SET, SETAL, ALON
    USE, BSYLCLS2scAL, RANGE=#S/ALWALL
    MATCH, BETA0=TWSSP
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, BEGALINE/ENDB, TM(6,6,6)=0
      RMATRIX, BEGALINE/ENDB, RM(6,6)=1
    ENDMATCH
  ENDSUBROUTINE

! ==============================================================================
! COMMANDs
! ------------------------------------------------------------------------------

  OPTION, ECHO

 !ML0E
 !ML1E
 !ML2E
 !ML3E

 !MCMfodo1
 !MCMfodo2
 !MCMfodo3
 !MC0fodo
 !MC1fodo
 !MC2fodo
 !MXfodo

 !MHEATER
 !MBC1
 !MBC2
 !MCCDLU
 !MCCDLD

 !MASTRA
 !MTWSS0
 !ML0LH
 !MLHD0
 !MD0Coll0
 !MColl0Coll1
 !MColl1L2
 !ML2Coll2
 !MColl2L3
 !ML3LX
 !MDLGEO
 !MDLDXY
 !MDLBXY
 !MDLDDXY
 !MLXDL
 !MDLBYP
 !MDIAG0

  RETURN

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

 !MSTRT
 !MXYZSPh
 !MXYZSPs
 !MXYZSPd
 !MXYZBSY
 !MXYZDL2h
 !MXYZDL2s
 !MXYZDMP
 !MZCUSXR
 !MSPRDh
 !MSPRDs
 !MSPRDd
 !MBYPSP
 !MDL2Bb
 !MDL2Mb
 !MSPLTUs
 !MVBENDb
 !MDL2VB
 !MECELL
 !MED2P
 !MED2DL2b
 !MSXRXX
 !MDUMPs2
 !MDL2B
 !MDL2M2
 !MBSY
 !MED2DL2
 !MUNDh
 !MDUMPh2
 !MALINEsc

 !MR56BYPDOG
 !MR56SPs
 !MR56SPh
 !MR56VBENDs
 !MR56VBENDh
 !MR56LTUs
 !MR56LTUh
 !MR56DOGLTUs
 !MR56DOGLTUh
 !MR56ALINE

! ==============================================================================
! working stuff
! ------------------------------------------------------------------------------

  COMMENT
    DO, TIMES=20
      SET, R56SPH, R56SPH+0.05E-3
      VALUE, R56SPH
      MSPRDH
    ENDDO
    RETURN
  ENDCOMMENT

  COMMENT
    DO, TIMES=30
      SET, R56SPS, R56SPS-0.1E-3
      VALUE, R56SPS
      MSPRDS ; MSPLTUS
    ENDDO
    RETURN
  ENDCOMMENT

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

  RETURN
