Geant4  10.02.p01
G4AblaDataDefs.hh
Go to the documentation of this file.
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 // ABLAXX statistical de-excitation model
27 // Pekka Kaitaniemi, HIP (translation)
28 // Christelle Schmidt, IPNL (fission code)
29 // Davide Mancusi, CEA (contact person INCL/ABLA)
30 // Aatos Heikkinen, HIP (project coordination)
31 //
32 #define ABLAXX_IN_GEANT4_MODE 1
33 
34 #include "globals.hh"
35 
36 // Data structures needed by ABLA evaporation code.
37 
38 #ifndef G4AblaDataDefs_hh
39 #define G4AblaDataDefs_hh 1
40 
41 #ifdef ABLAXX_IN_GEANT4_MODE
42 #include "globals.hh"
43 #else
44 #include "G4INCLGeant4Compat.hh"
45 #endif
46 
47 #include <cmath>
48 
49 // ABLA
50 
51 class G4Nevent {
52 public:
53  G4Nevent() {};
54  ~G4Nevent() {};
55 
56  G4int ii;
57 };
58 
59 // ABLA
60 #define PACESIZEROWS 500
61 #define PACESIZECOLS 500
62 
66 class G4Pace {
67 
68 public:
69  G4Pace() {};
70 
71  ~G4Pace() {};
72 
74 };
75 
76 #define EC2SUBROWS 154
77 #define EC2SUBCOLS 99
78 
82 class G4Ec2sub {
83 public:
84  G4Ec2sub() {};
85 
86  ~G4Ec2sub() {};
87 
89 
93  void dump() {
94  for(G4int i = 0; i < EC2SUBROWS; i++) {
95  for(G4int j = 0; j < EC2SUBCOLS; j++) {
96  //G4cout << ecnz[i][j] << " ";
97  }
98  // G4cout << G4endl;
99  }
100  }
101 };
102 
103 class G4Ald {
104 public:
109  :av(0.0), as(0.0), ak(0.0), optafan(0.0)
110  {};
111  ~G4Ald() {};
112 
114 };
115 
116 #define ECLDROWS 154
117 #define ECLDCOLS 99
118 
122 class G4Ecld {
123 
124 public:
125  G4Ecld() {};
126  ~G4Ecld() {};
127 
132 
137 
142 
148 };
149 
150 class G4Fiss {
155 public:
157  :akap(0.0), bet(0.0), homega(0.0), koeff(0.0), ifis(0.0),
158  optshp(0), optxfis(0), optles(0), optcol(0)
159  {};
160  ~G4Fiss() {};
161 
164 };
165 
166 #define FBROWS 101
167 #define FBCOLS 161
168 
172 class G4Fb {
173 
174 public:
175  G4Fb() {};
176  ~G4Fb() {;}
177 
178  // G4double efa[FBROWS][FBCOLS];
180 };
181 
186 class G4Opt {
187 
188 public:
190  :optemd(0), optcha(0), eefac(0.0)
191  {};
192  ~G4Opt() {};
193 
196 };
197 
198 #define EENUCSIZE 2002
199 #define XHESIZE 50
200 class G4Eenuc {
201 public:
203  for(G4int i = 0; i < EENUCSIZE; ++i) {
204  she[i] = 0.0;
205  }
206  for(G4int i = 0; i < XHESIZE; ++i) {
207  for(G4int j = 0; j < EENUCSIZE; ++j) {
208  xhe[i][j] = 0.0;
209  }
210  }
211  };
212  ~G4Eenuc() {};
213 
215 };
216 
217 //#define VOLANTSIZE 200
218 #define VOLANTSIZE 301
219 
223 class G4Volant {
224 
225 public:
227  {
228  clear();
229  }
230 
231  ~G4Volant() {};
232 
233  void clear()
234  {
235  for(G4int i = 0; i < VOLANTSIZE; i++) {
236  copied[i] = false;
237  acv[i] = 0;
238  zpcv[i] = 0;
239  pcv[i] = 0;
240  xcv[i] = 0;
241  ycv[i] = 0;
242  zcv[i] = 0;
243  iv = 0;
244  }
245  }
246 
248  {
249  G4double total = 0.0;
250  for(G4int i = 0; i <= iv; i++) {
251  total += acv[i];
252  }
253  return total;
254  }
255 
256  void dump()
257  {
258  G4double totA = 0.0, totZ = 0.0, totP = 0.0;
259  // G4cout <<"i \t ACV \t ZPCV \t PCV" << G4endl;
260  for(G4int i = 0; i <= iv; i++) {
261  if(i == 0 && acv[i] != 0) {
262  // G4cout <<"G4Volant: Particle stored at index " << i << G4endl;
263  }
264  totA += acv[i];
265  totZ += zpcv[i];
266  totP += pcv[i];
267  // G4cout << "volant" << i << "\t" << acv[i] << " \t " << zpcv[i] << " \t " << pcv[i] << G4endl;
268  }
269  // G4cout <<"Particle count index (iv) = " << iv << G4endl;
270  // G4cout <<"ABLA Total: A = " << totA << " Z = " << totZ << " momentum = " << totP << G4endl;
271  }
272 
277 };
278 
279 #define VARNTPSIZE 301
280 class G4VarNtp {
281 public:
283  clear();
284  };
285 
286  ~G4VarNtp() {};
287 
291  void clear() {
292  particleIndex = 0;
293  projType = 0;
294  projEnergy = 0.0;
295  targetA = 0;
296  targetZ = 0;
297  masp = 0.0; mzsp = 0.0; exsp = 0.0; mrem = 0.0;
298  // To be deleted?
299  spectatorA = 0;
300  spectatorZ = 0;
301  spectatorEx = 0.0;
302  spectatorM = 0.0;
303  spectatorT = 0.0;
304  spectatorP1 = 0.0;
305  spectatorP2 = 0.0;
306  spectatorP3 = 0.0;
307  massini = 0;
308  mzini = 0;
309  exini = 0;
310  pcorem = 0;
311  mcorem = 0;
312  pxrem = 0;
313  pyrem = 0;
314  pzrem = 0;
315  erecrem = 0;
316  mulncasc = 0;
317  mulnevap = 0;
318  mulntot = 0;
319  bimpact = 0.0;
320  jremn = 0;
321  kfis = 0;
322  estfis = 0;
323  izfis = 0;
324  iafis = 0;
325  ntrack = 0;
326  needsFermiBreakup = false;
327  for(G4int i = 0; i < VARNTPSIZE; i++) {
328  itypcasc[i] = 0;
329  avv[i] = 0;
330  zvv[i] = 0;
331  enerj[i] = 0.0;
332  plab[i] = 0.0;
333  tetlab[i] = 0.0;
334  philab[i] = 0.0;
335  full[i] = false;
336  }
337  }
338 
343  if(full[particleIndex]) {
344  // G4cout <<"A = " << Z << " Z = " << Z << G4endl;
345  } else {
346  avv[particleIndex] = (int) A;
347  zvv[particleIndex] = (int) Z;
348  enerj[particleIndex] = E;
349  plab[particleIndex] = P;
350  tetlab[particleIndex] = theta;
351  philab[particleIndex] = phi;
352  full[particleIndex] = true;
353  ntrack = particleIndex + 1;
354  particleIndex++;
355  }
356  }
357 
362  G4int baryonNumber = 0;
363  for(G4int i = 0; i < ntrack; i++) {
364  if(avv[i] > 0) {
365  baryonNumber += avv[i];
366  }
367  }
368  return baryonNumber;
369  }
370 
375  G4double energy = 0.0;
376  for(G4int i = 0; i < ntrack; i++) {
377  energy += std::sqrt(std::pow(plab[i], 2) + std::pow(getMass(i), 2)); // E^2 = p^2 + m^2
378  }
379 
380  return energy;
381  }
382 
387  G4double momentum = 0;
388  for(G4int i = 0; i < ntrack; i++) {
389  momentum += plab[i];
390  }
391  return momentum;
392  }
393 
395  G4double momentum = 0;
396  for(G4int i = 0; i < ntrack; i++) {
397  momentum += plab[i];
398  }
399  return momentum;
400  }
401 
402  G4double getMass(G4int particle) {
403  const G4double protonMass = 938.272;
404  const G4double neutronMass = 939.565;
405  const G4double pionMass = 139.57;
406 
407  G4double mass = 0.0;
408  if(avv[particle] == 1 && zvv[particle] == 1) mass = protonMass;
409  if(avv[particle] == 1 && zvv[particle] == 0) mass = neutronMass;
410  if(avv[particle] == -1) mass = pionMass;
411  if(avv[particle] > 1)
412  mass = avv[particle] * protonMass + zvv[particle] * neutronMass;
413  return mass;
414  }
415 
419  void dump() {
420  G4int nProton = 0, nNeutron = 0;
421  G4int nPiPlus = 0, nPiZero = 0, nPiMinus = 0;
422  G4int nH2 = 0, nHe3 = 0, nAlpha = 0;
423  G4int nFragments = 0;
424  G4int nParticles = 0;
425  for(G4int i = 0; i < ntrack; i++) {
426  nParticles++;
427  if(avv[i] == 1 && zvv[i] == 1) nProton++; // Count multiplicities
428  if(avv[i] == 1 && zvv[i] == 0) nNeutron++;
429  if(avv[i] == -1 && zvv[i] == 1) nPiPlus++;
430  if(avv[i] == -1 && zvv[i] == 0) nPiZero++;
431  if(avv[i] == -1 && zvv[i] == -1) nPiMinus++;
432  if(avv[i] == 2 && zvv[i] == 1) nH2++;
433  if(avv[i] == 3 && zvv[i] == 2) nHe3++;
434  if(avv[i] == 4 && zvv[i] == 2) nAlpha++;
435  if( zvv[i] > 2) nFragments++;
436  }
437  }
438 
443 
448 
453 
458 
463 
468 
473 
478 
483 
488 
493 
498 
503 
508 
513 
518 
520 
525 
530 
535 
540 
545 
550 
555 
560 
565 
570 
577 
585 
590 
591 
596 
601 
606 
611 
616 
621 
622 private:
624 };
625 
626 #endif
#define FBCOLS
void clear()
G4double homega
G4double spectatorEx
Spectator nucleus excitation energy for light ion projectile support.
G4double akap
G4int optcha
G4int targetZ
Target charge number.
G4double dm[PACESIZEROWS][PACESIZECOLS]
G4int spectatorZ
Spectator nucleus charge number for light ion projectile support.
G4double getTotalMass()
G4double optafan
G4int projType
Projectile type.
G4double mzsp
G4double plab[VARNTPSIZE]
Momentum.
G4int spectatorA
Spectator nucleus mass number for light ion projectile support.
G4int optles
G4double pcorem
G4double ycv[VOLANTSIZE]
G4int particleIndex
#define ECLDROWS
G4bool copied[VOLANTSIZE]
G4bool full[VARNTPSIZE]
The state of the index: true = reserved false = free.
G4double getTotalEnergy()
Return total energy.
#define PACESIZEROWS
G4int avv[VARNTPSIZE]
A (-1 for pions).
void dump()
Dump debugging output.
G4double vgsld[ECLDROWS][ECLDCOLS]
Difference between deformed ground state and ldm value.
#define PACESIZECOLS
G4double ecnz[EC2SUBROWS][EC2SUBCOLS]
G4double pxrem
G4double koeff
int G4int
Definition: G4Types.hh:78
G4double enerj[VARNTPSIZE]
Kinetic energy.
G4bool needsFermiBreakup
Does this nucleus require Fermi break-up treatment? Only applicable when used together with Geant4...
G4double xcv[VOLANTSIZE]
#define VOLANTSIZE
static double P[]
G4int izfis
Z of fiss nucleus.
G4double getMass(G4int particle)
G4int targetA
Target mass number.
G4double erecrem
Options.
G4double spectatorP2
Spectator nucleus momentum y-component.
G4double mcorem
double A(double temperature)
Evaporation and fission output data.
#define EC2SUBROWS
Shell corrections and deformations.
G4double spectatorT
Spectator nucleus kinetic energy.
G4double zpcv[VOLANTSIZE]
bool G4bool
Definition: G4Types.hh:79
G4double alpha[ECLDROWS][ECLDCOLS]
Alpha ground state deformation (this is not beta2!) beta2 = std::sqrt(5/(4pi)) * alpha.
G4int jremn
Remnant Intrinsic Spin.
G4double massini
A of the remnant.
G4double xhe[XHESIZE][EENUCSIZE]
G4double exsp
G4double tetlab[VARNTPSIZE]
Theta angle.
#define EC2SUBCOLS
G4int itypcasc[VARNTPSIZE]
emitted in cascade (0) or evaporation (1).
G4double bet
G4Fiss()
Options and parameters for fission channel.
G4double masp
Projectile spectator A, Z, Eex;.
void dump()
Dump the contents of the ecnz data table.
#define EENUCSIZE
G4double mrem
#define XHESIZE
G4double spectatorP1
Spectator nucleus momentum x-component.
G4double she[EENUCSIZE]
G4double mzini
Z of the remnant.
G4double pcv[VOLANTSIZE]
G4double acv[VOLANTSIZE]
G4double as
Masses.
G4int kfis
Fission 1/0=Y/N.
G4int optcol
G4int ntrack
Number of particles.
G4double ak
G4double efa[FBCOLS][FBROWS]
G4double zcv[VOLANTSIZE]
G4double total(Particle const *const p1, Particle const *const p2)
G4double pzrem
G4int optshp
Fission barriers.
G4double ecgnz[ECLDROWS][ECLDCOLS]
Ground state shell correction frldm for a spherical ground state.
G4int getTotalBaryonNumber()
Baryon number conservation check.
G4double energy(const ThreeVector &p, const G4double m)
#define ECLDCOLS
G4int mulnevap
Evaporation n multip.
G4double getTotalThreeMomentum()
Return total three momentum.
G4double ecfnz[ECLDROWS][ECLDCOLS]
Shell correction for the saddle point (now: == 0).
G4double eefac
G4double getMomentumSum()
void clear()
Clear and initialize all variables and arrays.
G4double philab[VARNTPSIZE]
Phi angle.
#define FBROWS
G4int zvv[VARNTPSIZE]
Z.
G4double spectatorM
Spectator nucleus mass.
G4double bimpact
Impact parameter.
G4int iafis
A of fiss nucleus.
G4double ifis
double G4double
Definition: G4Types.hh:76
void addParticle(G4double A, G4double Z, G4double E, G4double P, G4double theta, G4double phi)
Add a particle to the INCL/ABLA final output.
G4double spectatorP3
Spectator nucleus momentum z-component.
#define VARNTPSIZE
G4double estfis
Excit energy at fis.
G4int optxfis
G4double av
G4int mulncasc
Cascade n multip.
G4double projEnergy
Projectile energy.
G4int optemd
G4double pyrem
G4int mulntot
Total n multip.
G4double exini
Excitation energy.