34 #include "Riostream.h"
41 #include "TTimeStamp.h"
77 void matriceRES(FILE, Int_t*, Double_t**, Double_t*, Int_t, Int_t, Int_t*);
88 Int_t
eccresiduoa(
const Double_t&, Int_t&, Int_t&, Double_t&,
const Double_t*);
95 Int_t
eccresiduop(
const Double_t&, Int_t&, Int_t&, Double_t&,
const Double_t*);
102 Int_t
eccresiduon(
const Double_t&, Int_t&, Int_t&, Double_t&,
const Double_t*);
114 Double_t
trovame(Int_t&, Int_t&);
130 void parabola(
const Int_t*,
const Double_t*,
const Int_t&, Double_t&, Double_t&, Double_t&);
146 Double_t
wei1(Int_t&, Int_t&);
156 void trovaAZ(
const Int_t&,
const Int_t&, Int_t&, Int_t&);
169 #define MALFA 3727409.0
179 Int_t
Z[3000],
A[3000];
191 void CascadeEvents(
const Char_t *finput, Int_t nbcas = 100,
const Char_t *nameOUT =
"toGEANT101.event")
193 for (
int i = 0; i < 3000; i++) {
Z[i] = 0;
A[i] = 0;
me[i] = 0;}
195 for (i = 0; i < 200; i++)
AGS[i] = 0;
197 FILE *fileIN = fopen(finput,
"r");
198 if ( fileIN == NULL ) {
199 printf(
" Cannot open file %s \n",finput);
204 FILE *fileMAS = fopen(
"mastab.dat",
"r");
205 if ( fileMAS == NULL ) {
206 printf(
" Cannot open file mastab.dat \n");
210 fgets (Line, 300, fileMAS);
211 sscanf(Line,
"%*c%*c%*d%*d%d%d%*s%*s%lf", &
Z[0], &
A[0], &
me[0]);
213 while (!feof(fileMAS)){
214 fgets (Line, 300, fileMAS);
215 sscanf(Line,
"%*c%*c%*d%*d%d%d%*s%lf", &
Z[i], &
A[i], &
me[i]);
222 Char_t buf[100], buf2[100], buf3[100];
223 while ((strcmp(buf,
"SUMMED")) || (strcmp(buf2,
"EVAPORATION")) || (strcmp(buf3,
"SPECTRA"))) {
224 fgets (Line, 300, fileIN);
225 sscanf(Line,
"%s %s %s", buf, buf2, buf3);
227 for (
int i=0; i < 3; i++) fgets (Line, 300, fileIN);
228 Float_t epart[50], dn[50], dp[50], da[50], eg[50], dg[50];
230 while (strcmp(buf,
"0")) {
231 fgets (Line, 300, fileIN);
232 sscanf(Line,
"%s", buf);
233 if (strcmp(buf,
"0")) {
234 sscanf(Line,
"%f%f%f%f %*41c %f %f", &epart[indice], &dn[indice], &dp[indice], &da[indice], &eg[indice], &dg[indice]);
238 Float_t dcumn[50], dcump[50], dcuma[50], dcumg[50];
239 dcumn[0] = 0; dcump[0] = 0; dcuma[0] = 0; dcumg[0] = 0;
240 for (
int i = 1; i < 50; i++){
241 dcumn[i] = dcumn[i-1] + dn[i-1];
242 dcump[i] = dcump[i-1] + dp[i-1];
243 dcuma[i] = dcuma[i-1] + da[i-1];
247 Float_t eamed, epmed, enmed;
248 Float_t soglia = dcuma[49]*0.5;
249 for (
int j = 0; j < 50; j++){
250 if (dcuma[j] < soglia) eamed = 1000 * epart[j];
252 soglia = dcump[49]*0.5;
253 for (
int j = 0; j < 50; j++){
254 if (dcump[j] < soglia) epmed = 1000 * epart[j];
256 soglia = dcumn[49]*0.5;
257 for (
int j = 0; j < 50; j++){
258 if (dcumn[j] < soglia) enmed = 1000 * epart[j];
260 cout <<
"eamed = " << eamed <<
" epmed = " << epmed <<
" enmed = " << enmed <<
'\n';
263 while (strcmp(buf,
"ENTR.CHANNEL,")) {
264 fgets (Line, 300, fileIN);
265 sscanf(Line,
"%s", buf);
267 Int_t zp, ap, zb, ab, zcn, acn;
269 sscanf(Line,
"%*s%*s%*s %d%d %d%d %f %d%d %f", &zp, &ap, &zb, &ab, &ep, &zcn, &acn, &ecccn);
275 Int_t numpari, numdispari;
281 for (i = 0; i < 29; i++){
282 if (
massa[i] % 2) {
for (j = 0; j < numdispari; j++) {total += pop[i][j];
if (pop[i][j] > 0) numpop++; }}
283 else {
for (j = 0; j < numpari; j++) {total += pop[i][j];
if (pop[i][j] > 0) numpop++;}}
286 Double_t popcum[29][6];
287 Double_t sumparz = 0;
288 for (i = 0; i < 29; i++) {
289 if (
massa[i] % 2) {
for (j = 0; j < numdispari; j++) {sumparz += pop[i][j] / total; popcum[i][j] = sumparz;}}
290 else {
for (j = 0; j < numpari; j++) {sumparz += pop[i][j] / total; popcum[i][j] = sumparz;}}
297 for (i = 0; i < 29; i++){
298 if (
massa[i] % 2) {
for (j = 0; j < numdispari; j++) {
if (pop[i][j] > 0) {
trovaAZ(i, j, atmp, ztmp);
if (atmp <
amin)
amin = atmp;
if (ztmp <
zmin)
zmin = ztmp;}}}
299 else {
for (j = 0; j < numpari; j++) {
if (pop[i][j] > 0) {
trovaAZ(i, j, atmp, ztmp);
if (atmp <
amin)
amin = atmp;
if (ztmp <
zmin)
zmin = ztmp;}}}
305 Double_t *mecalc =
new Double_t[
rettA *
rettZ];
306 cout <<
"Calcolo la massa dei nuclei coinvolti ...\n";
307 for (
int a = 0; a <
rettA; a++) {
308 for (
int z = 0; z <
rettZ; z++) {
309 mecalc[a * rettZ + z] =
trovame(a + amin, z + zmin);
319 for (i = 0; i < 29; i++){
320 if (
massa[i] % 2) {
for (j = 0; j < numdispari; j++) {
if (pop[i][j] > 0) {residuo[r] = i * 10 + j; r++;}}}
321 else {
for (j = 0; j < numpari; j++) {
if (pop[i][j] > 0) {residuo[r] = i * 10 + j; r++;}}}
323 for (
int enr=0; enr<r; enr++) {cout << enr <<
" - " << residuo[enr] <<
'\n';}
328 cout <<
"numpop: " << numpop <<
"\n";
329 for (
int r = 0; r < numpop; r++) {
331 Int_t posi = residuo[r] / 10;
332 Int_t posj = residuo[r] - 10 * posi;
334 trovaAZ(posi, posj, posA, posZ);
345 char chem[259][3] = {
"H",
"He",
"Li",
"Be",
"B",
"C",
"N",
"O",
"F",
"Ne",
"Na",
"Mg",
"Al",
"Si",
"P",
"S",
"Cl",
"Ar",
"K",
"Ca",
"Sc",
"Ti",
"V",
"Cr",
"Mn",
"Fe",
"Co",
"Ni",
"Cu",
"Zn",
"Ga",
"Ge",
"As",
"Se",
"Br",
"Kr",
"Rb",
"Sr",
"Y",
"Zr",
"Nb",
"Mo",
"Tc",
"Ru",
"Rh",
"Pd",
"Ag",
"Cd",
"In",
"Sn",
"Sb",
"Te",
"I",
"Xe",
"Cs",
"Ba",
"La",
"Ce",
"Pr",
"Nd",
"Pm",
"Sm",
"Eu",
"Gd",
"Tb",
"Dy",
"Ho",
"Er",
"Tm",
"Yb",
"Lu",
"Hf",
"Ta",
"W",
"Re",
"Os",
"Ir",
"Pt",
"Au",
"Hg",
"Tl",
"Pb",
"Bi",
"Po",
"At",
"Rn",
"Fr",
"Ra",
"Ac",
"Th",
"Pa",
"U",
"Np",
"Pu",
"Am",
"Cm",
"Bk",
"Cf",
"Es",
"Fm",
"Md",
"No",
"Lr",
"Rf",
"Db",
"Sg",
"Bh",
"Hs",
"Mt",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X",
"X"};
348 char nomefileAGS [500];
349 sprintf (nomefileAGS,
"../ags/%d%s_ensdf_A.ags", posA, chem[posZ-1]);
350 printf (
"nomefileAGS: %s\n", nomefileAGS);
351 Char_t *nameAGS = nomefileAGS;
354 FILE *fileAGS = fopen(nameAGS,
"r");
355 if ( fileAGS == NULL ) {
356 printf(
" File AGS non esiste\n");
360 if ( random[r].InitAGS(nameAGS) == 0 ) {
361 cout <<
" GLS level Scheme not correctly loaded " <<
endl <<
"Nucleo Z:" << posZ <<
" A:" << posA <<
" posi:" << posi <<
" posj:" << posj <<
endl;
365 cout <<
"Loaded GLS level Scheme for nucleo " << r <<
'\n';
369 cout << posA << chem[posZ-1] <<
" (" << posZ <<
") in posizione " << residuo[r] <<
" processato" <<
'\n';
370 cout <<
"numpop: " << numpop <<
" |r: " << r <<
'\n';
371 if (r == (numpop -1))
break;
374 cout << numpop <<
" FILE AGS CARICATI" <<
'\n';
378 FILE *fileOUT = fopen(nameOUT,
"w");
379 if ( fileOUT == NULL ) {
380 printf(
" Cannot open file %s \n",nameOUT);
return;
382 fprintf(fileOUT,
"FORMAT 4 4 \n");
383 fprintf(fileOUT,
"# \n");
384 fprintf(fileOUT,
"# PARTICLES GENERATED FROM CASCADE OUTPUT \n");
385 fprintf(fileOUT,
"# GAMMAS GENERATED FROM THE LEVEL SCHEME \n");
386 fprintf(fileOUT,
"# \n");
387 fprintf(fileOUT,
"REACTION %d %d %d %d %.1f\n", zp, ap, zb, ab, ep);
388 fprintf(fileOUT,
"# \n");
389 fprintf(fileOUT,
"EMITTED 4 1 2 3 7 \n");
390 fprintf(fileOUT,
"# \n");
399 Double_t rndmdb, rndmener;
400 Double_t nanos = TTimeStamp().GetNanoSec();
402 gRandom -> SetSeed(0);
403 for (i = 0; i < 29; i++)
for (j = 0; j < 6; j++) numev[i][j] = 0;
405 Int_t Aemitter,Zemitter;
412 for (k = 0; k < nbcas; k++) {
414 rndmdb = gRandom -> Rndm();
418 for (i = 0; i < 29; i++) {
419 if (
massa[i] % 2) {
for (j = 0; j < numdispari; j++) {
if ((rndmdb < popcum[i][j]) && (posOK == 0)) {posOK = 1; posi = i; posj = j;}}}
420 else {
for (j = 0; j < numpari; j++) {
if ((rndmdb < popcum[i][j]) && (posOK == 0)) {posOK = 1; posi = i; posj = j;}}}
427 trovaAZ(posi, posj, posA, posZ);
440 Int_t diffp = zcn - posZ;
441 Int_t diffn = acn - posA - diffp;
442 Int_t nalfa = 0, nprot = 0, nneut = 0;
443 while ((diffp >= 2) && (diffn >= 2)) {
454 Double_t* eaemitted =
new Double_t[nalfa];
455 Double_t* epemitted =
new Double_t[nprot];
456 Double_t* enemitted =
new Double_t[nneut];
458 Int_t risparopart = 0;
459 Double_t ridprob = 1;
465 eccemitter = ecccn * 1000;
467 for (
int i = 0; i < nalfa; i++){
468 if (eccemitter <= eamed) ok = 1;
470 rndmener = dcuma[49]*(gRandom -> Rndm()) * ridprob;
471 for (
int j = 0; j < 50; j++){
472 if (dcuma[j] > rndmener) {
473 eaemitted[i] = 1000 * (epart[j-1] - 0.5 + (rndmener - dcuma[j-1]) / da[j-1]);
475 eccresiduoa(eaemitted[i], Aemitter, Zemitter, eccemitter, mecalc);
481 for (
int i = 0; i < nprot; i++){
482 if (eccemitter <= epmed) ok = 1;
484 rndmener = dcump[49]*(gRandom -> Rndm()) * ridprob;
485 for (
int j = 0; j < 50; j++){
486 if (dcump[j] > rndmener) {
487 epemitted[i] = 1000 * (epart[j-1] - 0.5 + (rndmener - dcump[j-1]) / dp[j-1]);
489 eccresiduop(epemitted[i],Aemitter,Zemitter,eccemitter, mecalc);
495 for (
int i = 0; i < nneut; i++){
496 if (eccemitter <= enmed) ok = 1;
498 rndmener = dcumn[49]*(gRandom -> Rndm()) * ridprob;
499 for (
int j = 0; j < 50; j++){
500 if (dcumn[j] > rndmener) {
501 enemitted[i] = 1000 * (epart[j-1] - 0.5 + (rndmener - dcumn[j-1]) / dn[j-1]);
503 eccresiduon(enemitted[i],Aemitter,Zemitter,eccemitter, mecalc);
509 if (eccemitter <= 0) ok = 1;
510 if (ok == 1) {risparopart++; ridprob *= 0.9; }
514 fprintf(fileOUT,
" $ \n -101 \n ");
517 for (
int i = 0; i < nalfa; i++) fprintf(fileOUT,
"7 %.1lf 0. 0.\n ", eaemitted[i]);
518 for (
int i = 0; i < nprot; i++) fprintf(fileOUT,
"3 %.1lf 0. 0.\n ", epemitted[i]);
519 for (
int i = 0; i < nneut; i++) fprintf(fileOUT,
"2 %.1lf 0. 0.\n ", enemitted[i]);
533 while (residuo[resi] != (10 *posi + posj)) resi++;
534 cascataAGS(resi, 1, fileOUT, eccemitter, random);
536 if(k && !(k%1000)) {
printf(
"%10d eventi\r",k);}
546 for (i = 0; i < 29; i++) {
549 for (j = 0; j < jmax; j++) {cout << numev[i][j] <<
"\t";}
554 fprintf(fileOUT,
"# \n");
562 void cascataAGS(
const Int_t r, Int_t nbcas = 1, FILE *fileOUT,
const Double_t eccemitter,
const BaseGEM random[])
569 Int_t risparogamma = 0;
570 for (Int_t i = 0; i < nbcas; i++ ) {
571 if ((
AGS[r] == 1) && (risparogamma < 50)) {
574 for (Int_t j = 0; j < cas.GetSize(); j++ ) {
579 if (etotg >= eccemitter) {
587 fprintf(fileOUT,
"1 %.1f 0. %.1f \n ", (eccemitter - etotg), 0);
588 for (Int_t j = 0; j < cas.GetSize(); j++ ) {
590 fprintf(fileOUT,
"1 %.1lf 0. %.1f \n ",gam->
GetEnergy().
Get(),0.);
596 fprintf(fileOUT,
"1 %.1lf 0. %.1f \n ", eccemitter, 0.);
604 void matriceRES(FILE *fileIN, Int_t
massa[29], Double_t pop[29][6], Double_t popsum[29], Int_t& numpari, Int_t& numdispari, Int_t
NmenoZ[11])
609 fscanf(fileIN,
"%s", s);
611 while (outputopt == 0) {
612 while (strcmp(s,
"OUTPUT")) fscanf(fileIN,
"%s", s);
613 fscanf(fileIN,
"%s", s);
614 if (!strcmp(s,
"OPTIONS")) {outputopt = 1;}
618 for (
int i=0; i < 15; i++) {
619 fscanf(fileIN,
"%s",s);
620 if (!strcmp(s,
"------------------------------------------------------------------------------------")) {
break;}
623 fscanf(fileIN,
"%s", s);
625 for (
int i = 0; i < 11; i++) {fscanf(fileIN,
"%d", &NmenoZ[i]);}
628 if ((NmenoZ[0] * NmenoZ[0]) % 2) {
649 fgets (Line, 300, fileIN);
650 fgets (Line, 300, fileIN);
651 for (
int i = 0; i < 29; i++) {
652 fgets (Line, 300, fileIN);
653 sscanf(Line,
"%d",&massa[i]);
654 if ((massa[i]%2) == ((NmenoZ[0]*NmenoZ[0])%2)) sscanf(Line,
"%*d%lf%lf%lf%lf%lf%lf%lf", &pop[i][0], &pop[i][1], &pop[i][2], &pop[i][3], &pop[i][4], &pop[i][5], &popsum[i]);
655 else sscanf(Line,
"%*d%lf%lf%lf%lf%lf%lf", &pop[i][0], &pop[i][1], &pop[i][2], &pop[i][3], &pop[i][4], &popsum[i]);
663 Int_t
eccresiduoa(
const Double_t &eaemitted, Int_t &Aemitter, Int_t &Zemitter, Double_t &eccemitter,
const Double_t* mecalc)
666 Double_t u = 931494.043;
667 Double_t ma = 3728401.08760000021;
669 Double_t meemitter = mecalc[(Aemitter -
amin) *
rettZ + (Zemitter -
zmin)];
672 Double_t meresiduo = mecalc[(Aemitter - 4 -
amin) *
rettZ + (Zemitter - 2 -
zmin)];
674 eccemitter = eccemitter + Aemitter * u + meemitter - eaemitted - ma - sqrt(((Aemitter-4)*u + meresiduo) * ((Aemitter-4)*u + meresiduo) + eaemitted * eaemitted + 2 * eaemitted * ma);
682 Int_t
eccresiduop(
const Double_t &epemitted, Int_t &Aemitter, Int_t &Zemitter, Double_t &eccemitter,
const Double_t* mecalc)
685 Double_t u = 931494.043;
686 Double_t mp = 938783.013500000038;
688 Double_t meemitter = mecalc[(Aemitter -
amin) *
rettZ + (Zemitter -
zmin)];
691 Double_t meresiduo = mecalc[(Aemitter - 1 -
amin) *
rettZ + (Zemitter - 1 -
zmin)];
693 eccemitter = eccemitter + Aemitter * u + meemitter - epemitted - mp - sqrt(((Aemitter-1)*u + meresiduo) * ((Aemitter-1)*u + meresiduo) + epemitted * epemitted + 2 * epemitted * mp);
701 Int_t
eccresiduon(
const Double_t &enemitted, Int_t &Aemitter, Int_t &Zemitter, Double_t &eccemitter,
const Double_t* mecalc)
704 Double_t u = 931494.043;
705 Double_t mn = 939565.360100000021;
707 Double_t meemitter = mecalc[(Aemitter -
amin) *
rettZ + (Zemitter -
zmin)];
710 Double_t meresiduo = mecalc[(Aemitter - 1 -
amin) *
rettZ + (Zemitter -
zmin)];
712 eccemitter = eccemitter + Aemitter * u + meemitter - enemitted - mn - sqrt(((Aemitter-1)*u + meresiduo) * ((Aemitter-1)*u + meresiduo) + enemitted * enemitted + 2 * enemitted * mn);
724 if ((Znuc ==
Z[z]) && (Anuc ==
A[z])) {
return me[z];}
730 if (
A[z] == Anuc) numA++;
743 massawei =
wei1(Anuc, Znuc);
753 cout <<
"numnuclei " <<
numnuclei <<
" | ";
754 for (
int a = 1; a <
A[numnuclei - 1]; a++) {
756 if (A[i] == a) {
posizA[a] = i;
break;}
759 cout <<
"posizioneAin_me OK" <<
'\n';
764 void parabola(
const Int_t x[],
const Double_t y[],
const Int_t &Nnuc, Double_t &a, Double_t &
b, Double_t &c)
766 Int_t* x2 =
new Int_t[Nnuc];
767 Int_t* x3 =
new Int_t[Nnuc];
768 Int_t* x4 =
new Int_t[Nnuc];
769 Double_t* xy =
new Double_t[Nnuc];
770 Double_t* x2y =
new Double_t[Nnuc];
771 for (
int i = 0; i < Nnuc; i++) {
773 x3[i] = x2[i] * x[i];
774 x4[i] = x3[i] * x[i];
776 x2y[i] = xy[i] * x[i];
778 Int_t Sx, Sx2, Sx3, Sx4;
779 Double_t Sy, Sxy, Sx2y;
780 for (
int i = 0; i < Nnuc; i++) {
799 TMatrixD sum(3, 3, sumel,0);
804 TMatrixD sumold = sum;
830 a = sum[0][0] * Sx2y + sum[0][1] * Sxy + sum[0][2] * Sy;
831 b = sum[1][0] * Sx2y + sum[1][1] * Sxy + sum[1][2] * Sy;
832 c = sum[2][0] * Sx2y + sum[2][1] * Sxy + sum[2][2] * Sy;
843 Int_t* Znp =
new Int_t[
numA];
844 Double_t* menp =
new Double_t[
numA];
846 for (
int i = 0; i <
numA; i++) {
847 if ((
Z[
posizA[Anuc] + i]%2) == Znuc%2) {
848 Znp[numAp] =
Z[
posizA[Anuc] + i];
849 menp[numAp] =
me[posizA[Anuc] + i];
853 parabola(Znp, menp, numAp, a, b, c);
854 massa = a * Znuc * Znuc + b * Znuc + c;
859 Int_t* Zn =
new Int_t[
numA];
860 Double_t* men =
new Double_t[
numA];
863 for (
int i=0; i<
numA; i++){
865 men[i] =
me[posizA[Anuc] + i];
869 massa = a * Znuc * Znuc + b * Znuc +c;
877 Double_t
wei1(Int_t &a, Int_t &z)
883 mas -=
AS * pow(a, (2./3.));
884 mas -=
AC * z * (z-1)/pow(a, (1./3.));
885 mas -=
AAS * pow((a-2*z), 2.)/a;
891 if (a%2 == 1) delt = 0.;
892 else if (z%2 == 1) delt = -
APa * pow(a, -0.75);
893 else delt =
APa * pow(a, -0.75);
900 mas -= a * 931494.043;
905 void trovaAZ(
const Int_t &posi,
const Int_t &posj, Int_t &posA, Int_t &posZ)
913 if ((
massa[posi] % 2) == ((
NmenoZ[0] *
NmenoZ[0]) % 2)) {posNmZ = NmenoZ[2 * posj];}
914 else {posNmZ = NmenoZ[2 * posj + 1];}
916 posZ = (posA - posNmZ) / 2;
void CascadeEvents(const Char_t *finput, Int_t nbcas=100, const Char_t *nameOUT="toGEANT101.event")
printf("******************************************************************** \n")
A cascade is a list of links.
Class to get randomly cascades of gammas on the basis of a level scheme.
void cascataAGS(const Int_t, Int_t, FILE, const Double_t, const BaseGEM)
This function calculates and writes in a file the gamma cascades.
void matriceRES(FILE, Int_t *, Double_t **, Double_t *, Int_t, Int_t, Int_t *)
This function loads the residue nuclei matrix from CASCADE output.
Int_t eccresiduoa(const Double_t &, Int_t &, Int_t &, Double_t &, const Double_t *)
This function calculates the excitation energy after the emission of an alpha particle.
Double_t trovame(Int_t &, Int_t &)
This function return nucleus mass for a given A and Z.
virtual Data_T Get() const
get the value, can be overloaded
Double_t parabolame(Int_t &, Int_t &, Int_t &)
This function calculates the mass of a nucleus using the 3 coefficients calculated with void parabola...
Double_t wei1(Int_t &, Int_t &)
This function calculates the mass of a nucleus using a semiempirical formula.
Int_t eccresiduop(const Double_t &, Int_t &, Int_t &, Double_t &, const Double_t *)
This function calculate the excitation energy after the emission of a proton.
virtual Measure< Float_t > & GetEnergy()
to get/modify the gamma-ray energy and its error
void parabola(const Int_t *, const Double_t *, const Int_t &, Double_t &, Double_t &, Double_t &)
This function calculates the coefficients of the parabola for the calculation of the nucleus mass fro...
void posizioneAin_me()
A bit of output for debug.
Int_t eccresiduon(const Double_t &, Int_t &, Int_t &, Double_t &, const Double_t *)
This function calculate the excitation energy after the emission of a neutron.
virtual Int_t DoCascade(TSeqCollection &cascade, Option_t *opt="")
cascade simulation
ADF::LogMessage & endl(ADF::LogMessage &log)
A GammaLink binds two nuclear levels.
void trovaAZ(const Int_t &, const Int_t &, Int_t &, Int_t &)
This function calculates A and Z of the nucleus from its position in the residue nuclei matrix...