
! *** OPTICS=LCLS2sc19JUN15 ***

! LCLS2sc matching routines

! ==============================================================================
! Modification History
! ------------------------------------------------------------------------------
! 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 !, UPPER=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 !LOWER
      VARY, KQ0H06, STEP=1.E-6, LOWER=0 !UPPER
      VARY, KQ0H07, STEP=1.E-6, LOWER=0 !UPPER
      VARY, KQ0H08, STEP=1.E-6, UPPER=0 !LOWER
      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"
  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=BEGHTR/#E
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      STYLE=100, SPLINE=.F., 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
    VALUE, KQC010,KQC011,KQC012,QCM02[K1],QCM03[K1],KQ1C01
    BEAM, ENERGY=Ei
    USE, (LCLS2scI,HTR,COL0,L1,BC1,COL1)
    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, #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
    VALUE, YANG0,XANG0,SROL0,AROLL0K,AROLL0L,YK01,YK02,LHH0,LTWK0a,LTWK0b
    VALUE, KQBF0,KQBD0
    BEAM, ENERGY=Ei
    USE, DIAG0
    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-6
      VARY, AROLL0L, STEP=1.E-6
      VARY, YK01,    STEP=1.E-6
      VARY, YK02,    STEP=1.E-6
      VARY, LHH0,    STEP=1.E-6
      VARY, LTWK0a,  STEP=1.E-6
      VARY, LTWK0b,  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
      CONSTR, RODG0K, PSIS=0
      CONSTR, M1DG0, XS=-YKOFF0*SIN(SROL0), YS=YKOFF0*COS(SROL0)
      CONSTR, RODG0L, PSIS=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,LHH0,LTWK0a,LTWK0b
    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, QDG004[1], BETX<26.8
      CONSTR, QDG005[1], BETY<42.3  
      CONSTR, QDG006[1], BETX<26.8
      CONSTR, QDG007[1], BETY<26.8
      CONSTR, QDG008[1], BETX<26.8
      CONSTR, QDG009[1], BETY<26.8
      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, DDG012a[L],DDG012b[L],DDG012c[L],DDG012a[L]+DDG012b[L]+DDG012c[L]
   !MATCH, &
   !  BETX=TWSSm[BETX], ALFX=TWSSm[ALFX], BETY=TWSSm[BETY], ALFY=TWSSm[ALFY]
   !  VARY, dL0mdw, STEP=1.E-6
   !  CONSTR, OTRDG04, DY=-0.54
   ! !LMDIF, TOL=1.E-20, CALLS=10000
   ! !MIGRAD, TOL=1.E-20, CALLS=10000
   !ENDMATCH
    VALUE, DDG012a[L],DDG012b[L],DDG012c[L],DDG012a[L]+DDG012b[L]+DDG012c[L]
    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" !, RANGE=#S/OTRDG02 !, VMIN=0, VMAX=45
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=DX, VAXIS2=DY, &
      STYLE=100, SPLINE=.T., FILE="match", RANGE=#S/QDG011[1]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
      STYLE=100, SPLINE=.T., FILE="match" !, RANGE=#S/QDG004[1]
  ENDSUBROUTINE

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

  TWSBYP : BETA0

  MSTRT : SUBROUTINE
    USE, FODO
!    VALUE, KQY
    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 SXR spreader

  MXYZSPs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs
    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, ABLXSP  , 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, dDCYf   , 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,ABLXSP,ABCSP1s,ABCSP2s,AROSP1s,dLDSP13s,dDCYf
!    PRINT, SPRDs ; PRINT, BSYENDb
!    SURVEY, X0=Xbyp, Y0=Ybyp, Z0=Zbyp, THETA0=0, PHI0=0, PSI0=0
  ENDSUBROUTINE

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

  MXYZSPh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh
    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-9
      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-3
      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 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, dLDSP7d, STEP=1.E-3
      WEIGHT, XS=1, YS=1, ZS=1, THETAS=1, PHIS=1, PSIS=1
    !!CONSTR, D10Jd, XS=Xbyp+0.2, YS=0, ZS=3209.088425
      CONSTR, D10Jd, YS=0, ZS=3209.088425 !when BXSP1d is off (new D10)
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, ABYSPd,ABXSPd,dLDSP7d
!    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
    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
    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
    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
    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
!    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
    USE, (BYPASS,BSYLTUsc)
    MATCH, BETX=1, BETY=1, SURVEY, XS=Xbyp, YS=Ybyp, ZS=Zbyp, &
           THETAS=0, PHIS=0, PSIS=0
      VARY, dD2Q4mb , STEP=1.E-6
      WEIGHT, ZS=1
      CONSTR, DBRCuS2b, ZS=ZCuS2
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, dD2Q4mb
!    PRINT, DBRCuS2b
!    SURVEY, X0=Xbyp, Y0=Ybyp, Z0=Zbyp, THETA0=0, PHI0=0, PSI0=0
  ENDSUBROUTINE

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

  MDL2Bb : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs
    USE, DL2sc
    !VALUE, KQDLb
    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
    PRINT, CLASS=QUADRUPOLE
!    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
    USE, DL2sc
    !VALUE, MBETXs,MALFXs,MBETYs,MALFYs
    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
!      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 HXR spreader line

  TBXSPM := 240 !450
  TBYSPM := 240 !450

  MSPRDh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh
    USE, SPRDh
    MATCH, BETA0=TWSSP
     !!VARY, dLDSP2h, STEP=1.E-3, LOWER=-10, UPPER=5
     !!VARY, dLDSP3h, STEP=1.E-3, LOWER=-1, UPPER=5
     !!VARY, dLDSP5h, STEP=1.E-3, LOWER=-5, UPPER=10
     !!VARY, dLDSP6h, STEP=1.E-3, LOWER=-5, UPPER=10
     !!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.570
      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.570
      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, BETX=TBXSPh, BETY=TBYSPh, ALFX=TAXSPh, ALFY=TAYSPh, &
                  DX=0, DPX=0, DY=0, DPY=0
    !!WEIGHT, BETX=3.E-6, BETY=3.E-6 !for R56 tuning only
    !!CONSTR, #S, BETX<TBXSPM, BETY<TBYSPM
      WEIGHT, DX=1.E-4, DY=1.E-4
      CONSTR, QSP7h[1], DX=0, DY=0, ALFX=0, ALFY=0
      WEIGHT, BETX=1.E-4, BETY=1.E-4
    !!WEIGHT, BETX=3.E-6, BETY=3.E-6 !for R56 tuning only
      CONSTR, QSP1h[1] , BETX<200, BETY<200
      CONSTR, QSP2h[1] , BETX<200, BETY<200
      WEIGHT, BETX=1.E-5, BETY=1.E-5
    !!WEIGHT, BETX=1.E-6, BETY=1.E-6 !for R56 tuning only
      CONSTR, QSP3h[1] , BETX<130, BETY<130
      CONSTR, QSP4h[1] , BETX<130, BETY<130
      CONSTR, QSP5h[1] , BETX<130, BETY<130
      CONSTR, QSP6h[1] , BETX<130, BETY<130
      CONSTR, QSP7h[1] , BETX<133, BETY<133
      CONSTR, QSP8h[1] , BETX<130, BETY<130
      CONSTR, QSP9h[1] , BETX<130, BETY<130
      CONSTR, QSP10h[1], BETX<130, BETY<130
      CONSTR, QSP11h[1], BETX<130, BETY<130
!      LMDIF, TOL=1.E-20, CALLS=20000
    ENDMATCH
   !VALUE, dLDSP2h,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
!    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
    USE, SPRDs
    MATCH, BETA0=TWSSP
    !!VARY, dLDSP2s, STEP=1.E-2, LOWER=-0.5, UPPER=5
    !!VARY, dLDSP3s, STEP=1.E-2, LOWER=-1, UPPER=5
    !!VARY, dLDSP5s, STEP=1.E-2, LOWER=-2, UPPER=10
    !!VARY, dLDSP6s, STEP=1.E-2, LOWER=-12, UPPER=20
      VARY, KQSP1s, STEP=1.E-4 !, LOWER=0, UPPER= 0.570
      VARY, KQSP2s, STEP=1.E-4 !, UPPER=0, LOWER=-0.570
      VARY, KQSP3s, STEP=1.E-4 !, LOWER=0, UPPER= 0.570
      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.570
      VARY, KQSP9s, STEP=1.E-4 !, LOWER=0, UPPER= 0.570
      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.E-5
    !!WEIGHT, BETX=1.E-6, BETY=1.E-6 !for R56 tuning only
      CONSTR, QSP2s[1], BETX<80, BETY<80
      CONSTR, QSP3s[1], BETX<80, BETY<80
      CONSTR, QSP4s[1], BETX<80, BETY<80
      CONSTR, QSP5s[1], BETX<80, BETY<80
!      LMDIF, TOL=1.E-20, CALLS=20000
    ENDMATCH
    VALUE, dLDSP2s,dLDSP3s,dLDSP5s,dLDSP6s
    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<805, BETY<805
!      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
!    VALUE, KQBP25,KQBP26,KQBP27,KQBP35,KQBP28
    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.241*1.5, UPPER=0.241*1.5
      VARY, KQBP28, STEP=1.E-4, LOWER=-0.241*1.5, UPPER=0.241*1.5
      CONSTR, #E, BETX=TBXSP, BETY=TBYSP, ALFX=TAXSP, ALFY=TAYSP
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, QBP26[1], BETX<450, BETY<450
      CONSTR, QBP27[1], BETX<450, BETY<450
      CONSTR, QBP35[1], BETX<450, BETY<450
!      LMDIF, TOL=1.E-20, CALLS=10000
!      MIGRAD, 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 from bypass to horizontal dogleg bends in SXR LTU
! for nominal machine SC -> SXR with CUSXR beamline OFF
! uncomment variables only for matching

  MSPLTUs : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs
    USE, (FODOLb,BYPM,BSYLTUsc)
    MATCH, BETA0=TWSSP
!      VARY, KQBP36, STEP=1.E-4, LOWER=-0.241*1.5, UPPER=0.241*1.5
!      VARY, KQBP30, STEP=1.E-4, LOWER=-0.241*1.5, UPPER=0.241*1.5
!      VARY, KQBP31, STEP=1.E-4, LOWER=-0.241*1.5, UPPER=0.241*1.5
!      VARY, KQBP32, STEP=1.E-4, LOWER=-0.241*1.5, UPPER=0.241*1.5
!      VARY, KQBP33, STEP=1.E-4, LOWER=-0.241*1.5, UPPER=0.241*1.5
!      VARY, KQBP34, STEP=1.E-4, LOWER=-0.241*1.5, UPPER=0.241*1.5
!      VARY, KQDBL1, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
!      VARY, KQDBL2, STEP=1.E-4, LOWER=-2.807, UPPER=2.807
      CONSTR, DBMARK34b, BETX=MBETXs,BETY=MBETYs,ALFX=MALFXs,ALFY=MALFYs
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, QBP31[1], BETX<405, BETY<405
      CONSTR, QBP32[1], BETX<420, BETY<420
      CONSTR, QBP33[1], BETX<405, BETY<405
!      SIMPLEX, TOL=1.E-20, CALLS=10000
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQBP36,KQBP30,KQBP31,KQBP32,KQBP33,KQBP34,KQDBL1,KQDBL2
!    TWISS, BETA0=TWSSP, SAVE
!    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/DBLDL21, &
!      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
!    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=#S/DBLDL21, &
!      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
 ENDSUBROUTINE

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

  MVBENDb : SUBROUTINE
    BEAM, ENERGY=Ef
    !VALUE, KQVBb
    SET, SETSP, SETSPs
    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
    USE, LTUsc
    !VALUE, KQDL20,KQDL21,KQDL22,KQVM3b
    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
    !VALUE, KQED2b
    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
    USE, EDSYSb
    !VALUE, BX1, AX1, BY1, AY1
    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
    USE, LTUsc
    !VALUE, KQVM3b, KQVM4b, KQEM1b, KQEM2b, KQEM3b, KQEM4b
    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<65, BETY<65
!      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
    USE, (LTUsc,SEQ08END,SEQ09BEG,SXRXX,SEQ09END,SEQ10BEG,SXR)
    MATCH, BETA0=TWSSms
      VARY, KQUM1b, STEP=1.E-4, UPPER= 2.807, LOWER=-2.807*0
     !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.491, UPPER=1.491
      VARY, KQSX19, STEP=1.E-4, LOWER=-1.491, UPPER=1.491
      VARY, KQSX21, STEP=1.E-4, LOWER=-1.491, UPPER=1.491
      VARY, KQSX24, STEP=1.E-4, LOWER=-1.491, UPPER=1.491
      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
!      MIGRAD, TOL=1.E-20
    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
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPs
    USE, (LTUsc,SEQ08END,SXRUND,DUMPLINEb)
    MATCH, BETA0=TWSSms
      VARY, kQDSXm, STEP=1.E-4, LOWER=-1.491, UPPER=1.491
      VARY, KQUE1b, STEP=1.E-4, LOWER=-0.570, UPPER=0.570
      VARY, KQUE2b, STEP=1.E-4, LOWER=-0.570, UPPER=0.570
      VARY, KQDMPb, STEP=1.E-4, LOWER=-0.255, UPPER=0.255
      CONSTR, OTRDMPB, DY>0.46, BETY<0.6, BETX>100
      WEIGHT, ALFY=1.E-5
      CONSTR, OTRDMPB, ALFY=0
      WEIGHT, BETX=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, BETX=1.E-6
      CONSTR, DUMPFACEB, DY<0.4  , BETX<390
!      LMDIF, TOL=1.E-20, CALLS=10000
!      MIGRAD, TOL=1.E-20
    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

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

  MDL2B : SUBROUTINE !match DL2 dogleg dispersion in HXR
    BEAM, ENERGY=Ef
    !VALUE, KQDL
    USE, DL23
    MATCH, BETX=1, BETY=1
      VARY, KQDL, STEP=1.E-5, 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

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

  MDL2M : SUBROUTINE !find symmetric beta's through bend cells
    BEAM, ENERGY=Ef
    !VALUE, MBETXh,MALFXh,MBETYh,MALFYh
    USE, DL23
    MATCH, BETA0=TWSSmh
      VARY, MBETXh, STEP=1.E-5, UPPER=100, LOWER=  0.01
      VARY, MALFXh, STEP=1.E-5, UPPER= 20, LOWER=-20
    !!VARY, MBETYh, STEP=1.E-5, 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

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

  MBSYDL2 : SUBROUTINE !match BSY to DL2 dogleg
!    VALUE, KQVM1,KQVM2,KQVM3,KQVM4
    BEAM, ENERGY=Ei
    SET, SETSP, SETSPh
    USE, (LCLS2scI,LCLS2scC,LCLS2scH)
    SAVEBETA, TWSSm, BSYEND
    TWISS, BETA0=TWSSi
    BEAM, ENERGY=Ef
    USE, LTU
    MATCH, BETA0=TWSSm
      VARY, KQVM1, STEP=1.E-5, LOWER=-0.948, UPPER=0.948
      VARY, KQVM2, STEP=1.E-5, LOWER=-0.948, UPPER=0.948
      VARY, KQVM3, STEP=1.E-5, LOWER=-0.948, UPPER=0.948
      VARY, KQVM4, STEP=1.E-5, LOWER=-0.948, UPPER=0.948
      CONSTR, MM1, BETX=MBETXh, ALFX=MALFXh, BETY=MBETYh, ALFY=MALFYh
!      LMDIF, TOL=1.E-20, CALLS=5000
!      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQVM1,KQVM2,KQVM3,KQVM4
!    TWISS, BETA0=TWSSm, SAVE
!    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, STYLE=100, SPLINE=.T., &
!      FILE="LCLS2sc"
!    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, STYLE=100, SPLINE=.T., &
!      FILE="LCLS2sc"
  ENDSUBROUTINE

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

  MED2DL2 : SUBROUTINE !match between bend cells and emit-diag section
    BEAM, ENERGY=Ei
    SET, SETSP, SETSPh
    USE, (LCLS2scI,LCLS2scC,LCLS2scH)
    SAVEBETA, TWSSm, MM2
    TWISS, BETA0=TWSSi
    BEAM, ENERGY=Ef
!    VALUE, KQEM1,KQEM2,KQEM3,KQEM4
    USE, (EDMCH,EDSYS)
    MATCH, BETA0=TWSSm
      VARY, KQEM1, STEP=1.E-5, UPPER=0.827, LOWER=-0.827
      VARY, KQEM2, STEP=1.E-5, UPPER=0.827, LOWER=-0.827
      VARY, KQEM3, STEP=1.E-5, UPPER=0.827, LOWER=-0.827
      VARY, KQEM4, STEP=1.E-5, UPPER=0.827, LOWER=-0.827
      CONSTR, WS31, BETX=BXEDh, ALFX=AXEDh, BETY=BYEDh, ALFY=AYEDh
     !for slice-emit on OTR33 with KQED2=0
     !CONSTR, OTR33, BETX=12*DE3[L]/5, BETY=12*DE3[L]/5, ALFX=0, ALFY=0
!     LMDIF, TOL=1.E-20
!     MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQEM1,KQEM2,KQEM3,KQEM4
!    TWISS, BETA0=TWSSm, SAVE
!    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
!      STYLE=100, SPLINE=.T., FILE="LCLS2sc"
  ENDSUBROUTINE

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

  MUNDh : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh
    USE, (LTU,HXRUND), RANGE=MM1/#E
    MATCH, BETA0=TWSSmh
      VARY, KQUM1, STEP=1.E-5, UPPER=0.827, LOWER=-0.827
      VARY, KQUM2, STEP=1.E-5, UPPER=0.827, LOWER=-0.827
      VARY, KQUM3, STEP=1.E-5, UPPER=0.827, LOWER=-0.827
      VARY, KQUM4, STEP=1.E-5, 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
!      MIGRAD, TOL=1.E-20
    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
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPh
    USE, (LTU,HXRUND,DUMPLINE), RANGE=MM1/#E
    MATCH, BETA0=TWSSmh
      VARY, kQDHXm, STEP=1.E-4, LOWER=-0.877, UPPER=0.877
      VARY, KQUE1 , STEP=1.E-4, LOWER=-0.150, UPPER=0.150
      VARY, KQUE2 , STEP=1.E-4, LOWER=-0.150, UPPER=0.150
      VARY, KQDMP , STEP=1.E-4, LOWER=-0.182, UPPER=0.182
      CONSTR, OTRDMP, DY>0.46, BETY<0.6, BETX>100
      WEIGHT, ALFY=1.E-5
      CONSTR, OTRDMP, ALFY=0
      WEIGHT, BETX=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, BETX=1.E-6
      CONSTR, DUMPFACE, DY<0.4  , BETX<450
!      LMDIF, TOL=1.E-20, CALLS=10000
!      MIGRAD, TOL=1.E-20
    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

! ------------------------------------------------------------------------------
! match Twiss in A-line

  MALINE : SUBROUTINE
    BEAM, ENERGY=Ef
    USE, ALINE, RANGE=#S/ALWALL
    MATCH, BETX=BXAL, ALFX=AXAL, BETY=BYAL, ALFY=AYAL
      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, BETX=BXAL, ALFX=AXAL, BETY=BYAL, ALFY=AYAL
!    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=rBETX,rBETY, SPLINE, &
!      STYLE=100, TITLE="A-line", FILE="LCLS2sc"
!    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, SPLINE, &
!      STYLE=100, TITLE="A-line", FILE="LCLS2sc"
  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
    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
    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
    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
    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
    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
    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
    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
    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
    USE, ALINE, RANGE=#S/ALWALL
    MATCH, BETX=BXAL, ALFX=AXAL, BETY=BYAL, ALFY=AYAL
      WEIGHT, I2=1, I5=1, I5I2=1
      TMATRIX, #S/ENDB, TM(6,6,6)=0
      RMATRIX, #S/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
 !MXYZSPs
 !MXYZSPh
 !MXYZSPd
 !MXYZBSY
 !MXYZDL2h
 !MXYZDL2s
 !MXYZDMP
 !MZCUSXR
 !MDL2Bb
 !MDL2Mb
 !MSPRDh
 !MSPRDs
 !MSPRDd
 !MBYPSP
 !MSPLTUs
 !MVBENDb
 !MDL2VB
 !MECELL
 !MED2P
 !MED2DL2b
 !MSXRXX
 !MDUMPs
 !MDL2B
 !MDL2M
 !MBSYDL2
 !MED2DL2
 !MUNDh
 !MDUMPh
 !MALINE

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

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

 !DO, TIMES=20
 !SET, R56SPh, R56SPh+0.05E-3
 !VALUE, R56SPh
 !MSPRDh
 !ENDDO
 !RETURN

 !DO, TIMES=30
 !SET, R56SPs, R56SPs-0.1E-3
 !VALUE, R56SPs
 !MSPRDs ; MSPLTUs
 !ENDDO
 !RETURN

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

  RETURN
