Własności nuklidów

Korzystamy z funkcji IsotopeData

Wstęp

Mathematica oferuje coraz więcej informacji o świecie i zawiera funkcje, które pozwalają do nich dotrzeć, jeśli mamy dostęp do internetu.

Zakres usług Wolfram|Alpha rozwija się bardzo gwałtownie i stan tego, co możemy zrobić szybko się dezaktualizuje.

Dla nas w tym kursie (w dydaktyce i w pracy) bardzo przydatna może być funkcja IsotopeData.

Zazwyczaj korzystamy z tej funkcji tak:

IsotopeData[{Z,A},"własnośc"],
lub IsotopeData["nazwa","własność"]

Ale są ważne wyjątki. Np. lista wszystkich nuklidów:

IsotopeData[]//Short

Lista jest zbyt długa, by wszystko wyświetlić. Zobaczmy ile ich jest:

Length[IsotopeData[]]

Podając tylko liczby Z i A dostaniemy nazwę :

IsotopeData[{26,45}]

IsotopeData["Iron"]

Podając tylko Z lub symbol chemiczny dostajemy listę izotopów:

IsotopeData[26]

No i wreszcie lista możliwych własności :

IsotopeData["Properties"]

Proste przykłady

IsotopeData["He4","BindingEnergy"]

IsotopeData["45Fe","DecayModes"]

IsotopeData["45Fe","DecayModeSymbols"]

IsotopeData["45Fe","HalfLife"]

IsotopeData["45Fe","BranchingRatios"]

Lista nuklidów należących do klasy:

IsotopeData["TwoProtonEmission"]

Możemy zobaczyć wszystkie własności nuklidu zawarte w bazie:

IsotopeData["45Fe",#]&/@ IsotopeData["Properties"]

Taki zapis własności jest bardzo niewygodny, trudno ustalić znaczenie niektórych pozycji. Możemy zrobic to lepiej tworząc tabelę wartości wraz z ich opisem, a potem ładnie ją wyświetlając. Oba kroki zbieramy w jednej procedurze:

isoProperties[iso_]:=Module[{l},
l={IsotopeData[iso,#,"Description"],Shallow[IsotopeData[iso,#],{6,8}]}&/@IsotopeData["Properties"];
Text[Grid[Prepend[l,{"Property","Value"}],Frame->All,Background->{None,{{{LightBlue,White}},{1->LightYellow}}},
ItemStyle->Directive[FontSize->18,Bold]]]
]

isoProperties["45Fe"]

Moment magnetyczny

Ważną własnością stanów jądrowych jest magnetyczny moment dipolowy. Jego wartość jest bardzo czułym testem dla modeli jądrowych. Odegrał np. bardzo ważną rolę w pierwszych pracach o modelu powłokowym.

Model jednocząstkowy

Łatwo obliczyć moment dipolowy pochodzący od jednego nukleonu. Ma on dwie składowe: jedna pochodzi od orbitalnego, druga od spinowego momentu pędu:

(OverVector[μ])=((Subscript[g, l]) (OverVector[l])+(Subscript[g, s]) (OverVector[s])) (Subscript[μ, N]) ,

gdzie (Subscript[g, l]) i (Subscript[g, s]) to tzw. czynniki żyromagnetyczne odpowiednio dla części orbitalnej i spinowej, a (Subscript[μ, N]) to magneton jądrowy (tu naturalna jednostka):  (Subscript[μ, N])=eℏ/2(Subscript[m, p])=3.152 (10^(-14)) MeV/T. Czynniki g sa inne dla protonu i neutronu:

proton : (Subscript[g, l])=1,   (Subscript[g, s])=5.586
 neutron: (Subscript[g, l])=0,  (Subscript[g, s])=-3.826

Wartość magnetycznego momentu dipolowego definiuje się jako wartość oczekiwaną z-owej składowej wektora (OverVector[μ]) w stanie o maksymalnym rzucie (OverVector[j]) na oś z:

μ=⟨j,m=j | (Subscript[μ, z]) |  j,m=j ⟩.

Linie Schmidta

Gdy o momencie magnetycznym decyduje pojedynczy nieparzysty nukleon, to w stanie o całkowitym momencie pędu j=l ± 1/2 wartość μ wynosi:

(Subscript[μ, l±1/2]) = j [(Subscript[g, l])±((((Subscript[g, s])-(Subscript[g, l])))/(2l+1))] (Subscript[μ, N]) .

Wstawiając odpowiednie wartości czynników g, dostajemy dla protonów:

(Subscript[μ, l+1/2]) = (j + 2.29) (Subscript[μ, N]) ,
            (Subscript[μ, l-1/2]) = (j -2.29  (j/(j+1))) (Subscript[μ, N]) ,

i dla neutronów:

(Subscript[μ, l+1/2]) = -1.91 (Subscript[μ, N]) ,
     (Subscript[μ, l-1/2]) = 1.91 (j/(j+1)) (Subscript[μ, N]) .

Powyższe wzory, to tzw. linie Schmidta.

Wartości doświadczalne

Wartość spinu i momentu magnetycznego dla zadanego nuklidu:

magMom[iso_]:=Module[{spi,mi},
spi=IsotopeData[iso,"Spin"];
mi=IsotopeData[iso,"MagneticMoment"];
{spi,mi}
]

magMom["37Ca"]

Dopiszmy do wyniku doświadczalnego przewidywane wartości Schmidta, pierwsza dla j=l-1/2, druga dla j=l+1/2:

magMomSch[iso_]:=Module[{z,n,s,m,s1,s2},
z=IsotopeData[iso,"AtomicNumber"];
n=IsotopeData[iso,"NeutronNumber"];
s=IsotopeData[iso,"Spin"];
m=IsotopeData[iso,"MagneticMoment"];
If[OddQ[n+z],
If[OddQ[z],
s1=s-2.29*s/(s+1);
s2=s+2.29,
s1=1.91*s/(s+1);
s2=-1.91
],
s1=0;
s2=0
];
{s,m,s1,s2}
]

magMomSch["207Pb"]

Zróbmy listę wszystkich danych doświadczalnych, osobno dla nuklidów z nieparzystą liczbą protonów i z nieparzystą liczbą neutronów.

Wybór jąder z nieparzystym protonem: najpierw tworzymy listę nuklidów o parzystym N i nieparzystym Z , potem sprawdzamy ich moment magnetyczny, na koniec usuwamy przypadki, w których ta wartość nie jest znana (zmierzona):

lisMagMomOddZ=Module[{loddZ},
loddZ=Select[IsotopeData[],(EvenQ[IsotopeData[#,"NeutronNumber"]])&&(OddQ[IsotopeData[#,"AtomicNumber"]])&];
Cases[
magMom[#]&/@ loddZ, Except[{_,_Missing}]]
];

Analogicznie dla nieparzystego neutronu:

lisMagMomOddN=Module[{loddN},
loddN=Select[IsotopeData[],(OddQ[IsotopeData[#,"NeutronNumber"]])&&(EvenQ[IsotopeData[#,"AtomicNumber"]])&];
Cases[
magMom[#]&/@ loddN, Except[{_,_Missing}]]
];

Length[lisMagMomOddZ]

Length[lisMagMomOddN]

Porównanie

Porównujemy wartości doświadczalne z liniami Schmidta, rysujemy μ w funkcji j.

Najpierw protony:

gSchProt=Plot[{j+2.29,j-2.29*j/(j+1)},{j,0,6},
Frame->True,
BaseStyle->{Black,FontFamily->"Verdana",FontSize->22},PlotStyle->{{Darker[Green],Thickness[0.005]},{Darker[Cyan],Thickness[0.005]}},PlotRange->{{0,6},{-1,7}},
ImageSize->700,
FrameStyle->Thick,
FrameLabel->{"Moment pędu j","μ [(Subscript[μ, N])]"},
Epilog->{Text[Style["Protony",RGBColor[0.5,0,0.5],26],{0.2,5.5},Left],
Text[Style["j=l+1/2",Darker[Green],22],{1.2,4},Left,{1,0.35}],
Text[Style["j=l-1/2",Darker[Cyan],22],{3,0.8},Left,{1,0.33}]}];

gExpProt=ListPlot[lisMagMomOddZ,
PlotStyle->{RGBColor[0.5,0,0.5],PointSize[0.01]}];

Show[gSchProt,gExpProt]

Dla neutronów :

gSchNeut=Plot[{-1.91,1.91*j/(j+1)},{j,0,7},
Frame->True,
BaseStyle->{Black,FontFamily->"Verdana",FontSize->22},PlotStyle->{{Darker[Green],Thickness[0.005]},{Darker[Cyan],Thickness[0.005]}},PlotRange->{{0,7},{-3,2}},
ImageSize->700,
FrameStyle->Thick,
FrameLabel->{"Moment pędu j","μ [(Subscript[μ, N])]"},
Epilog->{Text[Style["Neutrony",Blue,26],{3.5,-2.5},Left],
Text[Style["j=l+1/2",Darker[Green],22],{1.5,-2.2},Left,{1,0}],
Text[Style["j=l-1/2",Darker[Cyan],22],{1.5,1.5},Left,{1,0.12}]}];

gExpNeut=ListPlot[lisMagMomOddN,
PlotStyle->{Blue,PointSize[0.01]}];

Show[gSchNeut,gExpNeut]

Kwadrupolowy moment elektryczny

Także kwadrupolowy moment elektryczny jest ważną obserwablą stanów jądrowych. Charakteryzuje on odstępstwo rozkładu ładunku elektrycznego od symetrii sferycznej. Jest więc czułym miernikiem deformacji i zjawisk kolektywnych.

W prostym modelu jednocząstkowym, wartość spektroskopowego momentu kwadrupolowego (czyli mierzonego w LAB) wynosi (w barnach):

(Subscript[Q, s]^SP)(j) = -0.01 ((2j-1)/(2j+2)) ((Subscript[N, j])+(3/2)) (A^(1/3)) b ,

gdzie j jest spinem stanu, A liczbą masową jądra, a (Subscript[N, j]) główną liczbą kwantową oscylatora harmonicznego, którym przybliżamy stany jądrowe. Zakłada się tu, że przyczynek do Q pochodzi od jednego, nieparzystego protonu.

Wartości doświadczalne

Wartość elektrycznego momentu kwadrupolowego z bazy Wolframa:

eleMom[iso_]:=Module[{a,q},
a=IsotopeData[iso,"MassNumber"];
q=IsotopeData[iso,"QuadrupoleMoment"];
{a,q}
]

eleMom["2H"]

Tworzymy listy wszystkich wartości z tablic, znowu oddzielnie dla nieparzystych protonów i neutronów (nieparzysty neutron nie powinien dawać momentu elektrycznego!):

lisEleMomOddZ=Module[{loddZ},
loddZ=Select[IsotopeData[],(EvenQ[IsotopeData[#,"NeutronNumber"]])&&(OddQ[IsotopeData[#,"AtomicNumber"]])&];
Cases[
eleMom[#]&/@ loddZ, Except[{_,_Missing}]]
];

lisEleMomOddN=Module[{loddN},
loddN=Select[IsotopeData[],(OddQ[IsotopeData[#,"NeutronNumber"]])&&(EvenQ[IsotopeData[#,"AtomicNumber"]])&];
Cases[
eleMom[#]&/@ loddN, Except[{_,_Missing}]]
];

Length[lisEleMomOddZ]

lisEleMomOddZ

Length[lisEleMomOddN]

Wykreślamy wszystkie wartości w funkcji liczby masowej:

ListPlot[{lisEleMomOddZ,lisEleMomOddN}, 
Frame->True,
FrameLabel->{"A","Q [barns]"},
PlotRange->{{-0.001,260},{-3.2,5}},BaseStyle->{FontFamily->"Verdana",FontSize->22},
AxesOrigin->{0,-4},
ImageSize->700,
PlotStyle->{{Red,PointSize[0.012]},{Darker[Green],PointSize[0.012]}},
Filling->0,
FillingStyle->Black,
GridLines->{{},{0}},
Epilog->
{Text[Style["Nieparzysty proton",Red,20],{20,4},Left],
Text[Style["Nieparzysty neutron",Darker[Green],20],{20,3.3},Left]}
]

Jądra o nieparzystym N mają podobne wartości Q co jądra o nieparzystym Z!

Wybieraliśmy tylko jądra parzysto-nieparzyste. Ale nieparzysto-nieparzyste też mogą mieć moment kwadrupolowy. Zobaczmy więc wszystkie wartości jakie są w bazie:

lisEleMom=Cases[{IsotopeData[#,"AtomicMass"],IsotopeData[#,"QuadrupoleMoment"]}&/@IsotopeData[],Except[{_,_Missing}]];

Length[lisEleMom]

ListPlot[lisEleMom, 
Frame->True,
FrameLabel->{"A","Q [barns]"},
PlotRange->{{-0.001,260},{-3.2,5.5}},BaseStyle->{FontFamily->"Verdana",FontSize->22},
AxesOrigin->{0,-4},
ImageSize->700,
PlotStyle->{Blue,PointSize[0.012]},
Filling->0,
FillingStyle->Black,
GridLines->{{},{0}}
]

Stany wzbudzone

Wśród informacji w IsotopeData są też dane o stanach wzbudzonych - ich energie, spiny, parzystości i czasy życia (szerokości). Można więc łatwo sporządzać różne systematyki.

Pierwszy stan (SuperPlus[2])

Chcemy zobaczyć energie wzbudzenia pierwszego stanu (SuperPlus[2]) w jądrach parzysto-parzystych.
Zrobimy to oddzielnie dla każdej liczby atomowej.

Funkcja znajdująca energię pierwszego stanu (SuperPlus[2]) dla danego nuklidu:

fExt2plus[iso_]:=Module[{exst,spi,par,spipar,l2,i},
exst=IsotopeData[iso,"ExcitedStateEnergies"];
If[Length[exst]>0,
spi=IsotopeData[iso,"ExcitedStateSpins"];
par=IsotopeData[iso,"ExcitedStateParities"];
spipar=Transpose[{spi,par}];
l2=Position[spipar,{2,1}];
If[Length[l2]>0,i=First[l2[[1]]];exst[[i]],0],
0]
]

fExt2plus["182Hg"]

Funkcja tworząca listę parzystych izotopów dla danej liczby atomowej:

fevA[z_]:=Select[IsotopeData[],(IsotopeData[#,"AtomicNumber"]==z)&&(EvenQ[IsotopeData[#,"MassNumber"]])&]

fevA[50]

Lista par {liczba neutronów, energia pierwszego stanu (SuperPlus[2]) w MeV} dla izotopów danego pierwiastka:

fExt2plusZ[z_]:=Cases[
{IsotopeData[#,"NeutronNumber"],fExt2plus[#]}&/@fevA[z],
Except[{_,0}]]

Na przykład pierwsze stany (SuperPlus[2])dla izotopów niklu:

t2plusNi=fExt2plusZ[52]

ListPlot[t2plusNi,
Joined->True,
Mesh->Full,
Frame->True,
FrameLabel->{"N","E(2+)[keV]"},             
PlotRange->All,
BaseStyle->{FontFamily->"Verdana",FontSize->22},
PlotStyle->Automatic,
Filling->False,
ImageSize->700
                   ]

Porównanie energii (SuperPlus[2])z momentem kwadrupolowym

Teraz tworzymy tabelę zawierającą takie listy dla wszystkich parzystych pierwiastków od helu do ruthefordu:

tab=Table[fExt2plusZ[z],{z,2,104,2}];

g2plus=ListPlot[tab,
Joined->True,
InterpolationOrder->1,
Mesh->Full,
Frame->True,
FrameLabel->{"N","E(2+)[keV]"},             
PlotRange->{{0,150},{0,6000}},
BaseStyle->{FontFamily->"Verdana",FontSize->22},
PlotStyle->Automatic,
Filling->False,
ImageSize->700
                   ]

Możemy teraz  porównać systematykę stanów (SuperPlus[2]) i elektrycznego momentu kwadrupolowego. 
Tylko musimy jeszcze zrobić rysunek wartości Q, ale w funkcji N.

lisEleMom2=Cases[{IsotopeData[#,"NeutronNumber"],IsotopeData[#,"QuadrupoleMoment"]}&/@IsotopeData[],Except[{_,_Missing}]];

gQ=ListPlot[lisEleMom2, 
Frame->True,
FrameLabel->{"N","Q [barns]"},
PlotRange->{{-0.001,150},{-3.2,5.5}},BaseStyle->{FontFamily->"Verdana",FontSize->22},
AxesOrigin->{0,-4},
ImageSize->680,
PlotStyle->{Blue,PointSize[0.01]},
Filling->0,
FillingStyle->Gray,
GridLines->{{},{0}}
]

GraphicsColumn[{g2plus,gQ},Spacings->0, Alignment->Right, Frame->All,FrameStyle->White]

Stosunek (Subscript[R, 4/2])

Często używanym parametrem w badaniu struktury jądra jest stosunek energii pierwszego stanu (SuperPlus[4]) i stanu (SuperPlus[2]), (Subscript[R, 4/2]). W przypadku widma rotacyjnego stosunek ten wynosi 3.33, zaś dla widma wibracyjnego jest równy 2.

fR4to2ratio[iso_]:=Module[{exst,spi,par,spipar,l2,l4,i,j},
exst=IsotopeData[iso,"ExcitedStateEnergies"];
If[Length[exst]>0,
spi=IsotopeData[iso,"ExcitedStateSpins"];
par=IsotopeData[iso,"ExcitedStateParities"];
spipar=Transpose[{spi,par}];
l2=Position[spipar,{2,1}];
l4=Position[spipar,{4,1}];
If[(Length[l2]>0)&&(Length[l4]>0),
i=First[l2[[1]]];
j=First[l4[[1]]];
exst[[j]]/exst[[i]],
0],
0]
]

fR4to2ratio["110Cd"]

Tworzymy listę wartości (Subscript[R, 4/2]) dla izotopów wybranego pierwiastka, które numerujemy liczbą neutronów:

fR4to2Z[z_]:=Cases[
{IsotopeData[#,"NeutronNumber"],fR4to2ratio[#]}&/@fevA[z],
Except[{_,0}]]

Na przykład dla hafnu (Z=72):

tR4to2=fR4to2Z[72]

ListPlot[tR4to2,
Joined->True,
Mesh->Full,
Frame->True,
FrameLabel->{"N","E((SuperPlus[4]))/E((SuperPlus[2]))"},             
PlotRange->{All,{0.5,4.5}},
GridLines->{{},{2,3.33}},
GridLinesStyle->Directive[Gray,Dashed],
BaseStyle->{FontFamily->"Verdana",FontSize->22},
PlotStyle->Automatic,
Filling->False,
ImageSize->700
                   ]

Jak poprzednio tworzymy tabelę z wartościami (Subscript[R, 4/2]) dla wszystkich parzystych pierwiastków od helu do rutherfordu:

tab=Table[fR4to2Z[z],{z,2,104,2}];

tab2=Cases[tab,Except[{}]];

ListPlot[tab2,
Joined->True,
Mesh->Full,
Frame->True,
FrameLabel->{"N","E((SuperPlus[4]))/E((SuperPlus[2]))"},             
PlotRange->{All,{0.5,4.5}},
GridLines->{{},{2,3.33}},
GridLinesStyle->Directive[Gray,Dashed],
BaseStyle->{FontFamily->"Verdana",FontSize->22},
PlotStyle->Automatic,
Filling->False,
ImageSize->700
                   ]