Posts Plotting Laser Pulses
Post
Cancel

Plotting Laser Pulses

Generated by TikZ/LaTeX.

Introduction

In this post, I will try to plot laser pulse using different methods. A laser pulse is often represented by a sine/cosine function multiplied by an envelope function, e.g. Gaussian

\[\begin{equation} f(t) = a \cdot \sin(\omega\cdot t) \cdot e^{-t^2/\tau^2} \end{equation}\]

where $a$, $\omega$ and $\tau$ denotes the amplitude, frequency and duration of the laser pulse.

There are many tools that can be used to plot this function, e.g. gnuplot, matplotlib. However, these tools are not convenient if you want to add an arrow to the end of the laser pulse.

2D laser pulses using LaTeX TikZ

TikZ/LaTeX is convenient if you want to add arrows to the picture. Moreover, the resulting picture is in pdf format, which is one of the vector images formats. Below is the code that I used to generate the laser pulse.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
\documentclass[border=20pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{
  arrows,
  arrows.meta
}
\begin{document}

\resizebox{4in}{!}{
  \begin{tikzpicture}
    \draw[-{Stealth[length=20pt, open]}, line width=2.0pt, red]
    plot [samples=2000, domain=-6.5:6.5]
    (\x, {4*sin(\x r * 8) * exp(-\x*\x / 5.0)}) -- ++(0.5, 0);
  \end{tikzpicture}
}

\end{document}

Here is the result:

tikz_laser_pulse

3D laser pulse using Mayavi

A 3D laser pulse is often much fancier than a 2D one. Function of 3d laser pulse

\[\begin{align} x &= a \cdot sin(\omega\cdot t) \cdot e^{-t^2 /\tau^2} \\ y &= a \cdot sin(\omega\cdot t) \cdot e^{-t^2 /\tau^2} \\ z &= c\cdot t \end{align}\]

Mayavi can be used to plot a 3D one, as shown below.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python

import numpy as np
from mayavi import mlab

fig = mlab.figure(
    fgcolor=(0, 0, 0),
    bgcolor=(1, 1, 1),
    size=(2000, 2000)
)
fig.scene.parallel_projection = True

u = np.linspace(0, 2*np.pi, 1000)
v = np.linspace(-8, 8, 1000)

x = 2.5 * np.exp(-v**2 / 10) * np.sin(20*u)
y = 2.5 * np.exp(-v**2 / 10) * np.cos(20*u)
z = v

mlab.plot3d(x, y, z, tube_radius=0.09, color=(0, 0, 1))

u, v = np.mgrid[0:np.pi*2:1000j, -8:8:1000j]
x = 2.48 * np.exp(-v**2 / 10) * np.sin(20*u)
y = 2.48 * np.exp(-v**2 / 10) * np.cos(20*u)
z = v
mlab.mesh(x, y, z,
          # color=np.exp(-np.linspace(-8, 8, 1000)**2/10),
          colormap='Blues',
	  resolution=20,
          representation='surface',
          line_width=0,
          # tube_radius=0,
          # tube_sides=10,
          opacity=0.9)

# mlab.savefig('mlaser.png')
mlab.show()

After choosing the right view angle, one can get images like

mayavi_laser_pulse

This post is licensed under CC BY 4.0 by the author.