Geant4 10.7.0
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 G4double totA = 0.0, totZ = 0.0, totP = 0.0;
292 // G4cout <<"i \t ACV \t ZPCV \t PCV" << G4endl;
293 for(G4int i = 0; i <= iv; i++) {
294 if(i == 0 && acv[i] != 0) {
295 // G4cout <<"G4Volant: Particle stored at index " << i << G4endl;
296 }
297 totA += acv[i];
298 totZ += zpcv[i];
299 totP += pcv[i];
300 // G4cout << "volant" << i << "\t" << acv[i] << " \t " << zpcv[i] << " \t " << pcv[i] << G4endl;
301 }
302 // G4cout <<"Particle count index (iv) = " << iv << G4endl;
303 // G4cout <<"ABLA Total: A = " << totA << " Z = " << totZ << " momentum = " << totP << G4endl;
304 }
305
310};
311
312#define VARNTPSIZE 301
313class G4VarNtp {
314public:
316 clear();
317 };
318
320
321 /**
322 * Clear and initialize all variables and arrays.
323 */
324 void clear() {
325 particleIndex = 0;
326 projType = 0;
327 projEnergy = 0.0;
328 targetA = 0;
329 targetZ = 0;
330 masp = 0.0; mzsp = 0.0; exsp = 0.0; mrem = 0.0;
331 // To be deleted?
332 spectatorA = 0;
333 spectatorZ = 0;
334 spectatorEx = 0.0;
335 spectatorM = 0.0;
336 spectatorT = 0.0;
337 spectatorP1 = 0.0;
338 spectatorP2 = 0.0;
339 spectatorP3 = 0.0;
340 massini = 0;
341 mzini = 0;
342 exini = 0;
343 pcorem = 0;
344 mcorem = 0;
345 pxrem = 0;
346 pyrem = 0;
347 pzrem = 0;
348 erecrem = 0;
349 mulncasc = 0;
350 mulnevap = 0;
351 mulntot = 0;
352 bimpact = 0.0;
353 jremn = 0;
354 kfis = 0;
355 estfis = 0;
356 izfis = 0;
357 iafis = 0;
358 ntrack = 0;
359 needsFermiBreakup = false;
360 for(G4int i = 0; i < VARNTPSIZE; i++) {
361 itypcasc[i] = 0;
362 avv[i] = 0;
363 zvv[i] = 0;
364 svv[i] = 0;
365 enerj[i] = 0.0;
366 pxlab[i] = 0.0;
367 pylab[i] = 0.0;
368 pzlab[i] = 0.0;
369 full[i] = false;
370 }
371 }
372
373 /**
374 * Add a particle to the INCL/ABLA final output.
375 */
377 if(full[particleIndex]) {
378 // G4cout <<"A = " << Z << " Z = " << Z << G4endl;
379 } else {
380 avv[particleIndex] = (int) A;
381 zvv[particleIndex] = (int) Z;
382 enerj[particleIndex] = E;
383 plab[particleIndex] = P;
384 tetlab[particleIndex] = theta;
385 philab[particleIndex] = phi;
386 full[particleIndex] = true;
387 ntrack = particleIndex + 1;
388 particleIndex++;
389 }
390 }
391
392 /**
393 * Baryon number conservation check.
394 */
396 G4int baryonNumber = 0;
397 for(G4int i = 0; i < ntrack; i++) {
398 if(avv[i] > 0) {
399 baryonNumber += avv[i];
400 }
401 }
402 return baryonNumber;
403 }
404
405 /**
406 * Return total energy.
407 */
409 G4double energy = 0.0;
410 for(G4int i = 0; i < ntrack; i++) {
411 energy += std::sqrt(std::pow(plab[i], 2) + std::pow(getMass(i), 2)); // E^2 = p^2 + m^2
412 }
413
414 return energy;
415 }
416
417 /**
418 * Return total three momentum.
419 */
421 G4double momentum = 0;
422 for(G4int i = 0; i < ntrack; i++) {
423 momentum += plab[i];
424 }
425 return momentum;
426 }
427
429 G4double momentum = 0;
430 for(G4int i = 0; i < ntrack; i++) {
431 momentum += plab[i];
432 }
433 return momentum;
434 }
435
437 const G4double protonMass = 938.272;
438 const G4double neutronMass = 939.565;
439 const G4double pionMass = 139.57;
440
441 G4double mass = 0.0;
442 if(avv[particle] == 1 && zvv[particle] == 1) mass = protonMass;
443 if(avv[particle] == 1 && zvv[particle] == 0) mass = neutronMass;
444 if(avv[particle] == -1) mass = pionMass;
445 if(avv[particle] > 1)
446 mass = avv[particle] * protonMass + zvv[particle] * neutronMass;
447 return mass;
448 }
449
450 /**
451 * Dump debugging output.
452 */
453 void dump() {
454 G4int nProton = 0, nNeutron = 0;
455 G4int nPiPlus = 0, nPiZero = 0, nPiMinus = 0;
456 G4int nH2 = 0, nHe3 = 0, nAlpha = 0;
457 G4int nGamma=0;
458 G4int nFragments = 0;
459 G4int nParticles = 0;
460 for(G4int i = 0; i < ntrack; i++) {
461 nParticles++;
462 if(avv[i] == 1 && zvv[i] == 1) nProton++; // Count multiplicities
463 if(avv[i] == 1 && zvv[i] == 0) nNeutron++;
464 if(avv[i] == 0 && zvv[i] == 0) nGamma++;
465 if(avv[i] == -1 && zvv[i] == 1) nPiPlus++;
466 if(avv[i] == -1 && zvv[i] == 0) nPiZero++;
467 if(avv[i] == -1 && zvv[i] == -1) nPiMinus++;
468 if(avv[i] == 2 && zvv[i] == 1) nH2++;
469 if(avv[i] == 3 && zvv[i] == 2) nHe3++;
470 if(avv[i] == 4 && zvv[i] == 2) nAlpha++;
471 if( zvv[i] > 2) nFragments++;
472 }
473 }
474
475 /**
476 * Projectile type.
477 */
479
480 /**
481 * Projectile energy.
482 */
484
485 /**
486 * Target mass number.
487 */
489
490 /**
491 * Target charge number.
492 */
494
495 /**
496 * Projectile spectator A, Z, Eex;
497 */
499
500 /**
501 * Spectator nucleus mass number for light ion projectile support.
502 */
504
505 /**
506 * Spectator nucleus charge number for light ion projectile support.
507 */
509
510 /**
511 * Spectator nucleus excitation energy for light ion projectile support.
512 */
514
515 /**
516 * Spectator nucleus mass.
517 */
519
520 /**
521 * Spectator nucleus kinetic energy.
522 */
524
525 /**
526 * Spectator nucleus momentum x-component.
527 */
529
530 /**
531 * Spectator nucleus momentum y-component.
532 */
534
535 /**
536 * Spectator nucleus momentum z-component.
537 */
539
540 /**
541 * A of the remnant.
542 */
544
545 /**
546 * Z of the remnant.
547 */
549
550 /**
551 * Excitation energy.
552 */
554
556
557 /**
558 * Cascade n multip.
559 */
561
562 /**
563 * Evaporation n multip.
564 */
566
567 /**
568 * Total n multip.
569 */
571
572 /**
573 * Impact parameter.
574 */
576
577 /**
578 * Remnant Intrinsic Spin.
579 */
581
582 /**
583 * Fission 1/0=Y/N.
584 */
586
587 /**
588 * Excit energy at fis.
589 */
591
592 /**
593 * Z of fiss nucleus.
594 */
596
597 /**
598 * A of fiss nucleus.
599 */
601
602 /**
603 * Number of particles.
604 */
606
607 /**
608 * The state of the index:
609 * true = reserved
610 * false = free
611 */
613
614 /**
615 * Does this nucleus require Fermi break-up treatment? Only
616 * applicable when used together with Geant4.
617 * true = do fermi break-up (and skip ABLA part)
618 * false = use ABLA
619 */
621
622 /**
623 * emitted in cascade (0) or evaporation (1).
624 */
626
627
628 /**
629 * A (-1 for pions).
630 */
632
633 /**
634 * Z
635 */
637
638 /**
639 * S (-1 for lambda_0).
640 */
642
643 /**
644 * Kinetic energy.
645 */
647
648 /**
649 * Momentum.
650 */
655
656 /**
657 * Theta angle.
658 */
660
661 /**
662 * Phi angle.
663 */
665
666private:
667 G4int particleIndex;
668};
669
670#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 A(double temperature)
double G4double
Definition: G4Types.hh:83
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
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]