アクリルを作りたい(G4_PLEXIGLASS)
1auto *nm = G4NistManager::Instance();
2auto *acrylic = nm->FindOrBuildMaterial("G4_PLEXIGLASS");
G4_PLEXIGLASSでアクリル材(アクリル樹脂)を生成できます。
アクリル樹脂の化学組成はPMMA(ポリメタクリル酸メチル)ですが、 Geant4では工業名の「プレキシガラス」で登録されています。
注釈
プレキシガラスという呼び方を知らなかったため、データシートなどからアクリル材を検索できず、自分で作るしかないと思っていました。
カスタマイズしたい
1// 名称: ポリメタクリル酸メチル樹脂(polymethyl methacrylate)
2// 略称: PMMA
3// 化学式: (C5 H8 O2)n
4auto* nm = G4NistManager::Instance();
5
6// 元素を取得
7auto* H = nm->FindOrBuildElement("G4_H");
8auto* C = nm->FindOrBuildElement("G4_C");
9auto* O = nm->FindOrBuildElement("G4_O");
10
11// 密度を設定
12G4double density = 1.19 * g/cm3;
13auto* pmma = new G4Material("PMMA", density, 3);
14
15// 原子数比を設定
16pmma->AddElement(C, 5);
17pmma->AddElement(H, 8);
18pmma->AddElement(O, 2);
プレキシガラスという呼び方を知らなかったころに、自分で作ってみたサンプルです。
PMMAの化学式は(C5 H8 O2)nで、密度は1.19 g/cm3として作成しています。
光学特性したい
1#include "G4PhysicalConstants.hh"
2#include "G4SystemOfUnits.hh"
3#include "G4MaterialPropertiesTable.hh"
4
5#include <vector>
6
7// 光子の波長 [nm]
8// 降順で定義
9std::vector<G4double> wavelengths = {
10 620.*nm,
11 400.*nm, 390.*nm, 380.*nm, 370.*nm, 360.*nm,
12 350.*nm, 340.*nm, 330.*nm, 320.*nm, 310.*nm,
13 300.*nm, 290.*nm, 280.*nm, 270.*nm, 260.*nm,
14 200.*nm,
15}
16
17// 吸収長
18std::vector<G4double> absorption_lengths = {
19 9.27*m,
20 9.27*m, 3.86*m, 81.1*cm, 39.4*cm, 21.2*cm,
21 15.7*cm, 13.6*cm, 11.58*cm, 9.81*cm, 7.71*cm,
22 3.48*cm, 1.10*cm, 3.94*mm, 1.46*mm, 0.867*mm,
23 0.867*mm,
24}
25
26// 波長をエネルギー [eV] に変換
27std::vector<G4double> photon_energies;
28photon_energies.reserve(wavelengths.size()); // メモリを先に確保
29
30for (const auto& length : wavelengths) {
31 // E = (2 * pi * hbar * c) / lambda
32 photon_energies.push_back((CLHEP::twopi * CLHEP::hbarc) / length);
33}
34
35// 光学特性を定義
36auto* mpt = new G4MaterialPropertiesTable();
37
38// 波長によらない屈折率を設定
39mpt->AddConstProperty("RINDEX", 1.49);
40// 波長に依存する吸収長を設定
41mpt->AddProperty(
42 "ABSLENGTH",
43 photon_energies.data(),
44 absorption_lengths.data(),
45 wavelengths.size(),
46);
47
48// 光学特性を追加
49pmma->SetMaterialPropertiesTable(mpt);
アクリル材の光学特性を設定するサンプルです。
波長に依らない特性はAddConstProperty、
波長に依存する特性はAddPropertyで設定できます。
屈折率は波長によらず1.49、 吸収長は波長ごとに値が変わるようにしました。