
! *** OPTICS=AD_ACCEL-15SEP21 ***

! LCLS2sc safety dump lines

! ==============================================================================
! Modification History
! ------------------------------------------------------------------------------
! 22-JAN-2020, M. Woodley
!  * some device names, keywords, TYPEs, and Z-locations in SFTS_1 taken from
!    XTES_BG_SXR_1-13-2020.xlsx per P. Stephens
! ------------------------------------------------------------------------------
! 26-MAR-2019, M. Woodley
!  * split SFTH and SFTS areas into two subareas each: SFTH_1/SFTH_2
!    and SFTS_1/SFTS_2
! ------------------------------------------------------------------------------
! 08-OCT-2018, M. Woodley
!  * locations of devices downstream of HXR XTES treaty flange per
!    2017-11-21__REF__XTES_BG_HXR__mo37504899_update2017-12-19.xlsx
!  * locations of devices downstream of SXR XTES treaty flange per
!    2017-11-21__REF__XTES_BG_SXR__mo37504999_update2017-12-19.xlsx
!  * some device locations per SD-375-048-01 (SFTH) and SD-375-049-01 (SFTS)
! 20-JUN-2018, M. Woodley
!  * redefine SFTDUMP1 and SFTDUMPB1 beamlines: end at entrance to PM bends
! ------------------------------------------------------------------------------
! 14-FEB-2018, M. Woodley
!  * split SFTDUMP and SFTDUMPb lines to allow XTES output in linac coordinates
! 06-DEC-2017, M. Woodley
!  * add HXTES0 (treaty point flange for HXR XTES system)
!  * add SXTES0 (treaty point flange for SXR XTES system)
! ------------------------------------------------------------------------------
! 24-FEB-2017, Y. Nosochkov
!  * update some parameter names
! ------------------------------------------------------------------------------
! 24-JUN-2016, Y. Nosochkov
!  * move XDCXRAY & YAGXRAY 0.75 m downstream (E. Johnson)
! ------------------------------------------------------------------------------
! 24-AUG-2015, Y. Nosochkov
!  * remove PCPM3/BTM3, PCPM3B/BTM3B as they are not part of electron line
! ------------------------------------------------------------------------------
! 20-MAY-2015, Y. Nosochkov
!  * add PCPM3, PCPM3B, remove BXPM3 (per Shanjie)
!  * update aperture of PCPM1,2,3 and PCPM1B,2B,3B (per LCLSII-3.5-PR-0111-R1)
!  * update positions of PCPM2, BXPM1, BXPM2 (per Shanjie)
!  * move PCPM1, PCPM1B 0.135 m downstream (per A. Ibrahimov)
! ------------------------------------------------------------------------------
! 12-MAR-2015, Y. Nosochkov
!  * add existing XDCXRAY screen in the XDC chamber in HXR
! ------------------------------------------------------------------------------
! 12-DEC-2014, M. Woodley
!  * move area BEG/END MARKers to common.xsif
!  * add SEQ BEG/END MARKers
! 09-DEC-2014, Y. Nosochkov
!  * safety dump lines based on LCLS-I design and PRD LCLSII-3.5-PR-0111
! ------------------------------------------------------------------------------

! ------------------------------------------------------------------------------
! HXR safety dump
! ------------------------------------------------------------------------------

! note that axis of BXPM1H,2H bends is parallel to HXR undulator axis but
! horizontally offset by +35 mm towards the North

  LBXPM  := 0.944               !effective straight length of permanent magnet FFTB dump bends (m)
  GBXPM0 := 0.0381              !original gap height in FFTB magnets in 2005 (m)
  GBXPM  := 0.052               !modified (larger) gap height for LCLS safety dump
  BBXPM0 := 4.3                 !original magnetic field (kG) at gap = 3.81 cm
  BBXPM  := BBXPM0*GBXPM0/GBXPM !magnetic field (kG) at gap = 5.2 cm
  RBXPM  := Brhof/BBXPM         !bending radius (m) in permanent magnets

  ABXPM   := (LBXPM/RBXPM)/2             !PM bend half-angle
  ABXPM1S := ASIN(1*ABXPM)               !bending angle of "short" half of BXPM1
  ABXPM1L := ASIN(2*ABXPM)-ASIN(1*ABXPM) !bending angle of "long"  half of BXPM1
  ABXPM2S := ASIN(3*ABXPM)-ASIN(2*ABXPM) !bending angle of "short" half of BXPM2
  ABXPM2L := ASIN(4*ABXPM)-ASIN(3*ABXPM) !bending angle of "long"  half of BXPM2

  ABXPM1  := ABXPM1S+ABXPM1L
  ABXPM2  := ABXPM2S+ABXPM2L

  LBXPM1S := RBXPM*ABXPM1S !path length in "short" half of BXPM1
  LBXPM1L := RBXPM*ABXPM1L !path length in "long"  half of BXPM1
  LBXPM2S := RBXPM*ABXPM2S !path length in "short" half of BXPM2
  LBXPM2L := RBXPM*ABXPM2L !path length in "long"  half of BXPM2

  LBXPM1  := LBXPM1S+LBXPM1L
  LBXPM2  := LBXPM2S+LBXPM2L

  BXPM11 : SBEN, TYPE="4D36-C", L=LBXPM1S, ANGLE=ABXPM1S, HGAP=GBXPM/2, &
                 FINT=0.5, FINTX=0.0, E2=0, E1=0
  BXPM12 : SBEN, TYPE="4D36-C", L=LBXPM1L, ANGLE=ABXPM1L, HGAP=GBXPM/2, &
                 FINT=0.0, FINTX=0.5, E1=0, E2=ABXPM1

  BXPM21 : SBEN, TYPE="4D36-C", L=LBXPM2S, ANGLE=ABXPM2S, HGAP=GBXPM/2, &
                 FINT=0.5, FINTX=0.0, E2=0, E1=-ABXPM1
  BXPM22 : SBEN, TYPE="4D36-C", L=LBXPM2L, ANGLE=ABXPM2L, HGAP=GBXPM/2, &
                 FINT=0.0, FINTX=0.5, E1=0, E2=ABXPM1+ABXPM2

! define unsplit SBENs for BMAD ... not used by MAD

  BXPM1 : SBEN, TYPE="4D36-C", HGAP=GBXPM/2, L=LBXPM1, ANGLE=ABXPM1, &
                E1=0, FINT=0.5, E2=ABXPM1, FINTX=0.5
  BXPM2 : SBEN, TYPE="4D36-C", HGAP=GBXPM/2, L=LBXPM2, ANGLE=ABXPM2, &
                E1=-ABXPM1, FINT=0.5, E2=ABXPM1+ABXPM2, FINTX=0.5

  DYDS  : DRIFT, L=LBYDS*COS(ABYDS/2)
  DYD1  : DRIFT, L=LBDM *COS(ABYDS+  ABDM/2)
  DYD2  : DRIFT, L=LBDM *COS(ABYDS+3*ABDM/2)
  DYD3  : DRIFT, L=LBDM *COS(ABYDS+5*ABDM/2)

  LDSCa := 0.479300-0.000001 !0.479298938157
  LDSCb := 0.094517171073

  DS1S  : DRIFT, L=LDS1 *COS(ABYDS)
  DSSA  : DRIFT, L=LDS  *COS(ABYDS+  ABDM)
  DSSB  : DRIFT, L=LDS  *COS(ABYDS+2*ABDM)
  DSCSa : DRIFT, L=LDSCa*COS(ABYDS+3*ABDM)
  DSCSb : DRIFT, L=LDSCb*COS(ABYDS+3*ABDM)

  LDPM3   := 8.784
  LDPM31  := 8.2704483799
  LDPM32  := LDPM3-LDPM31
  ZSFTDMP := 0.0762 !safety dump Z-length

  DPCBTM1 : DRIFT, L=0.15-0.135
  DPCBTM2 : DRIFT, L=0.15
  DPM1    : DRIFT, L=0.5350338 !0.298
  DPM11   : DRIFT, L=0.188644
  DPM12   : DRIFT, L=DPM1[L]-DPM11[L]
  DPM2    : DRIFT, L=0.30   /COS(ABXPM1)
  DPM3    : DRIFT, L=LDPM3  /COS(ABXPM1+ABXPM2)
  DPM31   : DRIFT, L=LDPM31 /COS(ABXPM1+ABXPM2)
  DPM32   : DRIFT, L=LDPM32 /COS(ABXPM1+ABXPM2)
  DPCBTM3 : DRIFT, L=0 !BTM3 is attached to d/s face of PCPM3
  DPM4    : DRIFT, L=2.42   /COS(ABXPM1+ABXPM2)
  DSFTDMP : DRIFT, L=ZSFTDMP/COS(ABXPM1+ABXPM2)

  DXDCU  : DRIFT, L=1.092223 +0.75
  DXDCU1 : DRIFT, L=0.8783
  DXDCU1a : DRIFT, L=0.840799
  DXDCU1b : DRIFT, L=DXDCU1[L]-DXDCU1a[L]
  DXDCU2 : DRIFT, L=DXDCU[L]-DXDCU1[L]
  DXDCU2a : DRIFT, L=0.878201
  DXDCU2b : DRIFT, L=DXDCU2[L]-DXDCU2a[L]
  XDCa   : DRIFT, L=0.312777 !XDC chamber
  XDCb   : DRIFT, L=0.693    !XDC chamber
  XDCc   : DRIFT, L=0.542    !XDC chamber
  XDCd   : DRIFT, L=0.255376 !XDC chamber
  DXDCD  : DRIFT, L=7.1789662-DXDCu[L]-XDCa[L]-XDCb[L]-XDCc[L]-XDCd[L] !7.266
  DXDCD1 : DRIFT, L=2.661321
  DXDCD2 : DRIFT, L=0.512986
  DXDCD2a : DRIFT, L=0.142402
  DXDCD2b : DRIFT, L=DXDCD2[L]-DXDCD2a[L]
  DXDCD3 : DRIFT, L=DXDCD[L]-DXDCD1[L]-DXDCD2[L]

  PCPM1  : ECOL, L=LPCPM, XSIZE=0.0080, YSIZE=0.0080 !per LCLSII-3.5-PR-0111-R1
  PCPM2  : ECOL, L=LPCPM, XSIZE=0.0127, YSIZE=0.0127
 !PCPM3  : ECOL, L=LPCPMW/COS(ABXPM1+ABXPM2), XSIZE=0.0080, YSIZE=0.0080
  DPCPM3 : DRIF, L=LPCPMW/COS(ABXPM1+ABXPM2) !placeholder for PCPM3

  BTM1   : INST !Burn-Through-Monitor behind PCPM1
  BTM2   : INST !Burn-Through-Monitor behind PCPM2
 !BTM3   : INST !Burn-Through-Monitor behind PCPM3
  MBTM3  : MARK !placeholder for BTM3
  BTMSFT : INST !Burn-Through-Monitor behind HXR safety dump

  RTDSL0         : PROF, TYPE="RAPID TRNAD DIAG"
  RTDSL0_YAGXRAY : PROF, TYPE="PROFILE MON (RTD"

  TP_HXTES0 : INST, TYPE="treaty flange" !treaty point for HXR XTES system
  TV1L0_VGC_1 : INST, TYPE="GATE VALVE"
  TV1L0_VRM_1 : INST, TYPE="RIGHT ANGLE VALV"
  TV1L0_GCC_1 : INST, TYPE="COLD CATHODE GAU"
  TV1L0_GPI_1 : INST, TYPE="PIRANI GAUGE"
  IM1L0_XTES_VGC_1 : INST, TYPE="GATE VALVE"
  IM1L0_XTES_VRM_1 : INST, TYPE="RIGHT ANGLE VALV"
  IM1L0_XTES : INST, TYPE="IMAGER"
  MBXPM1_PIP_1 : INST, TYPE="ION PUMP"
  SFTDMP : INST !front face of HXR safety dump (Z'=712-715 m per PRD)

  VV38  : MARK !vac. valve in HXR safety dump line
  MVV10 : MARK !placeholder for vac. valve in HXR XTES line

  BXPM1_full : LINE=(BXPM11,BXPM12)
  BXPM2_full : LINE=(BXPM21,BXPM22)

  SFTDUMP1: LINE=(BEGSFTH_1,&
    DYDS,DS1S,DYD1,DSSA,DYD2,DSSB,DYD3,&
    DSCSa,VV38,DSCSb,PCPM1,DPCBTM1,BTM1,DXDCU1a,TV1L0_VGC_1,DXDCU1b,&
    TP_HXTES0,DXDCU2a,TV1L0_VRM_1,TV1L0_GCC_1,TV1L0_GPI_1,DXDCU2b,&
    XDCa,RTDSL0,XDCb,XDCc,RTDSL0_YAGXRAY,XDCd,DXDCD1,IM1L0_XTES_VGC_1,&
    DXDCD2a,IM1L0_XTES_VRM_1,DXDCD2b,IM1L0_XTES,DXDCD3,PCPM2,BTM2,&
    DPM11,MBXPM1_PIP_1,DPM12,ENDSFTH_1)

  SFTDUMP2: LINE=(BEGSFTH_2,&
    BXPM1_full,DPM2,&
    BXPM2_full,DPM31,MVV10,DPM32,DPCPM3,DPCBTM3,MBTM3,DPM4,&
    SFTDMP,DSFTDMP,BTMSFT,ENDSFTH_2)

  SFTDUMP: LINE=(SFTDUMP1,SFTDUMP2)

! ------------------------------------------------------------------------------
! SXR safety dump
! ------------------------------------------------------------------------------

! note that BXPM1b bend axis is aligned with the SXR undulator axis without
! any offset

  RBXPMB   := Brhof/BBXPM !bending radius (m) in permanent magnet

  ABXPMBh  := (LBXPM/RBXPMB)/2              !PM bend half-angle
  ABXPM1BS := ASIN(ABXPMBh)                 !bending angle of "short" half of BXPM1B
  ABXPM1BL := ASIN(2*ABXPMBh)-ASIN(ABXPMBh) !bending angle of "long"  half of BXPM1B

  ABXPM1B  := ABXPM1BS+ABXPM1BL

  LBXPM1BS := RBXPMB*ABXPM1BS !path length in "short" half of BXPM1B
  LBXPM1BL := RBXPMB*ABXPM1BL !path length in "long"  half of BXPM1B

  LBXPM1B  := LBXPM1BS+LBXPM1BL

  BXPM1B1 : SBEN, TYPE="4D36-C", L=LBXPM1BS, ANGLE=ABXPM1BS, HGAP=GBXPM/2, &
                  FINT=0.5, FINTX=0.0, E2=0, E1=0
  BXPM1B2 : SBEN, TYPE="4D36-C", L=LBXPM1BL, ANGLE=ABXPM1BL, HGAP=GBXPM/2, &
                  FINT=0.0, FINTX=0.5, E1=0, E2=ABXPM1B

! define unsplit SBENs for BMAD ... not used by MAD

  BXPM1B : SBEN, TYPE="4D36-C", HGAP=GBXPM/2, L=LBXPM1B, ANGLE=ABXPM1B, &
                 E1=0, FINT=0.5, E2=ABXPM1B, FINTX=0.5

  DSCSB1 : DRIFT, L=0.478198407804 !DSCSa[L]
  DSCSB2 : DRIFT, L=0.0943         !DSCSa[L]

  DXDCUB  : DRIFT, L=1.842223  !1.092223
  DXDCUB1 : DRIFT, L=0.8407994 !0.878299738776
  DXDCUB2 : DRIFT, L=0.0375006
  DXDCUB3 : DRIFT, L=0.878257
  DXDCUB4 : DRIFT, L=DXDCUB[L]-DXDCUB1[L]-DXDCUB2[L]-DXDCUB3[L]
  XDCBa   : DRIFT, L=0.312777 !XDC chamber
  XDCBb   : DRIFT, L=0.693    !XDC chamber
  XDCBc   : DRIFT, L=0.542    !XDC chamber
  XDCBc1  : DRIFT, L=0.0076773
  XDCBc2  : DRIFT, L=XDCBc[L]-XDCBc1[L]
  XDCBd   : DRIFT, L=0.255376 !XDC chamber
  DXDCDB  : DRIFT, L=7.266-DXDCUB[L]-XDCBa[L]-XDCBb[L]-XDCBc[L]-XDCBd[L]
  DXDCDB1 : DRIF, L=0.262395
  DXDCDB2 : DRIF, L=0.380049 !0.363747
  DXDCDB3 : DRIF, L=0.940451 !0.966253
  DXDCDB4 : DRIF, L=1.18874  !1.492023
  DXDCDB5 : DRIF, L=0.312783
  DXDCDB6 : DRIF, L=DXDCDB[L]-DXDCDB1[L]-DXDCDB2[L]-DXDCDB3[L]-DXDCDB4[L]&
                    -DXDCDB5[L]

  DPM1B    : DRIFT, L=0.448
  DPM2B    : DRIFT, L=3.8732111/COS(ABXPM1BS+ABXPM1BL) !10.03
  DPM2Ba   : DRIFT, L=3.8732111/COS(ABXPM1BS+ABXPM1BL)
  DPM2Bb   : DRIFT, L=DPM2B[L]-DPM2Ba[L]
  DPCBTM3B : DRIFT, L=0 !BTM3B is attached to d/s face of PCPM3B
  DPM3B    : DRIFT, L=8.5747889/COS(ABXPM1BS+ABXPM1BL) !2.272
  DPM3Ba   : DRIFT, L=0.6560246/COS(ABXPM1BS+ABXPM1BL)
  DPM3Bb   : DRIFT, L=DPM3B[L]-DPM3Ba[L]
  DSFTDMPB : DRIFT, L=ZSFTDMP  /COS(ABXPM1BS+ABXPM1BL)

  PCPM1B  : ECOL, TYPE="ELECTRON COLL", L=LPCPM, &
                  XSIZE=0.0100, YSIZE=0.0100 !per LCLSII-3.5-PR-0111-R1
  PCPM2B  : ECOL, TYPE="ELECTRON COLL", L=LPCPM, &
                  XSIZE=0.0127, YSIZE=0.0127
 !PCPM3B  : ECOL, L=LPCPM/COS(ABXPM1BS+ABXPM1BL), XSIZE=0.0100, YSIZE=0.0100
  DPCPM3B : DRIF, L=LPCPMW/COS(ABXPM1BS+ABXPM1BL) !placeholder for PCPM3B

  BTM1B   : INST, TYPE="BTM" !Burn-Through-Monitor behind PCPM1B
  BTM2B   : INST, TYPE="BTM" !Burn-Through-Monitor behind PCPM2B
 !BTM3B   : INST !Burn-Through-Monitor behind PCPM3B
  MBTM3B  : MARK !placeholder for BTM3B
  BTMSFTB : INST !Burn-Through-Monitor behind SXR safety dump

  TP_SXTES0 : INST, TYPE="INTERFACE FLANGE" !treaty point for SXR XTES system (SXTES0)
  RTDSK0 : INST, TYPE="RAPID TRNAD DIAG"
  RTDSK0_YAGXRAYB : INST, TYPE="PROFILE MON (RTD" !safety dump line X-ray screen (YAGXRAYB)
  PC1K0_XTES : INST, TYPE="PHOTON COLL" !PC1S
  EM1K0_GMD : INST, TYPE="GAS MONITOR DECT" !GMD1S
  IM1K0_XTES : INST, TYPE="IMAGER" !IM1S
  MSL1S   : MARK, TYPE="adj aperture"
  SFTDMPB : INST !front face of SXR safety dump (Z'=712-715 m per PRD)

  VV38B : MARK !vac. valve in SXR safety dump line
  RTDSK0_VGC_1 : INST, TYPE="GATE VALVE" !vac. valve in SXR safety dump line (VV1S)
  RTDSK0_VRM_1 : INST, TYPE="RIGHT ANGLE VALV"
  RTDSK0_GCC_1 : INST, TYPE="COLD CATHODE GAU"
  RTDSK0_GPI_1 : INST, TYPE="PIRANI GAUGE"
  EM1K0_GMD_VGC_1 : INST, TYPE="GATE VALVE" !vac. valve in SXR safety dump line (VV2S)
  IM1K0_XTES_VRM_1 : INST, TYPE="RIGHT ANGLE VALV"
  IM1K0_XTES_GCC_1 : INST, TYPE="COLD CATHODE GAU"
  IM1K0_XTES_GPI_1 : INST, TYPE="PIRANI GAUGE"
  MVV3S : MARK !placeholder for vac. valve in SXR XTES line

  BXPM1B_full : LINE=(BXPM1B1,BXPM1B2)

  SFTDUMPB1: LINE=(BEGSFTS_1,&
    DYDS,DS1S,DYD1,DSSA,DYD2,DSSB,DYD3,&
    DSCSB1,VV38B,DSCSB2,PCPM1B,DPCBTM1,BTM1B,DXDCUB1,RTDSK0_VGC_1,DXDCUB2,&
    TP_SXTES0,DXDCUB3,RTDSK0_VRM_1,RTDSK0_GCC_1,RTDSK0_GPI_1,DXDCUB4,XDCBa,&
    XDCBb,XDCBc1,RTDSK0,XDCBc2,RTDSK0_YAGXRAYB,XDCBd,DXDCDB1,&
    PC1K0_XTES,DXDCDB2,EM1K0_GMD_VGC_1,DXDCDB3,EM1K0_GMD,DXDCDB4,&
    IM1K0_XTES_VRM_1,IM1K0_XTES_GCC_1,IM1K0_XTES_GPI_1,DXDCDB5,IM1K0_XTES,&
    DXDCDB6,PCPM2B,BTM2B,DPM1B,ENDSFTS_1)

  SFTDUMPB2: LINE=(BEGSFTS_2,&
    BXPM1B_full,DPM2Ba,DPCPM3B,DPCBTM3B,MBTM3B,DPM2Bb,&
    MSL1S,DPM3Ba,MVV3S,DPM3Bb,SFTDMPB,DSFTDMPB,BTMSFTB,ENDSFTS_2)

  SFTDUMPB: LINE=(SFTDUMPB1,SFTDUMPB2)

  RETURN
