Geant4  10.02.p03
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 
113  G4double av,as,ak,optafan;
114 };
115 
116 #define ECLDROWS 154
117 #define ECLDCOLS 99
118 
122 class G4Ecld {
123 
124 public:
125  G4Ecld() {};
126  ~G4Ecld() {};
127 
131  G4double ecgnz[ECLDROWS][ECLDCOLS];
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 
162  G4double akap,bet,homega,koeff,ifis;
163  G4int optshp, optxfis,optles,optcol;
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 
194  G4int optemd,optcha;
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 
214  G4double she[EENUCSIZE],xhe[XHESIZE][EENUCSIZE];
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 
462  G4double masp, mzsp, exsp, mrem;
463 
468 
473 
478 
483 
488 
493 
498 
503 
508 
513 
518 
519  G4double pcorem, mcorem, pxrem, pyrem, pzrem, erecrem;
520 
525 
530 
535 
540 
545 
550 
555 
560 
565 
570 
577 
585 
589  G4int itypcasc[VARNTPSIZE];
590 
591 
596 
601 
606 
611 
616 
621 
622 private:
624 };
625 
626 #endif
#define FBCOLS
void clear()
G4double spectatorEx
G4int spectatorZ
G4double getTotalMass()
G4int projType
G4double mzsp
G4int spectatorA
G4int particleIndex
#define ECLDROWS
G4double getTotalEnergy()
#define PACESIZEROWS
#define PACESIZECOLS
int G4int
Definition: G4Types.hh:78
G4bool needsFermiBreakup
#define VOLANTSIZE
static double P[]
G4double getMass(G4int particle)
G4double spectatorP2
double energy
Definition: plottest35.C:25
double A(double temperature)
#define EC2SUBROWS
Float_t Z
G4double spectatorT
bool G4bool
Definition: G4Types.hh:79
G4double massini
#define EC2SUBCOLS
void dump()
#define EENUCSIZE
#define XHESIZE
G4double spectatorP1
G4double mzini
vec_iX clear()
G4double total(Particle const *const p1, Particle const *const p2)
G4double pzrem
G4int getTotalBaryonNumber()
#define ECLDCOLS
G4int mulnevap
G4double getTotalThreeMomentum()
G4double eefac
G4double getMomentumSum()
void clear()
#define FBROWS
G4double spectatorM
G4double bimpact
double G4double
Definition: G4Types.hh:76
void addParticle(G4double A, G4double Z, G4double E, G4double P, G4double theta, G4double phi)
G4double spectatorP3
#define VARNTPSIZE
static const G4double alpha
G4double estfis
G4int optxfis
G4int mulncasc
G4double projEnergy
G4double exini