ジオメトリを作成したい
1// 1. 形状を定義する
2G4VSolid *solid = new G4Box(...) // 四角柱
3G4VSolid *solid = new G4Tubs(...) // 円柱
4
5// 2. 材料を定義する
6auto nm = G4NistManager::Instance();
7auto material = nm->FindOrBuildMaterial("材料名");
8auto material = nm->FindOrBuildMaterial("G4_AIR");
9auto material = nm->FindOrBuildMaterial("G4_WATER");
10
11// 3. 測定器(論理ボリューム)を定義する
12G4LogicalVolume *logical = new G4LogicalVolume(...)
13
14// 4. 測定器(物理ボリューム)を配置する
15G4VPhysicalVolume *theDetector = new G4PVPlacement(...)
Geant4空間に配置する構造体をジオメトリと呼びます。 ジオメトリは次の4つのステップで作成できます。
形状(ソリッド)を作成する(
G4VSolid
)素材(マテリアル)を用意する(
G4Material
)測定器(論理物体)を組み立てる(
G4LogicalVolume
)測定器(物理物体)を配置する(
G4VPhysicalVolume
)
現実世界の実験と同じように、形状と材料を決めて測定装置を作り、実験室に配置するという、とても分かりやすいオブジェクト指向な設計になっています。
形状を作成したい(G4VSolid
)
1G4Box("name", half_x, half_y, half_z);
2G4Tubs("name", r_min, r_max, half_z, s_phi, d_phi);
直方体(G4Box
)や円筒(G4Tubs
)など、G4VSolid
を継承したクラスを使って、
測定器の形状を定義します。
参考
詳しくは 形状を作成する(G4VSolid) に整理しました。
素材を作成したい(G4Material
)
1auto nm = G4NistManager::Instance();
2G4Material *pWater = nm->FindOrBuildMaterial("G4_WATER");
測定器に使う素材(G4Material
)を定義します。
G4NistManager
を使ってNISTのデータベースに準拠した
元素や物質の情報を簡単に取得できます。
参考
詳しくは マテリアルしたい(G4Material) に整理しました。
測定器を作成したい(G4LogicalVolume
)
1G4LogicalVolume(
2 G4VSolid *pSolid,
3 G4Material *pMaterial ,
4 const G4String &name,
5 G4FieldManager *pFieldManager=nullptr,
6 G4VSensitiveDetector* pSDetector=nullptr,
7 G4UserLimits* pUserLimits=nullptr,
8 G4bool optimise=true
9);
G4LogicalVolume
で論理ボリュームを作成します。
引数からわかるように、形状(G4VSolid
)と素材(G4Material
)の設定が必要です。
論理ボリュームは複製して使い回すことができます。
参考
詳しくは 論理ボリュームしたい(G4LogicalVolume) に整理しました。
ヒント
G4LogicalVolume
の引数を確認すると、
磁場などの外場(G4FieldManager
)や、
有感検出器(G4VSensitiveDetector
)も設定できます。
しかし、最近のユーザーアプリケーションでは、
Construct
の中で論理ボリュームを作成したあとに、
ConstructSDandField
の中で設定を追加することが多いようです。
測定器を配置する(G4PVPlacement
)
1new G4PVPlacement(
2 nullptr, // 回転;なし
3 G4ThreeVector(0, 0, 0), // 配置;原点に配置
4 logicDetector, // 論理ボリューム
5 "Detector", // 物理ボリュームの名前; "Detector"
6 logicWorld, // 親・論理ボリューム
7 false, // 多重配置; しない
8 0, // コピー番号
9 false // 物理ボリュームの重なり確認; しない
G4PVPlacement
で論理ボリューム(G4LogicalVolume
)を、
物理ボリューム(G4VPhysicalVolume
)として配置します。
配置したボリュームは自動的にG4PhysicalVolumeStore
にも追加されます。
参考
詳しくは 物理ボリュームを配置したい(G4PVPlacement) に整理しました。
1G4PVReplica(...);
繰り返し構造をもつ測定器(や検出器)の場合は
G4PVReplica
で効率的に配置できます。
参考
詳しくは 物理ボリュームを複製したい(G4PVReplica) に整理しました
ヒント
G4VPhysicalVolume
は物理ボリュームの抽象基底クラスであり、ユーザーが直接インスタンスを呼び出すことはできません。
ユーザーのアプリケーションでは、
G4PVPlacement
(単体配置)、
G4PVReplica
(等間隔配置)、
G4PVParameterised
(反復配置)
といった派生クラスを通じて利用します。
ただし、G4VPhysicalVolume* MyGeometry::Construct
のように
関数の戻り値の型として使うことはあります。