  TITLE, "FACET e- (v35)"

  ASSIGN, PRINT="FACET.print"
  ASSIGN, ECHO="FACET.echo"
  OPTION, -ECHO, VERIFY, DOUBLE

! ------------------------------------------------------------------------------
! 30-JAN-2015, M. Woodley
!  * experimental area modified for hydrogen plasma chamber installation and
!    spectrometer upgrade (QS0 installation)
! 10-APR-2014, M. Woodley
!  * experimental area modified for long oven installation
!  * waists at MIP (Bx*/By* = 50/500 cm)
! 04-FEB-2014, M. Woodley
!  * set R56=-7mm as nominal chicane optics (for FEB-2014 run)
! 07-NOV-2013, M. Woodley
!  * E201 device locations per C. Clarke (1 cm, 10 cm, and 20 cm samples)
!  * E213 IP location estimated by I. Tudosa
!  * dump table devices and locations per E. Adli
! 18-OCT-2013, M. Woodley
!  * "high charge" (3.2 nC = 2e10 e-/bunch)
!  * full compression
!  * LI20 chicane R56= 10 mm (symmetric "low beta" optics, wiggler on)
!  * waists at MIP (Bx*/By* = 10/100 cm)
! ------------------------------------------------------------------------------

! ------------------------------------------------------------------------------
! global parameters
! ------------------------------------------------------------------------------

  Cb    := 1.E10/CLIGHT
  IN2M  := 0.0254
  KSIGN := +1 !for e- (-1 for e+)

  NELEC := 2.0E10 !e-/bunch

  BEAM, PARTICLE=ELECTRON, NPART=NELEC

  BXF := 1
  AXF := 0
  BYF := 1
  AYF := 0

  Zdump := 2019.205290 !linac Z at dump face

! ------------------------------------------------------------------------------
! initial Twiss at NDR extraction
! ------------------------------------------------------------------------------

  E0   := 1.19
  BX0  := 2.454622934989
  AX0  := 1.9608185327
  DX0  := -0.144364207971
  DPX0 := 0.126957537287
  BY0  := 0.908712494614
  AY0  := -0.776441720386
  DY0  := -0.878257859816E-4
  DPY0 := -0.477688953972E-4

  TWSS0 : BETA0, &
    BETX=BX0, ALFX=AX0, DX=DX0, DPX=DPX0, &
    BETY=BY0, ALFY=AY0, DY=DY0, DPY=DPY0

! ------------------------------------------------------------------------------
! matched Twiss at beginning of LI02 ("PBH" optics)
! ------------------------------------------------------------------------------

  E02  := E0
  BX02 := 6.620854048
  AX02 := -0.56936
  BY02 := 6.620854048
  AY02 := -0.56936

  TW02 : BETA0, BETX=BX02, ALFX=AX02, BETY=BY02, ALFY=AY02

! ------------------------------------------------------------------------------
! beam energy at LBCC chicane (end of LI10)
! ------------------------------------------------------------------------------

  E10 := 9.0

! ------------------------------------------------------------------------------
! matched Twiss at DBMARK13 for SCAV
! ------------------------------------------------------------------------------

  E19  := 20.353820385898
  BX19 := 44.184318360698
  AX19 := -2.124339774928
  BY19 := 77.672260099239
  AY19 := 3.676689231421 

! ------------------------------------------------------------------------------
! treaty twiss at MFFF ("low-beta" optics, all R56 configurations)
! ------------------------------------------------------------------------------

  E20  := 20.35
  BX20 := 12.781480
  AX20 := -0.713808
  BY20 := 23.297308
  AY20 := -1.206162

! ------------------------------------------------------------------------------
! nominal twiss at MIP ("low-beta" optics)
! ------------------------------------------------------------------------------

  R56 := -0.007

  BXip := 0.5
  AXip := 0
  BYip := 5.0
  AYip := 0

! ------------------------------------------------------------------------------
! misc
! ------------------------------------------------------------------------------

  FENER := 1
  FBETX := 1
  FALFX := 0
  FDX   := 0
  FDPX  := 0
  FBETY := 1
  FALFY := 0
  FDY   := 0
  FDPY  := 0

  DOLINAC := 1

  Bmax   := 120 !maximum BETX/BETY in LI18-LI19
  BXc    := 185 !maximum BETX in chicane
  BYc    := 180 !maximum BETY in chicane
  BYcc   := 145 !maximum BETY at chicane center
  BSPmax := 500 !maximum BETX/BETY at dump

  WAISTS  : MARK
  IPIMAGE : MARK

  TWws : BETA0
  TW10 : BETA0
  TW18 : BETA0
  TW19 : BETA0
  TW20 : BETA0
  
! ------------------------------------------------------------------------------
! load XSIF files
! ------------------------------------------------------------------------------

  CALL "FACET_nrtl.xsif"
  CALL "FACET_linac.xsif"
  CALL "FACET_LI20.xsif"
 !CALL "FACET_LI20_EXPT_2013.xsif" !short oven
 !CALL "FACET_LI20_EXPT_2014.xsif" !long oven
  CALL "FACET_LI20_EXPT_2015.xsif" !long oven + QS0
 !CALL "FACET_LI20_mult.xsif"
 !CALL "FACET_scav.xsif"

! ------------------------------------------------------------------------------
! load auxiliary files
! ------------------------------------------------------------------------------

  CALL "FACET_magLims.mad8"
  CALL "FACET_configs.mad8"
  CALL "FACET_R56configs.mad8"
  CALL "FACET_FFconfigs.mad8"

! ------------------------------------------------------------------------------
! turn ASSET chicane OFF
! ------------------------------------------------------------------------------

  SET, ABA, 0

! ------------------------------------------------------------------------------
! subroutines
! ------------------------------------------------------------------------------

  MLBCCE : SUBROUTINE !match energy at LBCC
    BEAM, ENERGY=E02
    USE, LINAC
    MATCH, BETX=BX02, ALFX=AX02, BETY=BY02, ALFY=AY02
      VARY, PFB91, STEP=1.E-6
     !VARY, KLOSS1, STEP=1.E7
      WEIGHT, ENERGY=1
      CONSTR, DBMARK61, ENERGY=E10
      LMDIF, TOL=1.E-20
      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, PFB91,PFB91*360
   !VALUE, KLOSS1
  ENDSUBROUTINE

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

  MFACETE : SUBROUTINE !match energy at FACET
    BEAM, ENERGY=E02
    USE, LINAC
    MATCH, BETX=BX02, ALFX=AX02, BETY=BY02, ALFY=AY02
      VARY, PFB17, STEP=1.E-6
     !VARY, KLOSS2, STEP=1.E7
      WEIGHT, ENERGY=1
      CONSTR, FBEG, ENERGY=E20
      LMDIF, TOL=1.E-20
      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, PFB17,PFB17*360
   !VALUE, KLOSS2
  ENDSUBROUTINE

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

  MLI20 : SUBROUTINE !match into LI20 using LI18-LI19 quadrupoles
    BEAM, ENERGY=E02
    USE, (LINAC,LI20)
    MATCH, BETA0=TW02
     !IB18=96.374
      VARY, KQ18201, STEP=1.E-6, LOWER=+0.7933, UPPER=+0.9449
      VARY, KQ18301, STEP=1.E-6, LOWER=-0.9450, UPPER=-0.7933
      VARY, KQ18401, STEP=1.E-6, LOWER=+0.7934, UPPER=+0.9450
      VARY, KQ18501, STEP=1.E-6, LOWER=-0.9451, UPPER=-0.7934
      VARY, KQ18601, STEP=1.E-6, LOWER=+0.0000, UPPER=+1.5192
      VARY, KQ18701, STEP=1.E-6, LOWER=-1.5193, UPPER=+0.0000
      VARY, KQ18801, STEP=1.E-6, LOWER=+0.0000, UPPER=+1.5194
      VARY, KQ18901, STEP=1.E-6, LOWER=-1.5195, UPPER=+0.0000
     !IB19=93.218
      VARY, KQ19201, STEP=1.E-6, LOWER=+0.7593, UPPER=+0.9098
      VARY, KQ19301, STEP=1.E-6, LOWER=-0.8993, UPPER=-0.7506
      VARY, KQ19401, STEP=1.E-6, LOWER=+0.7421, UPPER=+0.8891
      VARY, KQ19501, STEP=1.E-6, LOWER=-0.8893, UPPER=-0.7422
     !VARY, KQ19601, STEP=1.E-6, LOWER=+0.7423, UPPER=+0.8894
     !VARY, KQ19701, STEP=1.E-6, LOWER=-0.8896, UPPER=-0.7425
      VARY, KQ19801, STEP=1.E-6, LOWER=+0.7425, UPPER=+0.8896
      VARY, KQ19901, STEP=1.E-6, LOWER=-0.8898, UPPER=-0.7426
      WEIGHT, BETX=0.01, BETY=0.01
      CONSTR, Q18201[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q18301[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q18401[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q18501[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q18601[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q18701[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q18801[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q18901[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19201[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19301[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19401[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19501[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19601[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19701[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19801[1], BETX<Bmax, BETY<Bmax
      CONSTR, Q19901[1], BETX<Bmax, BETY<Bmax
      WEIGHT, BETX=1, ALFX=10, BETY=1, ALFY=10
      CONSTR, FMDW, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      LMDIF, TOL=1.E-20, CALLS=20000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    MATCH, BETA0=TW02
      VARY, KQ18601, STEP=1.E-6, LOWER=+0.0000, UPPER=+1.5192
      VARY, KQ18701, STEP=1.E-6, LOWER=-1.5193, UPPER=+0.0000
      VARY, KQ18801, STEP=1.E-6, LOWER=+0.0000, UPPER=+1.5194
      VARY, KQ18901, STEP=1.E-6, LOWER=-1.5195, UPPER=+0.0000
      CONSTR, FMDW, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      LMDIF, TOL=1.E-20, CALLS=20000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQ18201,KQ18301,KQ18401,KQ18501,KQ18601,KQ18701,KQ18801,KQ18901
    VALUE, KQ19201,KQ19301,KQ19401,KQ19501,KQ19601,KQ19701,KQ19801,KQ19901
    BEAM, ENERGY=E02
    USE, (LINAC,LI20)
    TWISS, BETA0=TW02, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=LI17BEG/FBEG, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=LI17BEG/CB1RE, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=FMDW/MFFF, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
  ENDSUBROUTINE

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

  MFF20 : SUBROUTINE !match into LI20 using LI18 601-901 quadrupoles only
    VALUE, KQ18601,KQ18701,KQ18801,KQ18901
    BEAM, ENERGY=E02
    USE, LINAC
    SAVEBETA, TW18, LI18BEG
    TWISS, BETA0=TW02
    BEAM, ENERGY=TW18[ENERGY]
    USE, (LI18,LI19)
    MATCH, &
      BETX=TW18[BETX], ALFX=TW18[ALFX], BETY=TW18[BETY], ALFY=TW18[ALFY]
      VARY, KQ18601, STEP=1.E-6, LOWER=+0.0000, UPPER=+1.5192
      VARY, KQ18701, STEP=1.E-6, LOWER=-1.5193, UPPER=+0.0000
      VARY, KQ18801, STEP=1.E-6, LOWER=+0.0000, UPPER=+1.5194
      VARY, KQ18901, STEP=1.E-6, LOWER=-1.5195, UPPER=+0.0000
      CONSTR, FMDW, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      LMDIF, TOL=1.E-20, CALLS=20000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQ18601,KQ18701,KQ18801,KQ18901
    BEAM, ENERGY=TW18[ENERGY]
    USE, (LI18,LI19,FBEG,LI20)
    TWISS, SAVE, &
      BETX=TW18[BETX], ALFX=TW18[ALFX], BETY=TW18[BETY], ALFY=TW18[ALFY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=#S/FBEG, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=FMDW/EXPTEND, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
  ENDSUBROUTINE

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

  MCHICANE0 : SUBROUTINE !match chicane optics (symmetric)
    VALUE, KQ1EL,KQ2EL,KQ3EL,KQ4EL,KQ5EL,KQ6E
    BEAM, ENERGY=E20
    USE, (FMDW,D19901b,IM1988,D19901c,FBEG,LI20)
    MATCH, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      VARY, KQ1EL, STEP=1.E-6, LOWER=KLOQ1E, UPPER=KUPQ1E
      VARY, KQ2EL, STEP=1.E-6, LOWER=KLOQ2E, UPPER=KUPQ2E
      VARY, KQ3EL, STEP=1.E-6, LOWER=KLOQ3E, UPPER=KUPQ3E
      VARY, KQ4EL, STEP=1.E-6, LOWER=KLOQ4E, UPPER=KUPQ4E
      VARY, KQ5EL, STEP=1.E-6, LOWER=KLOQ5E, UPPER=KUPQ5E
      VARY, KQ6E,  STEP=1.E-6, LOWER=KLOQ6E, UPPER=KUPQ6E
      CONSTR, Q2EL[1], BETY<BYc
      CONSTR, Q3EL_1[1], BETX<BXc
      CONSTR, MCE, ALFX=0, DPX=0, BETY<BYcc, ALFY=0
      RMATRIX, FBEG/MCE, RM(5,6)=R56/2, WEIGHT(5,6)=1000
      LMDIF, TOL=1.E-20, CALLS=10000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQ1EL,KQ2EL,KQ3EL,KQ4EL,KQ5EL,KQ6E
    TWISS, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      COLOUR=100, SPLINE=.T., FILE="FACET", RANGE=#S/MCE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      COLOUR=100, SPLINE=.T., FILE="FACET", RANGE=#S/MCE
  ENDSUBROUTINE

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

  MCHICANE : SUBROUTINE !match chicane optics (symmetric, wiggler ON)
    VALUE, KQ1EL,KQ2EL,KQ3EL,KQ4EL,KQ5EL,KQ6E,KQ5ER,KQ2ER,KQ1ER
    BEAM, ENERGY=E20
    USE, (FMDW,D19901b,IM1988,D19901c,FBEG,LI20)
    MATCH, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      VARY, KQ1EL, STEP=1.E-6, LOWER=KLOQ1E, UPPER=KUPQ1E
      VARY, KQ2EL, STEP=1.E-6, LOWER=KLOQ2E, UPPER=KUPQ2E
      VARY, KQ3EL, STEP=1.E-6, LOWER=KLOQ3E, UPPER=KUPQ3E
      VARY, KQ4EL, STEP=1.E-6, LOWER=KLOQ4E, UPPER=KUPQ4E
      VARY, KQ5EL, STEP=1.E-6, LOWER=KLOQ5E, UPPER=KUPQ5E
      VARY, KQ6E,  STEP=1.E-6, LOWER=KLOQ6E, UPPER=KUPQ6E
      VARY, KQ5ER, STEP=1.E-6, LOWER=KLOQ5E, UPPER=KUPQ5E
      VARY, KQ2ER, STEP=1.E-6, LOWER=KLOQ2E, UPPER=KUPQ2E
      VARY, KQ1ER, STEP=1.E-6, LOWER=KLOQ1E, UPPER=KUPQ1E
      CONSTR, Q2EL[1], BETY<BYc
      CONSTR, Q3EL_1[1], BETX<BXc
      CONSTR, MCE, BETY<BYcc
      CONSTR, Q3ER_2[1], BETX<BXc
      CONSTR, Q2ER[1], BETY<BYc
      CONSTR, CB1RE, DX=0, DPX=0
      RMATRIX, FBEG/CB1RE, RM(5,6)=R56, WEIGHT(5,6)=1000
      CONSTR, MFFF, BETX=BX20, ALFX=AX20, BETY=BY20, ALFY=AY20
      LMDIF, TOL=1.E-20, CALLS=10000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQ1EL,KQ2EL,KQ3EL,KQ4EL,KQ5EL,KQ6E,KQ5ER,KQ2ER,KQ1ER
    TWISS, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
      COLOUR=100, SPLINE=.T., FILE="FACET", RANGE=#S/MFFF
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
      COLOUR=100, SPLINE=.T., FILE="FACET", RANGE=#S/MFFF
  ENDSUBROUTINE

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

  MSEXT : SUBROUTINE !match WX and DDX at WAISTS
    BEAM, ENERGY=E20
    USE, (FMDW,D19901b,IM1988,D19901c,FBEG,LI20)
    TWISS, CHROM, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
    MATCH, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      VARY, KS1E, STEP=1.E-6, LOWER=KLOS1E, UPPER=KUPS1E
      VARY, KS2E, STEP=1.E-6, LOWER=KLOS2E, UPPER=KUPS2E
     !VARY, KS3E, STEP=1.E-6, LOWER=KLOS3E, UPPER=KUPS3E
      WEIGHT, WX=1, WY=0.01, DDX=1000
      CONSTR, WAISTS, WX<125, WY<50, DDX=0
      LMDIF, TOL=1.E-20, CALLS=10000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KS1E,KS2E,KS3E
  ENDSUBROUTINE

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

  MFF : SUBROUTINE !match to IP using FF quads
    VALUE, KQFF1,KQFF2,KQFF4,KQFF5,KQFF6
    BEAM, ENERGY=E20
    USE, (FMDW,D19901b,IM1988,D19901c,FBEG,LI20)
    MATCH, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      VARY, KQFF1, STEP=1.E-5, LOWER=KLOQFF1, UPPER=KUPQFF1
      VARY, KQFF2, STEP=1.E-5, LOWER=KLOQFF2, UPPER=KUPQFF2
      VARY, KQFF4, STEP=1.E-5, LOWER=KLOQFF4, UPPER=KUPQFF4
      VARY, KQFF5, STEP=1.E-5, LOWER=KLOQFF5, UPPER=KUPQFF5
     !VARY, KQFF6, STEP=1.E-5, LOWER=KLOQFF6, UPPER=KUPQFF6
     !WEIGHT, BETX=1/BXip, BETY=1/BYip
      CONSTR, WAISTS, BETX=BXip, ALFX=AXip, BETY=BYip, ALFY=AYip
     !WEIGHT, MUX=0, BETX=0, ALFX=0, DX=0, DPX=0, &
     !        MUY=1, BETY=0, ALFY=0, DY=0, DPY=0
     !COUPLE, XTCAVF[1]/IP2A, MUY=270/360
      LMDIF, TOL=1.E-20, CALLS=10000
      MIGRAD, TOL=1.E-20, CALLS=10000
    ENDMATCH
    VALUE, KQFF1,KQFF2,KQFF4,KQFF5,KQFF6
    MATCH, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
      WEIGHT, MUX=0, BETX=0, ALFX=0, DX=0, DPX=0, &
              MUY=1, BETY=0, ALFY=0, DY=0, DPY=0
      COUPLE, XTCAVF[1]/IP2A, MUY=270/360
      COUPLE, XTCAVF[1]/IP2B, MUY=270/360
      RMATRIX, XTCAVF[1]/IP2A, RM(3,4)=1
      RMATRIX, XTCAVF[1]/IP2B, RM(3,4)=1
    ENDMATCH
   !PRINT, FULL
    TWISS, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=MFFF/EXPTEND, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
  ENDSUBROUTINE

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

  MSPECT : SUBROUTINE !image IP to AEROGEL (waists u/s of QS0)
    VALUE, KQS0,KQS1,KQS2
    BEAM, ENERGY=E20
    USE, (FMDW,D19901b,IM1988,D19901c,FBEG,LI20)
    MATCH, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
     !VARY, KQS0, STEP=1.E-5, LOWER=KLOQS0, UPPER=KUPQS0
      VARY, KQS1, STEP=1.E-5, LOWER=KLOQS1, UPPER=KUPQS1
      VARY, KQS2, STEP=1.E-5, LOWER=KLOQS2, UPPER=KUPQS2
      RMATRIX, WAISTS/IPIMAGE, RM(1,2)=0, RM(3,4)=0
      CONSTR, #E, X=0, PX=0, Y=0, PY=0
      LMDIF, TOL=1.E-20
      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQS0,KQS1,KQS2
   !PRINT, FULL
    TWISS, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=MFFF/#E, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=MFFF/#E, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
  ENDSUBROUTINE

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

  MSPECT2 : SUBROUTINE !minimize betas at dump (waists d/s of QS0)
    VALUE, KQS0,KQS1,KQS2
    BEAM, ENERGY=E20
    USE, (FMDW,D19901b,IM1988,D19901c,FBEG,LI20)
    MATCH, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20
     !VARY, KQS0, STEP=1.E-5, LOWER=KLOQS0, UPPER=KUPQS0
      VARY, KQS1, STEP=1.E-5, LOWER=KLOQS1, UPPER=KUPQS1
      VARY, KQS2, STEP=1.E-5, LOWER=KLOQS2, UPPER=KUPQS2
      CONSTR, #E, BETX<BSPmax, BETY<BSPmax
      LMDIF, TOL=1.E-20
      MIGRAD, TOL=1.E-20
    ENDMATCH
    VALUE, KQS0,KQS1,KQS2
   !PRINT, FULL
    TWISS, BETX=BX20, ALFX=-AX20, BETY=BY20, ALFY=-AY20, SAVE
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=MFFF/#E, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
  ENDSUBROUTINE

! ------------------------------------------------------------------------------
! commands
! ------------------------------------------------------------------------------

  SETPLOT, XSIZE=25.4, YSIZE=20.32
  SETPLOT, LWIDTH=5, LSCALE=1.5, SSCALE=1.5, RSCALE=1.5
  OPTION, ECHO

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

 !CALL "RDB/makeSymbols.mad8"
 !CALL, FILENAME="makeLucretia.mad8"

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

! machine configurations

 !HICHARGE !nominal (defined in XSIF files)
 !NOLOADHI !use with HICHARGE (for skeleton deck generation)
 !LOCHARGE
 !NOLOADLO !use with LOCHARGE

 !R56_0mm
 !R56_1mm
 !R56_2mm
 !R56_3mm
 !R56_4mm
 !R56_5mm
 !R56_6mm
 !R56_7mm !nominal
 !R56_8mm
 !R56_9mm
 !R56_10mm

 !POSI20 !e+ match

             MIP   : LIST=(WAISTS) ; AEROGEL : LIST=(IPIMAGE) !nominal
 !FFIP200a ; MIP   : LIST=(WAISTS) ; AEROGEL : LIST=(IPIMAGE) !50x500
 !FFIP200b ; MIP   : LIST=(WAISTS) ; AEROGEL : LIST=(IPIMAGE) !10x100
 !FFWSIP3a ; WSIP3 : LIST=(WAISTS) ! QS0 on                   !50x500
 !FFWSIP3b ; WSIP3 : LIST=(WAISTS) ! QS0 off                  !50x500

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

! matching

 !MLBCCE    !match beam energy at LBCC
 !MFACETE   !match beam energy at LL20
 !MLI20     !match into LI20 using LI18-LI19 quadrupoles
 !MFF20     !match into LI20 using LI18 601-901 quadrupoles only
 !MCHICANE0 !match chicane optics (symmetric)
 !MCHICANE  !match chicane optics (symmetric, wiggler ON)
 !MSEXT     !match WX and DDX at WAISTS
 !MFF       !match to IP using FF quads
 !MSPECT    !image IP to AEROGEL
 !MSPECT2   !minimize betas at dump
  
 !FFQBDES
  
 !STOP

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

  COMMENT !NRTL R56 (exit of compressor RF to LI02)
    BEAM, ENERGY=E0
    USE, NRTL
    MATCH, BETA0=TWSS0
      RMATRIX, AS1505/#E, RM(5,6)=0
      TMATRIX, AS1505/#E, TM(5,6,6)=0
    ENDMATCH
    PRINT, DBMARK11
    TWISS, CHROM, BETA0=TWSS0
    STOP
  ENDCOMMENT

  COMMENT !LCBB R56
    BEAM, ENERGY=E02
    USE, LINAC
    SAVEBETA, TW10, DBMARK61
    TWISS, BETX=BX02, ALFX=AX02, BETY=BY02, ALFY=AY02
    BEAM, ENERGY=E10
    USE, LBCC
    MATCH, &
      BETX=TW10[BETX], ALFX=TW10[ALFX], BETY=TW10[BETY], ALFY=TW10[ALFY]
      RMATRIX, #S/#E, RM(5,6)=0
      TMATRIX, #S/#E, TM(5,6,6)=0
    ENDMATCH
    PRINT, DBMARK62
    TWISS, CHROM, &
      BETX=TW10[BETX], ALFX=TW10[ALFX], BETY=TW10[BETY], ALFY=TW10[ALFY]
    STOP
  ENDCOMMENT

  COMMENT !LI20 R56
    BEAM, ENERGY=E02
    USE, LINAC
    SAVEBETA, TW20, FBEG
    TWISS, BETX=BX02, ALFX=AX02, BETY=BY02, ALFY=AY02
    BEAM, ENERGY=E20
    USE, CHICANE
    MATCH, &
      BETX=TW20[BETX], ALFX=TW20[ALFX], BETY=TW20[BETY], ALFY=TW20[ALFY]
      RMATRIX, #S/#E, RM(5,6)=0
      TMATRIX, #S/#E, TM(5,6,6)=0
    ENDMATCH
    PRINT, #E
    TWISS, CHROM, &
      BETX=TW20[BETX], ALFX=TW20[ALFX], BETY=TW20[BETY], ALFY=TW20[ALFY]
    STOP
  ENDCOMMENT

  COMMENT !LI20 spectrometer
    BEAM, ENERGY=E20
    USE, (FF,EXPT2014,SPECT)
    MATCH,  BETX=BX20, ALFX=AX20, BETY=BY20, ALFY=AY20
      RMATRIX, #S/#E, RM(5,6)=0
      TMATRIX, #S/#E, TM(5,6,6)=0
    ENDMATCH
    PRINT, FULL
    SAVEBETA, TWip, WAISTS
    TWISS, BETX=BX20, ALFX=AX20, BETY=BY20, ALFY=AY20
    VALUE, TWip[BETX],TWip[ALFX],TWip[DX],TWip[DPX]
    VALUE, TWip[BETY],TWip[ALFY],TWip[DY],TWip[DPY]
    TWISS, CHROM, BETX=BX20, ALFX=AX20, BETY=BY20, ALFY=AY20
    STOP
  ENDCOMMENT

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

 !COMMENT
    TITLE "FACET e- (v34): NRTL-LI20"
    SET, FENER, E0
    SET, FBETX, BX0
    SET, FALFX, AX0
    SET, FDX,   DX0
    SET, FDPX,  DPX0
    SET, FBETY, BY0
    SET, FALFY, AY0
    SET, FDY,   DY0
    SET, FDPY,  DPY0
    FACETe : LINE=(NRTL,LINAC,LI20)
    SET, DOLINAC, 1
 !ENDCOMMENT

  COMMENT
    TITLE "FACET e- (v34): LI02-LI20"
    SET, FENER, E02
    SET, FBETX, BX02
    SET, FALFX, AX02
    SET, FDX,   0
    SET, FDPX,  0
    SET, FBETY, BY02
    SET, FALFY, AY02
    SET, FDY,   0
    SET, FDPY,  0
    FACETe : LINE=(LINAC,LI20)
    SET, DOLINAC, 1
  ENDCOMMENT

  COMMENT
    TITLE "FACET e- (v34): LI20"
    SET, FENER, E20
    SET, FBETX, BX20
    SET, FALFX, -AX20
    SET, FDX,   0
    SET, FDPX,  0
    SET, FBETY, BY20
    SET, FALFY, -AY20
    SET, FDY,   0
    SET, FDPY,  0
    FACETe : LINE=(FMDW,D19901b,IM1988,D19901c,FBEG,LI20)
    SET, DOLINAC, 0
  ENDCOMMENT

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

  COMMENT
    BEAM, ENERGY=FENER
    USE, FACETe
    PRINT, FULL
    MATCH, &
      BETX=FBETX, ALFX=FALFX, DX=FDX, DPX=FDPX, &
      BETY=FBETY, ALFY=FALFY, DY=FDY, DPY=FDPY
      RMATRIX WAISTS/IPIMAGE, RM(1,2)=0, RM(3,4)=0
      TMATRIX WAISTS/IPIMAGE, TM(1,2,6)=0, TM(3,4,6)=0
    ENDMATCH
  ENDCOMMENT

 !COMMENT
    BEAM, ENERGY=FENER
    USE, FACETe
    PRINT, FULL
    IF COND=DOLINAC "=" 1
      SAVEBETA, TWws, WS02119
      SAVEBETA, TW10, DBMARK61
      SAVEBETA, TW18, WS18944
      SAVEBETA, TW19, DBMARK13
      SAVEBETA, TW20, FMDW
    ENDIF
    SAVEBETA, TWff, MFFF
    SAVEBETA, TWip, MIP !WAISTS
   !TWISS, COUPLE, SAVE, TAPE="FACET_twiss.tape", RTAPE="FACET_rmat.tape", &
   !  BETX=FBETX, ALFX=FALFX, DX=FDX, DPX=FDPX, &
   !  BETY=FBETY, ALFY=FALFY, DY=FDY, DPY=FDPY
    TWISS, SAVE, TAPE="FACET_twiss.tape", RTAPE="FACET_rmat.tape", &
      BETX=FBETX, ALFX=FALFX, DX=FDX, DPX=FDPX, &
      BETY=FBETY, ALFY=FALFY, DY=FDY, DPY=FDPY
    IF COND=DOLINAC "=" 1
      VALUE, TWws[ENERGY],TWws[BETX],TWws[ALFX],TWws[BETY],TWws[ALFY]
      VALUE, TW10[ENERGY]
      VALUE, TW18[ENERGY],TW18[BETX],TW18[ALFX],TW18[BETY],TW18[ALFY]
      VALUE, TW19[ENERGY],TW19[BETX],TW19[ALFX],TW19[BETY],TW19[ALFY]
      VALUE, TW20[ENERGY],TW20[BETX],TW20[ALFX],TW20[BETY],TW20[ALFY]
    ENDIF
    VALUE, TWff[ENERGY]
    VALUE, TWff[BETX],TWff[ALFX],TWff[DX],TWff[DPX]
    VALUE, TWff[BETY],TWff[ALFY],TWff[DY],TWff[DPY]
    VALUE, TWip[BETX],TWip[ALFX],TWip[DX],TWip[DPX]
    VALUE, TWip[BETY],TWip[ALFY],TWip[DY],TWip[DPY]
    IF COND=DOLINAC "=" 1
      PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=BETX,BETY, VAXIS2=DX,DY, &
        TITLE="Sector 10 Chicane (e-)", RANGE=K10_7D3/D10901B, &
        COLOUR=100, SPLINE=.T., FILE="FACET"
      PLOT, TABLE=TWISS, HAXIS=S, VAXIS=ENERGY, &
        TITLE="NRTL + Linac + LI20", &
        COLOUR=100, SPLINE=.T., FILE="FACET"
      PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, &
        TITLE="NRTL + Linac + LI20", &
        COLOUR=100, SPLINE=.T., FILE="FACET"
      PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, &
        TITLE="NRTL + Linac + LI20", &
        COLOUR=100, SPLINE=.T., FILE="FACET"
      PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=LI17BEG/CB1RE, &
        TITLE="LI17-LI19 + LI20 Chicane", &
        COLOUR=100, SPLINE=.T., FILE="FACET"
    ENDIF
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=FMDW/MFFF,&
      TITLE="LI20 Chicane", &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=FMDW/MFFF,&
      TITLE="LI20 Chicane", &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=FMDW/#E,&
      TITLE="LI20", &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=FMDW/#E, &
      TITLE="LI20", &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=CB1RE/EXPTEND, &
      TITLE="LI20 FF + Experimental Area", &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY, RANGE=CB1RE/EXPTEND, &
      TITLE="LI20 FF + Experimental Area", &
      COLOUR=100, SPLINE=.T., FILE="FACET", VMIN=-0.001, VMAX=0.001
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY, RANGE=WAISTS/IPIMAGE, &
      TITLE="WAISTS to IPIMAGE", &
      COLOUR=100, SPLINE=.T., FILE="FACET"
 !ENDCOMMENT

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

  COMMENT
    BEAM, ENERGY=FENER
    USE, FACETe
    PRINT, FULL
    SAVEBETA, TWip, WAISTS
    TWISS, CHROM, SAVE, TAPE="chrom.tape", &
      BETX=FBETX, ALFX=FALFX, DX=FDX, DPX=FDPX, &
      BETY=FBETY, ALFY=FALFY, DY=FDY, DPY=FDPY
    VALUE, TWip[ENERGY]
    VALUE, TWip[BETX],TWip[ALFX],TWip[DX],TWip[DPX]
    VALUE, TWip[BETY],TWip[ALFY],TWip[DY],TWip[DPY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=WX,WY, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DDX,DDY, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS1=DDX, VAXIS2=DDY, &
      COLOUR=100, SPLINE=.T., FILE="FACET"
  ENDCOMMENT

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

 !COMMENT
    BEAM, ENERGY=E0
    USE, (NRTL,LINAC,LI20)
    PRINT, FULL
    SURVEY, TAPE="FACET_survey.tape", &
      X0=XNDR,Y0=YNDR,Z0=ZNDR,THETA0=TNDR,PHI0=PNDR,PSI0=RNDR
 !ENDCOMMENT

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

! for Matlab model

  COMMENT
    MIP : MARK
    AEROGEL : MARK
    BEAM, ENERGY=FENER
    USE, FACETe
    SAVELINE, NAME="FACET", FILENAME="FACET.saveline"
  ENDCOMMENT

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

! for skeleton decks

  COMMENT
    MIP : MARK
    NOLOADHI
    BEAM, ENERGY=E02
    USE, (LINAC,LI20)
    PRINT, FULL
    SAVEBETA, TW10, DBMARK10
    SAVEBETA, TW12, DBMARK12
    SAVEBETA, TW18, LI18BEG
    SAVEBETA, TW13, DBMARK13
    SAVEBETA, TW20, FBEG
    SAVEBETA, TWff, MFFF
    SAVEBETA, TWip, MIP
    TWISS, BETX=BX02, ALFX=AX02, BETY=BY02, ALFY=AY02, TAPE="twiss.tape"
    VALUE, TW10[ENERGY],TW10[BETX],TW10[ALFX],TW10[BETY],TW10[ALFY]
    VALUE, TW12[ENERGY],TW12[BETX],TW12[ALFX],TW12[BETY],TW12[ALFY]
    VALUE, TW18[ENERGY],TW18[BETX],TW18[ALFX],TW18[BETY],TW18[ALFY]
    VALUE, TW13[ENERGY],TW13[BETX],TW13[ALFX],TW13[BETY],TW13[ALFY]
    VALUE, TW20[ENERGY],TW20[BETX],TW20[ALFX],TW20[BETY],TW20[ALFY]
    VALUE, TWff[ENERGY],TWff[BETX],TWff[ALFX],TWff[BETY],TWff[ALFY]
    VALUE, TWip[ENERGY],TWip[BETX],TWip[ALFX],TWip[BETY],TWip[ALFY]
  ENDCOMMENT

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

! for LiTrack

  COMMENT
    SET, KLOSS1, 0
    SET, KLOSS2, 0
    SET, GZERO, GSLED
    BEAM, ENERGY=E0
    USE, (NRTL,LINAC,LI20)
    PRINT, FULL
    SURVEY, TAPE="FACET_survey.tape", &
      X0=XNDR,Y0=YNDR,Z0=ZNDR,THETA0=TNDR,PHI0=PNDR,PSI0=RNDR
  ENDCOMMENT

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

  COMMENT
    BEAM, ENERGY=E19
    USE, MODL34
    PRINT, FULL
    SAVEBETA, TWip, #E
    TWISS, COUPLE, SAVE, TAPE="SCAV_twiss.tape", RTAPE="SCAV_rmat.tape", &
      BETX=BX19, ALFX=AX19, BETY=BY19, ALFY=AY19
    VALUE, TWip[BETX],TWip[ALFX],TWip[DX],TWip[DPX]
    VALUE, TWip[BETY],TWip[ALFY],TWip[DY],TWip[DPY]
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=BETX,BETY,&
      TITLE="LI19 SCAV", &
      COLOUR=100, SPLINE=.T., FILE="SCAV"
    PLOT, TABLE=TWISS, HAXIS=S, VAXIS=DX,DY,&
      TITLE="LI19 SCAV", &
      COLOUR=100, SPLINE=.T., FILE="SCAV"
  ENDCOMMENT

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

  STOP
