numerische simulation2 January 25, 2016 1 Numerical Methods in Extraterrestrial Physics - Numerische Simulationen II In [5]: %matplotlib inline %config InlineBackend.figure_format = ’svg’ 1.0.1 Virtueller Detektor Unser virtueller Detektor, welcher zur Messung von (virtuellen) geladenen Sonnenwind-Teilchen verwendet wird, bedarf folgender Komponenten um die Geschwindigkeit, Masse und Masse-pro-Ladung eines Ions zu messen. 1. 2. 3. 4. 5. Die Die Die Die Die Klasse Klasse Klasse Klasse Klasse Particle: Beschreibt und Definiert das Verhalten unserer geladenen Ionen Tof: Definiert die Flugzeit Messung des Detektors PQ: Definiert die Impuls-pro-Ladungs Messung des Detektors SSD: Definiert die Energie Messung des Detektors Detektor: Fügt die einzelnen Komponenten zusammen Die Klassen Particle und Tof haben wir bereits fertiggestellt. Heute geht es also um die Umsetzung einer Impuls-pro-Ladungs Messung mittels der PQ Klasse. Eine bereits fertig gestellte Particle und Tof Klasse findet ihr hier. 1.0.2 Die PQ (Impuls-pro-Ladung) Klasse Die Bestimmung von p/q findet über die Ablenkung eines geladenen Teilchens in einem B-Feld statt. Hier ein kleiner Vorgeschmack der Detektor Geometrie: In [6]: from pq import PQ from particle import Particle import pylab ax = pylab.figure().gca() ax.set_xlim(0,0.15); ax.set_ylim(-0.12,0.02);ax.set_aspect("equal") pq = PQ(); pq.dt = 1e-9 pq.plot(ax) P = Particle() P.set_v((4e5,0,0)) pq.compute_particle(P) P.plot(ax) 1 ax.legend(); Gleichsetzung der in einem konstanten Magnetfeld wirkende Lorentzkraft mit der Zentripetalkraft liefert das Messprinzip des P/Q Analysators. FL FZ ~ = q · v⊥ · B z q · ~v × B 2 mv⊥ = r p ⇒ = Bz · r q = (1) (2) (3) Bei konstant gehaltenem Gyrationsradius r, können wir also durch ein Wechsel von Bz unterschiedliche p/q unserer Teilchen filtern. Die Auflösung des p/q-Analysators ist dabei durch die Anzahl der einstellbaren Bz und das ∆r gegeben, d.h. die Breite des kuppelförmigen Eintritts Systems. In Kombination mit der Flugzeit Messung erhalten wir die Masse-pro-Ladungs des gemessenen Teilchens: ⇒ Bz · r · τ m = , q d wobei d und τ die Flugzeitstrecke und gemessene Flugzeit des Teilchens sind. In [7]: ax = pylab.figure().gca() ax.set_xlim(0,0.15); ax.set_ylim(-0.12,0.02);ax.set_aspect("equal") pq.plot(ax) 2 (4) for B in arange(0.0,0.1,0.01): P = Particle() P.set_v((4e5,0,0)) pq.set_B(B) pq.compute_particle(P) P.plot(ax) ax.legend(); In diesem Beispiel (m = 1 amu, q = 1e, v = 450 km/s, r = 10 cm ) konnte das Teilchen bei einem B-Feld von Bz = 0.04 T, den Analysator passieren. Unsere gemessene Masse-pro-Ladung entspricht also ca 0.95 amu/e. Ein grundlegendes Problem bei der Benutzung solcher m/q Analysatoren besteht darin, dass das Magnetfeld (in der Realität meist ein E-Feld) durchgesteppt werden muss, um die Masse-proLadung zu bestimmen. Da die Auflösung des Analysator von der Anzahl der Steps abhängt, und bei jedem step nur Teilchen einer gewissen Impuls-pro-Ladungs Breite den Analysator passieren können, reduzieren wir signifikant die Messeffizienz unseres Detektors. Bei einer Step Anzahl von 100, messen wir in erster Näherung nur 1% aller eingeschossenen Teilchen. 1.1 Übung: Die PQ Klasse In dieser Übung geht es nun um die Implementierung einer Klasse für die Impuls-pro-Ladungs Messung unserer Teilchenquelle. Das Teilchen soll dabei in einem kuppelförmigen Analysator durch ein konstantes Magnetfeld (in z-Richtung) abgelenkt werden. 1.) Erstellen Sie eine Klasse für die Impuls-pro-Ladungs Messung. Fügen sie hierfür Attribute ein, die die Position, den Radius (10 cm), und Breite des Eintrittssystems (1 cm) definieren. Schreiben Sie eine Methode zur Visualisierung des Eintrittssystems. Hierfür ist die Wedge Klasse aus matplotlib sehr gut geeignet. In [8]: from matplotlib.patches import Wedge 2.) Schreiben Sie eine Methode mit der Sie ein Teilchen durch die Detektor Geometrie propagieren lassen können. Hierfür benötigen Sie eine Methode für die Kollisionsabfrage, d.h. befindet sich das Teilchen innerhalb von r ± ∆r oder nicht. 3 3.) Implementieren Sie eine Methode zum Setzten des Magnetfeldes innerhalb des Analysators. Lassen Sie das Teilchen im Magnetfeld propagieren. Hierfür müssen sie wahrscheinlich die Methode zur Berechnung von ∆v in Ihrer Teilchen Klasse modifizieren. 4.) (Optional) Erstellen Sie eine Detektor Klasse, in der Sie die Tof und PQ Klassen zusammenfügen. Die Detektor Klasse soll dabei das “Steppen” der PQ Klasse übernehmen. Visualisieren einige Trajektoren durch Ihren Detektor. Hier ein mögliches Beispiel: In [10]: from from from from detector import Detector tof import Tof pq import PQ particle import Particle tof = Tof() pq = PQ() D = Detector(tof,pq) ax = D.plot() for i in range(300): P = Particle() P.generate_v(mu=(400e3,0),sig=(10e3,10e3)) if D.calc_particle(P): P.plot(ax) ax.legend(); In [9]: 4