KaliVeda  1.13/01
Heavy-Ion Analysis Toolkit
KVFissionKinematics.cpp
Go to the documentation of this file.
1 //Created by KVClassFactory on Mon May 2 14:00:47 2016
2 //Author: John Frankland,,,
3 
4 #include "KVFissionKinematics.h"
5 
6 #include <KVPosition.h>
7 
9 
10 
11 
20  : KVBase(), fFission(2), fMother(fis), fDaughter(Z1, A1)
21 {
22  // Initialize fission kinematics calculation
23  //
24  // 'fis' is the fissioning nucleus, we take into account its kinematics
25  // KVFissionKinematics(fis); // symmetric fission
26  // KVFissionKinematics(fis, Z1); // specify Z of one fission fragment, masses calculated from N/Z
27  // KVFissionKinematics(fis, Z1, A1); // specify Z & A of one fission fragment
28 
29  if (!Z1) {
30  // set daughter to half of mother
31  fDaughter.SetZandA(fis.GetZ() / 2, fis.GetA() / 2);
32  }
33  else if (!A1) {
34  // mass of daughter not given. use N/Z ratio of mother.
35  fDaughter.SetN(Z1 * fMother.GetNsurZ());
36  }
37 }
38 
39 
40 
43 
45 {
46  // Generate a fission event
47 
48  fFission.Clear();
49 
50  KVNucleus* ff1, *ff2;
51  (ff1 = fFission.AddParticle())->SetZandA(fDaughter.GetZ(), fDaughter.GetA());
52  (ff2 = fFission.AddParticle())->SetZandA(fMother.GetZ() - fDaughter.GetZ(), fMother.GetA() - fDaughter.GetA());
53 
54  Double_t vrel = ff1->GetFissionVelocity(ff2);
55  Double_t mu = ff1->GetMass() * ff2->GetMass() / (ff1->GetMass() + ff2->GetMass());
56 
57  KVPosition pp(0, 180, 0, 360);
58  TVector3 fis_axis = pp.GetRandomDirection("isotropic");
59  ff1->SetVelocity((mu * vrel / ff1->GetMass())*fis_axis);
60  ff2->SetVelocity((-mu * vrel / ff2->GetMass())*fis_axis);
61 
62  if (fMother.GetVelocity().Mag2() > 0.) {
63  // boost to frame of fissioning nucleus
65  ff1->SetVelocity(ff1->GetFrame("lab")->GetVelocity());
66  ff2->SetVelocity(ff2->GetFrame("lab")->GetVelocity());
67  }
68 
69  return &fFission;
70 }
71 
72 
73 
int Int_t
ClassImp(KVPartitionList) void KVPartitionList
Initialisation.
double Double_t
Base class for KaliVeda framework.
Definition: KVBase.h:141
void Clear(Option_t *opt="")
Clear object properties : name, type/title, number, label.
Definition: KVEvent.h:262
Simple calculation of two-body decay.
const KVSimEvent * Generate()
Generate a fission event.
KVSimEvent fFission
calculated fission event
KVNucleus fDaughter
one of the fission fragments
KVNucleus fMother
mother nucleus
Description of properties and kinematics of atomic nuclei.
Definition: KVNucleus.h:125
Int_t GetA() const
Definition: KVNucleus.cpp:799
Double_t GetFissionVelocity(KVNucleus *nuc=0, Int_t formula=kDefaultFormula)
Definition: KVNucleus.cpp:1880
Int_t GetZ() const
Return the number of proton / atomic number.
Definition: KVNucleus.cpp:770
void SetVelocity(const TVector3 &)
Set velocity of particle (in cm/ns units)
KVParticle const * GetFrame(const Char_t *frame, Bool_t warn_and_return_null_if_unknown=kTRUE) const
Definition: KVParticle.cpp:855
Double_t GetMass() const
Definition: KVParticle.h:572
TVector3 GetVelocity() const
returns velocity vector in cm/ns units
Base class used for handling geometry in a multidetector array.
Definition: KVPosition.h:90
virtual TVector3 GetRandomDirection(Option_t *t="isotropic")
Definition: KVPosition.cpp:242
Container class for simulated nuclei, KVSimNucleus.
Definition: KVSimEvent.h:21
void SetFrame(const Char_t *frame, const KVFrameTransform &ft)
Particle * AddParticle()
Double_t Mag2() const