# 0-component of focus is time at which pulse reaches focal point. # If time=0 use paraxial wave, otherwise use spherical wave. # Thus in the paraxial case the pulse always starts at the waist. wave[-1]['focus'] = (0.0,0.0,y0,z0) wave[-1]['supergaussian exponent'] = 2 optics.append({}) optics[-1]['object'] = surface.Paraboloid('mirror') optics[-1]['reflective'] = True optics[-1]['focal length'] = par_f optics[-1]['acceptance angle'] = 180/deg/1.8 optics[-1]['off axis angle'] = 0. optics[-1]['euler angles'] = (0.,180/deg,0.) optics.append({}) optics[-1]['object'] = surface.FullWaveProfiler('det') optics[-1]['size'] = (.4/mm,.4/mm,.2/mm) optics[-1]['wave grid'] = (2048,2048,1) optics[-1]['distance to caustic'] = 1.25/mm optics[-1]['origin'] = (0.,1.25/mm,0.) optics[-1]['euler angles'] = (0.,90/deg,0.) optics.append({}) optics[-1]['object'] = surface.EikonalProfiler('terminus') optics[-1]['size'] = (300/mm,300/mm) optics[-1]['origin'] = (0.,-par_f,0.) optics[-1]['euler angles'] = (0.,90/deg,0.) diagnostics['suppress details'] = False diagnostics['clean old files'] = True diagnostics['orbit rays'] = (2,32,1)
'cylindrical', # Ray box is always put at the origin # It will be transformed appropriately by SeaRay to start in the wave 'box': (0, 3 * r00, 0, 2 * np.pi, -2 * t00, 2 * t00) }) optics.append([{ 'object': surface.Paraboloid('mirror'), 'reflective': True, 'focal length': par_f, 'acceptance angle': np.pi / 1.8, 'off axis angle': 0., 'euler angles': (0., np.pi, 0.) }, { 'object': surface.FullWaveProfiler('det'), 'size': (.0004 / mks_length, .0004 / mks_length, 200e-6 / mks_length), 'wave grid': (2048, 2048, 1), 'distance to caustic': .00125 / mks_length, 'origin': (0., 0.00125 / mks_length, 0.), 'euler angles': (0., np.pi / 2, 0.) }, { 'object': surface.EikonalProfiler('terminus'), 'size': (0.3 / mks_length, 0.3 / mks_length), 'origin': (0., -par_f, 0.), 'euler angles': (0., np.pi / 2, 0.) }]) diagnostics.append({ 'suppress details': False,
'dispersion inside': dispersion.ColdPlasma(), 'dispersion outside': dispersion.Vacuum(), 'radius': Rlens, 'length': Lch, 'origin': (0., 0., 0.), 'euler angles': (0., 0., 0.), 'radial coefficients': (c0, c2, c4, c6), 'dt': Lch / 1000, # Use enough steps to make sure rays reach end of box. # Too many steps is OK, SeaRay can adjust down automatically. # Too few steps is not OK. 'steps': 1200, 'subcycles': 10 }, { 'object': surface.FullWaveProfiler('det'), 'size': (.0012 / mks_length, .0012 / mks_length, .001 / mks_length), 'wave grid': (2048, 2048, 1), 'distance to caustic': eik_to_caustic, 'origin': (0., 0., f - eik_to_caustic) }, { 'object': surface.EikonalProfiler('terminus'), 'size': (.01 / mks_length, .01 / mks_length), 'origin': (0., 0., 2 * f) } ]) diagnostics.append({ 'suppress details': False,