Elektronenmikroskopsimulation in Python: Mehrschichtmethode (1)

Es wird beginnen! Hallo. Nach dem letzten Mal (obwohl es schon lange her ist) handelt es sich diesmal auch um eine Kristallstrukturanalyse mit Python. Der Code ist GitHub [^ 1]

Nächster Artikel: Elektronenmikroskopsimulation in Python: Mehrschichtmethode (2)

Hinweis: Wenn Sie als Hobby simulieren (Hobby-Ration), ist es schwierig festzustellen, ob das Ergebnis wirklich korrekt ist, und das hier gezeigte Ergebnis ist möglicherweise physikalisch nicht korrekt. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.

elektronisches Mikroskop

Ein Elektronenmikroskop ist ein Gerät, mit dem Sie winzige Objekte sehen und analysieren können, indem Sie einen Elektronenstrahl gegen ein Objekt treffen. Es gibt andere Methoden zur Beobachtung winziger Objekte wie optische Mikroskope und Röntgenbeugung, die im vorherigen Artikel erörtert wurden. Elektronenstrahlen haben jedoch eine kürzere Wellenlänge als sichtbare Strahlen und Röntgenstrahlen und weisen eine höhere Auflösung auf. Ich werde. Aufgrund seiner Auflösung wird es in verschiedenen Situationen eingesetzt, beispielsweise bei der Strukturanalyse in der physikalischen Physik und der Beobachtung von biologischem Gewebe in der Biochemie. Es gibt drei Haupttypen von Elektronenmikroskopen: Rasterelektronenmikroskop (SEM), Transmissionselektronenmikroskop (TEM) und Rastertransmissionselektronenmikroskop (STEM).

Transmissionselektronenmikroskop (TEM)

Ein Transmissionselektronenmikroskop (TEM) ist ein Mikroskop, das ein Objekt mit Elektronen bestrahlt und mit den durchgelassenen Elektronen ein Bild erzeugt. Die innere Struktur wird anhand der Intensität des durchgelassenen Elektronenstrahls (durchgelassene Welle) untersucht, und die Kristallstruktur wird anhand der Beugung (Beugungswelle) des Elektronenstrahls identifiziert. Als Weiterentwicklung gibt es eine Methode namens Hochauflösende Elektronenmikroskopie (HREM), die ein Bild erzeugt, indem sie durchgelassene Wellen und gebeugte Wellen stört. Durch die Verwendung von HREM kann eine hohe Auflösung erzielt werden, so dass einzelne atomare Anordnungen so projiziert werden können, wie sie sind. Das von HREM erzeugte Bild wird als Kristallstrukturbild bezeichnet. Dieses Mal besteht der Zweck darin, durch Simulation ein Kristallstrukturbild zu erzeugen.

Erklärung der gebeugten und übertragenen Wellen

Da Elektronenstrahlen die Eigenschaft von Wellen haben, verursachen sie ein Beugungsphänomen, das sich um Hindernisse ausbreitet. Hindernisse im Kristall sind Elektronenwolken (Potentiale) um die Atome. Da die Atome regelmäßig im Kristall angeordnet sind, wird auch das Potential periodisch verteilt, und die dadurch verursachte Beugung ist $2dsin\theta = n \lambda$ Es erscheint nur dann als gebeugte Welle, wenn die durch angegebene Bragg-Bedingung erfüllt ist. Solche Reflexionen werden Bragg-Reflexionen genannt. d ist der Abstand der Kristallebene, θ ist der Winkel zwischen der Kristallebene und dem einfallenden Elektronenstrahl und λ ist die Wellenlänge des Elektronenstrahls.

Übrigens ist die von TEM anvisierte Probe sehr dünn und hat eine Dicke in der Größenordnung von nm. Wenn eine solche Probe mit einem Elektronenstrahl bestrahlt wird, senden einige von ihnen durch, ohne Reflexion, Absorption oder Streuung zu verursachen. Ein solcher Elektronenstrahl wird als durchgelassene Welle bezeichnet. Da die Phasen der gebeugten Welle und der übertragenen Welle unterschiedlich sind, kann die Phasendifferenz durch gegenseitige Interferenz im Bild reflektiert werden (tatsächlich wird die Phasendifferenz nicht nur durch Interferenz reflektiert, sondern die später beschriebene sphärische Aberration wird reflektiert. Es ist möglich, es zu benutzen).

Multi-Slice-Methode

Von hier aus erklären wir die spezifische Simulationsmethode. Wenn ein Elektronenstrahl in die Probe eintritt und durchgelassen oder gebeugt wird, um ein Bild auf der Unterseite der Probe zu erzeugen, wird der Elektronenstrahl durch Wechselwirkung mit dem Potential in der Probe ausgegeben. Um es in einer Simulation zu reproduzieren, ist es notwendig, das Potential innerhalb der Probe zu reproduzieren, aber das Potential einer Probe mit einer Dicke von zehn oder Hunderten von nm, einer enormen Anzahl von Atomen, vollständig zu reproduzieren Die begleitende Wechselwirkung aus der Elektronenwolke muss berechnet werden. Daher wurde ein Mehrschichtverfahren in Betracht gezogen, bei dem die Probe senkrecht zur Einfallsrichtung des Elektronenstrahls geschnitten und als Stapel dünner Schichten berechnet wurde. Der Elektronenstrahl wird durch den Durchgang durch die Schicht gestreut, erfährt eine Phasenänderung, breitet sich im Raum zur nächsten Schicht aus, erfährt bei der nächsten Schicht erneut eine Phasenänderung usw. und ein Kristallstrukturbild wird auf der unteren Oberfläche der Probe erzeugt. .. Unten ist ein kleines schematisches Diagramm. スクリーンショット 2020-05-26 14.45.32.png

Der Einfachheit halber sollten Sie zwei Schnitte durchlaufen und ein Bild auf der Unterseite erstellen. Wenn die einfallende Welle $ \ psi_0 $ auf die erste Schicht einfällt, wenden wir die Phasenobjektnäherung an, die davon ausgeht, dass nur die Phasenänderung von dem Potential $ V_p $ in der Schicht empfangen wird. Bei einer Phasenänderung proportional zum projizierten Potential die Welle am Boden der Schicht $ \psi_{1out}(x, y) = e^{i\sigma V_{p1}(x, y)} $ Es wird sein. $ \ sigma = \ pi / \ lambda E $ ($ \ lambda $: Wellenlänge, E: Beschleunigungsspannung). Wenn die Schwachphasenobjektnäherung angewendet wird, dass die von $ V_p (x, y) $ empfangene Änderung gering ist, $ \psi_{1out} (x, y) = \\{1 + i\sigma V_{p1}(x, y) \\} $ $ q_1(x, y) = 1 + i\sigma V_{p1}(x, y) $ $ \psi_{1out}(x, y) = q_1(x, y)\psi_0(x, y) $ Es wird sein. $ q (x, y) $ wird als Transparenzfunktion bezeichnet. $ \ Psi_1 $, das das erste Slice durchlaufen hat, breitet sich durch den Raum bis zum zweiten Slice aus. Die Ausbreitungsfunktion $ p , die die Ausbreitung von Wellen darstellt, ist $ p(x, y) = -\frac{1}{i\lambda \Delta z}e^{-ik\frac{(x^2 + y^2)}{2\Delta z}} $$ ist. Dies ist auch die Fraunhofer-Beugungsgleichung. Hier wird $ p (x, y) $ Fourier-transformiert. Es wird später wirksam. $ P(h, k) = -\frac{1}{i\lambda \Delta z}\int e^{-ik\frac{(x^2 + y^2)}{2\Delta z}} e^{-2\pi i(hx + ky)} dxdy = e^{2\pi i \zeta(h, k) \Delta z } $ Wo $ \ zeta (h, k) $ ist $ \zeta(h, k) = \frac{\lambda}{2}(h^2 + k^2) $ Es wird der Anregungsfehler genannt. Von oben die Welle, die die zweite Scheibe erreichte $ \psi_{2in}(x, y) = \psi_{1out}(x, y) \otimes p(x, y) $ Es wird sein. $ \ Otimes $ repräsentiert eine Faltung. Die Welle, die durch die zweite Schicht ging, ist dieselbe wie die erste Schicht $ \psi_{2out}(x, y) = q_2(x, y)\psi_{2in}(x, y) $ ist. Wiederholen Sie auf diese Weise die Berechnung für die Anzahl der Scheiben. In der vorherigen Berechnung müssen Sie jedoch die Faltungsoperation für die Anzahl der Schichten ausführen. Faltungen sind in der Regel teuer in der Berechnung und sollten für direkte Berechnungen vermieden werden. Verwenden Sie also die folgende Formel, um die Faltung durch die Fourier-Transformation zu ersetzen. $ F[f(x)\otimes g(x)] = F[f(x)]F[g(x)] $ Dann lautet die bisherige Formel $ \Psi_{out}(h, k) = F[q_2(x, y)F^{-1}[F[q_1(x, y)\psi_0(x, y)]P(h, k)]] $ Sie kann berechnet werden, indem die Fourier-Transformation und die inverse Fourier-Transformation wiederholt werden.

Programm

Bei der Berechnung nach der Mehrschichtmethode muss zunächst das Projektionspotential vorbereitet werden. Das projizierte Potential wird durch inverse Fourier-Transformation des Kristallstrukturfaktors erhalten (in erster Linie ist der Kristallstrukturfaktor die Fourier-Transformation des internen Potentials). Daher wird zuerst der Kristallstrukturfaktor berechnet und die inverse Fourier-Transformation durchgeführt. Die Erklärung des Kristallstrukturfaktors und der Berechnungsmethode finden Sie im vorherigen Artikel. Diesmal ist die Probe α-Fe (bcc) und die Einfallsrichtung ist die Richtung der z-Achse. Der Scheibenabstand $ \ Delta z $ ist eine Gitterkonstante / 2. Atomkoordinaten sind in pos_1.csv und pos_2.csv vorgefüllt. Das inverse Gitter wird von np.meshgrid () generiert und von np.vectorize () angewendet. (Ich wusste das letzte Mal nichts über np.vectorize (), also habe ich es aufgelistet. Es war nutzlos ...)

fa = 0
hkl = [h, k, 0]
thkl = np.transpose(hkl)
dk = 1/((np.matmul(np.matmul(invG, thkl), hkl))**(1/2))
if(not np.isinf(dk)):
 sinthetalamb = lamb/(2*dk)
 for i in range(4):
  fa = fa + param_fe[i][0]*np.exp((-param_fe[i][1]*(sinthetalamb**2)))
            
 F = 0
 for i in r:
  F = F + fa*np.exp(1.0j*2*np.pi*(h*i[0] + k*i[1]))

Berechnen Sie die Übertragungsfunktion $ q $ mit dem Kristallstrukturfaktor $ F $ als Projektionspotential $ V_p $ mit np.fft.ifft2 ().

Vp = np.fft.ifft2(F)
q = 1 + 1.0j*sigma*Vp

Die Ausbreitungsfunktion P wird von Anfang an durch Fourier-Transformation berechnet.

zeta = lamb/2
zeta = zeta*(h**2 + k**2)
        
p = np.exp(1.0j*2*np.pi*zeta*deltaZ)

Führt eine Mehrschichtberechnung durch. Der einfallende Elektronenstrahl $ \ psi_1 $ ist 1.

psi = np.ones((self.N, self.N))
psi = np.fft.fft2(q*psi)*p
psi = np.fft.ifft2(psi)

Wiederholen Sie dies Scheibe für Scheibe. Die Ausgabe von $ \ psi $ aus der Mehrschichtberechnung ist eine komplexe Zahl. Die Intensität, die tatsächlich als Bild erscheint, ist also die Wellenamplitude $ I $

I = np.abs(psi)**2

Dann kann ein Kristallstrukturbild erhalten werden ... Nicht unbedingt.

Weiter zu (2)

Es tut mir leid, ich habe es lange erklärt, aber diese Berechnung ergibt kein Kristallstrukturbild (um genau zu sein, ein richtiges Kristallstrukturbild). Tatsächlich sind noch Faktoren zu berücksichtigen. Es ist lange her, also werde ich mit dem nächsten Artikel fortfahren.

Verweise

Ich werde die Artikel und Bücher vorstellen, auf die ich mich beim Schreiben des Artikels bezogen habe.

Code

Recommended Posts

Elektronenmikroskopsimulation in Python: Mehrschichtmethode (1)
Elektronenmikroskopsimulation in Python: Mehrschichtmethode (2)
Simplex-Methode (Einzelmethode) in Python
Private Methode in Python
Das Unterdrücken von Methodenüberschreibungen in Python
Röntgenbeugungssimulation mit Python
Implementierte Methode zur Weitergabe von Etiketten in Python
Simulieren Sie die Monte-Carlo-Methode in Python
Hash-Methode (Open-Address-Methode) in Python
Methode zum Erstellen einer Python-Umgebung in Xcode 6
Ausrichtungsalgorithmus durch Einfügemethode in Python
Numerische Simulation in Python (2) -Diffusionsratenbestimmende Aggregation (DLA)
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Lernen Sie das Entwurfsmuster "Vorlagenmethode" in Python
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Epoche in Python
Zwietracht in Python
Dynamisches Ersetzen der nächsten Methode in Python
Lernen Sie das Entwurfsmuster "Factory Method" in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Ambisonics Simulation Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Versuchen Sie, die Monte-Carlo-Methode in Python zu implementieren
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Johnson-Methode (Python)
Hashbar in Python
DirectLiNGAM in Python
LiNGAM in Python
In Python reduzieren