
! *** OPTICS=LCLS2sc28OCT14 ***

! LCLS2sc matching routines

! ==============================================================================
! Modification History
! ------------------------------------------------------------------------------
! 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, UPPER=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
    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
    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,DDSCAPa[L],DDSCAPb[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,DDSCAPa[L],DDSCAPb[L]
    BEAM, ENERGY=E0
    USE, (GUN,L0)
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Zgun
  ENDSUBROUTINE

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

  MTWSS0 : SUBROUTINE
    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, ASTRA
    SAVEBETA, TWSSm, #E
    TWISS, COUPLE, BETA0=TWSS0
    VALUE, TWSSm[ENERGY],TWSSm[BETX],TWSSm[ALFX],TWSSm[BETY],TWSSm[ALFY]
  ENDSUBROUTINE

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

  ML0LH : SUBROUTINE
    VALUE, KQ0H01,KQ0H02,KQ0H03,KQ0H04,KQ0H05,KQ0H06,KQ0H07,KQ0H08
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR)
    MATCH, BETA0=TWSSa
      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, 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
    MATCH, BETA0=TWSSa
      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, KQ0H01,KQ0H02,KQ0H03,KQ0H04,KQ0H05,KQ0H06,KQ0H07,KQ0H08
   !PRINT, FULL
    TWISS, BETA0=TWSSa, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., VMIN=0, FILE="match", RANGE=ENDL0B/#E
  ENDSUBROUTINE

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

  MLHD0 : SUBROUTINE
    VALUE, KQHD01,KQHD02,KQHD03,KQHD04
    VALUE, DHD00[L],DHD01[L],DHD02[L],DHD03[L],DHD04[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR,DIAG0)
    MATCH, BETA0=TWSSa
      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, BEGDIAG0, BETX=D0BX0, ALFX=D0AX0, BETY=D0BY0, ALFY=D0AY0
      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]
    USE, (LCLS2scA,HTR,DIAG0)
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Za, TAPE="survey.tape"
    TWISS, COUPLE, BETA0=TWSSa, 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
    VALUE, DC003[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR,COL0,L1)
    MATCH, BETA0=TWSSa, SURVEY, ZS=Za
      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
    VALUE, DC003[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR,COL0,L1)
   !PRINT, FULL
    SURVEY, X0=Xgun, Y0=Ygun, Z0=Za, TAPE="survey.tape"
    TWISS, BETA0=TWSSa, SAVE, TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match", RANGE=ENDHTR/CXC03
  ENDSUBROUTINE

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

  MColl0Coll1 : SUBROUTINE
    VALUE, KQC010,KQC011,KQC012,QCM02[K1],QCM03[K1],KQ1C01
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR,COL0,L1,BC1,COL1)
    MATCH, BETA0=TWSSa
      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, QC012[1], BETX>40
      CONSTR, QCM02[1], BETY<70
      CONSTR, QCM03[1], BETX<70
      CONSTR, BCX14A,   BETX=1.75, ALFX=0
      CONSTR, BC1cEND,  BETY<65
     !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]
    MATCH, BETA0=TWSSa
      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=1.0
     !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, (LCLS2scA,HTR,COL0,L1,BC1,COL1)
   !PRINT, FULL
    TWISS, BETA0=TWSSa, 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, (LCLS2scA,HTR,COL0,L1,BC1)
    SAVEBETA, TWSSm, #E
    TWISS, BETA0=TWSSa
    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, 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
    VALUE, QCM13[K1],QCM14[K1],QCM15[K1],KQ2C01,KQC201,KQC202
    VALUE, DC201[L],DC202[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR,COL0,L1,BC1,COL1)
    SAVEBETA, TWSSm, #E
    TWISS, BETA0=TWSSa
    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, 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
    VALUE, DC201[L],DC202[L]
    BEAM, ENERGY=TWSSm[ENERGY]
    USE, (L2,BC2,COL2)
   !PRINT, FULL
    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, 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, (LCLS2scA,HTR,COL0,L1,BC1,COL1,L2)
    SAVEBETA, TWSSm, #E
    TWISS, BETA0=TWSSa
    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, 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"
  ENDSUBROUTINE

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

  ML3LX : SUBROUTINE
    VALUE, QCM34[K1],QCM35[K1],KQX01,KQX02
    VALUE, DX00[L],DX01[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR,COL0,L1,BC1,COL1,L2,BC2,COL2)
    SAVEBETA, TWSSm, #E
    TWISS, BETA0=TWSSa
    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

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

  MLXDL : SUBROUTINE
    VALUE, KQX06,KQX07,KQX08,KQX09
    VALUE, DX07[L],DX08[L]
    BEAM, ENERGY=Ei
    USE, (LCLS2scA,HTR,COL0,L1,BC1,COL1,L2,BC2,COL2,L3)
    SAVEBETA, TWSSm, #E
    TWISS, BETA0=TWSSa
    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, 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
    VALUE, YANG0,XANG0,SROL0,AROLL0,YK01,YK02,LHH0,LTWK0a,LTWK0b
    VALUE, KQBF0,KQBD0
    BEAM, ENERGY=Ei
    USE, DIAG0
    MATCH, BETX=D0BX0, ALFX=D0AX0, BETY=D0BY0, ALFY=D0AY0, &
      SURVEY, XS=0, YS=0
      VARY, YANG0,  STEP=1.E-6
      VARY, XANG0,  STEP=1.E-6
      VARY, SROL0,  STEP=1.E-6
      VARY, AROLL0, 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, M1DG0, YS=YKOFF0
      CONSTR, RODG0, PSIS=0
      CONSTR, QDG003[2], DY=0, DPY=0
      CONSTR, M2DG0, XS=DX0, YS=0, THETAS=0, PHIS=0, DX=0, DPX=0, X=0
     !LMDIF, TOL=1.E-20, CALLS=10000
     !MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, YANG0,XANG0,SROL0,AROLL0,YK01,YK02,LHH0,LTWK0a,LTWK0b
    VALUE, KQBF0,KQBD0
    VALUE, D0BX0, D0AX0, D0BY0, D0AY0
    VALUE, KQDG004,KQDG005,KQDG006,KQDG007,KQDG008,KQDG009
    MATCH, BETX=D0BX0, ALFX=D0AX0, BETY=D0BY0, ALFY=D0AY0
      VARY, D0BX0, STEP=1.E-6, LOWER=0, UPPER=20
      VARY, D0AX0, STEP=1.E-6
      VARY, D0BY0, STEP=1.E-6, LOWER=0, UPPER=20
      VARY, D0AY0, STEP=1.E-6
      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, QDG001[1], BETX<25
      CONSTR, QDG002[1], BETY<25
      CONSTR, QDG003[1], BETX<25
      CONSTR, QDG004[1], BETX<25
      CONSTR, QDG005[1], BETY<25
      CONSTR, QDG006[1], BETX<25
      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, D0BX0, D0AX0, D0BY0, D0AY0
    VALUE, KQDG004,KQDG005,KQDG006,KQDG007,KQDG008,KQDG009
    VALUE, KQDG010,KQDG011,KQDG012
    MATCH, BETX=D0BX0, ALFX=D0AX0, BETY=D0BY0, ALFY=D0AY0
      VARY, KQDG010, STEP=1.E-6 !, LOWER=0
      VARY, KQDG011, STEP=1.E-6 !, UPPER=0
      VARY, KQDG012, STEP=1.E-6 !, UPPER=0
     !WEIGHT, BETY=100, DY=1.E-3
     !CONSTR, OTRDG04, BETY<0.16, BETX<6, DY<-0.54
      CONSTR, OTRDG04, BETY=0.16, BETX=7.5, DY=-0.75
      LMDIF, TOL=1.E-20, CALLS=10000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQDG010,KQDG011,KQDG012
    PRINT, FULL
    SURVEY
    TWISS, BETX=D0BX0, ALFX=D0AX0, BETY=D0BY0, ALFY=D0AY0, SAVE, &
      TAPE="twiss.tape"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      STYLE=100, SPLINE=.T., FILE="match" !, RANGE=#S/BPMDG0RF
    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

  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, AROSPs  , 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,AROSPs,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, dLDSP9d, 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=3176.260218
!      LMDIF, TOL=1.E-20
    ENDMATCH
    VALUE, ABYSPd,ABXSPd,dLDSP9d
!    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, ABdm0, 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, ABdm0,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

! ------------------------------------------------------------------------------
! 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.822
      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
    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= 1.05
      VARY, KQSP2h , STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP3h , STEP=1.E-4, LOWER=0, UPPER= 1.05
      VARY, KQSP4h , STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP5h , STEP=1.E-4, LOWER=0, UPPER= 1.05
      VARY, KQSP6h , STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP7h , STEP=1.E-4, LOWER=0, UPPER= 1.05
      VARY, KQSP10h, STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP11h, STEP=1.E-4, LOWER=0, UPPER= 1.05
      VARY, KQSP12h, STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP13h, STEP=1.E-4, LOWER=0, UPPER= 1.05
      CONSTR, #S, BETX<TBXSPM, BETY<TBYSPM
      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, 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
      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 !use for R56 tuning
      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<130, BETY<130
      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=10000
    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= 1.05
      VARY, KQSP2s, STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP3s, STEP=1.E-4, LOWER=0, UPPER= 1.05
      VARY, KQSP4s, STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP5s, STEP=1.E-4, LOWER=0, UPPER= 1.05
      VARY, KQSP8s, STEP=1.E-4, UPPER=0, LOWER=-1.05
      VARY, KQSP9s, STEP=1.E-4, LOWER=0, UPPER= 1.05
      RMATRIX, #S/#E, RM(5,6)=R56SPs, WEIGHT(5,6)=100
      CONSTR, QSP5s[1], ALFX=0, ALFY=0, DPX=0
      WEIGHT, DY=1.E-4, DPY=1.E-4
      CONSTR, #E, DX=0, DPX=0, DY=0, DPY=0
      WEIGHT, BETX=1.E-5, BETY=1.E-5
     !WEIGHT, BETX=1.E-6, BETY=1.E-6 !uncomment for R56 tuning
      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=10000
    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 from spreader to BSY dump (no OTR, no betay waist; QSP3d, QSP4d off)

  MSPRDd : SUBROUTINE
    BEAM, ENERGY=Ef
    SET, SETSP, SETSPd
    USE, SPRDd
    MATCH, BETA0=TWSSP
      VARY, KQSP1d, STEP=1.E-4, LOWER=-0.255, UPPER=0.255
      VARY, KQSP2d, STEP=1.E-4, LOWER=-0.255, UPPER=0.255
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, #E, BETX<640, BETY<640
!      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, (LCLS2scC,FODOLa)
    MATCH, BETA0=TWSSi
      VARY, KQBP25, STEP=1.E-4, LOWER=-0.080*1.5, UPPER=0.080*1.5
      VARY, KQBP26, STEP=1.E-4, LOWER=-0.080*1.5, UPPER=0.080*1.5
      VARY, KQBP27, STEP=1.E-4, LOWER=-0.080*1.5, UPPER=0.080*1.5
      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

  MSPLTUs : SUBROUTINE
    BEAM, ENERGY=Ei
    SET, SETSP, SETSPs
    USE, (FODOLb,BYPM,BSYLTUsc)
    MATCH, BETA0=TWSSP
     !VARY, dDCYg , STEP=1.E-3, LOWER=-4, UPPER=3
     !VARY, dDCYe , STEP=1.E-3, LOWER=-30, UPPER=30
     !VARY, dD2Q4l, STEP=1.E-3, LOWER=-30, UPPER=30
      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, KQDBL1, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQDBL2, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      CONSTR, DBMARK34b, BETX=MBETXs,BETY=MBETYs,ALFX=MALFXs,ALFY=MALFYs
      WEIGHT, BETX=1.E-5, BETY=1.E-5
      CONSTR, QBP31[1], BETX<400, BETY<400
      CONSTR, QBP32[1], BETX<420, BETY<420
      CONSTR, QBP33[1], BETX<400, BETY<400
!      SIMPLEX, TOL=1.E-20, CALLS=10000
!      LMDIF, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, dDCYg,dDCYe,dD2Q4l
    VALUE, KQBP36,KQBP30,KQBP31,KQBP32,KQBP33,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=-0.822*1.5, 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=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQDL21, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQDL22, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQVM3b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      CONSTR, BPMVB2B, ALFY=0, ALFX=0, BETY<10
      WEIGHT, BETX=1.E-6, BETY=1.E-6
      CONSTR, QDL21[1], BETX<55, BETY<55
      CONSTR, QDL22[1], BETX<60, BETY<60
      CONSTR, QVM3B[1], BETX<55, BETY<55
      CONSTR, QVM4B[1], BETX<70, BETY<70
!      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"
  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.463
      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=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQVM4b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQEM1b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQEM2b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQEM3b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      VARY, KQEM4b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER=0.822*1.5
      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= 0.822*1.5, LOWER=-0.822*0
     !VARY, KQUM2b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER= 0.822*0
      VARY, KQUM3b, STEP=1.E-4, UPPER= 0.822*1.5, LOWER=-0.822*0
      VARY, KQUM4b, STEP=1.E-4, LOWER=-0.822*1.5, UPPER= 0.822*0
      VARY, KQSX16, STEP=1.E-4, LOWER=-0.948*1.35, UPPER=0.948*1.35
      VARY, KQSX19, STEP=1.E-4, LOWER=-0.948*1.35, UPPER=0.948*1.35
      VARY, KQSX21, STEP=1.E-4, LOWER=-0.948*1.35, UPPER=0.948*1.35
      VARY, KQSX24, STEP=1.E-4, LOWER=-0.948*1.35, UPPER=0.948*1.35
      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=-2.0, UPPER=2.0
      VARY, KQUE1b, STEP=1.E-4, LOWER=-0.255, UPPER=0.255
      VARY, KQUE2b, STEP=1.E-4, LOWER=-0.255, UPPER=0.255
      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<400
!      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=1.04, 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 periodic 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
!      MIGRAD, 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, (LCLS2scC,LCLS2scH)
    SAVEBETA, TWSSm, BSYEND
    TWISS, BETA0=TWSSi
    BEAM, ENERGY=Ef
    USE, LTU
    MATCH, BETA0=TWSSm
      VARY, KQVM1, STEP=1.E-5, LOWER=-1.65, UPPER=+1.65
      VARY, KQVM2, STEP=1.E-5, LOWER=-1.65, UPPER=+1.65
      VARY, KQVM3, STEP=1.E-5, LOWER=-1.65, UPPER=+1.65
      VARY, KQVM4, STEP=1.E-5, LOWER=-1.65, UPPER=+1.65
      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, VAXIS1=BETX,BETY, VAXIS2=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, (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.85, LOWER=-0.85
      VARY, KQEM2, STEP=1.E-5, UPPER=0.85, LOWER=-0.85
      VARY, KQEM3, STEP=1.E-5, UPPER=0.85, LOWER=-0.85
      VARY, KQEM4, STEP=1.E-5, UPPER=0.85, LOWER=-0.85
      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.85, LOWER=-0.85
      VARY, KQUM2, STEP=1.E-5, UPPER=0.85, LOWER=-0.85
      VARY, KQUM3, STEP=1.E-5, UPPER=0.85, LOWER=-0.85
      VARY, KQUM4, STEP=1.E-5, UPPER=0.85, LOWER=-0.85
      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=-2.0, UPPER=2.0
      VARY, KQUE1, STEP=1.E-4, UPPER=1.65/2, LOWER=-1.65/2
      VARY, KQUE2, STEP=1.E-4, UPPER=1.65/2, LOWER=-1.65/2
      VARY, KQDMP, STEP=1.E-4, UPPER=1.65/2, LOWER=-1.65/2
      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

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

  MR56BYPDOG : SUBROUTINE
    BEAM, ENERGY=Ef
    USE, (EXT,DLBM)
    MATCH, BETX=10, BETY=10
      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

  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

! ==============================================================================
! 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
 !MLXDL
 !MDLBYP
 !MDIAG0

 !RETURN

 !MSTRT
 !MXYZSPs
 !MXYZSPh
 !MXYZSPd
 !MXYZBSY
 !MXYZDL2h
 !MXYZDL2s
 !MXYZDMP
 !MDL2Bb
 !MDL2Mb
 !MSPRDh
 !MSPRDs
 !MSPRDd
 !MBYPSP
 !MSPLTUs
 !MVBENDb
 !MDL2VB
 !MECELL
 !MED2P
 !MED2DL2b
 !MSXRXX
 !MDUMPs
 !MDL2B
 !MDL2M
 !MBSYDL2
 !MED2DL2
 !MUNDh
 !MDUMPh

 !MR56BYPDOG
 !MR56SPs
 !MR56SPh
 !MR56LTUs
 !MR56LTUh

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

  RETURN
