Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
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]