Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 /**
63  * Masses.
64  */
65 
66 class G4Pace {
67 
68 public:
69  G4Pace() {};
70 
71  ~G4Pace() {};
72 
74 };
75 
76 #define EC2SUBROWS 154
77 #define EC2SUBCOLS 99
78  /**
79  *
80  */
81 
82 class G4Ec2sub {
83 public:
84  G4Ec2sub() {};
85 
86  ~G4Ec2sub() {};
87 
89 
90  /**
91  * Dump the contents of the ecnz data table.
92  */
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:
105  /**
106  *
107  */
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 /**
119  * Shell corrections and deformations.
120  */
121 
122 class G4Ecld {
123 
124 public:
125  G4Ecld() {};
126  ~G4Ecld() {};
127 
128  /**
129  * Ground state shell correction frldm for a spherical ground state.
130  */
132 
133  /**
134  * Shell correction for the saddle point (now: == 0).
135  */
137 
138  /**
139  * Difference between deformed ground state and ldm value.
140  */
142 
143  /**
144  * Alpha ground state deformation (this is not beta2!)
145  * beta2 = std::sqrt(5/(4pi)) * alpha
146  */
148 };
149 
150 class G4Fiss {
151  /**
152  * Options and parameters for fission channel.
153  */
154 
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 /**
169  * Fission barriers.
170  */
171 
172 class G4Fb {
173 
174 public:
175  G4Fb() {};
176  ~G4Fb() {;}
177 
178  // G4double efa[FBROWS][FBCOLS];
180 };
181 
182 /**
183  * Options
184  */
185 
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 /**
220  * Evaporation and fission output data.
221  */
222 
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 
288  /**
289  * Clear and initialize all variables and arrays.
290  */
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 
339  /**
340  * Add a particle to the INCL/ABLA final output.
341  */
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 
358  /**
359  * Baryon number conservation check.
360  */
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 
371  /**
372  * Return total energy.
373  */
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 
383  /**
384  * Return total three momentum.
385  */
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 
416  /**
417  * Dump debugging output.
418  */
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 
439  /**
440  * Projectile type.
441  */
443 
444  /**
445  * Projectile energy.
446  */
448 
449  /**
450  * Target mass number.
451  */
453 
454  /**
455  * Target charge number.
456  */
458 
459  /**
460  * Projectile spectator A, Z, Eex;
461  */
463 
464  /**
465  * Spectator nucleus mass number for light ion projectile support.
466  */
468 
469  /**
470  * Spectator nucleus charge number for light ion projectile support.
471  */
473 
474  /**
475  * Spectator nucleus excitation energy for light ion projectile support.
476  */
478 
479  /**
480  * Spectator nucleus mass.
481  */
483 
484  /**
485  * Spectator nucleus kinetic energy.
486  */
488 
489  /**
490  * Spectator nucleus momentum x-component.
491  */
493 
494  /**
495  * Spectator nucleus momentum y-component.
496  */
498 
499  /**
500  * Spectator nucleus momentum z-component.
501  */
503 
504  /**
505  * A of the remnant.
506  */
508 
509  /**
510  * Z of the remnant.
511  */
513 
514  /**
515  * Excitation energy.
516  */
518 
520 
521  /**
522  * Cascade n multip.
523  */
525 
526  /**
527  * Evaporation n multip.
528  */
530 
531  /**
532  * Total n multip.
533  */
535 
536  /**
537  * Impact parameter.
538  */
540 
541  /**
542  * Remnant Intrinsic Spin.
543  */
545 
546  /**
547  * Fission 1/0=Y/N.
548  */
550 
551  /**
552  * Excit energy at fis.
553  */
555 
556  /**
557  * Z of fiss nucleus.
558  */
560 
561  /**
562  * A of fiss nucleus.
563  */
565 
566  /**
567  * Number of particles.
568  */
570 
571  /**
572  * The state of the index:
573  * true = reserved
574  * false = free
575  */
577 
578  /**
579  * Does this nucleus require Fermi break-up treatment? Only
580  * applicable when used together with Geant4.
581  * true = do fermi break-up (and skip ABLA part)
582  * false = use ABLA
583  */
585 
586  /**
587  * emitted in cascade (0) or evaporation (1).
588  */
590 
591 
592  /**
593  * A (-1 for pions).
594  */
596 
597  /**
598  * Z
599  */
601 
602  /**
603  * Kinetic energy.
604  */
606 
607  /**
608  * Momentum.
609  */
611 
612  /**
613  * Theta angle.
614  */
616 
617  /**
618  * Phi angle.
619  */
621 
622 private:
623  G4int particleIndex;
624 };
625 
626 #endif
#define FBCOLS
void clear()
G4double homega
G4double spectatorEx
G4double akap
G4int optcha
G4double dm[PACESIZEROWS][PACESIZECOLS]
G4int spectatorZ
G4double getTotalMass()
G4double optafan
G4int projType
typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData)
G4double mzsp
G4double plab[VARNTPSIZE]
G4int spectatorA
G4int optles
G4double pcorem
G4double ycv[VOLANTSIZE]
#define ECLDROWS
G4bool copied[VOLANTSIZE]
G4bool full[VARNTPSIZE]
G4double getTotalEnergy()
#define PACESIZEROWS
G4int avv[VARNTPSIZE]
G4double vgsld[ECLDROWS][ECLDCOLS]
#define PACESIZECOLS
G4double ecnz[EC2SUBROWS][EC2SUBCOLS]
G4double pxrem
G4double koeff
int G4int
Definition: G4Types.hh:78
G4double enerj[VARNTPSIZE]
G4bool needsFermiBreakup
G4double xcv[VOLANTSIZE]
#define VOLANTSIZE
G4double getMass(G4int particle)
G4double erecrem
double precision function energy(A, Z)
Definition: dpm25nuc6.f:4106
G4double spectatorP2
G4double mcorem
#define EC2SUBROWS
G4double spectatorT
G4double zpcv[VOLANTSIZE]
bool G4bool
Definition: G4Types.hh:79
G4double alpha[ECLDROWS][ECLDCOLS]
G4double massini
G4double xhe[XHESIZE][EENUCSIZE]
G4double exsp
G4double tetlab[VARNTPSIZE]
#define EC2SUBCOLS
G4int itypcasc[VARNTPSIZE]
G4double bet
G4double masp
void dump()
#define EENUCSIZE
G4double mrem
#define XHESIZE
G4double spectatorP1
G4double she[EENUCSIZE]
G4double mzini
G4double pcv[VOLANTSIZE]
G4double acv[VOLANTSIZE]
G4double as
G4int optcol
G4double ak
G4double efa[FBCOLS][FBROWS]
G4double zcv[VOLANTSIZE]
G4double total(Particle const *const p1, Particle const *const p2)
G4double pzrem
G4int optshp
G4double ecgnz[ECLDROWS][ECLDCOLS]
G4int getTotalBaryonNumber()
#define ECLDCOLS
G4int mulnevap
G4double getTotalThreeMomentum()
G4double ecfnz[ECLDROWS][ECLDCOLS]
G4double eefac
G4double getMomentumSum()
void clear()
G4double philab[VARNTPSIZE]
#define FBROWS
G4int zvv[VARNTPSIZE]
G4double spectatorM
G4double bimpact
G4double ifis
double G4double
Definition: G4Types.hh:76
void addParticle(G4double A, G4double Z, G4double E, G4double P, G4double theta, G4double phi)
G4double spectatorP3
#define VARNTPSIZE
G4double estfis
G4int optxfis
G4double av
G4int mulncasc
G4double projEnergy
G4int optemd
G4double pyrem
G4double exini