Diese Datei stammt aus Wikimedia Commons und kann von anderen Projekten verwendet werden. Die Beschreibung von deren Dateibeschreibungsseite wird unten angezeigt.
English: Animation of photons in a Mach–Zehnder interferometer. In the empty interferometer each photon interferes with itself. If a detector is placed in the interferometer, the wavefunction will collapse so that the photon is either detected directly or it will move on and split at the second beam splitter without interference.
#!/usr/bin/python# -*- coding: utf8 -*-frommathimport*importmatplotlib.pyplotaspltfrommatplotlib.patchesimportPolygon,Circle,Wedgefrommatplotlibimportanimationimportnumpyasnp# settingsfname='Mach-Zehnder_photons_animation'width,height=300,220nframes=100nphotons=12fps=15x0=100.5x1=218.5y0=200.5y1=80.5lx,lw,lh=5,46,21# laserdtect=62.5t1,t2,tmove=0.25,0.9,0.025ymove=24rp=2.# photon radiuscp1='#ff0000'# photon colorcp2='#ffaaaa'# splitphoton color##xstart=lx+lw/2.dx=x1-x0dy=y1-y0l=(x0-xstart)+abs(dx)+abs(dy)+dtect+2.*rpxdet0=(x0+x1)/2fly_frac=0.7v=l/fly_fractdet0=(xdet0+2.*rp-xstart)/vtdet12=l/v# introduce artificial antibunching for illustration purposeptimes=(np.random.random()+np.sort(np.random.random(3*nphotons))[::3])%1photons=[{}foriinrange(nphotons)]fori,pinenumerate(photons):p['t0']=ptimes[i]ift1<=(p['t0']+tdet0)%1and(p['t0']+tdet0)%1<=t2:# photon sees first detectorifnp.random.randint(2)==0:# photon hits extra detectorp['arm']='none'p['det']=0else:# photon escapes first detectorp['arm']='lower'# => random detection at second beam splitterifnp.random.randint(2)==0:p['det']=1else:p['det']=2else:# photon sees standard Mach-Zehnder interferometerp['arm']='both'p['det']=1ifp['det']==0:p['tdet']=(p['t0']+tdet0)%1else:p['tdet']=(p['t0']+tdet12)%1p['click_frame']=int(round(p['tdet']*nframes))%nframesplt.close('all')mpl.rc('path',snap=False)defanimate(nframe):# prepare a clean and image-filling canvas for each frameplt.clf()fig.gca().set_position((0,0,1,1))plt.xlim(0,width)plt.ylim(0,height)plt.axis('off')t=float(nframe)/nframes# photonsforpinphotons:s0=v*((t-p['t0'])%1)ifs0>l:continues=s0+start-x0ifs<=0:# from laser to first beam splitterx,y=x0+s,y0fig.gca().add_patch(Circle((x,y),rp,color=cp1))elifs<=abs(dx)+abs(dy):# in the interferometerifs<abs(dx):xu,yu=x0+copysign(s,dx),y0else:xu,yu=x1,y0+copysign(s-abs(dx),dy)ifs<abs(dy):xd,yd=x0,y0+copysign(s,dy)else:xd,yd=x0+copysign(s-abs(dy),dx),y1ifs<xdet0-x0orp['arm']=='both':fig.gca().add_patch(Circle((xu,yu),rp,color=cp2))fig.gca().add_patch(Circle((xd,yd),rp,color=cp2))elifp['arm']=='lower':fig.gca().add_patch(Circle((xd,yd),rp,color=cp1))else:# after the interferometerx,y=x1+(s-abs(dx)-abs(dy)),y1ifp['arm']=='both':fig.gca().add_patch(Circle((x,y),rp,color=cp1))elifp['arm']=='lower':fig.gca().add_patch(Circle((x,y),rp,color=cp2))x,y=x1,y1-(s-abs(dx)-abs(dy))fig.gca().add_patch(Circle((x,y),rp,color=cp2))# laserfig.gca().add_patch(Polygon([[lx,y0-lh/2.],[lx,y0+lh/2.],[lx+lw,y0+lh/2.],[lx+lw,y0-lh/2.]],closed=True,facecolor='#cccccc',edgecolor='black'))plt.text(lx+lw/2.,y0-2,'laser',fontsize=12,horizontalalignment='center',verticalalignment='center')# beam splittersb=12fig.gca().add_patch(Polygon([[x0-b,y0+b],[x0+b,y0+b],[x0+b,y0-b],[x0-b,y0-b],[x0-b,y0+b],[x0+b,y0-b]],closed=True,facecolor='#88aadd',edgecolor='black',linewidth=2,alpha=0.4))fig.gca().add_patch(Polygon([[x1-b,y1+b],[x1+b,y1+b],[x1+b,y1-b],[x1-b,y1-b],[x1-b,y1+b],[x1+b,y1-b]],closed=True,facecolor='#88aadd',edgecolor='black',linewidth=2,alpha=0.4))# mirrorsm,mw=12,4fig.gca().add_patch(Polygon([[x1-m+mw/2.,y0+m+mw/2.],[x1+m+mw/2.,y0-m+mw/2.]],closed=False,edgecolor='#555555',linewidth=mw))fig.gca().add_patch(Polygon([[x0-m-mw/2.,y1+m-mw/2.],[x0+m-mw/2.,y1-m-mw/2.]],closed=False,edgecolor='#555555',linewidth=mw))# detectorsc_off='#cccccc'c_on='#cc0000'c0=c1=c2=c_offforpinphotons:ifp['click_frame']==nframe:ifp['det']==0:c0=c_onifp['det']==1:c1=c_onifp['det']==2:c2=c_onift1<=tandt<=t2:yd=y0else:yd=y0-min((t1-t)%1,tmove,(t-t2)%1)*ymove/float(tmove)fig.gca().add_patch(mpl.patches.Wedge((xdet0,yd),b,270,90,fc=c0))fig.gca().add_patch(mpl.patches.Wedge((x1+dtect,y1),b,270,90,fc=c1))fig.gca().add_patch(mpl.patches.Wedge((x1,y1-dtect),b,180,0,fc=c2))fig=plt.figure(figsize=(width/100.,height/100.))anim=animation.FuncAnimation(fig,animate,frames=nframes)anim.save(fname+'.gif',writer='imagemagick',fps=fps)
Ich, der Urheberrechtsinhaber dieses Werkes, veröffentliche es hiermit unter der folgenden Lizenz:
Es ist erlaubt, die Datei unter den Bedingungen der GNU-Lizenz für freie Dokumentation, Version 1.2 oder einer späteren Version, veröffentlicht von der Free Software Foundation, zu kopieren, zu verbreiten und/oder zu modifizieren; es gibt keine unveränderlichen Abschnitte, keinen vorderen und keinen hinteren Umschlagtext.
Der vollständige Text der Lizenz ist im Kapitel GNU-Lizenz für freie Dokumentation verfügbar.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue
verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
neu zusammengestellt werden – abgewandelt und bearbeitet werden
Zu den folgenden Bedingungen:
Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
https://creativecommons.org/licenses/by/3.0CC BY 3.0 Creative Commons Attribution 3.0 truetrue
Du darfst es unter einer der obigen Lizenzen deiner Wahl verwenden.
Kurzbeschreibungen
Ergänze eine einzeilige Erklärung, was diese Datei darstellt.
Animación 2D de fotones en un interferómetro Mach – Zehnder.
{{Information |Description ={{en|1=Animation of photons in a en:Mach–Zehnder interferometer. In the empty interferometer each photon interferes with itself. If a detector is placed in the...
Diese Datei enthält weitere Informationen, die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.