水タンクを作りたい(SetupTankVolume

スーパーカミオカンデ(直径39.3m、高さ41.4m)サイズの水タンクを配置します。

 1G4LogicalVolume *SetupWaterTank()
 2{
 3    // パラメーター設定
 4    G4String logical_name{"Tank"};
 5    G4String material_name{"G4_WATER"};
 6    G4double diameter{39.3 * m};
 7    G4double height{41.4 * m};
 8
 9    // 形状を定義
10    G4double r_min{0. * cm};         // 底面の内径
11    G4double r_max{0.5 * diameter};  // 底面の外径
12    G4double half_z{0.5 * height};   // 円柱の高さ(の半分)
13    G4double s_phi{0. * deg};        // 円の角度(始点)
14    G4double d_phi{360. * deg};      // 円の角度(終点)
15    auto solid = new G4Tubs(
16        "TankSolid",    // ソリッド名
17        r_min,
18        r_max,
19        half_z,
20        s_phi,
21        d_phi
22    );
23
24    // 材料を定義
25    auto nm = G4NistManager::Instance();
26    auto material = nm->FindOrBuild(material_name);
27
28    // 論理ボリュームを定義
29    auto logical = new G4LogicalVolume(
30        solid,        // G4VSolid
31        material,     // G4Material
32        logical_name, // 名前
33    )
34
35    // (オプション)ワイヤーフレームを着色
36    auto color = new G4VisAttributes(true, G4Colour(0., 0.5, 1.)); // 青系
37    logical->SetVisAttributes(color);
38
39    return logical;
40}

G4Tubsで円柱を作成しました。 円柱の材料をG4_WATERにしました。 水タンクの論理ボリュームができました。

水タンクを配置したい

 1G4VPhysicalVolume* SetupVolumes()
 2{
 3    // Worldを準備する
 4    auto world = SetupWorldVolume();
 5    // Worldを配置する
 6    auto theWorld = new G4PVPlacement{...};
 7
 8    // WaterTankを準備する
 9    auto tank = SetupWaterTankVolume();
10
11    // タンクは縦置きにしたい
12    G4RotationMatrix rotation = G4RotationMatrix(0., 90.*deg, 0.);
13    G4ThreeVector direction = G4ThreeVector(0., 0., 0.);
14    G4Transform3D origin = G4Transform3D(rotation, direction);
15
16    new G4PVPlacement(
17        origin,          // 子ボリュームの位置
18        tank,            // 子ボリューム
19        "TankPhysical",  // 名前
20        theWorld,        // 親ボリューム
21        false,           // no boolean operation
22        0,               // G4int : copy number
23        true,
24    );
25
26    return theWorld;
27}

スーパーカミオカンデをイメージしているため、 水タンクを縦置きにしています。

G4RotationMatrixでY軸方向に90度回転させました。 縦置きにするために、どの引数を変更すればよいか、 よくわからなかったので、コンパイル&実行して確認しながら調整しました。

ワールドの中心に配置したかったので、 G4ThreeVectorは原点のままにしています。