Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros 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// Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
28// Pekka Kaitaniemi, HIP (initial translation of ablav3p)
29// Aleksandra Kelic, GSI (ABLA07 code)
30// Davide Mancusi, CEA (contact person INCL)
31// Aatos Heikkinen, HIP (project coordination)
32//
33#define ABLAXX_IN_GEANT4_MODE 1
34
35#include "globals.hh"
36
37// Data structures needed by ABLA evaporation code.
38
39#ifndef G4AblaDataDefs_hh
40#define G4AblaDataDefs_hh 1
41
42#ifdef ABLAXX_IN_GEANT4_MODE
43#include "globals.hh"
44#else
45#include "G4INCLGeant4Compat.hh"
46#endif
47
48#include <cmath>
49
50// ABLA
51
52class G4Nevent {
53public:
56
58};
59
60// ABLA
61#define PACESIZEROWS 500
62#define PACESIZECOLS 500
63/**
64 * Masses.
65 */
66
67class G4Pace {
68
69public:
70 G4Pace() {};
71
72 ~G4Pace() {};
73
75};
76
77#define MASSIZEROWS 154
78#define MASSIZECOLS 13
79
80class G4Mexp {
81
82public:
83 G4Mexp() {};
84
85 ~G4Mexp() {};
86
90};
91
92#define EC2SUBROWS 154
93#define EC2SUBCOLS 99
94 /**
95 *
96 */
97
98class G4Ec2sub {
99public:
101
103
105
106 /**
107 * Dump the contents of the ecnz data table.
108 */
109 void dump() {
110 for(G4int i = 0; i < EC2SUBROWS; i++) {
111 for(G4int j = 0; j < EC2SUBCOLS; j++) {
112 //G4cout << ecnz[i][j] << " ";
113 }
114 // G4cout << G4endl;
115 }
116 }
117};
118
119class G4Ald {
120public:
121 /**
122 *
123 */
125 :av(0.0), as(0.0), ak(0.0), optafan(0.0)
126 {};
127 ~G4Ald() {};
128
130};
131
132#define ECLDROWS 154
133#define ECLDCOLS 99
134
135#define ECLDROWSbeta 251
136#define ECLDCOLSbeta 137
137/**
138 * Shell corrections and deformations.
139 */
140
141class G4Ecld {
142
143public:
144 G4Ecld() {};
146
147 /**
148 * Ground state shell correction frldm for a spherical ground state.
149 */
151
152 /**
153 * Shell correction for the saddle point (now: == 0).
154 */
156
157 /**
158 * Difference between deformed ground state and ldm value.
159 */
161
162 /**
163 * Alpha ground state deformation (this is not beta2!)
164 * beta2 = std::sqrt(5/(4pi)) * alpha
165 */
167
168 /**
169 * RMS function for lcp emission barriers
170 */
172
173 /**
174 * Beta2 deformations
175 */
177
178 /**
179 * Beta4 deformations
180 */
182};
183
184class G4Fiss {
185 /**
186 * Options and parameters for fission channel.
187 */
188
189public:
191 :bet(0.0), ifis(0.0), ucr(0.0), dcr(0.0), optshp(0), optxfis(0), optct(0), optcol(0),
192 at(0), zt(0)
193 {};
195
198};
199
200#define FBROWS 101
201#define FBCOLS 161
202/**
203 * Fission barriers.
204 */
205
206class G4Fb {
207
208public:
209 G4Fb() {};
210 ~G4Fb() {;}
211
212 // G4double efa[FBROWS][FBCOLS];
214};
215
216/**
217 * Options
218 */
219
220class G4Opt {
221
222public:
224 :optemd(0), optcha(0), optshpimf(0), optimfallowed(0), nblan0(0)
225 {};
226 ~G4Opt() {};
227
229};
230
231#define EENUCSIZE 2002
232#define XHESIZE 50
233class G4Eenuc {
234public:
236 for(G4int i = 0; i < EENUCSIZE; ++i) {
237 she[i] = 0.0;
238 }
239 for(G4int i = 0; i < XHESIZE; ++i) {
240 for(G4int j = 0; j < EENUCSIZE; ++j) {
241 xhe[i][j] = 0.0;
242 }
243 }
244 };
246
248};
249
250//#define VOLANTSIZE 200
251#define VOLANTSIZE 301
252/**
253 * Evaporation and fission output data.
254 */
255
256class G4Volant {
257
258public:
260 {
261 clear();
262 }
263
265
266 void clear()
267 {
268 for(G4int i = 0; i < VOLANTSIZE; i++) {
269 copied[i] = false;
270 acv[i] = 0;
271 zpcv[i] = 0;
272 pcv[i] = 0;
273 xcv[i] = 0;
274 ycv[i] = 0;
275 zcv[i] = 0;
276 iv = 0;
277 }
278 }
279
281 {
282 G4double total = 0.0;
283 for(G4int i = 0; i <= iv; i++) {
284 total += acv[i];
285 }
286 return total;
287 }
288
289 void dump()
290 {
291/*
292 G4double totA = 0.0, totZ = 0.0, totP = 0.0;
293 // G4cout <<"i \t ACV \t ZPCV \t PCV" << G4endl;
294 for(G4int i = 0; i <= iv; i++) {
295 if(i == 0 && acv[i] != 0) {
296 // G4cout <<"G4Volant: Particle stored at index " << i << G4endl;
297 }
298 totA += acv[i];
299 totZ += zpcv[i];
300 totP += pcv[i];
301 // G4cout << "volant" << i << "\t" << acv[i] << " \t " << zpcv[i] << " \t " << pcv[i] << G4endl;
302 }
303 // G4cout <<"Particle count index (iv) = " << iv << G4endl;
304 // G4cout <<"ABLA Total: A = " << totA << " Z = " << totZ << " momentum = " << totP << G4endl;
305*/
306 }
307
312};
313
314#define VARNTPSIZE 301
315class G4VarNtp {
316public:
318 clear();
319 };
320
322
323 /**
324 * Clear and initialize all variables and arrays.
325 */
326 void clear() {
327 particleIndex = 0;
328 projType = 0;
329 projEnergy = 0.0;
330 targetA = 0;
331 targetZ = 0;
332 masp = 0.0; mzsp = 0.0; exsp = 0.0; mrem = 0.0;
333 // To be deleted?
334 spectatorA = 0;
335 spectatorZ = 0;
336 spectatorEx = 0.0;
337 spectatorM = 0.0;
338 spectatorT = 0.0;
339 spectatorP1 = 0.0;
340 spectatorP2 = 0.0;
341 spectatorP3 = 0.0;
342 massini = 0;
343 mzini = 0;
344 exini = 0;
345 pcorem = 0;
346 mcorem = 0;
347 pxrem = 0;
348 pyrem = 0;
349 pzrem = 0;
350 erecrem = 0;
351 mulncasc = 0;
352 mulnevap = 0;
353 mulntot = 0;
354 bimpact = 0.0;
355 jremn = 0;
356 kfis = 0;
357 estfis = 0;
358 izfis = 0;
359 iafis = 0;
360 ntrack = 0;
361 needsFermiBreakup = false;
362 for(G4int i = 0; i < VARNTPSIZE; i++) {
363 itypcasc[i] = 0;
364 avv[i] = 0;
365 zvv[i] = 0;
366 svv[i] = 0;
367 enerj[i] = 0.0;
368 pxlab[i] = 0.0;
369 pylab[i] = 0.0;
370 pzlab[i] = 0.0;
371 full[i] = false;
372 }
373 }
374
375 /**
376 * Add a particle to the INCL/ABLA final output.
377 */
379 if(full[particleIndex]) {
380 // G4cout <<"A = " << Z << " Z = " << Z << G4endl;
381 } else {
382 avv[particleIndex] = (int) A;
383 zvv[particleIndex] = (int) Z;
384 enerj[particleIndex] = E;
385 plab[particleIndex] = P;
386 tetlab[particleIndex] = theta;
387 philab[particleIndex] = phi;
388 full[particleIndex] = true;
389 ntrack = particleIndex + 1;
390 particleIndex++;
391 }
392 }
393
394 /**
395 * Baryon number conservation check.
396 */
398 G4int baryonNumber = 0;
399 for(G4int i = 0; i < ntrack; i++) {
400 if(avv[i] > 0) {
401 baryonNumber += avv[i];
402 }
403 }
404 return baryonNumber;
405 }
406
407 /**
408 * Return total energy.
409 */
411 G4double energy = 0.0;
412 for(G4int i = 0; i < ntrack; i++) {
413 energy += std::sqrt(std::pow(plab[i], 2) + std::pow(getMass(i), 2)); // E^2 = p^2 + m^2
414 }
415
416 return energy;
417 }
418
419 /**
420 * Return total three momentum.
421 */
423 G4double momentum = 0;
424 for(G4int i = 0; i < ntrack; i++) {
425 momentum += plab[i];
426 }
427 return momentum;
428 }
429
431 G4double momentum = 0;
432 for(G4int i = 0; i < ntrack; i++) {
433 momentum += plab[i];
434 }
435 return momentum;
436 }
437
439 const G4double protonMass = 938.272;
440 const G4double neutronMass = 939.565;
441 const G4double pionMass = 139.57;
442
443 G4double mass = 0.0;
444 if(avv[particle] == 1 && zvv[particle] == 1) mass = protonMass;
445 if(avv[particle] == 1 && zvv[particle] == 0) mass = neutronMass;
446 if(avv[particle] == -1) mass = pionMass;
447 if(avv[particle] > 1)
448 mass = avv[particle] * protonMass + zvv[particle] * neutronMass;
449 return mass;
450 }
451
452 /**
453 * Dump debugging output.
454 */
455 void dump()
456 {
457/*
458 G4int nProton = 0, nNeutron = 0;
459 G4int nPiPlus = 0, nPiZero = 0, nPiMinus = 0;
460 G4int nH2 = 0, nHe3 = 0, nAlpha = 0;
461 G4int nGamma=0;
462 G4int nFragments = 0;
463 G4int nParticles = 0;
464 for(G4int i = 0; i < ntrack; i++) {
465 nParticles++;
466 if(avv[i] == 1 && zvv[i] == 1) nProton++; // Count multiplicities
467 if(avv[i] == 1 && zvv[i] == 0) nNeutron++;
468 if(avv[i] == 0 && zvv[i] == 0) nGamma++;
469 if(avv[i] == -1 && zvv[i] == 1) nPiPlus++;
470 if(avv[i] == -1 && zvv[i] == 0) nPiZero++;
471 if(avv[i] == -1 && zvv[i] == -1) nPiMinus++;
472 if(avv[i] == 2 && zvv[i] == 1) nH2++;
473 if(avv[i] == 3 && zvv[i] == 2) nHe3++;
474 if(avv[i] == 4 && zvv[i] == 2) nAlpha++;
475 if( zvv[i] > 2) nFragments++;
476 }
477*/
478 }
479
480 /**
481 * Projectile type.
482 */
484
485 /**
486 * Projectile energy.
487 */
489
490 /**
491 * Target mass number.
492 */
494
495 /**
496 * Target charge number.
497 */
499
500 /**
501 * Projectile spectator A, Z, Eex;
502 */
504
505 /**
506 * Spectator nucleus mass number for light ion projectile support.
507 */
509
510 /**
511 * Spectator nucleus charge number for light ion projectile support.
512 */
514
515 /**
516 * Spectator nucleus excitation energy for light ion projectile support.
517 */
519
520 /**
521 * Spectator nucleus mass.
522 */
524
525 /**
526 * Spectator nucleus kinetic energy.
527 */
529
530 /**
531 * Spectator nucleus momentum x-component.
532 */
534
535 /**
536 * Spectator nucleus momentum y-component.
537 */
539
540 /**
541 * Spectator nucleus momentum z-component.
542 */
544
545 /**
546 * A of the remnant.
547 */
549
550 /**
551 * Z of the remnant.
552 */
554
555 /**
556 * Excitation energy.
557 */
559
561
562 /**
563 * Cascade n multip.
564 */
566
567 /**
568 * Evaporation n multip.
569 */
571
572 /**
573 * Total n multip.
574 */
576
577 /**
578 * Impact parameter.
579 */
581
582 /**
583 * Remnant Intrinsic Spin.
584 */
586
587 /**
588 * Fission 1/0=Y/N.
589 */
591
592 /**
593 * Excit energy at fis.
594 */
596
597 /**
598 * Z of fiss nucleus.
599 */
601
602 /**
603 * A of fiss nucleus.
604 */
606
607 /**
608 * Number of particles.
609 */
611
612 /**
613 * The state of the index:
614 * true = reserved
615 * false = free
616 */
618
619 /**
620 * Does this nucleus require Fermi break-up treatment? Only
621 * applicable when used together with Geant4.
622 * true = do fermi break-up (and skip ABLA part)
623 * false = use ABLA
624 */
626
627 /**
628 * emitted in cascade (0) or evaporation (1).
629 */
631
632
633 /**
634 * A (-1 for pions).
635 */
637
638 /**
639 * Z
640 */
642
643 /**
644 * S (-1 for lambda_0).
645 */
647
648 /**
649 * Kinetic energy.
650 */
652
653 /**
654 * Momentum.
655 */
660
661 /**
662 * Theta angle.
663 */
665
666 /**
667 * Phi angle.
668 */
670
671private:
672 G4int particleIndex;
673};
674
675#endif
#define PACESIZEROWS
#define MASSIZECOLS
#define ECLDCOLSbeta
#define FBCOLS
#define ECLDROWSbeta
#define VARNTPSIZE
#define ECLDROWS
#define EENUCSIZE
#define ECLDCOLS
#define EC2SUBROWS
#define FBROWS
#define XHESIZE
#define VOLANTSIZE
#define MASSIZEROWS
#define EC2SUBCOLS
#define PACESIZECOLS
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
const G4int Z[17]
const G4double A[17]
G4double as
G4double optafan
G4double av
G4double ak
G4double ecnz[EC2SUBROWS][EC2SUBCOLS]
G4double vgsld[ECLDROWS][ECLDCOLS]
G4double ecfnz[ECLDROWS][ECLDCOLS]
G4double alpha[ECLDROWS][ECLDCOLS]
G4double ecgnz[ECLDROWS][ECLDCOLS]
G4double rms[ECLDROWS][ECLDCOLS]
G4double beta2[ECLDROWSbeta][ECLDCOLSbeta]
G4double beta4[ECLDROWSbeta][ECLDCOLSbeta]
G4double xhe[XHESIZE][EENUCSIZE]
G4double she[EENUCSIZE]
G4double efa[FBCOLS][FBROWS]
G4double ucr
G4int optxfis
G4int optcol
G4int optshp
G4double dcr
G4double bet
G4int optct
G4double ifis
G4double bind[MASSIZEROWS][MASSIZECOLS]
G4double massexp[MASSIZEROWS][MASSIZECOLS]
G4int mexpiop[MASSIZEROWS][MASSIZECOLS]
G4int optcha
G4int optimfallowed
G4int optemd
G4int nblan0
G4int optshpimf
G4double dm[PACESIZEROWS][PACESIZECOLS]
G4double spectatorM
G4double mcorem
G4bool full[VARNTPSIZE]
G4double spectatorP3
G4double massini
void clear()
G4double pzrem
G4double bimpact
G4double enerj[VARNTPSIZE]
G4double getMass(G4int particle)
G4double pylab[VARNTPSIZE]
void addParticle(G4double A, G4double Z, G4double E, G4double P, G4double theta, G4double phi)
G4double projEnergy
G4int svv[VARNTPSIZE]
G4int getTotalBaryonNumber()
G4double exini
G4int avv[VARNTPSIZE]
G4double pzlab[VARNTPSIZE]
G4double mrem
G4double estfis
G4double erecrem
G4double getTotalEnergy()
G4double mzini
G4int mulncasc
G4double plab[VARNTPSIZE]
G4double getMomentumSum()
G4double pxrem
G4int projType
G4double tetlab[VARNTPSIZE]
G4bool needsFermiBreakup
G4double philab[VARNTPSIZE]
G4double pyrem
G4int mulnevap
G4double getTotalThreeMomentum()
G4int itypcasc[VARNTPSIZE]
G4int zvv[VARNTPSIZE]
G4double exsp
G4double spectatorP1
G4double spectatorP2
G4int spectatorZ
G4double spectatorEx
G4double masp
G4double mzsp
G4double spectatorT
G4int spectatorA
G4double pcorem
G4double pxlab[VARNTPSIZE]
G4double xcv[VOLANTSIZE]
G4double pcv[VOLANTSIZE]
G4double zpcv[VOLANTSIZE]
G4bool copied[VOLANTSIZE]
G4double zcv[VOLANTSIZE]
void clear()
G4double getTotalMass()
G4double ycv[VOLANTSIZE]
G4double acv[VOLANTSIZE]