Un diagramme N-Z (aussi diagramme de Segrè, d’après Emilio Segrè) représente les nucléides stables et radioactifs sur un graphique, en portant sur les axes le nombre Z de protons et le nombre N de neutrons.
Le document ci-dessus a été obtenu avec Python (voir un précédent article), d’après les données téléchargées ici. Je propose ici de mettre en forme ces données dans un code LaTeX, avec un résultat similaire :
Le fichier de données ressemble à ça :
# A Z N Primary Decay Mode
1 0 1 B-=100
1 1 0 IS=99.9855
2 1 1 IS=0.0145
3 1 2 B-=100
4 1 3 n=100
5 1 4 2n=100
6 1 5 n(possible)0 3n(possible)0
7 1 6 2n(possible)0
3 2 1 IS=0.0002
4 2 2 IS=99.9998
5 2 3 n=100
6 2 4 B-=100 B-d=0.000278
7 2 5 n=100
8 2 6 B-=100 B-n=16 B-t=0.9
9 2 7 n=100
10 2 8 2n=100
3 3 0 p(possible)0
4 3 1 p=100
5 3 2 p=100
6 3 3 IS=4.85
7 3 4 IS=95.15
8 3 5 B-=100 B-A=100
9 3 6 B-=100 B-n=50.5
10 3 7 n=100
Une ligne pour chaque nucléide (plus de 3500 lignes), avec indication de son mode de désintégration. « IS » indique les noyaux stables, et donne leur abondance naturelle.
- A pour désintégration alpha
- B- pour beta –
- B+ pour beta +
- n ou 2n pour émission de neutron
- p ou 2p pour émission de proton
- SF pour fission spontanée
- EC pour capture électronique
Cette 4e colonne étant assez difficile à exploiter avec LaTeX, j’ai utilisé un code Python court qui collecte les données utiles dans d’autres fichiers .csv (avec le module pandas) plus facilement lisibles avec LaTeX :
import pandas as pd
Zmax=118
Nmax=179
# ----------------------------------
donnees=pd.read_csv("data_decay_mode.csv",
skiprows=27,
sep="\t",
usecols=[2,3,4],
names=['Z','N','mode']
)
donnees = donnees[donnees['Z'] <=Zmax]# filtrer les valeurs de Z
# Les listes suivantes accueilleront les coordonnées (Z,N) par type de désintégration
noyaux_alpha = []
noyaux_beta_m = []
noyaux_beta_p = []
noyaux_capt_e = []
noyaux_stables = []
noyaux_em_proton = []
noyaux_em_neutron = []
noyaux_fission = []
# balayage du tableau de données :
for i in donnees.index :
type=donnees['mode'][i]
Z = donnees['Z'][i]
N = donnees['N'][i]
if 'A' in type:
noyaux_alpha.append((Z,N))
elif 'B-' in type:
noyaux_beta_m.append((Z, N))
elif 'B+' in type:
noyaux_beta_p.append((Z, N))
elif 'EC' in type:
noyaux_capt_e.append((Z, N))
elif 'IS' in type:
noyaux_stables.append((Z, N))
elif 'SF' in type:
noyaux_fission.append((Z, N))
elif 'p' in type:
noyaux_em_proton.append((Z, N))
elif 'n' in type:
noyaux_em_neutron.append((Z, N))
stables=pd.DataFrame(noyaux_stables, columns=['Z','N'])
stables.to_csv("noyaux_stables.csv", sep=';', columns=['Z','N'])
alpha=pd.DataFrame(noyaux_alpha, columns=['Z','N'])
alpha.to_csv("noyaux_alpha.csv", sep=';', columns=['Z','N'])
beta_m=pd.DataFrame(noyaux_beta_m, columns=['Z','N'])
beta_m.to_csv("noyaux_beta_m.csv", sep=';', columns=['Z','N'])
beta_p=pd.DataFrame(noyaux_beta_p, columns=['Z','N'])
beta_p.to_csv("noyaux_beta_p.csv", sep=';', columns=['Z','N'])
capt_e=pd.DataFrame(noyaux_capt_e, columns=['Z','N'])
capt_e.to_csv("noyaux_capt_e.csv", sep=';', columns=['Z','N'])
em_proton=pd.DataFrame(noyaux_em_proton, columns=['Z','N'])
em_proton.to_csv("noyaux_em_proton.csv", sep=';', columns=['Z','N'])
em_neutron=pd.DataFrame(noyaux_em_neutron, columns=['Z','N'])
em_neutron.to_csv("noyaux_em_neutron.csv", sep=';', columns=['Z','N'])
fission=pd.DataFrame(noyaux_fission, columns=['Z','N'])
fission.to_csv("noyaux_fission.csv", sep=';', columns=['Z','N'])
Les données (Z, N) sont placées dans un DataFrame (tableau de données) correspondant au mode de désintégration.
Un fichier .csv est créé pour chaque DataFrame .
Le code Python et les fichiers .csv qu’il génère :
Il suffit ensuite d’utiliser le module PGFPLOTS de LaTeX pour créer un graphique y porter les valeurs. Ici, la classe utilisée est standalone : la documentation explique comment on peut insérer ce graphique dans un document maître, et le convertir en image PNG.
\documentclass[border=0.5cm,10pt,convert={ghostscript,outext=.png,density=800x800}]{standalone}%conversion en png avec ghostscript (adapter selon l'installation)
% conversion en png : ouvrir un terminal dans le dossier de ce fichier.
% exécuter la commande xelatex -shell-escape <nom du fichier>
%COMPILé AVEC XeLaTeX
\usepackage[T1]{fontenc}
\usepackage[dvipsnames,svgnames]{xcolor}
\colorlet{c_alpha}{LimeGreen}
\colorlet{c_beta_p}{magenta}
\colorlet{c_beta_m}{CornflowerBlue}
\colorlet{c_beta_p}{Magenta}
\colorlet{c_capt_e}{yellow!50!red}
\colorlet{c_em_proton}{violet}
\colorlet{c_em_neutron}{brown}
\colorlet{c_fission}{red}
\usepackage{lmodern}
\mathcode`\.="013B%virgule décimale en mode math
\usepackage{pgfplots}\pgfplotsset{compat=newest}
\begin{document}
\newlength{\taillept}
\setlength{\taillept}{0.8pt}
\begin{tikzpicture}
\begin{axis}
[xlabel=numéro atomique Z,
ylabel=nombre de neutrons N,
title=Diagramme N -- Z (de \textsc{Segrè}) des nucléides,
width=11cm,height=15cm,
xmin=0,ymin=0,xmax=120,
ymax=180,
legend pos=south east,
legend image post style={scale=2},
legend style={
/tikz/nodes={anchor=west},
font=\footnotesize,
},
minor x tick num=1,minor y tick num=1,
grid = both,
]
\addplot [only marks, mark size=\taillept] table [col sep=semicolon,x=Z, y=N] {noyaux_stables.csv};
\addlegendentry{stables}
\addplot [only marks, mark size=\taillept, c_alpha] table [col sep=semicolon,x=Z, y=N] {noyaux_alpha.csv};
\addlegendentry{$ \alpha $}
\addplot [only marks, mark size=\taillept, c_beta_p] table [col sep=semicolon,x=Z, y=N] {noyaux_beta_p.csv};
\addlegendentry{$ \beta^+ $}
\addplot [only marks, mark size=\taillept, c_beta_m] table [col sep=semicolon,x=Z, y=N] {noyaux_beta_m.csv};
\addlegendentry{$ \beta^- $}
\addplot [only marks, mark size=\taillept, c_capt_e] table [col sep=semicolon,x=Z, y=N] {noyaux_capt_e.csv};
\addlegendentry{capture é.}
\addplot [only marks, mark size=\taillept, c_em_proton] table [col sep=semicolon,x=Z, y=N] {noyaux_em_proton.csv};
\addlegendentry{ém. proton}
\addplot [only marks, mark size=\taillept, c_em_neutron] table [col sep=semicolon,x=Z, y=N] {noyaux_em_neutron.csv};
\addlegendentry{ém. neutron}
\addplot [only marks, mark size=\taillept, c_fission] table [col sep=semicolon,x=Z, y=N] {noyaux_fission.csv};
\addlegendentry{fission sp.}
\addplot [gray, dashed, domain=0:100]{x};
\end{axis}
\end{tikzpicture}
\end{document}
Le code LaTeX :
Be First to Comment