Geant4 Patches

 Patchのあて方
  1. patchファイルをとってきて、$G4INSTALL ディレクトリに置く。
  2. $G4INSTALLディレクトリ直下で
     % patch -p1 -s < G4Tubs4.3JLC.patch
    等と打つ。

 Whats New

G4Tubs (4.3.0)

(G4Tubs4.3JLC.patch)

G4Tubsが、 "G4Tubs::DistanceToOut(p), point p is outside !?" とERRORを吐く問題について、 Inside(const G4ThreeVector& p) 関数中での、phi方向のBoundary checkに問題があるため (sPhiが負で、pPhiが正であると全てkOutsideが返ってくるようになっている)、Logicを変更した。
しかし依然として、r方向のBoundary checkでERRORを吐く。おそらく、Geant4の長さにおける 内部表現がミリメートルであるため、CDCを半径1500mmの円筒として計算すると、 r2 = p.x()*p.x() + p.y()*p.y() の計算のところで精度が足りなくなるためではないかと思われる。 ちなみに、Boundary checkに使われるkRadToleranceの精度は10^-9である。
なお、このbugは、phi方向のboundary checkに関しては、geant4.3.1で改善されている。

G4DynamicParticle (4.3.0, 4.3.1)

(G4DynamicParticle4.3JLC.patch) (G4DynamicParticle4.3.1JLC.patch)

4.3.0,4.3.1で、pythiaでPrimary ParticleのDecay Tableを反応の末端まで作成し、G4HEPEvt形式で 読ませた場合に、G4DecayのDoIt関数が第一世代の娘粒子までしか追わないという問題を回避した。 ERRORを吐くのはG4Decayで、たとえばBからD-(第一世代娘粒子)に崩壊し、更にD-がPi (第二世代娘粒子)などに崩壊する、といったDecay Tableを読ませた際に、
" G4Decay::DoIt : decay table not defined for D-"
等のErrorが出る。これは読ませたはずの第二世代以降のDecay Tableが G4DynamicParticleでコピーコンストラクタを用いた際にコピーされないという設計による (どうやら、わざとそのような設計になっているらしい)。 変更点は、コピーコンストラクタ内で、G4DecayProducts* thePreAssignedDecayProductsを newして、コピー元のDecayの情報がコピー先にも受け継がれるようにした点であるが、 この変更が他に悪影響を及ぼさぬか否かは定かではない。
ちなみに、第二世代以降の娘粒子のDecay TableがGeant4の中に定義されている場合は、 そちらのTableを見にいくのでG4DecayのErrorは出ない。

pythia_main.f (in exampleN04)

example/novice/N04におまけでついてくるpythia event作成用のfortranプログラムである。 これは、bugと言うよりは設計外というべきなのかもしれないが(しかしexampleなんだから、 改造して使用することを考慮に入れたプログラム設計にしてほしかった…)、生成した崩壊粒子 のPDGコード(プログラム中ではIDHEP(IHEP))が4桁を越えるようなeventを作らせると、PDGコード の部分がアスタリスクに化けてしまう。原因は、formatで定義したPDGコードの桁数が小さすぎる、 という点である。
PDGコードが4桁を越えるような粒子を生成させたいなら、プログラムの末尾のformat文を以下の ように(もしくは欲しいPDGコードが入る幅に)変える必要がある。沢山崩壊するようなeventを こしらえたいなら、同時にJDAHEP(1, IHEP), JDAHEP(2, IHEP)の欄も広げておかないと入りきら ない。(ISTHEP(IHEP)はどうせ1か2しか入らないので、この例のように10桁もとる必要はないのだが。)

10      FORMAT(4I10, 4(1X, D15.8))

ちなみに、e+e- →ZH(重心エネルギー350GeV)1000 eventの場合のプログラムはこちら

HOME