Reimplemented from general_optic. Definition at line 1289 of file general_optics.py. 01289 : 01290 "track a beam through this optics, forwards or backwards, and mark the beam whenever it strikes an atomic optic" 01291 if back: 01292 order=copy.copy(self.optics_order) 01293 order.reverse() 01294 else: 01295 order=self.optics_order 01296 01297 for opticname in order: 01298 optic=self.optics_dict[get_tagged_key(opticname)] 01299 if not isinstance(optic, composite_optic): #only mark primitive optics 01300 waist=beam.q.next_waist() 01301 current_drift=beam.total_drift 01302 optic.transport_to_here(beam) 01303 distance=beam.total_drift-current_drift 01304 if waist > 0 and waist < distance: 01305 beam.free_drift(waist-distance) 01306 beam.mark("waist") 01307 optic.transport_to_here(beam) 01308 if isinstance(opticname, backwards): 01309 optic.transform(beam, not back) #'backwards' must toggle the reversed flag, so backwards-backwards is forwards 01310 else: 01311 optic.transform(beam, back) 01312 01313 if not isinstance(optic, composite_optic): #only mark primitive optics 01314 beam.mark(self.mark_label(get_tagged_key(opticname))) 01315 def polygon_list(self):
|