実験室を作りたい(SetupWorldVolume
)
1G4LogicalVolume *SetupWorldVolume(){
2
3 // パラメーターの設定
4 G4String logical_volume = "World";
5 G4String material_name = "G4_AIR";
6 G4String length_x = 1. * m;
7 G4String length_y = 1. * m;
8 G4String length_z = 1. * m;
9
10 // 形状を定義
11 G4double halfX = 0.5 * length_x;
12 G4double halfY = 0.5 * length_y;
13 G4double halfZ = 0.5 * length_z;
14
15 auto solid = new G4Box{
16 "solid", // 名前
17 halfX,
18 halfY,
19 halfZ,
20 };
21
22 // 実験室の素材を決める
23 G4NistManager *nm = new G4NistManager::Instance();
24 auto material = nm->FindOrBuildMaterial(material_name);
25
26 // 実験室
27 auto logical = new G4LogicalVolume{
28 solid, // G4VSolid
29 material, // G4Material
30 logical_name, // 名前
31 nullptr, // G4FieldManager
32 nullptr, // G4VSensitiveDetector
33 nullptr, // G4UserLimits
34 };
35 return logical;
36}
Geant4で通常World(ワールド)と呼ばれるシミュレーション用の実験室を作成します。 このボリュームは親ボリュームを持たず、 すべての測定装置はこの空間の中に収まるように配置する必要があります。
ここでは形状をG4Box
(箱型)、
素材をG4_AIR
(空気)に設定した
論理ボリュームを作成しています。
ワールドの論理物体を返す関数を作成します。
引数で論理物体の名前を設定できるようになっています。
これをDetectorConstruction::Construct
の中で呼び出して、物理物体として配置します。
実験室を配置したい
1G4VPhysicalVolume* SetupVolumes()
2{
3 // 実験室の論理物体を取得する
4 auto world = SetupWorldVolume();
5
6 // 実験室の置き場所を決める
7 G4RotationMatrix rotation = G4RotationMatrix{}; // 回転 : なし
8 G4ThreeVector position = G4ThreeVector{0., 0., 0.}; // 方向 : (0, 0, 0)
9 G4Transform3D origin = G4Transform3D{rotation, position} // 座標
10
11 // 実験室を配置する
12 G4VPhysicalVolume *theWorld = new G4PVPlacement(
13 location, // G4Transform3D : 論理ボリュームを配置する座標
14 world, // G4LogicalVolume : 配置する論理ボリューム
15 "theWorld", // G4String : この物理ボリュームの名前
16 0, // G4LogicalVolume: 親ボリュームはなし
17 false, // G4bool pMany(廃止)
18 0, // G4int pCopyNo : コピー番号
19 true // G4bool check overlaps
20 )
21
22 return theWorld;
23}
測定器シミュレーションを実行する実験室(通称:World)を作成しました。 実験室は50m立方の箱型としました。 どうしてこの大きさにしたかというと、この中にスーパーカミオカンデを配置してみたいからです。
まず、実験室の形を決めます。
箱型の実験室なのでG4Box
を使いました。
G4Box
のサイズに関係する引数はすべて半分の長さで指定することになっているので0.5倍してあります。
次に実験室の材質を決めます。 地球にある実験室なので空気で満たしました。
最後に、置き場所を決めます。 これで、最上位の親ボリュームである実験室の完成です。 あとは、測定装置をこの中に納まるように並べるだけです。
注釈
Geant4では生成された粒子が「実験室の外側に飛び出す」か「運動量がゼロになる」まで、素粒子反応が繰り返されます。なので、ある程度の外枠を定義しておかないと、必要のない計算にまで時間をかけてしまうことになります。
非表示にしたい
1pWorldLogical->SetVisAttributes(G4VisAttributes::GetInvisible());