parameter[lattice] = g_2 parameter[particle] = antimuon parameter[geometry] = open parameter[p0c] = 3.094353005E9 parameter[absolute_time_tracking] = .true. bmad_com[aperture_limit_on] = .true. beginning[beta_a] = 63.916 ! these values give betax=1.0, betay=9.0 in inflector with Wuzeng inflector map beginning[beta_b] = 3.6027 beginning[alpha_a] = 19.567 beginning[alpha_b] = 3.1574 beginning[beta_a] = 6.3228E+01 ! these values give betax=4.0, betay=16.0 in inflector with Wuzeng inflector map beginning[beta_b] = 5.9635E+00 beginning[alpha_a] = 1.7864E+01 beginning[alpha_b] = 5.5922E+00 beginning[eta_x] = 14.262 !these give eta x = 4.0 in inflector beginning[etap_x] = -3.9241 !parameter[ran_seed] = 123 parameter[custom_attribute2] = "sbend::field_index" parameter[custom_attribute1] = "sbend::kick_width" parameter[custom_attribute1] = "sbend::kick_width" parameter[custom_attribute2] = "sbend::field_index" parameter[custom_attribute3] = "taylor::x_angle" !================================= ! MAGIC RADIUS !================================= radius = 7.112 !================================= ! OPTIONAL ELEMENTS !================================= ! to include the calorimeter markers in the lattice, uncomment the following line ! call, file = calorimeter_lattice. !==================================================================================================== ! INJECTION LINE ================================================================================== !==================================================================================================== ! Here are the places we'd like to compute scattering/energy-loss. MARK_CRYO_US: marker ! upstream inflector cryo window MARK_INFLECTOR_US: marker , tracking_method = custom ! upstream inflector end MARK_INFLECTOR_DS: marker , tracking_method = custom ! downstream inflector end ! MARK_INFLECTOR_US: drift, l=0.001 , tracking_method = custom ! upstream inflector end ! MARK_INFLECTOR_DS: drift, l=0.001 , tracking_method = custom ! downstream inflector end MARK_CRYO_DS: marker ! downstream inflector cryo window !********************************************* ! ELECTRIC QUADRUPOLES GEOMETRICAL PARAMETERS !********************************************* ! The following come from the E821 Quad NIM ! paper and the E821 Design Report, pp. 227. !================================== ! ELECTRODE SPANNING ANGLES !================================== dThetaQShort = 13.0*pi/180. dThetaQGap = 4.0*pi/180. dThetaQLong = 26.0*pi/180. !================================== ! ELECTRODE START ANGLES !================================== !ThetaQ1Start = 21.900*pi/180. ! design report (old) ThetaQ1Start = 22.075*pi/180. ! geometry -- no overlap with kickers ThetaQ2Start = ThetaQ1Start + pi/2. ThetaQ3Start = ThetaQ1Start + pi ThetaQ4Start = ThetaQ2Start + pi !================================== ! ELECTRODE END ANGLES !================================== ThetaQ1End = ThetaQ1Start + dThetaQShort + dThetaQGap + dThetaQLong ThetaQ2End = ThetaQ1End + pi/2. ThetaQ3End = ThetaQ1End + pi ThetaQ4End = ThetaQ2End + pi width2 = 0.045*0.045 !********************************************* ! KICKER GEOMETRICAL PARAMETERS !********************************************* kickerArrayCenterline = pi/2. !================================== ! KICKER SPANNING ANGLES !================================== ! dThetaK1 = 1.76e0/7.112 ! dThetaGapK12 = 0.10e0/7.112 ! dThetaK2 = 1.76e0/7.112 ! dThetaGapK23 = 0.10e0/7.112 ! dThetaK3 = 1.76e0/7.112 !================================== ! KICKER START ANGLES !================================== ! ThetaK1Start = kickerArrayCenterline - dThetaK2/2. - dThetaGapK12 - dThetaK1 ! ThetaK2Start = kickerArrayCenterline - dThetaK2/2. ! ThetaK3Start = kickerArrayCenterline + dThetaK2/2. + dThetaGapK23 !================================== ! KICKER END ANGLES !================================== ! ThetaK1End = kickerArrayCenterline - dThetaK2/2. - dThetaGapK12 ! ThetaK2End = kickerArrayCenterline + dThetaK2/2. ! ThetaK3End = kickerArrayCenterline + dThetaK2/2. + dThetaGapK23 + dThetaK3 !================================== ! KICKER SPANNING ANGLES !================================== dThetaK1 = 1.27/7.112 ! 1.76e0/7.112 dThetaGapK12 = (0.10 + 1.76-1.27)/7.112 dThetaK2 = 1.27/7.112 !1.76e0/7.112 dThetaGapK23 = (0.10+1.76-1.27)/7.112 dThetaK3 = 1.27/7.112 !1.76e0/7.112 !================================== ! KICKER START ANGLES !================================== ThetaK1Start = kickerArrayCenterline - dThetaK2/2. - dThetaGapK12 - dThetaK1 ThetaK2Start = kickerArrayCenterline - dThetaK2/2. ThetaK3Start = kickerArrayCenterline + dThetaK2/2. + dThetaGapK23 !================================== ! KICKER END ANGLES !================================== ThetaK1End = kickerArrayCenterline - dThetaK2/2. - dThetaGapK12 ThetaK2End = kickerArrayCenterline + dThetaK2/2. ThetaK3End = kickerArrayCenterline + dThetaK2/2. + dThetaGapK23 + dThetaK3 !********************************************* ! LATTICE ELEMENTS !********************************************* !FULLRING: sbend, rho = 7.112, field_calc = custom, tracking_method = runge_kutta, num_steps = 100 , mat6_calc_method = tracking, ds_step=0.01 !, angle = twopi ! FULLRING: sbend, rho = 7.112, field_calc = custom, tracking_method = runge_kutta, num_steps = 1000, mat6_calc_method = tracking, ds_step=0.001 !, angle = twopi FULLRING: sbend, rho = 7.112, tracking_method = runge_kutta, num_steps = 1000, mat6_calc_method = tracking, ds_step=0.001 !, field_calc=custom !, angle = twopi ! These elements are the "gaps" between the various quads/kickers AFREE: FULLRING, angle = ThetaQ1Start+0.001, aperture_type=elliptical ! Gap from injection point to first electric quadrupole BFREE: FULLRING, angle = ThetaK1Start - ThetaQ1End, aperture_type = elliptical CFREE: FULLRING, angle = ThetaQ2Start - ThetaK3End, aperture_type = elliptical DFREE: FULLRING, angle = ThetaQ3Start - ThetaQ2End, aperture_type = elliptical EFREE: FULLRING, angle = ThetaQ4Start - ThetaQ3End, aperture_type = elliptical FFREE: FULLRING, angle = twopi - ThetaQ4End-0.001 ! This element is the small gap between the "short" and "long" sections of each "single" electric quadrupole QFREE: FULLRING, angle = dThetaQGap ! The first electric quadrupole's field is unique, and so Q1 must be handled separately ! The "wall" represents the Q1 short and long outer quadrupole plates that some muons will scatter through !QUAD1_SHORT: FULLRING, angle = dThetaQShort, field_index=0.141, wall = {superimpose = .true., thickness = 0.0005, & ! section = {type = wall_start, s = 0., v(1) = {0.05,-0.0235}, v(2) = {0.05,0.0235}}, & ! section = {type = wall_end, s = dThetaQShort*radius, v(1) = {0.05,-0.0235}, v(2) = {0.05,0.0235}}} !Puad multipoles r0=0.045 r04 = r0*r0*r0*r0 r02=r0*r0 field_ind_0 = 0.185 field_ind = 0.18 field_scale = field_ind/field_ind_0 ! b1 = 20177.8 * 2/r02 ! b3 = 33.0 * 4 /r04 ! b5 = -45.9 * 6 /(r04*r02) ! b7 = -5.5 * 8 /(r04*r04) ! b9 = -391.3 * 10 /(r04*r04*r02) ! b11 = -6.5 * 12 /(r04*r04*r04) ! b13 = 52.3 * 14 /(r04*r04*r04*r02) ! a1= 0.1 * 2 /r02 ! a3 = 0.1 * 4 /r04 ! a5 = 0.1 * 6 /(r04*r02) ! a7 = 0.2 * 8 /(r04*r04) ! a9 = 0.1 * 10 /(r04*r04*r02) ! a13 = -0.1 * 14 /(r04*r04*r04*r02) b1 = 20177.8 * 2/r0 *field_scale b3 = 33.0 * 4 /r0 *field_scale b5 = -45.9 * 6 /(r0) *field_scale b7 = -5.5 * 8 /(r0) *field_scale b9 = -391.3 * 10 /(r0) *field_scale b11 = -6.5 * 12 /(r0) *field_scale b13 = 52.3 * 14 /(r0) *field_scale a1= 0.1 * 2 /r0 *field_scale a3 = 0.1 * 4 /r0 *field_scale a5 = 0.1 * 6 /(r0) *field_scale a7 = 0.2 * 8 /(r0) *field_scale a9 = 0.1 * 10 /(r0) *field_scale a13 = -0.1 * 14 /(r0) *field_scale QUAD1_LONG: FULLRING, angle = dThetaQLong, field_index=0.185, r0_elec=0.045, & b1_elec = b1, b3_elec = b3, b5_elec=b5, b7_elec=b7, b9_elec = b9, b11_elec=b11, b13_elec=b13, & a1_elec = a1, a3_elec = a3, a5_elec=a5, a7_elec=a7, a9_elec = a9, a13_elec=a13, & wall = {superimpose = .true., thickness = 0.0005, & section={type=wall_start, s = 0, v(1) = {0.07,-0.025}, v(2) = {0.07,0.025}}, & section={type=wall_end, s = dThetaQLong*radius, v(1) = {0.07,-0.025}, v(2) = {0.07,0.025}}} QUAD1_SHORT: FULLRING, angle = dThetaQShort, field_index=0.185, r0_elec=0.045, & b1_elec = b1, b3_elec = b3, b5_elec=b5, b7_elec=b7, b9_elec = b9, b11_elec=b11, b13_elec=b13, & a1_elec = a1, a3_elec = a3, a5_elec=a5, a7_elec=a7, a9_elec = a9, a13_elec=a13, & wall = { superimpose = .true., thickness = 0.0005, & section = { type = wall_start, s = 0., v(1)={0.05025,-0.0235}, v(2)={0.05025, 0.0235} }, & section = { type = wall_end, s = dThetaQShort*radius, v(1)={0.05025,-0.0235}, v(2)={0.05025, 0.0235} }} QUAD1: LINE = (QUAD1_SHORT, QFREE, QUAD1_LONG) ! The E-fields of Q2, Q3, and Q4 are the same, and so can be handled identically QUAD_SHORT: FULLRING, angle = dThetaQShort, field_index = 0.185, r0_elec=0.045, & b1_elec = b1, b3_elec = b3, b5_elec=b5, b7_elec=b7, b9_elec = b9, b11_elec=b11, b13_elec=b13, & a1_elec = a1, a3_elec = a3, a5_elec=a5, a7_elec=a7, a9_elec = a9, a13_elec=a13 QUAD_LONG: FULLRING, angle = dThetaQLong, field_index=0.185,r0_elec=0.045, & b1_elec = b1, b3_elec = b3, b5_elec=b5, b7_elec=b7, b9_elec = b9, b11_elec=b11, b13_elec=b13, & a1_elec = a1, a3_elec = a3, a5_elec=a5, a7_elec=a7, a9_elec = a9, a13_elec=a13 QUAD: LINE = (QUAD_SHORT, QFREE, QUAD_LONG) collimator: ecollimator, l=0.00001, x_limit=0.045, y_limit=0.045 ! Kickers dKICKER1: FULLRING, angle = dThetaK1, descrip = "KICKER_E989_NoRolledEdges.dat", & kick_width = 100.e-9 GAPK12: FULLRING, angle = dThetaGapK12 dKICKER2A: FULLRING, angle = dThetaK2/2, descrip = "KICKER_E989_NoRolledEdges.dat", kick_width = 100.e-9 MARK_CENTERLINE: FULLRING, angle = 0 dKICKER2B: FULLRING, angle = dThetaK2/2, descrip = "KICKER_E989_NoRolledEdges.dat", kick_width = 100.e-9 GAPK23: FULLRING, angle = dThetaGapK23 dKICKER3: FULLRING, angle = dThetaK3,descrip = "KICKER_E989_NoRolledEdges.dat", kick_width = 100.e-9 KICKERS: LINE = (dKICKER1, GAPK12, dKICKER2A, MARK_CENTERLINE, dKICKER2B, GAPK23, dKICKER3) !********************************************* ! APERTURE LIMITS !********************************************* ! Elements just downstream of the injection point should NOT have storage-region aperture limits! afree[x_limit] := 10.045 afree[y_limit] := 10.045 QUAD1_SHORT[x_limit] := 0.102 QUAD1_SHORT[y_limit] := 0.05 QUAD1_SHORT[aperture_at] = continuous QUAD1_LONG[x_limit] := 0.102 QUAD1_LONG[y_limit] := 0.050 QUAD1_LONG[aperture_at] = continuous QUAD_SHORT[x_limit] := 0.05 QUAD_SHORT[y_limit] := 0.05 QUAD_SHORT[aperture_at] = continuous QUAD_LONG[x_limit] := 0.05 QUAD_LONG[y_limit] := 0.050 QUAD_LONG[aperture_at] = continuous dKICKER1[x_limit] := 0.05 !0.102 ! vac chmbr. better? dKICKER1[y_limit] := 0.056 dKICKER1[aperture_at] = continuous dKICKER2A[x_limit] := 0.102 dKICKER2A[y_limit] := 0.056 dKICKER2A[aperture_at] = continuous dKICKER2B[x_limit] := 0.102 dKICKER2B[y_limit] := 0.056 dKICKER2B[aperture_at] = continuous dKICKER3[x_limit] := 0.102 dKICKER3[y_limit] := 0.056 dKICKER3[aperture_at] = continuous freelimit=0.045 !bfree[x_limit] := freelimit !bfree[y_limit] := freelimit cfree[x_limit] := freelimit cfree[y_limit] := freelimit dfree[x_limit] := freelimit dfree[y_limit] := freelimit efree[x_limit] := freelimit efree[y_limit] := freelimit ffree[x_limit] := freelimit ffree[y_limit] := freelimit QUAD_SHORT[x_limit] := freelimit QUAD_LONG[y_limit] := freelimit inflector_width = 0.009 inf_x_ap = inflector_width inf_y_ap = 0.028 ! !MARK_CRYO_US[x1_limit] := inf_x_ap-(inflector_width-0.009) + 0.00635*1.7 !adds an extrac few mm to account for all possible inflector tilts !MARK_CRYO_US[x2_limit] := inf_x_ap+(inflector_width-0.009) + 0.00635*1.7 !adds an extrac few mm to account for all possible inflector tilts !MARK_CRYO_US[y_limit] := inf_y_ap MARK_INFLECTOR_US[x1_limit]:=inf_x_ap-(inflector_width-0.009) + 0.00635*1.7 !adds an extrac few mm to account for all possible inflector tilts MARK_INFLECTOR_US[x2_limit]:=inf_x_ap+(inflector_width-0.009) + 0.00635*1.7 !adds an extrac few mm to account for all possible inflector tilts MARK_INFLECTOR_US[y_limit]:=inf_y_ap MARK_INFLECTOR_DS[x1_limit]:=inf_x_ap+(inflector_width-0.009) !-inf_x_ap-(inflector_width-0.009) MARK_INFLECTOR_DS[x2_limit]:=inf_x_ap+(inflector_width-0.009) MARK_INFLECTOR_DS[y_limit]:=inf_y_ap !call, file = x_injection.lat dr: drift, l=0.00001 backleg_start: marker backhole_x_ap = 0.12 backhole_y_ap = 0.12 backleg_start[x_limit]:= backhole_x_ap backleg_start[y_limit]:= backhole_y_ap backleg: em_field, descrip = 'injec_fld.dat', field_calc = custom, l=2.480114, & tracking_method = runge_kutta, num_steps = 100 , mat6_calc_method = tracking, ds_step=0.0001 cryo_us: em_field, descrip = 'injec_fld.dat', field_calc = custom, l=0.119886, & tracking_method = runge_kutta, num_steps = 100 , mat6_calc_method = tracking, ds_step=0.0001 inf: em_field, descrip = 'injec_fld.dat', field_calc = custom, l=1.7000, & tracking_method = runge_kutta, num_steps = 1000 , mat6_calc_method = tracking, ds_step=0.001 infa: em_field, descrip = 'injec_fld.dat', field_calc = custom, l=1.5000, & tracking_method = runge_kutta, num_steps = 1000 , mat6_calc_method = tracking, ds_step=0.001 infb: em_field, descrip = 'injec_fld.dat', field_calc = custom, l=0.200, & tracking_method = runge_kutta, num_steps = 1000 , mat6_calc_method = tracking, ds_step=0.001 inf_exit: em_field, descrip = 'injec_fld.dat', field_calc = custom, l=0.095, & tracking_method = runge_kutta, num_steps = 1000 , mat6_calc_method = tracking, ds_step=0.001 inject: line=(backleg_start,backleg, mark_cryo_us, cryo_us, mark_inflector_us, infa,infb,mark_inflector_ds) !********************************************* ! g-2 STORAGE RING !********************************************* !RING: LINE = (afree,collimator, QUAD1, bfree,collimator, KICKERS, cfree,collimator, QUAD, dfree,collimator, QUAD, efree, QUAD, ffree) RING: LINE = (afree, QUAD1, bfree, KICKERS, cfree, QUAD, dfree, QUAD, efree, QUAD, ffree) inflector: drift, l=0.017 !l=1.7 !inj: line =(inflector, inj_to_ring, ring_br) !inj: line =(injinf, inj_to_ring, ring_br) inj: line = (inject, inj_to_ring, ring_br) inj_to_ring: patch, x_offset=-0.077 ring_br: fork, to_line = ring use, RING !use, inj