
! *** OPTICS=LCLS2sc31MAR14 ***

! LCLS2sc undulator and undulator extension

! ==============================================================================
! Modification History (LCLSIIsc_MAIN.mad8)
! ------------------------------------------------------------------------------
! 31-MAR-2014, M. Woodley
!  * element names changed to conform to nomenclature PRD
! 26-MAR-2014, Y. Nosochkov
!  * put phase shifter and RFBPM positions back to 03/14 version
! 21-MAR-2014, Y. Nosochkov
!  * update positions of phase shifters and RFBPMs in undulator cells
!  * add Y-corrector to each undulator
!  * update phase shifter parameters (per H-D. Nuhn)
! 07-MAR-2014, Y. Nosochkov
!  * remove transverse deflecting cavities from SXR dumpline
!  * slightly adjust Z-position of dumpline bends
! 06-MAR-2014, Y. Nosochkov
!  * minor matching update
! ------------------------------------------------------------------------------
! 28-FEB-2014, Y. Nosochkov
!  * reduce undulator break length from 1.15 m to 1.0 m for cell length of 4.4 m
!    use cell numbering from 15 to 50 (this includes cells with and without
!    undulators)
!    put SXR undulators in cells 26-32, 34-47
!    put HXR undulators in cells 17-23, 25-31, 33-50
!    the SXR cell-33 and HXR cells 24 and 32 have only quad and RFBPM --
!    these cells will be used for self-seeding
!    reduce length of undulator quadrupole to 0.084 m
!    add one extra RFBPM about ~1 m after end of cell-50 in SXR and HXR
!    add two RFBPMs in two cells upstream of SXR and HXR undulators
!    use the last undulator quadrupole in cell-50 for matching to dump line
! 17-JAN-2014, Y. Nosochkov
!  * minor matching update
! 18-DEC-2013, Y. Nosochkov
!  * minor matching update
! 16-DEC-2013, Y. Nosochkov
!  * minor matching update
! 23-OCT-2013, Y. Nosochkov
!  * change the number of SXR undulator cells to 22 and the number of
!    SXR extension cells to 12
!  * change the number of HXR undulator cells to 34
!  * change undulator cell length to 4.55 m
!  * update undulator parameters and undulator quad field (per H.-D. Nuhn)
!  * new position of SXRTERM, HXRTERM is at Z'=669.586491 m in BSY coordinates
!  * move QUE1, QUE1B 4.0 m downstream
!  * adjust strengths in the last two undulator quads to help with
!    beta match in the dumpline
! 17-OCT-2013, Y. Nosochkov
!  * change quadrupole type of QUE1B, QUE2B, QDMP1B, QDMP2B to 3.94Q17
! ------------------------------------------------------------------------------

! ==============================================================================
! SXR undulator and extension (north)
! ==============================================================================

! ------------------------------------------------------------------------------
! SXR drifts
! ------------------------------------------------------------------------------

  LDUSEGS := 3.4
  LRFBub  := 0.05
  LDU1s   := 0.1
  LDU2s   := 0.03
  LDU3s   := 0.25-LPSSXh
  LDU4s   := (0.25-LPSSXh-0.5*LQu)/2
  LDU5s   := LDU4s
  LDU6s   := 0.12-LQu/2-LRFBub/2
  LDU7s   := 0.25-LRFBub/2

  DU1s : DRIF, L=LDU1s
  DU2s : DRIF, L=LDU2s
  DU3s : DRIF, L=LDU3s
  DU4s : DRIF, L=LDU4s
  DU5s : DRIF, L=LDU5s
  DU6s : DRIF, L=LDU6s
  DU7s : DRIF, L=LDU7s

! ------------------------------------------------------------------------------
! SXR extension quads
! ------------------------------------------------------------------------------

  KQSX15 :=  0.776453594238
  KQSX19 := -0.845758329368
  KQSX22 :=  1.331038426957
  KQSX24 := -1.417857779836

  QSXh15 : QUAD, TYPE="QUND", L=LQu/2, K1=KQSX15, APER=rQu
  QSXh19 : QUAD, TYPE="QUND", L=LQu/2, K1=KQSX19, APER=rQu
  QSXh22 : QUAD, TYPE="QUND", L=LQu/2, K1=KQSX22, APER=rQu
  QSXh24 : QUAD, TYPE="QUND", L=LQu/2, K1=KQSX24, APER=rQu

! ------------------------------------------------------------------------------
! SXR extension X-steering coils in quads
! ------------------------------------------------------------------------------

  XCSX15 : HKIC, TYPE="type-U"
  XCSX19 : HKIC, TYPE="type-U"
  XCSX22 : HKIC, TYPE="type-U"
  XCSX24 : HKIC, TYPE="type-U"

! ------------------------------------------------------------------------------
! SXR extension Y-steering coils in quads
! ------------------------------------------------------------------------------

  YCSX15 : VKIC, TYPE="type-U"
  YCSX19 : VKIC, TYPE="type-U"
  YCSX22 : VKIC, TYPE="type-U"
  YCSX24 : VKIC, TYPE="type-U"

! ------------------------------------------------------------------------------
! SXR extension BPMs (initially stripline)
! ------------------------------------------------------------------------------

  BPMSX15 : MONI, L=LRFBub, TYPE="05_um_res_R45"
  DRFBS16 : DRIF, L=LRFBub
  DRFBS17 : DRIF, L=LRFBub
  DRFBS18 : DRIF, L=LRFBub
  BPMSX19 : MONI, L=LRFBub, TYPE="05_um_res_R45"
  DRFBS20 : DRIF, L=LRFBub
  DRFBS21 : DRIF, L=LRFBub
  BPMSX22 : MONI, L=LRFBub, TYPE="05_um_res_R45"
  DRFBS23 : DRIF, L=LRFBub
  RFBSX24 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX25 : MONI, L=LRFBub, TYPE="01_um_res"

  SXXSTART : MARK !start of soft X-ray extension system
  SXRSTART : MARK !start of undulator system
  SXRTERM  : MARK !~end of undulator system
  MUQS     : MARK
  MPHS     : MARK

  QSXBLK15 : LINE=(QSXh15,XCSX15,YCSX15,QSXh15)
  DQSXBL16 : DRIF, L=LQu
  DQSXBL17 : DRIF, L=LQu
  DQSXBL18 : DRIF, L=LQu
  QSXBLK19 : LINE=(QSXh19,XCSX19,YCSX19,QSXh19)
  DQSXBL20 : DRIF, L=LQu
  DQSXBL21 : DRIF, L=LQu
  QSXBLK22 : LINE=(QSXh22,XCSX22,YCSX22,QSXh22)
  DQSXBL23 : DRIF, L=LQu
  QSXBLK24 : LINE=(QSXh24,XCSX24,YCSX24,QSXh24)
  DQSXBL25 : DRIF, L=LQu

  DPHSS15 : DRIF, L=LPSSX
  DPHSS16 : DRIF, L=LPSSX
  DPHSS17 : DRIF, L=LPSSX
  DPHSS18 : DRIF, L=LPSSX
  DPHSS19 : DRIF, L=LPSSX
  DPHSS20 : DRIF, L=LPSSX
  DPHSS21 : DRIF, L=LPSSX
  DPHSS22 : DRIF, L=LPSSX
  DPHSS23 : DRIF, L=LPSSX
  DPHSS24 : DRIF, L=LPSSX
  DPHSS25 : DRIF, L=LPSSX

  SXBRK15  : LINE=(DU3s,DPHSS15,DU4s,        DU5s,QSXBLK15,DU6s,BPMSX15,DU7s)
  SXBRK16  : LINE=(DU3s,DPHSS16,DU4s,        DU5s,DQSXBL16,DU6s,DRFBS16,DU7s)
  SXBRK17  : LINE=(DU3s,DPHSS17,DU4s,        DU5s,DQSXBL17,DU6s,DRFBS17,DU7s)
  SXBRK18  : LINE=(DU3s,DPHSS18,DU4s,        DU5s,DQSXBL18,DU6s,DRFBS18,DU7s)
  SXBRK19  : LINE=(DU3s,DPHSS19,DU4s,        DU5s,QSXBLK19,DU6s,BPMSX19,DU7s)
  SXBRK20  : LINE=(DU3s,DPHSS20,DU4s,        DU5s,DQSXBL20,DU6s,DRFBS20,DU7s)
  SXBRK21  : LINE=(DU3s,DPHSS21,DU4s,        DU5s,DQSXBL21,DU6s,DRFBS21,DU7s)
  SXBRK22  : LINE=(DU3s,DPHSS22,DU4s,        DU5s,QSXBLK22,DU6s,BPMSX22,DU7s)
  SXBRK23  : LINE=(DU3s,DPHSS23,DU4s,        DU5s,DQSXBL23,DU6s,DRFBS23,DU7s)
  SXBRK24  : LINE=(DU3s,DPHSS24,DU4s,        DU5s,QSXBLK24,DU6s,RFBSX24,DU7s)
  SXBRK25  : LINE=(DU3s,DPHSS25,DU4s,        DU5s,DQSXBL25,DU6s,RFBSX25,DU7s)

  DUSEGS15 : DRIF, L=LDUSEGS
  DUSEGS16 : DRIF, L=LDUSEGS
  DUSEGS17 : DRIF, L=LDUSEGS
  DUSEGS18 : DRIF, L=LDUSEGS
  DUSEGS19 : DRIF, L=LDUSEGS
  DUSEGS20 : DRIF, L=LDUSEGS
  DUSEGS21 : DRIF, L=LDUSEGS
  DUSEGS22 : DRIF, L=LDUSEGS
  DUSEGS23 : DRIF, L=LDUSEGS
  DUSEGS24 : DRIF, L=LDUSEGS
  DUSEGS25 : DRIF, L=LDUSEGS

  SXCEL15  : LINE=(DU1s,       DU2s,DUSEGS15,SXBRK15) !Q+BPM
  SXCEL16  : LINE=(DU1s,       DU2s,DUSEGS16,SXBRK16)
  SXCEL17  : LINE=(DU1s,       DU2s,DUSEGS17,SXBRK17)
  SXCEL18  : LINE=(DU1s,       DU2s,DUSEGS18,SXBRK18)
  SXCEL19  : LINE=(DU1s,       DU2s,DUSEGS19,SXBRK19) !Q+BPM
  SXCEL20  : LINE=(DU1s,       DU2s,DUSEGS20,SXBRK20)
  SXCEL21  : LINE=(DU1s,       DU2s,DUSEGS21,SXBRK21)
  SXCEL22  : LINE=(DU1s,       DU2s,DUSEGS22,SXBRK22) !Q+BPM
  SXCEL23  : LINE=(DU1s,       DU2s,DUSEGS23,SXBRK23)
  SXCEL24  : LINE=(DU1s,       DU2s,DUSEGS24,SXBRK24) !Q+RFBPM
  SXCEL25  : LINE=(DU1s,       DU2s,DUSEGS25,SXBRK25) !RFBPM

  SXRXX : LINE=(BEGSXX,SXXSTART,&
                SXCEL15,SXCEL16,SXCEL17,SXCEL18,SXCEL19,SXCEL20,&
                SXCEL21,SXCEL22,SXCEL23,SXCEL24,SXCEL25,ENDSXX)

! ------------------------------------------------------------------------------
! SXR undulator
! ------------------------------------------------------------------------------
! - Author: Heinz-Dieter Nuhn, Stanford Linear Accelerator Center
! - Last edited Mar 03, 2014
! - 7.2 mm miminum Undulator Gap; only constant break length each
! - include natural vertical focusing over all but edge terminations
! ------------------------------------------------------------------------------
! - IntgSX  = integrated quadrupole gradient
! - GQFSX   = QF and QD gradients can be made different to compensate for
!             undulator focussing ...
! - GQDSX   = ... but since undulator focussing depends on gamma^2, compensation
!             will only work for one energy
! - kQFSX   = QF undulator quadrupole focusing "k"
! - kQDSX   = QD undulator quadrupole focusing "k"
! - LDUSEGS = SXR Undulator segment length
! - luSXU   = SXR Undulator period
! - NpSXU   = SXR Undulator period count
! - LSXUCR  = SXR Undulator magnetic length
! - LSXUe   = SXR Undulator spacing between magnet array and strongback end
! - KSXU    = SXR Undulator parameter (rms); range 2–5.5
! - kQSX    = natural SXR undulator focusing "k" in y-plane
! ------------------------------------------------------------------------------

  gamf   :=  Ef/mc2                      !Lorentz energy factor in undulator [ ]
  IntgSX :=  20.0                        !kG
  GQFSX  :=  IntgSX/LQu/10*1.0           !T/m
  GQDSX  := -IntgSX/LQu/10*1.0           !T/m
  kQFSX  :=  1.E-9*GQFSX*CLIGHT/gamf/mc2 !m^-2
  kQDSX  :=  1.E-9*GQDSX*CLIGHT/gamf/mc2 !m^-2
  KQDSXM := -0.090403554468

  QSXh26 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh27 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh28 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh29 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh30 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh31 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh32 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh33 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh34 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh35 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh36 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh37 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh38 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh39 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh40 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh41 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh42 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh43 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh44 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh45 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSX, APER=rQu
  QSXh46 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFSX, APER=rQu
  QSXh47 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDSXm, APER=rQu

  luSXU  := 0.039                            !m
  NpSXU  := 87
  LSXUCR := luSXU*NpSXU                      !m
  LSXUe  := (LDUSEGS-LSXUCR)/2               !m
  LSXUh  := LSXUCR/2
  KSXU   := 5.0
  kQSX   := (KSXU*2*pi/luSXU/sqrt(2)/gamf)^2 !m^-2

  UMASXh : MATR, TYPE="UMASXh", L=LSXUh,         &
    RM(1,1) = 1.0,                               &
    RM(1,2) = LSXUh,                             &
    RM(2,1) = 0.0,                               &
    RM(2,2) = 1.0,                               &
    RM(3,3) =  cos(LSXUh*sqrt(kQSX)),            &
    RM(3,4) =  sin(LSXUh*sqrt(kQSX))/sqrt(kQSX), &
    RM(4,3) = -sin(LSXUh*sqrt(kQSX))*sqrt(kQSX), &
    RM(4,4) =  cos(LSXUh*sqrt(kQSX))

  UMASXh26 : UMASXh
  UMASXh27 : UMASXh
  UMASXh28 : UMASXh
  UMASXh29 : UMASXh
  UMASXh30 : UMASXh
  UMASXh31 : UMASXh
  UMASXh32 : UMASXh
  UMASXh34 : UMASXh
  UMASXh35 : UMASXh
  UMASXh36 : UMASXh
  UMASXh37 : UMASXh
  UMASXh38 : UMASXh
  UMASXh39 : UMASXh
  UMASXh40 : UMASXh
  UMASXh41 : UMASXh
  UMASXh42 : UMASXh
  UMASXh43 : UMASXh
  UMASXh44 : UMASXh
  UMASXh45 : UMASXh
  UMASXh46 : UMASXh
  UMASXh47 : UMASXh

! ------------------------------------------------------------------------------
! SXR undulator X-steering coils in quads
! ------------------------------------------------------------------------------

  XCSX26 : HKIC, TYPE="type-U"
  XCSX27 : HKIC, TYPE="type-U"
  XCSX28 : HKIC, TYPE="type-U"
  XCSX29 : HKIC, TYPE="type-U"
  XCSX30 : HKIC, TYPE="type-U"
  XCSX31 : HKIC, TYPE="type-U"
  XCSX32 : HKIC, TYPE="type-U"
  XCSX33 : HKIC, TYPE="type-U"
  XCSX34 : HKIC, TYPE="type-U"
  XCSX35 : HKIC, TYPE="type-U"
  XCSX36 : HKIC, TYPE="type-U"
  XCSX37 : HKIC, TYPE="type-U"
  XCSX38 : HKIC, TYPE="type-U"
  XCSX39 : HKIC, TYPE="type-U"
  XCSX40 : HKIC, TYPE="type-U"
  XCSX41 : HKIC, TYPE="type-U"
  XCSX42 : HKIC, TYPE="type-U"
  XCSX43 : HKIC, TYPE="type-U"
  XCSX44 : HKIC, TYPE="type-U"
  XCSX45 : HKIC, TYPE="type-U"
  XCSX46 : HKIC, TYPE="type-U"
  XCSX47 : HKIC, TYPE="type-U"

! ------------------------------------------------------------------------------
! SXR undulator Y-steering coils in quads
! ------------------------------------------------------------------------------

  YCSX26 : VKIC, TYPE="type-U"
  YCSX27 : VKIC, TYPE="type-U"
  YCSX28 : VKIC, TYPE="type-U"
  YCSX29 : VKIC, TYPE="type-U"
  YCSX30 : VKIC, TYPE="type-U"
  YCSX31 : VKIC, TYPE="type-U"
  YCSX32 : VKIC, TYPE="type-U"
  YCSX33 : VKIC, TYPE="type-U"
  YCSX34 : VKIC, TYPE="type-U"
  YCSX35 : VKIC, TYPE="type-U"
  YCSX36 : VKIC, TYPE="type-U"
  YCSX37 : VKIC, TYPE="type-U"
  YCSX38 : VKIC, TYPE="type-U"
  YCSX39 : VKIC, TYPE="type-U"
  YCSX40 : VKIC, TYPE="type-U"
  YCSX41 : VKIC, TYPE="type-U"
  YCSX42 : VKIC, TYPE="type-U"
  YCSX43 : VKIC, TYPE="type-U"
  YCSX44 : VKIC, TYPE="type-U"
  YCSX45 : VKIC, TYPE="type-U"
  YCSX46 : VKIC, TYPE="type-U"
  YCSX47 : VKIC, TYPE="type-U"

! ------------------------------------------------------------------------------
! SXR undulator X-steering coils in undulator segments
! ------------------------------------------------------------------------------

  XCSU26 : HKIC, TYPE="type-V"
  XCSU27 : HKIC, TYPE="type-V"
  XCSU28 : HKIC, TYPE="type-V"
  XCSU29 : HKIC, TYPE="type-V"
  XCSU30 : HKIC, TYPE="type-V"
  XCSU31 : HKIC, TYPE="type-V"
  XCSU32 : HKIC, TYPE="type-V"
  XCSU34 : HKIC, TYPE="type-V"
  XCSU35 : HKIC, TYPE="type-V"
  XCSU36 : HKIC, TYPE="type-V"
  XCSU37 : HKIC, TYPE="type-V"
  XCSU38 : HKIC, TYPE="type-V"
  XCSU39 : HKIC, TYPE="type-V"
  XCSU40 : HKIC, TYPE="type-V"
  XCSU41 : HKIC, TYPE="type-V"
  XCSU42 : HKIC, TYPE="type-V"
  XCSU43 : HKIC, TYPE="type-V"
  XCSU44 : HKIC, TYPE="type-V"
  XCSU45 : HKIC, TYPE="type-V"
  XCSU46 : HKIC, TYPE="type-V"
  XCSU47 : HKIC, TYPE="type-V"

! ------------------------------------------------------------------------------
! SXR undulator Y-steering coils in undulator segments
! ------------------------------------------------------------------------------

  YCSU26 : VKIC, TYPE="type-V"
  YCSU27 : VKIC, TYPE="type-V"
  YCSU28 : VKIC, TYPE="type-V"
  YCSU29 : VKIC, TYPE="type-V"
  YCSU30 : VKIC, TYPE="type-V"
  YCSU31 : VKIC, TYPE="type-V"
  YCSU32 : VKIC, TYPE="type-V"
  YCSU34 : VKIC, TYPE="type-V"
  YCSU35 : VKIC, TYPE="type-V"
  YCSU36 : VKIC, TYPE="type-V"
  YCSU37 : VKIC, TYPE="type-V"
  YCSU38 : VKIC, TYPE="type-V"
  YCSU39 : VKIC, TYPE="type-V"
  YCSU40 : VKIC, TYPE="type-V"
  YCSU41 : VKIC, TYPE="type-V"
  YCSU42 : VKIC, TYPE="type-V"
  YCSU43 : VKIC, TYPE="type-V"
  YCSU44 : VKIC, TYPE="type-V"
  YCSU45 : VKIC, TYPE="type-V"
  YCSU46 : VKIC, TYPE="type-V"
  YCSU47 : VKIC, TYPE="type-V"

! ------------------------------------------------------------------------------
! SXR undulator BPMs
! ------------------------------------------------------------------------------

  RFBSX26 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX27 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX28 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX29 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX30 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX31 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX32 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX33 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX34 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX35 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX36 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX37 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX38 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX39 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX40 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX41 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX42 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX43 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX44 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX45 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX46 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBSX47 : MONI, L=LRFBub, TYPE="01_um_res"
  DRFBS48 : DRIF, L=LRFBub
  DRFBS49 : DRIF, L=LRFBub
  DRFBS50 : DRIF, L=LRFBub
  RFBSX51 : MONI, L=LRFBub, TYPE="01_um_res"

! ------------------------------------------------------------------------------
! SXR undulator PPM phase shifter
! - Author: Heinz-Dieter Nuhn, Stanford Linear Accelerator Center
! - Last edited March 20, 2014
! - 10.0 mm miminum Undulator Gap
! ------------------------------------------------------------------------------
! - LPSSX  = SXR Phase Shifter Length length
! - luSXU  = SXR Phase Shifter period
! - KPSSX  = SXR Phase Shifter Undulator parameter (rms); range 1.34–3.59
! - kQPSSX = natural SXR Phase Shifter undulator focusing "k" in y-plane
! ------------------------------------------------------------------------------

  LPSSX  := 0.0825                             !m
  luPSSX := 0.060                              !m
  LPSSXh := LPSSX/2
  KPSSX  := 3.59
  kQPSSX := (KPSSX*2*pi/luPSSX/sqrt(2)/gamf)^2 !m^-2

  PSSXh : MATR, TYPE="PSSXh", L=LPSSXh,               &
    RM(1,1) = 1.0,                                    &
    RM(1,2) = LPSSXh,                                 &
    RM(2,1) = 0.0,                                    &
    RM(2,2) = 1.0,                                    &
    RM(3,3) =  cos(LPSSXh*sqrt(kQPSSX)),              &
    RM(3,4) =  sin(LPSSXh*sqrt(kQPSSX))/sqrt(kQPSSX), &
    RM(4,3) = -sin(LPSSXh*sqrt(kQPSSX))*sqrt(kQPSSX), &
    RM(4,4) =  cos(LPSSXh*sqrt(kQPSSX))

! ------------------------------------------------------------------------------
! DTSXU  = SXU undulator segment small terminations modeled as drift
! ------------------------------------------------------------------------------

  DTSXU  : DRIF, L=LSXUe

! ------------------------------------------------------------------------------
! SXR undulator phase shifters
! ------------------------------------------------------------------------------

  PHSSX26 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX27 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX28 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX29 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX30 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX31 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX32 : LINE=(PSSXh,MPHS,PSSXh)
  DPHSS33 : DRIF, L=LPSSX
  PHSSX34 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX35 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX36 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX37 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX38 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX39 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX40 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX41 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX42 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX43 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX44 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX45 : LINE=(PSSXh,MPHS,PSSXh)
  PHSSX46 : LINE=(PSSXh,MPHS,PSSXh)
  DPHSS47 : DRIF, L=LPSSX
  DPHSS48 : DRIF, L=LPSSX
  DPHSS49 : DRIF, L=LPSSX
  DPHSS50 : DRIF, L=LPSSX

! ------------------------------------------------------------------------------
! SXR undulator inline valves, VAT Series 48
! ------------------------------------------------------------------------------

  VVSXU26  : MARK
  VVSXU32  : MARK
  VVSXU38  : MARK
  VVSXU44  : MARK
  VVSXU47  : MARK

! ------------------------------------------------------------------------------
! SXR undulator Beam Loss Monitors
! ------------------------------------------------------------------------------

  BLMS26   : MARK
  BLMS27   : MARK
  BLMS28   : MARK
  BLMS29   : MARK
  BLMS30   : MARK
  BLMS31   : MARK
  BLMS32   : MARK
  BLMS34   : MARK
  BLMS35   : MARK
  BLMS36   : MARK
  BLMS37   : MARK
  BLMS38   : MARK
  BLMS39   : MARK
  BLMS40   : MARK
  BLMS41   : MARK
  BLMS42   : MARK
  BLMS43   : MARK
  BLMS44   : MARK
  BLMS45   : MARK
  BLMS46   : MARK
  BLMS47   : MARK

  USEGSX26 : LINE=(DTSXU,UMASXh26,XCSU26,YCSU26,UMASXh26,DTSXU)
  USEGSX27 : LINE=(DTSXU,UMASXh27,XCSU27,YCSU27,UMASXh27,DTSXU)
  USEGSX28 : LINE=(DTSXU,UMASXh28,XCSU28,YCSU28,UMASXh28,DTSXU)
  USEGSX29 : LINE=(DTSXU,UMASXh29,XCSU29,YCSU29,UMASXh29,DTSXU)
  USEGSX30 : LINE=(DTSXU,UMASXh30,XCSU30,YCSU30,UMASXh30,DTSXU)
  USEGSX31 : LINE=(DTSXU,UMASXh31,XCSU31,YCSU31,UMASXh31,DTSXU)
  USEGSX32 : LINE=(DTSXU,UMASXh32,XCSU32,YCSU32,UMASXh32,DTSXU)
  DUSEGS33 : DRIF, L=LDUSEGS
  USEGSX34 : LINE=(DTSXU,UMASXh34,XCSU34,YCSU34,UMASXh34,DTSXU)
  USEGSX35 : LINE=(DTSXU,UMASXh35,XCSU35,YCSU35,UMASXh35,DTSXU)
  USEGSX36 : LINE=(DTSXU,UMASXh36,XCSU36,YCSU36,UMASXh36,DTSXU)
  USEGSX37 : LINE=(DTSXU,UMASXh37,XCSU37,YCSU37,UMASXh37,DTSXU)
  USEGSX38 : LINE=(DTSXU,UMASXh38,XCSU38,YCSU38,UMASXh38,DTSXU)
  USEGSX39 : LINE=(DTSXU,UMASXh39,XCSU39,YCSU39,UMASXh39,DTSXU)
  USEGSX40 : LINE=(DTSXU,UMASXh40,XCSU40,YCSU40,UMASXh40,DTSXU)
  USEGSX41 : LINE=(DTSXU,UMASXh41,XCSU41,YCSU41,UMASXh41,DTSXU)
  USEGSX42 : LINE=(DTSXU,UMASXh42,XCSU42,YCSU42,UMASXh42,DTSXU)
  USEGSX43 : LINE=(DTSXU,UMASXh43,XCSU43,YCSU43,UMASXh43,DTSXU)
  USEGSX44 : LINE=(DTSXU,UMASXh44,XCSU44,YCSU44,UMASXh44,DTSXU)
  USEGSX45 : LINE=(DTSXU,UMASXh45,XCSU45,YCSU45,UMASXh45,DTSXU)
  USEGSX46 : LINE=(DTSXU,UMASXh46,XCSU46,YCSU46,UMASXh46,DTSXU)
  USEGSX47 : LINE=(DTSXU,UMASXh47,XCSU47,YCSU47,UMASXh47,DTSXU)
  DUSEGS48 : DRIF, L=LDUSEGS
  DUSEGS49 : DRIF, L=LDUSEGS
  DUSEGS50 : DRIF, L=LDUSEGS

  QSXBLK26 : LINE=(QSXh26,XCSX26,MUQS,YCSX26,QSXh26)
  QSXBLK27 : LINE=(QSXh27,XCSX27,MUQS,YCSX27,QSXh27)
  QSXBLK28 : LINE=(QSXh28,XCSX28,MUQS,YCSX28,QSXh28)
  QSXBLK29 : LINE=(QSXh29,XCSX29,MUQS,YCSX29,QSXh29)
  QSXBLK30 : LINE=(QSXh30,XCSX30,MUQS,YCSX30,QSXh30)
  QSXBLK31 : LINE=(QSXh31,XCSX31,MUQS,YCSX31,QSXh31)
  QSXBLK32 : LINE=(QSXh32,XCSX32,MUQS,YCSX32,QSXh32)
  QSXBLK33 : LINE=(QSXh33,XCSX33,MUQS,YCSX33,QSXh33)
  QSXBLK34 : LINE=(QSXh34,XCSX34,MUQS,YCSX34,QSXh34)
  QSXBLK35 : LINE=(QSXh35,XCSX35,MUQS,YCSX35,QSXh35)
  QSXBLK36 : LINE=(QSXh36,XCSX36,MUQS,YCSX36,QSXh36)
  QSXBLK37 : LINE=(QSXh37,XCSX37,MUQS,YCSX37,QSXh37)
  QSXBLK38 : LINE=(QSXh38,XCSX38,MUQS,YCSX38,QSXh38)
  QSXBLK39 : LINE=(QSXh39,XCSX39,MUQS,YCSX39,QSXh39)
  QSXBLK40 : LINE=(QSXh40,XCSX40,MUQS,YCSX40,QSXh40)
  QSXBLK41 : LINE=(QSXh41,XCSX41,MUQS,YCSX41,QSXh41)
  QSXBLK42 : LINE=(QSXh42,XCSX42,MUQS,YCSX42,QSXh42)
  QSXBLK43 : LINE=(QSXh43,XCSX43,MUQS,YCSX43,QSXh43)
  QSXBLK44 : LINE=(QSXh44,XCSX44,MUQS,YCSX44,QSXh44)
  QSXBLK45 : LINE=(QSXh45,XCSX45,MUQS,YCSX45,QSXh45)
  QSXBLK46 : LINE=(QSXh46,XCSX46,MUQS,YCSX46,QSXh46)
  QSXBLK47 : LINE=(QSXh47,XCSX47,MUQS,YCSX47,QSXh47)
  DQSXBL48 : DRIF, L=LQu
  DQSXBL49 : DRIF, L=LQu
  DQSXBL50 : DRIF, L=LQu

  SXBRK26  : LINE=(DU3s,PHSSX26,DU4s,VVSXU26,DU5s,QSXBLK26,DU6s,RFBSX26,DU7s)
  SXBRK27  : LINE=(DU3s,PHSSX27,DU4s,        DU5s,QSXBLK27,DU6s,RFBSX27,DU7s)
  SXBRK28  : LINE=(DU3s,PHSSX28,DU4s,        DU5s,QSXBLK28,DU6s,RFBSX28,DU7s)
  SXBRK29  : LINE=(DU3s,PHSSX29,DU4s,        DU5s,QSXBLK29,DU6s,RFBSX29,DU7s)
  SXBRK30  : LINE=(DU3s,PHSSX30,DU4s,        DU5s,QSXBLK30,DU6s,RFBSX30,DU7s)
  SXBRK31  : LINE=(DU3s,PHSSX31,DU4s,        DU5s,QSXBLK31,DU6s,RFBSX31,DU7s)
  SXBRK32  : LINE=(DU3s,PHSSX32,DU4s,VVSXU32,DU5s,QSXBLK32,DU6s,RFBSX32,DU7s)
  SXBRK33  : LINE=(DU3s,DPHSS33,DU4s,        DU5s,QSXBLK33,DU6s,RFBSX33,DU7s)
  SXBRK34  : LINE=(DU3s,PHSSX34,DU4s,        DU5s,QSXBLK34,DU6s,RFBSX34,DU7s)
  SXBRK35  : LINE=(DU3s,PHSSX35,DU4s,        DU5s,QSXBLK35,DU6s,RFBSX35,DU7s)
  SXBRK36  : LINE=(DU3s,PHSSX36,DU4s,        DU5s,QSXBLK36,DU6s,RFBSX36,DU7s)
  SXBRK37  : LINE=(DU3s,PHSSX37,DU4s,        DU5s,QSXBLK37,DU6s,RFBSX37,DU7s)
  SXBRK38  : LINE=(DU3s,PHSSX38,DU4s,VVSXU38,DU5s,QSXBLK38,DU6s,RFBSX38,DU7s)
  SXBRK39  : LINE=(DU3s,PHSSX39,DU4s,        DU5s,QSXBLK39,DU6s,RFBSX39,DU7s)
  SXBRK40  : LINE=(DU3s,PHSSX40,DU4s,        DU5s,QSXBLK40,DU6s,RFBSX40,DU7s)
  SXBRK41  : LINE=(DU3s,PHSSX41,DU4s,        DU5s,QSXBLK41,DU6s,RFBSX41,DU7s)
  SXBRK42  : LINE=(DU3s,PHSSX42,DU4s,        DU5s,QSXBLK42,DU6s,RFBSX42,DU7s)
  SXBRK43  : LINE=(DU3s,PHSSX43,DU4s,        DU5s,QSXBLK43,DU6s,RFBSX43,DU7s)
  SXBRK44  : LINE=(DU3s,PHSSX44,DU4s,VVSXU44,DU5s,QSXBLK44,DU6s,RFBSX44,DU7s)
  SXBRK45  : LINE=(DU3s,PHSSX45,DU4s,        DU5s,QSXBLK45,DU6s,RFBSX45,DU7s)
  SXBRK46  : LINE=(DU3s,PHSSX46,DU4s,        DU5s,QSXBLK46,DU6s,RFBSX46,DU7s)
  SXBRK47  : LINE=(DU3s,DPHSS47,DU4s,VVSXU47,DU5s,QSXBLK47,DU6s,RFBSX47,DU7s)
  SXBRK48  : LINE=(DU3s,DPHSS48,DU4s,        DU5s,DQSXBL48,DU6s,DRFBS48,DU7s)
  SXBRK49  : LINE=(DU3s,DPHSS49,DU4s,        DU5s,DQSXBL49,DU6s,DRFBS49,DU7s)
  SXBRK50  : LINE=(DU3s,DPHSS50,DU4s,        DU5s,DQSXBL50,DU6s,DRFBS50,DU7s)

  SXCEL26  : LINE=(DU1s,BLMS26,DU2s,USEGSX26,SXBRK26)
  SXCEL27  : LINE=(DU1s,BLMS27,DU2s,USEGSX27,SXBRK27)
  SXCEL28  : LINE=(DU1s,BLMS28,DU2s,USEGSX28,SXBRK28)
  SXCEL29  : LINE=(DU1s,BLMS29,DU2s,USEGSX29,SXBRK29)
  SXCEL30  : LINE=(DU1s,BLMS30,DU2s,USEGSX30,SXBRK30)
  SXCEL31  : LINE=(DU1s,BLMS31,DU2s,USEGSX31,SXBRK31)
  SXCEL32  : LINE=(DU1s,BLMS32,DU2s,USEGSX32,SXBRK32)
  SXCEL33  : LINE=(DU1s,       DU2s,DUSEGS33,SXBRK33) !empty with Q+RFBPM
  SXCEL34  : LINE=(DU1s,BLMS34,DU2s,USEGSX34,SXBRK34)
  SXCEL35  : LINE=(DU1s,BLMS35,DU2s,USEGSX35,SXBRK35)
  SXCEL36  : LINE=(DU1s,BLMS36,DU2s,USEGSX36,SXBRK36)
  SXCEL37  : LINE=(DU1s,BLMS37,DU2s,USEGSX37,SXBRK37)
  SXCEL38  : LINE=(DU1s,BLMS38,DU2s,USEGSX38,SXBRK38)
  SXCEL39  : LINE=(DU1s,BLMS39,DU2s,USEGSX39,SXBRK39)
  SXCEL40  : LINE=(DU1s,BLMS40,DU2s,USEGSX40,SXBRK40)
  SXCEL41  : LINE=(DU1s,BLMS41,DU2s,USEGSX41,SXBRK41)
  SXCEL42  : LINE=(DU1s,BLMS42,DU2s,USEGSX42,SXBRK42)
  SXCEL43  : LINE=(DU1s,BLMS43,DU2s,USEGSX43,SXBRK43)
  SXCEL44  : LINE=(DU1s,BLMS44,DU2s,USEGSX44,SXBRK44)
  SXCEL45  : LINE=(DU1s,BLMS45,DU2s,USEGSX45,SXBRK45)
  SXCEL46  : LINE=(DU1s,BLMS46,DU2s,USEGSX46,SXBRK46)
  SXCEL47  : LINE=(DU1s,BLMS47,DU2s,USEGSX47,SXBRK47)
  SXCEL48  : LINE=(DU1s,       DU2s,DUSEGS48,SXBRK48) !empty
  SXCEL49  : LINE=(DU1s,       DU2s,DUSEGS49,SXBRK49) !empty
  SXCEL50  : LINE=(DU1s,       DU2s,DUSEGS50,SXBRK50) !empty

  SXRCL    : LINE=(&
    SXCEL26,SXCEL27,SXCEL28,SXCEL29,SXCEL30,&
    SXCEL31,SXCEL32,SXCEL33,SXCEL34,SXCEL35,&
    SXCEL36,SXCEL37,SXCEL38,SXCEL39,SXCEL40,&
    SXCEL41,SXCEL42,SXCEL43,SXCEL44,SXCEL45,&
    SXCEL46,SXCEL47,SXCEL48,SXCEL49,SXCEL50)

  SXR : LINE=(BEGSXR,SXRSTART,SXRCL,SXRTERM,ENDSXR)

! ------------------------------------------------------------------------------
! SXR undulator exit section
! ------------------------------------------------------------------------------

  KQUE1B := -0.17252548602
  KQUE2B :=  0.186958546837

  QUE1B : QUAD, TYPE="3.94Q17", L=LQP/2, K1=KQUE1b, APER=rQP
  QUE2B : QUAD, TYPE="3.94Q17", L=LQP/2, K1=KQUE2b, APER=rQP

 !TCX01Bh : LCAV, FREQ=XbandF, TYPE="TRANS_DEFL", L=1.0/2 !horizontal deflection
 !TCX01B  : LINE=(TCX01Bh,TCX01Bh)
 !TCX02Bh : LCAV, FREQ=XbandF, TYPE="TRANS_DEFL", L=1.0/2 !horizontal deflection
 !TCX02B  : LINE=(TCX02Bh,TCX02Bh)
  DTCX01B : DRIF, L=1.0
  DTCX02B : DRIF, L=1.0

  DUE1aSA : DRIF, L=0.9-LRFBub
  DUE1dSA : DRIF, L=0.1
  DUE1bSA : DRIF, L=1.5
  DUE1cSA : DRIF, L=0.5
  DUE2aSA : DRIF, L=0.5
  DUE2bSA : DRIF, L=1.800055
  DUE2cSA : DRIF, L=0.555
  DUE3aSA : DRIF, L=0.315504
  DUE3bSA : DRIF, L=1.3830495
  DUE3c   : DRIF, L=1.7968755
  DPCVV   : DRIF, L=0.397
  DVVTCX  : DRIF, L=0.32
  DTCX12  : DRIF, L=0.373/2
  DTCXSP  : DRIF, L=0.381
  DUE4    : DRIF, L=0.394
  DUE5aSA : DRIF, L=0.367
  DUE5bSA : DRIF, L=0.574 -0.25
  DUE5cSA : DRIF, L=0.846 -0.45
  DUE5d   : DRIF, L=0.471
  DUE5e   : DRIF, L=0.137
  DSB0bSA : DRIF, L=0.163
  DSB0cSA : DRIF, L=0.356 -0.1
  DSB0d   : DRIF, L=0.202
  dDSB0e  := -0.403232557158E-3
  DSB0e   : DRIF, L=0.372634 +dDSB0e

  XCUE1B  : HKIC,TYPE="class-4"
  XCD3B   : HKIC,TYPE="class-5"

  YCUE2B  : VKIC,TYPE="class-4"
  YCD3B   : VKIC,TYPE="class-5"

  BPMUE1B : MONI, TYPE="10_um_res"
  BPMUE2B : MONI, TYPE="10_um_res"
  BPMUE3B : MONI, TYPE="10_um_res"

  BTM0B  : INST !Burn-Through-Monitor behind PCPM1LB
  TRUE1B : INST !Be foil inserter (THz)
  SPTCXB : INST !XTCAV spoiler

  PCTCXB : ECOL !XTCAV photon collimator (9 mm aperture)
  PCPM0B : ECOL, L=LPCPM,XSIZE=0.0168,YSIZE=0.0103

  IMUNDOB : IMON !FEL-undulator output toroid (comparator with IMUNDIB)
  IMBCS3B : IMON !pre-dump magnet toroid with >42-mm ID stay-clear (comparator with IMBCS4B)

  UEbegb   : MARK
  VVTCXb   : MARK !XTCAV vacuum valve
  MTCXb    : MARK !centerline between TCX01B and TCX02B (for matching)
  UEendb   : MARK
  VV36b    : MARK ! treaty-point vacuum valve just downbeam of undulator
  VV37b    : MARK ! vac. valve in dumpline
  DLSTARTb : MARK

  UNDEXITb : LINE=(UEbegb,DUE1aSA,RFBSX51,DUE1dSA,VV36b,DUE1bSA,IMUNDOB,&
                   DUE1cSA,DUE2aSA,XCUE1B,DUE2bSA,YCUE2B,DUE2cSA,&
                   QUE1B,QUE1B,DUE3aSA,BPMUE1B,DUE3bSA,TRUE1B,DUE3c,&
                   PCTCXB,DPCVV,VVTCXb,DVVTCX,DTCX01B,DTCX12,MTCXb,&
                   DTCX12,DTCX02B,DTCXSP,SPTCXB,DUE4,&
                   QUE2B,QUE2B,DUE5aSA,BPMUE2B,DUE5bSA,BTM0B,DUE5cSA,&
                   YCD3B,DUE5d,XCD3B,DUE5e,UEendb,&
                   DLstartb,PCPM0B,DSB0bSA,IMBCS3B,DSB0cSA,VV37b,&
                   DSB0d,BPMUE3B,DSB0e)

  SXRUND : LINE=(SEQ08BEG,SXRXX,SEQ08END,SEQ09BEG,SXR,&
                 BEGDMPS,UNDEXITb,SEQ09END)

! ==============================================================================
! HXR undulator (south)
! ==============================================================================

! ------------------------------------------------------------------------------
! - Author: Heinz-Dieter Nuhn, Stanford Linear Accelerator Center
! - Last edited Mar 03, 2014
! - 7.2 mm miminum Undulator Gap; only constant break length each
! - include natural vertical focusing over all but edge terminations
! ------------------------------------------------------------------------------
! - IntgHX  = integrated quadrupole gradient
! - GQFHX   = QF and QD gradients can be made different to compensate for
!             undulator focussing ...
! - GQDHX   = ... but since undulator focussing depends on gamma^2, compensation
!             will only work for one energy
! - kQFHX   = QF undulator quadrupole focusing "k"
! - kQDHX   = QD undulator quadrupole focusing "k"
! - LDUSEGH = HXR Undulator segment length
! - luHXU   = HXR Undulator period
! - NpHXU   = HXR Undulator period count
! - LHXUCR  = HXR Undulator magnetic length
! - LHXUe   = HXR Undulator spacing between magnet array and strongback end
! - KHXU    = HXR Undulator parameter (rms); range 0.54-2.45
! - kQHX    = natural HXR undulator focusing "k" in y-plane
! ------------------------------------------------------------------------------

  LDUSEGH := 3.4
  LDU1h   := 0.1
  LDU2h   := 0.03
  LDU3h   := 0.25-LPSHXh
  LDU4h   := (0.25-LPSHXh-0.5*LQu)/2
  LDU5h   := LDU4h
  LDU6h   := 0.12-LQu/2-LRFBub/2
  LDU7h   := 0.25-LRFBub/2

  DU1h : DRIF, L=LDU1h
  DU2h : DRIF, L=LDU2h
  DU3h : DRIF, L=LDU3h
  DU4h : DRIF, L=LDU4h
  DU5h : DRIF, L=LDU5h
  DU6h : DRIF, L=LDU6h
  DU7h : DRIF, L=LDU7h

  IntgHX :=  12.0                        !kG
  GQFHX  :=  IntgHX/LQu/10*1.0           !T/m
  GQDHX  := -IntgHX/LQu/10*1.0           !T/m
  kQFHX  :=  1.E-9*GQFHX*CLIGHT/gamf/mc2 !m^-2
  kQDHX  :=  1.E-9*GQDHX*CLIGHT/gamf/mc2 !m^-2
  kQDHXm := -0.661125384976

  QHXh17 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh18 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh19 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh20 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh21 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh22 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh23 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh24 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh25 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh26 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh27 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh28 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh29 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh30 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh31 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh32 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh33 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh34 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh35 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh36 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh37 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh38 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh39 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh40 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh41 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh42 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh43 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh44 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh45 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh46 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh47 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh48 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHX, APER=rQu
  QHXh49 : QUAD, TYPE="QUND", L=LQu/2, K1=kQFHX, APER=rQu
  QHXh50 : QUAD, TYPE="QUND", L=LQu/2, K1=kQDHXm, APER=rQu

  luHXU   := 0.026                            !m
  NpHXU   := 130
  LHXUCR  := luHXU*NpHXU                      !m
  LHXUe   := (LDUSEGH-LHXUCR)/2               !m
  LHXUh   := LHXUCR/2
  KHXU    := 2.0
  kQHX    := (KHXU*2*pi/luHXU/sqrt(2)/gamf)^2 !m^-2

  UMAHXh : MATR, TYPE="UMAHXh", L=LHXUh,         &
    RM(1,1) = 1.0,                               &
    RM(1,2) = LHXUh,                             &
    RM(2,1) = 0.0,                               &
    RM(2,2) = 1.0,                               &
    RM(3,3) =  cos(LHXUh*sqrt(kQHX)),            &
    RM(3,4) =  sin(LHXUh*sqrt(kQHX))/sqrt(kQHX), &
    RM(4,3) = -sin(LHXUh*sqrt(kQHX))*sqrt(kQHX), &
    RM(4,4) =  cos(LHXUh*sqrt(kQHX))

  UMAHXh17 : UMAHXh
  UMAHXh18 : UMAHXh
  UMAHXh19 : UMAHXh
  UMAHXh20 : UMAHXh
  UMAHXh21 : UMAHXh
  UMAHXh22 : UMAHXh
  UMAHXh23 : UMAHXh
  UMAHXh25 : UMAHXh
  UMAHXh26 : UMAHXh
  UMAHXh27 : UMAHXh
  UMAHXh28 : UMAHXh
  UMAHXh29 : UMAHXh
  UMAHXh30 : UMAHXh
  UMAHXh31 : UMAHXh
  UMAHXh33 : UMAHXh
  UMAHXh34 : UMAHXh
  UMAHXh35 : UMAHXh
  UMAHXh36 : UMAHXh
  UMAHXh37 : UMAHXh
  UMAHXh38 : UMAHXh
  UMAHXh39 : UMAHXh
  UMAHXh40 : UMAHXh
  UMAHXh41 : UMAHXh
  UMAHXh42 : UMAHXh
  UMAHXh43 : UMAHXh
  UMAHXh44 : UMAHXh
  UMAHXh45 : UMAHXh
  UMAHXh46 : UMAHXh
  UMAHXh47 : UMAHXh
  UMAHXh48 : UMAHXh
  UMAHXh49 : UMAHXh
  UMAHXh50 : UMAHXh

! ------------------------------------------------------------------------------
! HXR undulator X-steering coils in quads
! ------------------------------------------------------------------------------

  XCHX17 : HKIC, TYPE="type-U"
  XCHX18 : HKIC, TYPE="type-U"
  XCHX19 : HKIC, TYPE="type-U"
  XCHX20 : HKIC, TYPE="type-U"
  XCHX21 : HKIC, TYPE="type-U"
  XCHX22 : HKIC, TYPE="type-U"
  XCHX23 : HKIC, TYPE="type-U"
  XCHX24 : HKIC, TYPE="type-U"
  XCHX25 : HKIC, TYPE="type-U"
  XCHX26 : HKIC, TYPE="type-U"
  XCHX27 : HKIC, TYPE="type-U"
  XCHX28 : HKIC, TYPE="type-U"
  XCHX29 : HKIC, TYPE="type-U"
  XCHX30 : HKIC, TYPE="type-U"
  XCHX31 : HKIC, TYPE="type-U"
  XCHX32 : HKIC, TYPE="type-U"
  XCHX33 : HKIC, TYPE="type-U"
  XCHX34 : HKIC, TYPE="type-U"
  XCHX35 : HKIC, TYPE="type-U"
  XCHX36 : HKIC, TYPE="type-U"
  XCHX37 : HKIC, TYPE="type-U"
  XCHX38 : HKIC, TYPE="type-U"
  XCHX39 : HKIC, TYPE="type-U"
  XCHX40 : HKIC, TYPE="type-U"
  XCHX41 : HKIC, TYPE="type-U"
  XCHX42 : HKIC, TYPE="type-U"
  XCHX43 : HKIC, TYPE="type-U"
  XCHX44 : HKIC, TYPE="type-U"
  XCHX45 : HKIC, TYPE="type-U"
  XCHX46 : HKIC, TYPE="type-U"
  XCHX47 : HKIC, TYPE="type-U"
  XCHX48 : HKIC, TYPE="type-U"
  XCHX49 : HKIC, TYPE="type-U"
  XCHX50 : HKIC, TYPE="type-U"

! ------------------------------------------------------------------------------
! HXR undulator Y-steering coils in quads
! ------------------------------------------------------------------------------

  YCHX17 : VKIC, TYPE="type-U"
  YCHX18 : VKIC, TYPE="type-U"
  YCHX19 : VKIC, TYPE="type-U"
  YCHX20 : VKIC, TYPE="type-U"
  YCHX21 : VKIC, TYPE="type-U"
  YCHX22 : VKIC, TYPE="type-U"
  YCHX23 : VKIC, TYPE="type-U"
  YCHX24 : VKIC, TYPE="type-U"
  YCHX25 : VKIC, TYPE="type-U"
  YCHX26 : VKIC, TYPE="type-U"
  YCHX27 : VKIC, TYPE="type-U"
  YCHX28 : VKIC, TYPE="type-U"
  YCHX29 : VKIC, TYPE="type-U"
  YCHX30 : VKIC, TYPE="type-U"
  YCHX31 : VKIC, TYPE="type-U"
  YCHX32 : VKIC, TYPE="type-U"
  YCHX33 : VKIC, TYPE="type-U"
  YCHX34 : VKIC, TYPE="type-U"
  YCHX35 : VKIC, TYPE="type-U"
  YCHX36 : VKIC, TYPE="type-U"
  YCHX37 : VKIC, TYPE="type-U"
  YCHX38 : VKIC, TYPE="type-U"
  YCHX39 : VKIC, TYPE="type-U"
  YCHX40 : VKIC, TYPE="type-U"
  YCHX41 : VKIC, TYPE="type-U"
  YCHX42 : VKIC, TYPE="type-U"
  YCHX43 : VKIC, TYPE="type-U"
  YCHX44 : VKIC, TYPE="type-U"
  YCHX45 : VKIC, TYPE="type-U"
  YCHX46 : VKIC, TYPE="type-U"
  YCHX47 : VKIC, TYPE="type-U"
  YCHX48 : VKIC, TYPE="type-U"
  YCHX49 : VKIC, TYPE="type-U"
  YCHX50 : VKIC, TYPE="type-U"

! ------------------------------------------------------------------------------
! HXR undulator X-steering coils in undulator segments
! ------------------------------------------------------------------------------

  XCHU17 : HKIC, TYPE="type-V"
  XCHU18 : HKIC, TYPE="type-V"
  XCHU19 : HKIC, TYPE="type-V"
  XCHU20 : HKIC, TYPE="type-V"
  XCHU21 : HKIC, TYPE="type-V"
  XCHU22 : HKIC, TYPE="type-V"
  XCHU23 : HKIC, TYPE="type-V"
  XCHU25 : HKIC, TYPE="type-V"
  XCHU26 : HKIC, TYPE="type-V"
  XCHU27 : HKIC, TYPE="type-V"
  XCHU28 : HKIC, TYPE="type-V"
  XCHU29 : HKIC, TYPE="type-V"
  XCHU30 : HKIC, TYPE="type-V"
  XCHU31 : HKIC, TYPE="type-V"
  XCHU33 : HKIC, TYPE="type-V"
  XCHU34 : HKIC, TYPE="type-V"
  XCHU35 : HKIC, TYPE="type-V"
  XCHU36 : HKIC, TYPE="type-V"
  XCHU37 : HKIC, TYPE="type-V"
  XCHU38 : HKIC, TYPE="type-V"
  XCHU39 : HKIC, TYPE="type-V"
  XCHU40 : HKIC, TYPE="type-V"
  XCHU41 : HKIC, TYPE="type-V"
  XCHU42 : HKIC, TYPE="type-V"
  XCHU43 : HKIC, TYPE="type-V"
  XCHU44 : HKIC, TYPE="type-V"
  XCHU45 : HKIC, TYPE="type-V"
  XCHU46 : HKIC, TYPE="type-V"
  XCHU47 : HKIC, TYPE="type-V"
  XCHU48 : HKIC, TYPE="type-V"
  XCHU49 : HKIC, TYPE="type-V"
  XCHU50 : HKIC, TYPE="type-V"

! ------------------------------------------------------------------------------
! HXR undulator Y-steering coils in undulator segments
! ------------------------------------------------------------------------------

  YCHU17 : VKIC, TYPE="type-V"
  YCHU18 : VKIC, TYPE="type-V"
  YCHU19 : VKIC, TYPE="type-V"
  YCHU20 : VKIC, TYPE="type-V"
  YCHU21 : VKIC, TYPE="type-V"
  YCHU22 : VKIC, TYPE="type-V"
  YCHU23 : VKIC, TYPE="type-V"
  YCHU25 : VKIC, TYPE="type-V"
  YCHU26 : VKIC, TYPE="type-V"
  YCHU27 : VKIC, TYPE="type-V"
  YCHU28 : VKIC, TYPE="type-V"
  YCHU29 : VKIC, TYPE="type-V"
  YCHU30 : VKIC, TYPE="type-V"
  YCHU31 : VKIC, TYPE="type-V"
  YCHU33 : VKIC, TYPE="type-V"
  YCHU34 : VKIC, TYPE="type-V"
  YCHU35 : VKIC, TYPE="type-V"
  YCHU36 : VKIC, TYPE="type-V"
  YCHU37 : VKIC, TYPE="type-V"
  YCHU38 : VKIC, TYPE="type-V"
  YCHU39 : VKIC, TYPE="type-V"
  YCHU40 : VKIC, TYPE="type-V"
  YCHU41 : VKIC, TYPE="type-V"
  YCHU42 : VKIC, TYPE="type-V"
  YCHU43 : VKIC, TYPE="type-V"
  YCHU44 : VKIC, TYPE="type-V"
  YCHU45 : VKIC, TYPE="type-V"
  YCHU46 : VKIC, TYPE="type-V"
  YCHU47 : VKIC, TYPE="type-V"
  YCHU48 : VKIC, TYPE="type-V"
  YCHU49 : VKIC, TYPE="type-V"
  YCHU50 : VKIC, TYPE="type-V"

! ------------------------------------------------------------------------------
! HXR undulator BPMs
! ------------------------------------------------------------------------------

  RFBHX15 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX16 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX17 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX18 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX19 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX20 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX21 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX22 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX23 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX24 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX25 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX26 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX27 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX28 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX29 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX30 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX31 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX32 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX33 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX34 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX35 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX36 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX37 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX38 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX39 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX40 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX41 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX42 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX43 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX44 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX45 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX46 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX47 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX48 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX49 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX50 : MONI, L=LRFBub, TYPE="01_um_res"
  RFBHX51 : MONI, L=LRFBub, TYPE="01_um_res"

! ------------------------------------------------------------------------------
! HXR undulator PPM phase shifter
! - Author: Heinz-Dieter Nuhn, Stanford Linear Accelerator Center
! - Last edited March 20, 2014
! - 10.0 mm miminum Undulator Gap
! ------------------------------------------------------------------------------
! - LPSHX  = HXR Phase Shifter Length length
! - luHXU  = HXR Phase Shifter period
! - KPSHX  = HXR Phase Shifter Undulator parameter (rms); range 0.18–1.91
! - kQPSHX = natural HXR Phase Shifter undulator focusing "k" in y-plane
! ------------------------------------------------------------------------------

  LPSHX  := 0.0495                             !m
  luPSHX := 0.036                              !m
  LPSHXh := LPSHX/2
  KPSHX  := 1.91
  kQPSHX := (KPSHX*2*pi/luPSHX/sqrt(2)/gamf)^2 !m^-2

  PSHXh : MATR, TYPE="PSHXh", L=LPSHXh,               &
    RM(1,1) = 1.0,                                    &
    RM(1,2) = LPSHXh,                                 &
    RM(2,1) = 0.0,                                    &
    RM(2,2) = 1.0,                                    &
    RM(3,3) =  cos(LPSHXh*sqrt(kQPSHX)),              &
    RM(3,4) =  sin(LPSHXh*sqrt(kQPSHX))/sqrt(kQPSHX), &
    RM(4,3) = -sin(LPSHXh*sqrt(kQPSHX))*sqrt(kQPSHX), &
    RM(4,4) =  cos(LPSHXh*sqrt(kQPSHX))

! ------------------------------------------------------------------------------
! DTHXU = HXU undulator segment small terminations modeled as drift
! ------------------------------------------------------------------------------

  DTHXU : DRIF, L=LHXUe

! ------------------------------------------------------------------------------
! markers
! ------------------------------------------------------------------------------

  HXRSTART : MARK !start of undulator system
  HXRTERM  : MARK !end of undulator system
  MUQH     : MARK
  MPHH     : MARK

! ------------------------------------------------------------------------------
! HXR undulator phase shifters
! ------------------------------------------------------------------------------

  DPHSH15 : DRIF, L=LPSHX
  DPHSH16 : DRIF, L=LPSHX
  PHSHX17 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX18 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX19 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX20 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX21 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX22 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX23 : LINE=(PSHXh,MPHH,PSHXh)
  DPHSH24 : DRIF, L=LPSHX
  PHSHX25 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX26 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX27 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX28 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX29 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX30 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX31 : LINE=(PSHXh,MPHH,PSHXh)
  DPHSH32 : DRIF, L=LPSHX
  PHSHX33 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX34 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX35 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX36 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX37 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX38 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX39 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX40 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX41 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX42 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX43 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX44 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX45 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX46 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX47 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX48 : LINE=(PSHXh,MPHH,PSHXh)
  PHSHX49 : LINE=(PSHXh,MPHH,PSHXh)
  DPHSH50 : DRIF, L=LPSHX

! ------------------------------------------------------------------------------
! HXR undulator inline valves, VAT Series 48
! ------------------------------------------------------------------------------

  VVHXU17  : MARK
  VVHXU21  : MARK
  VVHXU26  : MARK
  VVHXU32  : MARK
  VVHXU38  : MARK
  VVHXU44  : MARK
  VVHXU50  : MARK

! ------------------------------------------------------------------------------
! HXR undulator Beam Loss Monitors
! ------------------------------------------------------------------------------

  BLMH17   : MARK
  BLMH18   : MARK
  BLMH19   : MARK
  BLMH20   : MARK
  BLMH21   : MARK
  BLMH22   : MARK
  BLMH23   : MARK
  BLMH25   : MARK
  BLMH26   : MARK
  BLMH27   : MARK
  BLMH28   : MARK
  BLMH29   : MARK
  BLMH30   : MARK
  BLMH31   : MARK
  BLMH33   : MARK
  BLMH34   : MARK
  BLMH35   : MARK
  BLMH36   : MARK
  BLMH37   : MARK
  BLMH38   : MARK
  BLMH39   : MARK
  BLMH40   : MARK
  BLMH41   : MARK
  BLMH42   : MARK
  BLMH43   : MARK
  BLMH44   : MARK
  BLMH45   : MARK
  BLMH46   : MARK
  BLMH47   : MARK
  BLMH48   : MARK
  BLMH49   : MARK
  BLMH50   : MARK

  DUSEGH15 : DRIF, L=LDUSEGH
  DUSEGH16 : DRIF, L=LDUSEGH
  USEGHX17 : LINE=(DTHXU,UMAHXh17,XCHU17,YCHU17,UMAHXh17,DTHXU)
  USEGHX18 : LINE=(DTHXU,UMAHXh18,XCHU18,YCHU18,UMAHXh18,DTHXU)
  USEGHX19 : LINE=(DTHXU,UMAHXh19,XCHU19,YCHU19,UMAHXh19,DTHXU)
  USEGHX20 : LINE=(DTHXU,UMAHXh20,XCHU20,YCHU20,UMAHXh20,DTHXU)
  USEGHX21 : LINE=(DTHXU,UMAHXh21,XCHU21,YCHU21,UMAHXh21,DTHXU)
  USEGHX22 : LINE=(DTHXU,UMAHXh22,XCHU22,YCHU22,UMAHXh22,DTHXU)
  USEGHX23 : LINE=(DTHXU,UMAHXh23,XCHU23,YCHU23,UMAHXh23,DTHXU)
  DUSEGH24 : DRIF, L=LDUSEGH
  USEGHX25 : LINE=(DTHXU,UMAHXh25,XCHU25,YCHU25,UMAHXh25,DTHXU)
  USEGHX26 : LINE=(DTHXU,UMAHXh26,XCHU26,YCHU26,UMAHXh26,DTHXU)
  USEGHX27 : LINE=(DTHXU,UMAHXh27,XCHU27,YCHU27,UMAHXh27,DTHXU)
  USEGHX28 : LINE=(DTHXU,UMAHXh28,XCHU28,YCHU28,UMAHXh28,DTHXU)
  USEGHX29 : LINE=(DTHXU,UMAHXh29,XCHU29,YCHU29,UMAHXh29,DTHXU)
  USEGHX30 : LINE=(DTHXU,UMAHXh30,XCHU30,YCHU30,UMAHXh30,DTHXU)
  USEGHX31 : LINE=(DTHXU,UMAHXh31,XCHU31,YCHU31,UMAHXh31,DTHXU)
  DUSEGH32 : DRIF, L=LDUSEGH
  USEGHX33 : LINE=(DTHXU,UMAHXh33,XCHU33,YCHU33,UMAHXh33,DTHXU)
  USEGHX34 : LINE=(DTHXU,UMAHXh34,XCHU34,YCHU34,UMAHXh34,DTHXU)
  USEGHX35 : LINE=(DTHXU,UMAHXh35,XCHU35,YCHU35,UMAHXh35,DTHXU)
  USEGHX36 : LINE=(DTHXU,UMAHXh36,XCHU36,YCHU36,UMAHXh36,DTHXU)
  USEGHX37 : LINE=(DTHXU,UMAHXh37,XCHU37,YCHU37,UMAHXh37,DTHXU)
  USEGHX38 : LINE=(DTHXU,UMAHXh38,XCHU38,YCHU38,UMAHXh38,DTHXU)
  USEGHX39 : LINE=(DTHXU,UMAHXh39,XCHU39,YCHU39,UMAHXh39,DTHXU)
  USEGHX40 : LINE=(DTHXU,UMAHXh40,XCHU40,YCHU40,UMAHXh40,DTHXU)
  USEGHX41 : LINE=(DTHXU,UMAHXh41,XCHU41,YCHU41,UMAHXh41,DTHXU)
  USEGHX42 : LINE=(DTHXU,UMAHXh42,XCHU42,YCHU42,UMAHXh42,DTHXU)
  USEGHX43 : LINE=(DTHXU,UMAHXh43,XCHU43,YCHU43,UMAHXh43,DTHXU)
  USEGHX44 : LINE=(DTHXU,UMAHXh44,XCHU44,YCHU44,UMAHXh44,DTHXU)
  USEGHX45 : LINE=(DTHXU,UMAHXh45,XCHU45,YCHU45,UMAHXh45,DTHXU)
  USEGHX46 : LINE=(DTHXU,UMAHXh46,XCHU46,YCHU46,UMAHXh46,DTHXU)
  USEGHX47 : LINE=(DTHXU,UMAHXh47,XCHU47,YCHU47,UMAHXh47,DTHXU)
  USEGHX48 : LINE=(DTHXU,UMAHXh48,XCHU48,YCHU48,UMAHXh48,DTHXU)
  USEGHX49 : LINE=(DTHXU,UMAHXh49,XCHU49,YCHU49,UMAHXh49,DTHXU)
  USEGHX50 : LINE=(DTHXU,UMAHXh50,XCHU50,YCHU50,UMAHXh50,DTHXU)

  DQHXBL15 : DRIF, L=LQu
  DQHXBL16 : DRIF, L=LQu
  QHXBLK17 : LINE=(QHXh17,XCHX17,MUQH,YCHX17,QHXh17)
  QHXBLK18 : LINE=(QHXh18,XCHX18,MUQH,YCHX18,QHXh18)
  QHXBLK19 : LINE=(QHXh19,XCHX19,MUQH,YCHX19,QHXh19)
  QHXBLK20 : LINE=(QHXh20,XCHX20,MUQH,YCHX20,QHXh20)
  QHXBLK21 : LINE=(QHXh21,XCHX21,MUQH,YCHX21,QHXh21)
  QHXBLK22 : LINE=(QHXh22,XCHX22,MUQH,YCHX22,QHXh22)
  QHXBLK23 : LINE=(QHXh23,XCHX23,MUQH,YCHX23,QHXh23)
  QHXBLK24 : LINE=(QHXh24,XCHX24,MUQH,YCHX24,QHXh24)
  QHXBLK25 : LINE=(QHXh25,XCHX25,MUQH,YCHX25,QHXh25)
  QHXBLK26 : LINE=(QHXh26,XCHX26,MUQH,YCHX26,QHXh26)
  QHXBLK27 : LINE=(QHXh27,XCHX27,MUQH,YCHX27,QHXh27)
  QHXBLK28 : LINE=(QHXh28,XCHX28,MUQH,YCHX28,QHXh28)
  QHXBLK29 : LINE=(QHXh29,XCHX29,MUQH,YCHX29,QHXh29)
  QHXBLK30 : LINE=(QHXh30,XCHX30,MUQH,YCHX30,QHXh30)
  QHXBLK31 : LINE=(QHXh31,XCHX31,MUQH,YCHX31,QHXh31)
  QHXBLK32 : LINE=(QHXh32,XCHX32,MUQH,YCHX32,QHXh32)
  QHXBLK33 : LINE=(QHXh33,XCHX33,MUQH,YCHX33,QHXh33)
  QHXBLK34 : LINE=(QHXh34,XCHX34,MUQH,YCHX34,QHXh34)
  QHXBLK35 : LINE=(QHXh35,XCHX35,MUQH,YCHX35,QHXh35)
  QHXBLK36 : LINE=(QHXh36,XCHX36,MUQH,YCHX36,QHXh36)
  QHXBLK37 : LINE=(QHXh37,XCHX37,MUQH,YCHX37,QHXh37)
  QHXBLK38 : LINE=(QHXh38,XCHX38,MUQH,YCHX38,QHXh38)
  QHXBLK39 : LINE=(QHXh39,XCHX39,MUQH,YCHX39,QHXh39)
  QHXBLK40 : LINE=(QHXh40,XCHX40,MUQH,YCHX40,QHXh40)
  QHXBLK41 : LINE=(QHXh41,XCHX41,MUQH,YCHX41,QHXh41)
  QHXBLK42 : LINE=(QHXh42,XCHX42,MUQH,YCHX42,QHXh42)
  QHXBLK43 : LINE=(QHXh43,XCHX43,MUQH,YCHX43,QHXh43)
  QHXBLK44 : LINE=(QHXh44,XCHX44,MUQH,YCHX44,QHXh44)
  QHXBLK45 : LINE=(QHXh45,XCHX45,MUQH,YCHX45,QHXh45)
  QHXBLK46 : LINE=(QHXh46,XCHX46,MUQH,YCHX46,QHXh46)
  QHXBLK47 : LINE=(QHXh47,XCHX47,MUQH,YCHX47,QHXh47)
  QHXBLK48 : LINE=(QHXh48,XCHX48,MUQH,YCHX48,QHXh48)
  QHXBLK49 : LINE=(QHXh49,XCHX49,MUQH,YCHX49,QHXh49)
  QHXBLK50 : LINE=(QHXh50,XCHX50,MUQH,YCHX50,QHXh50)

  HXBRK15  : LINE=(DU3h,DPHSH15,DU4h,        DU5h,DQHXBL15,DU6h,RFBHX15,DU7h)
  HXBRK16  : LINE=(DU3h,DPHSH16,DU4h,        DU5h,DQHXBL16,DU6h,RFBHX16,DU7h)
  HXBRK17  : LINE=(DU3h,PHSHX17,DU4h,VVHXU17,DU5h,QHXBLK17,DU6h,RFBHX17,DU7h)
  HXBRK18  : LINE=(DU3h,PHSHX18,DU4h,        DU5h,QHXBLK18,DU6h,RFBHX18,DU7h)
  HXBRK19  : LINE=(DU3h,PHSHX19,DU4h,        DU5h,QHXBLK19,DU6h,RFBHX19,DU7h)
  HXBRK20  : LINE=(DU3h,PHSHX20,DU4h,        DU5h,QHXBLK20,DU6h,RFBHX20,DU7h)
  HXBRK21  : LINE=(DU3h,PHSHX21,DU4h,VVHXU21,DU5h,QHXBLK21,DU6h,RFBHX21,DU7h)
  HXBRK22  : LINE=(DU3h,PHSHX22,DU4h,        DU5h,QHXBLK22,DU6h,RFBHX22,DU7h)
  HXBRK23  : LINE=(DU3h,PHSHX23,DU4h,        DU5h,QHXBLK23,DU6h,RFBHX23,DU7h)
  HXBRK24  : LINE=(DU3h,DPHSH24,DU4h,        DU5h,QHXBLK24,DU6h,RFBHX24,DU7h)
  HXBRK25  : LINE=(DU3h,PHSHX25,DU4h,        DU5h,QHXBLK25,DU6h,RFBHX25,DU7h)
  HXBRK26  : LINE=(DU3h,PHSHX26,DU4h,VVHXU26,DU5h,QHXBLK26,DU6h,RFBHX26,DU7h)
  HXBRK27  : LINE=(DU3h,PHSHX27,DU4h,        DU5h,QHXBLK27,DU6h,RFBHX27,DU7h)
  HXBRK28  : LINE=(DU3h,PHSHX28,DU4h,        DU5h,QHXBLK28,DU6h,RFBHX28,DU7h)
  HXBRK29  : LINE=(DU3h,PHSHX29,DU4h,        DU5h,QHXBLK29,DU6h,RFBHX29,DU7h)
  HXBRK30  : LINE=(DU3h,PHSHX30,DU4h,        DU5h,QHXBLK30,DU6h,RFBHX30,DU7h)
  HXBRK31  : LINE=(DU3h,PHSHX31,DU4h,        DU5h,QHXBLK31,DU6h,RFBHX31,DU7h)
  HXBRK32  : LINE=(DU3h,DPHSH32,DU4h,VVHXU32,DU5h,QHXBLK32,DU6h,RFBHX32,DU7h)
  HXBRK33  : LINE=(DU3h,PHSHX33,DU4h,        DU5h,QHXBLK33,DU6h,RFBHX33,DU7h)
  HXBRK34  : LINE=(DU3h,PHSHX34,DU4h,        DU5h,QHXBLK34,DU6h,RFBHX34,DU7h)
  HXBRK35  : LINE=(DU3h,PHSHX35,DU4h,        DU5h,QHXBLK35,DU6h,RFBHX35,DU7h)
  HXBRK36  : LINE=(DU3h,PHSHX36,DU4h,        DU5h,QHXBLK36,DU6h,RFBHX36,DU7h)
  HXBRK37  : LINE=(DU3h,PHSHX37,DU4h,        DU5h,QHXBLK37,DU6h,RFBHX37,DU7h)
  HXBRK38  : LINE=(DU3h,PHSHX38,DU4h,VVHXU38,DU5h,QHXBLK38,DU6h,RFBHX38,DU7h)
  HXBRK39  : LINE=(DU3h,PHSHX39,DU4h,        DU5h,QHXBLK39,DU6h,RFBHX39,DU7h)
  HXBRK40  : LINE=(DU3h,PHSHX40,DU4h,        DU5h,QHXBLK40,DU6h,RFBHX40,DU7h)
  HXBRK41  : LINE=(DU3h,PHSHX41,DU4h,        DU5h,QHXBLK41,DU6h,RFBHX41,DU7h)
  HXBRK42  : LINE=(DU3h,PHSHX42,DU4h,        DU5h,QHXBLK42,DU6h,RFBHX42,DU7h)
  HXBRK43  : LINE=(DU3h,PHSHX43,DU4h,        DU5h,QHXBLK43,DU6h,RFBHX43,DU7h)
  HXBRK44  : LINE=(DU3h,PHSHX44,DU4h,VVHXU44,DU5h,QHXBLK44,DU6h,RFBHX44,DU7h)
  HXBRK45  : LINE=(DU3h,PHSHX45,DU4h,        DU5h,QHXBLK45,DU6h,RFBHX45,DU7h)
  HXBRK46  : LINE=(DU3h,PHSHX46,DU4h,        DU5h,QHXBLK46,DU6h,RFBHX46,DU7h)
  HXBRK47  : LINE=(DU3h,PHSHX47,DU4h,        DU5h,QHXBLK47,DU6h,RFBHX47,DU7h)
  HXBRK48  : LINE=(DU3h,PHSHX48,DU4h,        DU5h,QHXBLK48,DU6h,RFBHX48,DU7h)
  HXBRK49  : LINE=(DU3h,PHSHX49,DU4h,        DU5h,QHXBLK49,DU6h,RFBHX49,DU7h)
  HXBRK50  : LINE=(DU3h,DPHSH50,DU4h,VVHXU50,DU5h,QHXBLK50,DU6h,RFBHX50,DU7h)

  HXCEL15  : LINE=(DU1h,       DU2h,DUSEGH15,HXBRK15) !empty with RFBPM
  HXCEL16  : LINE=(DU1h,       DU2h,DUSEGH16,HXBRK16) !empty with RFBPM
  HXCEL17  : LINE=(DU1h,BLMH17,DU2h,USEGHX17,HXBRK17)
  HXCEL18  : LINE=(DU1h,BLMH18,DU2h,USEGHX18,HXBRK18)
  HXCEL19  : LINE=(DU1h,BLMH19,DU2h,USEGHX19,HXBRK19)
  HXCEL20  : LINE=(DU1h,BLMH20,DU2h,USEGHX20,HXBRK20)
  HXCEL21  : LINE=(DU1h,BLMH21,DU2h,USEGHX21,HXBRK21)
  HXCEL22  : LINE=(DU1h,BLMH22,DU2h,USEGHX22,HXBRK22)
  HXCEL23  : LINE=(DU1h,BLMH23,DU2h,USEGHX23,HXBRK23)
  HXCEL24  : LINE=(DU1h,       DU2h,DUSEGH24,HXBRK24) !empty with Q+RFBPM
  HXCEL25  : LINE=(DU1h,BLMH25,DU2h,USEGHX25,HXBRK25)
  HXCEL26  : LINE=(DU1h,BLMH26,DU2h,USEGHX26,HXBRK26)
  HXCEL27  : LINE=(DU1h,BLMH27,DU2h,USEGHX27,HXBRK27)
  HXCEL28  : LINE=(DU1h,BLMH28,DU2h,USEGHX28,HXBRK28)
  HXCEL29  : LINE=(DU1h,BLMH29,DU2h,USEGHX29,HXBRK29)
  HXCEL30  : LINE=(DU1h,BLMH30,DU2h,USEGHX30,HXBRK30)
  HXCEL31  : LINE=(DU1h,BLMH31,DU2h,USEGHX31,HXBRK31)
  HXCEL32  : LINE=(DU1h,       DU2h,DUSEGH32,HXBRK32) !empty with Q+RFBPM
  HXCEL33  : LINE=(DU1h,BLMH33,DU2h,USEGHX33,HXBRK33)
  HXCEL34  : LINE=(DU1h,BLMH34,DU2h,USEGHX34,HXBRK34)
  HXCEL35  : LINE=(DU1h,BLMH35,DU2h,USEGHX35,HXBRK35)
  HXCEL36  : LINE=(DU1h,BLMH36,DU2h,USEGHX36,HXBRK36)
  HXCEL37  : LINE=(DU1h,BLMH37,DU2h,USEGHX37,HXBRK37)
  HXCEL38  : LINE=(DU1h,BLMH38,DU2h,USEGHX38,HXBRK38)
  HXCEL39  : LINE=(DU1h,BLMH39,DU2h,USEGHX39,HXBRK39)
  HXCEL40  : LINE=(DU1h,BLMH40,DU2h,USEGHX40,HXBRK40)
  HXCEL41  : LINE=(DU1h,BLMH41,DU2h,USEGHX41,HXBRK41)
  HXCEL42  : LINE=(DU1h,BLMH42,DU2h,USEGHX42,HXBRK42)
  HXCEL43  : LINE=(DU1h,BLMH43,DU2h,USEGHX43,HXBRK43)
  HXCEL44  : LINE=(DU1h,BLMH44,DU2h,USEGHX44,HXBRK44)
  HXCEL45  : LINE=(DU1h,BLMH45,DU2h,USEGHX45,HXBRK45)
  HXCEL46  : LINE=(DU1h,BLMH46,DU2h,USEGHX46,HXBRK46)
  HXCEL47  : LINE=(DU1h,BLMH47,DU2h,USEGHX47,HXBRK47)
  HXCEL48  : LINE=(DU1h,BLMH48,DU2h,USEGHX48,HXBRK48)
  HXCEL49  : LINE=(DU1h,BLMH49,DU2h,USEGHX49,HXBRK49)
  HXCEL50  : LINE=(DU1h,BLMH50,DU2h,USEGHX50,HXBRK50) !no phase shifter

  HXRCL    : LINE=(&
                                    HXCEL15,&
    HXCEL16,HXCEL17,HXCEL18,HXCEL19,HXCEL20,&
    HXCEL21,HXCEL22,HXCEL23,HXCEL24,HXCEL25,&
    HXCEL26,HXCEL27,HXCEL28,HXCEL29,HXCEL30,&
    HXCEL31,HXCEL32,HXCEL33,HXCEL34,HXCEL35,&
    HXCEL36,HXCEL37,HXCEL38,HXCEL39,HXCEL40,&
    HXCEL41,HXCEL42,HXCEL43,HXCEL44,HXCEL45,&
    HXCEL46,HXCEL47,HXCEL48,HXCEL49,HXCEL50)

  HXR : LINE=(BEGHXR,HXRSTART,HXRCL,HXRTERM,ENDHXR)

! ------------------------------------------------------------------------------
! HXR undulator exit section
! ------------------------------------------------------------------------------

  KQUE1 :=  0.15009240751
  KQUE2 := -0.054874745411

  QUE1 : QUAD, TYPE="3.25Q20", L=LQD/2, K1=KQUE1, APER=rQD
  QUE2 : QUAD, TYPE="3.25Q20", L=LQD/2, K1=KQUE2, APER=rQD

  XbandF : CONSTANT=11424

  TCX01h : LCAV, FREQ=XbandF, TYPE="TRANS_DEFL", L=1.0/2 !horizontal deflection
  TCX01  : LINE=(TCX01h,TCX01h)
  TCX02h : LCAV, FREQ=XbandF, TYPE="TRANS_DEFL", L=1.0/2 !horizontal deflection
  TCX02  : LINE=(TCX02h,TCX02h)

  DUE1a  : DRIF, L=0.9-LRFBub
  DUE1d  : DRIF, L=0.1
  DUE1b  : DRIF, L=1.5
  DUE1c  : DRIF, L=0.5
  DUE2a  : DRIF, L=0.5
  DUE2b  : DRIF, L=1.740055
  DUE2c  : DRIF, L=0.555
  DUE3a  : DRIF, L=0.315504
  DUE3b  : DRIF, L=1.2630495
  DUE5a  : DRIF, L=0.367
  DUE5b  : DRIF, L=0.514 -0.25
  DUE5c  : DRIF, L=0.846 -0.45
  DSB0b  : DRIF, L=0.163
  DSB0c  : DRIF, L=0.356 -0.1

  XCUE1  : HKIC,TYPE="class-4"
  XCD3   : HKIC,TYPE="class-5"

  YCUE2  : VKIC,TYPE="class-4"
  YCD3   : VKIC,TYPE="class-5"

  PCTCX  : ECOL !XTCAV photon collimator (9 mm aperture)
  PCPM0  : ECOL, L=LPCPM,XSIZE=0.0168,YSIZE=0.0103 !added Sep. 13, 2007 per J. Langton

  BPMUE1 : MONI, TYPE="10_um_res"
  BPMUE2 : MONI, TYPE="10_um_res"
  BPMUE3 : MONI, TYPE="10_um_res"

  IMUNDO : IMON !FEL-undulator output toroid (comparator with IMUNDIB)
  IMBCS3 : IMON !pre-dump magnet toroid with >42-mm ID stay-clear (comparator with IMBCS4)

  TRUE1  : INST !Be foil inserter (THz)
  SPTCX  : INST !XTCAV spoiler
  BTM0   : INST !Burn-Through-Monitor behind PCPM1L

  UEbeg   : MARK
  UEend   : MARK
  VVTCX   : MARK !XTCAV vacuum valve
  VV36    : MARK !treaty-point vacuum valve just downbeam of undulator
  VV37    : MARK !vac. valve in dumpline
  MTCX    : MARK !centerline between TCX01 and TCX02 (for matching)
  DLSTART : MARK !start of dumpline

  UNDEXIT : LINE=(UEbeg,DUE1a,RFBHX51,DUE1d,VV36,DUE1b,IMUNDO,DUE1c,&
                  DUE2a,XCUE1,DUE2b,YCUE2,DUE2c,&
                  QUE1,QUE1,DUE3a,BPMUE1,DUE3b,TRUE1,DUE3c,&
                  PCTCX,DPCVV,VVTCX,DVVTCX,TCX01,DTCX12,MTCX,DTCX12,&
                  TCX02,DTCXSP,SPTCX,DUE4,&
                  QUE2,QUE2,DUE5a,BPMUE2,DUE5b,BTM0,DUE5c,&
                  YCD3,DUE5d,XCD3,DUE5e,UEend,&
                  DLstart,PCPM0,DSB0b,IMBCS3,DSB0c,VV37,&
                  DSB0d,BPMUE3,DSB0e)

  HXRUND : LINE=(SEQ13BEG,HXR,BEGDMPH,UNDEXIT,SEQ13END)

  RETURN
