57 hazard =
new G4Hazard();
62 hazard->ial = 979678188;
64 hazard->igraine[0] = 3997;
65 hazard->igraine[1] = 15573;
66 hazard->igraine[2] = 9971;
67 hazard->igraine[3] = 9821;
68 hazard->igraine[4] = 99233;
69 hazard->igraine[5] = 11167;
70 hazard->igraine[6] = 12399;
71 hazard->igraine[7] = 11321;
72 hazard->igraine[8] = 9825;
73 hazard->igraine[9] = 2587;
74 hazard->igraine[10] = 1775;
75 hazard->igraine[11] = 56799;
76 hazard->igraine[12] = 1156;
78 hazard->igraine[13] = 38957;
79 hazard->igraine[14] = 35779;
80 hazard->igraine[15] = 10055;
81 hazard->igraine[16] = 76533;
82 hazard->igraine[17] = 33759;
83 hazard->igraine[18] = 13227;
87 throw G4HadronicException(__FILE__, __LINE__,
"G4AblaEvaporation::copy_constructor meant to not be accessable.");
94 throw G4HadronicException(__FILE__, __LINE__,
"G4AblaEvaporation::operator= meant to not be accessable.");
107 verboseLevel = verbose;
113 G4VarNtp *varntp =
new G4VarNtp();
123 G4double nucleusMass = G4NucleiProperties::GetAtomicMass(nucleusA, nucleusZ);
139 varntp->massini = theNucleus.
GetA();
140 varntp->mzini = theNucleus.
GetZ();
142 std::vector<G4DynamicParticle*> cascadeParticles;
145 theResult->push_back(
new G4Fragment(theNucleus));
150 varntp->exini = exitationE;
152 G4int particleI, n = 0;
164 enum bulletParticleType {nucleus = 0, proton = 1,
neutron = 2, pionPlus = 3, pionZero = 4,
165 pionMinus = 5, deuteron = 6, triton = 7, he3 = 8, he4 = 9};
172 G4cout <<
"Excitation energy: " << excitationEnergy <<
G4endl;
173 abla->breakItUp(nucleusA, nucleusZ, nucleusMass, excitationEnergy, angularMomentum, recoilEnergy, momX, momY, momZ,
177 if(verboseLevel > 0) {
179 G4cout <<
"G4AblaEvaporation: Target A: " << nucleusA <<
G4endl;
180 G4cout <<
"G4AblaEvaporation: Target Z: " << nucleusZ <<
G4endl;
182 for(particleI = 0; particleI < varntp->ntrack; particleI++) {
184 G4cout << varntp->massini <<
" " << varntp->mzini <<
" ";
185 G4cout << varntp->exini <<
" " << varntp->mulncasc <<
" " << varntp->mulnevap <<
" " << varntp->mulntot <<
" ";
186 G4cout << varntp->bimpact <<
" " << varntp->jremn <<
" " << varntp->kfis <<
" " << varntp->estfis <<
" ";
187 G4cout << varntp->izfis <<
" " << varntp->iafis <<
" " << varntp->ntrack <<
" " << varntp->itypcasc[particleI] <<
" ";
188 G4cout << varntp->avv[particleI] <<
" " << varntp->zvv[particleI] <<
" " << varntp->enerj[particleI] <<
" ";
189 G4cout << varntp->plab[particleI] <<
" " << varntp->tetlab[particleI] <<
" " << varntp->philab[particleI] <<
G4endl;
196 G4cout <<
"varntp->ntrack = " << varntp->ntrack <<
G4endl;
197 for(particleI = 0; particleI < varntp->ntrack; particleI++) {
200 momx = varntp->plab[particleI]*std::cos(varntp->tetlab[particleI]*CLHEP::pi/180.0)*std::sin(varntp->philab[particleI]*CLHEP::pi/180.0)*MeV;
201 momy = varntp->plab[particleI]*std::sin(varntp->tetlab[particleI]*CLHEP::pi/180.0)*std::sin(varntp->philab[particleI]*CLHEP::pi/180.0)*MeV;
202 momz = varntp->plab[particleI]*std::cos(varntp->tetlab[particleI]*CLHEP::pi/180.0)*MeV;
204 eKin = varntp->enerj[particleI] * MeV;
206 if(verboseLevel > 1) {
213 momDirection = momDirection.
unit();
216 G4int particleIdentified = 0;
219 if((varntp->avv[particleI] == 1) && (varntp->zvv[particleI] == 1)) {
222 particleIdentified++;
226 if((varntp->avv[particleI] == 1) && (varntp->zvv[particleI] == 0)) {
229 particleIdentified++;
233 if((varntp->avv[particleI] == -1) && (varntp->zvv[particleI] == 1)) {
236 particleIdentified++;
240 if((varntp->avv[particleI] == -1) && (varntp->zvv[particleI] == 0)) {
243 particleIdentified++;
247 if((varntp->avv[particleI] == -1) && (varntp->zvv[particleI] == -1)) {
250 particleIdentified++;
254 if((varntp->avv[particleI] > 1) && (varntp->zvv[particleI] >= 1)) {
260 aIonDef = theTableOfParticles->
FindIon(Z, A, 0, Z);
264 particleIdentified++;
268 if(particleIdentified == 1) {
271 cascadeParticles.push_back(cascadeParticle);
277 if(particleIdentified > 1) {
278 G4cout <<
"G4InclCascadeInterface: One outcoming particle was identified as";
279 G4cout <<
"more than one particle type. This is probably due to a bug in the interface." <<
G4endl;
280 G4cout <<
"Particle A:" << varntp->avv[particleI] <<
"Z: " << varntp->zvv[particleI] <<
G4endl;
281 G4cout <<
"(particleIdentified =" << particleIdentified <<
")" <<
G4endl;
297 fillResult(cascadeParticles, theResult);
301void G4AblaEvaporation::fillResult( std::vector<G4DynamicParticle *> secondaryParticleVector,
305 G4cout <<
"Size of the secondary particle vector = " << secondaryParticleVector.size() <<
G4endl;
306 for (
size_t i = 0 ; i < secondaryParticleVector.size() ; i++ ) {
307 G4int aZ =
static_cast<G4int> (secondaryParticleVector[i]->GetDefinition()->GetPDGCharge() );
308 G4int aA =
static_cast<G4int> (secondaryParticleVector[i]->GetDefinition()->GetBaryonNumber());
309 G4LorentzVector aMomentum = secondaryParticleVector[i]->Get4Momentum();
311 aResult->push_back(
new G4Fragment(aA, aZ, aMomentum) );
313 aResult->push_back(
new G4Fragment(aMomentum, secondaryParticleVector[i]->GetDefinition()) );
std::vector< G4Fragment * > G4FragmentVector
G4DLLIMPORT std::ostream G4cout
G4FragmentVector * BreakItUp(const G4Fragment &theNucleus)
void setVerboseLevel(const G4int verbose)
G4LorentzVector Get4Momentum() const
void Set4Momentum(const G4LorentzVector &momentum)
G4double GetExcitationEnergy() const
const G4LorentzVector & GetMomentum() const
static G4Neutron * NeutronDefinition()
G4ParticleDefinition * FindIon(G4int atomicNumber, G4int atomicMass, G4double excitationEnergy)
static G4ParticleTable * GetParticleTable()
static G4PionMinus * PionMinusDefinition()
static G4PionPlus * PionPlusDefinition()
static G4PionZero * PionZeroDefinition()
static G4Proton * ProtonDefinition()