放物面鏡の例


この例では、2つのGeant4 G4Paraboloid ソリッドから望遠鏡のような光学鏡を構築します。光学光子の平行 ビームが光学真空ボリュームに入射し、鏡シェルの内面で反射して、公称焦点付近にある小さな gPhotonDetector パネルに集められます。


クイックスタート

この例を現在のディレクトリにコピーし、ジオメトリを作成して、1イベントを実行します:

cp -r $GEMC_HOME/examples/optical/parabolic_mirror .
cd parabolic_mirror
./parabolic_mirror.py
gemc parabolic_mirror.yaml -n=1


ジオメトリ

この鏡は薄いブール演算シェルです。ジオメトリスクリプトは、2つの構築オペランドを定義します:

どちらのオペランドも exist を 0 に設定して公開されます。これらは検出器ボリュームとして配置され ませんが、そのソリッドは最終的なブール演算で引き続き利用できます:

mirror = GVolume("parabolic_dish")
mirror.mother = "optical_space"
mirror.solidsOpr = "outer_dish - inner_dish"
mirror.set_position(0, 0, mirror_z)
mirror.set_rotation(180, 0, 0)
mirror.material = "G4_Al"
mirror.mirror = "parabolic_reflector"
mirror.publish(cfg)

G4Paraboloid では、-dz での半径が +dz での半径よりも小さい必要があります。最終的なシェルは、 開いた側が入射する光子に面するように、x軸まわりに180度回転されます。

インタラクティブビューア:

Parabolic mirror simulation with 1 generated optical-photon event.


鏡面

鏡のコーティングは、最終的なブール演算シェルに取り付けられた GMirror スキンサーフェスです:

reflector = GMirror("parabolic_reflector")
reflector.type = "dielectric_metal"
reflector.finish = "polished"
reflector.model = "unified"
reflector.border = "SkinSurface"
reflector.photonEnergy = "2.0*eV 3.0*eV 4.0*eV 5.0*eV 6.0*eV"
reflector.reflectivity = "0.95 0.95 0.95 0.95 0.95"
reflector.publish(cfg)
mirror.mirror = "parabolic_reflector"

鏡面のフィールドについては、鏡のドキュメントを参照してください。


光子検出器

検出器は公称焦点付近に配置され、gPhotonDetector を使用します:

detector = GVolume("focus_detector")
detector.make_tube(0, 60, 1, 0, 360)
detector.set_position(0, 0, focus_z)
detector.material = "opticalVacuum"
detector.digitization = "gPhotonDetector"
detector.set_identifier("panel", 1)
detector.publish(cfg)

ステアリングカードは光学物理を有効にし、光学光子を鏡の開口部に向けて発射します:

phys_list: FTFP_BERT + G4OpticalPhysics

gparticle:
  - name: opticalphoton
    multiplicity: 200
    p: 3*eV
    vz: -42*cm
    delta_vx: 17*cm
    delta_vy: 17*cm

Geant4は、生成された光学光子の偏光がゼロであると警告し、ランダムな偏光を割り当てる場合があります。この 警告は、この単純な光源では想定内のものです。