def init(self, theta1, clen, lambda0, center, angle, extras):
		grating_offset=-0.075
		exit_height=-1.0*inch
		exit_z=-0.275
		my=blue_compressor
		basebeam=beam((0,0,-1.0), qtens(lambda0, w=0.001, r=Infinity))
		optics=self.setup_reflectors_blue(basebeam, theta1, clen, grating_offset, lam0=lambda0, inside_retro_err=0.0)
					
		cs=Numeric.array((0, exit_height, -0.44)) #entrance to compressor, before rotation
	
		optics[my.IPERI1]=reflector("input peri bot", angle=0, center=cs, width=.025)
		optics[my.IPERI2]=reflector("input peri top", angle=0, center=cs+(0.0,-exit_height, 0), width=.025)
	
		optics[my.EXP1]=lens("expander diverge", f=-.15).place_between(cs+(-.1,0,0), optics[my.IPERI1], -0.09)
		optics[my.EXP2]=lens("expander re-coll", f=0.3).place_between(optics[my.IPERI2], (0,0,0), 0.037)	
		#optics[my.EXP2]=lens("expander re-coll", f=0.3).place_between(optics[my.IPERI2], (0,0,0), 0.0357)	
	
		optics[my.IPERI1].set_direction(optics[my.EXP1], optics[my.IPERI2])
		optics[my.IPERI2].set_direction(optics[my.IPERI1], optics[my.EXP2])
	
		optics[my.OPERI1]=reflector("output peri top", angle=0, center=(0,my.y_offset,exit_z), width=.025)
		optics[my.OPERI2]=reflector("output peri bot", angle=0, center=(0,exit_height,exit_z), width=.025)

		optics[my.TM1]=reflector("output turn 1", angle=90, center=(0.30, exit_height,exit_z), width=.025)
	
		optics[my.OPERI1].set_direction((0,my.y_offset,0), optics[my.OPERI2])
		optics[my.OPERI2].set_direction(optics[my.OPERI1], optics[my.TM1])
				
		comp_order=(my.EXP1, my.IPERI1, my.IPERI2, my.EXP2, my.GRATE, 
				my.IR2, my.IR1, my.GRATE, my.VR1, my.VR2, my.GRATE, my.IR1, my.IR2, 
				my.GRATE, my.OPERI1, my.OPERI2, my.TM1)
					
		composite_optic.init(self, "compressor", optics, comp_order, None, center=center, angle=angle, extras=extras )		
	def __init__(self, center, from_optic, **extras):
		my=quadrupler
		optics={}
		ent=optics[my.ENTRANCE]=mir("quadrupler entrance")
		exit=optics[my.EXIT]=null_optic("quadrupler exit", (0,0,-1.0))
		l1=optics[my.L1]=lens("quadrupler telescope 1", f=+0.300)
		l2=optics[my.L2]=lens("quadrupler telescope 2", f=-0.150).place_between(ent, exit, 0.111).tilt_off_axis(4.0)
		#print l2.strength
		green=optics[my.DOUBLE]=null_optic("green crystal").place_between(l2, exit, 0.1)
		optics[my.QUADRUPLE]=null_optic("UV crystal").place_between(green, exit, 0.1)

		order=(my.L1, my.ENTRANCE, my.L2, my.DOUBLE, my.QUADRUPLE, my.EXIT)		
		composite_optic.init(self, "quadrupler", optics, order, (0,0,0), center, 0, extras=extras )
		l1.place_between(from_optic, ent, -0.04)
	def __init__(self, **extras):
		inch=0.0254
		entrance_y=5.0*inch
		y0=2.5*inch #height of main line off table)
		my=blue_through_ylf
		optics={}
		
		#first, list all mirrors, and point them at each other
		optics[my.UVM1]=mir("UVM1", (13*inch, entrance_y, 7.5*inch))
		optics[my.UVM2]=mir("UVM2", (7.5*inch, entrance_y, 7.5*inch))
		optics[my.PS1u]=mir("Blue Peri 1 upper", (8*inch, entrance_y, 37*inch))
		optics[my.PS1d]=mir("Blue Peri 1 lower", (8*inch, y0, 37*inch))
		optics[my.UVM3]=mir("UVM3", (36*inch, y0, 38*inch))
		optics[my.UVM4]=mir("UVM4", (36*inch, y0, 137.5*inch))
		optics[my.UVM5]=mir("UVM5", (43.5*inch, y0, 49.5*inch))
		optics[my.UVM6]=mir("UVM6", (46.5*inch, y0, 137.5*inch))
		optics[my.UVM7]=mir("UVM7", (38*inch, y0, 38*inch))
		optics[my.UVM8]=mir("UVM8", (41.5*inch, y0, 136*inch))
		optics[my.UVM9]=mir("UVM9", (53*inch, y0, 136*inch))
		optics[my.UVM10]=mir("UVM10", (53*inch, y0, 41*inch))
		optics[my.UVM11]=mir("UVM11", (48*inch, y0, 41*inch))
		optics[my.UVM12]=mir("YLF retro", (48*inch, y0,80.5*inch))
		optics[my.YLF_SPLIT]=mir("YLF exit splitter", (48*inch, y0, 47.8*inch))
		
		optics[my.UVL1]=lens("UVL1", f=+0.75).place_between(optics[my.UVM3], optics[my.UVM4], 4.0*inch)
		optics[my.UVL2]=lens("UVL2", f=+1.00).place_between(optics[my.UVL1], optics[my.UVM4], 83*inch-0.0*inch)
				
		optics[my.DEMAG1]=lens("UVL3", f=+0.75).place_between(optics[my.UVM9], optics[my.UVM10], 23.0*inch)
		optics[my.DEMAG2]=lens("UVL4", f=+1.00).place_between(optics[my.DEMAG1], optics[my.UVM10], 1.7+5.0*inch)

		optics[my.SERR]=null_optic("Serr. Aperture", width=1.0*inch, thickness=0.1*inch).place_between(optics[my.DEMAG1], optics[my.DEMAG2], 3*inch)
		optics[my.FILTER]=null_optic("Filter Aperture", width=1.0*inch, thickness=0.1*inch).place_between(optics[my.DEMAG1], optics[my.DEMAG2], 0.75)
		
		looks=[my.UVM1, my.UVM2, my.PS1u, my.PS1d, my.UVM3, my.UVM4, my.UVM5, my.UVM6, my.UVM7,
			my.UVM8, my.UVM9, my.UVM10, my.UVM11, my.UVM12, my.YLF_SPLIT]
		#align all mirrors
		for i in range(1, len(looks)-1):
			optics[looks[i]].set_direction(optics[looks[i-1]], optics[looks[i+1]])

		order=[my.UVM1, my.UVM2, my.PS1u, my.PS1d, my.UVM3, my.UVL1, my.UVL2, my.UVM4, my.UVM5, my.UVM6, my.UVM7,
			my.UVM8, my.UVM9, my.DEMAG1, my.SERR, my.FILTER, my.DEMAG2, my.UVM10, my.UVM11, my.UVM12, my.YLF_SPLIT]
		
		#specify center and reference as (0,0,0) to make our coordinates absolute
		composite_optic.init(self, "blue line", optics, order, (0,0,0), (0,0,0), 0, extras=extras )
	def init(self, theta1, clen, lambda0, center, angle, extras):
		my=ir_compressor
		input_height=18*inch
		output_height=12*inch
		center_height=(input_height+output_height)/2.0
		
		basebeam=beam((0,input_height,-1.0), qtens(lambda0, w=0.005, r=Infinity))		
		optics={}
					
		optics[my.INPUT]=m1=reflector("input mirror", center=(0, input_height, 0), width=8*inch, angle=-45)
		
		optics[my.G1]=g1=grating("g1", angle=theta1+90, center=(52*inch,center_height, 0), 
				pitch=1740e3, order=1, width=16*inch, thickness=2.0*inch)
		mybeam=basebeam.clone()
		m1.transport_to_here(mybeam)
		m1.transform(mybeam)	
		g1.transport_to_here(mybeam)
		g1.transform(mybeam)
		mybeam.free_drift(clen) #this is where grating 2 should be
		optics[my.G2]=g2=grating("g2", angle=theta1-90, center=mybeam.x0+(0,0,1e-8), 
				pitch=1740e3, order=1, width=16*inch, thickness=2.0*inch)
		
		optics[my.VR1]=reflector("retro", center=(40*inch, center_height, g2.center[2]),  angle=90.0, width=8*inch, thickness=1.0*inch)
		
		out=optics[my.OUTPUT]=reflector("output mirror", center=(8*inch, output_height, 0.0), 
				width=8.0*inch, thickness=1.0*inch)
		focus=optics[my.FOCUS]=lens("output focus", center=out.center+(35*inch, 0, 7*inch), 
				angle=90-math.atan(0.2)/deg, f=2.0, width=8.0*inch, 
				height=8.0*inch, thickness=1.0*inch).tilt_off_axis(0)
		out.set_direction(g1.center-(0, center_height-output_height, 0), focus)
		
		comp_order=(my.INPUT, my.G1, my.G2, my.VR1, my.G2, my.G1, my.OUTPUT, my.FOCUS)
		
		composite_optic.init(self, "ir compressor", optics, comp_order, None, center=center, angle=0, extras=extras )		

		#prepare to handle to downslope in the beam through the compressor while we are still
		#not rotated to the funny beam axis
		m1label=self.mark_label(my.INPUT)
		g1label=self.mark_label(my.G1)
		m2label=self.mark_label(my.OUTPUT)
		ir_trace=trace_path(self, basebeam.clone())
		path_len=(ir_trace[(m2label,0)].total_drift-ir_trace[(m1label,0)].total_drift)
		slope=(output_height-input_height)/path_len
		
		#distance from entrance to first g1 hit
		g1_first_distance=(ir_trace[(g1label,0)].total_drift-ir_trace[(m1label,0)].total_drift) 
		#distance from entrance to second g1 hit
		g1_second_distance=(ir_trace[(g1label,1)].total_drift-ir_trace[(m1label,0)].total_drift) 
		
		#now, rotate us to the real beam direction
		self.update_coordinates(self.center, self.center, general_optics.eulermat(angle, 0, 0))	
		
		#and set up the aiming points
		self.g1target1=g1.center+(0, (input_height-center_height)+g1_first_distance*slope, 0)		
		self.g1target2=g1.center+(0, (input_height-center_height)+g1_second_distance*slope, 0)	
		out.set_direction(self.g1target2, focus)
Esempio n. 5
0
    def __init__(self, center, from_optic, **extras):
        my = quadrupler
        optics = {}
        ent = optics[my.ENTRANCE] = mir("quadrupler entrance")
        exit = optics[my.EXIT] = null_optic("quadrupler exit", (0, 0, -1.0))
        l1 = optics[my.L1] = lens("quadrupler telescope 1", f=+0.300)
        l2 = optics[my.L2] = lens("quadrupler telescope 2",
                                  f=-0.150).place_between(
                                      ent, exit, 0.111).tilt_off_axis(4.0)
        # print l2.strength
        green = optics[my.DOUBLE] = null_optic("green crystal").place_between(
            l2, exit, 0.1)
        optics[my.QUADRUPLE] = null_optic("UV crystal").place_between(
            green, exit, 0.1)

        order = (my.L1, my.ENTRANCE, my.L2, my.DOUBLE, my.QUADRUPLE, my.EXIT)
        composite_optic.init(self,
                             "quadrupler",
                             optics,
                             order, (0, 0, 0),
                             center,
                             0,
                             extras=extras)
        l1.place_between(from_optic, ent, -0.04)
Esempio n. 6
0
    def init(self, theta1, clen, lambda0, center, angle, extras):
        grating_offset = -0.075
        exit_height = -1.0 * inch
        exit_z = -0.275
        my = blue_compressor
        basebeam = beam((0, 0, -1.0), qtens(lambda0, w=0.001, r=Infinity))
        optics = self.setup_reflectors_blue(basebeam,
                                            theta1,
                                            clen,
                                            grating_offset,
                                            lam0=lambda0,
                                            inside_retro_err=0.0)

        # entrance to compressor, before rotation
        cs = Numeric.array((0, exit_height, -0.44))

        optics[my.IPERI1] = reflector("input peri bot",
                                      angle=0,
                                      center=cs,
                                      width=.025)
        optics[my.IPERI2] = reflector("input peri top",
                                      angle=0,
                                      center=cs + (0.0, -exit_height, 0),
                                      width=.025)

        optics[my.EXP1] = lens("expander diverge",
                               f=-.15).place_between(cs + (-.1, 0, 0),
                                                     optics[my.IPERI1], -0.09)
        optics[my.EXP2] = lens("expander re-coll",
                               f=0.3).place_between(optics[my.IPERI2],
                                                    (0, 0, 0), 0.037)
        #optics[my.EXP2]=lens("expander re-coll", f=0.3).place_between(optics[my.IPERI2], (0,0,0), 0.0357)

        optics[my.IPERI1].set_direction(optics[my.EXP1], optics[my.IPERI2])
        optics[my.IPERI2].set_direction(optics[my.IPERI1], optics[my.EXP2])

        optics[my.OPERI1] = reflector("output peri top",
                                      angle=0,
                                      center=(0, my.y_offset, exit_z),
                                      width=.025)
        optics[my.OPERI2] = reflector("output peri bot",
                                      angle=0,
                                      center=(0, exit_height, exit_z),
                                      width=.025)

        optics[my.TM1] = reflector("output turn 1",
                                   angle=90,
                                   center=(0.30, exit_height, exit_z),
                                   width=.025)

        optics[my.OPERI1].set_direction((0, my.y_offset, 0), optics[my.OPERI2])
        optics[my.OPERI2].set_direction(optics[my.OPERI1], optics[my.TM1])

        comp_order = (my.EXP1, my.IPERI1, my.IPERI2, my.EXP2, my.GRATE, my.IR2,
                      my.IR1, my.GRATE, my.VR1, my.VR2, my.GRATE, my.IR1,
                      my.IR2, my.GRATE, my.OPERI1, my.OPERI2, my.TM1)

        composite_optic.init(self,
                             "compressor",
                             optics,
                             comp_order,
                             None,
                             center=center,
                             angle=angle,
                             extras=extras)
Esempio n. 7
0
    def init(self, theta1, clen, lambda0, center, angle, extras):
        my = ir_compressor
        input_height = 18 * inch
        output_height = 12 * inch
        center_height = (input_height + output_height) / 2.0

        basebeam = beam((0, input_height, -1.0),
                        qtens(lambda0, w=0.005, r=Infinity))
        optics = {}

        optics[my.INPUT] = m1 = reflector("input mirror",
                                          center=(0, input_height, 0),
                                          width=8 * inch,
                                          angle=-45)

        optics[my.G1] = g1 = grating("g1",
                                     angle=theta1 + 90,
                                     center=(52 * inch, center_height, 0),
                                     pitch=1740e3,
                                     order=1,
                                     width=16 * inch,
                                     thickness=2.0 * inch)
        mybeam = basebeam.clone()
        m1.transport_to_here(mybeam)
        m1.transform(mybeam)
        g1.transport_to_here(mybeam)
        g1.transform(mybeam)
        mybeam.free_drift(clen)  # this is where grating 2 should be
        optics[my.G2] = g2 = grating("g2",
                                     angle=theta1 - 90,
                                     center=mybeam.x0 + (0, 0, 1e-8),
                                     pitch=1740e3,
                                     order=1,
                                     width=16 * inch,
                                     thickness=2.0 * inch)

        optics[my.VR1] = reflector("retro",
                                   center=(40 * inch, center_height,
                                           g2.center[2]),
                                   angle=90.0,
                                   width=8 * inch,
                                   thickness=1.0 * inch)

        out = optics[my.OUTPUT] = reflector("output mirror",
                                            center=(8 * inch, output_height,
                                                    0.0),
                                            width=8.0 * inch,
                                            thickness=1.0 * inch)
        focus = optics[my.FOCUS] = lens("output focus",
                                        center=out.center +
                                        (35 * inch, 0, 7 * inch),
                                        angle=90 - math.atan(0.2) / deg,
                                        f=2.0,
                                        width=8.0 * inch,
                                        height=8.0 * inch,
                                        thickness=1.0 * inch).tilt_off_axis(0)
        out.set_direction(g1.center - (0, center_height - output_height, 0),
                          focus)

        comp_order = (my.INPUT, my.G1, my.G2, my.VR1, my.G2, my.G1, my.OUTPUT,
                      my.FOCUS)

        composite_optic.init(self,
                             "ir compressor",
                             optics,
                             comp_order,
                             None,
                             center=center,
                             angle=0,
                             extras=extras)

        # prepare to handle to downslope in the beam through the compressor while we are still
        # not rotated to the funny beam axis
        m1label = self.mark_label(my.INPUT)
        g1label = self.mark_label(my.G1)
        m2label = self.mark_label(my.OUTPUT)
        ir_trace = trace_path(self, basebeam.clone())
        path_len = (ir_trace[(m2label, 0)].total_drift -
                    ir_trace[(m1label, 0)].total_drift)
        slope = (output_height - input_height) / path_len

        # distance from entrance to first g1 hit
        g1_first_distance = (ir_trace[(g1label, 0)].total_drift -
                             ir_trace[(m1label, 0)].total_drift)
        # distance from entrance to second g1 hit
        g1_second_distance = (ir_trace[(g1label, 1)].total_drift -
                              ir_trace[(m1label, 0)].total_drift)

        # now, rotate us to the real beam direction
        self.update_coordinates(self.center, self.center,
                                general_optics.eulermat(angle, 0, 0))

        # and set up the aiming points
        self.g1target1 = g1.center + (0, (input_height - center_height) +
                                      g1_first_distance * slope, 0)
        self.g1target2 = g1.center + (0, (input_height - center_height) +
                                      g1_second_distance * slope, 0)
        out.set_direction(self.g1target2, focus)
Esempio n. 8
0
    def __init__(self, **extras):
        inch = 0.0254
        entrance_y = 5.0 * inch
        exit_y = 13.5 * inch
        my = ir_line
        optics = {}

        # first, list all mirrors, and point them at each other
        optics[my.M1] = mir("M1", (2 * inch, entrance_y, 10 * inch))
        optics[my.M2] = mir("M2", (4 * inch, entrance_y, 10 * inch))
        optics[my.TrM1] = mir("TrM1", (4 * inch, entrance_y, 96 * inch))
        optics[my.TrM2] = mir("TrM2", (6 * inch, entrance_y, 96 * inch))
        optics[my.TrM3] = mir("TrM3", (6 * inch, entrance_y, 82.5 * inch))
        optics[my.TrM4] = mir("TrM4", (2 * inch, entrance_y, 82.5 * inch))
        optics[my.M3] = mir("M3", (4 * inch, entrance_y, 135 * inch))
        optics[my.M4] = mir("M4", (12 * inch, entrance_y, 135 * inch))
        optics[my.M5] = mir("M5", (13 * inch, entrance_y, 105 * inch))
        optics[my.M6] = mir("M6", (14 * inch, entrance_y, 105 * inch))
        optics[my.M7] = mir("M7", (16.5 * inch, entrance_y, 3 * inch))
        optics[my.M8] = mir("M8", (24 * inch, entrance_y, 3 * inch))
        optics[my.M9] = mir("M9", (23 * inch, entrance_y, 135 * inch))
        optics[my.M10] = mir("M10", (33 * inch, entrance_y, 134.5 * inch))
        optics[my.M11] = mir("M11", (33 * inch, entrance_y, -6 * inch))
        optics[my.BP4] = PL_brewster_filter("BP4",
                                            (33 * inch, entrance_y, 27 * inch),
                                            reversed=1)
        optics[my.M12] = mir("M12", (20 * inch, entrance_y, 33 * inch))
        optics[my.M13] = mir("M13", (20 * inch, entrance_y, 12 * inch))
        optics[my.M14] = mir("M14", (8.5 * inch, entrance_y, 11.5 * inch))
        optics[my.M15] = mir("M15", (8.5 * inch, exit_y, 11.5 * inch))

        optics[my.EXIT] = sys_exit = null_optic(
            "exit", (10.0 * inch, exit_y, 142.0 * inch))

        optics[my.L1] = lens("L1",
                             f=+0.400).place_between(optics[my.M2],
                                                     optics[my.TrM1],
                                                     12.0 * inch)
        optics[my.L2] = lens("L2",
                             f=+0.800).place_between(optics[my.L1],
                                                     optics[my.TrM1], 1.30)
        optics[my.L3] = lens("L3",
                             f=+0.750).place_between(optics[my.M6],
                                                     optics[my.M7], 10 * inch)
        optics[my.L4] = lens("L4",
                             f=+1.500).place_between(optics[my.L3],
                                                     optics[my.M7], 2.25)
        optics[my.L5] = lens("L5",
                             f=+0.750).place_between(optics[my.M10],
                                                     optics[my.M11], 5 * inch)
        optics[my.L6] = lens("L6",
                             f=+1.500).place_between(optics[my.L5],
                                                     optics[my.M11],
                                                     95.5 * inch)
        optics[my.L7] = lens("L7",
                             f=+0.750).place_between(optics[my.M15], sys_exit,
                                                     4.5 * inch)
        optics[my.L8] = lens("L8",
                             f=+2.500,
                             width=6 * inch,
                             thickness=0.25 * inch).place_between(
                                 optics[my.M15], sys_exit,
                                 -1 * inch).tilt_off_axis((0, 45, 0))

        optics[my.G9a] = laser_head("9mm-1", width=2.0 * inch, thickness=6.0 * inch, rodsize=0.009).\
            place_between(optics[my.M4], optics[my.M5], 9 * inch)
        optics[my.G9b] = laser_head("9mm-2", width=2.0 * inch, thickness=6.0 * inch, rodsize=0.009).\
            place_between(optics[my.M4], optics[my.M5], 23 * inch)

        optics[my.G25a] = laser_head("25mm-1", width=6.0 * inch, thickness=12.0 * inch, rodsize=0.025).\
            place_between(optics[my.M8], optics[my.M9], 74 * inch)
        optics[my.G25b] = laser_head("25mm-2", width=6.0 * inch, thickness=12.0 * inch, rodsize=0.025).\
            place_between(optics[my.M8], optics[my.M9], 94 * inch)

        optics[my.G50] = laser_head("50mm", width=9.0 * inch, thickness=15.0 * inch, rodsize=0.050).\
            place_between(optics[my.M10], optics[my.M11], -19 * inch)

        optics[my.SERR1] = serrated_aperture("serrated aperture", diameter=0.003).\
            place_between(optics[my.M2], optics[my.TrM1], 10 * inch)
        optics[my.SF1] = plain_aperture("spatial filter 1", diameter=0.001).\
            place_between(optics[my.M2], optics[my.TrM1], 35 * inch)

        optics[my.QR1] = halfwave_plate("QR1",
                                        width=1 * inch,
                                        thickness=0.5 * inch).place_between(
                                            optics[my.G9a], optics[my.G9b],
                                            8 * inch).rotate_axis(22.5)
        optics[my.FR12] = faraday_rotator("FR12", width=0.5 * inch, thickness=6 * inch, rotation=45).\
            place_between(optics[my.M6], optics[my.M7], 5 * inch)
        optics[my.VSF1] = vacuum_spatial_filter("VSF1", thickness=24 * inch, width=2 * inch).\
            place_between(optics[my.L3], optics[my.L4], 0.750)

        optics[my.QR2] = halfwave_plate("QR2",
                                        width=1 * inch,
                                        thickness=0.5 * inch).place_between(
                                            optics[my.G25a], optics[my.G25b],
                                            8 * inch).rotate_axis(22.5)

        optics[my.BP2] = PL_brewster_filter("BP2", transmit=1).place_between(
            optics[my.G25b], optics[my.M9], 13 * inch).rotate_axis(90)
        optics[my.QR3] = halfwave_plate("QR3",
                                        width=1 * inch,
                                        thickness=0.5 * inch).place_between(
                                            optics[my.G25b], optics[my.M9],
                                            19 * inch).rotate_axis(22.5)
        optics[my.FR25] = faraday_rotator("FR25", width=1.0 * inch, thickness=6.0 * inch, rotation=45).\
            place_between(optics[my.G25b], optics[my.M9], 23 * inch)
        optics[my.BP3] = PL_brewster_filter("BP3", transmit=1).\
            place_between(optics[my.G25b], optics[my.M9], 30 * inch).rotate_axis(0)

        looks = [
            my.M1, my.M2, my.TrM1, my.TrM2, my.TrM3, my.TrM4, my.M3, my.M4,
            my.M5, my.M6, my.M7, my.M8, my.M9, my.M10, my.M11, my.BP4, my.M12,
            my.M13, my.M14, my.M15, my.EXIT
        ]
        # align all mirrors
        for i in range(1, len(looks) - 1):
            optics[looks[i]].set_direction(optics[looks[i - 1]],
                                           optics[looks[i + 1]])

        order = [
            my.M1, my.M2, my.SERR1, my.L1, my.SF1, my.L2, my.TrM1, my.TrM2,
            my.TrM3, my.TrM4, my.M3, my.M4, my.G9a, my.QR1, my.G9b, my.M5,
            my.M6, my.FR12, my.L3, my.VSF1, my.L4, my.M7, my.M8, my.G25a,
            my.QR2, my.G25b, my.BP2, my.QR3, my.FR25, my.BP3, my.M9, my.M10,
            my.L5, my.L6, my.G50, my.M11, my.BP4, my.M12, my.M13, my.M14,
            my.M15, my.L7, my.L8
        ]

        # specify center and reference as (0,0,0) to make our coordinates absolute
        composite_optic.init(self,
                             "IR line",
                             optics,
                             order, (0, 0, 0), (0, 0, 0),
                             0,
                             extras=extras)
Esempio n. 9
0
    def __init__(self, **extras):
        inch = 0.0254
        entrance_y = 5.0 * inch
        y0 = 2.5 * inch  # height of main line off table)
        my = blue_through_ylf
        optics = {}

        # first, list all mirrors, and point them at each other
        optics[my.UVM1] = mir("UVM1", (13 * inch, entrance_y, 7.5 * inch))
        optics[my.UVM2] = mir("UVM2", (7.5 * inch, entrance_y, 7.5 * inch))
        optics[my.PS1u] = mir("Blue Peri 1 upper",
                              (8 * inch, entrance_y, 37 * inch))
        optics[my.PS1d] = mir("Blue Peri 1 lower", (8 * inch, y0, 37 * inch))
        optics[my.UVM3] = mir("UVM3", (36 * inch, y0, 38 * inch))
        optics[my.UVM4] = mir("UVM4", (36 * inch, y0, 137.5 * inch))
        optics[my.UVM5] = mir("UVM5", (43.5 * inch, y0, 49.5 * inch))
        optics[my.UVM6] = mir("UVM6", (46.5 * inch, y0, 137.5 * inch))
        optics[my.UVM7] = mir("UVM7", (38 * inch, y0, 38 * inch))
        optics[my.UVM8] = mir("UVM8", (41.5 * inch, y0, 136 * inch))
        optics[my.UVM9] = mir("UVM9", (53 * inch, y0, 136 * inch))
        optics[my.UVM10] = mir("UVM10", (53 * inch, y0, 41 * inch))
        optics[my.UVM11] = mir("UVM11", (48 * inch, y0, 41 * inch))
        optics[my.UVM12] = mir("YLF retro", (48 * inch, y0, 80.5 * inch))
        optics[my.YLF_SPLIT] = mir("YLF exit splitter",
                                   (48 * inch, y0, 47.8 * inch))

        optics[my.UVL1] = lens("UVL1",
                               f=+0.75).place_between(optics[my.UVM3],
                                                      optics[my.UVM4],
                                                      4.0 * inch)
        optics[my.UVL2] = lens("UVL2",
                               f=+1.00).place_between(optics[my.UVL1],
                                                      optics[my.UVM4],
                                                      83 * inch - 0.0 * inch)

        optics[my.DEMAG1] = lens("UVL3", f=+0.75).place_between(
            optics[my.UVM9], optics[my.UVM10], 23.0 * inch)
        optics[my.DEMAG2] = lens("UVL4", f=+1.00).place_between(
            optics[my.DEMAG1], optics[my.UVM10], 1.7 + 5.0 * inch)

        optics[my.SERR] = null_optic("Serr. Aperture",
                                     width=1.0 * inch,
                                     thickness=0.1 * inch).place_between(
                                         optics[my.DEMAG1], optics[my.DEMAG2],
                                         3 * inch)
        optics[my.FILTER] = null_optic("Filter Aperture",
                                       width=1.0 * inch,
                                       thickness=0.1 * inch).place_between(
                                           optics[my.DEMAG1],
                                           optics[my.DEMAG2], 0.75)

        looks = [
            my.UVM1, my.UVM2, my.PS1u, my.PS1d, my.UVM3, my.UVM4, my.UVM5,
            my.UVM6, my.UVM7, my.UVM8, my.UVM9, my.UVM10, my.UVM11, my.UVM12,
            my.YLF_SPLIT
        ]
        # align all mirrors
        for i in range(1, len(looks) - 1):
            optics[looks[i]].set_direction(optics[looks[i - 1]],
                                           optics[looks[i + 1]])

        order = [
            my.UVM1, my.UVM2, my.PS1u, my.PS1d, my.UVM3, my.UVL1, my.UVL2,
            my.UVM4, my.UVM5, my.UVM6, my.UVM7, my.UVM8, my.UVM9, my.DEMAG1,
            my.SERR, my.FILTER, my.DEMAG2, my.UVM10, my.UVM11, my.UVM12,
            my.YLF_SPLIT
        ]

        # specify center and reference as (0,0,0) to make our coordinates absolute
        composite_optic.init(self,
                             "blue line",
                             optics,
                             order, (0, 0, 0), (0, 0, 0),
                             0,
                             extras=extras)
	def __init__(self, **extras):
		inch=0.0254
		entrance_y=5.0*inch
		exit_y=13.5*inch
		my=ir_line
		optics={}
		
		#first, list all mirrors, and point them at each other
		optics[my.M1]=mir("M1", (2*inch, entrance_y, 10*inch))
		optics[my.M2]=mir("M2", (4*inch, entrance_y, 10*inch))
		optics[my.TrM1]=mir("TrM1", (4*inch, entrance_y, 96*inch))
		optics[my.TrM2]=mir("TrM2", (6*inch, entrance_y, 96*inch))
		optics[my.TrM3]=mir("TrM3", (6*inch, entrance_y, 82.5*inch))
		optics[my.TrM4]=mir("TrM4", (2*inch, entrance_y, 82.5*inch))
		optics[my.M3]=mir("M3", (4*inch, entrance_y, 135*inch))
		optics[my.M4]=mir("M4", (12*inch, entrance_y, 135*inch))
		optics[my.M5]=mir("M5", (13*inch, entrance_y, 105*inch))
		optics[my.M6]=mir("M6", (14*inch, entrance_y, 105*inch))
		optics[my.M7]=mir("M7", (16.5*inch, entrance_y, 3*inch))
		optics[my.M8]=mir("M8", (24*inch, entrance_y, 3*inch))
		optics[my.M9]=mir("M9", (23*inch, entrance_y, 135*inch))
		optics[my.M10]=mir("M10", (33*inch, entrance_y, 134.5*inch))
		optics[my.M11]=mir("M11", (33*inch, entrance_y, -6*inch))
		optics[my.BP4]=PL_brewster_filter("BP4", (33*inch, entrance_y, 27*inch), reversed=1)
		optics[my.M12]=mir("M12", (20*inch, entrance_y, 33*inch))
		optics[my.M13]=mir("M13", (20*inch, entrance_y, 12*inch))
		optics[my.M14]=mir("M14", (8.5*inch, entrance_y, 11.5*inch))
		optics[my.M15]=mir("M15", (8.5*inch, exit_y, 11.5*inch))
		
		optics[my.EXIT]=sys_exit=null_optic("exit", (10.0*inch, exit_y, 142.0*inch))
				
		optics[my.L1]=lens("L1", f=+0.400).place_between(optics[my.M2], optics[my.TrM1], 12.0*inch)
		optics[my.L2]=lens("L2", f=+0.800).place_between(optics[my.L1], optics[my.TrM1], 1.30)
		optics[my.L3]=lens("L3", f=+0.750).place_between(optics[my.M6], optics[my.M7], 10*inch)
		optics[my.L4]=lens("L4", f=+1.500).place_between(optics[my.L3], optics[my.M7], 2.25)
		optics[my.L5]=lens("L5", f=+0.750).place_between(optics[my.M10], optics[my.M11], 5*inch)
		optics[my.L6]=lens("L6", f=+1.500).place_between(optics[my.L5], optics[my.M11], 95.5*inch)
		optics[my.L7]=lens("L7", f=+0.750).place_between(optics[my.M15], sys_exit, 4.5*inch)
		optics[my.L8]=lens("L8", f=+2.500, width=6*inch, thickness=0.25*inch).\
			place_between(optics[my.M15], sys_exit, -1*inch).tilt_off_axis((0,45,0))
		
		optics[my.G9a]=laser_head("9mm-1", width=2.0*inch, thickness=6.0*inch, rodsize=0.009).\
			place_between(optics[my.M4], optics[my.M5], 9*inch)
		optics[my.G9b]=laser_head("9mm-2", width=2.0*inch, thickness=6.0*inch, rodsize=0.009).\
			place_between(optics[my.M4], optics[my.M5], 23*inch)
		
		optics[my.G25a]=laser_head("25mm-1", width=6.0*inch, thickness=12.0*inch, rodsize=0.025).\
			place_between(optics[my.M8], optics[my.M9], 74*inch)
		optics[my.G25b]=laser_head("25mm-2", width=6.0*inch, thickness=12.0*inch, rodsize=0.025).\
			place_between(optics[my.M8], optics[my.M9], 94*inch)

		optics[my.G50]=laser_head("50mm", width=9.0*inch, thickness=15.0*inch, rodsize=0.050).\
			place_between(optics[my.M10], optics[my.M11], -19*inch)

		optics[my.SERR1]=serrated_aperture("serrated aperture", diameter=0.003).\
			place_between(optics[my.M2], optics[my.TrM1], 10*inch)		
		optics[my.SF1]=plain_aperture("spatial filter 1", diameter=0.001).\
			place_between(optics[my.M2], optics[my.TrM1], 35*inch)
		
		optics[my.QR1]=halfwave_plate("QR1", width=1*inch, thickness=0.5*inch).\
			place_between(optics[my.G9a], optics[my.G9b], 8*inch).rotate_axis(22.5)	
		optics[my.FR12]=faraday_rotator("FR12", width=0.5*inch, thickness=6*inch, rotation=45).\
			place_between(optics[my.M6], optics[my.M7], 5*inch)
		optics[my.VSF1]=vacuum_spatial_filter("VSF1", thickness=24*inch, width=2*inch).\
			place_between(optics[my.L3], optics[my.L4], 0.750)
			
		optics[my.QR2]=halfwave_plate("QR2", width=1*inch, thickness=0.5*inch).\
			place_between(optics[my.G25a], optics[my.G25b], 8*inch).rotate_axis(22.5)	

		optics[my.BP2]=PL_brewster_filter("BP2", transmit=1).\
			place_between(optics[my.G25b], optics[my.M9], 13*inch).rotate_axis(90)
		optics[my.QR3]=halfwave_plate("QR3", width=1*inch, thickness=0.5*inch).\
			place_between(optics[my.G25b], optics[my.M9], 19*inch).rotate_axis(22.5)	
		optics[my.FR25]=faraday_rotator("FR25", width=1.0*inch, thickness=6.0*inch, rotation=45).\
			place_between(optics[my.G25b], optics[my.M9], 23*inch)
		optics[my.BP3]=PL_brewster_filter("BP3", transmit=1).\
			place_between(optics[my.G25b], optics[my.M9], 30*inch).rotate_axis(0)
		
		looks=[my.M1, my.M2, my.TrM1, my.TrM2, my.TrM3, my.TrM4, my.M3, my.M4, my.M5,
			my.M6, my.M7, my.M8, my.M9, 
			my.M10, my.M11, my.BP4, my.M12, my.M13, my.M14, my.M15, my.EXIT]
		#align all mirrors
		for i in range(1, len(looks)-1):
			optics[looks[i]].set_direction(optics[looks[i-1]], optics[looks[i+1]])

		order=[my.M1, my.M2, my.SERR1, my.L1, my.SF1, my.L2, my.TrM1, my.TrM2, my.TrM3, my.TrM4, my.M3, my.M4, my.G9a, 
			my.QR1, my.G9b, my.M5,
			my.M6, my.FR12, my.L3, my.VSF1, my.L4, my.M7, my.M8, my.G25a, my.QR2, my.G25b, 
			my.BP2, my.QR3, my.FR25, my.BP3, 
			my.M9, my.M10, my.L5, my.L6, my.G50, my.M11, my.BP4, my.M12, 
			my.M13, my.M14, my.M15, my.L7, my.L8]
		
		#specify center and reference as (0,0,0) to make our coordinates absolute
		composite_optic.init(self, "IR line", optics, order, (0,0,0), (0,0,0), 0, extras=extras )