Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/abla/src/G4Abla.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /processes/hadronic/models/abla/src/G4Abla.cc (Version 11.3.0) and /processes/hadronic/models/abla/src/G4Abla.cc (Version 10.7.p2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // ABLAXX statistical de-excitation model          26 // ABLAXX statistical de-excitation model
 27 // Jose Luis Rodriguez, UDC (translation from  <<  27 // Jose Luis Rodriguez, GSI (translation from ABLA07 and contact person)
 28 // Pekka Kaitaniemi, HIP (initial translation      28 // Pekka Kaitaniemi, HIP (initial translation of ablav3p)
 29 // Aleksandra Kelic, GSI (ABLA07 code)             29 // Aleksandra Kelic, GSI (ABLA07 code)
 30 // Davide Mancusi, CEA (contact person INCL)       30 // Davide Mancusi, CEA (contact person INCL)
 31 // Aatos Heikkinen, HIP (project coordination)     31 // Aatos Heikkinen, HIP (project coordination)
 32 //                                                 32 //
 33                                                    33 
                                                   >>  34 #define ABLAXX_IN_GEANT4_MODE 1
                                                   >>  35 
 34 #include "globals.hh"                              36 #include "globals.hh"
 35 #include <cmath>                               << 
 36 #include <memory>                              << 
 37 #include <time.h>                                  37 #include <time.h>
                                                   >>  38 #include <cmath>
 38                                                    39 
 39 #include "G4Abla.hh"                               40 #include "G4Abla.hh"
 40 #include "G4AblaDataDefs.hh"                   << 
 41 #include "G4AblaDataFile.hh"                       41 #include "G4AblaDataFile.hh"
 42 #include "G4AblaRandom.hh"                         42 #include "G4AblaRandom.hh"
 43                                                <<  43 #ifdef ABLAXX_IN_GEANT4_MODE
 44 G4Abla::G4Abla(G4VarNtp* aVarntp)              <<  44 G4Abla::G4Abla(G4Volant *aVolant, G4VarNtp *aVarntp)
 45 {                                              <<  45 #else
 46     verboseLevel = 0;                          <<  46 G4Abla::G4Abla(G4INCL::Config *config, G4Volant *aVolant, G4VarNtp *aVarntp)
 47     ilast = 0;                                 <<  47 #endif
 48     varntp = static_cast<G4VarNtp*>(aVarntp);  <<  48 {
 49                                                <<  49 #ifndef ABLAXX_IN_GEANT4_MODE
 50     verboseLevel = 0;                          <<  50   theConfig = config;
 51     gammaemission = 0; // 0 presaddle, 1 posts <<  51 #endif
 52     T_freeze_out_in = T_freeze_out = 0.;       <<  52   verboseLevel = 0;
 53     Ainit = 0;                                 <<  53   ilast = 0;
 54     Zinit = 0;                                 <<  54   volant = aVolant; // ABLA internal particle data
 55     Sinit = 0;                                 <<  55   volant->iv = 0;
 56     IEV_TAB_SSC = 0;                           <<  56   varntp = aVarntp; // Output data structure
 57                                                <<  57   varntp->ntrack = 0;
 58     ald = std::make_unique<G4Ald>();           <<  58  
 59     ec2sub = std::make_unique<G4Ec2sub>();     <<  59   verboseLevel = 0;
 60     ecld = std::make_unique<G4Ecld>();         <<  60   gammaemission= 0;// 0 presaddle, 1 postsaddle
 61     masses = std::make_unique<G4Mexp>();       <<  61   T_freeze_out = 0.;
 62     fb = std::make_unique<G4Fb>();             <<  62   Ainit=0;
 63     fiss = std::make_unique<G4Fiss>();         <<  63   Zinit=0;
 64     opt = std::make_unique<G4Opt>();           <<  64   Sinit=0;
                                                   >>  65 
                                                   >>  66   pace = new G4Pace();
                                                   >>  67   ald = new G4Ald();
                                                   >>  68   eenuc = new G4Eenuc();
                                                   >>  69   ec2sub = new G4Ec2sub();
                                                   >>  70   ecld = new G4Ecld();
                                                   >>  71   masses = new G4Mexp();
                                                   >>  72   fb = new G4Fb();
                                                   >>  73   fiss = new G4Fiss();
                                                   >>  74   opt = new G4Opt();
                                                   >>  75 }
                                                   >>  76 
                                                   >>  77 void G4Abla::setVerboseLevel(G4int level)
                                                   >>  78 {
                                                   >>  79   verboseLevel = level;
                                                   >>  80 }
                                                   >>  81 
                                                   >>  82 G4Abla::~G4Abla()
                                                   >>  83 {
                                                   >>  84   delete pace;
                                                   >>  85   delete ald;
                                                   >>  86   delete eenuc;
                                                   >>  87   delete ec2sub;
                                                   >>  88   delete ecld;
                                                   >>  89   delete masses;
                                                   >>  90   delete fb;
                                                   >>  91   delete fiss;
                                                   >>  92   delete opt;
 65 }                                                  93 }
 66                                                    94 
 67 void G4Abla::setVerboseLevel(G4int level) { ve << 
 68                                                << 
 69 // Main interface to the evaporation without l     95 // Main interface to the evaporation without lambda evaporation
 70 void G4Abla::DeexcitationAblaxx(G4int nucleusA <<  96 void G4Abla::DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber)
 71                                 G4int nucleusZ << 
 72                                 G4double excit << 
 73                                 G4double angul << 
 74                                 G4double momX, << 
 75                                 G4double momY, << 
 76                                 G4double momZ, << 
 77                                 G4int eventnum << 
 78 {                                                  97 {
 79     DeexcitationAblaxx(nucleusA, nucleusZ, exc <<  98  DeexcitationAblaxx(nucleusA,nucleusZ,excitationEnergy,angularMomentum,momX,momY,momZ,eventnumber,0);
 80 }                                                  99 }
 81                                                   100 
 82 // Main interface to the evaporation with lamb    101 // Main interface to the evaporation with lambda emission
 83 void G4Abla::DeexcitationAblaxx(G4int nucleusA << 102 void G4Abla::DeexcitationAblaxx(G4int nucleusA, G4int nucleusZ, G4double excitationEnergy, G4double angularMomentum, G4double momX, G4double momY, G4double momZ, G4int eventnumber, G4int nucleusS)
 84                                 G4int nucleusZ << 103 {
 85                                 G4double excit << 104 
 86                                 G4double angul << 105   const G4double amu = 931.4940; //  MeV/C^2
 87                                 G4double momX, << 106   const G4double C = 29.9792458; // cm/ns
 88                                 G4double momY, << 107 
 89                                 G4double momZ, << 108   SetParametersG4(nucleusZ, nucleusA);
 90                                 G4int eventnum << 109 
 91                                 G4int nucleusS << 110   mult10:
 92 {                                              << 111   G4int IS = 0;
 93                                                << 112 
 94     const G4double amu = 931.4940; //  MeV/C^2 << 113   if(nucleusS>0)nucleusS=0;// S=1 from INCL ????
 95     const G4double C = 29.9792458; // cm/ns    << 114 
 96                                                << 115   G4int NbLam0 = std::abs(nucleusS);
 97     SetParametersG4(nucleusZ, nucleusA);       << 116 
 98                                                << 117   Ainit=-1*nucleusA;
 99 mult10:                                        << 118   Zinit=-1*nucleusZ;
100     G4int IS = 0;                              << 119   Sinit=-1*nucleusS;
101                                                << 120 
102     varntp->clear(); // Clean up an initialize << 121   G4double aff = 0.0;
103                                                << 122   G4double zff = 0.0;
104     if (nucleusS > 0)                          << 123   G4int ZFP1 = 0, AFP1 = 0, AFPIMF = 0, ZFPIMF = 0, ZFP2 = 0, AFP2 = 0, SFP1 = 0, SFP2 = 0, SFPIMF = 0;
105         nucleusS = 0; // S=1 from INCL ????    << 124   G4double vx_eva = 0.0, vy_eva = 0.0, vz_eva = 0.0;  
106                                                << 125   G4double VX_PREF=0.,VY_PREF=0.,VZ_PREF=00,VP1X,VP1Y,VP1Z,VXOUT,VYOUT,VZOUT,V_CM[3],VFP1_CM[3],VFP2_CM[3],VIMF_CM[3],VX2OUT,VY2OUT,VZ2OUT;
107     G4int NbLam0 = std::abs(nucleusS);         << 126   G4double zf = 0.0, af = 0.0, mtota = 0.0, tkeimf = 0.0, jprf0=0.;
108                                                << 127   G4int ff = 0,afpnew=0,zfpnew=0,aprfp=0,zprfp=0,IOUNSTABLE=0,ILOOP=0,IEV_TAB=0,IEV_TAB_TEMP=0;
109     Ainit = -1 * nucleusA;                     << 128   G4int fimf = 0,INMIN=0,INMAX=0;
110     Zinit = -1 * nucleusZ;                     << 129   G4int ftype=0;//,ftype1=0;
111     Sinit = -1 * nucleusS;                     << 130   G4int inum = eventnumber;
112                                                << 131   G4int inttype = 0;
113     G4double aff = 0.0;                        << 132   opt->optimfallowed=1;
114     G4double zff = 0.0;                        << 133 
115     G4int ZFP1 = 0, AFP1 = 0, AFPIMF = 0, ZFPI << 134   if(fiss->zt>56){
116     G4double vx_eva = 0.0, vy_eva = 0.0, vz_ev << 135   fiss->ifis = 1;
117     G4double VX_PREF = 0., VY_PREF = 0., VZ_PR << 136   }else {
118              VFP2_CM[3], VIMF_CM[3], VX2OUT, V << 137   fiss->ifis = 0;
119     G4double zf = 0.0, af = 0.0, mtota = 0.0,  << 138   }
120     G4int ff = 0, afpnew = 0, zfpnew = 0, aprf << 139 
121           IEV_TAB_TEMP = 0;                    << 140   if(NbLam0>0){
122     G4int fimf = 0, INMIN = 0, INMAX = 0;      << 141    opt->nblan0 = NbLam0;
123     G4int ftype = 0; //,ftype1=0;              << 142   }
124     G4int inum = eventnumber;                  << 143   
125     G4int inttype = 0;                         << 144   G4double aprf = (G4double) nucleusA;
126     opt->optimfallowed = 1;                    << 145   G4double zprf = (G4double) nucleusZ;
127                                                << 146   G4double ee = excitationEnergy;
128     if (fiss->zt > 56)                         << 147   G4double jprf = angularMomentum; // actually root-mean-squared
129     {                                          << 148 
130         fiss->ifis = 1;                        << 149   G4double pxrem = momX;
131     }                                          << 150   G4double pyrem = momY;
132     else                                       << 151   G4double pzrem = momZ;
133     {                                          << 152   G4double zimf,aimf;
134         fiss->ifis = 0;                        << 153 
135     }                                          << 154   volant->clear(); // Clean up an initialize ABLA output.
136                                                << 155   varntp->clear(); // Clean up an initialize ABLA output.
137     if (NbLam0 > 0)                            << 156   varntp->ntrack = 0;
138     {                                          << 157   varntp->kfis = 0;
139         opt->nblan0 = NbLam0;                  << 158   volant->iv = 0;
140     }                                          << 159   gammaemission=0;
141                                                << 160   G4double T_init=0.,T_diff=0.,a_tilda=0.,a_tilda_BU=0., EE_diff=0., EINCL=0., A_FINAL=0., Z_FINAL=0., E_FINAL=0.;
142     G4double aprf = (G4double)nucleusA;        << 161 
143     G4double zprf = (G4double)nucleusZ;        << 162   G4double A_diff=0.,ASLOPE1,ASLOPE2,A_ACC,ABU_SLOPE, ABU_SUM=0., AMEM=0., ZMEM=0., EMEM=0., JMEM=0., PX_BU_SUM = 0.0, PY_BU_SUM = 0.0, PZ_BU_SUM = 0.0, ETOT_SUM=0., P_BU_SUM=0., ZBU_SUM=0.,Z_Breakup_sum=0.,A_Breakup,Z_Breakup,N_Breakup,G_SYMM,CZ,Sigma_Z,Z_Breakup_Mean,ZTEMP=0.,ATEMP=0.;
144     G4double ee = excitationEnergy;            << 163 
145     G4double jprf = angularMomentum; // actual << 164   G4double ETOT_PRF=0.0,PXPRFP=0.,PYPRFP=0.,PZPRFP=0.,PPRFP=0., VX1_BU=0., VY1_BU=0., VZ1_BU=0., VBU2=0., GAMMA_REL=1.0, Eexc_BU_SUM=0., VX_BU_SUM = 0., VY_BU_SUM =0.,VZ_BU_SUM =0., E_tot_BU=0.,EKIN_BU=0.,ZIMFBU=0., AIMFBU=0., ZFFBU=0., AFFBU=0., AFBU=0., ZFBU=0., EEBU=0.,TKEIMFBU=0.,vx_evabu=0.,vy_evabu=0.,vz_evabu=0., Bvalue_BU=0.,P_BU=0.,ETOT_BU=1.,PX_BU=0.,PY_BU=0.,PZ_BU=0.,VX2_BU=0.,VY2_BU=0.,VZ2_BU=0.;
146                                                << 165 
147     G4double pxrem = momX;                     << 166   G4int ABU_DIFF,ZBU_DIFF,NBU_DIFF;
148     G4double pyrem = momY;                     << 167   G4int INEWLOOP = 0, ILOOPBU=0;
149     G4double pzrem = momZ;                     << 168 
150     G4double zimf, aimf;                       << 169   G4double BU_TAB_TEMP[200][6], BU_TAB_TEMP1[200][6]; 
151                                                << 170   G4double EV_TAB_TEMP[200][6],EV_TEMP[200][6];
152     gammaemission = 0;                         << 171   G4int IMEM_BU[200], IMEM=0;
153     G4double T_init = 0., T_diff = 0., a_tilda << 172 
154              Z_FINAL = 0., E_FINAL = 0.;       << 173  if(nucleusA<1){
155                                                << 174   std::cout << "Error - Remnant with a mass number A below 1." << std::endl;
156     G4double A_diff = 0., ASLOPE1, ASLOPE2, A_ << 175  //INCL_ERROR("Remnant with a mass number A below 1.");
157              PX_BU_SUM = 0.0, PY_BU_SUM = 0.0, << 176  return;
158              Z_Breakup_sum = 0., A_Breakup, Z_ << 177  }
159              ATEMP = 0.;                       << 178 
160                                                << 179   for(G4int j=0;j<3;j++){
161     G4double ETOT_PRF = 0.0, PXPRFP = 0., PYPR << 180    V_CM[j]=0.;
162              VBU2 = 0., GAMMA_REL = 1.0, Eexc_ << 181    VFP1_CM[j]=0.;
163              E_tot_BU = 0., EKIN_BU = 0., ZIMF << 182    VFP2_CM[j]=0.;
164              EEBU = 0., TKEIMFBU = 0., vx_evab << 183    VIMF_CM[j]=0.;
165              ETOT_BU = 1., PX_BU = 0., PY_BU = << 184   }
166                                                << 185 
167     G4int ABU_DIFF, ZBU_DIFF, NBU_DIFF;        << 186    for(G4int I1=0;I1<200;I1++){
168     G4int INEWLOOP = 0, ILOOPBU = 0;           << 187        for(G4int I2 = 0;I2<12;I2++)
169                                                << 188         BU_TAB[I1][I2] = 0.0;
170     G4double BU_TAB_TEMP[indexpart][6], BU_TAB << 189        for(G4int I2 = 0;I2<6;I2++){
171     G4double EV_TAB_TEMP[indexpart][6], EV_TEM << 190         BU_TAB_TEMP[I1][I2] = 0.0;
172     G4int IMEM_BU[indexpart], IMEM = 0;        << 191         BU_TAB_TEMP1[I1][I2] = 0.0;
173                                                << 192         EV_TAB_TEMP[I1][I2] = 0.0;
174     if (nucleusA < 1)                          << 193         EV_TAB[I1][I2] = 0.0;
175     {                                          << 194         EV_TAB_SSC[I1][I2] = 0.0;
176         std::cout << "Error - Remnant with a m << 195         EV_TEMP[I1][I2] = 0.0;
177         // INCL_ERROR("Remnant with a mass num << 196        }
178         return;                                << 197    }
179     }                                          << 198 
                                                   >> 199   G4int idebug = 0;
                                                   >> 200   if(idebug == 1) {
                                                   >> 201     zprf =   81.;
                                                   >> 202     aprf =   201.;
                                                   >> 203 //    ee =   86.5877686;
                                                   >> 204     ee = 100.0;
                                                   >> 205     jprf =   10.;
                                                   >> 206     zf =   0.;
                                                   >> 207     af =   0.;
                                                   >> 208     mtota =   0.;
                                                   >> 209     ff =  1;
                                                   >> 210     inttype =  0;
                                                   >> 211     //inum =  2;
                                                   >> 212   }
                                                   >> 213 //
                                                   >> 214       G4double AAINCL = aprf;
                                                   >> 215       G4double ZAINCL = zprf;
                                                   >> 216       EINCL = ee;
                                                   >> 217 //
                                                   >> 218 // Velocity after the first stage of reaction (INCL)
                                                   >> 219 // For coupling with INCL, comment the lines below, and use output
                                                   >> 220 // of INCL as pxincl, pyincl,pzincl
                                                   >> 221 //
                                                   >> 222       G4double pincl = std::sqrt(pxrem*pxrem + pyrem*pyrem + pzrem*pzrem);
                                                   >> 223 // PPRFP is in MeV/c
                                                   >> 224       G4double ETOT_incl = std::sqrt(pincl*pincl + (AAINCL * amu)*(AAINCL * amu));
                                                   >> 225       G4double VX_incl = C * pxrem / ETOT_incl;
                                                   >> 226       G4double VY_incl = C * pyrem / ETOT_incl;
                                                   >> 227       G4double VZ_incl = C * pzrem / ETOT_incl;
                                                   >> 228 //
                                                   >> 229 // Multiplicity in the break-up event
                                                   >> 230       G4int  IMULTBU = 0;
                                                   >> 231       G4int  IMULTIFR = 0;
                                                   >> 232       G4int  I_Breakup=0;
                                                   >> 233       G4int  NbLamprf= 0;
                                                   >> 234            IEV_TAB = 0;
                                                   >> 235 /*
                                                   >> 236 C     Set maximum temperature for sequential decay (evaporation)
                                                   >> 237 C     Remove additional energy by simultaneous break up
                                                   >> 238 C                          (vaporisation or multi-fragmentation)
                                                   >> 239 
                                                   >> 240 C     Idea: If the temperature of the projectile spectator exceeds
                                                   >> 241 c           the limiting temperature T_freeze_out, the additional
                                                   >> 242 C           energy which is present in the spectator is used for
                                                   >> 243 C           a stage of simultaneous break up. It is either the
                                                   >> 244 C           simultaneous emission of a gaseous phase or the simultaneous
                                                   >> 245 C           emission of several intermediate-mass fragments. Only one
                                                   >> 246 C           piece of the projectile spectator (assumed to be the largest
                                                   >> 247 C           one) is kept track.
                                                   >> 248 
                                                   >> 249 C        MVR, KHS, October 2001
                                                   >> 250 C        KHS, AK 2007 - Masses from the power low; slope parameter dependent on
                                                   >> 251 C                      energy  per nucleon; symmtery-energy coeff. dependent on
                                                   >> 252 C                      energy per nucleon.
                                                   >> 253 
                                                   >> 254 c       Clear BU_TAB (array of multifragmentation products)
                                                   >> 255 */
                                                   >> 256         if(T_freeze_out_in >= 0.0){
                                                   >> 257           T_freeze_out = T_freeze_out_in;
                                                   >> 258         }else{
                                                   >> 259          T_freeze_out = max(9.33*std::exp(-0.00282*AAINCL),5.5);
                                                   >> 260 //         ! See: J. Natowitz et al, PRC65 (2002) 034618
                                                   >> 261 //        T_freeze_out=DMAX1(9.0D0*DEXP(-0.001D0*AAABRA),
                                                   >> 262 //     &                     5.5D0)
                                                   >> 263         }
                                                   >> 264 //
                                                   >> 265         a_tilda = ald->av*aprf + ald->as*std::pow(aprf,2.0/3.0) + ald->ak*std::pow(aprf,1.0/3.0);
                                                   >> 266 
                                                   >> 267         T_init = std::sqrt(EINCL/a_tilda);
                                                   >> 268 
                                                   >> 269         T_diff = T_init - T_freeze_out;
180                                                   270 
181     for (G4int j = 0; j < 3; j++)              << 271         if(T_diff>0.1 && zprf>2. && (aprf-zprf)>0.){
182     {                                          << 272         // T_Diff is set to be larger than 0.1 MeV in order to avoid strange cases for which
183         V_CM[j] = 0.;                          << 273         // T_Diff is of the order of 1.e-3 and less.
184         VFP1_CM[j] = 0.;                       << 
185         VFP2_CM[j] = 0.;                       << 
186         VIMF_CM[j] = 0.;                       << 
187     }                                          << 
188                                                << 
189     for (G4int I1 = 0; I1 < indexpart; I1++)   << 
190     {                                          << 
191         for (G4int I2 = 0; I2 < 12; I2++)      << 
192             BU_TAB[I1][I2] = 0.0;              << 
193         for (G4int I2 = 0; I2 < 6; I2++)       << 
194         {                                      << 
195             BU_TAB_TEMP[I1][I2] = 0.0;         << 
196             BU_TAB_TEMP1[I1][I2] = 0.0;        << 
197             EV_TAB_TEMP[I1][I2] = 0.0;         << 
198             EV_TAB[I1][I2] = 0.0;              << 
199             EV_TAB_SSC[I1][I2] = 0.0;          << 
200             EV_TEMP[I1][I2] = 0.0;             << 
201         }                                      << 
202     }                                          << 
203                                                << 
204     G4int idebug = 0;                          << 
205     if (idebug == 1)                           << 
206     {                                          << 
207         zprf = 81.;                            << 
208         aprf = 201.;                           << 
209         //    ee =   86.5877686;               << 
210         ee = 100.0;                            << 
211         jprf = 10.;                            << 
212         zf = 0.;                               << 
213         af = 0.;                               << 
214         mtota = 0.;                            << 
215         ff = 1;                                << 
216         inttype = 0;                           << 
217         // inum =  2;                          << 
218     }                                          << 
219     //                                         << 
220     G4double AAINCL = aprf;                    << 
221     G4double ZAINCL = zprf;                    << 
222     EINCL = ee;                                << 
223     //                                         << 
224     // Velocity after the first stage of react << 
225     // For coupling with INCL, comment the lin << 
226     // of INCL as pxincl, pyincl,pzincl        << 
227     //                                         << 
228     G4double pincl = std::sqrt(pxrem * pxrem + << 
229     // PPRFP is in MeV/c                       << 
230     G4double ETOT_incl = std::sqrt(pincl * pin << 
231     G4double VX_incl = C * pxrem / ETOT_incl;  << 
232     G4double VY_incl = C * pyrem / ETOT_incl;  << 
233     G4double VZ_incl = C * pzrem / ETOT_incl;  << 
234     //                                         << 
235     // Multiplicity in the break-up event      << 
236     G4int IMULTBU = 0;                         << 
237     G4int IMULTIFR = 0;                        << 
238     G4int I_Breakup = 0;                       << 
239     G4int NbLamprf = 0;                        << 
240     IEV_TAB = 0;                               << 
241                                                << 
242     /*                                         << 
243     C     Set maximum temperature for sequenti << 
244     C     Remove additional energy by simultan << 
245     C                          (vaporisation o << 
246                                                << 
247     C     Idea: If the temperature of the proj << 
248     c           the limiting temperature T_fre << 
249     C           energy which is present in the << 
250     C           a stage of simultaneous break  << 
251     C           simultaneous emission of a gas << 
252     C           emission of several intermedia << 
253     C           piece of the projectile specta << 
254     C           one) is kept track.            << 
255                                                << 
256     C        MVR, KHS, October 2001            << 
257     C        KHS, AK 2007 - Masses from the po << 
258     on C                      energy  per nucl << 
259     dependent on C                      energy << 
260                                                << 
261     c       Clear BU_TAB (array of multifragme << 
262     */                                         << 
263     if (T_freeze_out_in >= 0.0)                << 
264     {                                          << 
265         T_freeze_out = T_freeze_out_in;        << 
266     }                                          << 
267     else                                       << 
268     {                                          << 
269         T_freeze_out = max(9.33 * std::exp(-0. << 
270         //         ! See: J. Natowitz et al, P << 
271         //        T_freeze_out=DMAX1(9.0D0*DEX << 
272         //     &                     5.5D0)    << 
273     }                                          << 
274     //                                         << 
275     a_tilda = ald->av * aprf + ald->as * std:: << 
276                                                << 
277     T_init = std::sqrt(EINCL / a_tilda);       << 
278                                                << 
279     T_diff = T_init - T_freeze_out;            << 
280                                                << 
281     if (T_diff > 0.1 && zprf > 2. && (aprf - z << 
282     {                                          << 
283         // T_Diff is set to be larger than 0.1 << 
284         // for which T_Diff is of the order of << 
285         varntp->kfis = 10;                        274         varntp->kfis = 10;
286                                                   275 
287         for (G4int i = 0; i < 5; i++)          << 276         for(G4int i=0;i<5;i++){
288         {                                      << 277             EE_diff = EINCL - a_tilda * T_freeze_out*T_freeze_out;
289             EE_diff = EINCL - a_tilda * T_free << 278 //            Energy removed 10*5/T_init per nucleon removed in simultaneous breakup
290             //            Energy removed 10*5/ << 279 //            adjusted to frag. xsections 238U (1AGeV) + Pb data, KHS Dec. 2005
291             //            simultaneous breakup << 280 // This should maybe be re-checked, in a meanwhile several things in break-up description
292             //            (1AGeV) + Pb data, K << 281 // have changed (AK).
293             // This should maybe be re-checked << 
294             // break-up description have chang << 
295                                                   282 
296             A_diff = dint(EE_diff / (8.0 * 5.0    283             A_diff = dint(EE_diff / (8.0 * 5.0 / T_freeze_out));
297                                                   284 
298             if (A_diff > AAINCL)               << 285             if(A_diff>AAINCL) A_diff = AAINCL;
299                 A_diff = AAINCL;               << 
300                                                   286 
301             A_FINAL = AAINCL - A_diff;            287             A_FINAL = AAINCL - A_diff;
302                                                   288 
303             a_tilda =                          << 289             a_tilda = ald->av*A_FINAL + ald->as*std::pow(A_FINAL,2.0/3.0) + ald->ak*std::pow(A_FINAL,1.0/3.0);
304                 ald->av * A_FINAL + ald->as *  << 290             E_FINAL = a_tilda * T_freeze_out*T_freeze_out;
305             E_FINAL = a_tilda * T_freeze_out * << 
306                                                << 
307             if (A_FINAL < 4.0)                 << 
308             { // To avoid numerical problems   << 
309                 EE_diff = EINCL - E_FINAL;     << 
310                 A_FINAL = 1.0;                 << 
311                 Z_FINAL = 1.0;                 << 
312                 E_FINAL = 0.0;                 << 
313                 goto mul4325;                  << 
314             }                                  << 
315         }                                      << 
316     mul4325:                                   << 
317         // The idea is similar to Z determinat << 
318         // partner is not fixed by the A/Z of  << 
319         // from Gaussian Z_FINAL_MEAN = dint(z << 
320                                                << 
321         Z_FINAL = dint(zprf * A_FINAL / (aprf) << 
322                                                << 
323         if (E_FINAL < 0.0)                     << 
324             E_FINAL = 0.0;                     << 
325                                                << 
326         aprf = A_FINAL;                        << 
327         zprf = Z_FINAL;                        << 
328         ee = E_FINAL;                          << 
329                                                << 
330         A_diff = AAINCL - aprf;                << 
331                                                << 
332         // Creation of multifragmentation prod << 
333         if (A_diff <= 1.0)                     << 
334         {                                      << 
335             aprf = AAINCL;                     << 
336             zprf = ZAINCL;                     << 
337             ee = EINCL;                        << 
338             IMULTIFR = 0;                      << 
339             goto mult7777;                     << 
340         }                                      << 
341         else if (A_diff > 1.0)                 << 
342         {                                      << 
343                                                << 
344             A_ACC = 0.0;                       << 
345             // Energy-dependence of the slope  << 
346             // to exp. data (see e.g. Sfienti  << 
347             ASLOPE1 = -2.400; // e*/a=7   -2.4 << 
348             ASLOPE2 = -1.200; // e*/a=3   -1.2 << 
349                                                << 
350             a_tilda = ald->av * AAINCL + ald-> << 
351                                                << 
352             E_FINAL = a_tilda * T_freeze_out * << 
353                                                << 
354             ABU_SLOPE = (ASLOPE1 - ASLOPE2) /  << 
355                                                << 
356             // Botvina et al, PRC 74 (2006) 04 << 
357             //          ABU_SLOPE = 5.57489D0- << 
358             //     &    0.3552D0*(E_FINAL/AAAB << 
359             //     &    7.268D-4*(E_FINAL/AAAB << 
360             // They fit with A**(-tau) and her << 
361             //          ABU_SLOPE = ABU_SLOPE* << 
362                                                << 
363             //           ABU_SLOPE = -2.60D0   << 
364             //          print*,ABU_SLOPE,(E_FI << 
365                                                << 
366             if (ABU_SLOPE > -1.01)             << 
367                 ABU_SLOPE = -1.01;             << 
368                                                << 
369             I_Breakup = 0;                     << 
370             Z_Breakup_sum = Z_FINAL;           << 
371             ABU_SUM = 0.0;                     << 
372             ZBU_SUM = 0.0;                     << 
373                                                << 
374             for (G4int i = 0; i < 100; i++)    << 
375             {                                  << 
376                 IS = 0;                        << 
377             mult4326:                          << 
378                 A_Breakup = dint(G4double(IPOW << 
379                 // Power law with exponent ABU << 
380                 IS = IS + 1;                   << 
381                 if (IS > 100)                  << 
382                 {                              << 
383                     std::cout << "WARNING: IPO << 
384                                  "CALCULATING  << 
385                               << A_Breakup <<  << 
386                     goto mult10;               << 
387                 }                              << 
388                                                << 
389                 if (A_Breakup > AAINCL)        << 
390                     goto mult4326;             << 
391                                                << 
392                 if (A_Breakup <= 0.0)          << 
393                 {                              << 
394                     std::cout << "A_BREAKUP <= << 
395                     goto mult10;               << 
396                 }                              << 
397                                                   291 
398                 A_ACC = A_ACC + A_Breakup;     << 292             if(A_FINAL<4.0){  // To avoid numerical problems
                                                   >> 293               EE_diff = EINCL - E_FINAL;
                                                   >> 294               A_FINAL = 1.0;
                                                   >> 295               Z_FINAL = 1.0;
                                                   >> 296               E_FINAL = 0.0;
                                                   >> 297               goto mul4325;
                                                   >> 298             }
                                                   >> 299         }
                                                   >> 300         mul4325:
                                                   >> 301 // The idea is similar to Z determination of multifragment - Z of "heavy" partner is not
                                                   >> 302 // fixed by the A/Z of the prefragment, but randomly picked from Gaussian
                                                   >> 303          // Z_FINAL_MEAN = dint(zprf * A_FINAL / (aprf));
                                                   >> 304 
                                                   >> 305           Z_FINAL = dint(zprf * A_FINAL / (aprf));
                                                   >> 306 
                                                   >> 307           if(E_FINAL<0.0) E_FINAL = 0.0;
                                                   >> 308 
                                                   >> 309           aprf = A_FINAL;
                                                   >> 310           zprf = Z_FINAL;
                                                   >> 311           ee = E_FINAL;
                                                   >> 312 
                                                   >> 313           A_diff = AAINCL - aprf;
                                                   >> 314 
                                                   >> 315 // Creation of multifragmentation products by breakup
                                                   >> 316           if(A_diff<=1.0){
                                                   >> 317            aprf = AAINCL;
                                                   >> 318            zprf = ZAINCL;
                                                   >> 319            ee = EINCL;
                                                   >> 320            IMULTIFR = 0;
                                                   >> 321            goto mult7777;
                                                   >> 322           }else if(A_diff>1.0){
                                                   >> 323 
                                                   >> 324           A_ACC = 0.0;
                                                   >> 325 // Energy-dependence of the slope parameter, acc. to A. Botvina, fits also to exp. data (see
                                                   >> 326 // e.g. Sfienti et al, NPA 2007)
                                                   >> 327           ASLOPE1 = -2.400;  // e*/a=7   -2.4
                                                   >> 328           ASLOPE2 = -1.200;  // e*/a=3   -1.2
                                                   >> 329 
                                                   >> 330           a_tilda = ald->av*AAINCL + ald->as*std::pow(AAINCL,2.0/3.0) + ald->ak*std::pow(AAINCL,1.0/3.0);
                                                   >> 331 
                                                   >> 332           E_FINAL = a_tilda * T_freeze_out*T_freeze_out;
                                                   >> 333 
                                                   >> 334           ABU_SLOPE = (ASLOPE1-ASLOPE2)/4.0*(E_FINAL/AAINCL)+
                                                   >> 335                      ASLOPE1-(ASLOPE1-ASLOPE2)*7.0/4.0;
                                                   >> 336 
                                                   >> 337 // Botvina et al, PRC 74 (2006) 044609, fig. 5 for B0=18 MeV
                                                   >> 338 //          ABU_SLOPE = 5.57489D0-2.08149D0*(E_FINAL/AAABRA)+
                                                   >> 339 //     &    0.3552D0*(E_FINAL/AAABRA)**2-0.024927D0*(E_FINAL/AAABRA)**3+
                                                   >> 340 //     &    7.268D-4*(E_FINAL/AAABRA)**4
                                                   >> 341 // They fit with A**(-tau) and here is done A**(tau)
                                                   >> 342 //          ABU_SLOPE = ABU_SLOPE*(-1.D0)
                                                   >> 343 
                                                   >> 344 //           ABU_SLOPE = -2.60D0
                                                   >> 345 //          print*,ABU_SLOPE,(E_FINAL/AAABRA)
                                                   >> 346 
                                                   >> 347           if(ABU_SLOPE > -1.01) ABU_SLOPE = -1.01;
                                                   >> 348 
                                                   >> 349           I_Breakup = 0;
                                                   >> 350           Z_Breakup_sum = Z_FINAL;
                                                   >> 351           ABU_SUM = 0.0;
                                                   >> 352           ZBU_SUM = 0.0;
                                                   >> 353 
                                                   >> 354           for(G4int i=0;i<100;i++){
                                                   >> 355              IS = 0;
                                                   >> 356              mult4326:
                                                   >> 357              A_Breakup = dint(G4double(IPOWERLIMHAZ(ABU_SLOPE,1,idnint(A_diff))));
                                                   >> 358                   // Power law with exponent ABU_SLOPE
                                                   >> 359              IS = IS +1;
                                                   >> 360              if(IS>100){
                                                   >> 361              std::cout << "WARNING: IPOWERLIMHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING A_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED: " << A_Breakup << std::endl;
                                                   >> 362              goto mult10;
                                                   >> 363              }
399                                                   364 
400                 if (A_ACC <= A_diff)           << 365              if(A_Breakup>AAINCL) goto mult4326;
401                 {                              << 
402                                                   366 
403                     Z_Breakup_Mean = dint(A_Br << 367              if(A_Breakup<=0.0){
                                                   >> 368               std::cout << "A_BREAKUP <= 0 " << std::endl;
                                                   >> 369               goto mult10;
                                                   >> 370              }
404                                                   371 
405                     Z_Breakup_sum = Z_Breakup_ << 372             A_ACC = A_ACC + A_Breakup;
406                     //                         << 
407                     // See G.A. Souliotis et a << 
408                     G_SYMM = 34.2281 - 5.14037 << 
409                     if (E_FINAL / AAINCL < 2.0 << 
410                         G_SYMM = 25.0;         << 
411                     if (E_FINAL / AAINCL > 4.0 << 
412                         G_SYMM = 15.0;         << 
413                                                << 
414                     //             G_SYMM = 23 << 
415                                                << 
416                     G_SYMM = 25.0; // 25       << 
417                     CZ = 2.0 * G_SYMM * 4.0 /  << 
418                     // 2*CZ=d^2(Esym)/dZ^2, Es << 
419                     // gamma = 23.6D0 is the s << 
420                     G4int IIS = 0;             << 
421                     Sigma_Z = std::sqrt(T_free << 
422                                                << 
423                     IS = 0;                    << 
424                 mult4333:                      << 
425                     Z_Breakup = dint(G4double( << 
426                     IS = IS + 1;               << 
427                     //                         << 
428                     if (IS > 100)              << 
429                     {                          << 
430                         std::cout << "WARNING: << 
431                                      "CALCULAT << 
432                                      "DICED: " << 
433                                   << A_Breakup << 
434                         goto mult10;           << 
435                     }                          << 
436                                                << 
437                     if (Z_Breakup < 0.0)       << 
438                         goto mult4333;         << 
439                     if ((A_Breakup - Z_Breakup << 
440                         goto mult4333;         << 
441                     if ((A_Breakup - Z_Breakup << 
442                         goto mult4333;         << 
443                                                << 
444                     if (Z_Breakup >= ZAINCL)   << 
445                     {                          << 
446                         IIS = IIS + 1;         << 
447                         if (IIS > 10)          << 
448                         {                      << 
449                             std::cout << "Z_BR << 
450                                          "BE R << 
451                                       << std:: << 
452                             goto mult10;       << 
453                         }                      << 
454                         goto mult4333;         << 
455                     }                          << 
456                                                   373 
457                     //     *** Find the limits << 374             if(A_ACC<=A_diff){
458                     isostab_lim(idnint(Z_Break << 
459                     //        INMIN = MAX(1,IN << 
460                     if (Z_Breakup > 2.0)       << 
461                     {                          << 
462                         if (idnint(A_Breakup - << 
463                         {                      << 
464                             //             PRI << 
465                             //     & IDNINT(Z_ << 
466                             goto mult4343;     << 
467                         }                      << 
468                     }                          << 
469                                                   375 
470                 mult4343:                      << 376               Z_Breakup_Mean = dint(A_Breakup * ZAINCL / AAINCL);
471                                                   377 
472                     // We consider all product << 378               Z_Breakup_sum = Z_Breakup_sum + Z_Breakup_Mean;
473                     //               I_Breakup << 379 //
                                                   >> 380 // See G.A. Souliotis et al, PRC 75 (2007) 011601R (Fig. 2)
                                                   >> 381               G_SYMM = 34.2281 - 5.14037 * E_FINAL/AAINCL;
                                                   >> 382               if(E_FINAL/AAINCL < 2.0) G_SYMM = 25.0;
                                                   >> 383               if(E_FINAL/AAINCL > 4.0) G_SYMM = 15.0;
                                                   >> 384 
                                                   >> 385 //             G_SYMM = 23.6;
                                                   >> 386 
                                                   >> 387               G_SYMM = 25.0;      //25
                                                   >> 388               CZ = 2.0 * G_SYMM * 4.0 / A_Breakup;
                                                   >> 389               // 2*CZ=d^2(Esym)/dZ^2, Esym=Gamma*(A-2Z)**2/A
                                                   >> 390                // gamma = 23.6D0 is the symmetry-energy coefficient
                                                   >> 391               G4int IIS = 0;
                                                   >> 392               Sigma_Z = std::sqrt(T_freeze_out/CZ);
                                                   >> 393 
                                                   >> 394               IS = 0;
                                                   >> 395               mult4333:
                                                   >> 396               Z_Breakup =  dint( G4double(gausshaz(1,Z_Breakup_Mean,Sigma_Z)));
                                                   >> 397               IS = IS +1;
                                                   >> 398 //
                                                   >> 399               if(IS>100){
                                                   >> 400                std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED: " << A_Breakup << " " << Z_Breakup << std::endl;
                                                   >> 401                goto mult10;
                                                   >> 402               }
                                                   >> 403 
                                                   >> 404              if(Z_Breakup<0.0 ) goto mult4333;
                                                   >> 405              if((A_Breakup-Z_Breakup)<0.0) goto mult4333;
                                                   >> 406              if((A_Breakup-Z_Breakup)==0.0 && Z_Breakup!=1.0) goto mult4333;
                                                   >> 407 
                                                   >> 408              if(Z_Breakup>=ZAINCL){
                                                   >> 409                IIS = IIS + 1;
                                                   >> 410                  if(IIS > 10){
                                                   >> 411                    std::cout << "Z_BREAKUP RESAMPLED MORE THAN 10 TIMES; EVENT WILL BE RESAMPLED AGAIN " << std::endl;
                                                   >> 412                    goto mult10;
                                                   >> 413                  }
                                                   >> 414                goto mult4333;
                                                   >> 415              }
474                                                   416 
475                     N_Breakup = A_Breakup - Z_ << 417 //     *** Find the limits that fragment is bound :
476                     BU_TAB[I_Breakup][0] = din << 418         isostab_lim(idnint(Z_Breakup),&INMIN,&INMAX);
477                     BU_TAB[I_Breakup][1] = din << 419 //        INMIN = MAX(1,INMIN-2)
478                     ABU_SUM = ABU_SUM + BU_TAB << 420         if(Z_Breakup > 2.0){
479                     ZBU_SUM = ZBU_SUM + BU_TAB << 421           if(idnint(A_Breakup-Z_Breakup)<INMIN || idnint(A_Breakup-Z_Breakup)>(INMAX+5)){
480                     //                         << 422 //             PRINT*,'N_Breakup >< NMAX',
481                     // Break-up products are g << 423 //     &      IDNINT(Z_Breakup),IDNINT(A_Breakup-Z_Breakup),INMIN,INMAX
482                     BU_TAB[I_Breakup][3] = 0.0 << 424             goto mult4343;
483                     I_Breakup = I_Breakup + 1; << 425           }
484                     IMULTBU = IMULTBU + 1;     << 426         }
485                 }                              << 427 
486                 else                           << 428   mult4343:
487                 {                              << 429 
488                     //     There are A_DIFF -  << 430 // We consider all products, also nucleons created in the break-up
489                     //     not end up in multi << 431 //               I_Breakup = I_Breakup + 1;// moved below
490                     //     of the Monte-Carlo  << 432 
491                     //     of the fragments ac << 433                N_Breakup = A_Breakup - Z_Breakup;
492                     //            print*,'Defi << 434                BU_TAB[I_Breakup][0] = dint(Z_Breakup);    // Mass of break-up product
493                                                << 435                BU_TAB[I_Breakup][1] = dint(A_Breakup);    // Z of break-up product
494                     goto mult4327;             << 436                ABU_SUM = ABU_SUM + BU_TAB[i][1];
495                 } // if(A_ACC<=A_diff)         << 437                ZBU_SUM = ZBU_SUM + BU_TAB[i][0];
496             }     // for                       << 438 //
497                   // mult4327:                 << 439 // Break-up products are given zero angular momentum (simplification)
498                   // IMULTIFR = 1;             << 440                BU_TAB[I_Breakup][3] = 0.0;
499         }         //  if(A_diff>1.0)           << 441                I_Breakup = I_Breakup + 1;
500     mult4327:                                  << 442                IMULTBU = IMULTBU + 1;
501         IMULTIFR = 1;                          << 443            }else{
502                                                << 444 //     There are A_DIFF - A_ACC nucleons lost by breakup, but they do not end up in multifragmentation products.
503         // "Missing" A and Z picked from the p << 445 //     This is a deficiency of the Monte-Carlo method applied above to determine the sizes of the fragments
504         ABU_DIFF = idnint(ABU_SUM + aprf - AAI << 446 //     according to the power law.
505         ZBU_DIFF = idnint(ZBU_SUM + zprf - ZAI << 447 //            print*,'Deficiency',IDNINT(A_DIFF-A_ACC)
506         NBU_DIFF = idnint((ABU_SUM - ZBU_SUM)  << 448 
507         //                                     << 449              goto mult4327;
508         if (IMULTBU > 200)                     << 450            }// if(A_ACC<=A_diff)
509             std::cout << "WARNING - MORE THAN  << 451           }//for
                                                   >> 452           //mult4327:
                                                   >> 453           //IMULTIFR = 1;
                                                   >> 454           } //  if(A_diff>1.0)
                                                   >> 455           mult4327:
                                                   >> 456           IMULTIFR = 1;
                                                   >> 457 
                                                   >> 458 // "Missing" A and Z picked from the power law:
                                                   >> 459         ABU_DIFF = idnint(ABU_SUM+aprf-AAINCL);
                                                   >> 460         ZBU_DIFF = idnint(ZBU_SUM+zprf-ZAINCL);
                                                   >> 461         NBU_DIFF = idnint((ABU_SUM-ZBU_SUM)+(aprf-zprf)-(AAINCL-ZAINCL));
                                                   >> 462 //
                                                   >> 463         if(IMULTBU > 200)
                                                   >> 464         std::cout << "WARNING - MORE THAN 200 BU " << IMULTBU  << std::endl;
510                                                   465 
511         if (IMULTBU < 1)                       << 466         if(IMULTBU < 1)
512             std::cout << "WARNING - LESS THAN  << 467         std::cout << "WARNING - LESS THAN 1 BU " << IMULTBU << std::endl; 
513         //,AABRA,ZABRA,IDNINT(APRF),IDNINT(ZPR << 468          //,AABRA,ZABRA,IDNINT(APRF),IDNINT(ZPRF),ABU_DIFF,ZBU_DIFF
514                                                   469 
515         G4int IPROBA = 0;                         470         G4int IPROBA = 0;
516         for (G4int i = 0; i < IMULTBU; i++)    << 471         for(G4int i=0;i<IMULTBU;i++)
517             IMEM_BU[i] = 0;                    << 472         IMEM_BU[i] = 0;
518                                                   473 
519         while (NBU_DIFF != 0 && ZBU_DIFF != 0) << 474         while(NBU_DIFF!=0 && ZBU_DIFF!=0){
520         {                                      << 475 // (APRF,ZPRF) is also inlcuded in this game, as from time to time the program
521             // (APRF,ZPRF) is also inlcuded in << 476 // is entering into endless loop, as it can not find proper nucleus for adapting A and Z.
522             // program is entering into endles << 477          IS = 0;
523             // nucleus for adapting A and Z.   << 478          mult5555:    
524             IS = 0;                            << 479          G4double RHAZ = G4AblaRandom::flat()*G4double(IMULTBU);
525         mult5555:                              << 480          IPROBA = IPROBA + 1;
526             G4double RHAZ = G4AblaRandom::flat << 481          IS = IS + 1;
527             IPROBA = IPROBA + 1;               << 482          if(IS>100){
528             IS = IS + 1;                       << 483           std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED." << std::endl; 
529             if (IS > 100)                      << 484           goto mult10;
530             {                                  << 485          }
531                 std::cout << "WARNING: HAZ CAL << 486           G4int IEL = G4int(RHAZ);
532                              "N_BREAKUP IN Rn0 << 487           if(IMEM_BU[IEL]==1) goto mult5555;
533                           << std::endl;        << 488     if(!(IEL<200))std::cout << "5555:" << IEL << RHAZ << IMULTBU << std::endl; 
534                 goto mult10;                   << 489            if(IEL<0)std::cout << "5555:"<< IEL << RHAZ << IMULTBU << std::endl; 
535             }                                  << 490            if(IEL<=IMULTBU){
536             G4int IEL = G4int(RHAZ);           << 491             N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0] - DSIGN(1.0,G4double(NBU_DIFF)));
537             if (IMEM_BU[IEL] == 1)             << 492             }else if(IEL>IMULTBU){
538                 goto mult5555;                 << 493             N_Breakup = dint(aprf - zprf - DSIGN(1.0,G4double(NBU_DIFF)));
539             if (!(IEL < 200))                  << 494             }
540                 std::cout << "5555:" << IEL << << 495             if(N_Breakup<0.0){
541             if (IEL < 0)                       << 496              IMEM_BU[IEL] = 1;
542                 std::cout << "5555:" << IEL << << 497              goto mult5555;
543             if (IEL <= IMULTBU)                << 498             }
544             {                                  << 499              if(IEL<=IMULTBU){
545                 N_Breakup = dint(BU_TAB[IEL][1 << 500              ZTEMP = dint(BU_TAB[IEL][0] - DSIGN(1.0,G4double(ZBU_DIFF)));
546             }                                  << 501              }else if(IEL>IMULTBU){
547             else if (IEL > IMULTBU)            << 502              ZTEMP = dint(zprf - DSIGN(1.0,G4double(ZBU_DIFF)));
548             {                                  << 503              }
549                 N_Breakup = dint(aprf - zprf - << 504               if(ZTEMP<0.0){
550             }                                  << 505                IMEM_BU[IEL] = 1;
551             if (N_Breakup < 0.0)               << 506                goto mult5555;
552             {                                  << 507               }
553                 IMEM_BU[IEL] = 1;              << 508               if(ZTEMP<1.0 && N_Breakup<1.0){
554                 goto mult5555;                 << 509                IMEM_BU[IEL] = 1;
555             }                                  << 510                goto mult5555;
556             if (IEL <= IMULTBU)                << 511               }
557             {                                  << 512 // Nuclei with A=Z and Z>1 are allowed in this stage, as otherwise,
558                 ZTEMP = dint(BU_TAB[IEL][0] -  << 513 // for more central collisions there is not enough mass which can be
559             }                                  << 514 // shufeled in order to conserve A and Z. These are mostly nuclei with
560             else if (IEL > IMULTBU)            << 515 // Z=2 and in less extent 3, 4 or 5.
561             {                                  << 516 //             IF(ZTEMP.GT.1.D0 .AND. N_Breakup.EQ.0.D0) THEN
562                 ZTEMP = dint(zprf - DSIGN(1.0, << 517 //              GOTO 5555
563             }                                  << 518 //             ENDIF
564             if (ZTEMP < 0.0)                   << 519             if(IEL<=IMULTBU){
565             {                                  << 520             BU_TAB[IEL][0] = dint(ZTEMP);
566                 IMEM_BU[IEL] = 1;              << 521             BU_TAB[IEL][1] = dint(ZTEMP + N_Breakup);
567                 goto mult5555;                 << 522             }else if(IEL>IMULTBU){
568             }                                  << 523             zprf = dint(ZTEMP);
569             if (ZTEMP < 1.0 && N_Breakup < 1.0 << 524             aprf = dint(ZTEMP + N_Breakup);
570             {                                  << 525             }
571                 IMEM_BU[IEL] = 1;              << 526           NBU_DIFF = NBU_DIFF - ISIGN(1,NBU_DIFF);
572                 goto mult5555;                 << 527           ZBU_DIFF = ZBU_DIFF - ISIGN(1,ZBU_DIFF);
573             }                                  << 528         }// while
574             // Nuclei with A=Z and Z>1 are all << 
575             // for more central collisions the << 
576             // shufeled in order to conserve A << 
577             // Z=2 and in less extent 3, 4 or  << 
578             //             IF(ZTEMP.GT.1.D0 .A << 
579             //              GOTO 5555          << 
580             //             ENDIF               << 
581             if (IEL <= IMULTBU)                << 
582             {                                  << 
583                 BU_TAB[IEL][0] = dint(ZTEMP);  << 
584                 BU_TAB[IEL][1] = dint(ZTEMP +  << 
585             }                                  << 
586             else if (IEL > IMULTBU)            << 
587             {                                  << 
588                 zprf = dint(ZTEMP);            << 
589                 aprf = dint(ZTEMP + N_Breakup) << 
590             }                                  << 
591             NBU_DIFF = NBU_DIFF - ISIGN(1, NBU << 
592             ZBU_DIFF = ZBU_DIFF - ISIGN(1, ZBU << 
593         } // while                             << 
594                                                   529 
595         IPROBA = 0;                               530         IPROBA = 0;
596         for (G4int i = 0; i < IMULTBU; i++)    << 531         for(G4int i=0;i<IMULTBU;i++)
597             IMEM_BU[i] = 0;                    << 532         IMEM_BU[i] = 0;
598                                                   533 
599         if (NBU_DIFF != 0 && ZBU_DIFF == 0)    << 534         if(NBU_DIFF != 0 && ZBU_DIFF == 0){
600         {                                      << 535          while(NBU_DIFF > 0 || NBU_DIFF < 0){
601             while (NBU_DIFF > 0 || NBU_DIFF <  << 536          IS = 0;
602             {                                  << 537          mult5556:    
603                 IS = 0;                        << 538          G4double RHAZ = G4AblaRandom::flat()*G4double(IMULTBU);
604             mult5556:                          << 539          IS = IS + 1;
605                 G4double RHAZ = G4AblaRandom:: << 540          if(IS>100){
606                 IS = IS + 1;                   << 541           std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED." << std::endl; 
607                 if (IS > 100)                  << 542           goto mult10;
608                 {                              << 543          }
609                     std::cout << "WARNING: HAZ << 544          G4int IEL = G4int(RHAZ);
610                                  "N_BREAKUP IN << 545          if(IMEM_BU[IEL]==1) goto mult5556;
611                               << std::endl;    << 546 //         IPROBA = IPROBA + 1;
612                     goto mult10;               << 547          if(IPROBA>IMULTBU+1 && NBU_DIFF>0){
613                 }                              << 548          std::cout << "###',IPROBA,IMULTBU,NBU_DIFF,ZBU_DIFF,T_freeze_out" << std::endl; 
614                 G4int IEL = G4int(RHAZ);       << 549          IPROBA = IPROBA + 1;
615                 if (IMEM_BU[IEL] == 1)         << 550            if(IEL<=IMULTBU){
616                     goto mult5556;             << 551             BU_TAB[IEL][1] = dint(BU_TAB[IEL][1]-G4double(NBU_DIFF));
617                 //         IPROBA = IPROBA + 1 << 552            }else{ if(IEL>IMULTBU)
618                 if (IPROBA > IMULTBU + 1 && NB << 553             aprf = dint(aprf - G4double(NBU_DIFF));
619                 {                              << 554            }
620                     std::cout << "###',IPROBA, << 555          goto mult5432;
621                     IPROBA = IPROBA + 1;       << 556          }
622                     if (IEL <= IMULTBU)        << 557    if(!(IEL<200))std::cout << "5556:" << IEL << RHAZ << IMULTBU << std::endl; 
623                     {                          << 558            if(IEL<0)std::cout << "5556:"<< IEL << RHAZ << IMULTBU << std::endl; 
624                         BU_TAB[IEL][1] = dint( << 559            if(IEL<=IMULTBU){
625                     }                          << 560             N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0] - DSIGN(1.0,G4double(NBU_DIFF)));
626                     else                       << 561             }else if(IEL>IMULTBU){
627                     {                          << 562             N_Breakup = dint(aprf - zprf - DSIGN(1.0,G4double(NBU_DIFF)));
628                         if (IEL > IMULTBU)     << 563             }
629                             aprf = dint(aprf - << 564             if(N_Breakup<0.0){
630                     }                          << 565              IMEM_BU[IEL] = 1;
631                     goto mult5432;             << 566              goto mult5556;
632                 }                              << 567             }
633                 if (!(IEL < 200))              << 568             if(IEL<=IMULTBU){
634                     std::cout << "5556:" << IE << 569              ATEMP = dint(BU_TAB[IEL][0] + N_Breakup);
635                 if (IEL < 0)                   << 570              }else if(IEL>IMULTBU){
636                     std::cout << "5556:" << IE << 571              ATEMP = dint(zprf + N_Breakup);
637                 if (IEL <= IMULTBU)            << 572              }
638                 {                              << 573              if((ATEMP - N_Breakup)<1.0 && N_Breakup<1.0){
639                     N_Breakup = dint(BU_TAB[IE << 574               IMEM_BU[IEL] = 1;
640                 }                              << 575               goto mult5556;
641                 else if (IEL > IMULTBU)        << 576              }
642                 {                              << 577 //             IF((ATEMP - N_Breakup).GT.1.D0 .AND.
643                     N_Breakup = dint(aprf - zp << 578 //     &        N_Breakup.EQ.0.D0) THEN
644                 }                              << 579 //              IMEM_BU(IEL) = 1
645                 if (N_Breakup < 0.0)           << 580 //              GOTO 5556
646                 {                              << 581 //             ENDIF
647                     IMEM_BU[IEL] = 1;          << 582              if(IEL<=IMULTBU)
648                     goto mult5556;             << 583              BU_TAB[IEL][1] = dint(BU_TAB[IEL][0] + N_Breakup);
649                 }                              << 584              else if(IEL>IMULTBU)
650                 if (IEL <= IMULTBU)            << 585              aprf = dint(zprf + N_Breakup);
651                 {                              << 586 //
652                     ATEMP = dint(BU_TAB[IEL][0 << 587            NBU_DIFF = NBU_DIFF - ISIGN(1,NBU_DIFF);
653                 }                              << 588          }//while(NBU_DIFF > 0 || NBU_DIFF < 0)
654                 else if (IEL > IMULTBU)        << 
655                 {                              << 
656                     ATEMP = dint(zprf + N_Brea << 
657                 }                              << 
658                 if ((ATEMP - N_Breakup) < 1.0  << 
659                 {                              << 
660                     IMEM_BU[IEL] = 1;          << 
661                     goto mult5556;             << 
662                 }                              << 
663                 //             IF((ATEMP - N_B << 
664                 //     &        N_Breakup.EQ.0 << 
665                 //              IMEM_BU(IEL) = << 
666                 //              GOTO 5556      << 
667                 //             ENDIF           << 
668                 if (IEL <= IMULTBU)            << 
669                     BU_TAB[IEL][1] = dint(BU_T << 
670                 else if (IEL > IMULTBU)        << 
671                     aprf = dint(zprf + N_Break << 
672                 //                             << 
673                 NBU_DIFF = NBU_DIFF - ISIGN(1, << 
674             } // while(NBU_DIFF > 0 || NBU_DIF << 
675                                                << 
676             IPROBA = 0;                        << 
677             for (G4int i = 0; i < IMULTBU; i++ << 
678                 IMEM_BU[i] = 0;                << 
679         }                                      << 
680         else                                   << 
681         { // if(NBU_DIFF != 0 && ZBU_DIFF == 0 << 
682             if (ZBU_DIFF != 0 && NBU_DIFF == 0 << 
683             {                                  << 
684                 while (ZBU_DIFF > 0 || ZBU_DIF << 
685                 {                              << 
686                     IS = 0;                    << 
687                 mult5557:                      << 
688                     G4double RHAZ = G4AblaRand << 
689                     IS = IS + 1;               << 
690                     if (IS > 100)              << 
691                     {                          << 
692                         std::cout << "WARNING: << 
693                                      "N_BREAKU << 
694                                   << std::endl << 
695                         goto mult10;           << 
696                     }                          << 
697                     G4int IEL = G4int(RHAZ);   << 
698                     if (IMEM_BU[IEL] == 1)     << 
699                         goto mult5557;         << 
700                     // IPROBA = IPROBA + 1;    << 
701                     if (IPROBA > IMULTBU + 1 & << 
702                     {                          << 
703                         std::cout << "###',IPR << 
704                         IPROBA = IPROBA + 1;   << 
705                         if (IEL <= IMULTBU)    << 
706                         {                      << 
707                             N_Breakup = dint(B << 
708                             BU_TAB[IEL][0] = d << 
709                             BU_TAB[IEL][1] = d << 
710                         }                      << 
711                         else                   << 
712                         {                      << 
713                             if (IEL > IMULTBU) << 
714                             {                  << 
715                                 N_Breakup = ap << 
716                                 zprf = dint(zp << 
717                                 aprf = dint(zp << 
718                             }                  << 
719                         }                      << 
720                         goto mult5432;         << 
721                     }                          << 
722                     if (!(IEL < 200))          << 
723                         std::cout << "5557:" < << 
724                     if (IEL < 0)               << 
725                         std::cout << "5557:" < << 
726                     if (IEL <= IMULTBU)        << 
727                     {                          << 
728                         N_Breakup = dint(BU_TA << 
729                         ZTEMP = dint(BU_TAB[IE << 
730                     }                          << 
731                     else if (IEL > IMULTBU)    << 
732                     {                          << 
733                         N_Breakup = dint(aprf  << 
734                         ZTEMP = dint(zprf - DS << 
735                     }                          << 
736                     ATEMP = dint(ZTEMP + N_Bre << 
737                     if (ZTEMP < 0.0)           << 
738                     {                          << 
739                         IMEM_BU[IEL] = 1;      << 
740                         goto mult5557;         << 
741                     }                          << 
742                     if ((ATEMP - ZTEMP) < 0.0) << 
743                     {                          << 
744                         IMEM_BU[IEL] = 1;      << 
745                         goto mult5557;         << 
746                     }                          << 
747                     if ((ATEMP - ZTEMP) < 1.0  << 
748                     {                          << 
749                         IMEM_BU[IEL] = 1;      << 
750                         goto mult5557;         << 
751                     }                          << 
752                     if (IEL <= IMULTBU)        << 
753                     {                          << 
754                         BU_TAB[IEL][0] = dint( << 
755                         BU_TAB[IEL][1] = dint( << 
756                     }                          << 
757                     else                       << 
758                     {                          << 
759                         if (IEL > IMULTBU)     << 
760                         {                      << 
761                             zprf = dint(ZTEMP) << 
762                             aprf = dint(ZTEMP  << 
763                         }                      << 
764                     }                          << 
765                     ZBU_DIFF = ZBU_DIFF - ISIG << 
766                 } // while                     << 
767             }     // if(ZBU_DIFF != 0 && NBU_D << 
768         }         // if(NBU_DIFF != 0 && ZBU_D << 
769                                                << 
770     mult5432:                                  << 
771         // Looking for the heaviest fragment a << 
772         // and "giving" excitation energy to f << 
773         ZMEM = 0.0;                            << 
774                                                << 
775         for (G4int i = 0; i < IMULTBU; i++)    << 
776         {                                      << 
777             // For particles with Z>2 we calcu << 
778             // temperature.                    << 
779             //  For particels with Z<3 we assu << 
780             //  temperature results in kinetic << 
781             //  distribution with T=Tfreeze-ou << 
782             if (BU_TAB[i][0] > 2.0)            << 
783             {                                  << 
784                 a_tilda_BU = ald->av * BU_TAB[ << 
785                              ald->ak * std::po << 
786                 BU_TAB[i][2] = a_tilda_BU * T_ << 
787             }                                  << 
788             else                               << 
789             {                                  << 
790                 BU_TAB[i][2] = 0.0;            << 
791             }                                  << 
792             //                                 << 
793             if (BU_TAB[i][0] > ZMEM)           << 
794             {                                  << 
795                 IMEM = i;                      << 
796                 ZMEM = BU_TAB[i][0];           << 
797                 AMEM = BU_TAB[i][1];           << 
798                 EMEM = BU_TAB[i][2];           << 
799                 JMEM = BU_TAB[i][3];           << 
800             }                                  << 
801         } // for IMULTBU                       << 
802                                                   589 
803         if (zprf < ZMEM)                       << 590         IPROBA = 0;
804         {                                      << 591         for(G4int i=0;i<IMULTBU;i++)
805             BU_TAB[IMEM][0] = zprf;            << 592         IMEM_BU[i] = 0;
806             BU_TAB[IMEM][1] = aprf;            << 593 
807             BU_TAB[IMEM][2] = ee;              << 594         }else{// if(NBU_DIFF != 0 && ZBU_DIFF == 0)
808             BU_TAB[IMEM][3] = jprf;            << 595           if(ZBU_DIFF != 0 && NBU_DIFF == 0){
809             zprf = ZMEM;                       << 596             while(ZBU_DIFF > 0 || ZBU_DIFF < 0){
810             aprf = AMEM;                       << 597              IS = 0;
811             aprfp = idnint(aprf);              << 598              mult5557:    
812             zprfp = idnint(zprf);              << 599              G4double RHAZ = G4AblaRandom::flat()*G4double(IMULTBU);
813             ee = EMEM;                         << 600              IS = IS + 1;
814             jprf = JMEM;                       << 601              if(IS>100){
815         }                                      << 602               std::cout << "WARNING: HAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING N_BREAKUP IN Rn07.FOR. NEW EVENT WILL BE DICED." << std::endl; 
                                                   >> 603               goto mult10;
                                                   >> 604              }
                                                   >> 605              G4int IEL = G4int(RHAZ);
                                                   >> 606              if(IMEM_BU[IEL]==1) goto mult5557;
                                                   >> 607              //IPROBA = IPROBA + 1;
                                                   >> 608              if(IPROBA>IMULTBU+1 && ZBU_DIFF>0){
                                                   >> 609              std::cout << "###',IPROBA,IMULTBU,NBU_DIFF,ZBU_DIFF,T_freeze_out" << std::endl; 
                                                   >> 610              IPROBA = IPROBA + 1;
                                                   >> 611              if(IEL<=IMULTBU){
                                                   >> 612                N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0]);
                                                   >> 613                BU_TAB[IEL][0] = dint(BU_TAB[IEL][0] - G4double(ZBU_DIFF));
                                                   >> 614                BU_TAB[IEL][1] = dint(BU_TAB[IEL][0] + N_Breakup);
                                                   >> 615              }else{ 
                                                   >> 616                  if(IEL>IMULTBU){
                                                   >> 617                   N_Breakup = aprf - zprf;
                                                   >> 618                   zprf = dint(zprf - G4double(ZBU_DIFF));
                                                   >> 619                   aprf = dint(zprf + N_Breakup);
                                                   >> 620                  }
                                                   >> 621              }
                                                   >> 622           goto mult5432;
                                                   >> 623           }
                                                   >> 624      if(!(IEL<200))std::cout << "5557:" << IEL << RHAZ << IMULTBU << std::endl; 
                                                   >> 625            if(IEL<0)std::cout << "5557:"<< IEL << RHAZ << IMULTBU << std::endl; 
                                                   >> 626            if(IEL<=IMULTBU){
                                                   >> 627             N_Breakup = dint(BU_TAB[IEL][1]-BU_TAB[IEL][0]);
                                                   >> 628             ZTEMP = dint(BU_TAB[IEL][0] - DSIGN(1.0,G4double(ZBU_DIFF)));
                                                   >> 629            }else if(IEL>IMULTBU){
                                                   >> 630             N_Breakup = dint(aprf - zprf);
                                                   >> 631             ZTEMP = dint(zprf - DSIGN(1.0,G4double(ZBU_DIFF)));
                                                   >> 632            }
                                                   >> 633             ATEMP = dint(ZTEMP + N_Breakup);
                                                   >> 634             if(ZTEMP<0.0){
                                                   >> 635              IMEM_BU[IEL] = 1;
                                                   >> 636              goto mult5557;
                                                   >> 637             }
                                                   >> 638             if((ATEMP-ZTEMP)<0.0){
                                                   >> 639              IMEM_BU[IEL] = 1;
                                                   >> 640              goto mult5557;
                                                   >> 641             }
                                                   >> 642             if((ATEMP-ZTEMP)<1.0 && ZTEMP<1.0){
                                                   >> 643              IMEM_BU[IEL] = 1;
                                                   >> 644              goto mult5557;
                                                   >> 645             }
                                                   >> 646              if(IEL<=IMULTBU){
                                                   >> 647                BU_TAB[IEL][0] = dint(ZTEMP);
                                                   >> 648                BU_TAB[IEL][1] = dint(ZTEMP + N_Breakup);
                                                   >> 649              }else{ 
                                                   >> 650                  if(IEL>IMULTBU){
                                                   >> 651                   zprf = dint(ZTEMP);
                                                   >> 652                   aprf = dint(ZTEMP + N_Breakup);
                                                   >> 653                  }
                                                   >> 654              } 
                                                   >> 655             ZBU_DIFF = ZBU_DIFF - ISIGN(1,ZBU_DIFF);
                                                   >> 656             }//while
                                                   >> 657           }//if(ZBU_DIFF != 0 && NBU_DIFF == 0)
                                                   >> 658         }// if(NBU_DIFF != 0 && ZBU_DIFF == 0)
                                                   >> 659 
                                                   >> 660         mult5432:
                                                   >> 661 // Looking for the heaviest fragment among all multifragmentation events, and
                                                   >> 662 // "giving" excitation energy to fragments
                                                   >> 663          ZMEM = 0.0;
                                                   >> 664 
                                                   >> 665          for(G4int i =0;i<IMULTBU;i++){
                                                   >> 666 //For particles with Z>2 we calculate excitation energy from freeze-out temperature.
                                                   >> 667 // For particels with Z<3 we assume that they form a gas, and that temperature results
                                                   >> 668 // in kinetic energy (which is sampled from Maxwell distribution with T=Tfreeze-out)
                                                   >> 669 // and not excitation energy.
                                                   >> 670            if(BU_TAB[i][0]>2.0){
                                                   >> 671             a_tilda_BU = ald->av*BU_TAB[i][1] + ald->as*std::pow(BU_TAB[i][1],2.0/3.0) + ald->ak*std::pow(BU_TAB[i][1],1.0/3.0);
                                                   >> 672             BU_TAB[i][2] = a_tilda_BU * T_freeze_out*T_freeze_out; // E* of break-up product
                                                   >> 673            }else{
                                                   >> 674             BU_TAB[i][2] = 0.0;
                                                   >> 675            }
                                                   >> 676 //
                                                   >> 677            if(BU_TAB[i][0] > ZMEM){
                                                   >> 678             IMEM = i;
                                                   >> 679             ZMEM = BU_TAB[i][0];
                                                   >> 680             AMEM = BU_TAB[i][1];
                                                   >> 681             EMEM = BU_TAB[i][2];
                                                   >> 682             JMEM = BU_TAB[i][3];
                                                   >> 683            }
                                                   >> 684          }//for IMULTBU
                                                   >> 685 
                                                   >> 686          if(zprf < ZMEM){
                                                   >> 687           BU_TAB[IMEM][0] = zprf;
                                                   >> 688           BU_TAB[IMEM][1] = aprf;
                                                   >> 689           BU_TAB[IMEM][2] = ee;
                                                   >> 690           BU_TAB[IMEM][3] = jprf;
                                                   >> 691           zprf =  ZMEM;
                                                   >> 692           aprf =  AMEM;
                                                   >> 693           aprfp = idnint(aprf);
                                                   >> 694           zprfp = idnint(zprf);
                                                   >> 695           ee   =  EMEM;
                                                   >> 696           jprf =  JMEM;
                                                   >> 697          }
816                                                   698 
817         //     Just for checking:              << 699 //     Just for checking:
818         ABU_SUM = aprf;                           700         ABU_SUM = aprf;
819         ZBU_SUM = zprf;                           701         ZBU_SUM = zprf;
820         for (G4int i = 0; i < IMULTBU; i++)    << 702         for(G4int i = 0;i<IMULTBU;i++){
821         {                                      << 703          ABU_SUM = ABU_SUM + BU_TAB[i][1];
822             ABU_SUM = ABU_SUM + BU_TAB[i][1];  << 704          ZBU_SUM = ZBU_SUM + BU_TAB[i][0];
823             ZBU_SUM = ZBU_SUM + BU_TAB[i][0];  << 
824         }                                         705         }
825         ABU_DIFF = idnint(ABU_SUM - AAINCL);   << 706         ABU_DIFF = idnint(ABU_SUM-AAINCL);
826         ZBU_DIFF = idnint(ZBU_SUM - ZAINCL);   << 707         ZBU_DIFF = idnint(ZBU_SUM-ZAINCL);
827         //                                     << 708 //
828         if (ABU_DIFF != 0 || ZBU_DIFF != 0)    << 709         if(ABU_DIFF!=0 || ZBU_DIFF!=0)
829             std::cout << "Problem of mass in B << 710          std::cout << "Problem of mass in BU " << ABU_DIFF << " " << ZBU_DIFF << std::endl;
830         PX_BU_SUM = 0.0;                          711         PX_BU_SUM = 0.0;
831         PY_BU_SUM = 0.0;                          712         PY_BU_SUM = 0.0;
832         PZ_BU_SUM = 0.0;                          713         PZ_BU_SUM = 0.0;
833         // Momenta of break-up products are ca << 714 // Momenta of break-up products are calculated. They are all given in the rest frame
834         // rest frame of the primary prefragme << 715 // of the primary prefragment (i.e. after incl):
835         // *********************************** << 716 // Goldhaber model ****************************************
836         AMOMENT(AAINCL, aprf, 1, &PXPRFP, &PYP << 717 // "Heavy" residue
837         PPRFP = std::sqrt(PXPRFP * PXPRFP + PY << 718         AMOMENT(AAINCL,aprf,1,&PXPRFP,&PYPRFP,&PZPRFP);
838         // *********************************** << 719         PPRFP = std::sqrt(PXPRFP*PXPRFP + PYPRFP*PYPRFP + PZPRFP*PZPRFP);
839         // PPRFP is in MeV/c                   << 720 // ********************************************************
840         ETOT_PRF = std::sqrt(PPRFP * PPRFP + ( << 721 // PPRFP is in MeV/c
                                                   >> 722         ETOT_PRF = std::sqrt(PPRFP*PPRFP + (aprf * amu)*(aprf * amu));
841         VX_PREF = C * PXPRFP / ETOT_PRF;          723         VX_PREF = C * PXPRFP / ETOT_PRF;
842         VY_PREF = C * PYPRFP / ETOT_PRF;          724         VY_PREF = C * PYPRFP / ETOT_PRF;
843         VZ_PREF = C * PZPRFP / ETOT_PRF;          725         VZ_PREF = C * PZPRFP / ETOT_PRF;
844                                                   726 
845         // Contribution from Coulomb repulsion << 727 // Contribution from Coulomb repulsion ********************
846         tke_bu(zprf, aprf, ZAINCL, AAINCL, &VX << 728         tke_bu(zprf,aprf,ZAINCL,AAINCL,&VX1_BU,&VY1_BU,&VZ1_BU);
847                                                   729 
848         // Lorentz kinematics                  << 730 // Lorentz kinematics
849         //        VX_PREF = VX_PREF + VX1_BU   << 731 //        VX_PREF = VX_PREF + VX1_BU
850         //        VY_PREF = VY_PREF + VY1_BU   << 732 //        VY_PREF = VY_PREF + VY1_BU
851         //        VZ_PREF = VZ_PREF + VZ1_BU   << 733 //        VZ_PREF = VZ_PREF + VZ1_BU
852         // Lorentz transformation              << 734 // Lorentz transformation
853         lorentz_boost(VX1_BU, VY1_BU, VZ1_BU,  << 735         lorentz_boost(VX1_BU,VY1_BU,VZ1_BU,
                                                   >> 736                 VX_PREF,VY_PREF,VZ_PREF,
                                                   >> 737                 &VXOUT,&VYOUT,&VZOUT);
854                                                   738 
855         VX_PREF = VXOUT;                          739         VX_PREF = VXOUT;
856         VY_PREF = VYOUT;                          740         VY_PREF = VYOUT;
857         VZ_PREF = VZOUT;                          741         VZ_PREF = VZOUT;
858                                                   742 
859         // Total momentum: Goldhaber + Coulomb << 743 // Total momentum: Goldhaber + Coulomb
860         VBU2 = VX_PREF * VX_PREF + VY_PREF * V << 744         VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF;
861         GAMMA_REL = std::sqrt(1.0 - VBU2 / (C  << 745         GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C));
862         ETOT_PRF = aprf * amu / GAMMA_REL;        746         ETOT_PRF = aprf * amu / GAMMA_REL;
863         PXPRFP = ETOT_PRF * VX_PREF / C;          747         PXPRFP = ETOT_PRF * VX_PREF / C;
864         PYPRFP = ETOT_PRF * VY_PREF / C;          748         PYPRFP = ETOT_PRF * VY_PREF / C;
865         PZPRFP = ETOT_PRF * VZ_PREF / C;          749         PZPRFP = ETOT_PRF * VZ_PREF / C;
866                                                   750 
867         // *********************************** << 751 // ********************************************************
868         //  Momentum: Total width of abrasion  << 752 //  Momentum: Total width of abrasion and breakup assumed to be given 
869         //  by Fermi momenta of nucleons       << 753 //  by Fermi momenta of nucleons
870         // *********************************** << 754 // *****************************************
871                                                   755 
872         PX_BU_SUM = PXPRFP;                       756         PX_BU_SUM = PXPRFP;
873         PY_BU_SUM = PYPRFP;                       757         PY_BU_SUM = PYPRFP;
874         PZ_BU_SUM = PZPRFP;                       758         PZ_BU_SUM = PZPRFP;
875                                                   759 
876         Eexc_BU_SUM = ee;                         760         Eexc_BU_SUM = ee;
877         Bvalue_BU = eflmac(idnint(aprf), idnin << 761         Bvalue_BU = eflmac(idnint(aprf),idnint(zprf),1,0);
                                                   >> 762 
                                                   >> 763         for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){
                                                   >> 764 //       For bu products:
                                                   >> 765           Bvalue_BU = Bvalue_BU + eflmac(idnint(BU_TAB[I_Breakup][1]), idnint(BU_TAB[I_Breakup][0]),1,0);
                                                   >> 766           Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB[I_Breakup][2];
                                                   >> 767 
                                                   >> 768           AMOMENT(AAINCL,BU_TAB[I_Breakup][1],1,&PX_BU,&PY_BU,&PZ_BU);
                                                   >> 769           P_BU = std::sqrt(PX_BU*PX_BU + PY_BU*PY_BU + PZ_BU*PZ_BU);
                                                   >> 770 // *******************************************************
                                                   >> 771 //        PPRFP is in MeV/c
                                                   >> 772           ETOT_BU = std::sqrt(P_BU*P_BU + (BU_TAB[I_Breakup][1]*amu)*(BU_TAB[I_Breakup][1]*amu));
                                                   >> 773           BU_TAB[I_Breakup][4] = C * PX_BU / ETOT_BU;    // Velocity in x
                                                   >> 774           BU_TAB[I_Breakup][5] = C * PY_BU / ETOT_BU;    // Velocity in y
                                                   >> 775           BU_TAB[I_Breakup][6] = C * PZ_BU / ETOT_BU;    // Velocity in z
                                                   >> 776 //        Contribution from Coulomb repulsion:
                                                   >> 777           tke_bu(BU_TAB[I_Breakup][0],BU_TAB[I_Breakup][1],ZAINCL,AAINCL,&VX2_BU,&VY2_BU,&VZ2_BU);
                                                   >> 778 // Lorentz kinematics
                                                   >> 779 //          BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) + VX2_BU ! velocity change by Coulomb repulsion
                                                   >> 780 //          BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) + VY2_BU
                                                   >> 781 //          BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) + VZ2_BU
                                                   >> 782 // Lorentz transformation
                                                   >> 783           lorentz_boost(VX2_BU,VY2_BU,VZ2_BU,
                                                   >> 784                 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6],
                                                   >> 785                 &VXOUT,&VYOUT,&VZOUT);
                                                   >> 786 
                                                   >> 787           BU_TAB[I_Breakup][4] = VXOUT;
                                                   >> 788           BU_TAB[I_Breakup][5] = VYOUT;
                                                   >> 789           BU_TAB[I_Breakup][6] = VZOUT;
                                                   >> 790 
                                                   >> 791 // Total momentum: Goldhaber + Coulomb
                                                   >> 792           VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] +
                                                   >> 793                  BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] +
                                                   >> 794                  BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6];
                                                   >> 795           GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C));
                                                   >> 796           ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL;
                                                   >> 797           PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C;
                                                   >> 798           PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C;
                                                   >> 799           PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C;
                                                   >> 800 
                                                   >> 801           PX_BU_SUM = PX_BU_SUM + PX_BU;
                                                   >> 802           PY_BU_SUM = PY_BU_SUM + PY_BU;
                                                   >> 803           PZ_BU_SUM = PZ_BU_SUM + PZ_BU;
                                                   >> 804 
                                                   >> 805          }//for I_Breakup
                                                   >> 806 
                                                   >> 807 //   In the frame of source (i.e. prefragment after abrasion or INCL)
                                                   >> 808         P_BU_SUM = std::sqrt(PX_BU_SUM*PX_BU_SUM + PY_BU_SUM*PY_BU_SUM +
                                                   >> 809                    PZ_BU_SUM*PZ_BU_SUM);
                                                   >> 810 // ********************************************************
                                                   >> 811 // PPRFP is in MeV/c
                                                   >> 812         ETOT_SUM = std::sqrt(P_BU_SUM*P_BU_SUM +
                                                   >> 813                    (AAINCL * amu)*(AAINCL * amu));
                                                   >> 814 
                                                   >> 815         VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM;
                                                   >> 816         VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM;
                                                   >> 817         VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM;
878                                                   818 
879         for (I_Breakup = 0; I_Breakup < IMULTB << 819 // Lorentz kinematics - DM 17/5/2010
880         {                                      << 820 //        VX_PREF = VX_PREF - VX_BU_SUM
881             //       For bu products:          << 821 //        VY_PREF = VY_PREF - VY_BU_SUM
882             Bvalue_BU = Bvalue_BU + eflmac(idn << 822 //        VZ_PREF = VZ_PREF - VZ_BU_SUM
883             Eexc_BU_SUM = Eexc_BU_SUM + BU_TAB << 823 // Lorentz transformation
884                                                << 824         lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM,
885             AMOMENT(AAINCL, BU_TAB[I_Breakup][ << 825                 VX_PREF,VY_PREF,VZ_PREF,
886             P_BU = std::sqrt(PX_BU * PX_BU + P << 826                 &VXOUT,&VYOUT,&VZOUT);
887             // ******************************* << 827 
888             //        PPRFP is in MeV/c        << 828         VX_PREF = VXOUT;
889             ETOT_BU = std::sqrt(P_BU * P_BU +  << 829         VY_PREF = VYOUT;
890             BU_TAB[I_Breakup][4] = C * PX_BU / << 830         VZ_PREF = VZOUT;
891             BU_TAB[I_Breakup][5] = C * PY_BU / << 831 
892             BU_TAB[I_Breakup][6] = C * PZ_BU / << 832         VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF;
893             //        Contribution from Coulom << 833         GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C));
894             tke_bu(BU_TAB[I_Breakup][0], BU_TA << 834         ETOT_PRF = aprf * amu / GAMMA_REL;
895             // Lorentz kinematics              << 835         PXPRFP = ETOT_PRF * VX_PREF / C;
896             //          BU_TAB(I_Breakup,5) =  << 836         PYPRFP = ETOT_PRF * VY_PREF / C;
897             //          change by Coulomb repu << 837         PZPRFP = ETOT_PRF * VZ_PREF / C;
898             //          BU_TAB(I_Breakup,6) +  << 838 
899             //          BU_TAB(I_Breakup,7) +  << 839         PX_BU_SUM = 0.0;
900             // Lorentz transformation          << 840         PY_BU_SUM = 0.0;
901             lorentz_boost(VX2_BU,              << 841         PZ_BU_SUM = 0.0;
902                           VY2_BU,              << 842 
903                           VZ2_BU,              << 843         PX_BU_SUM = PXPRFP;
904                           BU_TAB[I_Breakup][4] << 844         PY_BU_SUM = PYPRFP;
905                           BU_TAB[I_Breakup][5] << 845         PZ_BU_SUM = PZPRFP;
906                           BU_TAB[I_Breakup][6] << 846         E_tot_BU = ETOT_PRF;
907                           &VXOUT,              << 847 
908                           &VYOUT,              << 848         EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu;
909                           &VZOUT);             << 849 
910                                                << 850         for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){
911             BU_TAB[I_Breakup][4] = VXOUT;      << 851 // Lorentz kinematics - DM 17/5/2010
912             BU_TAB[I_Breakup][5] = VYOUT;      << 852 //         BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM
913             BU_TAB[I_Breakup][6] = VZOUT;      << 853 //         BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM
914                                                << 854 //         BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM
915             // Total momentum: Goldhaber + Cou << 855 // Lorentz transformation
916             VBU2 = BU_TAB[I_Breakup][4] * BU_T << 856           lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM,
917                    BU_TAB[I_Breakup][6] * BU_T << 857                 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6],
918             GAMMA_REL = std::sqrt(1.0 - VBU2 / << 858                 &VXOUT,&VYOUT,&VZOUT);
919             ETOT_BU = BU_TAB[I_Breakup][1] * a << 859 
920             PX_BU = ETOT_BU * BU_TAB[I_Breakup << 860           BU_TAB[I_Breakup][4] = VXOUT;
921             PY_BU = ETOT_BU * BU_TAB[I_Breakup << 861           BU_TAB[I_Breakup][5] = VYOUT;
922             PZ_BU = ETOT_BU * BU_TAB[I_Breakup << 862           BU_TAB[I_Breakup][6] = VZOUT;
923                                                << 863 
924             PX_BU_SUM = PX_BU_SUM + PX_BU;     << 864           VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] +
925             PY_BU_SUM = PY_BU_SUM + PY_BU;     << 865                  BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] +
926             PZ_BU_SUM = PZ_BU_SUM + PZ_BU;     << 866                  BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6];
927                                                << 867           GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C));
928         } // for I_Breakup                     << 868 
929                                                << 869           ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL;
930         //   In the frame of source (i.e. pref << 870 
931         P_BU_SUM = std::sqrt(PX_BU_SUM * PX_BU << 871           EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu /
932         // *********************************** << 872                     GAMMA_REL - BU_TAB[I_Breakup][1] * amu;
933         // PPRFP is in MeV/c                   << 873 
934         ETOT_SUM = std::sqrt(P_BU_SUM * P_BU_S << 874           PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C;
                                                   >> 875           PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C;
                                                   >> 876           PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C;
                                                   >> 877           E_tot_BU = E_tot_BU + ETOT_BU;
                                                   >> 878 
                                                   >> 879           PX_BU_SUM = PX_BU_SUM + PX_BU;
                                                   >> 880           PY_BU_SUM = PY_BU_SUM + PY_BU;
                                                   >> 881           PZ_BU_SUM = PZ_BU_SUM + PZ_BU;
                                                   >> 882         }// for I_Breakup
                                                   >> 883 
                                                   >> 884         if(std::abs(PX_BU_SUM)>10. || std::abs(PY_BU_SUM)>10. ||
                                                   >> 885          std::abs(PZ_BU_SUM)>10.){
                                                   >> 886 
                                                   >> 887 //   In the frame of source (i.e. prefragment after INCL)
                                                   >> 888         P_BU_SUM = std::sqrt(PX_BU_SUM*PX_BU_SUM + PY_BU_SUM*PY_BU_SUM +
                                                   >> 889                   PZ_BU_SUM*PZ_BU_SUM);
                                                   >> 890 // ********************************************************
                                                   >> 891 // PPRFP is in MeV/c
                                                   >> 892         ETOT_SUM = std::sqrt(P_BU_SUM*P_BU_SUM +
                                                   >> 893                   (AAINCL * amu)*(AAINCL * amu));
935                                                   894 
936         VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM;     895         VX_BU_SUM = C * PX_BU_SUM / ETOT_SUM;
937         VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM;     896         VY_BU_SUM = C * PY_BU_SUM / ETOT_SUM;
938         VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM;     897         VZ_BU_SUM = C * PZ_BU_SUM / ETOT_SUM;
939                                                   898 
940         // Lorentz kinematics - DM 17/5/2010   << 899 // Lorentz kinematics
941         //        VX_PREF = VX_PREF - VX_BU_SU << 900 //        VX_PREF = VX_PREF - VX_BU_SUM
942         //        VY_PREF = VY_PREF - VY_BU_SU << 901 //        VY_PREF = VY_PREF - VY_BU_SUM
943         //        VZ_PREF = VZ_PREF - VZ_BU_SU << 902 //        VZ_PREF = VZ_PREF - VZ_BU_SUM
944         // Lorentz transformation              << 903 // Lorentz transformation
945         lorentz_boost(-VX_BU_SUM, -VY_BU_SUM,  << 904         lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM,
                                                   >> 905                 VX_PREF,VY_PREF,VZ_PREF,
                                                   >> 906                 &VXOUT,&VYOUT,&VZOUT);
946                                                   907 
947         VX_PREF = VXOUT;                          908         VX_PREF = VXOUT;
948         VY_PREF = VYOUT;                          909         VY_PREF = VYOUT;
949         VZ_PREF = VZOUT;                          910         VZ_PREF = VZOUT;
950                                                   911 
951         VBU2 = VX_PREF * VX_PREF + VY_PREF * V << 912         VBU2 = VX_PREF*VX_PREF + VY_PREF*VY_PREF + VZ_PREF*VZ_PREF;
952         GAMMA_REL = std::sqrt(1.0 - VBU2 / (C  << 913         GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C));
953         ETOT_PRF = aprf * amu / GAMMA_REL;        914         ETOT_PRF = aprf * amu / GAMMA_REL;
954         PXPRFP = ETOT_PRF * VX_PREF / C;          915         PXPRFP = ETOT_PRF * VX_PREF / C;
955         PYPRFP = ETOT_PRF * VY_PREF / C;          916         PYPRFP = ETOT_PRF * VY_PREF / C;
956         PZPRFP = ETOT_PRF * VZ_PREF / C;          917         PZPRFP = ETOT_PRF * VZ_PREF / C;
957                                                   918 
958         PX_BU_SUM = 0.0;                          919         PX_BU_SUM = 0.0;
959         PY_BU_SUM = 0.0;                          920         PY_BU_SUM = 0.0;
960         PZ_BU_SUM = 0.0;                          921         PZ_BU_SUM = 0.0;
961                                                   922 
962         PX_BU_SUM = PXPRFP;                       923         PX_BU_SUM = PXPRFP;
963         PY_BU_SUM = PYPRFP;                       924         PY_BU_SUM = PYPRFP;
964         PZ_BU_SUM = PZPRFP;                       925         PZ_BU_SUM = PZPRFP;
965         E_tot_BU = ETOT_PRF;                      926         E_tot_BU = ETOT_PRF;
966                                                   927 
967         EKIN_BU = aprf * amu / GAMMA_REL - apr    928         EKIN_BU = aprf * amu / GAMMA_REL - aprf * amu;
968                                                   929 
969         for (I_Breakup = 0; I_Breakup < IMULTB << 930          for(I_Breakup=0;I_Breakup<IMULTBU;I_Breakup++){
970         {                                      << 931 // Lorentz kinematics - DM 17/5/2010
971             // Lorentz kinematics - DM 17/5/20 << 932 //         BU_TAB(I_Breakup,5) = BU_TAB(I_Breakup,5) - VX_BU_SUM
972             //         BU_TAB(I_Breakup,5) = B << 933 //         BU_TAB(I_Breakup,6) = BU_TAB(I_Breakup,6) - VY_BU_SUM
973             //         BU_TAB(I_Breakup,6) = B << 934 //         BU_TAB(I_Breakup,7) = BU_TAB(I_Breakup,7) - VZ_BU_SUM
974             //         BU_TAB(I_Breakup,7) = B << 935 // Lorentz transformation
975             // Lorentz transformation          << 936           lorentz_boost(-VX_BU_SUM,-VY_BU_SUM,-VZ_BU_SUM,
976             lorentz_boost(-VX_BU_SUM,          << 937                 BU_TAB[I_Breakup][4],BU_TAB[I_Breakup][5],BU_TAB[I_Breakup][6],
977                           -VY_BU_SUM,          << 938                 &VXOUT,&VYOUT,&VZOUT);
978                           -VZ_BU_SUM,          << 939 
979                           BU_TAB[I_Breakup][4] << 940           BU_TAB[I_Breakup][4] = VXOUT;
980                           BU_TAB[I_Breakup][5] << 941           BU_TAB[I_Breakup][5] = VYOUT;
981                           BU_TAB[I_Breakup][6] << 942           BU_TAB[I_Breakup][6] = VZOUT;
982                           &VXOUT,              << 943 
983                           &VYOUT,              << 944           VBU2 = BU_TAB[I_Breakup][4]*BU_TAB[I_Breakup][4] +
984                           &VZOUT);             << 945                  BU_TAB[I_Breakup][5]*BU_TAB[I_Breakup][5] +
985                                                << 946                  BU_TAB[I_Breakup][6]*BU_TAB[I_Breakup][6];
986             BU_TAB[I_Breakup][4] = VXOUT;      << 947           GAMMA_REL = std::sqrt(1.0 - VBU2 / (C*C));
987             BU_TAB[I_Breakup][5] = VYOUT;      << 948 
988             BU_TAB[I_Breakup][6] = VZOUT;      << 949           ETOT_BU = BU_TAB[I_Breakup][1]*amu/GAMMA_REL;
989                                                << 950 
990             VBU2 = BU_TAB[I_Breakup][4] * BU_T << 951           EKIN_BU = EKIN_BU + BU_TAB[I_Breakup][1] * amu /
991                    BU_TAB[I_Breakup][6] * BU_T << 952                     GAMMA_REL - BU_TAB[I_Breakup][1] * amu;
992             GAMMA_REL = std::sqrt(1.0 - VBU2 / << 953 
993                                                << 954           PX_BU = ETOT_BU * BU_TAB[I_Breakup][4] / C;
994             ETOT_BU = BU_TAB[I_Breakup][1] * a << 955           PY_BU = ETOT_BU * BU_TAB[I_Breakup][5] / C;
995                                                << 956           PZ_BU = ETOT_BU * BU_TAB[I_Breakup][6] / C;
996             EKIN_BU = EKIN_BU + BU_TAB[I_Break << 957           E_tot_BU = E_tot_BU + ETOT_BU;
997                                                << 958 
998             PX_BU = ETOT_BU * BU_TAB[I_Breakup << 959           PX_BU_SUM = PX_BU_SUM + PX_BU;
999             PY_BU = ETOT_BU * BU_TAB[I_Breakup << 960           PY_BU_SUM = PY_BU_SUM + PY_BU;
1000             PZ_BU = ETOT_BU * BU_TAB[I_Breaku << 961           PZ_BU_SUM = PZ_BU_SUM + PZ_BU;
1001             E_tot_BU = E_tot_BU + ETOT_BU;    << 962          }// for I_Breakup
1002                                               << 963         }// if DABS(PX_BU_SUM).GT.10.d0
1003             PX_BU_SUM = PX_BU_SUM + PX_BU;    << 964 //
1004             PY_BU_SUM = PY_BU_SUM + PY_BU;    << 965 //      Find the limits that fragment is bound - only done for neutrons and LCPs and for
1005             PZ_BU_SUM = PZ_BU_SUM + PZ_BU;    << 966 //      nuclei with A=Z, for other nuclei it will be done after decay:
1006         } // for I_Breakup                    << 967 
1007                                               << 968          INEWLOOP = 0;
1008         if (std::abs(PX_BU_SUM) > 10. || std: << 969          for(G4int i=0;i<IMULTBU;i++){
1009         {                                     << 970           if(BU_TAB[i][0]<3.0 || BU_TAB[i][0]==BU_TAB[i][1]){
1010                                               << 971             unstable_nuclei(idnint(BU_TAB[i][1]),idnint(BU_TAB[i][0]), &afpnew,&zfpnew,IOUNSTABLE,
1011             //   In the frame of source (i.e. << 972             BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6],
1012             P_BU_SUM = std::sqrt(PX_BU_SUM *  << 973             &VP1X,&VP1Y,&VP1Z,BU_TAB_TEMP,&ILOOP);
1013             // ****************************** << 974 
1014             // PPRFP is in MeV/c              << 975             if(IOUNSTABLE>0){
1015             ETOT_SUM = std::sqrt(P_BU_SUM * P << 976 // Properties of "heavy fragment":
1016                                               << 977              BU_TAB[i][1] = G4double(afpnew);
1017             VX_BU_SUM = C * PX_BU_SUM / ETOT_ << 978              BU_TAB[i][0] = G4double(zfpnew);
1018             VY_BU_SUM = C * PY_BU_SUM / ETOT_ << 979              BU_TAB[i][4] = VP1X;
1019             VZ_BU_SUM = C * PZ_BU_SUM / ETOT_ << 980              BU_TAB[i][5] = VP1Y;
1020                                               << 981              BU_TAB[i][6] = VP1Z;
1021             // Lorentz kinematics             << 982 
1022             //        VX_PREF = VX_PREF - VX_ << 983 //Properties of "light" fragments:
1023             //        VY_PREF = VY_PREF - VY_ << 984              for(int IJ=0;IJ<ILOOP;IJ++){
1024             //        VZ_PREF = VZ_PREF - VZ_ << 985               BU_TAB[IMULTBU+INEWLOOP+IJ][0] = BU_TAB_TEMP[IJ][0];
1025             // Lorentz transformation         << 986               BU_TAB[IMULTBU+INEWLOOP+IJ][1] = BU_TAB_TEMP[IJ][1];
1026             lorentz_boost(-VX_BU_SUM, -VY_BU_ << 987               BU_TAB[IMULTBU+INEWLOOP+IJ][4] = BU_TAB_TEMP[IJ][2];
1027                                               << 988               BU_TAB[IMULTBU+INEWLOOP+IJ][5] = BU_TAB_TEMP[IJ][3];
1028             VX_PREF = VXOUT;                  << 989               BU_TAB[IMULTBU+INEWLOOP+IJ][6] = BU_TAB_TEMP[IJ][4];
1029             VY_PREF = VYOUT;                  << 990               BU_TAB[IMULTBU+INEWLOOP+IJ][2] = 0.0;
1030             VZ_PREF = VZOUT;                  << 991               BU_TAB[IMULTBU+INEWLOOP+IJ][3] = 0.0;
1031                                               << 992              }// for ILOOP
1032             VBU2 = VX_PREF * VX_PREF + VY_PRE << 993 
1033             GAMMA_REL = std::sqrt(1.0 - VBU2  << 994              INEWLOOP = INEWLOOP + ILOOP;
1034             ETOT_PRF = aprf * amu / GAMMA_REL << 995 
1035             PXPRFP = ETOT_PRF * VX_PREF / C;  << 996             }// if IOUNSTABLE.GT.0
1036             PYPRFP = ETOT_PRF * VY_PREF / C;  << 997           }//if BU_TAB[I_Breakup][0]<3.0
1037             PZPRFP = ETOT_PRF * VZ_PREF / C;  << 998          }// for IMULTBU
1038                                               << 
1039             PX_BU_SUM = 0.0;                  << 
1040             PY_BU_SUM = 0.0;                  << 
1041             PZ_BU_SUM = 0.0;                  << 
1042                                               << 
1043             PX_BU_SUM = PXPRFP;               << 
1044             PY_BU_SUM = PYPRFP;               << 
1045             PZ_BU_SUM = PZPRFP;               << 
1046             E_tot_BU = ETOT_PRF;              << 
1047                                               << 
1048             EKIN_BU = aprf * amu / GAMMA_REL  << 
1049                                               << 
1050             for (I_Breakup = 0; I_Breakup < I << 
1051             {                                 << 
1052                 // Lorentz kinematics - DM 17 << 
1053                 //         BU_TAB(I_Breakup,5 << 
1054                 //         BU_TAB(I_Breakup,6 << 
1055                 //         BU_TAB(I_Breakup,7 << 
1056                 // Lorentz transformation     << 
1057                 lorentz_boost(-VX_BU_SUM,     << 
1058                               -VY_BU_SUM,     << 
1059                               -VZ_BU_SUM,     << 
1060                               BU_TAB[I_Breaku << 
1061                               BU_TAB[I_Breaku << 
1062                               BU_TAB[I_Breaku << 
1063                               &VXOUT,         << 
1064                               &VYOUT,         << 
1065                               &VZOUT);        << 
1066                                               << 
1067                 BU_TAB[I_Breakup][4] = VXOUT; << 
1068                 BU_TAB[I_Breakup][5] = VYOUT; << 
1069                 BU_TAB[I_Breakup][6] = VZOUT; << 
1070                                               << 
1071                 VBU2 = BU_TAB[I_Breakup][4] * << 
1072                        BU_TAB[I_Breakup][6] * << 
1073                 GAMMA_REL = std::sqrt(1.0 - V << 
1074                                               << 
1075                 ETOT_BU = BU_TAB[I_Breakup][1 << 
1076                                               << 
1077                 EKIN_BU = EKIN_BU + BU_TAB[I_ << 
1078                                               << 
1079                 PX_BU = ETOT_BU * BU_TAB[I_Br << 
1080                 PY_BU = ETOT_BU * BU_TAB[I_Br << 
1081                 PZ_BU = ETOT_BU * BU_TAB[I_Br << 
1082                 E_tot_BU = E_tot_BU + ETOT_BU << 
1083                                               << 
1084                 PX_BU_SUM = PX_BU_SUM + PX_BU << 
1085                 PY_BU_SUM = PY_BU_SUM + PY_BU << 
1086                 PZ_BU_SUM = PZ_BU_SUM + PZ_BU << 
1087             } // for I_Breakup                << 
1088         }     // if DABS(PX_BU_SUM).GT.10.d0  << 
1089           //                                  << 
1090         //      Find the limits that fragment << 
1091         //      LCPs and for nuclei with A=Z, << 
1092         //      decay:                        << 
1093                                               << 
1094         INEWLOOP = 0;                         << 
1095         for (G4int i = 0; i < IMULTBU; i++)   << 
1096         {                                     << 
1097             if (BU_TAB[i][0] < 3.0 || BU_TAB[ << 
1098             {                                 << 
1099                 unstable_nuclei(idnint(BU_TAB << 
1100                                 idnint(BU_TAB << 
1101                                 &afpnew,      << 
1102                                 &zfpnew,      << 
1103                                 IOUNSTABLE,   << 
1104                                 BU_TAB[i][4], << 
1105                                 BU_TAB[i][5], << 
1106                                 BU_TAB[i][6], << 
1107                                 &VP1X,        << 
1108                                 &VP1Y,        << 
1109                                 &VP1Z,        << 
1110                                 BU_TAB_TEMP,  << 
1111                                 &ILOOP);      << 
1112                                               << 
1113                 if (IOUNSTABLE > 0)           << 
1114                 {                             << 
1115                     // Properties of "heavy f << 
1116                     BU_TAB[i][1] = G4double(a << 
1117                     BU_TAB[i][0] = G4double(z << 
1118                     BU_TAB[i][4] = VP1X;      << 
1119                     BU_TAB[i][5] = VP1Y;      << 
1120                     BU_TAB[i][6] = VP1Z;      << 
1121                                               << 
1122                     // Properties of "light"  << 
1123                     for (int IJ = 0; IJ < ILO << 
1124                     {                         << 
1125                         BU_TAB[IMULTBU + INEW << 
1126                         BU_TAB[IMULTBU + INEW << 
1127                         BU_TAB[IMULTBU + INEW << 
1128                         BU_TAB[IMULTBU + INEW << 
1129                         BU_TAB[IMULTBU + INEW << 
1130                         BU_TAB[IMULTBU + INEW << 
1131                         BU_TAB[IMULTBU + INEW << 
1132                     } // for ILOOP            << 
1133                                               << 
1134                     INEWLOOP = INEWLOOP + ILO << 
1135                                               << 
1136                 } // if IOUNSTABLE.GT.0       << 
1137             }     // if BU_TAB[I_Breakup][0]< << 
1138         }         // for IMULTBU              << 
1139                                                  999 
1140         // Increased array of BU_TAB          << 1000 // Increased array of BU_TAB
1141         IMULTBU = IMULTBU + INEWLOOP;            1001         IMULTBU = IMULTBU + INEWLOOP;
1142         // Evaporation from multifragmentatio << 1002 // Evaporation from multifragmentation products
1143         opt->optimfallowed = 1; //  IMF is al << 1003         opt->optimfallowed = 1;  //  IMF is allowed
1144         fiss->ifis = 0;         //  fission i << 1004         fiss->ifis = 0;          //  fission is not allowed
1145         gammaemission = 0;                    << 1005         gammaemission=0;
1146         ILOOPBU = 0;                             1006         ILOOPBU = 0;
1147                                                  1007 
1148         //  Arrays for lambda emission from b << 1008 //  Arrays for lambda emission from breakup fragments
1149         G4double* problamb;                   << 1009          G4double * problamb;
1150         problamb = new G4double[IMULTBU];     << 1010          problamb = new G4double[IMULTBU];
1151         G4double sumN = aprf - zprf;          << 1011          G4double sumN = aprf - zprf;
1152         for (G4int i = 0; i < IMULTBU; i++)   << 1012          for(G4int i=0;i<IMULTBU;i++)sumN=sumN+BU_TAB[i][1]-BU_TAB[i][0];
1153             sumN = sumN + BU_TAB[i][1] - BU_T << 1013 
1154                                               << 1014          for(G4int i=0;i<IMULTBU;i++){
1155         for (G4int i = 0; i < IMULTBU; i++)   << 1015          problamb[i] = (BU_TAB[i][1]-BU_TAB[i][0])/sumN;
1156         {                                     << 1016          }
1157             problamb[i] = (BU_TAB[i][1] - BU_ << 1017          G4int * Nblamb;
1158         }                                     << 1018          Nblamb = new G4int[IMULTBU];
1159         G4int* Nblamb;                        << 1019          for(G4int i=0;i<IMULTBU;i++)Nblamb[i] = 0;
1160         Nblamb = new G4int[IMULTBU];          << 1020          for(G4int j=0;j<NbLam0;){
1161         for (G4int i = 0; i < IMULTBU; i++)   << 1021           G4double probtotal = (aprf - zprf)/sumN;
1162             Nblamb[i] = 0;                    << 1022           G4double ran =  G4AblaRandom::flat();
1163         for (G4int j = 0; j < NbLam0;)        << 1023 //   Lambdas in the heavy breakup fragment
1164         {                                     << 1024           if(ran <= probtotal){
1165             G4double probtotal = (aprf - zprf << 1025            NbLamprf++;
1166             G4double ran = G4AblaRandom::flat << 1026            goto directlamb0;
1167             //   Lambdas in the heavy breakup << 1027           }
1168             if (ran <= probtotal)             << 1028           for(G4int i=0;i<IMULTBU;i++){
1169             {                                 << 1029 //   Lambdas in the light breakup residues
1170                 NbLamprf++;                   << 1030            if(probtotal < ran && ran <= probtotal+problamb[i]){
1171                 goto directlamb0;             << 1031            Nblamb[i] = Nblamb[i] + 1;
1172             }                                 << 1032            goto directlamb0;
1173             for (G4int i = 0; i < IMULTBU; i+ << 1033            }
1174             {                                 << 1034            probtotal = probtotal + problamb[i];
1175                 //   Lambdas in the light bre << 1035           }
1176                 if (probtotal < ran && ran <= << 1036           directlamb0:
1177                 {                             << 1037           j++;
1178                     Nblamb[i] = Nblamb[i] + 1 << 1038          }
1179                     goto directlamb0;         << 1039 //
1180                 }                             << 1040          for(G4int i=0;i<IMULTBU;i++){
1181                 probtotal = probtotal + probl << 1041           EEBU = BU_TAB[i][2];
1182             }                                 << 1042           BU_TAB[i][10] = BU_TAB[i][6];
1183         directlamb0:                          << 1043           G4double jprfbu = BU_TAB[i][9];
1184             j++;                              << 1044           if(BU_TAB[i][0]>2.0){
1185         }                                     << 1045            G4int nbl = Nblamb[i];
1186         //                                    << 1046            evapora(BU_TAB[i][0],BU_TAB[i][1],&EEBU,0.0, &ZFBU, &AFBU, &mtota, &vz_evabu, &vx_evabu,&vy_evabu, &ff, &fimf, &ZIMFBU, &AIMFBU,&TKEIMFBU, &jprfbu, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&nbl);
1187         for (G4int i = 0; i < IMULTBU; i++)   << 1047 
1188         {                                     << 1048            Nblamb[i] = nbl;
1189             EEBU = BU_TAB[i][2];              << 1049            BU_TAB[i][9] = jprfbu;
1190             BU_TAB[i][10] = BU_TAB[i][6];     << 1050 
1191             G4double jprfbu = BU_TAB[i][9];   << 1051 //Velocities of evaporated particles (in the frame of the primary prefragment)
1192             if (BU_TAB[i][0] > 2.0)           << 1052                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
1193             {                                 << 1053                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
1194                 G4int nbl = Nblamb[i];        << 1054                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
1195                 evapora(BU_TAB[i][0],         << 1055                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
1196                         BU_TAB[i][1],         << 1056 //Lorentz kinematics
1197                         &EEBU,                << 1057 //                 DO IK = 3, 5, 1
1198                         0.0,                  << 1058 //                 EV_TAB(IJ+IEV_TAB,IK) = EV_TEMP(IJ,IK) + BU_TAB(I,IK+2)
1199                         &ZFBU,                << 1059 //                 ENDDO
1200                         &AFBU,                << 1060 // Lorentz transformation
1201                         &mtota,               << 1061                lorentz_boost(BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
1202                         &vz_evabu,            << 1062                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
1203                         &vx_evabu,            << 1063                 &VXOUT,&VYOUT,&VZOUT);
1204                         &vy_evabu,            << 1064                EV_TAB[IJ+IEV_TAB][2] = VXOUT;
1205                         &ff,                  << 1065                EV_TAB[IJ+IEV_TAB][3] = VYOUT;
1206                         &fimf,                << 1066                EV_TAB[IJ+IEV_TAB][4] = VZOUT;
1207                         &ZIMFBU,              << 1067                }
1208                         &AIMFBU,              << 1068                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1209                         &TKEIMFBU,            << 1069 
1210                         &jprfbu,              << 1070 //All velocities in the frame of the "primary" prefragment (after INC)
1211                         &inttype,             << 1071 // Lorentz kinematics
1212                         &inum,                << 1072 //                BU_TAB(I,5) = BU_TAB(I,5) + VX_EVABU
1213                         EV_TEMP,              << 1073 //                BU_TAB(I,6) = BU_TAB(I,6) + VY_EVABU
1214                         &IEV_TAB_TEMP,        << 1074 //                BU_TAB(I,7) = BU_TAB(I,7) + VZ_EVABU
1215                         &nbl);                << 1075 // Lorentz transformation
1216                                               << 1076                lorentz_boost(vx_evabu,vy_evabu,vz_evabu,
1217                 Nblamb[i] = nbl;              << 1077                 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
1218                 BU_TAB[i][9] = jprfbu;        << 1078                 &VXOUT,&VYOUT,&VZOUT);
1219                                               << 1079                BU_TAB[i][4] = VXOUT;
1220                 // Velocities of evaporated p << 1080                BU_TAB[i][5] = VYOUT;
1221                 // prefragment)               << 1081                BU_TAB[i][6] = VZOUT;
1222                 for (G4int IJ = 0; IJ < IEV_T << 1082 
1223                 {                             << 1083                if(fimf==0){
1224                     EV_TAB[IJ + IEV_TAB][0] = << 1084                  BU_TAB[i][7] = dint(ZFBU);
1225                     EV_TAB[IJ + IEV_TAB][1] = << 1085                  BU_TAB[i][8] = dint(AFBU);
1226                     EV_TAB[IJ + IEV_TAB][5] = << 1086                  BU_TAB[i][11]= nbl;
1227                     // Lorentz kinematics     << 1087                }// if fimf==0
1228                     //                  DO IK << 1088 
1229                     //                  EV_TA << 1089                if(fimf==1){
1230                     //                  BU_TA << 1090 //            PRINT*,'IMF EMISSION FROM BU PRODUCTS'
1231                     //  Lorentz transformatio << 1091 // IMF emission: Heavy partner is not allowed to fission or to emitt IMF.
1232                     lorentz_boost(BU_TAB[i][4 << 1092                //double FEE = EEBU;
1233                                   BU_TAB[i][5 << 1093                G4int FFBU1 = 0;
1234                                   BU_TAB[i][6 << 1094                G4int FIMFBU1 = 0;
1235                                   EV_TEMP[IJ] << 1095                opt->optimfallowed = 0;  //  IMF is not allowed
1236                                   EV_TEMP[IJ] << 1096                fiss->ifis = 0;          //  fission is not allowed
1237                                   EV_TEMP[IJ] << 1097 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF
1238                                   &VXOUT,     << 1098                G4double EkinR1 = TKEIMFBU * AIMFBU / (AFBU+AIMFBU);
1239                                   &VYOUT,     << 1099                G4double EkinR2 = TKEIMFBU * AFBU / (AFBU+AIMFBU);
1240                                   &VZOUT);    << 1100                G4double V1 = std::sqrt(EkinR1/AFBU) * 1.3887;
1241                     EV_TAB[IJ + IEV_TAB][2] = << 1101                G4double V2 = std::sqrt(EkinR2/AIMFBU) * 1.3887;
1242                     EV_TAB[IJ + IEV_TAB][3] = << 1102                G4double VZ1_IMF = (2.0 * G4AblaRandom::flat() - 1.0) * V1;
1243                     EV_TAB[IJ + IEV_TAB][4] = << 1103                G4double VPERP1 = std::sqrt(V1*V1 - VZ1_IMF*VZ1_IMF);
1244                 }                             << 1104                G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
1245                 IEV_TAB = IEV_TAB + IEV_TAB_T << 1105                G4double VX1_IMF = VPERP1 * std::sin(ALPHA1);
                                                   >> 1106                G4double VY1_IMF = VPERP1 * std::cos(ALPHA1);
                                                   >> 1107                G4double VX2_IMF = - VX1_IMF / V1 * V2;
                                                   >> 1108                G4double VY2_IMF = - VY1_IMF / V1 * V2;
                                                   >> 1109                G4double VZ2_IMF = - VZ1_IMF / V1 * V2;
                                                   >> 1110 
                                                   >> 1111                G4double EEIMFP = EEBU * AFBU /(AFBU + AIMFBU);
                                                   >> 1112                G4double EEIMF = EEBU * AIMFBU /(AFBU + AIMFBU);
                                                   >> 1113 
                                                   >> 1114 // Decay of heavy partner
                                                   >> 1115      G4double IINERTTOT = 0.40 * 931.490 * 1.160*1.160 *( std::pow(AIMFBU,5.0/3.0) + std::pow(AFBU,5.0/3.0)) + 931.490 * 1.160*1.160*AIMFBU*AFBU/(AIMFBU+AFBU)*(std::pow(AIMFBU,1./3.) + std::pow(AFBU,1./3.))*(std::pow(AIMFBU,1./3.) + std::pow(AFBU,1./3.));
                                                   >> 1116 
                                                   >> 1117      G4double JPRFHEAVY = BU_TAB[i][9] * 0.4 * 931.49 * 1.16*1.16 * std::pow(AFBU,5.0/3.0) / IINERTTOT;
                                                   >> 1118      G4double JPRFLIGHT = BU_TAB[i][9] * 0.4 * 931.49 * 1.16*1.16 * std::pow(AIMFBU,5.0/3.0) / IINERTTOT;
                                                   >> 1119 
                                                   >> 1120 // Lorentz kinematics
                                                   >> 1121 //           BU_TAB(I,5) = BU_TAB(I,5) + VX1_IMF
                                                   >> 1122 //           BU_TAB(I,6) = BU_TAB(I,6) + VY1_IMF
                                                   >> 1123 //           BU_TAB(I,7) = BU_TAB(I,7) + VZ1_IMF
                                                   >> 1124 // Lorentz transformation
                                                   >> 1125                lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF,
                                                   >> 1126                 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
                                                   >> 1127                 &VXOUT,&VYOUT,&VZOUT);
                                                   >> 1128                BU_TAB[i][4] = VXOUT;
                                                   >> 1129                BU_TAB[i][5] = VYOUT;
                                                   >> 1130                BU_TAB[i][6] = VZOUT;
                                                   >> 1131 
                                                   >> 1132      G4double vx1ev_imf=0., vy1ev_imf=0., vz1ev_imf=0., zdummy=0., adummy=0., tkedummy=0.,jprf1=0.;
                                                   >> 1133 
                                                   >> 1134  //  Lambda particles 
                                                   >> 1135       G4int NbLamH=0;
                                                   >> 1136       G4int NbLamimf=0;
                                                   >> 1137       G4double pbH = (AFBU-ZFBU) / (AFBU-ZFBU+AIMFBU-ZIMFBU); 
                                                   >> 1138       for(G4int j=0;j<nbl;j++){
                                                   >> 1139        if(G4AblaRandom::flat()<pbH){
                                                   >> 1140         NbLamH++;
                                                   >> 1141        }else{
                                                   >> 1142         NbLamimf++;
                                                   >> 1143        }
                                                   >> 1144       }
                                                   >> 1145 // Decay of IMF's partner:
                                                   >> 1146                evapora(ZFBU,AFBU,&EEIMFP,JPRFHEAVY, &ZFFBU, &AFFBU, &mtota,  &vz1ev_imf, &vx1ev_imf,&vy1ev_imf, &FFBU1, &FIMFBU1, &zdummy, &adummy,&tkedummy, &jprf1, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamH);
1246                                                  1147 
1247                 // All velocities in the fram << 1148                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
1248                 //  Lorentz kinematics        << 1149                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
1249                 //                 BU_TAB(I,5 << 1150                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
1250                 //                 BU_TAB(I,6 << 1151                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
1251                 //                 BU_TAB(I,7 << 1152 //Lorentz kinematics
1252                 //  Lorentz transformation    << 1153 //                 DO IK = 3, 5, 1
1253                 lorentz_boost(                << 1154 //                 EV_TAB(IJ+IEV_TAB,IK) = EV_TEMP(IJ,IK) + BU_TAB(I,IK+2)
1254                     vx_evabu, vy_evabu, vz_ev << 1155 //                 ENDDO
1255                 BU_TAB[i][4] = VXOUT;         << 1156 // Lorentz transformation
1256                 BU_TAB[i][5] = VYOUT;         << 1157                lorentz_boost(BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
1257                 BU_TAB[i][6] = VZOUT;         << 1158                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
1258                                               << 1159                 &VXOUT,&VYOUT,&VZOUT);
1259                 if (fimf == 0)                << 1160                EV_TAB[IJ+IEV_TAB][2] = VXOUT;
1260                 {                             << 1161                EV_TAB[IJ+IEV_TAB][3] = VYOUT;
1261                     BU_TAB[i][7] = dint(ZFBU) << 1162                EV_TAB[IJ+IEV_TAB][4] = VZOUT;
1262                     BU_TAB[i][8] = dint(AFBU) << 1163                }
1263                     BU_TAB[i][11] = nbl;      << 1164                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1264                 } // if fimf==0               << 1165 
1265                                               << 1166                BU_TAB[i][7] = dint(ZFFBU);
1266                 if (fimf == 1)                << 1167                BU_TAB[i][8] = dint(AFFBU);
1267                 {                             << 1168                BU_TAB[i][11]= NbLamH;
1268                     //            PRINT*,'IMF << 1169 //Lorentz kinematics
1269                     // IMF emission: Heavy pa << 1170 //           BU_TAB(I,5) = BU_TAB(I,5) + vx1ev_imf
1270                     // IMF.                   << 1171 //           BU_TAB(I,6) = BU_TAB(I,6) + vy1ev_imf
1271                     // double FEE = EEBU;     << 1172 //           BU_TAB(I,7) = BU_TAB(I,7) + vz1ev_imf
1272                     G4int FFBU1 = 0;          << 1173                lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf,
1273                     G4int FIMFBU1 = 0;        << 1174                 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
1274                     opt->optimfallowed = 0; / << 1175                 &VXOUT,&VYOUT,&VZOUT);
1275                     fiss->ifis = 0;         / << 1176                BU_TAB[i][4] = VXOUT;
1276                     // Velocities of IMF and  << 1177                BU_TAB[i][5] = VYOUT;
1277                     G4double EkinR1 = TKEIMFB << 1178                BU_TAB[i][6] = VZOUT;
1278                     G4double EkinR2 = TKEIMFB << 1179 // For IMF - fission and IMF emission are not allowed
1279                     G4double V1 = std::sqrt(E << 1180               G4int FFBU2 = 0;
1280                     G4double V2 = std::sqrt(E << 1181               G4int FIMFBU2 = 0;
1281                     G4double VZ1_IMF = (2.0 * << 1182               opt->optimfallowed = 0;  //  IMF is not allowed
1282                     G4double VPERP1 = std::sq << 1183               fiss->ifis = 0;          //  fission is not allowed
1283                     G4double ALPHA1 = G4AblaR << 1184 // Decay of IMF
1284                     G4double VX1_IMF = VPERP1 << 1185               G4double zffimf, affimf,zdummy1, adummy1, tkedummy1, jprf2, vx2ev_imf, vy2ev_imf, vz2ev_imf;
1285                     G4double VY1_IMF = VPERP1 << 1186 
1286                     G4double VX2_IMF = -VX1_I << 1187               evapora(ZIMFBU,AIMFBU,&EEIMF,JPRFLIGHT, &zffimf, &affimf, &mtota, &vz2ev_imf, &vx2ev_imf,&vy2ev_imf, &FFBU2, &FIMFBU2, &zdummy1, &adummy1,&tkedummy1, &jprf2, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamimf);
1287                     G4double VY2_IMF = -VY1_I << 1188 
1288                     G4double VZ2_IMF = -VZ1_I << 1189                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
1289                                               << 1190                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
1290                     G4double EEIMFP = EEBU *  << 1191                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
1291                     G4double EEIMF = EEBU * A << 1192                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
1292                                               << 1193 //Lorentz kinematics
1293                     // Decay of heavy partner << 1194 //            EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + BU_TAB(I,5) +VX2_IMF
1294                     G4double IINERTTOT =      << 1195 //            EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + BU_TAB(I,6) +VY2_IMF
1295                         0.40 * 931.490 * 1.16 << 1196 //            EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + BU_TAB(I,7) +VZ2_IMF
1296                         931.490 * 1.160 * 1.1 << 1197 // Lorentz transformation
1297                             (std::pow(AIMFBU, << 1198                lorentz_boost(BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
1298                             (std::pow(AIMFBU, << 1199                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
1299                                               << 1200                 &VXOUT,&VYOUT,&VZOUT);
1300                     G4double JPRFHEAVY =      << 1201                lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF,
1301                         BU_TAB[i][9] * 0.4 *  << 1202                 VXOUT,VYOUT,VZOUT,
1302                     G4double JPRFLIGHT =      << 1203                 &VX2OUT,&VY2OUT,&VZ2OUT);
1303                         BU_TAB[i][9] * 0.4 *  << 1204                EV_TAB[IJ+IEV_TAB][2] = VX2OUT;
1304                                               << 1205                EV_TAB[IJ+IEV_TAB][3] = VY2OUT;
1305                     // Lorentz kinematics     << 1206                EV_TAB[IJ+IEV_TAB][4] = VZ2OUT;
1306                     //           BU_TAB(I,5)  << 1207                }
1307                     //           BU_TAB(I,6)  << 1208                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1308                     //           BU_TAB(I,7)  << 1209 
1309                     // Lorentz transformation << 1210                BU_TAB[IMULTBU+ILOOPBU][0] = BU_TAB[i][0];
1310                     lorentz_boost(            << 1211                BU_TAB[IMULTBU+ILOOPBU][1] = BU_TAB[i][1];
1311                         VX1_IMF, VY1_IMF, VZ1 << 1212                BU_TAB[IMULTBU+ILOOPBU][2] = BU_TAB[i][2];
1312                     BU_TAB[i][4] = VXOUT;     << 1213                BU_TAB[IMULTBU+ILOOPBU][3] = BU_TAB[i][3];
1313                     BU_TAB[i][5] = VYOUT;     << 1214                BU_TAB[IMULTBU+ILOOPBU][7] = dint(zffimf);
1314                     BU_TAB[i][6] = VZOUT;     << 1215                BU_TAB[IMULTBU+ILOOPBU][8] = dint(affimf);
1315                                               << 1216                BU_TAB[IMULTBU+ILOOPBU][11]= NbLamimf;
1316                     G4double vx1ev_imf = 0.,  << 1217 // Lorentz transformation
1317                              jprf1 = 0.;      << 1218                lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF,
1318                                               << 1219                 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
1319                     //  Lambda particles      << 1220                 &VXOUT,&VYOUT,&VZOUT);
1320                     G4int NbLamH = 0;         << 1221                lorentz_boost(vx2ev_imf,vy2ev_imf,vz2ev_imf,
1321                     G4int NbLamimf = 0;       << 1222                 VXOUT,VYOUT,VZOUT,
1322                     G4double pbH = (AFBU - ZF << 1223                 &VX2OUT,&VY2OUT,&VZ2OUT);
1323                     for (G4int j = 0; j < nbl << 1224                BU_TAB[IMULTBU+ILOOPBU][4] = VX2OUT;
1324                     {                         << 1225                BU_TAB[IMULTBU+ILOOPBU][5] = VY2OUT;
1325                         if (G4AblaRandom::fla << 1226                BU_TAB[IMULTBU+ILOOPBU][6] = VZ2OUT;
1326                         {                     << 1227                ILOOPBU = ILOOPBU + 1;
1327                             NbLamH++;         << 1228                }// if fimf==1
1328                         }                     << 1229 
1329                         else                  << 1230           } else {// if BU_TAB(I,1).GT.2.D0
1330                         {                     << 1231       //BU_TAB[i][0] = BU_TAB[i][0];
1331                             NbLamimf++;       << 1232       //BU_TAB[i][1] = BU_TAB[i][1];
1332                         }                     << 1233       //BU_TAB[i][2] = BU_TAB[i][2];
1333                     }                         << 1234       //BU_TAB[i][3] = BU_TAB[i][3];
1334                     // Decay of IMF's partner << 1235            BU_TAB[i][7] = BU_TAB[i][0];
1335                     evapora(ZFBU,             << 1236            BU_TAB[i][8] = BU_TAB[i][1];
1336                             AFBU,             << 1237            //BU_TAB[i][4] = BU_TAB[i][4];
1337                             &EEIMFP,          << 1238            //BU_TAB[i][5] = BU_TAB[i][5];
1338                             JPRFHEAVY,        << 1239            //BU_TAB[i][6] = BU_TAB[i][6];
1339                             &ZFFBU,           << 1240            BU_TAB[i][11]= Nblamb[i];
1340                             &AFFBU,           << 1241           }// if BU_TAB(I,1).GT.2.D0
1341                             &mtota,           << 1242          }// for IMULTBU
1342                             &vz1ev_imf,       << 
1343                             &vx1ev_imf,       << 
1344                             &vy1ev_imf,       << 
1345                             &FFBU1,           << 
1346                             &FIMFBU1,         << 
1347                             &zdummy,          << 
1348                             &adummy,          << 
1349                             &tkedummy,        << 
1350                             &jprf1,           << 
1351                             &inttype,         << 
1352                             &inum,            << 
1353                             EV_TEMP,          << 
1354                             &IEV_TAB_TEMP,    << 
1355                             &NbLamH);         << 
1356                                               << 
1357                     for (G4int IJ = 0; IJ < I << 
1358                     {                         << 
1359                         EV_TAB[IJ + IEV_TAB][ << 
1360                         EV_TAB[IJ + IEV_TAB][ << 
1361                         EV_TAB[IJ + IEV_TAB][ << 
1362                         // Lorentz kinematics << 
1363                         //                  D << 
1364                         //                  E << 
1365                         //                  B << 
1366                         //  Lorentz transform << 
1367                         lorentz_boost(BU_TAB[ << 
1368                                       BU_TAB[ << 
1369                                       BU_TAB[ << 
1370                                       EV_TEMP << 
1371                                       EV_TEMP << 
1372                                       EV_TEMP << 
1373                                       &VXOUT, << 
1374                                       &VYOUT, << 
1375                                       &VZOUT) << 
1376                         EV_TAB[IJ + IEV_TAB][ << 
1377                         EV_TAB[IJ + IEV_TAB][ << 
1378                         EV_TAB[IJ + IEV_TAB][ << 
1379                     }                         << 
1380                     IEV_TAB = IEV_TAB + IEV_T << 
1381                                               << 
1382                     BU_TAB[i][7] = dint(ZFFBU << 
1383                     BU_TAB[i][8] = dint(AFFBU << 
1384                     BU_TAB[i][11] = NbLamH;   << 
1385                     // Lorentz kinematics     << 
1386                     //            BU_TAB(I,5) << 
1387                     //            BU_TAB(I,6) << 
1388                     //            BU_TAB(I,7) << 
1389                     lorentz_boost(vx1ev_imf,  << 
1390                                   vy1ev_imf,  << 
1391                                   vz1ev_imf,  << 
1392                                   BU_TAB[i][4 << 
1393                                   BU_TAB[i][5 << 
1394                                   BU_TAB[i][6 << 
1395                                   &VXOUT,     << 
1396                                   &VYOUT,     << 
1397                                   &VZOUT);    << 
1398                     BU_TAB[i][4] = VXOUT;     << 
1399                     BU_TAB[i][5] = VYOUT;     << 
1400                     BU_TAB[i][6] = VZOUT;     << 
1401                     // For IMF - fission and  << 
1402                     G4int FFBU2 = 0;          << 
1403                     G4int FIMFBU2 = 0;        << 
1404                     opt->optimfallowed = 0; / << 
1405                     fiss->ifis = 0;         / << 
1406                                             / << 
1407                     G4double zffimf, affimf,  << 
1408                                               << 
1409                     evapora(ZIMFBU,           << 
1410                             AIMFBU,           << 
1411                             &EEIMF,           << 
1412                             JPRFLIGHT,        << 
1413                             &zffimf,          << 
1414                             &affimf,          << 
1415                             &mtota,           << 
1416                             &vz2ev_imf,       << 
1417                             &vx2ev_imf,       << 
1418                             &vy2ev_imf,       << 
1419                             &FFBU2,           << 
1420                             &FIMFBU2,         << 
1421                             &zdummy1,         << 
1422                             &adummy1,         << 
1423                             &tkedummy1,       << 
1424                             &jprf2,           << 
1425                             &inttype,         << 
1426                             &inum,            << 
1427                             EV_TEMP,          << 
1428                             &IEV_TAB_TEMP,    << 
1429                             &NbLamimf);       << 
1430                                               << 
1431                     for (G4int IJ = 0; IJ < I << 
1432                     {                         << 
1433                         EV_TAB[IJ + IEV_TAB][ << 
1434                         EV_TAB[IJ + IEV_TAB][ << 
1435                         EV_TAB[IJ + IEV_TAB][ << 
1436                         // Lorentz kinematics << 
1437                         //             EV_TAB << 
1438                         //             +VX2_I << 
1439                         //             BU_TAB << 
1440                         //             EV_TEM << 
1441                         //  Lorentz transform << 
1442                         lorentz_boost(BU_TAB[ << 
1443                                       BU_TAB[ << 
1444                                       BU_TAB[ << 
1445                                       EV_TEMP << 
1446                                       EV_TEMP << 
1447                                       EV_TEMP << 
1448                                       &VXOUT, << 
1449                                       &VYOUT, << 
1450                                       &VZOUT) << 
1451                         lorentz_boost(VX2_IMF << 
1452                         EV_TAB[IJ + IEV_TAB][ << 
1453                         EV_TAB[IJ + IEV_TAB][ << 
1454                         EV_TAB[IJ + IEV_TAB][ << 
1455                     }                         << 
1456                     IEV_TAB = IEV_TAB + IEV_T << 
1457                                               << 
1458                     BU_TAB[IMULTBU + ILOOPBU] << 
1459                     BU_TAB[IMULTBU + ILOOPBU] << 
1460                     BU_TAB[IMULTBU + ILOOPBU] << 
1461                     BU_TAB[IMULTBU + ILOOPBU] << 
1462                     BU_TAB[IMULTBU + ILOOPBU] << 
1463                     BU_TAB[IMULTBU + ILOOPBU] << 
1464                     BU_TAB[IMULTBU + ILOOPBU] << 
1465                     // Lorentz transformation << 
1466                     lorentz_boost(            << 
1467                         VX2_IMF, VY2_IMF, VZ2 << 
1468                     lorentz_boost(vx2ev_imf,  << 
1469                     BU_TAB[IMULTBU + ILOOPBU] << 
1470                     BU_TAB[IMULTBU + ILOOPBU] << 
1471                     BU_TAB[IMULTBU + ILOOPBU] << 
1472                     ILOOPBU = ILOOPBU + 1;    << 
1473                 } // if fimf==1               << 
1474             }                                 << 
1475             else                              << 
1476             { // if BU_TAB(I,1).GT.2.D0       << 
1477               // BU_TAB[i][0] = BU_TAB[i][0]; << 
1478                 // BU_TAB[i][1] = BU_TAB[i][1 << 
1479                 // BU_TAB[i][2] = BU_TAB[i][2 << 
1480                 // BU_TAB[i][3] = BU_TAB[i][3 << 
1481                 BU_TAB[i][7] = BU_TAB[i][0];  << 
1482                 BU_TAB[i][8] = BU_TAB[i][1];  << 
1483                 // BU_TAB[i][4] = BU_TAB[i][4 << 
1484                 // BU_TAB[i][5] = BU_TAB[i][5 << 
1485                 // BU_TAB[i][6] = BU_TAB[i][6 << 
1486                 BU_TAB[i][11] = Nblamb[i];    << 
1487             } // if BU_TAB(I,1).GT.2.D0       << 
1488         }     // for IMULTBU                  << 
1489                                                  1243 
1490         IMULTBU = IMULTBU + ILOOPBU;          << 1244          IMULTBU = IMULTBU + ILOOPBU;
1491         //                                    << 1245 //
1492         // RESOLVE UNSTABLE NUCLEI            << 1246 // RESOLVE UNSTABLE NUCLEI
1493         //                                    << 1247 //
1494         INEWLOOP = 0;                         << 1248       INEWLOOP = 0;
1495         ABU_SUM = 0.0;                        << 1249       ABU_SUM = 0.0;
1496         ZBU_SUM = 0.0;                        << 1250       ZBU_SUM = 0.0;
1497         //                                    << 1251 //
1498         for (G4int i = 0; i < IMULTBU; i++)   << 1252       for(G4int i=0;i<IMULTBU;i++){
1499         {                                     << 1253        ABU_SUM = ABU_SUM + BU_TAB[i][8];
1500             ABU_SUM = ABU_SUM + BU_TAB[i][8]; << 1254        ZBU_SUM = ZBU_SUM + BU_TAB[i][7];
1501             ZBU_SUM = ZBU_SUM + BU_TAB[i][7]; << 1255        unstable_nuclei(idnint(BU_TAB[i][8]),idnint(BU_TAB[i][7]), &afpnew,&zfpnew,IOUNSTABLE,
1502             unstable_nuclei(idnint(BU_TAB[i][ << 1256             BU_TAB[i][4], BU_TAB[i][5], BU_TAB[i][6],
1503                             idnint(BU_TAB[i][ << 1257             &VP1X,&VP1Y,&VP1Z,BU_TAB_TEMP1,&ILOOP);
1504                             &afpnew,          << 1258 
1505                             &zfpnew,          << 1259 //From now on, all neutrons and LCP created in above subroutine are part of the
1506                             IOUNSTABLE,       << 1260 // BU_TAB array (see below - Properties of "light" fragments). Therefore,
1507                             BU_TAB[i][4],     << 1261 // NEVA, PEVA ... are not needed any more in the break-up stage.
1508                             BU_TAB[i][5],     << 1262 
1509                             BU_TAB[i][6],     << 1263          if(IOUNSTABLE>0){
1510                             &VP1X,            << 1264 // Properties of "heavy fragment":
1511                             &VP1Y,            << 1265             ABU_SUM = ABU_SUM + G4double(afpnew) - BU_TAB[i][8];
1512                             &VP1Z,            << 1266             ZBU_SUM = ZBU_SUM + G4double(zfpnew) - BU_TAB[i][7];
1513                             BU_TAB_TEMP1,     << 1267              BU_TAB[i][8] = G4double(afpnew);
1514                             &ILOOP);          << 1268              BU_TAB[i][7] = G4double(zfpnew);
1515                                               << 1269              BU_TAB[i][4] = VP1X;
1516             // From now on, all neutrons and  << 1270              BU_TAB[i][5] = VP1Y;
1517             // of the                         << 1271              BU_TAB[i][6] = VP1Z;
1518             //  BU_TAB array (see below - Pro << 1272 
1519             //  NEVA, PEVA ... are not needed << 1273 //Properties of "light" fragments:
1520                                               << 1274              for(G4int IJ=0;IJ<ILOOP;IJ++){
1521             if (IOUNSTABLE > 0)               << 1275               BU_TAB[IMULTBU+INEWLOOP+IJ][7] = BU_TAB_TEMP1[IJ][0];
1522             {                                 << 1276               BU_TAB[IMULTBU+INEWLOOP+IJ][8] = BU_TAB_TEMP1[IJ][1];
1523                 // Properties of "heavy fragm << 1277               BU_TAB[IMULTBU+INEWLOOP+IJ][4] = BU_TAB_TEMP1[IJ][2];
1524                 ABU_SUM = ABU_SUM + G4double( << 1278               BU_TAB[IMULTBU+INEWLOOP+IJ][5] = BU_TAB_TEMP1[IJ][3];
1525                 ZBU_SUM = ZBU_SUM + G4double( << 1279               BU_TAB[IMULTBU+INEWLOOP+IJ][6] = BU_TAB_TEMP1[IJ][4];
1526                 BU_TAB[i][8] = G4double(afpne << 1280               BU_TAB[IMULTBU+INEWLOOP+IJ][2] = 0.0;
1527                 BU_TAB[i][7] = G4double(zfpne << 1281               BU_TAB[IMULTBU+INEWLOOP+IJ][3] = 0.0;
1528                 BU_TAB[i][4] = VP1X;          << 1282               BU_TAB[IMULTBU+INEWLOOP+IJ][0] = BU_TAB[i][0];
1529                 BU_TAB[i][5] = VP1Y;          << 1283               BU_TAB[IMULTBU+INEWLOOP+IJ][1] = BU_TAB[i][1];
1530                 BU_TAB[i][6] = VP1Z;          << 1284               BU_TAB[IMULTBU+INEWLOOP+IJ][11] = BU_TAB[i][11];
1531                                               << 1285               ABU_SUM = ABU_SUM + BU_TAB[IMULTBU+INEWLOOP+IJ][8];
1532                 // Properties of "light" frag << 1286               ZBU_SUM = ZBU_SUM + BU_TAB[IMULTBU+INEWLOOP+IJ][7];
1533                 for (G4int IJ = 0; IJ < ILOOP << 1287              }// for ILOOP
1534                 {                             << 1288 
1535                     BU_TAB[IMULTBU + INEWLOOP << 1289              INEWLOOP = INEWLOOP + ILOOP;
1536                     BU_TAB[IMULTBU + INEWLOOP << 1290          }// if(IOUNSTABLE>0)
1537                     BU_TAB[IMULTBU + INEWLOOP << 1291       }// for IMULTBU unstable
1538                     BU_TAB[IMULTBU + INEWLOOP << 
1539                     BU_TAB[IMULTBU + INEWLOOP << 
1540                     BU_TAB[IMULTBU + INEWLOOP << 
1541                     BU_TAB[IMULTBU + INEWLOOP << 
1542                     BU_TAB[IMULTBU + INEWLOOP << 
1543                     BU_TAB[IMULTBU + INEWLOOP << 
1544                     BU_TAB[IMULTBU + INEWLOOP << 
1545                     ABU_SUM = ABU_SUM + BU_TA << 
1546                     ZBU_SUM = ZBU_SUM + BU_TA << 
1547                 } // for ILOOP                << 
1548                                               << 
1549                 INEWLOOP = INEWLOOP + ILOOP;  << 
1550             } // if(IOUNSTABLE>0)             << 
1551         }     // for IMULTBU unstable         << 
1552                                                  1292 
1553         // Increased array of BU_TAB          << 1293 // Increased array of BU_TAB
1554         IMULTBU = IMULTBU + INEWLOOP;            1294         IMULTBU = IMULTBU + INEWLOOP;
1555                                                  1295 
1556         // Transform all velocities into the  << 1296 // Transform all velocities into the rest frame of the projectile
1557         lorentz_boost(VX_incl, VY_incl, VZ_in << 1297         lorentz_boost(VX_incl,VY_incl,VZ_incl,
                                                   >> 1298                 VX_PREF,VY_PREF,VZ_PREF,
                                                   >> 1299                 &VXOUT,&VYOUT,&VZOUT);
1558         VX_PREF = VXOUT;                         1300         VX_PREF = VXOUT;
1559         VY_PREF = VYOUT;                         1301         VY_PREF = VYOUT;
1560         VZ_PREF = VZOUT;                         1302         VZ_PREF = VZOUT;
1561                                                  1303 
1562         for (G4int i = 0; i < IMULTBU; i++)   << 1304         for(G4int i=0;i<IMULTBU;i++){
1563         {                                     << 1305          lorentz_boost(VX_incl,VY_incl,VZ_incl,
1564             lorentz_boost(VX_incl, VY_incl, V << 1306                 BU_TAB[i][4],BU_TAB[i][5],BU_TAB[i][6],
1565             BU_TAB[i][4] = VXOUT;             << 1307                 &VXOUT,&VYOUT,&VZOUT);
1566             BU_TAB[i][5] = VYOUT;             << 1308          BU_TAB[i][4] = VXOUT;
1567             BU_TAB[i][6] = VZOUT;             << 1309          BU_TAB[i][5] = VYOUT;
1568         }                                     << 1310          BU_TAB[i][6] = VZOUT;
1569         for (G4int i = 0; i < IEV_TAB; i++)   << 1311         }
1570         {                                     << 1312         for(G4int i=0;i<IEV_TAB;i++){
1571             lorentz_boost(VX_incl, VY_incl, V << 1313          lorentz_boost(VX_incl,VY_incl,VZ_incl,
1572             EV_TAB[i][2] = VXOUT;             << 1314                 EV_TAB[i][2],EV_TAB[i][3],EV_TAB[i][4],
1573             EV_TAB[i][3] = VYOUT;             << 1315                 &VXOUT,&VYOUT,&VZOUT);
1574             EV_TAB[i][4] = VZOUT;             << 1316          EV_TAB[i][2] = VXOUT;
1575         }                                     << 1317          EV_TAB[i][3] = VYOUT;
1576         if (IMULTBU > 200)                    << 1318          EV_TAB[i][4] = VZOUT;
1577             std::cout << "IMULTBU>200 " << IM << 1319         }
1578         delete[] problamb;                    << 1320         if(IMULTBU>200)std::cout << "IMULTBU>200 " << IMULTBU << std::endl;
1579         delete[] Nblamb;                      << 1321         delete problamb;
1580     } // if(T_diff>0.1)                       << 1322         delete Nblamb;
1581       // End of multi-fragmentation           << 1323         }// if(T_diff>0.1)
1582 mult7777:                                     << 1324         // End of multi-fragmentation
1583                                               << 1325       mult7777:
1584     // Start basic de-excitation of fragments << 1326 
1585     aprfp = idnint(aprf);                     << 1327 // Start basic de-excitation of fragments
1586     zprfp = idnint(zprf);                     << 1328       aprfp = idnint(aprf);
1587                                               << 1329       zprfp = idnint(zprf);
1588     if (IMULTIFR == 0)                        << 1330      
1589     {                                         << 1331       if(IMULTIFR == 0){
1590         // These momenta are in the frame of  << 1332 // These momenta are in the frame of the projectile (or target in case of direct kinematics)
1591         // direct kinematics)                 << 1333        VX_PREF = VX_incl;
1592         VX_PREF = VX_incl;                    << 1334        VY_PREF = VY_incl;
1593         VY_PREF = VY_incl;                    << 1335        VZ_PREF = VZ_incl;
1594         VZ_PREF = VZ_incl;                    << 1336       }
1595     }                                         << 1337 // Lambdas after multi-fragmentation
1596     // Lambdas after multi-fragmentation      << 1338       if(IMULTIFR == 1){
1597     if (IMULTIFR == 1)                        << 1339        NbLam0 = NbLamprf;
1598     {                                         << 1340       }
1599         NbLam0 = NbLamprf;                    << 1341 //
1600     }                                         << 1342 // CALL THE EVAPORATION SUBROUTINE
1601     //                                        << 1343 //
1602     // CALL THE EVAPORATION SUBROUTINE        << 1344       opt->optimfallowed = 1; //  IMF is allowed
1603     //                                        << 1345       fiss->ifis = 1;         //  fission is allowed
1604     opt->optimfallowed = 1; //  IMF is allowe << 1346       fimf=0;
1605     fiss->ifis = 1;         //  fission is al << 1347       ff=0;
1606     fimf = 0;                                 << 1348 
1607     ff = 0;                                   << 1349 // To spare computing time; these events in any case cannot decay
1608                                               << 1350 //      IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP)THEN FIXME: <= or <
1609     // To spare computing time; these events  << 1351       if(zprfp<=2 && zprfp<aprfp){
1610     //      IF(ZPRFP.LE.2.AND.ZPRFP.LT.APRFP) << 1352        zf = zprf;
1611     if (zprfp <= 2 && zprfp < aprfp)          << 1353        af = aprf;
1612     {                                         << 1354        ee = 0.0;
1613         zf = zprf;                            << 1355        ff = 0;
1614         af = aprf;                            << 1356        fimf = 0;
1615         ee = 0.0;                             << 1357        ftype = 0;
1616         ff = 0;                               << 1358        aimf = 0.0;
1617         fimf = 0;                             << 1359        zimf = 0.0;
1618         ftype = 0;                            << 1360        tkeimf = 0.0;
1619         aimf = 0.0;                           << 1361        vx_eva = 0.0;
1620         zimf = 0.0;                           << 1362        vy_eva = 0.0;
1621         tkeimf = 0.0;                         << 1363        vz_eva = 0.0;
1622         vx_eva = 0.0;                         << 1364        jprf0 = jprf;
1623         vy_eva = 0.0;                         << 1365        goto a1972;
1624         vz_eva = 0.0;                         << 1366        }
1625         jprf0 = jprf;                         << 1367 
1626         goto a1972;                           << 1368 //      if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP)
1627     }                                         << 1369       if(zprfp<=2 && zprfp==aprfp){
1628                                               << 1370        unstable_nuclei(aprfp,zprfp,&afpnew,&zfpnew,IOUNSTABLE,
1629     //      if(ZPRFP.LE.2.AND.ZPRFP.EQ.APRFP) << 1371        VX_PREF, VY_PREF, VZ_PREF,
1630     if (zprfp <= 2 && zprfp == aprfp)         << 1372        &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
1631     {                                         << 1373          af = G4double(afpnew);
1632         unstable_nuclei(aprfp,                << 1374          zf = G4double(zfpnew);
1633                         zprfp,                << 1375          VX_PREF = VP1X;
1634                         &afpnew,              << 1376          VY_PREF = VP1Y;
1635                         &zfpnew,              << 1377          VZ_PREF = VP1Z;
1636                         IOUNSTABLE,           << 1378          for(G4int I = 0;I<ILOOP;I++){
1637                         VX_PREF,              << 1379           for(G4int IJ = 0; IJ<6; IJ++)
1638                         VY_PREF,              << 1380            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
1639                         VZ_PREF,              << 1381          }
1640                         &VP1X,                << 
1641                         &VP1Y,                << 
1642                         &VP1Z,                << 
1643                         EV_TAB_TEMP,          << 
1644                         &ILOOP);              << 
1645         af = G4double(afpnew);                << 
1646         zf = G4double(zfpnew);                << 
1647         VX_PREF = VP1X;                       << 
1648         VY_PREF = VP1Y;                       << 
1649         VZ_PREF = VP1Z;                       << 
1650         for (G4int I = 0; I < ILOOP; I++)     << 
1651         {                                     << 
1652             for (G4int IJ = 0; IJ < 6; IJ++)  << 
1653                 EV_TAB[I + IEV_TAB][IJ] = EV_ << 
1654         }                                     << 
1655         IEV_TAB = IEV_TAB + ILOOP;               1382         IEV_TAB = IEV_TAB + ILOOP;
1656         ee = 0.0;                                1383         ee = 0.0;
1657         ff = 0;                                  1384         ff = 0;
1658         fimf = 0;                                1385         fimf = 0;
1659         ftype = 0;                               1386         ftype = 0;
1660         aimf = 0.0;                              1387         aimf = 0.0;
1661         zimf = 0.0;                              1388         zimf = 0.0;
1662         tkeimf = 0.0;                            1389         tkeimf = 0.0;
1663         vx_eva = 0.0;                            1390         vx_eva = 0.0;
1664         vy_eva = 0.0;                            1391         vy_eva = 0.0;
1665         vz_eva = 0.0;                            1392         vz_eva = 0.0;
1666         jprf0 = jprf;                            1393         jprf0 = jprf;
1667         goto a1972;                           << 1394        goto a1972;
1668     }                                         << 1395        }
1669                                                  1396 
1670     //      IF(ZPRFP.EQ.APRFP)THEN            << 1397 //      IF(ZPRFP.EQ.APRFP)THEN
1671     if (zprfp == aprfp)                       << 1398       if(zprfp==aprfp){
1672     {                                         << 1399        unstable_nuclei(aprfp,zprfp,&afpnew,&zfpnew,IOUNSTABLE,
1673         unstable_nuclei(aprfp,                << 1400        VX_PREF, VY_PREF, VZ_PREF,
1674                         zprfp,                << 1401        &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
1675                         &afpnew,              << 1402          af = G4double(afpnew);
1676                         &zfpnew,              << 1403          zf = G4double(zfpnew);
1677                         IOUNSTABLE,           << 1404          VX_PREF = VP1X;
1678                         VX_PREF,              << 1405          VY_PREF = VP1Y;
1679                         VY_PREF,              << 1406          VZ_PREF = VP1Z;
1680                         VZ_PREF,              << 1407          for(G4int I = 0;I<ILOOP;I++){
1681                         &VP1X,                << 1408           for(G4int IJ = 0; IJ<6; IJ++)
1682                         &VP1Y,                << 1409            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
1683                         &VP1Z,                << 1410          }
1684                         EV_TAB_TEMP,          << 
1685                         &ILOOP);              << 
1686         af = G4double(afpnew);                << 
1687         zf = G4double(zfpnew);                << 
1688         VX_PREF = VP1X;                       << 
1689         VY_PREF = VP1Y;                       << 
1690         VZ_PREF = VP1Z;                       << 
1691         for (G4int I = 0; I < ILOOP; I++)     << 
1692         {                                     << 
1693             for (G4int IJ = 0; IJ < 6; IJ++)  << 
1694                 EV_TAB[I + IEV_TAB][IJ] = EV_ << 
1695         }                                     << 
1696         IEV_TAB = IEV_TAB + ILOOP;               1411         IEV_TAB = IEV_TAB + ILOOP;
1697         ee = 0.0;                                1412         ee = 0.0;
1698         ff = 0;                                  1413         ff = 0;
1699         fimf = 0;                                1414         fimf = 0;
1700         ftype = 0;                               1415         ftype = 0;
1701         aimf = 0.0;                              1416         aimf = 0.0;
1702         zimf = 0.0;                              1417         zimf = 0.0;
1703         tkeimf = 0.0;                            1418         tkeimf = 0.0;
1704         vx_eva = 0.0;                            1419         vx_eva = 0.0;
1705         vy_eva = 0.0;                            1420         vy_eva = 0.0;
1706         vz_eva = 0.0;                            1421         vz_eva = 0.0;
1707         jprf0 = jprf;                            1422         jprf0 = jprf;
1708         goto a1972;                           << 1423        goto a1972;
1709     }                                         << 1424       }
1710     //                                        << 1425 //
1711     evapora(zprf,                             << 1426       evapora(zprf,aprf,&ee,jprf, &zf, &af, &mtota, &vz_eva, &vx_eva, &vy_eva, &ff, &fimf, &zimf, &aimf,&tkeimf, &jprf0, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLam0);
1712             aprf,                             << 1427 //
1713             &ee,                              << 1428                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
1714             jprf,                             << 1429                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
1715             &zf,                              << 1430                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
1716             &af,                              << 1431                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
1717             &mtota,                           << 1432 //
1718             &vz_eva,                          << 1433 //               EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1719             &vx_eva,                          << 1434 //               EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1720             &vy_eva,                          << 1435 //               EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1721             &ff,                              << 1436 // Lorentz transformation
1722             &fimf,                            << 1437                lorentz_boost(VX_PREF,VY_PREF,VZ_PREF,
1723             &zimf,                            << 1438                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
1724             &aimf,                            << 1439                 &VXOUT,&VYOUT,&VZOUT);
1725             &tkeimf,                          << 1440                EV_TAB[IJ+IEV_TAB][2] = VXOUT;
1726             &jprf0,                           << 1441                EV_TAB[IJ+IEV_TAB][3] = VYOUT;
1727             &inttype,                         << 1442                EV_TAB[IJ+IEV_TAB][4] = VZOUT;
1728             &inum,                            << 1443                }
1729             EV_TEMP,                          << 1444                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1730             &IEV_TAB_TEMP,                    << 1445 
1731             &NbLam0);                         << 1446       a1972:
1732     //                                        << 1447 
1733     for (G4int IJ = 0; IJ < IEV_TAB_TEMP; IJ+ << 1448 // vi_pref - velocity of the prefragment; vi_eva - recoil due to evaporation
1734     {                                         << 1449       lorentz_boost(VX_PREF,VY_PREF,VZ_PREF,
1735         EV_TAB[IJ + IEV_TAB][0] = EV_TEMP[IJ] << 1450       vx_eva,vy_eva,vz_eva,
1736         EV_TAB[IJ + IEV_TAB][1] = EV_TEMP[IJ] << 1451       &VXOUT,&VYOUT,&VZOUT);
1737         EV_TAB[IJ + IEV_TAB][5] = EV_TEMP[IJ] << 1452       V_CM[0] = VXOUT;
1738         //                                    << 1453       V_CM[1] = VYOUT;
1739         //               EV_TAB(IJ+IEV_TAB,3) << 1454       V_CM[2] = VZOUT;
1740         //               EV_TAB(IJ+IEV_TAB,4) << 1455 //
1741         //               EV_TAB(IJ+IEV_TAB,5) << 1456       if(ff == 0 && fimf == 0){
1742         // Lorentz transformation             << 1457 // Evaporation of neutrons and LCP; no IMF, no fission
1743         lorentz_boost(                        << 1458       ftype = 0;
1744             VX_PREF, VY_PREF, VZ_PREF, EV_TEM << 1459       ZFP1 = idnint(zf);
1745         EV_TAB[IJ + IEV_TAB][2] = VXOUT;      << 1460       AFP1 = idnint(af);
1746         EV_TAB[IJ + IEV_TAB][3] = VYOUT;      << 1461       SFP1 = NbLam0;
1747         EV_TAB[IJ + IEV_TAB][4] = VZOUT;      << 1462       AFPIMF = 0;
1748     }                                         << 1463       ZFPIMF = 0;
1749     IEV_TAB = IEV_TAB + IEV_TAB_TEMP;         << 1464       SFPIMF = 0;
1750                                               << 1465       ZFP2 = 0;
1751 a1972:                                        << 1466       AFP2 = 0;
1752                                               << 1467       SFP2 = 0;
1753     // vi_pref - velocity of the prefragment; << 1468       VFP1_CM[0] = V_CM[0];
1754     lorentz_boost(VX_PREF, VY_PREF, VZ_PREF,  << 1469       VFP1_CM[1] = V_CM[1];
1755     V_CM[0] = VXOUT;                          << 1470       VFP1_CM[2] = V_CM[2];
1756     V_CM[1] = VYOUT;                          << 1471        for(G4int j=0;j<3;j++){
1757     V_CM[2] = VZOUT;                          << 1472         VIMF_CM[j] = 0.0;
1758     //                                        << 1473         VFP2_CM[j] = 0.0;
1759     if (ff == 0 && fimf == 0)                 << 1474        }
1760     {                                         << 1475       }
1761         // Evaporation of neutrons and LCP; n << 1476 //
1762         ftype = 0;                            << 1477       if(ff == 1 && fimf == 0) ftype = 1;     // fission
1763         ZFP1 = idnint(zf);                    << 1478       if(ff == 0 && fimf == 1) ftype = 2;     // IMF emission
1764         AFP1 = idnint(af);                    << 1479 //
1765         SFP1 = NbLam0;                        << 1480 // AFP,ZFP IS THE FINAL FRAGMENT IF NO FISSION OR IMF EMISSION OCCURS
1766         AFPIMF = 0;                           << 1481 // IN CASE OF FISSION IT IS THE NUCLEUS THAT UNDERGOES FISSION OR IMF
1767         ZFPIMF = 0;                           << 1482 //
1768         SFPIMF = 0;                           << 1483 
1769         ZFP2 = 0;                             << 1484 //***************** FISSION ***************************************
1770         AFP2 = 0;                             << 1485 //
1771         SFP2 = 0;                             << 1486     if(ftype == 1){
1772         VFP1_CM[0] = V_CM[0];                 << 1487     varntp->kfis = 1;
1773         VFP1_CM[1] = V_CM[1];                 << 1488     if(NbLam0>0)varntp->kfis = 20;
1774         VFP1_CM[2] = V_CM[2];                 << 1489    //   ftype1=0;
1775         for (G4int j = 0; j < 3; j++)         << 1490 
1776         {                                     << 1491       G4int IEV_TAB_FIS = 0,imode=0;
1777             VIMF_CM[j] = 0.0;                 << 1492 
1778             VFP2_CM[j] = 0.0;                 << 1493       G4double vx1_fission=0.,vy1_fission=0.,vz1_fission=0.;
1779         }                                     << 1494       G4double vx2_fission=0.,vy2_fission=0.,vz2_fission=0.;
1780     }                                         << 1495       G4double vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0.;
1781     //                                        << 1496 
1782     if (ff == 1 && fimf == 0)                 << 1497       fission(af,zf,ee,jprf0,
1783         ftype = 1; // fission                 << 1498           &vx1_fission,&vy1_fission,&vz1_fission,
1784     if (ff == 0 && fimf == 1)                 << 1499           &vx2_fission,&vy2_fission,&vz2_fission,
1785         ftype = 2; // IMF emission            << 1500           &ZFP1,&AFP1,&SFP1,&ZFP2,&AFP2,&SFP2,&imode,
1786                    //                         << 1501           &vx_eva_sc,&vy_eva_sc,&vz_eva_sc,EV_TEMP,&IEV_TAB_FIS,&NbLam0);
1787     // AFP,ZFP IS THE FINAL FRAGMENT IF NO FI << 1502 
1788     // IN CASE OF FISSION IT IS THE NUCLEUS T << 1503                for(G4int IJ = 0; IJ< IEV_TAB_FIS;IJ++){ 
1789     //                                        << 1504                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
1790                                               << 1505                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
1791     //***************** FISSION ************* << 1506                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
1792     //                                        << 1507 // Lorentz kinematics
1793     if (ftype == 1)                           << 1508 //               EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1794     {                                         << 1509 //               EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1795         varntp->kfis = 1;                     << 1510 //               EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1796         if (NbLam0 > 0)                       << 1511 // Lorentz transformation
1797             varntp->kfis = 20;                << 1512                lorentz_boost(V_CM[0],V_CM[1],V_CM[2],
1798         //   ftype1=0;                        << 1513                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
1799                                               << 1514                 &VXOUT,&VYOUT,&VZOUT);
1800         G4int IEV_TAB_FIS = 0, imode = 0;     << 1515                EV_TAB[IJ+IEV_TAB][2] = VXOUT;
1801                                               << 1516                EV_TAB[IJ+IEV_TAB][3] = VYOUT;
1802         G4double vx1_fission = 0., vy1_fissio << 1517                EV_TAB[IJ+IEV_TAB][4] = VZOUT;
1803         G4double vx2_fission = 0., vy2_fissio << 1518                }
1804         G4double vx_eva_sc = 0., vy_eva_sc =  << 1519                IEV_TAB = IEV_TAB + IEV_TAB_FIS;
1805                                               << 1520 
1806         fission(af,                           << 1521     //  if(imode==1) ftype1 = 1;    // S1 mode
1807                 zf,                           << 1522     //  if(imode==2) ftype1 = 2;    // S2 mode
1808                 ee,                           << 1523 
1809                 jprf0,                        << 1524       AFPIMF = 0;
1810                 &vx1_fission,                 << 1525       ZFPIMF = 0;
1811                 &vy1_fission,                 << 1526       SFPIMF = 0;
1812                 &vz1_fission,                 << 1527 
1813                 &vx2_fission,                 << 1528 // VX_EVA_SC,VY_EVA_SC,VZ_EVA_SC - recoil due to particle emisison
1814                 &vy2_fission,                 << 1529 // between saddle and scission
1815                 &vz2_fission,                 << 1530 // Lorentz kinematics
1816                 &ZFP1,                        << 1531 //        VFP1_CM(1) = V_CM(1) + VX1_FISSION + VX_EVA_SC ! Velocity of FF1 in x
1817                 &AFP1,                        << 1532 //        VFP1_CM(2) = V_CM(2) + VY1_FISSION + VY_EVA_SC ! Velocity of FF1 in y
1818                 &SFP1,                        << 1533 //        VFP1_CM(3) = V_CM(3) + VZ1_FISSION + VZ_EVA_SC ! Velocity of FF1 in x
1819                 &ZFP2,                        << 1534         lorentz_boost(vx1_fission,vy1_fission,vz1_fission,
1820                 &AFP2,                        << 1535                 V_CM[0],V_CM[1],V_CM[2],
1821                 &SFP2,                        << 1536                 &VXOUT,&VYOUT,&VZOUT);
1822                 &imode,                       << 1537         lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc,
1823                 &vx_eva_sc,                   << 1538                 VXOUT,VYOUT,VZOUT,
1824                 &vy_eva_sc,                   << 1539                 &VX2OUT,&VY2OUT,&VZ2OUT);
1825                 &vz_eva_sc,                   << 
1826                 EV_TEMP,                      << 
1827                 &IEV_TAB_FIS,                 << 
1828                 &NbLam0);                     << 
1829                                               << 
1830         for (G4int IJ = 0; IJ < IEV_TAB_FIS;  << 
1831         {                                     << 
1832             EV_TAB[IJ + IEV_TAB][0] = EV_TEMP << 
1833             EV_TAB[IJ + IEV_TAB][1] = EV_TEMP << 
1834             EV_TAB[IJ + IEV_TAB][5] = EV_TEMP << 
1835             // Lorentz kinematics             << 
1836             //               EV_TAB(IJ+IEV_TA << 
1837             //               EV_TAB(IJ+IEV_TA << 
1838             //               EV_TAB(IJ+IEV_TA << 
1839             // Lorentz transformation         << 
1840             lorentz_boost(                    << 
1841                 V_CM[0], V_CM[1], V_CM[2], EV << 
1842             EV_TAB[IJ + IEV_TAB][2] = VXOUT;  << 
1843             EV_TAB[IJ + IEV_TAB][3] = VYOUT;  << 
1844             EV_TAB[IJ + IEV_TAB][4] = VZOUT;  << 
1845         }                                     << 
1846         IEV_TAB = IEV_TAB + IEV_TAB_FIS;      << 
1847                                               << 
1848         //  if(imode==1) ftype1 = 1;    // S1 << 
1849         //  if(imode==2) ftype1 = 2;    // S2 << 
1850                                               << 
1851         AFPIMF = 0;                           << 
1852         ZFPIMF = 0;                           << 
1853         SFPIMF = 0;                           << 
1854                                               << 
1855         // VX_EVA_SC,VY_EVA_SC,VZ_EVA_SC - re << 
1856         // between saddle and scission        << 
1857         // Lorentz kinematics                 << 
1858         //        VFP1_CM(1) = V_CM(1) + VX1_ << 
1859         //        in x VFP1_CM(2) = V_CM(2) + << 
1860         //        FF1 in y VFP1_CM(3) = V_CM( << 
1861         //        of FF1 in x                 << 
1862         lorentz_boost(vx1_fission, vy1_fissio << 
1863         lorentz_boost(vx_eva_sc, vy_eva_sc, v << 
1864         VFP1_CM[0] = VX2OUT;                     1540         VFP1_CM[0] = VX2OUT;
1865         VFP1_CM[1] = VY2OUT;                     1541         VFP1_CM[1] = VY2OUT;
1866         VFP1_CM[2] = VZ2OUT;                     1542         VFP1_CM[2] = VZ2OUT;
1867                                                  1543 
1868         // Lorentz kinematics                 << 1544 // Lorentz kinematics
1869         //        VFP2_CM(1) = V_CM(1) + VX2_ << 1545 //        VFP2_CM(1) = V_CM(1) + VX2_FISSION + VX_EVA_SC ! Velocity of FF2 in x
1870         //        in x VFP2_CM(2) = V_CM(2) + << 1546 //        VFP2_CM(2) = V_CM(2) + VY2_FISSION + VY_EVA_SC ! Velocity of FF2 in y
1871         //        FF2 in y VFP2_CM(3) = V_CM( << 1547 //        VFP2_CM(3) = V_CM(3) + VZ2_FISSION + VZ_EVA_SC ! Velocity of FF2 in x
1872         //        of FF2 in x                 << 1548         lorentz_boost(vx2_fission,vy2_fission,vz2_fission,
1873         lorentz_boost(vx2_fission, vy2_fissio << 1549                 V_CM[0],V_CM[1],V_CM[2],
1874         lorentz_boost(vx_eva_sc, vy_eva_sc, v << 1550                 &VXOUT,&VYOUT,&VZOUT);
                                                   >> 1551         lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc,
                                                   >> 1552                 VXOUT,VYOUT,VZOUT,
                                                   >> 1553                 &VX2OUT,&VY2OUT,&VZ2OUT);
1875         VFP2_CM[0] = VX2OUT;                     1554         VFP2_CM[0] = VX2OUT;
1876         VFP2_CM[1] = VY2OUT;                     1555         VFP2_CM[1] = VY2OUT;
1877         VFP2_CM[2] = VZ2OUT;                     1556         VFP2_CM[2] = VZ2OUT;
1878                                                  1557 
1879         //************** IMF EMISSION         << 1558 //************** IMF EMISSION ************************************************
1880         //*********************************** << 1559 //
1881         //                                    << 1560     }else if(ftype == 2){
1882     }                                         << 1561 // IMF emission: Heavy partner is allowed to fission and to emitt IMF, but ONLY once.
1883     else if (ftype == 2)                      << 1562       G4int FF11 = 0;
1884     {                                         << 1563       G4int FIMF11 = 0;
1885         // IMF emission: Heavy partner is all << 1564       opt->optimfallowed = 1;  //  IMF is allowed
1886         // ONLY once.                         << 1565       fiss->ifis = 1;          //  fission is allowed
1887         G4int FF11 = 0;                       << 1566 //  Lambda particles 
1888         G4int FIMF11 = 0;                     << 1567       G4int NbLamH=0;
1889         opt->optimfallowed = 1; //  IMF is al << 1568       G4int NbLamimf=0;
1890         fiss->ifis = 1;         //  fission i << 1569       G4double pbH = (af-zf) / (af-zf+aimf-zimf);
1891                                 //  Lambda pa << 1570       //double pbL = aimf / (af+aimf);  
1892         G4int NbLamH = 0;                     << 1571       for(G4int i=0;i<NbLam0;i++){
1893         G4int NbLamimf = 0;                   << 1572        if(G4AblaRandom::flat()<pbH){
1894         G4double pbH = (af - zf) / (af - zf + << 1573         NbLamH++;
1895         // double pbL = aimf / (af+aimf);     << 1574        }else{
1896         for (G4int i = 0; i < NbLam0; i++)    << 1575         NbLamimf++;
1897         {                                     << 1576        }
1898             if (G4AblaRandom::flat() < pbH)   << 1577       }
1899             {                                 << 1578 //
1900                 NbLamH++;                     << 1579 //  Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF
1901             }                                 << 1580       G4double EkinR1 = tkeimf * aimf / (af+aimf);
1902             else                              << 1581       G4double EkinR2 = tkeimf * af / (af+aimf);
1903             {                                 << 1582       G4double V1 = std::sqrt(EkinR1/af) * 1.3887;
1904                 NbLamimf++;                   << 1583       G4double V2 = std::sqrt(EkinR2/aimf) * 1.3887;
1905             }                                 << 1584       G4double VZ1_IMF = (2.0 * G4AblaRandom::flat() - 1.0) * V1;
1906         }                                     << 1585       G4double VPERP1 = std::sqrt(V1*V1 - VZ1_IMF*VZ1_IMF);
1907         //                                    << 1586       G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
1908         //  Velocities of IMF and partner: 1  << 1587       G4double VX1_IMF = VPERP1 * std::sin(ALPHA1);
1909         G4double EkinR1 = tkeimf * aimf / (af << 1588       G4double VY1_IMF = VPERP1 * std::cos(ALPHA1);
1910         G4double EkinR2 = tkeimf * af / (af + << 1589       G4double VX2_IMF = - VX1_IMF / V1 * V2;
1911         G4double V1 = std::sqrt(EkinR1 / af)  << 1590       G4double VY2_IMF = - VY1_IMF / V1 * V2;
1912         G4double V2 = std::sqrt(EkinR2 / aimf << 1591       G4double VZ2_IMF = - VZ1_IMF / V1 * V2;
1913         G4double VZ1_IMF = (2.0 * G4AblaRando << 1592 
1914         G4double VPERP1 = std::sqrt(V1 * V1 - << 1593       G4double EEIMFP = ee * af /(af + aimf);
1915         G4double ALPHA1 = G4AblaRandom::flat( << 1594       G4double EEIMF = ee * aimf /(af + aimf);
1916         G4double VX1_IMF = VPERP1 * std::sin( << 1595 
1917         G4double VY1_IMF = VPERP1 * std::cos( << 1596 // Decay of heavy partner
1918         G4double VX2_IMF = -VX1_IMF / V1 * V2 << 1597      G4double IINERTTOT = 0.40 * 931.490 * 1.160*1.160 *( std::pow(aimf,5.0/3.0) + std::pow(af,5.0/3.0)) + 931.490 * 1.160*1.160*aimf*af/(aimf+af)*(std::pow(aimf,1./3.) + std::pow(af,1./3.))*(std::pow(aimf,1./3.) + std::pow(af,1./3.));
1919         G4double VY2_IMF = -VY1_IMF / V1 * V2 << 1598 
1920         G4double VZ2_IMF = -VZ1_IMF / V1 * V2 << 1599      G4double JPRFHEAVY = jprf0 * 0.4 * 931.49 * 1.16*1.16 * std::pow(af,5.0/3.0) / IINERTTOT;
1921                                               << 1600      G4double JPRFLIGHT = jprf0 * 0.4 * 931.49 * 1.16*1.16 * std::pow(aimf,5.0/3.0) / IINERTTOT;
1922         G4double EEIMFP = ee * af / (af + aim << 1601      if(af<2.0) std::cout << "RN117-4,AF,ZF,EE,JPRFheavy" << std::endl;
1923         G4double EEIMF = ee * aimf / (af + ai << 1602 
1924                                               << 1603      G4double vx1ev_imf=0., vy1ev_imf=0., vz1ev_imf=0., zdummy=0., adummy=0., tkedummy=0.,jprf1=0.;
1925         // Decay of heavy partner             << 1604 
1926         G4double IINERTTOT = 0.40 * 931.490 * << 1605      evapora(zf,af,&EEIMFP,JPRFHEAVY, &zff, &aff, &mtota, &vz1ev_imf, &vx1ev_imf,&vy1ev_imf, &FF11, &FIMF11, &zdummy, &adummy,&tkedummy, &jprf1, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamH);
1927                              931.490 * 1.160  << 1606 
1928                                  (std::pow(ai << 1607                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
1929                                  (std::pow(ai << 1608                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
1930                                               << 1609                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
1931         G4double JPRFHEAVY = jprf0 * 0.4 * 93 << 1610                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
1932         G4double JPRFLIGHT = jprf0 * 0.4 * 93 << 1611 //
1933         if (af < 2.0)                         << 1612 //               EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1934             std::cout << "RN117-4,AF,ZF,EE,JP << 1613 //               EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1935                                               << 1614 //               EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1936         G4double vx1ev_imf = 0., vy1ev_imf =  << 1615 // Lorentz transformation
1937                                               << 1616                lorentz_boost(V_CM[0],V_CM[1],V_CM[2],
1938         evapora(zf,                           << 1617                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
1939                 af,                           << 1618                 &VXOUT,&VYOUT,&VZOUT);
1940                 &EEIMFP,                      << 1619                lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf,
1941                 JPRFHEAVY,                    << 1620                 VXOUT,VYOUT,VZOUT,
1942                 &zff,                         << 1621                 &VX2OUT,&VY2OUT,&VZ2OUT);
1943                 &aff,                         << 1622                EV_TAB[IJ+IEV_TAB][2] = VX2OUT;
1944                 &mtota,                       << 1623                EV_TAB[IJ+IEV_TAB][3] = VY2OUT;
1945                 &vz1ev_imf,                   << 1624                EV_TAB[IJ+IEV_TAB][4] = VZ2OUT;
1946                 &vx1ev_imf,                   << 1625                }
1947                 &vy1ev_imf,                   << 1626                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1948                 &FF11,                        << 1627 
1949                 &FIMF11,                      << 1628 // For IMF - fission and IMF emission are not allowed
1950                 &zdummy,                      << 1629      G4int FF22 = 0;
1951                 &adummy,                      << 1630      G4int FIMF22 = 0;
1952                 &tkedummy,                    << 1631       opt->optimfallowed = 0; //  IMF is not allowed
1953                 &jprf1,                       << 1632       fiss->ifis = 0;         //  fission is not allowed
1954                 &inttype,                     << 1633 
1955                 &inum,                        << 1634 // Decay of IMF
1956                 EV_TEMP,                      << 1635      G4double zffimf, affimf,zdummy1=0., adummy1=0., tkedummy1=0.,jprf2,vx2ev_imf,vy2ev_imf,
1957                 &IEV_TAB_TEMP,                << 1636     vz2ev_imf;
1958                 &NbLamH);                     << 1637 
1959                                               << 1638      evapora(zimf,aimf,&EEIMF,JPRFLIGHT, &zffimf, &affimf, &mtota, &vz2ev_imf, &vx2ev_imf,&vy2ev_imf, &FF22, &FIMF22, &zdummy1, &adummy1,&tkedummy1, &jprf2, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamimf);
1960         for (G4int IJ = 0; IJ < IEV_TAB_TEMP; << 1639 
1961         {                                     << 1640                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
1962             EV_TAB[IJ + IEV_TAB][0] = EV_TEMP << 1641                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
1963             EV_TAB[IJ + IEV_TAB][1] = EV_TEMP << 1642                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
1964             EV_TAB[IJ + IEV_TAB][5] = EV_TEMP << 1643                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
1965             //                                << 1644 //
1966             //               EV_TAB(IJ+IEV_TA << 1645 //               EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
1967             //               EV_TAB(IJ+IEV_TA << 1646 //               EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
1968             //               EV_TAB(IJ+IEV_TA << 1647 //               EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
1969             // Lorentz transformation         << 1648 // Lorentz transformation
1970             lorentz_boost(                    << 1649                lorentz_boost(V_CM[0],V_CM[1],V_CM[2],
1971                 V_CM[0], V_CM[1], V_CM[2], EV << 1650                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
1972             lorentz_boost(vx1ev_imf, vy1ev_im << 1651                 &VXOUT,&VYOUT,&VZOUT);
1973             EV_TAB[IJ + IEV_TAB][2] = VX2OUT; << 1652                lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF,
1974             EV_TAB[IJ + IEV_TAB][3] = VY2OUT; << 1653                 VXOUT,VYOUT,VZOUT,
1975             EV_TAB[IJ + IEV_TAB][4] = VZ2OUT; << 1654                 &VX2OUT,&VY2OUT,&VZ2OUT);
1976         }                                     << 1655                EV_TAB[IJ+IEV_TAB][2] = VX2OUT;
1977         IEV_TAB = IEV_TAB + IEV_TAB_TEMP;     << 1656                EV_TAB[IJ+IEV_TAB][3] = VY2OUT;
1978                                               << 1657                EV_TAB[IJ+IEV_TAB][4] = VZ2OUT;
1979         // For IMF - fission and IMF emission << 1658                }
1980         G4int FF22 = 0;                       << 1659                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
1981         G4int FIMF22 = 0;                     << 1660 // As IMF is not allowed to emit IMF, adummy1=zdummy1=0
1982         opt->optimfallowed = 0; //  IMF is no << 1661 
1983         fiss->ifis = 0;         //  fission i << 1662       AFPIMF = idnint(affimf);
1984                                               << 1663       ZFPIMF = idnint(zffimf);
1985         // Decay of IMF                       << 1664       SFPIMF = NbLamimf;
1986         G4double zffimf, affimf, zdummy1 = 0. << 1665 
1987                                               << 1666 // vi1_imf, vi2_imf - velocities of imf and partner from TKE;
1988         evapora(zimf,                         << 1667 // vi1ev_imf, vi2_imf - recoil of partner and imf due to evaporation
1989                 aimf,                         << 1668 // Lorentz kinematics - DM 18/5/2010
1990                 &EEIMF,                       << 1669 //        VIMF_CM(1) = V_CM(1) + VX2_IMF + VX2EV_IMF
1991                 JPRFLIGHT,                    << 1670 //        VIMF_CM(2) = V_CM(2) + VY2_IMF + VY2EV_IMF
1992                 &zffimf,                      << 1671 //        VIMF_CM(3) = V_CM(3) + VZ2_IMF + VZ2EV_IMF
1993                 &affimf,                      << 1672         lorentz_boost(VX2_IMF,VY2_IMF,VZ2_IMF,
1994                 &mtota,                       << 1673                 V_CM[0],V_CM[1],V_CM[2],
1995                 &vz2ev_imf,                   << 1674                 &VXOUT,&VYOUT,&VZOUT);
1996                 &vx2ev_imf,                   << 1675         lorentz_boost(vx2ev_imf,vy2ev_imf,vz2ev_imf,
1997                 &vy2ev_imf,                   << 1676                 VXOUT,VYOUT,VZOUT,
1998                 &FF22,                        << 1677                 &VX2OUT,&VY2OUT,&VZ2OUT);
1999                 &FIMF22,                      << 
2000                 &zdummy1,                     << 
2001                 &adummy1,                     << 
2002                 &tkedummy1,                   << 
2003                 &jprf2,                       << 
2004                 &inttype,                     << 
2005                 &inum,                        << 
2006                 EV_TEMP,                      << 
2007                 &IEV_TAB_TEMP,                << 
2008                 &NbLamimf);                   << 
2009                                               << 
2010         for (G4int IJ = 0; IJ < IEV_TAB_TEMP; << 
2011         {                                     << 
2012             EV_TAB[IJ + IEV_TAB][0] = EV_TEMP << 
2013             EV_TAB[IJ + IEV_TAB][1] = EV_TEMP << 
2014             EV_TAB[IJ + IEV_TAB][5] = EV_TEMP << 
2015             //                                << 
2016             //               EV_TAB(IJ+IEV_TA << 
2017             //               EV_TAB(IJ+IEV_TA << 
2018             //               EV_TAB(IJ+IEV_TA << 
2019             // Lorentz transformation         << 
2020             lorentz_boost(                    << 
2021                 V_CM[0], V_CM[1], V_CM[2], EV << 
2022             lorentz_boost(VX2_IMF, VY2_IMF, V << 
2023             EV_TAB[IJ + IEV_TAB][2] = VX2OUT; << 
2024             EV_TAB[IJ + IEV_TAB][3] = VY2OUT; << 
2025             EV_TAB[IJ + IEV_TAB][4] = VZ2OUT; << 
2026         }                                     << 
2027         IEV_TAB = IEV_TAB + IEV_TAB_TEMP;     << 
2028         // As IMF is not allowed to emit IMF, << 
2029                                               << 
2030         AFPIMF = idnint(affimf);              << 
2031         ZFPIMF = idnint(zffimf);              << 
2032         SFPIMF = NbLamimf;                    << 
2033                                               << 
2034         // vi1_imf, vi2_imf - velocities of i << 
2035         // vi1ev_imf, vi2_imf - recoil of par << 
2036         // Lorentz kinematics - DM 18/5/2010  << 
2037         //        VIMF_CM(1) = V_CM(1) + VX2_ << 
2038         //        VIMF_CM(2) = V_CM(2) + VY2_ << 
2039         //        VIMF_CM(3) = V_CM(3) + VZ2_ << 
2040         lorentz_boost(VX2_IMF, VY2_IMF, VZ2_I << 
2041         lorentz_boost(vx2ev_imf, vy2ev_imf, v << 
2042         VIMF_CM[0] = VX2OUT;                     1678         VIMF_CM[0] = VX2OUT;
2043         VIMF_CM[1] = VY2OUT;                     1679         VIMF_CM[1] = VY2OUT;
2044         VIMF_CM[2] = VZ2OUT;                     1680         VIMF_CM[2] = VZ2OUT;
2045         // Lorentz kinematics                 << 1681 // Lorentz kinematics 
2046         //       VFP1_CM(1) = V_CM(1) + VX1_I << 1682 //       VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF
2047         //       VFP1_CM(2) = V_CM(2) + VY1_I << 1683 //       VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF
2048         //       VFP1_CM(3) = V_CM(3) + VZ1_I << 1684 //       VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF
2049         lorentz_boost(VX1_IMF, VY1_IMF, VZ1_I << 1685         lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF,
2050         lorentz_boost(vx1ev_imf, vy1ev_imf, v << 1686                 V_CM[0],V_CM[1],V_CM[2],
                                                   >> 1687                 &VXOUT,&VYOUT,&VZOUT);
                                                   >> 1688         lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf,
                                                   >> 1689                 VXOUT,VYOUT,VZOUT,
                                                   >> 1690                 &VX2OUT,&VY2OUT,&VZ2OUT);
2051         VFP1_CM[0] = VX2OUT;                     1691         VFP1_CM[0] = VX2OUT;
2052         VFP1_CM[1] = VY2OUT;                     1692         VFP1_CM[1] = VY2OUT;
2053         VFP1_CM[2] = VZ2OUT;                     1693         VFP1_CM[2] = VZ2OUT;
2054                                                  1694 
2055         if (FF11 == 0 && FIMF11 == 0)         << 1695       if(FF11==0 && FIMF11==0){
2056         {                                     << 1696 // heavy partner deexcites by emission of light particles
2057             // heavy partner deexcites by emi << 1697       AFP1 = idnint(aff);
2058             AFP1 = idnint(aff);               << 1698       ZFP1 = idnint(zff);
2059             ZFP1 = idnint(zff);               << 1699       SFP1 = NbLamH;
2060             SFP1 = NbLamH;                    << 1700       ZFP2 = 0;
2061             ZFP2 = 0;                         << 1701       AFP2 = 0;
2062             AFP2 = 0;                         << 1702       SFP2 = 0;
2063             SFP2 = 0;                         << 1703       ftype = 2;
2064             ftype = 2;                        << 1704       AFPIMF = idnint(affimf);
2065             AFPIMF = idnint(affimf);          << 1705       ZFPIMF = idnint(zffimf);
2066             ZFPIMF = idnint(zffimf);          << 1706       SFPIMF = NbLamimf;
2067             SFPIMF = NbLamimf;                << 1707         for(G4int I=0;I<3;I++)
2068             for (G4int I = 0; I < 3; I++)     << 1708          VFP2_CM[I] = 0.0;
2069                 VFP2_CM[I] = 0.0;             << 1709 
2070         }                                     << 1710 
2071         else if (FF11 == 1 && FIMF11 == 0)    << 1711       } else if(FF11==1 && FIMF11==0){
2072         {                                     << 1712 // Heavy partner fissions
2073             // Heavy partner fissions         << 1713       varntp->kfis = 1;
2074             varntp->kfis = 1;                 << 1714       if(NbLam0>0)varntp->kfis = 20;
2075             if (NbLam0 > 0)                   << 1715 //
2076                 varntp->kfis = 20;            << 1716       opt->optimfallowed = 0; //  IMF is not allowed
2077             //                                << 1717       fiss->ifis = 0;         //  fission is not allowed
2078             opt->optimfallowed = 0; //  IMF i << 1718 //
2079             fiss->ifis = 0;         //  fissi << 1719       zf = zff;
2080                                     //        << 1720       af = aff;
2081             zf = zff;                         << 1721       ee = EEIMFP;
2082             af = aff;                         << 1722     //  ftype1=0;
2083             ee = EEIMFP;                      << 1723       ftype=21;
2084             //  ftype1=0;                     << 1724 
2085             ftype = 21;                       << 1725       G4int IEV_TAB_FIS = 0,imode=0;
2086                                               << 1726 
2087             G4int IEV_TAB_FIS = 0, imode = 0; << 1727       G4double vx1_fission=0.,vy1_fission=0.,vz1_fission=0.;
2088                                               << 1728       G4double vx2_fission=0.,vy2_fission=0.,vz2_fission=0.;
2089             G4double vx1_fission = 0., vy1_fi << 1729       G4double vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0.;
2090             G4double vx2_fission = 0., vy2_fi << 1730 
2091             G4double vx_eva_sc = 0., vy_eva_s << 1731       fission(af,zf,ee,jprf1,
2092                                               << 1732           &vx1_fission,&vy1_fission,&vz1_fission,
2093             fission(af,                       << 1733           &vx2_fission,&vy2_fission,&vz2_fission,
2094                     zf,                       << 1734           &ZFP1,&AFP1,&SFP1,&ZFP2,&AFP2,&SFP2,&imode,
2095                     ee,                       << 1735           &vx_eva_sc,&vy_eva_sc,&vz_eva_sc,EV_TEMP,&IEV_TAB_FIS,&NbLamH);
2096                     jprf1,                    << 1736 
2097                     &vx1_fission,             << 1737                for(int IJ = 0; IJ< IEV_TAB_FIS;IJ++){ 
2098                     &vy1_fission,             << 1738                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
2099                     &vz1_fission,             << 1739                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
2100                     &vx2_fission,             << 1740                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
2101                     &vy2_fission,             << 1741 // Lorentz kinematics
2102                     &vz2_fission,             << 1742 //               EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
2103                     &ZFP1,                    << 1743 //               EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
2104                     &AFP1,                    << 1744 //               EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
2105                     &SFP1,                    << 1745 // Lorentz transformation
2106                     &ZFP2,                    << 1746                lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2],
2107                     &AFP2,                    << 1747                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
2108                     &SFP2,                    << 1748                 &VXOUT,&VYOUT,&VZOUT);
2109                     &imode,                   << 1749                EV_TAB[IJ+IEV_TAB][2] = VXOUT;
2110                     &vx_eva_sc,               << 1750                EV_TAB[IJ+IEV_TAB][3] = VYOUT;
2111                     &vy_eva_sc,               << 1751                EV_TAB[IJ+IEV_TAB][4] = VZOUT;
2112                     &vz_eva_sc,               << 1752                }
2113                     EV_TEMP,                  << 1753                IEV_TAB = IEV_TAB + IEV_TAB_FIS;
2114                     &IEV_TAB_FIS,             << 1754 
2115                     &NbLamH);                 << 1755     //  if(imode==1) ftype1 = 1;    // S1 mode
2116                                               << 1756     //  if(imode==2) ftype1 = 2;    // S2 mode
2117             for (int IJ = 0; IJ < IEV_TAB_FIS << 1757 
2118             {                                 << 1758 // Lorentz kinematics
2119                 EV_TAB[IJ + IEV_TAB][0] = EV_ << 1759 //        VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX1_FISSION +
2120                 EV_TAB[IJ + IEV_TAB][1] = EV_ << 1760 //     &               VX_EVA_SC ! Velocity of FF1 in x
2121                 EV_TAB[IJ + IEV_TAB][5] = EV_ << 1761 //        VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY1_FISSION +
2122                 // Lorentz kinematics         << 1762 //     &               VY_EVA_SC ! Velocity of FF1 in y
2123                 //               EV_TAB(IJ+IE << 1763 //        VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ1_FISSION +
2124                 //               EV_TAB(IJ+IE << 1764 //     &               VZ_EVA_SC ! Velocity of FF1 in x
2125                 //               EV_TAB(IJ+IE << 1765         lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF,
2126                 // Lorentz transformation     << 1766                 V_CM[0],V_CM[1],V_CM[2],
2127                 lorentz_boost(VFP1_CM[0],     << 1767                 &VXOUT,&VYOUT,&VZOUT);
2128                               VFP1_CM[1],     << 1768         lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf,
2129                               VFP1_CM[2],     << 1769                 VXOUT,VYOUT,VZOUT,
2130                               EV_TEMP[IJ][2], << 1770                 &VX2OUT,&VY2OUT,&VZ2OUT);
2131                               EV_TEMP[IJ][3], << 1771         lorentz_boost(vx1_fission,vy1_fission,vz1_fission,
2132                               EV_TEMP[IJ][4], << 1772                 VX2OUT,VY2OUT,VZ2OUT,
2133                               &VXOUT,         << 1773                 &VXOUT,&VYOUT,&VZOUT);
2134                               &VYOUT,         << 1774         lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc,
2135                               &VZOUT);        << 1775                 VXOUT,VYOUT,VZOUT,
2136                 EV_TAB[IJ + IEV_TAB][2] = VXO << 1776                 &VX2OUT,&VY2OUT,&VZ2OUT);
2137                 EV_TAB[IJ + IEV_TAB][3] = VYO << 1777         VFP1_CM[0] = VX2OUT;
2138                 EV_TAB[IJ + IEV_TAB][4] = VZO << 1778         VFP1_CM[1] = VY2OUT;
2139             }                                 << 1779         VFP1_CM[2] = VZ2OUT;
2140             IEV_TAB = IEV_TAB + IEV_TAB_FIS;  << 
2141                                                  1780 
2142             //  if(imode==1) ftype1 = 1;    / << 1781 // Lorentz kinematics
2143             //  if(imode==2) ftype1 = 2;    / << 1782 //        VFP2_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF + VX2_FISSION +
                                                   >> 1783 //     &               VX_EVA_SC ! Velocity of FF2 in x
                                                   >> 1784 //        VFP2_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF + VY2_FISSION +
                                                   >> 1785 //     &               VY_EVA_SC ! Velocity of FF2 in y
                                                   >> 1786 //        VFP2_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF + VZ2_FISSION +
                                                   >> 1787 //     &               VZ_EVA_SC ! Velocity of FF2 in x
                                                   >> 1788         lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF,
                                                   >> 1789                 V_CM[0],V_CM[1],V_CM[2],
                                                   >> 1790                 &VXOUT,&VYOUT,&VZOUT);
                                                   >> 1791         lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf,
                                                   >> 1792                 VXOUT,VYOUT,VZOUT,
                                                   >> 1793                 &VX2OUT,&VY2OUT,&VZ2OUT);
                                                   >> 1794         lorentz_boost(vx2_fission,vy2_fission,vz2_fission,
                                                   >> 1795                 VX2OUT,VY2OUT,VZ2OUT,
                                                   >> 1796                 &VXOUT,&VYOUT,&VZOUT);
                                                   >> 1797         lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc,
                                                   >> 1798                 VXOUT,VYOUT,VZOUT,
                                                   >> 1799                 &VX2OUT,&VY2OUT,&VZ2OUT);
                                                   >> 1800         VFP2_CM[0] = VX2OUT;
                                                   >> 1801         VFP2_CM[1] = VY2OUT;
                                                   >> 1802         VFP2_CM[2] = VZ2OUT;
2144                                                  1803 
2145             // Lorentz kinematics             << 1804       } else if(FF11==0 && FIMF11==1){
2146             //        VFP1_CM(1) = V_CM(1) +  << 1805 // Heavy partner emits imf, consequtive imf emission or fission is not allowed
2147             //     &               VX_EVA_SC  << 1806       opt->optimfallowed = 0; //  IMF is not allowed
2148             //        VFP1_CM(2) = V_CM(2) +  << 1807       fiss->ifis = 0;         //  fission is not allowed
2149             //     &               VY_EVA_SC  << 1808 //
2150             //        VFP1_CM(3) = V_CM(3) +  << 1809       zf = zff;
2151             //     &               VZ_EVA_SC  << 1810       af = aff;
2152             lorentz_boost(VX1_IMF, VY1_IMF, V << 1811       ee = EEIMFP;
2153             lorentz_boost(vx1ev_imf, vy1ev_im << 1812       aimf = adummy;
2154             lorentz_boost(vx1_fission, vy1_fi << 1813       zimf = zdummy;
2155             lorentz_boost(vx_eva_sc, vy_eva_s << 1814       tkeimf = tkedummy;
2156             VFP1_CM[0] = VX2OUT;              << 1815       FF11 = 0;
2157             VFP1_CM[1] = VY2OUT;              << 1816       FIMF11 = 0;
2158             VFP1_CM[2] = VZ2OUT;              << 1817       ftype = 22;
2159                                               << 1818 //  Lambda particles 
2160             // Lorentz kinematics             << 1819       G4int NbLamH1=0;
2161             //        VFP2_CM(1) = V_CM(1) +  << 1820       G4int NbLamimf1=0;
2162             //     &               VX_EVA_SC  << 1821       G4double pbH1 = (af-zf) / (af-zf+aimf-zimf); 
2163             //        VFP2_CM(2) = V_CM(2) +  << 1822       for(G4int i=0;i<NbLamH;i++){
2164             //     &               VY_EVA_SC  << 1823        if(G4AblaRandom::flat()<pbH1){
2165             //        VFP2_CM(3) = V_CM(3) +  << 1824         NbLamH1++;
2166             //     &               VZ_EVA_SC  << 1825        }else{
2167             lorentz_boost(VX1_IMF, VY1_IMF, V << 1826         NbLamimf1++;
2168             lorentz_boost(vx1ev_imf, vy1ev_im << 1827        }
2169             lorentz_boost(vx2_fission, vy2_fi << 1828       }
2170             lorentz_boost(vx_eva_sc, vy_eva_s << 1829 //
2171             VFP2_CM[0] = VX2OUT;              << 1830 // Velocities of IMF and partner: 1 denotes partner, 2 denotes IMF
2172             VFP2_CM[1] = VY2OUT;              << 1831       EkinR1 = tkeimf * aimf / (af+aimf);
2173             VFP2_CM[2] = VZ2OUT;              << 1832       EkinR2 = tkeimf * af / (af+aimf);
2174         }                                     << 1833       V1 = std::sqrt(EkinR1/af) * 1.3887;
2175         else if (FF11 == 0 && FIMF11 == 1)    << 1834       V2 = std::sqrt(EkinR2/aimf) * 1.3887;
2176         {                                     << 1835       G4double VZ1_IMFS = (2.0 * G4AblaRandom::flat() - 1.0) * V1;
2177             // Heavy partner emits imf, conse << 1836              VPERP1 = std::sqrt(V1*V1 - VZ1_IMFS*VZ1_IMFS);
2178             // allowed                        << 1837              ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
2179             opt->optimfallowed = 0; //  IMF i << 1838       G4double VX1_IMFS = VPERP1 * std::sin(ALPHA1);
2180             fiss->ifis = 0;         //  fissi << 1839       G4double VY1_IMFS = VPERP1 * std::cos(ALPHA1);
2181                                     //        << 1840       G4double VX2_IMFS = - VX1_IMFS / V1 * V2;
2182             zf = zff;                         << 1841       G4double VY2_IMFS = - VY1_IMFS / V1 * V2;
2183             af = aff;                         << 1842       G4double VZ2_IMFS = - VZ1_IMFS / V1 * V2;
2184             ee = EEIMFP;                      << 1843 
2185             aimf = adummy;                    << 1844              EEIMFP = ee * af /(af + aimf);
2186             zimf = zdummy;                    << 1845              EEIMF = ee * aimf /(af + aimf);
2187             tkeimf = tkedummy;                << 1846 
2188             FF11 = 0;                         << 1847 // Decay of heavy partner
2189             FIMF11 = 0;                       << 1848       IINERTTOT = 0.40 * 931.490 * 1.160*1.160 *( std::pow(aimf,5.0/3.0) + std::pow(af,5.0/3.0)) + 931.490 * 1.160*1.160*aimf*af/(aimf+af)*(std::pow(aimf,1./3.) + std::pow(af,1./3.))*(std::pow(aimf,1./3.) + std::pow(af,1./3.));
2190             ftype = 22;                       << 1849 
2191             //  Lambda particles              << 1850       JPRFHEAVY = jprf1 * 0.4 * 931.49 * 1.16*1.16 * std::pow(af,5.0/3.0) / IINERTTOT;
2192             G4int NbLamH1 = 0;                << 1851       JPRFLIGHT = jprf1 * 0.4 * 931.49 * 1.16*1.16 * std::pow(aimf,5.0/3.0) / IINERTTOT;
2193             G4int NbLamimf1 = 0;              << 1852 
2194             G4double pbH1 = (af - zf) / (af - << 1853      G4double zffs=0.,affs=0.,vx1ev_imfs=0.,vy1ev_imfs=0.,vz1ev_imfs=0.,jprf3=0.;
2195             for (G4int i = 0; i < NbLamH; i++ << 1854 
2196             {                                 << 1855      evapora(zf,af,&EEIMFP,JPRFHEAVY, &zffs, &affs, &mtota, &vz1ev_imfs, &vx1ev_imfs,&vy1ev_imfs, &FF11, &FIMF11, &zdummy, &adummy,&tkedummy, &jprf3, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamH1);
2197                 if (G4AblaRandom::flat() < pb << 1856 
2198                 {                             << 1857                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
2199                     NbLamH1++;                << 1858                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
2200                 }                             << 1859                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
2201                 else                          << 1860                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
2202                 {                             << 1861 //
2203                     NbLamimf1++;              << 1862 //               EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
2204                 }                             << 1863 //               EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
2205             }                                 << 1864 //               EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
2206             //                                << 1865 // Lorentz transformation
2207             // Velocities of IMF and partner: << 1866                lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2],
2208             EkinR1 = tkeimf * aimf / (af + ai << 1867                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
2209             EkinR2 = tkeimf * af / (af + aimf << 1868                 &VXOUT,&VYOUT,&VZOUT);
2210             V1 = std::sqrt(EkinR1 / af) * 1.3 << 1869                lorentz_boost(vx1ev_imfs,vy1ev_imfs,vz1ev_imfs,
2211             V2 = std::sqrt(EkinR2 / aimf) * 1 << 1870                 VXOUT,VYOUT,VZOUT,
2212             G4double VZ1_IMFS = (2.0 * G4Abla << 1871                 &VX2OUT,&VY2OUT,&VZ2OUT);
2213             VPERP1 = std::sqrt(V1 * V1 - VZ1_ << 1872                EV_TAB[IJ+IEV_TAB][2] = VX2OUT;
2214             ALPHA1 = G4AblaRandom::flat() * 2 << 1873                EV_TAB[IJ+IEV_TAB][3] = VY2OUT;
2215             G4double VX1_IMFS = VPERP1 * std: << 1874                EV_TAB[IJ+IEV_TAB][4] = VZ2OUT;
2216             G4double VY1_IMFS = VPERP1 * std: << 1875                }
2217             G4double VX2_IMFS = -VX1_IMFS / V << 1876                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
2218             G4double VY2_IMFS = -VY1_IMFS / V << 1877 
2219             G4double VZ2_IMFS = -VZ1_IMFS / V << 1878 // For IMF - fission and IMF emission are not allowed
2220                                               << 1879       opt->optimfallowed = 0; //  IMF is not allowed
2221             EEIMFP = ee * af / (af + aimf);   << 1880       fiss->ifis = 0;         //  fission is not allowed
2222             EEIMF = ee * aimf / (af + aimf);  << 1881 //
2223                                               << 1882       FF22 = 0;
2224             // Decay of heavy partner         << 1883       FIMF22 = 0;
2225             IINERTTOT = 0.40 * 931.490 * 1.16 << 1884 // Decay of "second" IMF
2226                         931.490 * 1.160 * 1.1 << 1885      G4double zffimfs=0.,affimfs=0.,vx2ev_imfs=0.,vy2ev_imfs=0.,vz2ev_imfs=0.,jprf4=0.;
2227                             (std::pow(aimf, 1 << 1886 
2228                             (std::pow(aimf, 1 << 1887      evapora(zimf,aimf,&EEIMF,JPRFLIGHT, &zffimfs, &affimfs, &mtota, &vz2ev_imfs, &vx2ev_imfs,&vy2ev_imfs, &FF22, &FIMF22, &zdummy1, &adummy1,&tkedummy1, &jprf4, &inttype, &inum,EV_TEMP,&IEV_TAB_TEMP,&NbLamimf1);
2229                                               << 1888 
2230             JPRFHEAVY = jprf1 * 0.4 * 931.49  << 1889                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
2231             JPRFLIGHT = jprf1 * 0.4 * 931.49  << 1890                EV_TAB[IJ+IEV_TAB][0] = EV_TEMP[IJ][0];
2232                                               << 1891                EV_TAB[IJ+IEV_TAB][1] = EV_TEMP[IJ][1];
2233             G4double zffs = 0., affs = 0., vx << 1892                EV_TAB[IJ+IEV_TAB][5] = EV_TEMP[IJ][5];
2234                                               << 1893 //
2235             evapora(zf,                       << 1894 //               EV_TAB(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
2236                     af,                       << 1895 //               EV_TAB(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
2237                     &EEIMFP,                  << 1896 //               EV_TAB(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
2238                     JPRFHEAVY,                << 1897 // Lorentz transformation
2239                     &zffs,                    << 1898                lorentz_boost(VFP1_CM[0],VFP1_CM[1],VFP1_CM[2],
2240                     &affs,                    << 1899                 EV_TEMP[IJ][2],EV_TEMP[IJ][3],EV_TEMP[IJ][4],
2241                     &mtota,                   << 1900                 &VXOUT,&VYOUT,&VZOUT);
2242                     &vz1ev_imfs,              << 1901                lorentz_boost(vx2ev_imfs,vy2ev_imfs,vz2ev_imfs,
2243                     &vx1ev_imfs,              << 1902                 VXOUT,VYOUT,VZOUT,
2244                     &vy1ev_imfs,              << 1903                 &VX2OUT,&VY2OUT,&VZ2OUT);
2245                     &FF11,                    << 1904                EV_TAB[IJ+IEV_TAB][2] = VX2OUT;
2246                     &FIMF11,                  << 1905                EV_TAB[IJ+IEV_TAB][3] = VY2OUT;
2247                     &zdummy,                  << 1906                EV_TAB[IJ+IEV_TAB][4] = VZ2OUT;
2248                     &adummy,                  << 1907                }
2249                     &tkedummy,                << 1908                IEV_TAB = IEV_TAB + IEV_TAB_TEMP;
2250                     &jprf3,                   << 1909 
2251                     &inttype,                 << 1910       AFP1 = idnint(affs);
2252                     &inum,                    << 1911       ZFP1 = idnint(zffs);
2253                     EV_TEMP,                  << 1912       SFP1 = NbLamH1;
2254                     &IEV_TAB_TEMP,            << 1913       ZFP2 = idnint(zffimfs);
2255                     &NbLamH1);                << 1914       AFP2 = idnint(affimfs);
2256                                               << 1915       SFP2 = NbLamimf1;
2257             for (G4int IJ = 0; IJ < IEV_TAB_T << 1916 
2258             {                                 << 1917 // Velocity of final heavy residue
2259                 EV_TAB[IJ + IEV_TAB][0] = EV_ << 1918 // Lorentz kinematics 
2260                 EV_TAB[IJ + IEV_TAB][1] = EV_ << 1919 //       VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF
2261                 EV_TAB[IJ + IEV_TAB][5] = EV_ << 1920 //       VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF
2262                 //                            << 1921 //       VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF
2263                 //               EV_TAB(IJ+IE << 1922         lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF,
2264                 //               EV_TAB(IJ+IE << 1923                 V_CM[0],V_CM[1],V_CM[2],
2265                 //               EV_TAB(IJ+IE << 1924                 &VXOUT,&VYOUT,&VZOUT);
2266                 // Lorentz transformation     << 1925                lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf,
2267                 lorentz_boost(VFP1_CM[0],     << 1926                 VXOUT,VYOUT,VZOUT,
2268                               VFP1_CM[1],     << 1927                 &VX2OUT,&VY2OUT,&VZ2OUT);
2269                               VFP1_CM[2],     << 1928                lorentz_boost(VX1_IMFS,VY1_IMFS,VZ1_IMFS,
2270                               EV_TEMP[IJ][2], << 1929                 VX2OUT,VY2OUT,VZ2OUT,
2271                               EV_TEMP[IJ][3], << 1930                 &VXOUT,&VYOUT,&VZOUT);
2272                               EV_TEMP[IJ][4], << 1931                lorentz_boost(vx1ev_imfs,vy1ev_imfs,vz1ev_imfs,
2273                               &VXOUT,         << 1932                 VXOUT,VYOUT,VZOUT,
2274                               &VYOUT,         << 1933                 &VX2OUT,&VY2OUT,&VZ2OUT);
2275                               &VZOUT);        << 1934         VFP1_CM[0] = VX2OUT;
2276                 lorentz_boost(vx1ev_imfs, vy1 << 1935         VFP1_CM[1] = VY2OUT;
2277                 EV_TAB[IJ + IEV_TAB][2] = VX2 << 1936         VFP1_CM[2] = VZ2OUT;
2278                 EV_TAB[IJ + IEV_TAB][3] = VY2 << 
2279                 EV_TAB[IJ + IEV_TAB][4] = VZ2 << 
2280             }                                 << 
2281             IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 
2282                                                  1937 
2283             // For IMF - fission and IMF emis << 1938 // Velocity of the second IMF
2284             opt->optimfallowed = 0; //  IMF i << 1939 // Lorentz kinematics 
2285             fiss->ifis = 0;         //  fissi << 1940 //       VFP1_CM(1) = V_CM(1) + VX1_IMF + VX1EV_IMF
2286                                     //        << 1941 //       VFP1_CM(2) = V_CM(2) + VY1_IMF + VY1EV_IMF
2287             FF22 = 0;                         << 1942 //       VFP1_CM(3) = V_CM(3) + VZ1_IMF + VZ1EV_IMF
2288             FIMF22 = 0;                       << 1943         lorentz_boost(VX1_IMF,VY1_IMF,VZ1_IMF,
2289             // Decay of "second" IMF          << 1944                 V_CM[0],V_CM[1],V_CM[2],
2290             G4double zffimfs = 0., affimfs =  << 1945                 &VXOUT,&VYOUT,&VZOUT);
2291                                               << 1946                lorentz_boost(vx1ev_imf,vy1ev_imf,vz1ev_imf,
2292             evapora(zimf,                     << 1947                 VXOUT,VYOUT,VZOUT,
2293                     aimf,                     << 1948                 &VX2OUT,&VY2OUT,&VZ2OUT);
2294                     &EEIMF,                   << 1949                lorentz_boost(VX2_IMFS,VY2_IMFS,VZ2_IMFS,
2295                     JPRFLIGHT,                << 1950                 VX2OUT,VY2OUT,VZ2OUT,
2296                     &zffimfs,                 << 1951                 &VXOUT,&VYOUT,&VZOUT);
2297                     &affimfs,                 << 1952                lorentz_boost(vx2ev_imfs,vy2ev_imfs,vz2ev_imfs,
2298                     &mtota,                   << 1953                 VXOUT,VYOUT,VZOUT,
2299                     &vz2ev_imfs,              << 1954                 &VX2OUT,&VY2OUT,&VZ2OUT);
2300                     &vx2ev_imfs,              << 1955         VFP2_CM[0] = VX2OUT;
2301                     &vy2ev_imfs,              << 1956         VFP2_CM[1] = VY2OUT;
2302                     &FF22,                    << 1957         VFP2_CM[2] = VZ2OUT;
2303                     &FIMF22,                  << 1958       }//second decay
2304                     &zdummy1,                 << 1959     }// if(ftype == 2)
2305                     &adummy1,                 << 
2306                     &tkedummy1,               << 
2307                     &jprf4,                   << 
2308                     &inttype,                 << 
2309                     &inum,                    << 
2310                     EV_TEMP,                  << 
2311                     &IEV_TAB_TEMP,            << 
2312                     &NbLamimf1);              << 
2313                                               << 
2314             for (G4int IJ = 0; IJ < IEV_TAB_T << 
2315             {                                 << 
2316                 EV_TAB[IJ + IEV_TAB][0] = EV_ << 
2317                 EV_TAB[IJ + IEV_TAB][1] = EV_ << 
2318                 EV_TAB[IJ + IEV_TAB][5] = EV_ << 
2319                 //                            << 
2320                 //               EV_TAB(IJ+IE << 
2321                 //               EV_TAB(IJ+IE << 
2322                 //               EV_TAB(IJ+IE << 
2323                 // Lorentz transformation     << 
2324                 lorentz_boost(VFP1_CM[0],     << 
2325                               VFP1_CM[1],     << 
2326                               VFP1_CM[2],     << 
2327                               EV_TEMP[IJ][2], << 
2328                               EV_TEMP[IJ][3], << 
2329                               EV_TEMP[IJ][4], << 
2330                               &VXOUT,         << 
2331                               &VYOUT,         << 
2332                               &VZOUT);        << 
2333                 lorentz_boost(vx2ev_imfs, vy2 << 
2334                 EV_TAB[IJ + IEV_TAB][2] = VX2 << 
2335                 EV_TAB[IJ + IEV_TAB][3] = VY2 << 
2336                 EV_TAB[IJ + IEV_TAB][4] = VZ2 << 
2337             }                                 << 
2338             IEV_TAB = IEV_TAB + IEV_TAB_TEMP; << 
2339                                                  1960 
2340             AFP1 = idnint(affs);              << 1961 // Only evaporation of light particles
2341             ZFP1 = idnint(zffs);              << 1962     if(ftype!=1 && ftype!=21){
2342             SFP1 = NbLamH1;                   << 
2343             ZFP2 = idnint(zffimfs);           << 
2344             AFP2 = idnint(affimfs);           << 
2345             SFP2 = NbLamimf1;                 << 
2346                                               << 
2347             // Velocity of final heavy residu << 
2348             // Lorentz kinematics             << 
2349             //       VFP1_CM(1) = V_CM(1) + V << 
2350             //       VFP1_CM(2) = V_CM(2) + V << 
2351             //       VFP1_CM(3) = V_CM(3) + V << 
2352             lorentz_boost(VX1_IMF, VY1_IMF, V << 
2353             lorentz_boost(vx1ev_imf, vy1ev_im << 
2354             lorentz_boost(VX1_IMFS, VY1_IMFS, << 
2355             lorentz_boost(vx1ev_imfs, vy1ev_i << 
2356             VFP1_CM[0] = VX2OUT;              << 
2357             VFP1_CM[1] = VY2OUT;              << 
2358             VFP1_CM[2] = VZ2OUT;              << 
2359                                               << 
2360             // Velocity of the second IMF     << 
2361             // Lorentz kinematics             << 
2362             //       VFP1_CM(1) = V_CM(1) + V << 
2363             //       VFP1_CM(2) = V_CM(2) + V << 
2364             //       VFP1_CM(3) = V_CM(3) + V << 
2365             lorentz_boost(VX1_IMF, VY1_IMF, V << 
2366             lorentz_boost(vx1ev_imf, vy1ev_im << 
2367             lorentz_boost(VX2_IMFS, VY2_IMFS, << 
2368             lorentz_boost(vx2ev_imfs, vy2ev_i << 
2369             VFP2_CM[0] = VX2OUT;              << 
2370             VFP2_CM[1] = VY2OUT;              << 
2371             VFP2_CM[2] = VZ2OUT;              << 
2372         } // second decay                     << 
2373     }     // if(ftype == 2)                   << 
2374                                               << 
2375     // Only evaporation of light particles    << 
2376     if (ftype != 1 && ftype != 21)            << 
2377     {                                         << 
2378                                               << 
2379         // ----------- RESOLVE UNSTABLE NUCLE << 
2380         IOUNSTABLE = 0;                       << 
2381                                               << 
2382         unstable_nuclei(AFP1,                 << 
2383                         ZFP1,                 << 
2384                         &afpnew,              << 
2385                         &zfpnew,              << 
2386                         IOUNSTABLE,           << 
2387                         VFP1_CM[0],           << 
2388                         VFP1_CM[1],           << 
2389                         VFP1_CM[2],           << 
2390                         &VP1X,                << 
2391                         &VP1Y,                << 
2392                         &VP1Z,                << 
2393                         EV_TAB_TEMP,          << 
2394                         &ILOOP);              << 
2395                                               << 
2396         if (IOUNSTABLE == 1)                  << 
2397         {                                     << 
2398             AFP1 = afpnew;                    << 
2399             ZFP1 = zfpnew;                    << 
2400             VFP1_CM[0] = VP1X;                << 
2401             VFP1_CM[1] = VP1Y;                << 
2402             VFP1_CM[2] = VP1Z;                << 
2403             for (G4int I = 0; I < ILOOP; I++) << 
2404             {                                 << 
2405                 for (G4int IJ = 0; IJ < 5; IJ << 
2406                     EV_TAB[I + IEV_TAB][IJ] = << 
2407             }                                 << 
2408             IEV_TAB = IEV_TAB + ILOOP;        << 
2409         }                                     << 
2410                                                  1963 
2411         if (ftype > 1)                        << 1964 // ----------- RESOLVE UNSTABLE NUCLEI
2412         {                                     << 1965       IOUNSTABLE=0;
2413             IOUNSTABLE = 0;                   << 
2414                                               << 
2415             unstable_nuclei(AFPIMF,           << 
2416                             ZFPIMF,           << 
2417                             &afpnew,          << 
2418                             &zfpnew,          << 
2419                             IOUNSTABLE,       << 
2420                             VIMF_CM[0],       << 
2421                             VIMF_CM[1],       << 
2422                             VIMF_CM[2],       << 
2423                             &VP1X,            << 
2424                             &VP1Y,            << 
2425                             &VP1Z,            << 
2426                             EV_TAB_TEMP,      << 
2427                             &ILOOP);          << 
2428                                               << 
2429             if (IOUNSTABLE == 1)              << 
2430             {                                 << 
2431                 AFPIMF = afpnew;              << 
2432                 ZFPIMF = zfpnew;              << 
2433                 VIMF_CM[0] = VP1X;            << 
2434                 VIMF_CM[1] = VP1Y;            << 
2435                 VIMF_CM[2] = VP1Z;            << 
2436                 for (G4int I = 0; I < ILOOP;  << 
2437                 {                             << 
2438                     for (G4int IJ = 0; IJ < 5 << 
2439                         EV_TAB[I + IEV_TAB][I << 
2440                 }                             << 
2441                 IEV_TAB = IEV_TAB + ILOOP;    << 
2442             }                                 << 
2443                                                  1966 
2444             if (ftype > 2)                    << 1967       unstable_nuclei(AFP1,ZFP1,&afpnew,&zfpnew,IOUNSTABLE,
2445             {                                 << 1968        VFP1_CM[0],VFP1_CM[1],VFP1_CM[2],
2446                 IOUNSTABLE = 0;               << 1969        &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
2447                                               << 1970 
2448                 unstable_nuclei(AFP2,         << 1971       if(IOUNSTABLE==1){
2449                                 ZFP2,         << 1972       AFP1 = afpnew;
2450                                 &afpnew,      << 1973       ZFP1 = zfpnew;
2451                                 &zfpnew,      << 1974       VFP1_CM[0] = VP1X;
2452                                 IOUNSTABLE,   << 1975       VFP1_CM[1] = VP1Y;
2453                                 VFP2_CM[0],   << 1976       VFP1_CM[2] = VP1Z;
2454                                 VFP2_CM[1],   << 1977          for(G4int I = 0;I<ILOOP;I++){
2455                                 VFP2_CM[2],   << 1978           for(G4int IJ = 0; IJ<5; IJ++)
2456                                 &VP1X,        << 1979            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2457                                 &VP1Y,        << 1980          }
2458                                 &VP1Z,        << 1981         IEV_TAB = IEV_TAB + ILOOP;
2459                                 EV_TAB_TEMP,  << 1982       }
2460                                 &ILOOP);      << 
2461                                               << 
2462                 if (IOUNSTABLE == 1)          << 
2463                 {                             << 
2464                     AFP2 = afpnew;            << 
2465                     ZFP2 = zfpnew;            << 
2466                     VFP2_CM[0] = VP1X;        << 
2467                     VFP2_CM[1] = VP1Y;        << 
2468                     VFP2_CM[2] = VP1Z;        << 
2469                     for (G4int I = 0; I < ILO << 
2470                     {                         << 
2471                         for (G4int IJ = 0; IJ << 
2472                             EV_TAB[I + IEV_TA << 
2473                     }                         << 
2474                     IEV_TAB = IEV_TAB + ILOOP << 
2475                 }                             << 
2476             } // ftype>2                      << 
2477         }     // ftype>1                      << 
2478     }                                         << 
2479                                                  1983 
2480     // For the case of fission:               << 1984       if(ftype>1){
2481     if (ftype == 1 || ftype == 21)            << 1985        IOUNSTABLE=0;
2482     {                                         << 
2483         // ----------- RESOLVE UNSTABLE NUCLE << 
2484         IOUNSTABLE = 0;                       << 
2485         // ----------- Fragment 1             << 
2486         unstable_nuclei(AFP1,                 << 
2487                         ZFP1,                 << 
2488                         &afpnew,              << 
2489                         &zfpnew,              << 
2490                         IOUNSTABLE,           << 
2491                         VFP1_CM[0],           << 
2492                         VFP1_CM[1],           << 
2493                         VFP1_CM[2],           << 
2494                         &VP1X,                << 
2495                         &VP1Y,                << 
2496                         &VP1Z,                << 
2497                         EV_TAB_TEMP,          << 
2498                         &ILOOP);              << 
2499                                               << 
2500         if (IOUNSTABLE == 1)                  << 
2501         {                                     << 
2502             AFP1 = afpnew;                    << 
2503             ZFP1 = zfpnew;                    << 
2504             VFP1_CM[0] = VP1X;                << 
2505             VFP1_CM[1] = VP1Y;                << 
2506             VFP1_CM[2] = VP1Z;                << 
2507             for (G4int I = 0; I < ILOOP; I++) << 
2508             {                                 << 
2509                 for (G4int IJ = 0; IJ < 5; IJ << 
2510                     EV_TAB[I + IEV_TAB][IJ] = << 
2511             }                                 << 
2512             IEV_TAB = IEV_TAB + ILOOP;        << 
2513         }                                     << 
2514                                                  1986 
2515         IOUNSTABLE = 0;                       << 1987        unstable_nuclei(AFPIMF,ZFPIMF,&afpnew,&zfpnew,IOUNSTABLE,
2516         // ----------- Fragment 2             << 1988         VIMF_CM[0],VIMF_CM[1],VIMF_CM[2],
2517         unstable_nuclei(AFP2,                 << 1989         &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
2518                         ZFP2,                 << 1990 
2519                         &afpnew,              << 1991         if(IOUNSTABLE==1){
2520                         &zfpnew,              << 1992         AFPIMF = afpnew;
2521                         IOUNSTABLE,           << 1993         ZFPIMF = zfpnew;
2522                         VFP2_CM[0],           << 1994         VIMF_CM[0] = VP1X;
2523                         VFP2_CM[1],           << 1995         VIMF_CM[1] = VP1Y;
2524                         VFP2_CM[2],           << 1996         VIMF_CM[2] = VP1Z;
2525                         &VP1X,                << 1997          for(G4int I = 0;I<ILOOP;I++){
2526                         &VP1Y,                << 1998           for(G4int IJ = 0; IJ<5; IJ++)
2527                         &VP1Z,                << 1999            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2528                         EV_TAB_TEMP,          << 2000          }
2529                         &ILOOP);              << 2001         IEV_TAB = IEV_TAB + ILOOP;
2530                                               << 
2531         if (IOUNSTABLE == 1)                  << 
2532         {                                     << 
2533             AFP2 = afpnew;                    << 
2534             ZFP2 = zfpnew;                    << 
2535             VFP2_CM[0] = VP1X;                << 
2536             VFP2_CM[1] = VP1Y;                << 
2537             VFP2_CM[2] = VP1Z;                << 
2538             for (G4int I = 0; I < ILOOP; I++) << 
2539             {                                 << 
2540                 for (G4int IJ = 0; IJ < 5; IJ << 
2541                     EV_TAB[I + IEV_TAB][IJ] = << 
2542             }                                 << 
2543             IEV_TAB = IEV_TAB + ILOOP;        << 
2544         }                                        2002         }
2545                                                  2003 
2546         if (ftype == 21)                      << 2004        if(ftype>2){
2547         {                                     << 2005         IOUNSTABLE=0;
2548             IOUNSTABLE = 0;                   << 2006 
2549             // ----------- Fragment IMF       << 2007         unstable_nuclei(AFP2,ZFP2,&afpnew,&zfpnew,IOUNSTABLE,
2550             unstable_nuclei(AFPIMF,           << 2008         VFP2_CM[0],VFP2_CM[1],VFP2_CM[2],
2551                             ZFPIMF,           << 2009         &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
2552                             &afpnew,          << 2010 
2553                             &zfpnew,          << 2011         if(IOUNSTABLE==1){
2554                             IOUNSTABLE,       << 2012         AFP2 = afpnew;
2555                             VIMF_CM[0],       << 2013         ZFP2 = zfpnew;
2556                             VIMF_CM[1],       << 2014         VFP2_CM[0] = VP1X;
2557                             VIMF_CM[2],       << 2015         VFP2_CM[1] = VP1Y;
2558                             &VP1X,            << 2016         VFP2_CM[2] = VP1Z;
2559                             &VP1Y,            << 2017          for(G4int I = 0;I<ILOOP;I++){
2560                             &VP1Z,            << 2018           for(G4int IJ = 0; IJ<5; IJ++)
2561                             EV_TAB_TEMP,      << 2019            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2562                             &ILOOP);          << 2020          }
2563                                               << 2021          IEV_TAB = IEV_TAB + ILOOP;
2564             if (IOUNSTABLE == 1)              << 2022         }
2565             {                                 << 2023        }// ftype>2
2566                 AFPIMF = afpnew;              << 2024       }// ftype>1
2567                 ZFPIMF = zfpnew;              << 
2568                 VIMF_CM[0] = VP1X;            << 
2569                 VIMF_CM[1] = VP1Y;            << 
2570                 VIMF_CM[2] = VP1Z;            << 
2571                 for (G4int I = 0; I < ILOOP;  << 
2572                 {                             << 
2573                     for (G4int IJ = 0; IJ < 5 << 
2574                         EV_TAB[I + IEV_TAB][I << 
2575                 }                             << 
2576                 IEV_TAB = IEV_TAB + ILOOP;    << 
2577             }                                 << 
2578         } // ftype=21                         << 
2579     }                                            2025     }
2580                                                  2026 
2581     // Cross check                            << 2027 
2582     if ((ftype == 1 || ftype == 21) && (AFP2  << 2028 // For the case of fission:
2583     {                                         << 2029     if(ftype==1 || ftype==21){
2584         std::cout << "ZFP1:" << ZFP1 << std:: << 2030 // ----------- RESOLVE UNSTABLE NUCLEI
2585         std::cout << "AFP1:" << AFP1 << std:: << 2031       IOUNSTABLE=0;
2586         std::cout << "ZFP2:" << ZFP2 << std:: << 2032 // ----------- Fragment 1
2587         std::cout << "AFP2:" << AFP2 << std:: << 2033       unstable_nuclei(AFP1,ZFP1,&afpnew,&zfpnew,IOUNSTABLE,
2588     }                                         << 2034        VFP1_CM[0],VFP1_CM[1],VFP1_CM[2],
2589                                               << 2035        &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
2590     //     Put heavy residues in the EV_TAB a << 2036 
2591     EV_TAB[IEV_TAB][0] = ZFP1;                << 2037       if(IOUNSTABLE==1){
2592     EV_TAB[IEV_TAB][1] = AFP1;                << 2038       AFP1 = afpnew;
2593     EV_TAB[IEV_TAB][5] = SFP1;                << 2039       ZFP1 = zfpnew;
2594     EV_TAB[IEV_TAB][2] = VFP1_CM[0];          << 2040       VFP1_CM[0] = VP1X;
2595     EV_TAB[IEV_TAB][3] = VFP1_CM[1];          << 2041       VFP1_CM[1] = VP1Y;
2596     EV_TAB[IEV_TAB][4] = VFP1_CM[2];          << 2042       VFP1_CM[2] = VP1Z;
2597     IEV_TAB = IEV_TAB + 1;                    << 2043          for(G4int I = 0;I<ILOOP;I++){
2598                                               << 2044           for(G4int IJ = 0; IJ<5; IJ++)
2599     if (AFP2 > 0)                             << 2045            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
2600     {                                         << 2046          }
2601         EV_TAB[IEV_TAB][0] = ZFP2;            << 2047         IEV_TAB = IEV_TAB + ILOOP;
2602         EV_TAB[IEV_TAB][1] = AFP2;            << 2048       }
2603         EV_TAB[IEV_TAB][5] = SFP2;            << 2049 
2604         EV_TAB[IEV_TAB][2] = VFP2_CM[0];      << 2050       IOUNSTABLE=0;
2605         EV_TAB[IEV_TAB][3] = VFP2_CM[1];      << 2051 // ----------- Fragment 2
2606         EV_TAB[IEV_TAB][4] = VFP2_CM[2];      << 2052       unstable_nuclei(AFP2,ZFP2,&afpnew,&zfpnew,IOUNSTABLE,
2607         IEV_TAB = IEV_TAB + 1;                << 2053        VFP2_CM[0],VFP2_CM[1],VFP2_CM[2],
2608     }                                         << 2054        &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
2609                                               << 2055 
2610     if (AFPIMF > 0)                           << 2056       if(IOUNSTABLE==1){
2611     {                                         << 2057       AFP2 = afpnew;
2612         EV_TAB[IEV_TAB][0] = ZFPIMF;          << 2058       ZFP2 = zfpnew;
2613         EV_TAB[IEV_TAB][1] = AFPIMF;          << 2059       VFP2_CM[0] = VP1X;
2614         EV_TAB[IEV_TAB][5] = SFPIMF;          << 2060       VFP2_CM[1] = VP1Y;
2615         EV_TAB[IEV_TAB][2] = VIMF_CM[0];      << 2061       VFP2_CM[2] = VP1Z;
2616         EV_TAB[IEV_TAB][3] = VIMF_CM[1];      << 2062          for(G4int I = 0;I<ILOOP;I++){
2617         EV_TAB[IEV_TAB][4] = VIMF_CM[2];      << 2063           for(G4int IJ = 0; IJ<5; IJ++)
2618         IEV_TAB = IEV_TAB + 1;                << 2064            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
                                                   >> 2065          }
                                                   >> 2066         IEV_TAB = IEV_TAB + ILOOP;
                                                   >> 2067       }
                                                   >> 2068 
                                                   >> 2069        if(ftype==21){
                                                   >> 2070        IOUNSTABLE=0;
                                                   >> 2071 // ----------- Fragment IMF
                                                   >> 2072        unstable_nuclei(AFPIMF,ZFPIMF,&afpnew,&zfpnew,IOUNSTABLE,
                                                   >> 2073         VIMF_CM[0],VIMF_CM[1],VIMF_CM[2],
                                                   >> 2074         &VP1X,&VP1Y,&VP1Z,EV_TAB_TEMP,&ILOOP);
                                                   >> 2075 
                                                   >> 2076         if(IOUNSTABLE==1){
                                                   >> 2077         AFPIMF = afpnew;
                                                   >> 2078         ZFPIMF = zfpnew;
                                                   >> 2079         VIMF_CM[0] = VP1X;
                                                   >> 2080         VIMF_CM[1] = VP1Y;
                                                   >> 2081         VIMF_CM[2] = VP1Z;
                                                   >> 2082          for(G4int I = 0;I<ILOOP;I++){
                                                   >> 2083           for(G4int IJ = 0; IJ<5; IJ++)
                                                   >> 2084            EV_TAB[I+IEV_TAB][IJ] = EV_TAB_TEMP[I][IJ];
                                                   >> 2085          }
                                                   >> 2086         IEV_TAB = IEV_TAB + ILOOP;
                                                   >> 2087         }
                                                   >> 2088        }// ftype=21
2619     }                                            2089     }
2620     // Put the array of particles in the root << 2090 
2621     FillData(IMULTBU, IEV_TAB);               << 2091 // Cross check
2622     return;                                   << 2092       if((ftype == 1 ||  ftype == 21) && (AFP2<=0 || AFP1<=0 || ZFP2<=0 || ZFP1<=0)){
                                                   >> 2093        std::cout << "ZFP1:" << ZFP1 << std::endl;
                                                   >> 2094        std::cout << "AFP1:" << AFP1 << std::endl;
                                                   >> 2095        std::cout << "ZFP2:" << ZFP2 << std::endl;
                                                   >> 2096        std::cout << "AFP2:" << AFP2 << std::endl;
                                                   >> 2097       }
                                                   >> 2098 
                                                   >> 2099 //     Put heavy residues in the EV_TAB array
                                                   >> 2100        EV_TAB[IEV_TAB][0] = ZFP1;
                                                   >> 2101        EV_TAB[IEV_TAB][1] = AFP1;
                                                   >> 2102        EV_TAB[IEV_TAB][5] = SFP1;
                                                   >> 2103        EV_TAB[IEV_TAB][2] = VFP1_CM[0];
                                                   >> 2104        EV_TAB[IEV_TAB][3] = VFP1_CM[1];
                                                   >> 2105        EV_TAB[IEV_TAB][4] = VFP1_CM[2];
                                                   >> 2106        IEV_TAB = IEV_TAB + 1;
                                                   >> 2107 
                                                   >> 2108        if(AFP2>0){
                                                   >> 2109        EV_TAB[IEV_TAB][0] = ZFP2;
                                                   >> 2110        EV_TAB[IEV_TAB][1] = AFP2;
                                                   >> 2111        EV_TAB[IEV_TAB][5] = SFP2;
                                                   >> 2112        EV_TAB[IEV_TAB][2] = VFP2_CM[0];
                                                   >> 2113        EV_TAB[IEV_TAB][3] = VFP2_CM[1];
                                                   >> 2114        EV_TAB[IEV_TAB][4] = VFP2_CM[2];
                                                   >> 2115        IEV_TAB = IEV_TAB + 1;
                                                   >> 2116        }
                                                   >> 2117 
                                                   >> 2118        if(AFPIMF>0){
                                                   >> 2119        EV_TAB[IEV_TAB][0] = ZFPIMF;
                                                   >> 2120        EV_TAB[IEV_TAB][1] = AFPIMF;
                                                   >> 2121        EV_TAB[IEV_TAB][5] = SFPIMF;
                                                   >> 2122        EV_TAB[IEV_TAB][2] = VIMF_CM[0];
                                                   >> 2123        EV_TAB[IEV_TAB][3] = VIMF_CM[1];
                                                   >> 2124        EV_TAB[IEV_TAB][4] = VIMF_CM[2];
                                                   >> 2125        IEV_TAB = IEV_TAB + 1;
                                                   >> 2126        }
                                                   >> 2127 // Put the array of particles in the root file of INCL
                                                   >> 2128    FillData(IMULTBU,IEV_TAB);
                                                   >> 2129    return;
2623 }                                                2130 }
2624                                                  2131 
2625 // Evaporation code                              2132 // Evaporation code
2626 void G4Abla::initEvapora()                       2133 void G4Abla::initEvapora()
2627 {                                                2134 {
2628                                                  2135 
2629     //     40 C                       BFPRO,S << 2136  //     40  C                       BFPRO,SNPRO,SPPRO,SHELL                         
2630     //     41 C                               << 2137   //     41 C                                                                       
2631     //     42 C     AP,ZP,AT,ZT   - PROJECTIL << 2138   //     42 C     AP,ZP,AT,ZT   - PROJECTILE AND TARGET MASSES                      
2632     //     43 C     EAP,BETA      - BEAM ENER << 2139   //     43 C     EAP,BETA      - BEAM ENERGY PER NUCLEON, V/C                      
2633     //     44 C     BMAXNUC       - MAX. IMPA << 2140   //     44 C     BMAXNUC       - MAX. IMPACT PARAMETER FOR NUCL. REAC.             
2634     //     45 C     CRTOT,CRNUC   - TOTAL AND << 2141   //     45 C     CRTOT,CRNUC   - TOTAL AND NUCLEAR REACTION CROSS SECTION          
2635     //     46 C     R_0,R_P,R_T,  - RADIUS PA << 2142   //     46 C     R_0,R_P,R_T,  - RADIUS PARAMETER, PROJECTILE+ TARGET RADII        
2636     //     47 C     IMAX,IRNDM,PI - MAXIMUM N << 2143   //     47 C     IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141...         
2637     //     48 C     BFPRO         - FISSION B << 2144   //     48 C     BFPRO         - FISSION BARRIER OF THE PROJECTILE                 
2638     //     49 C     SNPRO         - NEUTRON S << 2145   //     49 C     SNPRO         - NEUTRON SEPARATION ENERGY OF THE PROJECTILE       
2639     //     PROJECTILE 50  C     SPPRO         << 2146   //     50 C     SPPRO         - PROTON    "           "   "    "   "              
2640     //     51 C     SHELL         - GROUND ST << 2147   //     51 C     SHELL         - GROUND STATE SHELL CORRECTION                     
2641     //     52                                 << 2148   //     52 C---------------------------------------------------------------------  
2642     //     C--------------------------------- << 2149   //     53 C                                                                       
2643     //     53 C                               << 2150   //     54 C     ENERGIES WIDTHS AND CROSS SECTIONS FOR EM EXCITATION              
2644     //     54 C     ENERGIES WIDTHS AND CROSS << 2151   //     55 C     COMMON /EMDPAR/ EGDR,EGQR,FWHMGDR,FWHMGQR,CREMDE1,CREMDE2,        
2645     //     55 C     COMMON /EMDPAR/ EGDR,EGQR << 2152   //     56 C                     AE1,BE1,CE1,AE2,BE2,CE2,SR1,SR2,XR                
2646     //     56 C                     AE1,BE1,C << 2153   //     57 C                                                                       
2647     //     57 C                               << 2154   //     58 C     EGDR,EGQR       - MEAN ENERGY OF GDR AND GQR                      
2648     //     58 C     EGDR,EGQR       - MEAN EN << 2155   //     59 C     FWHMGDR,FWHMGQR - FWHM OF GDR, GQR                                
2649     //     59 C     FWHMGDR,FWHMGQR - FWHM OF << 2156   //     60 C     CREMDE1,CREMDE2 - EM CROSS SECTION FOR E1 AND E2                  
2650     //     60 C     CREMDE1,CREMDE2 - EM CROS << 2157   //     61 C     AE1,BE1,CE1     - ARRAYS TO CALCULATE                             
2651     //     61 C     AE1,BE1,CE1     - ARRAYS  << 2158   //     62 C     AE2,BE2,CE2     - THE EXCITATION ENERGY AFTER E.M. EXC.           
2652     //     62 C     AE2,BE2,CE2     - THE EXC << 2159   //     63 C     SR1,SR2,XR      - WITH MONTE CARLO                                
2653     //     63 C     SR1,SR2,XR      - WITH MO << 2160   //     64 C---------------------------------------------------------------------  
2654     //     64                                 << 2161   //     65 C                                                                       
2655     //     C--------------------------------- << 2162   //     66 C     DEFORMATIONS AND G.S. SHELL EFFECTS                               
2656     //     65 C                               << 2163   //     67 C     COMMON /ECLD/   ECGNZ,ECFNZ,VGSLD,ALPHA                           
2657     //     66 C     DEFORMATIONS AND G.S. SHE << 2164   //     68 C                                                                       
2658     //     67 C     COMMON /ECLD/   ECGNZ,ECF << 2165   //     69 C     ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S.       
2659     //     68 C                               << 2166   //     70 C     ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0)         
2660     //     69 C     ECGNZ - GROUND STATE SHEL << 2167   //     71 C     VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE            
2661     //     G.S.                               << 2168   //     72 C     ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!)       
2662     //     70 C     ECFNZ - SHELL CORRECTION  << 2169   //     73 C             BETA2 = SQRT(5/(4PI)) * ALPHA                             
2663     //     71 C     VGSLD - DIFFERENCE BETWEE << 2170   //     74 C---------------------------------------------------------------------  
2664     //     72 C     ALPHA - ALPHA GROUND STAT << 2171   //     75 C                                                                       
2665     //     BETA2!) 73 C             BETA2 = S << 2172   //     76 C     ARRAYS FOR EXCITATION ENERGY BY STATISTICAL HOLE ENERY MODEL      
2666     //     C--------------------------------- << 2173   //     77 C     COMMON /EENUC/  SHE, XHE                                          
2667     //     75 C                               << 2174   //     78 C                                                                       
2668     //     76 C     ARRAYS FOR EXCITATION ENE << 2175   //     79 C     SHE, XHE - ARRAYS TO CALCULATE THE EXC. ENERGY AFTER              
2669     //     MODEL 77 C     COMMON /EENUC/  SHE << 2176   //     80 C                ABRASION BY THE STATISTICAL HOLE ENERGY MODEL          
2670     //     XHE - ARRAYS TO CALCULATE THE EXC. << 2177   //     81 C---------------------------------------------------------------------  
2671     //     THE STATISTICAL HOLE ENERGY MODEL  << 2178   //     82 C                                                                       
2672     //     C--------------------------------- << 2179   //     83 C     G.S. SHELL EFFECT                                                 
2673     //     82 C                               << 2180   //     84 C     COMMON /EC2SUB/ ECNZ                                              
2674     //     83 C     G.S. SHELL EFFECT         << 2181   //     85 C                                                                       
2675     //     84 C     COMMON /EC2SUB/ ECNZ      << 2182   //     86 C     ECNZ G.S. SHELL EFFECT FOR THE MASSES (IDENTICAL TO ECGNZ)        
2676     //     85 C                               << 2183   //     87 C---------------------------------------------------------------------  
2677     //     86 C     ECNZ G.S. SHELL EFFECT FO << 2184   //       
2678     //     87                                 << 2185 
2679     //     C--------------------------------- << 2186   G4double MN = 939.5653301;   
2680     //                                        << 2187   G4double MP = 938.7829835;                             
2681                                               << 2188 
2682     G4double MN = 939.5653301;                << 2189 #ifdef ABLAXX_IN_GEANT4_MODE
2683     G4double MP = 938.7829835;                << 2190   G4AblaDataFile *dataInterface = new G4AblaDataFile();
2684                                               << 2191 #else
2685     G4AblaDataFile* dataInterface = new G4Abl << 2192   G4AblaDataFile *dataInterface = new G4AblaDataFile(theConfig);
2686     if (dataInterface->readData() == true)    << 2193 #endif
2687     {                                         << 2194   if(dataInterface->readData() == true) {
2688         if (verboseLevel > 0)                 << 2195     if(verboseLevel > 0) {
2689         {                                     << 2196       // G4cout <<"G4Abla: Datafiles read successfully." << G4endl;
2690             // G4cout <<"G4Abla: Datafiles re << 2197     }
2691         }                                     << 2198   }
2692     }                                         << 2199   else {
2693     else                                      << 2200     //    G4Exception("ERROR: Failed to read datafiles.");
2694     {                                         << 2201   }
2695         //    G4Exception("ERROR: Failed to r << 2202   
2696     }                                         << 2203   for(G4int z = 0; z < 99; z++) { //do 30  z = 0,98,1                                                 
2697                                               << 2204     for(G4int n = 0; n < 154; n++) { //do 31  n = 0,153,1                                              
2698     for (G4int z = 0; z < 99; z++)            << 2205       ecld->ecfnz[n][z] = 0.e0;
2699     { // do 30  z = 0,98,1                    << 2206       ec2sub->ecnz[n][z] = dataInterface->getEcnz(n,z);
2700         for (G4int n = 0; n < 154; n++)       << 2207       ecld->ecgnz[n][z] = dataInterface->getEcnz(n,z);
2701         { // do 31  n = 0,153,1               << 2208       ecld->alpha[n][z] = dataInterface->getAlpha(n,z);
2702             ecld->ecfnz[n][z] = 0.e0;         << 2209       ecld->vgsld[n][z] = dataInterface->getVgsld(n,z);
2703             ec2sub->ecnz[n][z] = dataInterfac << 2210       ecld->rms[n][z] = dataInterface->getRms(n,z);
2704             ecld->ecgnz[n][z] = dataInterface << 2211     }
2705             ecld->alpha[n][z] = dataInterface << 2212   }
2706             ecld->vgsld[n][z] = dataInterface << 2213 
2707             ecld->rms[n][z] = dataInterface-> << 2214   for(G4int z = 0; z < 137; z++){                                                  
2708         }                                     << 2215     for(G4int n = 0; n < 251; n++){  
2709     }                                         << 2216       ecld->beta2[n][z] = dataInterface->getBeta2(n,z);
2710                                               << 2217       ecld->beta4[n][z] = dataInterface->getBeta4(n,z);
2711     for (G4int iz = 0; iz < zcolsbeta; iz++)  << 2218     }
2712         for (G4int in = 0; in < nrowsbeta; in << 2219   }
2713         {                                     << 2220 
2714             ecld->beta2[in][iz] = dataInterfa << 2221   for(G4int z = 0; z < 500; z++) {
2715             ecld->beta4[in][iz] = dataInterfa << 2222     for(G4int a = 0; a < 500; a++) {
2716         }                                     << 2223       pace->dm[z][a] = dataInterface->getPace2(z,a);
2717                                               << 2224     }
2718     G4double mfrldm[lprows][lpcols];          << 2225   }
2719     // For 2 < Z < 12 we take "experimental"  << 2226 
2720     // calculated Read FRLDM tables           << 2227 
2721     for (G4int i = 1; i < lpcols; i++)        << 2228 
2722     {                                         << 2229   G4double mfrldm[154][13];
2723         for (G4int j = 1; j < lprows; j++)    << 2230 // For 2 < Z < 12 we take "experimental" shell corrections instead of calculated
2724         {                                     << 2231 // Read FRLDM tables
2725             if (dataInterface->getMexpID(j, i << 2232   for(G4int i=1;i<13;i++){
2726             {                                 << 2233    for(G4int j=1;j<154;j++){
2727                 masses->mexpiop[j][i] = 1;    << 2234       if(dataInterface->getMexpID(j,i)==1){
2728             }                                 << 2235        masses->mexpiop[j][i]=1;  
2729             else                              << 2236       }else{
2730             {                                 << 2237        masses->mexpiop[j][i]=0;
2731                 masses->mexpiop[j][i] = 0;    << 2238       } 
2732             }                                 << 2239 // LD masses (even-odd effect is later considered according to Ignatyuk)
2733             // LD masses (even-odd effect is  << 2240       if(i==0 && j==0)
2734             if (i == 0 && j == 0)             << 2241        mfrldm[j][i] = 0.;
2735                 mfrldm[j][i] = 0.;            << 2242       else
2736             else                              << 2243        mfrldm[j][i] = MP*i+MN*j+eflmac(i+j,i,1,0);
2737                 mfrldm[j][i] = MP * i + MN *  << 2244    }
2738         }                                     << 2245   }
2739     }                                         << 2246 
2740                                               << 2247   G4double e0=0.;
2741     for (G4int i = 0; i < lpcols; i++)        << 2248   for(G4int i=1;i<13;i++){
2742         for (G4int j = 0; j < lprows; j++)    << 2249    for(G4int j=1;j<154;j++){
2743             masses->massexp[j][i] = dataInter << 2250       masses->bind[j][i]=0.;
2744                                               << 2251       if(masses->mexpiop[j][i]==1){
2745     G4double e0 = 0.;                         << 2252         if(j<3){
2746     for (G4int i = 1; i < lpcols; i++)        << 2253 
2747     {                                         << 2254           ec2sub->ecnz[j][i] = 0.0;
2748         for (G4int j = 1; j < lprows; j++)    << 2255           ecld->ecgnz[j][i] = ec2sub->ecnz[j][i];
2749         {                                     << 2256           masses->bind[j][i] = dataInterface->getMexp(j,i)-MP*i -MN*j;
2750             masses->bind[j][i] = 0.;          << 2257           ecld->vgsld[j][i]=0.;
2751             if (masses->mexpiop[j][i] == 1)   << 2258 
2752             {                                 << 2259           e0=0.;
2753                 if (j < 30)                   << 2260         }else{
2754                 {                             << 2261 // For these nuclei, we take "experimental" ground-state shell corrections
2755                                               << 2262 //
2756                     ec2sub->ecnz[j][i] = 0.0; << 2263 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to correspond
2757                     ecld->ecgnz[j][i] = ec2su << 2264 // to pairing shift in Fermi-gas model (there, energy is shifted taking odd-odd nuclei as bassis)
2758                     masses->bind[j][i] = data << 2265               G4double para=0.;
2759                     ecld->vgsld[j][i] = 0.;   << 2266               parite(j+i,&para);
2760                                               << 2267                 if(para<0.0){
2761                     e0 = 0.;                  << 2268 // e-o, o-e
                                                   >> 2269                  e0 =  0.285+11.17*std::pow(j+i,-0.464) -0.390-0.00058*(j+i);
                                                   >> 2270                 }else{
                                                   >> 2271                   G4double parz=0.;
                                                   >> 2272                   parite(i,&parz);
                                                   >> 2273                   if (parz>0.0){
                                                   >> 2274 // e-e
                                                   >> 2275                    e0 = 22.34*std::pow(j+i,-0.464)-0.235;
                                                   >> 2276                   }else{
                                                   >> 2277 // o-o
                                                   >> 2278                    e0 = 0.0;
                                                   >> 2279                   }
                                                   >> 2280                 }
                                                   >> 2281 //
                                                   >> 2282                 if((j==i)&&mod(j,2)==1&&mod(i,2)==1){
                                                   >> 2283                  e0 = e0 - 30.0*(1.0/G4double(j+i));
2762                 }                                2284                 }
2763                 else                          << 
2764                 {                             << 
2765                     // For these nuclei, we t << 
2766                     // corrections            << 
2767                     //                        << 
2768                     // Parametrization of CT  << 
2769                     // correspond to pairing  << 
2770                     // shifted taking odd-odd << 
2771                     G4double para = 0.;       << 
2772                     parite(j + i, &para);     << 
2773                     if (para < 0.0)           << 
2774                     {                         << 
2775                         // e-o, o-e           << 
2776                         e0 = 0.285 + 11.17 *  << 
2777                     }                         << 
2778                     else                      << 
2779                     {                         << 
2780                         G4double parz = 0.;   << 
2781                         parite(i, &parz);     << 
2782                         if (parz > 0.0)       << 
2783                         {                     << 
2784                             // e-e            << 
2785                             e0 = 22.34 * std: << 
2786                         }                     << 
2787                         else                  << 
2788                         {                     << 
2789                             // o-o            << 
2790                             //                << 
2791                             //                << 
2792                             e0 = 0.0;         << 
2793                         }                     << 
2794                     }                         << 
2795                     //                        << 
2796                     if ((j == i) && mod(j, 2) << 
2797                     {                         << 
2798                         e0 = e0 - 30.0 * (1.0 << 
2799                     }                         << 
2800                                                  2285 
2801                     G4double delta_tot = ec2s << 2286             G4double delta_tot = ec2sub->ecnz[j][i] - ecld->vgsld[j][i];
2802                     ec2sub->ecnz[j][i] = data << 2287             ec2sub->ecnz[j][i] = dataInterface->getMexp(j,i) - (mfrldm[j][i] - e0);
2803                                                  2288 
2804                     ecld->vgsld[j][i] = max(0 << 2289             ecld->vgsld[j][i] = max(0.0,ec2sub->ecnz[j][i] - delta_tot);
2805                     ecld->ecgnz[j][i] = ec2su << 2290             ecld->ecgnz[j][i] = ec2sub->ecnz[j][i];
2806                                                  2291 
2807                 } // if j                     << 2292         }//if j
2808             }     // if mexpiop               << 2293      }//if mexpiop
2809         }                                     << 2294    }
2810     }                                         << 2295   }
2811     //                                        << 2296 //
2812     delete dataInterface;                     << 2297   delete dataInterface;
2813 }                                                2298 }
2814                                                  2299 
2815 void G4Abla::SetParametersG4(G4int z, G4int a    2300 void G4Abla::SetParametersG4(G4int z, G4int a)
2816 {                                                2301 {
2817     // A and Z for the target                 << 2302   //A and Z for the target
2818     fiss->at = a;                             << 2303   fiss->at = a;
2819     fiss->zt = z;                             << 2304   fiss->zt = z;
2820                                               << 2305 
2821     // switch-fission.1=on.0=off              << 2306   // shell+pairing.0-1-2-3 for IMFs
2822     fiss->ifis = 1;                           << 2307   opt->optshpimf = 0;
2823                                               << 2308 
2824     // shell+pairing.0-1-2-3                  << 2309   //collective enhancement switched on 1 or off 0 in densn (qr=val or =1.)
2825     fiss->optshp = 3;                         << 2310   fiss->optcol = 1;
2826     if (fiss->zt < 84 && fiss->zt > 60)       << 2311   if(fiss->zt<83 && fiss->zt>56){
2827         fiss->optshp = 1;                     << 2312   fiss->optshp = 1;
2828                                               << 2313   }
2829     // optemd =0,1  0 no emd, 1 incl. emd     << 2314   if(fiss->zt<=56){  
2830     opt->optemd = 1;                          << 2315   fiss->optcol = 0;
2831     // read(10,*,iostat=io) dum(10),optcha    << 2316   fiss->optshp = 3;
2832     opt->optcha = 1;                          << 2317   }
2833                                               << 
2834     // shell+pairing.0-1-2-3 for IMFs         << 
2835     opt->optshpimf = 0;                       << 
2836     opt->optimfallowed = 1;                   << 
2837                                               << 
2838     // collective enhancement switched on 1 o << 
2839     fiss->optcol = 1;                         << 
2840     if (fiss->zt <= 28)                       << 
2841     {                                         << 
2842         fiss->optcol = 0;                     << 
2843         fiss->optshp = 0;                     << 
2844         opt->optshpimf = 1;                   << 
2845     }                                         << 
2846     else if (fiss->zt <= 58)                  << 
2847     {                                         << 
2848         fiss->optcol = 0;                     << 
2849         fiss->optshp = 1;                     << 
2850         opt->optshpimf = 3;                   << 
2851     }                                         << 
2852     // collective enhancement parameters      << 
2853     fiss->ucr = 40.;                          << 
2854     fiss->dcr = 10.;                          << 
2855                                               << 
2856     // switch for temperature constant model  << 
2857     fiss->optct = 1;                          << 
2858                                               << 
2859     ald->optafan = 0;                         << 
2860                                               << 
2861     // nuclear.viscosity.(beta)               << 
2862     fiss->bet = 4.5;                          << 
2863     fiss->bethyp = 28.0;                      << 
2864     fiss->optxfis = 3;                        << 
2865                                               << 
2866     // Level density parameters               << 
2867     ald->av = 0.0730;                         << 
2868     ald->as = 0.0950;                         << 
2869     ald->ak = 0.0000;                         << 
2870                                               << 
2871     // Multi-fragmentation                    << 
2872     T_freeze_out_in = -6.5;                   << 
2873 }                                                2318 }
2874                                                  2319 
2875 void G4Abla::SetParameters()                     2320 void G4Abla::SetParameters()
2876 {                                                2321 {
2877     /*                                        << 2322 /*
2878     C     IFIS =   INTEGER SWITCH FOR FISSION << 2323 C     IFIS =   INTEGER SWITCH FOR FISSION
2879     C     OPTSHP = INTEGER SWITCH FOR SHELL C << 2324 C     OPTSHP = INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY
2880     C            =0 NO MICROSCOPIC CORRECTION << 2325 C            =0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY
2881     C            =1 SHELL , NO PAIRING CORREC << 2326 C            =1 SHELL , NO PAIRING CORRECTION
2882     C            =2 PAIRING, NO SHELL CORRECT << 2327 C            =2 PAIRING, NO SHELL CORRECTION
2883     C            =3 SHELL AND PAIRING CORRECT << 2328 C            =3 SHELL AND PAIRING CORRECTION IN MASSES AND ENERGY
2884     C     OPTCOL =0,1 COLLECTIVE ENHANCEMENT  << 2329 C     OPTCOL =0,1 COLLECTIVE ENHANCEMENT SWITCHED ON 1 OR OFF 0 IN DENSN
2885     C     OPTAFAN=0,1 SWITCH FOR AF/AN = 1 IN << 2330 C     OPTAFAN=0,1 SWITCH FOR AF/AN = 1 IN DENSNIV 0 AF/AN>1 1 AF/AN=1
2886     C     BET  =  REAL    REDUCED FRICTION CO << 2331 C     BET  =  REAL    REDUCED FRICTION COEFFICIENT / 10**(+21) S**(-1)
2887     C     OPTXFIS= INTEGER 0,1,2 FOR MYERS &  << 2332 C     OPTXFIS= INTEGER 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV
2888     C              FISSILITY PARAMETER.       << 2333 C              FISSILITY PARAMETER.
2889     C                                         << 2334 C
2890     C     NUCLEAR LEVEL DENSITIES:            << 2335 C     NUCLEAR LEVEL DENSITIES:
2891     C     AV     = REAL KOEFFICIENTS FOR CALC << 2336 C     AV     = REAL KOEFFICIENTS FOR CALCULATION OF A(TILDE)
2892     C     AS     = REAL LEVEL DENSITY PARAMET << 2337 C     AS     = REAL LEVEL DENSITY PARAMETER
2893     C     AK     = REAL                       << 2338 C     AK     = REAL
2894     */                                        << 2339 */
2895                                               << 2340 
2896     // switch-fission.1=on.0=off              << 2341   // switch-fission.1=on.0=off
2897     fiss->ifis = 1;                           << 2342   fiss->ifis = 1;
2898                                               << 2343 
2899     // shell+pairing.0-1-2-3                  << 2344   // shell+pairing.0-1-2-3
2900     fiss->optshp = 3;                         << 2345   fiss->optshp = 3; 
2901     if (fiss->zt < 84 && fiss->zt > 56)       << 2346   if(fiss->zt<84 && fiss->zt>56)
2902         fiss->optshp = 1;                     << 2347   fiss->optshp = 1;
2903                                               << 2348 
2904     // optemd =0,1  0 no emd, 1 incl. emd     << 2349   // optemd =0,1  0 no emd, 1 incl. emd                                
2905     opt->optemd = 1;                          << 2350   opt->optemd = 1;
2906     // read(10,*,iostat=io) dum(10),optcha    << 2351   // read(10,*,iostat=io) dum(10),optcha                               
2907     opt->optcha = 1;                          << 2352   opt->optcha = 1;
2908                                               << 2353 
2909     // shell+pairing.0-1-2-3 for IMFs         << 2354   // shell+pairing.0-1-2-3 for IMFs
2910     opt->optshpimf = 0;                       << 2355   opt->optshpimf = 0;
2911     opt->optimfallowed = 1;                   << 2356   opt->optimfallowed = 1;
2912                                               << 2357 
2913     // nuclear.viscosity.(beta)               << 2358   // nuclear.viscosity.(beta)
2914     fiss->bet = 4.5;                          << 2359   fiss->bet = 4.5;
2915                                               << 2360 
2916     // collective enhancement switched on 1 o << 2361   //collective enhancement switched on 1 or off 0 in densn (qr=val or =1.)
2917     fiss->optcol = 1;                         << 2362   fiss->optcol = 1;
2918     if (fiss->zt <= 56)                       << 2363   if(fiss->zt<=56){  
2919     {                                         << 2364   fiss->optcol = 0;
2920         fiss->optcol = 0;                     << 2365   fiss->optshp = 3;
2921         fiss->optshp = 3;                     << 2366   }
2922     }                                         << 2367   //collective enhancement parameters
2923     // collective enhancement parameters      << 2368   fiss->ucr = 40.;
2924     fiss->ucr = 40.;                          << 2369   fiss->dcr = 10.;
2925     fiss->dcr = 10.;                          << 2370 
2926                                               << 2371   // switch for temperature constant model (CTM)
2927     // switch for temperature constant model  << 2372   fiss->optct = 1;
2928     fiss->optct = 1;                          << 2373 
2929                                               << 2374   ald->optafan = 0;
2930     ald->optafan = 0;                         << 2375 
2931                                               << 2376   ald->av = 0.0730;
2932     ald->av = 0.0730;                         << 2377   ald->as = 0.0950;
2933     ald->as = 0.0950;                         << 2378   ald->ak = 0.0000;
2934     ald->ak = 0.0000;                         << 2379 
2935                                               << 2380   fiss->optxfis = 3;
2936     fiss->optxfis = 3;                        << 2381 
2937                                               << 2382 // Multi-fragmentation
2938     // Multi-fragmentation                    << 2383   T_freeze_out_in = -6.5;
2939     T_freeze_out_in = -6.5;                   << 2384 
2940 }                                             << 2385 }
2941                                               << 2386 
2942 void G4Abla::mglw(G4double a, G4double z, G4d << 2387 void G4Abla::mglw(G4double a, G4double z, G4double *el)
2943 {                                             << 2388 {
2944     // MODEL DE LA GOUTTE LIQUIDE DE C. F. WE << 2389   // MODEL DE LA GOUTTE LIQUIDE DE C. F. WEIZSACKER.
2945     // USUALLY AN OBSOLETE OPTION             << 2390   // USUALLY AN OBSOLETE OPTION
2946                                               << 2391 
2947     G4double xv = 0.0, xs = 0.0, xc = 0.0, xa << 2392   G4double xv = 0.0, xs = 0.0, xc = 0.0, xa = 0.0;                                   
2948                                               << 2393 
2949     if ((a <= 0.01) || (z < 0.01))            << 2394   if ((a <= 0.01) || (z < 0.01)) {
2950     {                                         << 2395     (*el) = 1.0e38;
2951         (*el) = 1.0e38;                       << 2396   }
2952     }                                         << 2397   else {
2953     else                                      << 2398     xv = -15.56*a;
2954     {                                         << 2399     xs = 17.23*std::pow(a,(2.0/3.0));
2955         xv = -15.56 * a;                      << 2400 
2956         xs = 17.23 * std::pow(a, (2.0 / 3.0)) << 2401     if (a > 1.0) {
2957                                               << 2402       xc = 0.7*z*(z-1.0)*std::pow((a-1.0),(-1.e0/3.e0));
2958         if (a > 1.0)                          << 2403     }
2959         {                                     << 2404     else {
2960             xc = 0.7 * z * (z - 1.0) * std::p << 2405       xc = 0.0;
2961         }                                     << 2406     }
2962         else                                  << 2407   }
2963         {                                     << 2408 
2964             xc = 0.0;                         << 2409   xa = 23.6*(std::pow((a-2.0*z),2)/a);
2965         }                                     << 2410   (*el) = xv+xs+xc+xa;
2966     }                                         << 2411   return; 
2967                                               << 2412 }
2968     xa = 23.6 * (std::pow((a - 2.0 * z), 2) / << 2413 
2969     (*el) = xv + xs + xc + xa;                << 2414 void G4Abla::mglms(G4double a, G4double z, G4int refopt4, G4double *el)
                                                   >> 2415 {
                                                   >> 2416   // USING FUNCTION EFLMAC(IA,IZ,0)                                    
                                                   >> 2417   // 
                                                   >> 2418   // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORRECTIONS                     
                                                   >> 2419   // REFOPT4 = 1 : WITH SHELL CORRECTION                               
                                                   >> 2420   // REFOPT4 = 2 : WITH PAIRING CORRECTION                             
                                                   >> 2421   // REFOPT4 = 3 : WITH SHELL- AND PAIRING CORRECTION                  
                                                   >> 2422 
                                                   >> 2423   //   1839 C-----------------------------------------------------------------------
                                                   >> 2424   //   1840 C     A1       LOCAL    MASS NUMBER (INTEGER VARIABLE OF A)             
                                                   >> 2425   //   1841 C     Z1       LOCAL    NUCLEAR CHARGE (INTEGER VARIABLE OF Z)          
                                                   >> 2426   //   1842 C     REFOPT4           OPTION, SPECIFYING THE MASS FORMULA (SEE ABOVE) 
                                                   >> 2427   //   1843 C     A                 MASS NUMBER                                     
                                                   >> 2428   //   1844 C     Z                 NUCLEAR CHARGE                                  
                                                   >> 2429   //   1845 C     DEL               PAIRING CORRECTION                              
                                                   >> 2430   //   1846 C     EL                BINDING ENERGY                                  
                                                   >> 2431   //   1847 C     ECNZ( , )         TABLE OF SHELL CORRECTIONS                      
                                                   >> 2432   //   1848 C-----------------------------------------------------------------------
                                                   >> 2433   //   1849 C                                                                       
                                                   >> 2434   G4int a1 = idnint(a);
                                                   >> 2435   G4int z1 = idnint(z);
                                                   >> 2436   G4int n1 = a1-z1;
                                                   >> 2437 
                                                   >> 2438   if ( (a1 <= 0) || (z1 <= 0) || ((a1-z1) <= 0) )  { //then 
                                                   >> 2439     // modif pour recuperer une masse p et n correcte:
                                                   >> 2440     (*el) = 1.e38;
2970     return;                                      2441     return;
2971 }                                             << 2442     //    goto mglms50;
2972                                               << 2443   }
2973 void G4Abla::mglms(G4double a, G4double z, G4 << 2444   else {
2974 {                                             << 2445     // binding energy incl. pairing contr. is calculated from                
2975     // USING FUNCTION EFLMAC(IA,IZ,0)         << 2446     // function eflmac                                                       
2976     //                                        << 2447     (*el) = eflmac(a1,z1,0,refopt4);
2977     // REFOPT4 = 0 : WITHOUT MICROSCOPIC CORR << 2448 
2978     // REFOPT4 = 1 : WITH SHELL CORRECTION    << 2449     if (refopt4 > 0) {
2979     // REFOPT4 = 2 : WITH PAIRING CORRECTION  << 2450       if (refopt4 != 2) {
2980     // REFOPT4 = 3 : WITH SHELL- AND PAIRING  << 2451   (*el) = (*el) + ec2sub->ecnz[a1-z1][z1];
2981                                               << 2452       }
2982     //   1839                                 << 
2983     //   C----------------------------------- << 
2984     //   1840 C     A1       LOCAL    MASS NU << 
2985     //   1841 C     Z1       LOCAL    NUCLEAR << 
2986     //   1842 C     REFOPT4           OPTION, << 
2987     //   ABOVE) 1843  C     A                 << 
2988     //   NUCLEAR CHARGE 1845  C     DEL       << 
2989     //   C     EL                BINDING ENER << 
2990     //   SHELL CORRECTIONS 1848               << 
2991     //   C----------------------------------- << 
2992     //   1849 C                               << 
2993     G4int a1 = idnint(a);                     << 
2994     G4int z1 = idnint(z);                     << 
2995     G4int n1 = a1 - z1;                       << 
2996                                               << 
2997     if ((a1 <= 0) || (z1 <= 0) || ((a1 - z1)  << 
2998     { // then                                 << 
2999         // modif pour recuperer une masse p e << 
3000         (*el) = 1.e38;                        << 
3001         return;                               << 
3002         //    goto mglms50;                   << 
3003     }                                            2453     }
3004     else                                      << 2454     
3005     {                                         << 2455     if(z1>=90){
3006         // binding energy incl. pairing contr << 2456       if(n1<=145){
3007         // function eflmac                    << 2457          (*el) = (*el) + (12.552-0.1436*z1);
3008         (*el) = eflmac(a1, z1, 0, refopt4);   << 2458       }else{
3009                                               << 2459         if(n1>145&&n1<=152){
3010         if (refopt4 > 0)                      << 2460          (*el) = (*el) + ((152.4-1.77*z1)+(-0.972+0.0113*z1)*n1);
3011         {                                     << 
3012             if (refopt4 != 2)                 << 
3013             {                                 << 
3014                 (*el) = (*el) + ec2sub->ecnz[ << 
3015             }                                 << 
3016         }                                     << 
3017                                               << 
3018         if (z1 >= 90)                         << 
3019         {                                     << 
3020             if (n1 <= 145)                    << 
3021             {                                 << 
3022                 (*el) = (*el) + (12.552 - 0.1 << 
3023             }                                 << 
3024             else                              << 
3025             {                                 << 
3026                 if (n1 > 145 && n1 <= 152)    << 
3027                 {                             << 
3028                     (*el) = (*el) + ((152.4 - << 
3029                 }                             << 
3030             }                                 << 
3031         }                                        2461         }
                                                   >> 2462       } 
3032     }                                            2463     }
3033     return;                                   << 2464 
                                                   >> 2465   }
                                                   >> 2466   return;
3034 }                                                2467 }
3035                                                  2468 
3036 G4double G4Abla::spdef(G4int a, G4int z, G4in    2469 G4double G4Abla::spdef(G4int a, G4int z, G4int optxfis)
3037 {                                                2470 {
3038                                                  2471 
3039     // INPUT:  A,Z,OPTXFIS MASS AND CHARGE OF << 2472   // INPUT:  A,Z,OPTXFIS MASS AND CHARGE OF A NUCLEUS,                     
3040     // OPTION FOR FISSILITY                   << 2473   // OPTION FOR FISSILITY                                          
3041     // OUTPUT: SPDEF                          << 2474   // OUTPUT: SPDEF                                                         
3042                                               << 2475 
3043     // ALPHA2 SADDLE POINT DEF. COHEN&SWIATEC << 2476   // ALPHA2 SADDLE POINT DEF. COHEN&SWIATECKI ANN.PHYS. 22 (1963) 406      
3044     // RANGING FROM FISSILITY X=0.30 TO X=1.0 << 2477   // RANGING FROM FISSILITY X=0.30 TO X=1.00 IN STEPS OF 0.02              
3045                                               << 2478 
3046     G4int index = 0;                          << 2479   G4int index = 0;
3047     G4double x = 0.0, v = 0.0, dx = 0.0;      << 2480   G4double x = 0.0, v = 0.0, dx = 0.0;
3048                                               << 2481 
3049     const G4int alpha2Size = 37;              << 2482   const G4int alpha2Size = 37;
3050     // The value 0.0 at alpha2[0] added by PK << 2483   // The value 0.0 at alpha2[0] added by PK.
3051     G4double alpha2[alpha2Size] = { 0.0,      << 2484   G4double alpha2[alpha2Size] = {0.0, 2.5464e0, 2.4944e0, 2.4410e0, 2.3915e0, 2.3482e0,
3052                                     2.1982e0, << 2485          2.3014e0, 2.2479e0, 2.1982e0, 2.1432e0, 2.0807e0, 2.0142e0, 1.9419e0,
3053                                     1.6473e0, << 2486          1.8714e0, 1.8010e0, 1.7272e0, 1.6473e0, 1.5601e0, 1.4526e0, 1.3164e0,
3054                                     0.6360e0, << 2487          1.1391e0, 0.9662e0, 0.8295e0, 0.7231e0, 0.6360e0, 0.5615e0, 0.4953e0,
3055                                     0.1827e0, << 2488          0.4354e0, 0.3799e0, 0.3274e0, 0.2779e0, 0.2298e0, 0.1827e0, 0.1373e0,
                                                   >> 2489          0.0901e0, 0.0430e0, 0.0000e0};
                                                   >> 2490 
                                                   >> 2491   dx = 0.02;
                                                   >> 2492   x  = fissility(a,z,0,0.,0.,optxfis);
                                                   >> 2493 
                                                   >> 2494   v  = (x - 0.3)/dx + 1.0;
                                                   >> 2495   index = idnint(v);
                                                   >> 2496 
                                                   >> 2497   if (index < 1) {
                                                   >> 2498     return(alpha2[1]);
                                                   >> 2499   }
                                                   >> 2500 
                                                   >> 2501   if (index == 36) {                                             
                                                   >> 2502     return(alpha2[36]); 
                                                   >> 2503   }
                                                   >> 2504   else {
                                                   >> 2505     return(alpha2[index] + (alpha2[index+1] - alpha2[index]) / dx * ( x - (0.3e0 + dx*(index-1))));
                                                   >> 2506   }                                                       
3056                                                  2507 
3057     dx = 0.02;                                << 2508   return alpha2[0]; // The algorithm is not supposed to reach this point.
3058     x = fissility(a, z, 0, 0., 0., optxfis);  << 
3059                                               << 
3060     v = (x - 0.3) / dx + 1.0;                 << 
3061     index = idnint(v);                        << 
3062                                               << 
3063     if (index < 1)                            << 
3064     {                                         << 
3065         return (alpha2[1]);                   << 
3066     }                                         << 
3067                                               << 
3068     if (index == 36)                          << 
3069     {                                         << 
3070         return (alpha2[36]);                  << 
3071     }                                         << 
3072     else                                      << 
3073     {                                         << 
3074         return (alpha2[index] + (alpha2[index << 
3075     }                                         << 
3076                                               << 
3077     return alpha2[0]; // The algorithm is not << 
3078 }                                                2509 }
3079                                                  2510 
3080 G4double G4Abla::fissility(G4int a, G4int z,     2511 G4double G4Abla::fissility(G4int a, G4int z, G4int ny, G4double sn, G4double slam, G4int optxfis)
3081 {                                                2512 {
3082     // CALCULATION OF FISSILITY PARAMETER     << 2513   // CALCULATION OF FISSILITY PARAMETER                                 
3083     //                                        << 2514   // 
3084     // INPUT: A,Z INTEGER MASS & CHARGE OF NU << 2515   // INPUT: A,Z INTEGER MASS & CHARGE OF NUCLEUS                        
3085     // OPTXFIS = 0 : MYERS, SWIATECKI         << 2516   // OPTXFIS = 0 : MYERS, SWIATECKI                              
3086     //           1 : DAHLINGER                << 2517   //           1 : DAHLINGER                                     
3087     //           2 : ANDREYEV                 << 2518   //           2 : ANDREYEV                                      
3088                                               << 2519 
3089     G4double aa = 0.0, zz = 0.0, i = 0.0, z2a << 2520   G4double aa = 0.0, zz = 0.0, i = 0.0,z2a,C_S,R,W,G,G1,G2,A_CC;
3090     G4double fissilityResult = 0.0;           << 2521   G4double fissilityResult = 0.0;
3091                                               << 2522 
3092     aa = G4double(a);                         << 2523   aa = G4double(a);
3093     zz = G4double(z);                         << 2524   zz = G4double(z);
3094     i = G4double(a - 2 * z) / aa;             << 2525   i  = G4double(a-2*z) / aa;
3095     z2a = zz * zz / aa - ny * (1115. - 939. + << 2526   z2a= zz*zz/aa-ny*(1115.-939.+sn-slam)/(0.7053*std::pow(a,2./3.));
3096                                               << 2527 
3097     // myers & swiatecki droplet modell       << 2528   // myers & swiatecki droplet modell                        
3098     if (optxfis == 0)                         << 2529   if (optxfis == 0) { //then                                            
3099     { // then                                 << 2530     fissilityResult = std::pow(zz,2) / aa /50.8830e0 / (1.0e0 - 1.7826e0 * std::pow(i,2));
3100         fissilityResult = std::pow(zz, 2) / a << 2531   }
3101     }                                         << 2532 
3102                                               << 2533   if (optxfis == 1) {
3103     if (optxfis == 1)                         << 2534     // dahlinger fit:                                          
3104     {                                         << 2535     fissilityResult = std::pow(zz,2) / aa * std::pow((49.22e0*(1.e0 - 0.3803e0*std::pow(i,2) - 20.489e0*std::pow(i,4))),(-1));
3105         // dahlinger fit:                     << 2536   }
3106         fissilityResult = std::pow(zz, 2) / a << 2537 
3107                           std::pow((49.22e0 * << 2538   if (optxfis == 2) {
3108     }                                         << 2539     // dubna fit:                                              
3109                                               << 2540     fissilityResult = std::pow(zz,2) / aa  /(48.e0*(1.e0 - 17.22e0*std::pow(i,4)));
3110     if (optxfis == 2)                         << 2541   }
3111     {                                         << 2542 
3112         // dubna fit:                         << 2543   if (optxfis == 3) {
3113         fissilityResult = std::pow(zz, 2) / a << 2544 //  Fissiilty is calculated according to FRLDM, see Sierk, PRC 1984.
3114     }                                         << 2545          C_S = 21.13 * (1.0 - 2.3*i*i);
3115                                               << 2546          R = 1.16 * std::pow(aa,1.0/3.0);
3116     if (optxfis == 3)                         << 2547          W = 0.704/R;
3117     {                                         << 2548          G1 = 1.0 - 15.0/8.0*W+21.0/8.0*W*W*W;
3118         //  Fissiilty is calculated according << 2549          G2 = 1.0 + 9.0/2.0*W + 7.0*W*W + 7.0/2.0*W*W*W;
3119         C_S = 21.13 * (1.0 - 2.3 * i * i);    << 2550          G = 1.0 - 5.0*W*W*(G1 - 3.0/4.0*G2*std::exp(-2.0/W));
3120         R = 1.16 * std::pow(aa, 1.0 / 3.0);   << 2551          A_CC = 3.0/5.0 * 1.44 * G / 1.16;
3121         W = 0.704 / R;                        << 2552          fissilityResult = z2a * A_CC/(2.0*C_S);
3122         G1 = 1.0 - 15.0 / 8.0 * W + 21.0 / 8. << 2553   }
3123         G2 = 1.0 + 9.0 / 2.0 * W + 7.0 * W *  << 2554 
3124         G = 1.0 - 5.0 * W * W * (G1 - 3.0 / 4 << 2555   if (fissilityResult > 1.0) {
3125         A_CC = 3.0 / 5.0 * 1.44 * G / 1.16;   << 2556     fissilityResult = 1.0;
3126         fissilityResult = z2a * A_CC / (2.0 * << 2557   }
3127     }                                         << 2558 
3128                                               << 2559   if (fissilityResult < 0.0) {
3129     if (fissilityResult > 1.0)                << 2560     fissilityResult = 0.0;
3130     {                                         << 2561   }
3131         fissilityResult = 1.0;                << 2562 
3132     }                                         << 2563   return fissilityResult;
3133                                               << 2564 }
3134     if (fissilityResult < 0.0)                << 2565 
3135     {                                         << 2566 void G4Abla::evapora(G4double zprf, G4double aprf, G4double *ee_par, G4double jprf_par,G4double *zf_par, G4double *af_par, G4double *mtota_par,G4double *vleva_par, G4double *vxeva_par, G4double *vyeva_par,
3136         fissilityResult = 0.0;                << 2567 G4int *ff_par,G4int *fimf_par, G4double *fzimf, G4double *faimf,G4double *tkeimf_par,G4double *jprfout, G4int *inttype_par, G4int *inum_par,G4double EV_TEMP[200][6],G4int *iev_tab_temp_par, G4int *NbLam0_par)
3137     }                                         << 2568 {
3138                                               << 2569   G4double zf = zprf;
3139     return fissilityResult;                   << 2570   G4double af = aprf;
3140 }                                             << 2571   G4double ee = (*ee_par);
3141                                               << 2572   G4double jprf = dint(jprf_par);
3142 void G4Abla::evapora(G4double zprf,           << 2573   G4double mtota = (*mtota_par);
3143                      G4double aprf,           << 2574   G4double vleva = 0.;
3144                      G4double* ee_par,        << 2575   G4double vxeva = 0.;
3145                      G4double jprf_par,       << 2576   G4double vyeva = 0.;
3146                      G4double* zf_par,        << 2577   G4int ff = (*ff_par);
3147                      G4double* af_par,        << 2578   G4int fimf = (*fimf_par);
3148                      G4double* mtota_par,     << 2579   G4double tkeimf = (*tkeimf_par);
3149                      G4double* vleva_par,     << 2580   G4int inttype = (*inttype_par);
3150                      G4double* vxeva_par,     << 2581   G4int inum = (*inum_par);
3151                      G4double* vyeva_par,     << 2582   G4int NbLam0 = (*NbLam0_par);
3152                      G4int* ff_par,           << 2583 
3153                      G4int* fimf_par,         << 2584   //    533 C                                                                       
3154                      G4double* fzimf,         << 2585   //    534 C     INPUT:                                                            
3155                      G4double* faimf,         << 2586   //    535 C                                                                       
3156                      G4double* tkeimf_par,    << 2587   //    536 C     ZPRF, APRF, EE(EE IS MODIFIED!), JPRF                             
3157                      G4double* jprfout,       << 2588   //    537 C                                                                       
3158                      G4int* inttype_par,      << 2589   //    538 C     PROJECTILE AND TARGET PARAMETERS + CROSS SECTIONS                 
3159                      G4int* inum_par,         << 2590   //    539 C     COMMON /ABRAMAIN/ AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT,CRNUC,       
3160                      G4double EV_TEMP[indexpa << 2591   //    540 C                       R_0,R_P,R_T, IMAX,IRNDM,PI,                     
3161                      G4int* iev_tab_temp_par, << 2592   //    541 C                       BFPRO,SNPRO,SPPRO,SHELL                         
3162                      G4int* NbLam0_par)       << 2593   //    542 C                                                                       
3163 {                                             << 2594   //    543 C     AP,ZP,AT,ZT   - PROJECTILE AND TARGET MASSES                      
3164     G4double zf = zprf;                       << 2595   //    544 C     EAP,BETA      - BEAM ENERGY PER NUCLEON, V/C                      
3165     G4double af = aprf;                       << 2596   //    545 C     BMAXNUC       - MAX. IMPACT PARAMETER FOR NUCL. REAC.             
3166     G4double ee = (*ee_par);                  << 2597   //    546 C     CRTOT,CRNUC   - TOTAL AND NUCLEAR REACTION CROSS SECTION          
3167     G4double jprf = dint(jprf_par);           << 2598   //    547 C     R_0,R_P,R_T,  - RADIUS PARAMETER, PROJECTILE+ TARGET RADII        
3168     G4double mtota = (*mtota_par);            << 2599   //    548 C     IMAX,IRNDM,PI - MAXIMUM NUMBER OF EVENTS, DUMMY, 3.141...         
3169     G4double vleva = 0.;                      << 2600   //    549 C     BFPRO         - FISSION BARRIER OF THE PROJECTILE                 
3170     G4double vxeva = 0.;                      << 2601   //    550 C     SNPRO         - NEUTRON SEPARATION ENERGY OF THE PROJECTILE       
3171     G4double vyeva = 0.;                      << 2602   //    551 C     SPPRO         - PROTON    "           "   "    "   "              
3172     G4int ff = (*ff_par);                     << 2603   //    552 C     SHELL         - GROUND STATE SHELL CORRECTION                     
3173     G4int fimf = (*fimf_par);                 << 2604   //    553 C                                                                       
3174     G4double tkeimf = (*tkeimf_par);          << 2605   //    554 C---------------------------------------------------------------------  
3175     G4int inttype = (*inttype_par);           << 2606   //    555 C     FISSION BARRIERS                                                  
3176     G4int inum = (*inum_par);                 << 2607   //    556 C     COMMON /FB/     EFA                                               
3177     G4int NbLam0 = (*NbLam0_par);             << 2608   //    557 C     EFA    - ARRAY OF FISSION BARRIERS                                
3178                                               << 2609   //    558 C---------------------------------------------------------------------  
3179     //    533 C                               << 2610   //    559 C     OUTPUT:                                                           
3180     //    534 C     INPUT:                    << 2611   //    560 C              ZF, AF, MTOTA, PLEVA, PTEVA, FF, INTTYPE, INUM           
3181     //    535 C                               << 2612   //    561 C                                                                       
3182     //    536 C     ZPRF, APRF, EE(EE IS MODI << 2613   //    562 C     ZF,AF - CHARGE AND MASS OF FINAL FRAGMENT AFTER EVAPORATION       
3183     //    537 C                               << 2614   //    563 C     MTOTA _ NUMBER OF EVAPORATED ALPHAS                               
3184     //    538 C     PROJECTILE AND TARGET PAR << 2615   //    564 C     PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL BY EVAPORATION               
3185     //    539 C     COMMON /ABRAMAIN/         << 2616   //    565 C     INTTYPE - TYPE OF REACTION 0/1 NUCLEAR OR ELECTROMAGNETIC         
3186     //    AP,ZP,AT,ZT,EAP,BETA,BMAXNUC,CRTOT, << 2617   //    566 C     FF      - 0/1 NO FISSION / FISSION EVENT                          
3187     //    IMAX,IRNDM,PI, 541  C               << 2618   //    567 C     INUM    - EVENTNUMBER                                             
3188     //    542 C                               << 2619   //    568 C   ____________________________________________________________________
3189     //    543 C     AP,ZP,AT,ZT   - PROJECTIL << 2620   //    569 C  /                                                                    
3190     //    544 C     EAP,BETA      - BEAM ENER << 2621   //    570 C  /  CALCUL DE LA MASSE ET CHARGE FINALES D'UNE CHAINE D'EVAPORATION   
3191     //    545 C     BMAXNUC       - MAX. IMPA << 2622   //    571 C  /                                                                    
3192     //    546 C     CRTOT,CRNUC   - TOTAL AND << 2623   //    572 C  /  PROCEDURE FOR CALCULATING THE FINAL MASS AND CHARGE VALUES OF A   
3193     //    547 C     R_0,R_P,R_T,  - RADIUS PA << 2624   //    573 C  /  SPECIFIC EVAPORATION CHAIN, STARTING POINT DEFINED BY (APRF, ZPRF,
3194     //    548 C     IMAX,IRNDM,PI - MAXIMUM N << 2625   //    574 C  /  EE)                                                               
3195     //    549 C     BFPRO         - FISSION B << 2626   //    575 C  /  On ajoute les 3 composantes de l'impulsion (PXEVA,PYEVA,PLEVA)
3196     //    550 C     SNPRO         - NEUTRON S << 2627   //    576 C  /    (actuellement PTEVA n'est pas correct; mauvaise norme...)                                               
3197     //    PROJECTILE 551  C     SPPRO         << 2628   //    577 C  /____________________________________________________________________
3198     //    552 C     SHELL         - GROUND ST << 2629   //    578 C                                                                       
3199     //    553 C                               << 2630   //    612 C                                                                       
3200     //    554                                 << 2631   //    613 C-----------------------------------------------------------------------
3201     //    C---------------------------------- << 2632   //    614 C     IRNDM             DUMMY ARGUMENT FOR RANDOM-NUMBER FUNCTION       
3202     //    555 C     FISSION BARRIERS          << 2633   //    615 C     SORTIE   LOCAL    HELP VARIABLE TO END THE EVAPORATION CHAIN      
3203     //    556 C     COMMON /FB/     EFA       << 2634   //    616 C     ZF                NUCLEAR CHARGE OF THE FRAGMENT                  
3204     //    557 C     EFA    - ARRAY OF FISSION << 2635   //    617 C     ZPRF              NUCLEAR CHARGE OF THE PREFRAGMENT               
3205     //    558                                 << 2636   //    618 C     AF                MASS NUMBER OF THE FRAGMENT                     
3206     //    C---------------------------------- << 2637   //    619 C     APRF              MASS NUMBER OF THE PREFRAGMENT                  
3207     //    559 C     OUTPUT:                   << 2638   //    620 C     EPSILN            ENERGY BURNED IN EACH EVAPORATION STEP          
3208     //    560 C              ZF, AF, MTOTA, P << 2639   //    621 C     MALPHA   LOCAL    MASS CONTRIBUTION TO MTOTA IN EACH EVAPORATION  
3209     //    561 C                               << 2640   //    622 C                        STEP                                           
3210     //    562 C     ZF,AF - CHARGE AND MASS O << 2641   //    623 C     EE                EXCITATION ENERGY (VARIABLE)                    
3211     //    EVAPORATION 563 C     MTOTA _ NUMBE << 2642   //    624 C     PROBP             PROTON EMISSION PROBABILITY                     
3212     //    PLEVA,PXEVA,PYEVA - MOMENTUM RECOIL << 2643   //    625 C     PROBN             NEUTRON EMISSION PROBABILITY                    
3213     //    TYPE OF REACTION 0/1 NUCLEAR OR ELE << 2644   //    626 C     PROBA             ALPHA-PARTICLE EMISSION PROBABILITY             
3214     //    NO FISSION / FISSION EVENT 567  C   << 2645   //    627 C     PTOTL             TOTAL EMISSION PROBABILITY                      
3215     //    ___________________________________ << 2646   //    628 C     E                 LOWEST PARTICLE-THRESHOLD ENERGY                
3216     //    C  / 570  C  /  CALCUL DE LA MASSE  << 2647   //    629 C     SN                NEUTRON SEPARATION ENERGY                       
3217     //    D'EVAPORATION 571 C  /              << 2648   //    630 C     SBP               PROTON SEPARATION ENERGY PLUS EFFECTIVE COULOMB 
3218     //    572 C  /  PROCEDURE FOR CALCULATING << 2649   //    631 C                        BARRIER                                        
3219     //    OF A                                << 2650   //    632 C     SBA               ALPHA-PARTICLE SEPARATION ENERGY PLUS EFFECTIVE 
3220     //    573 C  /  SPECIFIC EVAPORATION CHAI << 2651   //    633 C                        COULOMB BARRIER                                
3221     //    (APRF, ZPRF, 574  C  /  EE) 575 C   << 2652   //    634 C     BP                EFFECTIVE PROTON COULOMB BARRIER                
3222     //    composantes de l'impulsion (PXEVA,P << 2653   //    635 C     BA                EFFECTIVE ALPHA COULOMB BARRIER                 
3223     //    576 C  /    (actuellement PTEVA n'e << 2654   //    636 C     MTOTA             TOTAL MASS OF THE EVAPORATED ALPHA PARTICLES    
3224     //    norme...) 577 C                     << 2655   //    637 C     X                 UNIFORM RANDOM NUMBER FOR NUCLEAR CHARGE        
3225     //    /__________________________________ << 2656   //    638 C     AMOINS   LOCAL    MASS NUMBER OF EVAPORATED PARTICLE              
3226     //    578 C                               << 2657   //    639 C     ZMOINS   LOCAL    NUCLEAR CHARGE OF EVAPORATED PARTICLE           
3227     //    612 C                               << 2658   //    640 C     ECP               KINETIC ENERGY OF PROTON WITHOUT COULOMB        
3228     //    613                                 << 2659   //    641 C                        REPULSION                                      
3229     //    C---------------------------------- << 2660   //    642 C     ECN               KINETIC ENERGY OF NEUTRON                       
3230     //    614 C     IRNDM             DUMMY A << 2661   //    643 C     ECA               KINETIC ENERGY OF ALPHA PARTICLE WITHOUT COULOMB
3231     //    FUNCTION 615  C     SORTIE   LOCAL  << 2662   //    644 C                        REPULSION                                      
3232     //    EVAPORATION CHAIN 616 C     ZF      << 2663   //    645 C     PLEVA             TRANSVERSAL RECOIL MOMENTUM OF EVAPORATION      
3233     //    FRAGMENT 617  C     ZPRF            << 2664   //    646 C     PTEVA             LONGITUDINAL RECOIL MOMENTUM OF EVAPORATION     
3234     //    PREFRAGMENT 618 C     AF            << 2665   //    647 C     FF                FISSION FLAG                                    
3235     //    C     APRF              MASS NUMBER << 2666   //    648 C     INTTYPE           INTERACTION TYPE FLAG                           
3236     //    620 C     EPSILN            ENERGY  << 2667   //    649 C     RNDX              RECOIL MOMENTUM IN X-DIRECTION IN A SINGLE STEP 
3237     //    621 C     MALPHA   LOCAL    MASS CO << 2668   //    650 C     RNDY              RECOIL MOMENTUM IN Y-DIRECTION IN A SINGLE STEP 
3238     //    EVAPORATION 622 C                   << 2669   //    651 C     RNDZ              RECOIL MOMENTUM IN Z-DIRECTION IN A SINGLE STEP 
3239     //    EXCITATION ENERGY (VARIABLE) 624  C << 2670   //    652 C     RNDN              NORMALIZATION OF RECOIL MOMENTUM FOR EACH STEP  
3240     //    EMISSION PROBABILITY 625  C     PRO << 2671   //    653 C-----------------------------------------------------------------------
3241     //    PROBABILITY 626 C     PROBA         << 2672   //    654 C                                                                       
3242     //    PROBABILITY 627 C     PTOTL         << 2673   //                        
3243     //    C     E                 LOWEST PART << 2674   G4double epsiln = 0.0, probp = 0.0, probd = 0.0, probt = 0.0, probn = 0.0, probhe = 0.0, proba = 0.0, probg = 0.0, probimf=0.0, problamb0 = 0.0, ptotl = 0.0, e = 0.0, tcn = 0.0;  
3244     //    NEUTRON SEPARATION ENERGY 630 C     << 2675   G4double sn = 0.0, sbp = 0.0, sbd = 0.0, sbt = 0.0, sbhe = 0.0, sba = 0.0, x = 0.0, amoins = 0.0, zmoins = 0.0,sp = 0.0, sd = 0.0, st = 0.0, she = 0.0, sa = 0.0, slamb0 = 0.0;
3245     //    SEPARATION ENERGY PLUS EFFECTIVE CO << 2676   G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, ect = 0.0,eche = 0.0,eca = 0.0, ecg = 0.0, eclamb0 = 0.0, bp = 0.0, bd = 0.0, bt = 0.0, bhe = 0.0, ba = 0.0;
3246     //    ALPHA-PARTICLE SEPARATION ENERGY PL << 2677   G4double zimf= 0.0,aimf= 0.0,bimf= 0.0,sbimf= 0.0,timf= 0.0;
3247     //    BARRIER 634 C     BP                << 2678   G4int itest = 0, sortie=0;
3248     //    635 C     BA                EFFECTI << 2679   G4double probf = 0.0;
3249     //    636 C     MTOTA             TOTAL M << 2680   G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0;
3250     //    PARTICLES 637 C     X               << 2681   G4double rnd = 0.0;
3251     //    NUCLEAR CHARGE                      << 2682   G4double ef = 0.0;
3252     //    638 C     AMOINS   LOCAL    MASS NU << 2683   G4double ts1 = 0.0;
3253     //    639 C     ZMOINS   LOCAL    NUCLEAR << 2684   G4int fgamma = 0, gammadecay = 0, flamb0decay=0;
3254     //    640 C     ECP               KINETIC << 2685   G4double pc = 0.0, malpha = 0.0;
3255     //    641 C                        REPULS << 2686   G4double jprfn=0.0, jprfp=0.0, jprfd=0.0, jprft=0.0, jprfhe=0.0, jprfa=0.0, jprflamb0 = 0.0;
3256     //    642 C     ECN               KINETIC << 2687   G4double tsum = 0.0;
3257     //    643 C     ECA               KINETIC << 2688   G4int twon;
3258     //    COULOMB 644 C                       << 2689 
3259     //    TRANSVERSAL RECOIL MOMENTUM OF EVAP << 2690   const G4double c = 29.9792458;
3260     //    RECOIL MOMENTUM OF EVAPORATION 647  << 2691   const G4double mu = 931.494;
3261     //    FLAG 648  C     INTTYPE           I << 2692   const G4double mu2 = 931.494*931.494;
3262     //    649 C     RNDX              RECOIL  << 2693 
3263     //    SINGLE STEP 650 C     RNDY          << 2694   G4double pleva = 0.0;
3264     //    IN A SINGLE STEP 651  C     RNDZ    << 2695   G4double pxeva = 0.0;
3265     //    Z-DIRECTION IN A SINGLE STEP        << 2696   G4double pyeva = 0.0;
3266     //    652 C     RNDN              NORMALI << 2697   G4int IEV_TAB_TEMP=0;
3267     //    EACH STEP 653                       << 2698 
3268     //    C---------------------------------- << 2699   for(G4int I1=0;I1<200;I1++)
3269     //    654 C                               << 2700   for(G4int I2=0;I2<6;I2++)
3270     //                                        << 2701   EV_TEMP[I1][I2] = 0.0;
3271     G4double epsiln = 0.0, probp = 0.0, probd << 2702 //
3272              probimf = 0.0, problamb0 = 0.0,  << 2703   ff = 0;
3273     G4double sn = 0.0, sbp = 0.0, sbd = 0.0,  << 2704   itest = 0;
3274              sp = 0.0, sd = 0.0, st = 0.0, sh << 2705 //
3275     G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, << 2706   evapora10:
3276              bd = 0.0, bt = 0.0, bhe = 0.0, b << 2707   //
3277     G4double zimf = 0.0, aimf = 0.0, bimf = 0 << 2708   // calculation of the probabilities for the different decay channels     
3278     G4int itest = 0, sortie = 0;              << 2709   // plus separation energies and kinetic energies of the particles  
3279     G4double probf = 0.0;                     << 2710   //
3280     G4double ctet1 = 0.0, stet1 = 0.0, phi1 = << 2711   if(ee<0.|| zf<3.)goto evapora100;
3281     G4double rnd = 0.0;                       << 2712   direct(zf,af,ee,jprf,&probp,&probd,&probt,&probn,&probhe,&proba,&probg,&probimf,&probf,&problamb0,&ptotl,
3282     G4double ef = 0.0;                        << 2713    &sn,&sbp,&sbd,&sbt,&sbhe,&sba,&slamb0,
3283     G4double ts1 = 0.0;                       << 2714          &ecn,&ecp,&ecd,&ect,&eche,&eca,&ecg,&eclamb0,
3284     G4int fgamma = 0, gammadecay = 0, flamb0d << 2715          &bp,&bd,&bt,&bhe,&ba,&sp,&sd,&st,&she,&sa,&ef,&ts1,inttype,inum,itest,&sortie,&tcn,
3285     G4double pc = 0.0, malpha = 0.0;          << 2716          &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa, &jprflamb0, &tsum, NbLam0);
3286     G4double jprfn = 0.0, jprfp = 0.0, jprfd  << 2717 //
3287     G4double tsum = 0.0;                      << 2718 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED
3288     G4int twon;                               << 2719 //
3289                                               << 2720   if(ptotl==0.0) goto evapora100;
3290     const G4double c = 29.9792458;            << 
3291     const G4double mu = 931.494;              << 
3292     const G4double mu2 = 931.494 * 931.494;   << 
3293                                               << 
3294     G4double pleva = 0.0;                     << 
3295     G4double pxeva = 0.0;                     << 
3296     G4double pyeva = 0.0;                     << 
3297     G4int IEV_TAB_TEMP = 0;                   << 
3298                                               << 
3299     for (G4int I1 = 0; I1 < indexpart; I1++)  << 
3300         for (G4int I2 = 0; I2 < 6; I2++)      << 
3301             EV_TEMP[I1][I2] = 0.0;            << 
3302     //                                        << 
3303     ff = 0;                                   << 
3304     itest = 0;                                << 
3305     //                                        << 
3306 evapora10:                                    << 
3307     //                                        << 
3308     // calculation of the probabilities for t << 
3309     // plus separation energies and kinetic e << 
3310     //                                        << 
3311     if (ee < 0. || zf < 3.)                   << 
3312         goto evapora100;                      << 
3313     direct(zf,                                << 
3314            af,                                << 
3315            ee,                                << 
3316            jprf,                              << 
3317            &probp,                            << 
3318            &probd,                            << 
3319            &probt,                            << 
3320            &probn,                            << 
3321            &probhe,                           << 
3322            &proba,                            << 
3323            &probg,                            << 
3324            &probimf,                          << 
3325            &probf,                            << 
3326            &problamb0,                        << 
3327            &ptotl,                            << 
3328            &sn,                               << 
3329            &sbp,                              << 
3330            &sbd,                              << 
3331            &sbt,                              << 
3332            &sbhe,                             << 
3333            &sba,                              << 
3334            &slamb0,                           << 
3335            &ecn,                              << 
3336            &ecp,                              << 
3337            &ecd,                              << 
3338            &ect,                              << 
3339            &eche,                             << 
3340            &eca,                              << 
3341            &ecg,                              << 
3342            &eclamb0,                          << 
3343            &bp,                               << 
3344            &bd,                               << 
3345            &bt,                               << 
3346            &bhe,                              << 
3347            &ba,                               << 
3348            &sp,                               << 
3349            &sd,                               << 
3350            &st,                               << 
3351            &she,                              << 
3352            &sa,                               << 
3353            &ef,                               << 
3354            &ts1,                              << 
3355            inttype,                           << 
3356            inum,                              << 
3357            itest,                             << 
3358            &sortie,                           << 
3359            &tcn,                              << 
3360            &jprfn,                            << 
3361            &jprfp,                            << 
3362            &jprfd,                            << 
3363            &jprft,                            << 
3364            &jprfhe,                           << 
3365            &jprfa,                            << 
3366            &jprflamb0,                        << 
3367            &tsum,                             << 
3368            NbLam0);                           << 
3369     //                                        << 
3370     // HERE THE FINAL STEPS OF THE EVAPORATIO << 
3371     //                                        << 
3372     if (ptotl == 0.0)                         << 
3373         goto evapora100;                      << 
3374                                               << 
3375     e = dmin1(sba, sbhe, dmin1(sbt, sbhe, dmi << 
3376                                               << 
3377     if (e > 1e30)                             << 
3378         std::cout << "ERROR AT THE EXIT OF EV << 
3379                                               << 
3380     if (sortie == 1)                          << 
3381     {                                         << 
3382         if (probn != 0.0)                     << 
3383         {                                     << 
3384             amoins = 1.0;                     << 
3385             zmoins = 0.0;                     << 
3386             epsiln = sn + ecn;                << 
3387             pc = std::sqrt(std::pow((1.0 + (e << 
3388             malpha = 0.0;                     << 
3389             fgamma = 0;                       << 
3390             fimf = 0;                         << 
3391             flamb0decay = 0;                  << 
3392             gammadecay = 0;                   << 
3393         }                                     << 
3394         else if (probp != 0.0)                << 
3395         {                                     << 
3396             amoins = 1.0;                     << 
3397             zmoins = 1.0;                     << 
3398             epsiln = sp + ecp;                << 
3399             pc = std::sqrt(std::pow((1.0 + ec << 
3400             malpha = 0.0;                     << 
3401             fgamma = 0;                       << 
3402             fimf = 0;                         << 
3403             flamb0decay = 0;                  << 
3404             gammadecay = 0;                   << 
3405         }                                     << 
3406         else if (probd != 0.0)                << 
3407         {                                     << 
3408             amoins = 2.0;                     << 
3409             zmoins = 1.0;                     << 
3410             epsiln = sd + ecd;                << 
3411             pc = std::sqrt(std::pow((1.0 + ec << 
3412             malpha = 0.0;                     << 
3413             fgamma = 0;                       << 
3414             fimf = 0;                         << 
3415             flamb0decay = 0;                  << 
3416             gammadecay = 0;                   << 
3417         }                                     << 
3418         else if (probt != 0.0)                << 
3419         {                                     << 
3420             amoins = 3.0;                     << 
3421             zmoins = 1.0;                     << 
3422             epsiln = st + ect;                << 
3423             pc = std::sqrt(std::pow((1.0 + ec << 
3424             malpha = 0.0;                     << 
3425             fgamma = 0;                       << 
3426             fimf = 0;                         << 
3427             flamb0decay = 0;                  << 
3428             gammadecay = 0;                   << 
3429         }                                     << 
3430         else if (probhe != 0.0)               << 
3431         {                                     << 
3432             amoins = 3.0;                     << 
3433             zmoins = 2.0;                     << 
3434             epsiln = she + eche;              << 
3435             pc = std::sqrt(std::pow((1.0 + ec << 
3436             malpha = 0.0;                     << 
3437             fgamma = 0;                       << 
3438             fimf = 0;                         << 
3439             flamb0decay = 0;                  << 
3440             gammadecay = 0;                   << 
3441         }                                     << 
3442         else                                  << 
3443         {                                     << 
3444             if (proba != 0.0)                 << 
3445             {                                 << 
3446                 amoins = 4.0;                 << 
3447                 zmoins = 2.0;                 << 
3448                 epsiln = sa + eca;            << 
3449                 pc = std::sqrt(std::pow((1.0  << 
3450                 malpha = 4.0;                 << 
3451                 fgamma = 0;                   << 
3452                 fimf = 0;                     << 
3453                 flamb0decay = 0;              << 
3454                 gammadecay = 0;               << 
3455             }                                 << 
3456         }                                     << 
3457         goto direct99;                        << 
3458     }                                         << 
3459                                                  2721 
3460     // here the normal evaporation cascade st << 2722    e = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd)));
3461                                                  2723 
3462     // random number for the evaporation      << 2724   if(e>1e30)std::cout << "ERROR AT THE EXIT OF EVAPORA,E>1.D30,AF="<< af << " ZF=" << zf << std::endl;
3463     x = G4AblaRandom::flat() * ptotl;         << 
3464                                                  2725 
3465     itest = 0;                                << 2726   if(sortie==1){
3466     if (x < proba)                            << 2727    if (probn!=0.0) {
3467     {                                         << 2728     amoins = 1.0;
3468         // alpha evaporation                  << 2729     zmoins = 0.0;
3469         amoins = 4.0;                         << 2730     epsiln = sn + ecn;
3470         zmoins = 2.0;                         << 2731     pc = std::sqrt(std::pow((1.0 + (ecn)/9.3956e2),2.) - 1.0) * 9.3956e2;
3471         epsiln = sa + eca;                    << 2732     malpha = 0.0;
3472         pc = std::sqrt(std::pow((1.0 + eca /  << 2733     fgamma = 0;
3473         malpha = 4.0;                         << 2734     fimf = 0;
3474         fgamma = 0;                           << 2735     flamb0decay=0;
3475         fimf = 0;                             << 2736     gammadecay = 0;
3476         ff = 0;                               << 2737    }
3477         flamb0decay = 0;                      << 2738    else if(probp!=0.0){
3478         gammadecay = 0;                       << 2739     amoins = 1.0;
3479         jprf = jprfa;                         << 2740     zmoins = 1.0;
3480     }                                         << 2741     epsiln = sp + ecp;
3481     else if (x < proba + probhe)              << 2742     pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2.) - 1.0) * 9.3827e2;
3482     {                                         << 2743     malpha = 0.0;
3483         // He3 evaporation                    << 2744     fgamma = 0;
3484         amoins = 3.0;                         << 2745     fimf = 0;
3485         zmoins = 2.0;                         << 2746     flamb0decay=0;
3486         epsiln = she + eche;                  << 2747     gammadecay = 0;
3487         pc = std::sqrt(std::pow((1.0 + eche / << 2748    }
3488         malpha = 0.0;                         << 2749    else if(probd!=0.0){
3489         fgamma = 0;                           << 2750     amoins = 2.0;
3490         fimf = 0;                             << 2751     zmoins = 1.0;
3491         ff = 0;                               << 2752     epsiln = sd + ecd;
3492         flamb0decay = 0;                      << 2753     pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3;
3493         gammadecay = 0;                       << 2754     malpha = 0.0;
3494         jprf = jprfhe;                        << 2755     fgamma = 0;
3495     }                                         << 2756     fimf = 0;
3496     else if (x < proba + probhe + probt)      << 2757     flamb0decay=0;
3497     {                                         << 2758     gammadecay = 0;
3498         // triton evaporation                 << 2759    }
3499         amoins = 3.0;                         << 2760    else if(probt!=0.0){
3500         zmoins = 1.0;                         << 2761     amoins = 3.0;
3501         epsiln = st + ect;                    << 2762     zmoins = 1.0;
3502         pc = std::sqrt(std::pow((1.0 + ect /  << 2763     epsiln = st + ect;
3503         malpha = 0.0;                         << 2764     pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3;
3504         fgamma = 0;                           << 2765     malpha = 0.0;
3505         fimf = 0;                             << 2766     fgamma = 0;
3506         ff = 0;                               << 2767     fimf = 0;
3507         flamb0decay = 0;                      << 2768     flamb0decay=0;
3508         gammadecay = 0;                       << 2769     gammadecay = 0;
3509         jprf = jprft;                         << 2770    }
3510     }                                         << 2771    else if(probhe!=0.0){
3511     else if (x < proba + probhe + probt + pro << 2772     amoins = 3.0;
3512     {                                         << 2773     zmoins = 2.0;
3513         // deuteron evaporation               << 2774     epsiln = she + eche;
3514         amoins = 2.0;                         << 2775     pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3;
3515         zmoins = 1.0;                         << 2776     malpha = 0.0;
3516         epsiln = sd + ecd;                    << 2777     fgamma = 0;
3517         pc = std::sqrt(std::pow((1.0 + ecd /  << 2778     fimf = 0;
3518         malpha = 0.0;                         << 2779     flamb0decay=0;
3519         fgamma = 0;                           << 2780     gammadecay = 0;
3520         fimf = 0;                             << 2781    }
3521         ff = 0;                               << 2782    else{ if(proba!=0.0){
3522         flamb0decay = 0;                      << 2783     amoins = 4.0;
3523         gammadecay = 0;                       << 2784     zmoins = 2.0;
3524         jprf = jprfd;                         << 2785     epsiln = sa + eca;
3525     }                                         << 2786     pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3;
3526     else if (x < proba + probhe + probt + pro << 2787     malpha = 4.0;
3527     {                                         << 2788     fgamma = 0;
3528         // proton evaporation                 << 2789     fimf = 0;
3529         amoins = 1.0;                         << 2790     flamb0decay=0;
3530         zmoins = 1.0;                         << 2791     gammadecay = 0;
3531         epsiln = sp + ecp;                    << 
3532         pc = std::sqrt(std::pow((1.0 + ecp /  << 
3533         malpha = 0.0;                         << 
3534         fgamma = 0;                           << 
3535         fimf = 0;                             << 
3536         ff = 0;                               << 
3537         flamb0decay = 0;                      << 
3538         gammadecay = 0;                       << 
3539         jprf = jprfp;                         << 
3540     }                                         << 
3541     else if (x < proba + probhe + probt + pro << 
3542     {                                         << 
3543         // neutron evaporation                << 
3544         amoins = 1.0;                         << 
3545         zmoins = 0.0;                         << 
3546         epsiln = sn + ecn;                    << 
3547         pc = std::sqrt(std::pow((1.0 + (ecn)  << 
3548         malpha = 0.0;                         << 
3549         fgamma = 0;                           << 
3550         fimf = 0;                             << 
3551         ff = 0;                               << 
3552         flamb0decay = 0;                      << 
3553         gammadecay = 0;                       << 
3554         jprf = jprfn;                         << 
3555     }                                         << 
3556     else if (x < proba + probhe + probt + pro << 
3557     {                                         << 
3558         // lambda0 evaporation                << 
3559         amoins = 1.0;                         << 
3560         zmoins = 0.0;                         << 
3561         epsiln = slamb0 + eclamb0;            << 
3562         pc = std::sqrt(std::pow((1.0 + (eclam << 
3563         malpha = 0.0;                         << 
3564         fgamma = 0;                           << 
3565         fimf = 0;                             << 
3566         ff = 0;                               << 
3567         flamb0decay = 1;                      << 
3568         opt->nblan0 = opt->nblan0 - 1;        << 
3569         NbLam0 = NbLam0 - 1;                  << 
3570         gammadecay = 0;                       << 
3571         jprf = jprflamb0;                     << 
3572     }                                         << 
3573     else if (x < proba + probhe + probt + pro << 
3574     {                                         << 
3575         // gamma evaporation                  << 
3576         amoins = 0.0;                         << 
3577         zmoins = 0.0;                         << 
3578         epsiln = ecg;                         << 
3579         pc = ecg;                             << 
3580         malpha = 0.0;                         << 
3581         flamb0decay = 0;                      << 
3582         gammadecay = 1;                       << 
3583         // Next IF command is to shorten the  << 
3584         // only possible channel              << 
3585         if (probp == 0.0 && probn == 0.0 && p << 
3586             problamb0 == 0.0 && probimf == 0. << 
3587             fgamma = 1;                       << 
3588         fimf = 0;                             << 
3589         ff = 0;                               << 
3590     }                                         << 
3591     else if (x < proba + probhe + probt + pro << 
3592     {                                         << 
3593         // imf evaporation                    << 
3594         // AIMF and ZIMF obtained from comple << 
3595         // possible Gamma(IMF) and then rando << 
3596                                               << 
3597         G4int iloop = 0;                      << 
3598     dir1973:                                  << 
3599         imf(af, zf, tcn, ee, &zimf, &aimf, &b << 
3600         iloop++;                              << 
3601         if (iloop > 100)                      << 
3602             std::cout << "Problem in EVAPORA: << 
3603         if (zimf >= (zf - 2.0))               << 
3604             goto dir1973;                     << 
3605         if (zimf > zf / 2.0)                  << 
3606         {                                     << 
3607             zimf = zf - zimf;                 << 
3608             aimf = af - aimf;                 << 
3609         }                                     << 
3610         // These cases should in principle ne << 
3611         if (zimf == 0.0 || aimf == 0.0 || sbi << 
3612             std::cout << "warning: Look in EV << 
3613                                               << 
3614         // I sample the total kinetic energy  << 
3615         // from the distribution determined w << 
3616         // TKEIMF is the kinetic energy in th << 
3617                                               << 
3618         G4int ii = 0;                         << 
3619     dir1235:                                  << 
3620         tkeimf = fmaxhaz(timf);               << 
3621         ii++;                                 << 
3622         if (ii > 100)                         << 
3623         {                                     << 
3624             tkeimf = min(2.0 * timf, ee - sbi << 
3625             goto dir1000;                     << 
3626         }                                     << 
3627         if (tkeimf <= 0.0)                    << 
3628             goto dir1235;                     << 
3629         if (tkeimf > (ee - sbimf) && timf > 0 << 
3630             goto dir1235;                     << 
3631     dir1000:                                  << 
3632         tkeimf = tkeimf + bimf;               << 
3633                                               << 
3634         amoins = aimf;                        << 
3635         zmoins = zimf;                        << 
3636         epsiln = (sbimf - bimf) + tkeimf;     << 
3637         pc = 0.0;                             << 
3638         malpha = 0.0;                         << 
3639         fgamma = 0;                           << 
3640         fimf = 1;                             << 
3641         ff = 0;                               << 
3642         flamb0decay = 0;                      << 
3643         gammadecay = 0;                       << 
3644     }                                            2792     }
3645     else                                      << 2793    }
3646     {                                         << 2794   goto direct99;
3647         // fission                            << 2795   }
3648         // in case of fission-events the frag << 2796 
3649         // before fission occurs with excitat << 2797   // here the normal evaporation cascade starts                            
3650         // fission fragment mass distribution << 2798 
3651                                               << 2799   // random number for the evaporation
3652         amoins = 0.0;                         << 2800   x = G4AblaRandom::flat() * ptotl;
3653         zmoins = 0.0;                         << 2801 
3654         epsiln = ef;                          << 2802   itest = 0;
3655         //                                    << 2803   if (x < proba) {
3656         malpha = 0.0;                         << 2804     // alpha evaporation                                                     
3657         pc = 0.0;                             << 2805     amoins = 4.0;
3658         ff = 1;                               << 2806     zmoins = 2.0;
3659         fimf = 0;                             << 2807     epsiln = sa + eca;
3660         fgamma = 0;                           << 2808     pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3;
3661         flamb0decay = 0;                      << 2809     malpha = 4.0;
3662         gammadecay = 0;                       << 2810     fgamma = 0;
3663     }                                         << 2811     fimf = 0;
3664     //                                        << 2812     ff = 0;
3665 direct99:                                     << 2813     flamb0decay=0;
3666     if (ee <= 0.01)                           << 2814     gammadecay = 0;
3667         ee = 0.01;                            << 2815     jprf=jprfa;
3668     // Davide Mancusi (DM) - 2010             << 2816   }
3669     if (gammadecay == 1 && ee < (epsiln + 0.0 << 2817   else if (x < proba+probhe) {
3670     {                                         << 2818     // He3 evaporation                                                    
                                                   >> 2819     amoins = 3.0;
                                                   >> 2820     zmoins = 2.0;
                                                   >> 2821     epsiln = she + eche;
                                                   >> 2822     pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3;
                                                   >> 2823     malpha = 0.0;
                                                   >> 2824     fgamma = 0;
                                                   >> 2825     fimf = 0;
                                                   >> 2826     ff = 0;
                                                   >> 2827     flamb0decay=0;
                                                   >> 2828     gammadecay = 0;
                                                   >> 2829     jprf=jprfhe;
                                                   >> 2830   }
                                                   >> 2831   else if (x < proba+probhe+probt) {
                                                   >> 2832     // triton evaporation                                                    
                                                   >> 2833     amoins = 3.0;
                                                   >> 2834     zmoins = 1.0;
                                                   >> 2835     epsiln = st + ect;
                                                   >> 2836     pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3;
                                                   >> 2837     malpha = 0.0;
                                                   >> 2838     fgamma = 0;
                                                   >> 2839     fimf = 0;
                                                   >> 2840     ff = 0;
                                                   >> 2841     flamb0decay=0;
                                                   >> 2842     gammadecay = 0;
                                                   >> 2843     jprf=jprft;
                                                   >> 2844   }
                                                   >> 2845   else if (x < proba+probhe+probt+probd) {
                                                   >> 2846     // deuteron evaporation                                                    
                                                   >> 2847     amoins = 2.0;
                                                   >> 2848     zmoins = 1.0;
                                                   >> 2849     epsiln = sd + ecd;
                                                   >> 2850     pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3;
                                                   >> 2851     malpha = 0.0;
                                                   >> 2852     fgamma = 0;
                                                   >> 2853     fimf = 0;
                                                   >> 2854     ff = 0;
                                                   >> 2855     flamb0decay=0;
                                                   >> 2856     gammadecay = 0;
                                                   >> 2857     jprf=jprfd;
                                                   >> 2858   }
                                                   >> 2859   else if (x < proba+probhe+probt+probd+probp) {
                                                   >> 2860     // proton evaporation                                                    
                                                   >> 2861     amoins = 1.0;
                                                   >> 2862     zmoins = 1.0;
                                                   >> 2863     epsiln = sp + ecp;
                                                   >> 2864     pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2) - 1.0) * 9.3827e2;
                                                   >> 2865     malpha = 0.0;
                                                   >> 2866     fgamma = 0;
                                                   >> 2867     fimf = 0;
                                                   >> 2868     ff = 0;
                                                   >> 2869     flamb0decay=0;
                                                   >> 2870     gammadecay = 0;
                                                   >> 2871     jprf=jprfp;
                                                   >> 2872   }
                                                   >> 2873   else if (x < proba+probhe+probt+probd+probp+probn) {
                                                   >> 2874     // neutron evaporation                                                   
                                                   >> 2875     amoins = 1.0;
                                                   >> 2876     zmoins = 0.0;
                                                   >> 2877     epsiln = sn + ecn;
                                                   >> 2878     pc = std::sqrt(std::pow((1.0 + (ecn)/9.3956e2),2.) - 1.0) * 9.3956e2;
                                                   >> 2879     malpha = 0.0;
                                                   >> 2880     fgamma = 0;
                                                   >> 2881     fimf = 0;
                                                   >> 2882     ff = 0;
                                                   >> 2883     flamb0decay=0;
                                                   >> 2884     gammadecay = 0;
                                                   >> 2885     jprf=jprfn;
                                                   >> 2886   }
                                                   >> 2887   else if (x < proba+probhe+probt+probd+probp+probn+problamb0) {
                                                   >> 2888     // lambda0 evaporation  
                                                   >> 2889     amoins = 1.0;
                                                   >> 2890     zmoins = 0.0;
                                                   >> 2891     epsiln = slamb0 + eclamb0;
                                                   >> 2892     pc = std::sqrt(std::pow((1.0 + (eclamb0)/11.1568e2),2.) - 1.0) * 11.1568e2;
                                                   >> 2893     malpha = 0.0;
                                                   >> 2894     fgamma = 0;
                                                   >> 2895     fimf = 0;
                                                   >> 2896     ff = 0;
                                                   >> 2897     flamb0decay = 1;
                                                   >> 2898     opt->nblan0 = opt->nblan0 -1;
                                                   >> 2899     NbLam0 = NbLam0 -1;
                                                   >> 2900     gammadecay = 0;
                                                   >> 2901     jprf=jprflamb0;
                                                   >> 2902   }
                                                   >> 2903   else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg) {
                                                   >> 2904     // gamma evaporation                                                    
                                                   >> 2905     amoins = 0.0;
                                                   >> 2906     zmoins = 0.0;
                                                   >> 2907     epsiln = ecg;
                                                   >> 2908     pc = ecg;
                                                   >> 2909     malpha = 0.0;
                                                   >> 2910     flamb0decay = 0;
                                                   >> 2911     gammadecay = 1;
                                                   >> 2912     //Next IF command is to shorten the calculations when gamma-emission is the only
                                                   >> 2913     //possible channel
                                                   >> 2914     if(probp==0.0 && probn==0.0 && probd==0.0 && probt==0.0 && proba==0.0 && probhe==0.0 && problamb0==0.0 && probimf==0.0 && probf==0.0)fgamma = 1;
                                                   >> 2915     fimf = 0;
                                                   >> 2916     ff = 0;
                                                   >> 2917   }
                                                   >> 2918   else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg+probimf) {
                                                   >> 2919     // imf evaporation                                                   
                                                   >> 2920 // AIMF and ZIMF obtained from complete procedure (integration over all
                                                   >> 2921 // possible Gamma(IMF) and then randomly picked
                                                   >> 2922 
                                                   >> 2923    G4int iloop=0;
                                                   >> 2924    dir1973:
                                                   >> 2925    imf(af,zf,tcn,ee,&zimf,&aimf,&bimf,&sbimf,&timf,jprf);
                                                   >> 2926    iloop++;
                                                   >> 2927    if(iloop>100)std::cout << "Problem in EVAPORA: IMF called > 100 times" << std::endl;
                                                   >> 2928    if(zimf>=(zf-2.0)) goto dir1973;
                                                   >> 2929    if(zimf>zf/2.0){
                                                   >> 2930           zimf = zf - zimf;
                                                   >> 2931           aimf = af - aimf;
                                                   >> 2932    }
                                                   >> 2933    // These cases should in principle never happen
                                                   >> 2934    if(zimf==0.0 || aimf==0.0 || sbimf>ee)std::cout << "warning: Look in EVAPORA CALL IMF" << std::endl;
                                                   >> 2935 
                                                   >> 2936 // I sample the total kinetic energy consumed by the system of two nuclei
                                                   >> 2937 // from the distribution determined with the temperature at saddle point
                                                   >> 2938 // TKEIMF is the kinetic energy in the centre of mass of IMF and its partner
                                                   >> 2939 
                                                   >> 2940    G4int ii=0;
                                                   >> 2941    dir1235:
                                                   >> 2942    tkeimf= fmaxhaz(timf);
                                                   >> 2943    ii++;
                                                   >> 2944    if(ii>100){
                                                   >> 2945    tkeimf=min(2.0*timf,ee-sbimf);
                                                   >> 2946    goto dir1000;
                                                   >> 2947    }
                                                   >> 2948    if(tkeimf<=0.0)goto dir1235;
                                                   >> 2949    if(tkeimf>(ee-sbimf) && timf>0.5)goto dir1235;
                                                   >> 2950    dir1000:
                                                   >> 2951    tkeimf = tkeimf + bimf;
                                                   >> 2952 
                                                   >> 2953     amoins = aimf;
                                                   >> 2954     zmoins = zimf;
                                                   >> 2955     epsiln = (sbimf-bimf) + tkeimf;
                                                   >> 2956     pc = 0.0;
                                                   >> 2957     malpha = 0.0;
                                                   >> 2958     fgamma = 0; 
                                                   >> 2959     fimf = 1; 
                                                   >> 2960     ff = 0;
                                                   >> 2961     flamb0decay = 0;
                                                   >> 2962     gammadecay = 0;
                                                   >> 2963   }
                                                   >> 2964   else {
                                                   >> 2965     // fission                                                               
                                                   >> 2966     // in case of fission-events the fragment nucleus is the mother nucleus  
                                                   >> 2967     // before fission occurs with excitation energy above the fis.- barrier. 
                                                   >> 2968     // fission fragment mass distribution is calulated in subroutine fisdis  
                                                   >> 2969 
                                                   >> 2970     amoins = 0.0;
                                                   >> 2971     zmoins = 0.0;
                                                   >> 2972     epsiln = ef;
                                                   >> 2973 //
                                                   >> 2974     malpha = 0.0;
                                                   >> 2975     pc = 0.0;
                                                   >> 2976     ff = 1;
                                                   >> 2977     fimf = 0;
                                                   >> 2978     fgamma = 0;
                                                   >> 2979     flamb0decay = 0;
                                                   >> 2980     gammadecay = 0;
                                                   >> 2981   }
                                                   >> 2982 //
                                                   >> 2983   direct99:
                                                   >> 2984   if (ee <= 0.01)ee = 0.01;
                                                   >> 2985 // Davide Mancusi (DM) - 2010
                                                   >> 2986       if(gammadecay==1 && ee<(epsiln+0.010)){
3671         epsiln = ee - 0.010;                     2987         epsiln = ee - 0.010;
3672         // fgamma = 1;                        << 2988        // fgamma = 1;
3673     }                                         << 2989       }
3674                                                  2990 
3675     if (epsiln < 0.0)                         << 2991       if(epsiln<0.0){
3676     {                                         << 2992        std::cout << "***WARNING epsilon<0***" << std::endl;
3677         std::cout << "***WARNING epsilon<0*** << 2993        //epsiln=0.;
3678         // epsiln=0.;                         << 2994        //PRINT*,IDECAYMODE,IDNINT(AF),IDNINT(ZF),EE,EPSILN
3679         // PRINT*,IDECAYMODE,IDNINT(AF),IDNIN << 2995       }
3680     }                                         << 2996   // calculation of the daughter nucleus                                   
3681     // calculation of the daughter nucleus    << 2997   af = af - amoins;
3682     af = af - amoins;                         << 2998   zf = zf - zmoins;
3683     zf = zf - zmoins;                         << 2999   ee = ee - epsiln;
3684     ee = ee - epsiln;                         << 3000   if (ee <= 0.01)ee = 0.01;
3685     if (ee <= 0.01)                           << 3001   mtota = mtota + malpha;
3686         ee = 0.01;                            << 3002 
3687     mtota = mtota + malpha;                   << 3003 
3688                                               << 3004   //if(amoins==2 && zmoins==0)std::cout << ee << std::endl;
3689     // if(amoins==2 && zmoins==0)std::cout << << 3005  
3690                                               << 3006 
3691 secondneutron:                                << 3007       secondneutron:
3692     if (amoins == 2 && zmoins == 0)           << 3008       if(amoins==2 && zmoins==0){twon=1;amoins=1;}else{ twon=0;}
3693     {                                         << 3009 
3694         twon = 1;                             << 3010 
3695         amoins = 1;                           << 3011 // Determination of x,y,z components of momentum from known emission momentum PC
3696     }                                         << 3012       if(ff==0 && fimf==0){
3697     else                                      << 3013         //
3698     {                                         << 3014         if(flamb0decay==1){
3699         twon = 0;                             << 3015         EV_TEMP[IEV_TAB_TEMP][0] = 0.;
3700     }                                         << 3016         EV_TEMP[IEV_TAB_TEMP][1] = -2;
3701                                               << 3017         EV_TEMP[IEV_TAB_TEMP][5] = 1.;
3702     // Determination of x,y,z components of m << 3018         }else{
3703     // PC                                     << 3019         EV_TEMP[IEV_TAB_TEMP][0] = zmoins;
3704     if (ff == 0 && fimf == 0)                 << 3020         EV_TEMP[IEV_TAB_TEMP][1] = amoins;
3705     {                                         << 3021         EV_TEMP[IEV_TAB_TEMP][5] = 0.;
3706         //                                    << 
3707         if (flamb0decay == 1)                 << 
3708         {                                     << 
3709             EV_TEMP[IEV_TAB_TEMP][0] = 0.;    << 
3710             EV_TEMP[IEV_TAB_TEMP][1] = -2;    << 
3711             EV_TEMP[IEV_TAB_TEMP][5] = 1.;    << 
3712         }                                     << 
3713         else                                  << 
3714         {                                     << 
3715             EV_TEMP[IEV_TAB_TEMP][0] = zmoins << 
3716             EV_TEMP[IEV_TAB_TEMP][1] = amoins << 
3717             EV_TEMP[IEV_TAB_TEMP][5] = 0.;    << 
3718         }                                        3022         }
3719         rnd = G4AblaRandom::flat();              3023         rnd = G4AblaRandom::flat();
3720         ctet1 = 2.0 * rnd - 1.0;              << 3024         ctet1 = 2.0*rnd - 1.0;            // z component: uniform probability between -1 and 1
3721         stet1 = std::sqrt(1.0 - std::pow(ctet << 3025         stet1 = std::sqrt(1.0 - std::pow(ctet1,2)); // component perpendicular to z
3722         rnd = G4AblaRandom::flat();              3026         rnd = G4AblaRandom::flat();
3723         phi1 = rnd * 2.0 * 3.141592654;       << 3027         phi1 = rnd*2.0*3.141592654;       // angle in x-y plane: uniform probability between 0 and 2*pi
3724                                               << 3028         G4double xcv = stet1*std::cos(phi1);// x component
3725         G4double xcv = stet1 * std::cos(phi1) << 3029         G4double ycv = stet1*std::sin(phi1);// y component
3726         G4double ycv = stet1 * std::sin(phi1) << 3030         G4double zcv = ctet1;               // z component
3727         G4double zcv = ctet1;                 << 3031 // In the CM system
3728                                               << 3032         if(gammadecay==0){
3729         if (gammadecay == 0)                  << 3033 // Light particle
3730         {                                     << 3034            G4double ETOT_LP = std::sqrt(pc*pc + amoins*amoins * mu2);
3731             // Light particle                 << 3035            if(flamb0decay==1)ETOT_LP = std::sqrt(pc*pc + 1115.683*1115.683);
3732             G4double ETOT_LP = std::sqrt(pc * << 3036            EV_TEMP[IEV_TAB_TEMP][2] = c * pc * xcv / ETOT_LP;
3733             if (flamb0decay == 1)             << 3037            EV_TEMP[IEV_TAB_TEMP][3] = c * pc * ycv / ETOT_LP;
3734                 ETOT_LP = std::sqrt(pc * pc + << 3038            EV_TEMP[IEV_TAB_TEMP][4] = c * pc * zcv / ETOT_LP;
3735             EV_TEMP[IEV_TAB_TEMP][2] = c * pc << 3039         }else{
3736             EV_TEMP[IEV_TAB_TEMP][3] = c * pc << 3040 // gamma ray
3737             EV_TEMP[IEV_TAB_TEMP][4] = c * pc << 3041            EV_TEMP[IEV_TAB_TEMP][2] = pc * xcv;
3738         }                                     << 3042            EV_TEMP[IEV_TAB_TEMP][3] = pc * ycv;
3739         else                                  << 3043            EV_TEMP[IEV_TAB_TEMP][4] = pc * zcv;
3740         {                                     << 3044         }
3741             // gamma ray                      << 3045         G4double VXOUT=0.,VYOUT=0.,VZOUT=0.;
3742             EV_TEMP[IEV_TAB_TEMP][2] = pc * x << 3046         lorentz_boost(vxeva,vyeva,vleva,
3743             EV_TEMP[IEV_TAB_TEMP][3] = pc * y << 3047             EV_TEMP[IEV_TAB_TEMP][2],EV_TEMP[IEV_TAB_TEMP][3],
3744             EV_TEMP[IEV_TAB_TEMP][4] = pc * z << 3048             EV_TEMP[IEV_TAB_TEMP][4],
3745         }                                     << 3049             &VXOUT,&VYOUT,&VZOUT);
3746         G4double VXOUT = 0., VYOUT = 0., VZOU << 
3747         lorentz_boost(vxeva,                  << 
3748                       vyeva,                  << 
3749                       vleva,                  << 
3750                       EV_TEMP[IEV_TAB_TEMP][2 << 
3751                       EV_TEMP[IEV_TAB_TEMP][3 << 
3752                       EV_TEMP[IEV_TAB_TEMP][4 << 
3753                       &VXOUT,                 << 
3754                       &VYOUT,                 << 
3755                       &VZOUT);                << 
3756         EV_TEMP[IEV_TAB_TEMP][2] = VXOUT;        3050         EV_TEMP[IEV_TAB_TEMP][2] = VXOUT;
3757         EV_TEMP[IEV_TAB_TEMP][3] = VYOUT;        3051         EV_TEMP[IEV_TAB_TEMP][3] = VYOUT;
3758         EV_TEMP[IEV_TAB_TEMP][4] = VZOUT;        3052         EV_TEMP[IEV_TAB_TEMP][4] = VZOUT;
3759         // Heavy residue                      << 3053 // Heavy residue
3760         if (gammadecay == 0)                  << 3054         if(gammadecay==0){
3761         {                                     << 3055         G4double v2 = std::pow(EV_TEMP[IEV_TAB_TEMP][2],2.) +
3762             G4double v2 = std::pow(EV_TEMP[IE << 3056              std::pow(EV_TEMP[IEV_TAB_TEMP][3],2.) +
3763                           std::pow(EV_TEMP[IE << 3057              std::pow(EV_TEMP[IEV_TAB_TEMP][4],2.);
3764             G4double gamma = 1.0 / std::sqrt( << 3058         G4double gamma = 1.0/std::sqrt(1.0 - v2 / (c*c));
3765             G4double etot_lp = amoins * mu *  << 3059         G4double etot_lp = amoins*mu * gamma;
3766             pxeva = pxeva - EV_TEMP[IEV_TAB_T << 3060         pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2] * etot_lp / c;
3767             pyeva = pyeva - EV_TEMP[IEV_TAB_T << 3061         pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3] * etot_lp / c;
3768             pleva = pleva - EV_TEMP[IEV_TAB_T << 3062         pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4] * etot_lp / c;
3769         }                                     << 3063         }else{
3770         else                                  << 3064 // in case of gammas, EV_TEMP contains momentum components and not velocity
3771         {                                     << 3065         pxeva = pxeva - EV_TEMP[IEV_TAB_TEMP][2];
3772             // in case of gammas, EV_TEMP con << 3066         pyeva = pyeva - EV_TEMP[IEV_TAB_TEMP][3];
3773             // velocity                       << 3067         pleva = pleva - EV_TEMP[IEV_TAB_TEMP][4];
3774             pxeva = pxeva - EV_TEMP[IEV_TAB_T << 3068         }
3775             pyeva = pyeva - EV_TEMP[IEV_TAB_T << 3069         G4double pteva = std::sqrt(pxeva*pxeva + pyeva*pyeva);
3776             pleva = pleva - EV_TEMP[IEV_TAB_T << 3070 // To be checked:
3777         }                                     << 3071         G4double etot = std::sqrt ( pleva*pleva + pteva*pteva + af*af * mu2 );
3778         G4double pteva = std::sqrt(pxeva * px << 3072         vxeva = c * pxeva / etot;  // recoil velocity components of residue due to evaporation
3779         // To be checked:                     << 
3780         G4double etot = std::sqrt(pleva * ple << 
3781         vxeva = c * pxeva / etot; // recoil v << 
3782         vyeva = c * pyeva / etot;                3073         vyeva = c * pyeva / etot;
3783         vleva = c * pleva / etot;                3074         vleva = c * pleva / etot;
3784         IEV_TAB_TEMP = IEV_TAB_TEMP + 1;         3075         IEV_TAB_TEMP = IEV_TAB_TEMP + 1;
3785     }                                         << 3076       }
3786                                               << 
3787     if (twon == 1)                            << 
3788     {                                         << 
3789         goto secondneutron;                   << 
3790     }                                         << 
3791                                               << 
3792     // condition for end of evaporation       << 
3793     if (zf < 3. || (ff == 1) || (fgamma == 1) << 
3794     {                                         << 
3795         goto evapora100;                      << 
3796     }                                         << 
3797     goto evapora10;                           << 
3798                                               << 
3799 evapora100:                                   << 
3800     (*zf_par) = zf;                           << 
3801     (*af_par) = af;                           << 
3802     (*ee_par) = ee;                           << 
3803     (*faimf) = aimf;                          << 
3804     (*fzimf) = zimf;                          << 
3805     (*jprfout) = jprf;                        << 
3806     (*tkeimf_par) = tkeimf;                   << 
3807     (*mtota_par) = mtota;                     << 
3808     (*vleva_par) = vleva;                     << 
3809     (*vxeva_par) = vxeva;                     << 
3810     (*vyeva_par) = vyeva;                     << 
3811     (*ff_par) = ff;                           << 
3812     (*fimf_par) = fimf;                       << 
3813     (*inttype_par) = inttype;                 << 
3814     (*iev_tab_temp_par) = IEV_TAB_TEMP;       << 
3815     (*inum_par) = inum;                       << 
3816     (*NbLam0_par) = NbLam0;                   << 
3817     return;                                   << 
3818 }                                             << 
3819                                                  3077 
3820 void G4Abla::direct(G4double zprf,            << 3078   if(twon==1){goto secondneutron;}
3821                     G4double a,               << 
3822                     G4double ee,              << 
3823                     G4double jprf,            << 
3824                     G4double* probp_par,      << 
3825                     G4double* probd_par,      << 
3826                     G4double* probt_par,      << 
3827                     G4double* probn_par,      << 
3828                     G4double* probhe_par,     << 
3829                     G4double* proba_par,      << 
3830                     G4double* probg_par,      << 
3831                     G4double* probimf_par,    << 
3832                     G4double* probf_par,      << 
3833                     G4double* problamb0_par,  << 
3834                     G4double* ptotl_par,      << 
3835                     G4double* sn_par,         << 
3836                     G4double* sbp_par,        << 
3837                     G4double* sbd_par,        << 
3838                     G4double* sbt_par,        << 
3839                     G4double* sbhe_par,       << 
3840                     G4double* sba_par,        << 
3841                     G4double* slamb0_par,     << 
3842                     G4double* ecn_par,        << 
3843                     G4double* ecp_par,        << 
3844                     G4double* ecd_par,        << 
3845                     G4double* ect_par,        << 
3846                     G4double* eche_par,       << 
3847                     G4double* eca_par,        << 
3848                     G4double* ecg_par,        << 
3849                     G4double* eclamb0_par,    << 
3850                     G4double* bp_par,         << 
3851                     G4double* bd_par,         << 
3852                     G4double* bt_par,         << 
3853                     G4double* bhe_par,        << 
3854                     G4double* ba_par,         << 
3855                     G4double* sp_par,         << 
3856                     G4double* sd_par,         << 
3857                     G4double* st_par,         << 
3858                     G4double* she_par,        << 
3859                     G4double* sa_par,         << 
3860                     G4double* ef_par,         << 
3861                     G4double* ts1_par,        << 
3862                     G4int,                    << 
3863                     G4int inum,               << 
3864                     G4int itest,              << 
3865                     G4int* sortie,            << 
3866                     G4double* tcn,            << 
3867                     G4double* jprfn_par,      << 
3868                     G4double* jprfp_par,      << 
3869                     G4double* jprfd_par,      << 
3870                     G4double* jprft_par,      << 
3871                     G4double* jprfhe_par,     << 
3872                     G4double* jprfa_par,      << 
3873                     G4double* jprflamb0_par,  << 
3874                     G4double* tsum_par,       << 
3875                     G4int NbLam0)             << 
3876 {                                             << 
3877     G4double probp = (*probp_par);            << 
3878     G4double probd = (*probd_par);            << 
3879     G4double probt = (*probt_par);            << 
3880     G4double probn = (*probn_par);            << 
3881     G4double probhe = (*probhe_par);          << 
3882     G4double proba = (*proba_par);            << 
3883     G4double probg = (*probg_par);            << 
3884     G4double probimf = (*probimf_par);        << 
3885     G4double probf = (*probf_par);            << 
3886     G4double problamb0 = (*problamb0_par);    << 
3887     G4double ptotl = (*ptotl_par);            << 
3888     G4double sn = (*sn_par);                  << 
3889     G4double sp = (*sp_par);                  << 
3890     G4double sd = (*sd_par);                  << 
3891     G4double st = (*st_par);                  << 
3892     G4double she = (*she_par);                << 
3893     G4double sa = (*sa_par);                  << 
3894     G4double slamb0 = 0.0;                    << 
3895     G4double sbp = (*sbp_par);                << 
3896     G4double sbd = (*sbd_par);                << 
3897     G4double sbt = (*sbt_par);                << 
3898     G4double sbhe = (*sbhe_par);              << 
3899     G4double sba = (*sba_par);                << 
3900     G4double ecn = (*ecn_par);                << 
3901     G4double ecp = (*ecp_par);                << 
3902     G4double ecd = (*ecd_par);                << 
3903     G4double ect = (*ect_par);                << 
3904     G4double eche = (*eche_par);              << 
3905     G4double eca = (*eca_par);                << 
3906     G4double ecg = (*ecg_par);                << 
3907     G4double eclamb0 = (*eclamb0_par);        << 
3908     G4double bp = (*bp_par);                  << 
3909     G4double bd = (*bd_par);                  << 
3910     G4double bt = (*bt_par);                  << 
3911     G4double bhe = (*bhe_par);                << 
3912     G4double ba = (*ba_par);                  << 
3913     G4double tsum = (*tsum_par);              << 
3914                                               << 
3915     // CALCULATION OF PARTICLE-EMISSION PROBA << 
3916     // BASED ON THE SIMPLIFIED FORMULAS FOR T << 
3917     // MORETTO, ROCHESTER MEETING TO AVOID CO << 
3918     // INTENSIVE INTEGRATION OF THE LEVEL DEN << 
3919     // USES EFFECTIVE COULOMB BARRIERS AND AN << 
3920     // OF THE EVAPORATED PARTICLES            << 
3921     // COLLECTIVE ENHANCMENT OF THE LEVEL DEN << 
3922     // DYNAMICAL HINDRANCE OF FISSION IS INCL << 
3923     // APPROXIMATION. SEE A.R. JUNGHANS DIPLO << 
3924     // SHELL AND PAIRING STRUCTURES IN THE LE << 
3925                                               << 
3926     // INPUT:                                 << 
3927     // ZPRF,A,EE  CHARGE, MASS, EXCITATION EN << 
3928     // NUCLEUS                                << 
3929     // JPRF       ROOT-MEAN-SQUARED ANGULAR M << 
3930                                               << 
3931     // DEFORMATIONS AND G.S. SHELL EFFECTS    << 
3932     // COMMON /ECLD/   ECGNZ,ECFNZ,VGSLD,ALPH << 
3933                                               << 
3934     // ECGNZ - GROUND STATE SHELL CORR. FRLDM << 
3935     // ECFNZ - SHELL CORRECTION FOR THE SADDL << 
3936     // VGSLD - DIFFERENCE BETWEEN DEFORMED G. << 
3937     // ALPHA - ALPHA GROUND STATE DEFORMATION << 
3938     // BETA2 = SQRT((4PI)/5) * ALPHA          << 
3939                                               << 
3940     // OPTIONS AND PARAMETERS FOR FISSION CHA << 
3941     // COMMON /FISS/    AKAP,BET,HOMEGA,KOEFF << 
3942     //                  OPTSHP,OPTXFIS,OPTLES << 
3943     //                                        << 
3944     //  AKAP   - HBAR**2/(2* MN * R_0**2) = 1 << 
3945     //  BET    - REDUCED NUCLEAR FRICTION COE << 
3946     //  HOMEGA - CURVATURE OF THE FISSION BAR << 
3947     //  KOEFF  - COEFFICIENT FOR THE LD FISSI << 
3948     //  IFIS   - 0/1 FISSION CHANNEL OFF/ON   << 
3949     //  OPTSHP - INTEGER SWITCH FOR SHELL COR << 
3950     //           = 0 NO MICROSCOPIC CORRECTIO << 
3951     //           = 1 SHELL ,  NO PAIRING      << 
3952     //           = 2 PAIRING, NO SHELL        << 
3953     //           = 3 SHELL AND PAIRING        << 
3954     //  OPTCOL - 0/1 COLLECTIVE ENHANCEMENT S << 
3955     //  OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, << 
3956     //                 FISSILITY PARAMETER.   << 
3957     //  OPTLES - CONSTANT TEMPERATURE LEVEL D << 
3958     //  OPTCOL - 0/1 COLLECTIVE ENHANCEMENT O << 
3959                                               << 
3960     // LEVEL DENSITY PARAMETERS               << 
3961     // COMMON /ALD/    AV,AS,AK,OPTAFAN       << 
3962     //                 AV,AS,AK - VOLUME,SURF << 
3963     //                            LEVEL DENSI << 
3964     // OPTAFAN - 0/1  AF/AN >=1 OR AF/AN ==1  << 
3965     //           RECOMMENDED IS OPTAFAN = 0   << 
3966                                               << 
3967     // FISSION BARRIERS                       << 
3968     // COMMON /FB/     EFA                    << 
3969     // EFA    - ARRAY OF FISSION BARRIERS     << 
3970                                               << 
3971     // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL: << 
3972     // - EMISSION PROBABILITIES FOR N EUTRON, << 
3973     // PARTICLES, F ISSION AND NORMALISATION  << 
3974     // SN,SBP,SBA: SEPARATION ENERGIES N P A  << 
3975     // INCLUDING EFFECTIVE BARRIERS           << 
3976     // ECN,ECP,ECA,BP,BA                      << 
3977     // - AVERAGE KINETIC ENERGIES (2*T) AND E << 
3978                                               << 
3979     G4double bk = 0.0;                        << 
3980     G4double bksp = 0.0;                      << 
3981     G4double bc = 0.0;                        << 
3982     G4int afp = 0;                            << 
3983     G4double het = 0.0;                       << 
3984     G4double at = 0.0;                        << 
3985     G4double bs = 0.0;                        << 
3986     G4double bssp = 0.0;                      << 
3987     G4double bshell = 0.0;                    << 
3988     G4double cf = 0.0;                        << 
3989     G4double defbet = 0.0;                    << 
3990     G4double densa = 0.0;                     << 
3991     G4double denshe = 0.0;                    << 
3992     G4double densg = 0.0;                     << 
3993     G4double densn = 0.0;                     << 
3994     G4double densp = 0.0;                     << 
3995     G4double densd = 0.0;                     << 
3996     G4double denst = 0.0;                     << 
3997     G4double denslamb0 = 0.0;                 << 
3998     G4double eer = 0.0;                       << 
3999     G4double ecor = 0.0;                      << 
4000     G4double ef = 0.0;                        << 
4001     G4double ft = 0.0;                        << 
4002     G4double timf = 0.0;                      << 
4003     G4double qr = 0.0;                        << 
4004     G4double qrcn = 0.0;                      << 
4005     G4double omegap = 0.0;                    << 
4006     G4double omegad = 0.0;                    << 
4007     G4double omegat = 0.0;                    << 
4008     G4double omegahe = 0.0;                   << 
4009     G4double omegaa = 0.0;                    << 
4010     G4double ga = 0.0;                        << 
4011     G4double ghe = 0.0;                       << 
4012     G4double gf = 0.0;                        << 
4013     G4double gff = 0.0;                       << 
4014     G4double gn = 0.0;                        << 
4015     G4double gp = 0.0;                        << 
4016     G4double gd = 0.0;                        << 
4017     G4double gt = 0.0;                        << 
4018     G4double gg = 0.0;                        << 
4019     G4double glamb0 = 0.0;                    << 
4020     G4double gimf = 0.0;                      << 
4021     G4double gimf3 = 0.0;                     << 
4022     G4double gimf5 = 0.0;                     << 
4023     G4double bimf = 0.0;                      << 
4024     G4double bsimf = 0.0;                     << 
4025     G4double sbimf = 0.0;                     << 
4026     G4double densimf = 0.0;                   << 
4027     G4double defbetimf = 0.0;                 << 
4028     G4double b_imf = 0.0;                     << 
4029     G4double a_imf = 0.0;                     << 
4030     G4double omegaimf = 0.0;                  << 
4031     G4int izimf = 0;                          << 
4032     G4double zimf = 0.0;                      << 
4033     G4double gsum = 0.0;                      << 
4034     G4double gtotal = 0.0;                    << 
4035     G4double hbar = 6.582122e-22;             << 
4036     G4double emin = 0.0;                      << 
4037     G4int il = 0;                             << 
4038     G4int choice_fisspart = 0;                << 
4039     G4double t_lapse = 0.0;                   << 
4040     G4int imaxwell = 0;                       << 
4041     G4int in = 0;                             << 
4042     G4int iz = 0;                             << 
4043     G4int ind = 0;                            << 
4044     G4int izd = 0;                            << 
4045     G4int j = 0;                              << 
4046     G4int k = 0;                              << 
4047     G4double ma1z = 0.0;                      << 
4048     G4double mazz = 0.0;                      << 
4049     G4double ma2z = 0.0;                      << 
4050     G4double ma1z1 = 0.0;                     << 
4051     G4double ma2z1 = 0.0;                     << 
4052     G4double ma3z1 = 0.0;                     << 
4053     G4double ma3z2 = 0.0;                     << 
4054     G4double ma4z2 = 0.0;                     << 
4055     G4double maz = 0.0;                       << 
4056     G4double nt = 0.0;                        << 
4057     G4double pi = 3.1415926535;               << 
4058     G4double pt = 0.0;                        << 
4059     G4double dt = 0.0;                        << 
4060     G4double tt = 0.0;                        << 
4061     G4double lamb0t = 0.0;                    << 
4062     G4double gtemp = 0.0;                     << 
4063     G4double rdt = 0.0;                       << 
4064     G4double rtt = 0.0;                       << 
4065     G4double rat = 0.0;                       << 
4066     G4double rhet = 0.0;                      << 
4067     G4double refmod = 0.0;                    << 
4068     G4double rnt = 0.0;                       << 
4069     G4double rpt = 0.0;                       << 
4070     G4double rlamb0t = 0.0;                   << 
4071     G4double sbfis = 1.e40;                   << 
4072     G4double segs = 0.0;                      << 
4073     G4double selmax = 0.0;                    << 
4074     G4double tauc = 0.0;                      << 
4075     G4double temp = 0.0;                      << 
4076     G4double ts1 = 0.0;                       << 
4077     G4double xx = 0.0;                        << 
4078     G4double y = 0.0;                         << 
4079     G4double k1 = 0.0;                        << 
4080     G4double omegasp = 0.0;                   << 
4081     G4double homegasp = 0.0;                  << 
4082     G4double omegags = 0.0;                   << 
4083     G4double homegags = 0.0;                  << 
4084     G4double pa = 0.0;                        << 
4085     G4double gamma = 0.0;                     << 
4086     G4double gfactor = 0.0;                   << 
4087     G4double bscn;                            << 
4088     G4double bkcn;                            << 
4089     G4double bccn;                            << 
4090     G4double ftcn = 0.0;                      << 
4091     G4double mfcd;                            << 
4092     G4double jprfn = jprf;                    << 
4093     G4double jprfp = jprf;                    << 
4094     G4double jprfd = jprf;                    << 
4095     G4double jprft = jprf;                    << 
4096     G4double jprfhe = jprf;                   << 
4097     G4double jprfa = jprf;                    << 
4098     G4double jprflamb0 = jprf;                << 
4099     G4double djprf = 0.0;                     << 
4100     G4double dlout = 0.0;                     << 
4101     G4double sdlout = 0.0;                    << 
4102     G4double iinert = 0.0;                    << 
4103     G4double erot = 0.0;                      << 
4104     G4double erotn = 0.0;                     << 
4105     G4double erotp = 0.0;                     << 
4106     G4double erotd = 0.0;                     << 
4107     G4double erott = 0.0;                     << 
4108     G4double erothe = 0.0;                    << 
4109     G4double erota = 0.0;                     << 
4110     G4double erotlamb0 = 0.0;                 << 
4111     G4double erotcn = 0.0;                    << 
4112     // G4double ecorcn=0.0;                   << 
4113     G4double imfarg = 0.0;                    << 
4114     G4double width_imf = 0.0;                 << 
4115     G4int IDjprf = 0;                         << 
4116     G4int fimf_allowed = opt->optimfallowed;  << 
4117                                               << 
4118     if (itest == 1)                           << 
4119     {                                         << 
4120     }                                         << 
4121     // Switch to calculate Maxwellian distrib << 
4122     imaxwell = 1;                             << 
4123     *sortie = 0;                              << 
4124                                               << 
4125     // just a change of name until the end of << 
4126     eer = ee;                                 << 
4127     if (inum == 1)                            << 
4128     {                                         << 
4129         ilast = 1;                            << 
4130     }                                         << 
4131     // calculation of masses                  << 
4132     // refmod = 1 ==> myers,swiatecki model   << 
4133     // refmod = 0 ==> weizsaecker model       << 
4134     refmod = 1; // Default = 1                << 
4135                 //                            << 
4136     if (refmod == 1)                          << 
4137     {                                         << 
4138         mglms(a, zprf, fiss->optshp, &maz);   << 
4139         mglms(a - 1.0, zprf, fiss->optshp, &m << 
4140         mglms(a - 2.0, zprf, fiss->optshp, &m << 
4141         mglms(a - 1.0, zprf - 1.0, fiss->opts << 
4142         mglms(a - 2.0, zprf - 1.0, fiss->opts << 
4143         mglms(a - 3.0, zprf - 1.0, fiss->opts << 
4144         mglms(a - 3.0, zprf - 2.0, fiss->opts << 
4145         mglms(a - 4.0, zprf - 2.0, fiss->opts << 
4146     }                                         << 
4147     else                                      << 
4148     {                                         << 
4149         mglw(a, zprf, &maz);                  << 
4150         mglw(a - 1.0, zprf, &ma1z);           << 
4151         mglw(a - 1.0, zprf - 1.0, &ma1z1);    << 
4152         mglw(a - 2.0, zprf - 1.0, &ma2z1);    << 
4153         mglw(a - 3.0, zprf - 1.0, &ma3z1);    << 
4154         mglw(a - 3.0, zprf - 2.0, &ma3z2);    << 
4155         mglw(a - 4.0, zprf - 2.0, &ma4z2);    << 
4156     }                                         << 
4157                                               << 
4158     if ((a - 1.) == 3.0 && (zprf - 1.0) == 2. << 
4159         ma1z1 = -7.7181660;                   << 
4160     if ((a - 1.) == 4.0 && (zprf - 1.0) == 2. << 
4161         ma1z1 = -28.295992;                   << 
4162                                               << 
4163     // separation energies                    << 
4164     sn = ma1z - maz;                          << 
4165     sp = ma1z1 - maz;                         << 
4166     sd = ma2z1 - maz - 2.2246;                << 
4167     st = ma3z1 - maz - 8.481977;              << 
4168     she = ma3z2 - maz - 7.7181660;            << 
4169     sa = ma4z2 - maz - 28.295992;             << 
4170     //                                        << 
4171     if (NbLam0 > 1)                           << 
4172     {                                         << 
4173         sn = gethyperbinding(a, zprf, NbLam0) << 
4174         sp = gethyperbinding(a, zprf, NbLam0) << 
4175         sd = gethyperbinding(a, zprf, NbLam0) << 
4176         st = gethyperbinding(a, zprf, NbLam0) << 
4177         she = gethyperbinding(a, zprf, NbLam0 << 
4178         sa = gethyperbinding(a, zprf, NbLam0) << 
4179         slamb0 = gethyperbinding(a, zprf, NbL << 
4180     }                                         << 
4181     if (NbLam0 == 1)                          << 
4182     {                                         << 
4183         G4double deltasn = sn - (gethyperbind << 
4184         G4double deltasp = sp - (gethyperbind << 
4185         G4double deltasd = sd - (gethyperbind << 
4186         G4double deltast = st - (gethyperbind << 
4187         G4double deltashe = she - (gethyperbi << 
4188         G4double deltasa = sa - (gethyperbind << 
4189                                               << 
4190         sn = deltasn + gethyperbinding(a, zpr << 
4191         sp = deltasp + gethyperbinding(a, zpr << 
4192         sd = deltasd + gethyperbinding(a, zpr << 
4193         st = deltast + gethyperbinding(a, zpr << 
4194         she = deltashe + gethyperbinding(a, z << 
4195         sa = deltasa + gethyperbinding(a, zpr << 
4196         slamb0 = gethyperseparation(a, zprf,  << 
4197     }                                         << 
4198                                               << 
4199     // coulomb barriers                       << 
4200     // Proton                                 << 
4201     if (zprf <= 1.0e0 || a <= 1.0e0 || (a - z << 
4202     {                                         << 
4203         sbp = 1.0e75;                         << 
4204         bp = 1.0e75;                          << 
4205     }                                         << 
4206     else                                      << 
4207     {                                         << 
4208         barrs(idnint(zprf - 1.), idnint(a - 1 << 
4209         bp = max(bp, 0.1);                    << 
4210         sbp = sp + bp;                        << 
4211     }                                         << 
4212                                               << 
4213     // Deuteron                               << 
4214     if (zprf <= 1.0e0 || a <= 2.0e0 || (a - z << 
4215     {                                         << 
4216         sbd = 1.0e75;                         << 
4217         bd = 1.0e75;                          << 
4218     }                                         << 
4219     else                                      << 
4220     {                                         << 
4221         barrs(idnint(zprf - 1.), idnint(a - 2 << 
4222         bd = max(bd, 0.1);                    << 
4223         sbd = sd + bd;                        << 
4224     }                                         << 
4225                                               << 
4226     // Triton                                 << 
4227     if (zprf <= 1.0e0 || a <= 3.0e0 || (a - z << 
4228     {                                         << 
4229         sbt = 1.0e75;                         << 
4230         bt = 1.0e75;                          << 
4231     }                                         << 
4232     else                                      << 
4233     {                                         << 
4234         barrs(idnint(zprf - 1.), idnint(a - 3 << 
4235         bt = max(bt, 0.1);                    << 
4236         sbt = st + bt;                        << 
4237     }                                         << 
4238                                               << 
4239     // Alpha                                  << 
4240     if (a - 4.0 <= 0.0 || zprf <= 2.0 || (a - << 
4241     {                                         << 
4242         sba = 1.0e+75;                        << 
4243         ba = 1.0e+75;                         << 
4244     }                                         << 
4245     else                                      << 
4246     {                                         << 
4247         barrs(idnint(zprf - 2.), idnint(a - 4 << 
4248         ba = max(ba, 0.1);                    << 
4249         sba = sa + ba;                        << 
4250     }                                         << 
4251                                               << 
4252     // He3                                    << 
4253     if (a - 3.0 <= 0.0 || zprf <= 2.0 || (a - << 
4254     {                                         << 
4255         sbhe = 1.0e+75;                       << 
4256         bhe = 1.0e+75;                        << 
4257     }                                         << 
4258     else                                      << 
4259     {                                         << 
4260         barrs(idnint(zprf - 2.), idnint(a - 3 << 
4261         bhe = max(bhe, 0.1);                  << 
4262         sbhe = she + bhe;                     << 
4263     }                                         << 
4264                                               << 
4265     // Dealing with particle-unbound systems  << 
4266     emin = dmin1(sba, sbhe, dmin1(sbt, sbhe,  << 
4267                                               << 
4268     if (emin <= 0.0)                          << 
4269     {                                         << 
4270         *sortie = 1;                          << 
4271         unbound(sn,                           << 
4272                 sp,                           << 
4273                 sd,                           << 
4274                 st,                           << 
4275                 she,                          << 
4276                 sa,                           << 
4277                 bp,                           << 
4278                 bd,                           << 
4279                 bt,                           << 
4280                 bhe,                          << 
4281                 ba,                           << 
4282                 &probf,                       << 
4283                 &probn,                       << 
4284                 &probp,                       << 
4285                 &probd,                       << 
4286                 &probt,                       << 
4287                 &probhe,                      << 
4288                 &proba,                       << 
4289                 &probimf,                     << 
4290                 &probg,                       << 
4291                 &ecn,                         << 
4292                 &ecp,                         << 
4293                 &ecd,                         << 
4294                 &ect,                         << 
4295                 &eche,                        << 
4296                 &eca);                        << 
4297         goto direct70;                        << 
4298     }                                         << 
4299     //                                        << 
4300     k = idnint(zprf);                         << 
4301     j = idnint(a - zprf);                     << 
4302     if (fiss->ifis > 0)                       << 
4303     {                                         << 
4304         // now ef is calculated from efa that << 
4305         // barfit which takes into account th << 
4306         // note *** shell correction (ecgnz)  << 
4307         il = idnint(jprf);                    << 
4308         barfit(k, k + j, il, &sbfis, &segs, & << 
4309         if ((fiss->optshp == 1) || (fiss->opt << 
4310         {                                     << 
4311             ef = G4double(sbfis) - ecld->ecgn << 
4312             // JLRS - Nov 2016 - Corrected va << 
4313             if (k == 90)                      << 
4314             {                                 << 
4315                 if (mod(j, 2) == 1)           << 
4316                 {                             << 
4317                     ef = ef * (4.5114 - 2.268 << 
4318                 }                             << 
4319                 else                          << 
4320                 {                             << 
4321                     ef = ef * (3.3931 - 1.533 << 
4322                 }                             << 
4323             }                                 << 
4324             if (k == 92)                      << 
4325             {                                 << 
4326                 if ((a - zprf) / zprf > 1.52) << 
4327                     ef = ef * (1.1222 - 0.108 << 
4328             }                                 << 
4329             if (k >= 94 && k <= 98 && j < 158 << 
4330             { // Data in this range have been << 
4331               // tested e-e                   << 
4332                 if (mod(j, 2) == 0 && mod(k,  << 
4333                 {                             << 
4334                     if (k >= 94)              << 
4335                     {                         << 
4336                         ef = ef - (11.54108 * << 
4337                     }                         << 
4338                 }                             << 
4339                 // O-O                        << 
4340                 if (mod(j, 2) == 1 && mod(k,  << 
4341                 {                             << 
4342                     if (k >= 95)              << 
4343                     {                         << 
4344                         ef = ef - (14.567 * ( << 
4345                     }                         << 
4346                 }                             << 
4347                 // Odd A                      << 
4348                 if (mod(j, 2) == 0 && mod(k,  << 
4349                 {                             << 
4350                     if (j >= 144)             << 
4351                     {                         << 
4352                         ef = ef - (13.662 * ( << 
4353                     }                         << 
4354                 }                             << 
4355                                                  3079 
4356                 if (mod(j, 2) == 1 && mod(k,  << 3080   // condition for end of evaporation                                   
4357                 {                             << 3081   if (zf < 3. || (ff == 1) || (fgamma == 1) || (fimf==1)) {
4358                     if (j >= 144)             << 3082     goto evapora100;
4359                     {                         << 3083   }
4360                         ef = ef - (13.662 * ( << 3084   goto evapora10;
4361                     }                         << 3085 
4362                 }                             << 3086   evapora100:
4363             }                                 << 3087   (*zf_par) = zf;
4364         }                                     << 3088   (*af_par) = af;
4365         else                                  << 3089   (*ee_par) = ee;
4366         {                                     << 3090   (*faimf) = aimf;
4367             ef = G4double(sbfis);             << 3091   (*fzimf) = zimf;
4368         }                                     << 3092   (*jprfout) = jprf;
4369         //                                    << 3093   (*tkeimf_par) = tkeimf;
4370         // TO AVOID NEGATIVE VALUES FOR IMPOS << 3094   (*mtota_par) = mtota;
4371         // THE FISSION BARRIER IS SET TO ZERO << 3095   (*vleva_par) = vleva;
4372         //                                    << 3096   (*vxeva_par) = vxeva;
4373         if (ef < 0.0)                         << 3097   (*vyeva_par) = vyeva;
4374             ef = 0.0;                         << 3098   (*ff_par) = ff;
4375         fb->efa[j][k] = ef;                   << 3099   (*fimf_par) = fimf;
4376         //                                    << 3100   (*inttype_par) = inttype;  
4377         // Hyper-fission barrier              << 3101   (*iev_tab_temp_par)= IEV_TAB_TEMP;                                       
4378         //                                    << 3102   (*inum_par) = inum;
4379         if (NbLam0 > 0)                       << 3103   (*NbLam0_par) = NbLam0;
4380         {                                     << 3104   return;
4381             ef = ef + 0.51 * (1115. - 938. +  << 3105 }
4382         }                                     << 3106 
4383         //                                    << 3107 void G4Abla::direct(G4double zprf, G4double a, G4double ee, G4double jprf, G4double *probp_par, G4double *probd_par, G4double *probt_par, G4double *probn_par, G4double *probhe_par, G4double *proba_par, G4double *probg_par,G4double *probimf_par,G4double *probf_par,G4double *problamb0_par, G4double *ptotl_par, G4double *sn_par, G4double *sbp_par, G4double *sbd_par, G4double *sbt_par, G4double *sbhe_par, G4double *sba_par,G4double *slamb0_par, G4double *ecn_par, G4double *ecp_par, G4double *ecd_par, G4double *ect_par,G4double *eche_par,G4double *eca_par, G4double *ecg_par,  G4double *eclamb0_par, G4double *bp_par, G4double *bd_par, G4double *bt_par, G4double *bhe_par, G4double *ba_par,G4double *sp_par,G4double *sd_par,G4double *st_par,G4double *she_par,G4double *sa_par, G4double *ef_par,G4double *ts1_par, G4int, G4int inum, G4int itest, G4int *sortie, G4double *tcn,G4double *jprfn_par, G4double *jprfp_par, G4double *jprfd_par, G4double *jprft_par, G4double *jprfhe_par, G4double *jprfa_par, G4double *jprflamb0_par, G4double *tsum_par, G4int NbLam0)
4384         // Set fission barrier                << 3108 {
4385         //                                    << 3109   G4double probp = (*probp_par);
4386         (*ef_par) = ef;                       << 3110   G4double probd = (*probd_par);
4387         //                                    << 3111   G4double probt = (*probt_par);
4388         // calculation of surface and curvatu << 3112   G4double probn = (*probn_par);
4389         // to calculate the level density par << 3113   G4double probhe = (*probhe_par);
4390         xx = fissility((k + j), k, NbLam0, sn << 3114   G4double proba = (*proba_par);
4391         y = 1.00 - xx;                        << 3115   G4double probg = (*probg_par);
4392         if (y < 0.0)                          << 3116   G4double probimf = (*probimf_par);
4393             y = 0.0;                          << 3117   G4double probf = (*probf_par);
4394         if (y > 1.0)                          << 3118   G4double problamb0 = (*problamb0_par);
4395             y = 1.0;                          << 3119   G4double ptotl = (*ptotl_par);
4396         bssp = bipol(1, y);                   << 3120   G4double sn = (*sn_par);
4397         bksp = bipol(2, y);                   << 3121   G4double sp = (*sp_par);
4398     }                                         << 3122   G4double sd = (*sd_par);
4399     else                                      << 3123   G4double st = (*st_par);
4400     {                                         << 3124   G4double she = (*she_par);
4401         ef = 1.0e40;                          << 3125   G4double sa = (*sa_par);
4402         sbfis = 1.0e40;                       << 3126   G4double slamb0 = 0.0;
4403         bssp = 1.0;                           << 3127   G4double sbp = (*sbp_par);
4404         bksp = 1.0;                           << 3128   G4double sbd = (*sbd_par);
4405     }                                         << 3129   G4double sbt = (*sbt_par);
4406     //                                        << 3130   G4double sbhe = (*sbhe_par);
4407     // COMPOUND NUCLEUS LEVEL DENSITY         << 3131   G4double sba = (*sba_par);
4408     //                                        << 3132   G4double ecn = (*ecn_par);
4409     //  AK 2007 - Now DENSNIV called with cor << 3133   G4double ecp = (*ecp_par);
4410                                               << 3134   G4double ecd = (*ecd_par);
4411     afp = idnint(a);                          << 3135   G4double ect = (*ect_par);
4412     iz = idnint(zprf);                        << 3136   G4double eche = (*eche_par);
4413     in = afp - iz;                            << 3137   G4double eca = (*eca_par);
4414     bshell = ecld->ecgnz[in][iz] - ecld->vgsl << 3138   G4double ecg = (*ecg_par);
4415     defbet = ecld->beta2[in][iz];             << 3139   G4double eclamb0 = (*eclamb0_par);
4416                                               << 3140   G4double bp = (*bp_par);
4417     iinert = 0.4 * 931.49 * 1.16 * 1.16 * std << 3141   G4double bd = (*bd_par);
4418     erot = jprf * jprf * 197.328 * 197.328 /  << 3142   G4double bt = (*bt_par);
4419     erotcn = erot;                            << 3143   G4double bhe = (*bhe_par);
4420                                               << 3144   G4double ba = (*ba_par);
4421     bsbkbc(a, zprf, &bscn, &bkcn, &bccn);     << 3145   G4double tsum = (*tsum_par);
4422                                               << 3146 
4423     // if(ee > erot+emin){                    << 3147   // CALCULATION OF PARTICLE-EMISSION PROBABILITIES & FISSION     / 
4424     densniv(                                  << 3148   // BASED ON THE SIMPLIFIED FORMULAS FOR THE DECAY WIDTH BY      / 
4425         a, zprf, ee, 0.0, &densg, bshell, bsc << 3149   // MORETTO, ROCHESTER MEETING TO AVOID COMPUTING TIME           / 
4426     ftcn = temp;                              << 3150   // INTENSIVE INTEGRATION OF THE LEVEL DENSITIES                 / 
4427     /*                                        << 3151   // USES EFFECTIVE COULOMB BARRIERS AND AN AVERAGE KINETIC ENERGY/ 
4428       //ecorcn = ecor;                        << 3152   // OF THE EVAPORATED PARTICLES                                  / 
                                                   >> 3153   // COLLECTIVE ENHANCMENT OF THE LEVEL DENSITY IS INCLUDED       / 
                                                   >> 3154   // DYNAMICAL HINDRANCE OF FISSION IS INCLUDED BY A STEP FUNCTION/ 
                                                   >> 3155   // APPROXIMATION. SEE A.R. JUNGHANS DIPLOMA THESIS              / 
                                                   >> 3156   // SHELL AND PAIRING STRUCTURES IN THE LEVEL DENSITY IS INCLUDED/ 
                                                   >> 3157 
                                                   >> 3158   // INPUT:                                                            
                                                   >> 3159   // ZPRF,A,EE  CHARGE, MASS, EXCITATION ENERGY OF COMPOUND     
                                                   >> 3160   // NUCLEUS                                         
                                                   >> 3161   // JPRF       ROOT-MEAN-SQUARED ANGULAR MOMENTUM                           
                                                   >> 3162 
                                                   >> 3163   // DEFORMATIONS AND G.S. SHELL EFFECTS                               
                                                   >> 3164   // COMMON /ECLD/   ECGNZ,ECFNZ,VGSLD,ALPHA                           
                                                   >> 3165 
                                                   >> 3166   // ECGNZ - GROUND STATE SHELL CORR. FRLDM FOR A SPHERICAL G.S.       
                                                   >> 3167   // ECFNZ - SHELL CORRECTION FOR THE SADDLE POINT (NOW: == 0)         
                                                   >> 3168   // VGSLD - DIFFERENCE BETWEEN DEFORMED G.S. AND LDM VALUE            
                                                   >> 3169   // ALPHA - ALPHA GROUND STATE DEFORMATION (THIS IS NOT BETA2!)       
                                                   >> 3170   // BETA2 = SQRT((4PI)/5) * ALPHA                             
                                                   >> 3171 
                                                   >> 3172   //OPTIONS AND PARAMETERS FOR FISSION CHANNEL                        
                                                   >> 3173   //COMMON /FISS/    AKAP,BET,HOMEGA,KOEFF,IFIS,                       
                                                   >> 3174   //                 OPTSHP,OPTXFIS,OPTLES,OPTCOL               
                                                   >> 3175   //
                                                   >> 3176   // AKAP   - HBAR**2/(2* MN * R_0**2) = 10 MEV, R_0 = 1.4 FM          
                                                   >> 3177   // BET    - REDUCED NUCLEAR FRICTION COEFFICIENT IN (10**21 S**-1)   
                                                   >> 3178   // HOMEGA - CURVATURE OF THE FISSION BARRIER = 1 MEV                 
                                                   >> 3179   // KOEFF  - COEFFICIENT FOR THE LD FISSION BARRIER == 1.0            
                                                   >> 3180   // IFIS   - 0/1 FISSION CHANNEL OFF/ON                               
                                                   >> 3181   // OPTSHP - INTEGER SWITCH FOR SHELL CORRECTION IN MASSES/ENERGY     
                                                   >> 3182   //          = 0 NO MICROSCOPIC CORRECTIONS IN MASSES AND ENERGY        
                                                   >> 3183   //          = 1 SHELL ,  NO PAIRING                                    
                                                   >> 3184   //          = 2 PAIRING, NO SHELL                                      
                                                   >> 3185   //          = 3 SHELL AND PAIRING                                      
                                                   >> 3186   // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT SWITCHED ON/OFF               
                                                   >> 3187   // OPTXFIS- 0,1,2 FOR MYERS & SWIATECKI, DAHLINGER, ANDREYEV         
                                                   >> 3188   //                FISSILITY PARAMETER.                                     
                                                   >> 3189   // OPTLES - CONSTANT TEMPERATURE LEVEL DENSITY FOR A,Z > TH-224      
                                                   >> 3190   // OPTCOL - 0/1 COLLECTIVE ENHANCEMENT OFF/ON                        
                                                   >> 3191 
                                                   >> 3192   // LEVEL DENSITY PARAMETERS                                          
                                                   >> 3193   // COMMON /ALD/    AV,AS,AK,OPTAFAN                                  
                                                   >> 3194   //                 AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE             
                                                   >> 3195   //                            LEVEL DENSITY PARAMETER                                
                                                   >> 3196   // OPTAFAN - 0/1  AF/AN >=1 OR AF/AN ==1                             
                                                   >> 3197   //           RECOMMENDED IS OPTAFAN = 0                              
                                                   >> 3198 
                                                   >> 3199   // FISSION BARRIERS                                                  
                                                   >> 3200   // COMMON /FB/     EFA                                               
                                                   >> 3201   // EFA    - ARRAY OF FISSION BARRIERS                                
                                                   >> 3202 
                                                   >> 3203 
                                                   >> 3204   // OUTPUT: PROBN,PROBP,PROBA,PROBF,PTOTL:                            
                                                   >> 3205   // - EMISSION PROBABILITIES FOR N EUTRON, P ROTON,  A LPHA     
                                                   >> 3206   // PARTICLES, F ISSION AND NORMALISATION                     
                                                   >> 3207   // SN,SBP,SBA: SEPARATION ENERGIES N P A                     
                                                   >> 3208   // INCLUDING EFFECTIVE BARRIERS                              
                                                   >> 3209   // ECN,ECP,ECA,BP,BA                                         
                                                   >> 3210   // - AVERAGE KINETIC ENERGIES (2*T) AND EFFECTIVE BARRIERS     
                                                   >> 3211 
                                                   >> 3212   G4double bk = 0.0;
                                                   >> 3213   G4double bksp = 0.0;
                                                   >> 3214   G4double bc = 0.0;
                                                   >> 3215   G4int afp = 0;
                                                   >> 3216   G4double het = 0.0;
                                                   >> 3217   G4double at = 0.0;
                                                   >> 3218   G4double bs = 0.0;
                                                   >> 3219   G4double bssp = 0.0;
                                                   >> 3220   G4double bshell = 0.0;
                                                   >> 3221   G4double cf = 0.0;
                                                   >> 3222   G4double defbet = 0.0;
                                                   >> 3223   G4double densa = 0.0;
                                                   >> 3224   G4double denshe = 0.0;
                                                   >> 3225   G4double densg = 0.0;
                                                   >> 3226   G4double densn = 0.0;
                                                   >> 3227   G4double densp = 0.0;
                                                   >> 3228   G4double densd = 0.0;
                                                   >> 3229   G4double denst = 0.0;
                                                   >> 3230   G4double denslamb0 = 0.0;
                                                   >> 3231   G4double eer = 0.0;
                                                   >> 3232   G4double ecor = 0.0;
                                                   >> 3233   G4double ef = 0.0;
                                                   >> 3234   G4double ft = 0.0;
                                                   >> 3235   G4double timf = 0.0;
                                                   >> 3236   G4double qr = 0.0;
                                                   >> 3237   G4double qrcn = 0.0;
                                                   >> 3238   G4double omegap=0.0;
                                                   >> 3239   G4double omegad=0.0;
                                                   >> 3240   G4double omegat=0.0;
                                                   >> 3241   G4double omegahe=0.0;
                                                   >> 3242   G4double omegaa=0.0;
                                                   >> 3243   G4double ga = 0.0;
                                                   >> 3244   G4double ghe = 0.0;
                                                   >> 3245   G4double gf = 0.0;
                                                   >> 3246   G4double gff = 0.0;
                                                   >> 3247   G4double gn = 0.0;
                                                   >> 3248   G4double gp = 0.0;
                                                   >> 3249   G4double gd = 0.0;
                                                   >> 3250   G4double gt = 0.0;
                                                   >> 3251   G4double gg = 0.0;
                                                   >> 3252   G4double glamb0 = 0.0;
                                                   >> 3253   G4double gimf = 0.0;
                                                   >> 3254   G4double gimf3 = 0.0;
                                                   >> 3255   G4double gimf5 = 0.0;
                                                   >> 3256   G4double bimf = 0.0;
                                                   >> 3257   G4double bsimf = 0.0;
                                                   >> 3258   G4double sbimf = 0.0;
                                                   >> 3259   G4double densimf = 0.0;
                                                   >> 3260   G4double defbetimf = 0.0;
                                                   >> 3261   G4double b_imf = 0.0;
                                                   >> 3262   G4double a_imf = 0.0;
                                                   >> 3263   G4double omegaimf = 0.0;
                                                   >> 3264   G4int izimf = 0;
                                                   >> 3265   G4double zimf = 0.0;
                                                   >> 3266   G4double gsum = 0.0;
                                                   >> 3267   G4double gtotal=0.0;
                                                   >> 3268   G4double hbar = 6.582122e-22;
                                                   >> 3269   G4double emin = 0.0;
                                                   >> 3270   G4int il = 0;
                                                   >> 3271   G4int choice_fisspart = 0;
                                                   >> 3272   G4double t_lapse=0.0;
                                                   >> 3273   G4int imaxwell = 0;
                                                   >> 3274   G4int in = 0;
                                                   >> 3275   G4int iz = 0;
                                                   >> 3276   G4int ind = 0;
                                                   >> 3277   G4int izd = 0;
                                                   >> 3278   G4int j = 0;
                                                   >> 3279   G4int k = 0;
                                                   >> 3280   G4double ma1z = 0.0;
                                                   >> 3281   G4double mazz = 0.0;
                                                   >> 3282   G4double ma2z = 0.0;
                                                   >> 3283   G4double ma1z1 = 0.0;
                                                   >> 3284   G4double ma2z1 = 0.0;
                                                   >> 3285   G4double ma3z1 = 0.0;
                                                   >> 3286   G4double ma3z2 = 0.0;
                                                   >> 3287   G4double ma4z2 = 0.0;
                                                   >> 3288   G4double maz = 0.0;
                                                   >> 3289   G4double nt = 0.0;
                                                   >> 3290   G4double pi = 3.1415926535;
                                                   >> 3291   G4double pt = 0.0;
                                                   >> 3292   G4double dt = 0.0;
                                                   >> 3293   G4double tt = 0.0;
                                                   >> 3294   G4double lamb0t = 0.0;
                                                   >> 3295   G4double gtemp = 0.0;
                                                   >> 3296   G4double rdt = 0.0;
                                                   >> 3297   G4double rtt = 0.0;
                                                   >> 3298   G4double rat = 0.0;
                                                   >> 3299   G4double rhet = 0.0;
                                                   >> 3300   G4double refmod = 0.0;
                                                   >> 3301   G4double rnt = 0.0;
                                                   >> 3302   G4double rpt = 0.0;
                                                   >> 3303   G4double rlamb0t = 0.0;
                                                   >> 3304   G4double sbfis = 1.e40;
                                                   >> 3305   G4double segs = 0.0;
                                                   >> 3306   G4double selmax = 0.0;
                                                   >> 3307   G4double tauc = 0.0;
                                                   >> 3308   G4double temp = 0.0;
                                                   >> 3309   G4double ts1 = 0.0;
                                                   >> 3310   G4double xx = 0.0;
                                                   >> 3311   G4double y = 0.0;
                                                   >> 3312   G4double k1 = 0.0;
                                                   >> 3313   G4double omegasp=0.0;
                                                   >> 3314   G4double homegasp=0.0;
                                                   >> 3315   G4double omegags=0.0;
                                                   >> 3316   G4double homegags=0.0;
                                                   >> 3317   G4double pa = 0.0;
                                                   >> 3318   G4double gamma = 0.0;
                                                   >> 3319   G4double gfactor = 0.0;
                                                   >> 3320   G4double bscn;
                                                   >> 3321   G4double bkcn;
                                                   >> 3322   G4double bccn;
                                                   >> 3323   G4double ftcn=0.0;
                                                   >> 3324   G4double mfcd;
                                                   >> 3325   G4double jprfn=jprf;
                                                   >> 3326   G4double jprfp=jprf;
                                                   >> 3327   G4double jprfd=jprf;
                                                   >> 3328   G4double jprft=jprf;
                                                   >> 3329   G4double jprfhe=jprf;
                                                   >> 3330   G4double jprfa=jprf;
                                                   >> 3331   G4double jprflamb0=jprf;
                                                   >> 3332   G4double djprf=0.0;
                                                   >> 3333   G4double dlout=0.0;
                                                   >> 3334   G4double sdlout=0.0;
                                                   >> 3335   G4double iinert=0.0;
                                                   >> 3336   G4double erot=0.0;
                                                   >> 3337   G4double erotn=0.0;
                                                   >> 3338   G4double erotp=0.0;
                                                   >> 3339   G4double erotd=0.0;
                                                   >> 3340   G4double erott=0.0;
                                                   >> 3341   G4double erothe=0.0;
                                                   >> 3342   G4double erota=0.0;
                                                   >> 3343   G4double erotlamb0=0.0;
                                                   >> 3344   G4double erotcn=0.0;
                                                   >> 3345  // G4double ecorcn=0.0;
                                                   >> 3346   G4double imfarg=0.0;
                                                   >> 3347   G4double width_imf=0.0;
                                                   >> 3348   G4int IDjprf=0;
                                                   >> 3349   G4int fimf_allowed=opt->optimfallowed;
                                                   >> 3350 
                                                   >> 3351   if(itest==1){
                                                   >> 3352 
                                                   >> 3353   }
                                                   >> 3354   // Switch to calculate Maxwellian distribution of kinetic energies
                                                   >> 3355   imaxwell = 1;
                                                   >> 3356   *sortie = 0;
                                                   >> 3357 
                                                   >> 3358   // just a change of name until the end of this subroutine                
                                                   >> 3359   eer = ee;
                                                   >> 3360   if (inum == 1) {
                                                   >> 3361     ilast = 1;
                                                   >> 3362   }
                                                   >> 3363   // calculation of masses                                           
                                                   >> 3364   // refmod = 1 ==> myers,swiatecki model                              
                                                   >> 3365   // refmod = 0 ==> weizsaecker model                                  
                                                   >> 3366   refmod = 1;  // Default = 1
                                                   >> 3367 //
                                                   >> 3368   if (refmod == 1) {
                                                   >> 3369     mglms(a,zprf,fiss->optshp,&maz);
                                                   >> 3370     mglms(a-1.0,zprf,fiss->optshp,&ma1z);
                                                   >> 3371     mglms(a-2.0,zprf,fiss->optshp,&ma2z);
                                                   >> 3372     mglms(a-1.0,zprf-1.0,fiss->optshp,&ma1z1);
                                                   >> 3373     mglms(a-2.0,zprf-1.0,fiss->optshp,&ma2z1);
                                                   >> 3374     mglms(a-3.0,zprf-1.0,fiss->optshp,&ma3z1);
                                                   >> 3375     mglms(a-3.0,zprf-2.0,fiss->optshp,&ma3z2);
                                                   >> 3376     mglms(a-4.0,zprf-2.0,fiss->optshp,&ma4z2);
                                                   >> 3377   }
                                                   >> 3378   else {
                                                   >> 3379     mglw(a,zprf,&maz);
                                                   >> 3380     mglw(a-1.0,zprf,&ma1z);
                                                   >> 3381     mglw(a-1.0,zprf-1.0,&ma1z1);
                                                   >> 3382     mglw(a-2.0,zprf-1.0,&ma2z1);
                                                   >> 3383     mglw(a-3.0,zprf-1.0,&ma3z1);
                                                   >> 3384     mglw(a-3.0,zprf-2.0,&ma3z2);
                                                   >> 3385     mglw(a-4.0,zprf-2.0,&ma4z2);
                                                   >> 3386   }
                                                   >> 3387 
                                                   >> 3388   if((a-1.)==3.0 && (zprf-1.0)==2.0) ma1z1=-7.7181660;
                                                   >> 3389   if((a-1.)==4.0 && (zprf-1.0)==2.0) ma1z1=-28.295992;
                                                   >> 3390   
                                                   >> 3391   // separation energies                     
                                                   >> 3392   sn = ma1z - maz;
                                                   >> 3393   sp = ma1z1 - maz;
                                                   >> 3394   sd = ma2z1 - maz - 2.2246;
                                                   >> 3395   st = ma3z1 - maz - 8.481977;
                                                   >> 3396   she = ma3z2 - maz - 7.7181660;
                                                   >> 3397   sa = ma4z2 - maz - 28.295992;
                                                   >> 3398   //
                                                   >> 3399   if(NbLam0>1){
                                                   >> 3400    sn = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0);
                                                   >> 3401    sp = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf-1.,NbLam0);
                                                   >> 3402    sd = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-2.,zprf-1.,NbLam0);
                                                   >> 3403    st = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-1.,NbLam0);
                                                   >> 3404    she = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-2.,NbLam0);
                                                   >> 3405    sa =  gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-4.,zprf-2.,NbLam0);
                                                   >> 3406    slamb0 = gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0-1);
                                                   >> 3407   }
                                                   >> 3408    if(NbLam0==1){
                                                   >> 3409    G4double deltasn = sn - (gethyperbinding(a,zprf,0)-gethyperbinding(a-1.,zprf,0));
                                                   >> 3410    G4double deltasp = sp - (gethyperbinding(a,zprf,0)-gethyperbinding(a-1.,zprf-1,0));
                                                   >> 3411    G4double deltasd = sd - (gethyperbinding(a,zprf,0)-gethyperbinding(a-2.,zprf-1,0));
                                                   >> 3412    G4double deltast = st - (gethyperbinding(a,zprf,0)-gethyperbinding(a-3.,zprf-1,0));
                                                   >> 3413    G4double deltashe = she - (gethyperbinding(a,zprf,0)-gethyperbinding(a-3.,zprf-2,0));
                                                   >> 3414    G4double deltasa = sa - (gethyperbinding(a,zprf,0)-gethyperbinding(a-4.,zprf-2,0));
                                                   >> 3415 
                                                   >> 3416    sn = deltasn + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf,NbLam0);
                                                   >> 3417    sp = deltasp + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-1.,zprf-1.,NbLam0);
                                                   >> 3418    sd = deltasd + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-2.,zprf-1.,NbLam0);
                                                   >> 3419    st = deltast + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-1.,NbLam0);
                                                   >> 3420    she = deltashe + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-3.,zprf-2.,NbLam0);
                                                   >> 3421    sa = deltasa + gethyperbinding(a,zprf,NbLam0)-gethyperbinding(a-4.,zprf-2.,NbLam0);
                                                   >> 3422    slamb0 = gethyperseparation(a,zprf,NbLam0);
                                                   >> 3423   }
                                                   >> 3424 
                                                   >> 3425 // coulomb barriers
                                                   >> 3426 //Proton
                                                   >> 3427   if (zprf <= 1.0e0 || a <= 1.0e0 || (a-zprf) < 0.0) {
                                                   >> 3428     sbp = 1.0e75;
                                                   >> 3429     bp = 1.0e75;
                                                   >> 3430   }else{
                                                   >> 3431   barrs(idnint(zprf-1.),idnint(a-1.),1,1,&bp,&omegap);
                                                   >> 3432   bp = max(bp,0.1);
                                                   >> 3433   sbp = sp + bp;
                                                   >> 3434   }
                                                   >> 3435 
                                                   >> 3436 //Deuteron
                                                   >> 3437   if (zprf <= 1.0e0 || a <= 2.0e0 || (a-zprf) < 1.0) {
                                                   >> 3438     sbd = 1.0e75;
                                                   >> 3439     bd = 1.0e75;
                                                   >> 3440   }else{
                                                   >> 3441   barrs(idnint(zprf-1.),idnint(a-2.),1,2,&bd,&omegad);
                                                   >> 3442   bd = max(bd,0.1);
                                                   >> 3443   sbd = sd + bd;
                                                   >> 3444   }
                                                   >> 3445 
                                                   >> 3446 //Triton
                                                   >> 3447   if (zprf <= 1.0e0 || a <= 3.0e0 || (a-zprf) < 2.0) {
                                                   >> 3448     sbt = 1.0e75;
                                                   >> 3449     bt = 1.0e75;
                                                   >> 3450   }else{
                                                   >> 3451   barrs(idnint(zprf-1.),idnint(a-3.),1,3,&bt,&omegat);
                                                   >> 3452   bt = max(bt,0.1);
                                                   >> 3453   sbt = st + bt;
                                                   >> 3454   }
                                                   >> 3455 
                                                   >> 3456 //Alpha
                                                   >> 3457   if (a-4.0<=0.0 || zprf<=2.0 || (a-zprf)<2.0) {
                                                   >> 3458     sba = 1.0e+75;
                                                   >> 3459     ba = 1.0e+75;
                                                   >> 3460   }else{
                                                   >> 3461   barrs(idnint(zprf-2.),idnint(a-4.),2,4,&ba,&omegaa);
                                                   >> 3462   ba = max(ba,0.1);
                                                   >> 3463   sba = sa + ba;
                                                   >> 3464   }
                                                   >> 3465 
                                                   >> 3466 //He3
                                                   >> 3467   if (a-3.0 <= 0.0 || zprf<=2.0 || (a-zprf)<1.0) {
                                                   >> 3468     sbhe = 1.0e+75;
                                                   >> 3469     bhe = 1.0e+75;
                                                   >> 3470   }else{
                                                   >> 3471   barrs(idnint(zprf-2.),idnint(a-3.),2,3,&bhe,&omegahe);
                                                   >> 3472   bhe = max(bhe,0.1);
                                                   >> 3473   sbhe = she + bhe;
                                                   >> 3474   }
                                                   >> 3475 
                                                   >> 3476 // Dealing with particle-unbound systems
                                                   >> 3477    emin = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd)));
                                                   >> 3478 
                                                   >> 3479    if(emin<=0.0){
                                                   >> 3480    *sortie = 1;
                                                   >> 3481    unbound(sn,sp,sd,st,she,sa,bp,bd,bt,bhe,ba,&probf,&probn,&probp,&probd,&probt,&probhe,&proba,&probimf,&probg,&ecn,&ecp,&ecd,&ect,&eche,&eca);
                                                   >> 3482    goto direct70;
                                                   >> 3483    }
                                                   >> 3484 //
                                                   >> 3485   k = idnint(zprf);
                                                   >> 3486   j = idnint(a - zprf);
                                                   >> 3487   if (fiss->ifis > 0) {
                                                   >> 3488     // now ef is calculated from efa that depends on the subroutine
                                                   >> 3489     // barfit which takes into account the modification on the ang. mom.
                                                   >> 3490     // note *** shell correction (ecgnz)
                                                   >> 3491     il = idnint(jprf);
                                                   >> 3492     barfit(k,k+j,il,&sbfis,&segs,&selmax);
                                                   >> 3493     if ((fiss->optshp == 1) || (fiss->optshp == 3)) {
                                                   >> 3494        ef = G4double(sbfis) -  ecld->ecgnz[j][k];
                                                   >> 3495 // JLRS - Nov 2016 - Corrected values of fission barriers for actinides
                                                   >> 3496      if(k==90){
                                                   >> 3497       if(mod(j,2)==1){
                                                   >> 3498          ef = ef*(4.5114-2.2687*(a-zprf)/zprf);
4429       }else{                                     3499       }else{
4430     // If EE < EROT, only gamma emission can  << 3500          ef = ef*(3.3931-1.5338*(a-zprf)/zprf);
4431              probf = 0.0;                     << 3501       }
4432              probp = 0.0;                     << 3502      }
4433              probd = 0.0;                     << 3503      if(k==92){
4434              probt = 0.0;                     << 3504      if((a-zprf)/zprf>1.52)ef=ef*(1.1222-0.10886*(a-zprf)/zprf)-0.1;
4435              probn = 0.0;                     << 3505      }
4436              probhe = 0.0;                    << 3506      if(k>=94&&k<=98&&j<158){// Data in this range have been tested
4437              proba = 0.0;                     << 3507 // e-e
4438              probg = 1.0;                     << 3508         if(mod(j,2)==0&&mod(k,2)==0){
4439              probimf = 0.0;                   << 3509         if(k>=94){ef = ef-(11.54108*(a-zprf)/zprf-18.074);}
4440     //c JLRS 03/2017 - Added this calculation << 3510         }
4441     //C According to A. Ignatyuk, GG :        << 3511 // O-O
4442     //C Here BS=BK=1, as this was assumed in  << 3512         if(mod(j,2)==1&&mod(k,2)==1){
4443              pa = (ald->av)*a + (ald->as)*std << 3513         if(k>=95){ef = ef-(14.567*(a-zprf)/zprf-23.266);}
4444     (ald->ak)*std::pow(a,1./3.); gamma = 2.5  << 3514         }
4445     = 1.+gamma*ecld->ecgnz[in][iz]; if(gfacto << 3515 // Odd A
4446              }                                << 3516         if(mod(j,2)==0&&mod(k,2)==1){
4447     //                                        << 3517         if(j>=144){ef = ef-(13.662*(a-zprf)/zprf-21.656);}
4448              gtemp = 17.60/(std::pow(a,0.699) << 3518         }
4449              ecg = 4.0 * gtemp;               << 3519 
4450     //                                        << 3520         if(mod(j,2)==1&&mod(k,2)==0){
4451              goto direct70;                   << 3521         if(j>=144){ef = ef-(13.662*(a-zprf)/zprf-21.656);}
4452       }                                       << 3522         }
4453     */                                        << 3523      }
4454                                               << 3524     } 
4455     //  ------------------------------------- << 3525     else {
4456     //        LEVEL DENSITIES AND TEMPERATURE << 3526       ef = G4double(sbfis);
4457     //  ------------------------------------- << 
4458     //                                        << 
4459     //  MVR - in case of charged particle emi << 
4460     //  comes from random kinetic energy from << 
4461     //  if option imaxwell = 1 (otherwise E=2 << 
4462     //                                        << 
4463     //  AK - LEVEL DENSITY AND TEMPERATURE AT << 
4464     //  in the subroutine FISSION_WIDTH       << 
4465     //                                        << 
4466     //                                        << 
4467     // LEVEL DENSITY AND TEMPERATURE IN THE N << 
4468     //                                        << 
4469     // KHS, AK 2007 - Reduction of angular mo << 
4470     // momentum of emitted fragment JLRS Nov- << 
4471     // abla++                                 << 
4472                                               << 
4473     if (in >= 2)                              << 
4474     {                                         << 
4475         ind = idnint(a) - idnint(zprf) - 1;   << 
4476         izd = idnint(zprf);                   << 
4477         if (jprf > 0.10)                      << 
4478         {                                     << 
4479             lorb(a, a - 1., jprf, ee - sn, &d << 
4480             djprf = gausshaz(1, dlout, sdlout << 
4481             if (IDjprf == 1)                  << 
4482                 djprf = 0.0;                  << 
4483             jprfn = jprf + djprf;             << 
4484             jprfn = dint(std::abs(jprfn)); // << 
4485         }                                     << 
4486         bshell = ecld->ecgnz[ind][izd] - ecld << 
4487         defbet = ecld->beta2[ind][izd];       << 
4488                                               << 
4489         iinert =                              << 
4490             0.4 * 931.49 * 1.16 * 1.16 * std: << 
4491         erotn = jprfn * jprfn * 197.328 * 197 << 
4492         bsbkbc(a - 1., zprf, &bs, &bk, &bc);  << 
4493                                               << 
4494         // level density and temperature in t << 
4495         densniv(a - 1.0,                      << 
4496                 zprf,                         << 
4497                 ee,                           << 
4498                 sn,                           << 
4499                 &densn,                       << 
4500                 bshell,                       << 
4501                 bs,                           << 
4502                 bk,                           << 
4503                 &temp,                        << 
4504                 fiss->optshp,                 << 
4505                 fiss->optcol,                 << 
4506                 defbet,                       << 
4507                 &ecor,                        << 
4508                 jprfn,                        << 
4509                 0,                            << 
4510                 &qr);                         << 
4511         nt = temp;                            << 
4512         ecn = 0.0;                            << 
4513         if (densn > 0.)                       << 
4514         {                                     << 
4515             G4int IS = 0;                     << 
4516             if (imaxwell == 1)                << 
4517             {                                 << 
4518                 rnt = nt;                     << 
4519             dir1234:                          << 
4520                 ecn = fvmaxhaz_neut(rnt);     << 
4521                 IS++;                         << 
4522                 if (IS > 100)                 << 
4523                 {                             << 
4524                     std::cout << "WARNING: FV << 
4525                     goto exi1000;             << 
4526                 }                             << 
4527                 if (ecn > (ee - sn))          << 
4528                 {                             << 
4529                     if ((ee - sn) < rnt)      << 
4530                         ecn = ee - sn;        << 
4531                     else                      << 
4532                         goto dir1234;         << 
4533                 }                             << 
4534                 if (ecn <= 0.0)               << 
4535                     goto dir1234;             << 
4536             }                                 << 
4537             else                              << 
4538             {                                 << 
4539                 ecn = 2.0 * nt;               << 
4540             }                                 << 
4541         }                                     << 
4542     }                                         << 
4543     else                                      << 
4544     {                                         << 
4545         densn = 0.0;                          << 
4546         ecn = 0.0;                            << 
4547         nt = 0.0;                             << 
4548     }                                         << 
4549 exi1000:                                      << 
4550                                               << 
4551     // LEVEL DENSITY AND TEMPERATURE IN THE P << 
4552     //                                        << 
4553     // Reduction of angular momentum due to o << 
4554     // fragment                               << 
4555     if (iz >= 2)                              << 
4556     {                                         << 
4557         ind = idnint(a) - idnint(zprf);       << 
4558         izd = idnint(zprf) - 1;               << 
4559         if (jprf > 0.10)                      << 
4560         {                                     << 
4561             lorb(a, a - 1., jprf, ee - sbp, & << 
4562             djprf = gausshaz(1, dlout, sdlout << 
4563             if (IDjprf == 1)                  << 
4564                 djprf = 0.0;                  << 
4565             jprfp = jprf + djprf;             << 
4566             jprfp = dint(std::abs(jprfp)); // << 
4567         }                                     << 
4568         bshell = ecld->ecgnz[ind][izd] - ecld << 
4569         defbet = ecld->beta2[ind][izd];       << 
4570                                               << 
4571         iinert =                              << 
4572             0.4 * 931.49 * 1.16 * 1.16 * std: << 
4573         erotp = jprfp * jprfp * 197.328 * 197 << 
4574                                               << 
4575         bsbkbc(a - 1., zprf - 1., &bs, &bk, & << 
4576                                               << 
4577         // level density and temperature in t << 
4578         densniv(a - 1.0,                      << 
4579                 zprf - 1.0,                   << 
4580                 ee,                           << 
4581                 sbp,                          << 
4582                 &densp,                       << 
4583                 bshell,                       << 
4584                 bs,                           << 
4585                 bk,                           << 
4586                 &temp,                        << 
4587                 fiss->optshp,                 << 
4588                 fiss->optcol,                 << 
4589                 defbet,                       << 
4590                 &ecor,                        << 
4591                 jprfp,                        << 
4592                 0,                            << 
4593                 &qr);                         << 
4594         pt = temp;                            << 
4595         ecp = 0.;                             << 
4596         if (densp > 0.)                       << 
4597         {                                     << 
4598             G4int IS = 0;                     << 
4599             if (imaxwell == 1)                << 
4600             {                                 << 
4601                 rpt = pt;                     << 
4602             dir1235:                          << 
4603                 ecp = fvmaxhaz(rpt);          << 
4604                 IS++;                         << 
4605                 if (IS > 100)                 << 
4606                 {                             << 
4607                     std::cout << "WARNING: FV << 
4608                     goto exi1001;             << 
4609                 }                             << 
4610                 if (ecp > (ee - sbp))         << 
4611                 {                             << 
4612                     if ((ee - sbp) < rpt)     << 
4613                         ecp = ee - sbp;       << 
4614                     else                      << 
4615                         goto dir1235;         << 
4616                 }                             << 
4617                 if (ecp <= 0.0)               << 
4618                     goto dir1235;             << 
4619                 ecp = ecp + bp;               << 
4620             }                                 << 
4621             else                              << 
4622             {                                 << 
4623                 ecp = 2.0 * pt + bp;          << 
4624             }                                 << 
4625         }                                     << 
4626     }                                         << 
4627     else                                      << 
4628     {                                         << 
4629         densp = 0.0;                          << 
4630         ecp = 0.0;                            << 
4631         pt = 0.0;                             << 
4632     }                                         << 
4633 exi1001:                                      << 
4634                                               << 
4635     //  FINAL LEVEL DENSITY AND TEMPERATURE A << 
4636     //                                        << 
4637     // Reduction of angular momentum due to o << 
4638     // fragment                               << 
4639     if ((in >= 2) && (iz >= 2))               << 
4640     {                                         << 
4641         ind = idnint(a) - idnint(zprf) - 1;   << 
4642         izd = idnint(zprf) - 1;               << 
4643         if (jprf > 0.10)                      << 
4644         {                                     << 
4645             lorb(a, a - 2., jprf, ee - sbd, & << 
4646             djprf = gausshaz(1, dlout, sdlout << 
4647             if (IDjprf == 1)                  << 
4648                 djprf = 0.0;                  << 
4649             jprfd = jprf + djprf;             << 
4650             jprfd = dint(std::abs(jprfd)); // << 
4651         }                                     << 
4652         bshell = ecld->ecgnz[ind][izd] - ecld << 
4653         defbet = ecld->beta2[ind][izd];       << 
4654                                               << 
4655         iinert =                              << 
4656             0.4 * 931.49 * 1.16 * 1.16 * std: << 
4657         erotd = jprfd * jprfd * 197.328 * 197 << 
4658                                               << 
4659         bsbkbc(a - 2., zprf - 1., &bs, &bk, & << 
4660                                               << 
4661         // level density and temperature in t << 
4662         densniv(a - 2.0,                      << 
4663                 zprf - 1.0e0,                 << 
4664                 ee,                           << 
4665                 sbd,                          << 
4666                 &densd,                       << 
4667                 bshell,                       << 
4668                 bs,                           << 
4669                 bk,                           << 
4670                 &temp,                        << 
4671                 fiss->optshp,                 << 
4672                 fiss->optcol,                 << 
4673                 defbet,                       << 
4674                 &ecor,                        << 
4675                 jprfd,                        << 
4676                 0,                            << 
4677                 &qr);                         << 
4678                                               << 
4679         dt = temp;                            << 
4680         ecd = 0.0;                            << 
4681         if (densd > 0.)                       << 
4682         {                                     << 
4683             G4int IS = 0;                     << 
4684             if (imaxwell == 1)                << 
4685             {                                 << 
4686                 rdt = dt;                     << 
4687             dir1236:                          << 
4688                 ecd = fvmaxhaz(rdt);          << 
4689                 IS++;                         << 
4690                 if (IS > 100)                 << 
4691                 {                             << 
4692                     std::cout << "WARNING: FV << 
4693                     goto exi1002;             << 
4694                 }                             << 
4695                 if (ecd > (ee - sbd))         << 
4696                 {                             << 
4697                     if ((ee - sbd) < rdt)     << 
4698                         ecd = ee - sbd;       << 
4699                     else                      << 
4700                         goto dir1236;         << 
4701                 }                             << 
4702                 if (ecd <= 0.0)               << 
4703                     goto dir1236;             << 
4704                 ecd = ecd + bd;               << 
4705             }                                 << 
4706             else                              << 
4707             {                                 << 
4708                 ecd = 2.0 * dt + bd;          << 
4709             }                                 << 
4710         }                                     << 
4711     }                                         << 
4712     else                                      << 
4713     {                                         << 
4714         densd = 0.0;                          << 
4715         ecd = 0.0;                            << 
4716         dt = 0.0;                             << 
4717     }                                         << 
4718 exi1002:                                      << 
4719                                               << 
4720     //  FINAL LEVEL DENSITY AND TEMPERATURE A << 
4721     //                                        << 
4722     // Reduction of angular momentum due to o << 
4723     // fragment                               << 
4724     if ((in >= 3) && (iz >= 2))               << 
4725     {                                         << 
4726         ind = idnint(a) - idnint(zprf) - 2;   << 
4727         izd = idnint(zprf) - 1;               << 
4728         if (jprf > 0.10)                      << 
4729         {                                     << 
4730             lorb(a, a - 3., jprf, ee - sbt, & << 
4731             djprf = gausshaz(1, dlout, sdlout << 
4732             if (IDjprf == 1)                  << 
4733                 djprf = 0.0;                  << 
4734             jprft = jprf + djprf;             << 
4735             jprft = dint(std::abs(jprft)); // << 
4736         }                                     << 
4737         bshell = ecld->ecgnz[ind][izd] - ecld << 
4738         defbet = ecld->beta2[ind][izd];       << 
4739                                               << 
4740         iinert =                              << 
4741             0.4 * 931.49 * 1.16 * 1.16 * std: << 
4742         erott = jprft * jprft * 197.328 * 197 << 
4743                                               << 
4744         bsbkbc(a - 3., zprf - 1., &bs, &bk, & << 
4745                                               << 
4746         // level density and temperature in t << 
4747         densniv(a - 3.0,                      << 
4748                 zprf - 1.0,                   << 
4749                 ee,                           << 
4750                 sbt,                          << 
4751                 &denst,                       << 
4752                 bshell,                       << 
4753                 bs,                           << 
4754                 bk,                           << 
4755                 &temp,                        << 
4756                 fiss->optshp,                 << 
4757                 fiss->optcol,                 << 
4758                 defbet,                       << 
4759                 &ecor,                        << 
4760                 jprft,                        << 
4761                 0,                            << 
4762                 &qr);                         << 
4763                                               << 
4764         tt = temp;                            << 
4765         ect = 0.;                             << 
4766         if (denst > 0.)                       << 
4767         {                                     << 
4768             G4int IS = 0;                     << 
4769             if (imaxwell == 1)                << 
4770             {                                 << 
4771                 rtt = tt;                     << 
4772             dir1237:                          << 
4773                 ect = fvmaxhaz(rtt);          << 
4774                 IS++;                         << 
4775                 if (IS > 100)                 << 
4776                 {                             << 
4777                     std::cout << "WARNING: FV << 
4778                     goto exi1003;             << 
4779                 }                             << 
4780                 if (ect > (ee - sbt))         << 
4781                 {                             << 
4782                     if ((ee - sbt) < rtt)     << 
4783                         ect = ee - sbt;       << 
4784                     else                      << 
4785                         goto dir1237;         << 
4786                 }                             << 
4787                 if (ect <= 0.0)               << 
4788                     goto dir1237;             << 
4789                 ect = ect + bt;               << 
4790             }                                 << 
4791             else                              << 
4792             {                                 << 
4793                 ect = 2.0 * tt + bt;          << 
4794             }                                 << 
4795         }                                     << 
4796     }                                         << 
4797     else                                      << 
4798     {                                         << 
4799         denst = 0.0;                          << 
4800         ect = 0.0;                            << 
4801         tt = 0.0;                             << 
4802     }                                         << 
4803 exi1003:                                      << 
4804                                               << 
4805     // LEVEL DENSITY AND TEMPERATURE IN THE A << 
4806     //                                        << 
4807     // Reduction of angular momentum due to o << 
4808     // fragment                               << 
4809     if ((in >= 3) && (iz >= 3))               << 
4810     {                                         << 
4811         ind = idnint(a) - idnint(zprf) - 2;   << 
4812         izd = idnint(zprf) - 2;               << 
4813         if (jprf > 0.10)                      << 
4814         {                                     << 
4815             lorb(a, a - 4., jprf, ee - sba, & << 
4816             djprf = gausshaz(1, dlout, sdlout << 
4817             if (IDjprf == 1)                  << 
4818                 djprf = 0.0;                  << 
4819             jprfa = jprf + djprf;             << 
4820             jprfa = dint(std::abs(jprfa)); // << 
4821         }                                     << 
4822         bshell = ecld->ecgnz[ind][izd] - ecld << 
4823         defbet = ecld->beta2[ind][izd];       << 
4824                                               << 
4825         iinert =                              << 
4826             0.4 * 931.49 * 1.16 * 1.16 * std: << 
4827         erota = jprfa * jprfa * 197.328 * 197 << 
4828                                               << 
4829         bsbkbc(a - 4., zprf - 2., &bs, &bk, & << 
4830                                               << 
4831         // level density and temperature in t << 
4832         densniv(a - 4.0,                      << 
4833                 zprf - 2.0,                   << 
4834                 ee,                           << 
4835                 sba,                          << 
4836                 &densa,                       << 
4837                 bshell,                       << 
4838                 bs,                           << 
4839                 bk,                           << 
4840                 &temp,                        << 
4841                 fiss->optshp,                 << 
4842                 fiss->optcol,                 << 
4843                 defbet,                       << 
4844                 &ecor,                        << 
4845                 jprfa,                        << 
4846                 0,                            << 
4847                 &qr);                         << 
4848                                               << 
4849         at = temp;                            << 
4850         eca = 0.0;                            << 
4851         if (densa > 0.)                       << 
4852         {                                     << 
4853             G4int IS = 0;                     << 
4854             if (imaxwell == 1)                << 
4855             {                                 << 
4856                 rat = at;                     << 
4857             dir1238:                          << 
4858                 eca = fvmaxhaz(rat);          << 
4859                 IS++;                         << 
4860                 if (IS > 100)                 << 
4861                 {                             << 
4862                     std::cout << "WARNING: FV << 
4863                     goto exi1004;             << 
4864                 }                             << 
4865                 if (eca > (ee - sba))         << 
4866                 {                             << 
4867                     if ((ee - sba) < rat)     << 
4868                         eca = ee - sba;       << 
4869                     else                      << 
4870                         goto dir1238;         << 
4871                 }                             << 
4872                 if (eca <= 0.0)               << 
4873                     goto dir1238;             << 
4874                 eca = eca + ba;               << 
4875             }                                 << 
4876             else                              << 
4877             {                                 << 
4878                 eca = 2.0 * at + ba;          << 
4879             }                                 << 
4880         }                                     << 
4881     }                                         << 
4882     else                                      << 
4883     {                                         << 
4884         densa = 0.0;                          << 
4885         eca = 0.0;                            << 
4886         at = 0.0;                             << 
4887     }                                         << 
4888 exi1004:                                      << 
4889                                               << 
4890     //  FINAL LEVEL DENSITY AND TEMPERATURE A << 
4891     //                                        << 
4892     // Reduction of angular momentum due to o << 
4893     // fragment                               << 
4894     if ((in >= 2) && (iz >= 3))               << 
4895     {                                         << 
4896         ind = idnint(a) - idnint(zprf) - 1;   << 
4897         izd = idnint(zprf) - 2;               << 
4898         if (jprf > 0.10)                      << 
4899         {                                     << 
4900             lorb(a, a - 3., jprf, ee - sbhe,  << 
4901             djprf = gausshaz(1, dlout, sdlout << 
4902             if (IDjprf == 1)                  << 
4903                 djprf = 0.0;                  << 
4904             jprfhe = jprf + djprf;            << 
4905             jprfhe = dint(std::abs(jprfhe));  << 
4906         }                                     << 
4907         bshell = ecld->ecgnz[ind][izd] - ecld << 
4908         defbet = ecld->beta2[ind][izd];       << 
4909                                               << 
4910         iinert =                              << 
4911             0.4 * 931.49 * 1.16 * 1.16 * std: << 
4912         erothe = jprfhe * jprfhe * 197.328 *  << 
4913                                               << 
4914         bsbkbc(a - 3., zprf - 2., &bs, &bk, & << 
4915                                               << 
4916         // level density and temperature in t << 
4917         densniv(a - 3.0,                      << 
4918                 zprf - 2.0,                   << 
4919                 ee,                           << 
4920                 sbhe,                         << 
4921                 &denshe,                      << 
4922                 bshell,                       << 
4923                 bs,                           << 
4924                 bk,                           << 
4925                 &temp,                        << 
4926                 fiss->optshp,                 << 
4927                 fiss->optcol,                 << 
4928                 defbet,                       << 
4929                 &ecor,                        << 
4930                 jprfhe,                       << 
4931                 0,                            << 
4932                 &qr);                         << 
4933                                               << 
4934         het = temp;                           << 
4935         eche = 0.0;                           << 
4936         if (denshe > 0.)                      << 
4937         {                                     << 
4938             G4int IS = 0;                     << 
4939             if (imaxwell == 1)                << 
4940             {                                 << 
4941                 rhet = het;                   << 
4942             dir1239:                          << 
4943                 eche = fvmaxhaz(rhet);        << 
4944                 IS++;                         << 
4945                 if (IS > 100)                 << 
4946                 {                             << 
4947                     std::cout << "WARNING: FV << 
4948                     goto exi1005;             << 
4949                 }                             << 
4950                 if (eche > (ee - sbhe))       << 
4951                 {                             << 
4952                     if ((ee - sbhe) < rhet)   << 
4953                         eche = ee - sbhe;     << 
4954                     else                      << 
4955                         goto dir1239;         << 
4956                 }                             << 
4957                 if (eche <= 0.0)              << 
4958                     goto dir1239;             << 
4959                 eche = eche + bhe;            << 
4960             }                                 << 
4961             else                              << 
4962             {                                 << 
4963                 eche = 2.0 * het + bhe;       << 
4964             }                                 << 
4965         }                                     << 
4966     }                                            3527     }
4967     else                                      << 3528 //
4968     {                                         << 3529 // TO AVOID NEGATIVE VALUES FOR IMPOSSIBLE NUCLEI
4969         denshe = 0.0;                         << 3530 // THE FISSION BARRIER IS SET TO ZERO IF SMALLER THAN ZERO.
4970         eche = 0.0;                           << 3531 //                                    
4971         het = 0.0;                            << 3532     if (ef < 0.0)ef = 0.0;
4972     }                                         << 3533     fb->efa[j][k]=ef;
4973 exi1005:                                      << 3534 //
4974                                               << 3535 // Hyper-fission barrier
4975     // LEVEL DENSITY AND TEMPERATURE IN THE L << 3536 //
4976     //                                        << 3537     if(NbLam0>0){
4977     // - Reduction of angular momentum due to << 3538      ef = ef + 0.51*(1115.-938.+sn-slamb0)/std::pow(a,2./3.);
4978     // fragment JLRS Jun-2017 - Added these c << 
4979                                               << 
4980     if (in >= 2 && NbLam0 > 0)                << 
4981     {                                         << 
4982         ind = idnint(a) - idnint(zprf) - 1;   << 
4983         izd = idnint(zprf);                   << 
4984         if (jprf > 0.10)                      << 
4985         {                                     << 
4986             lorb(a, a - 1., jprf, ee - slamb0 << 
4987             djprf = gausshaz(1, dlout, sdlout << 
4988             if (IDjprf == 1)                  << 
4989                 djprf = 0.0;                  << 
4990             jprflamb0 = jprf + djprf;         << 
4991             jprflamb0 = dint(std::abs(jprflam << 
4992         }                                     << 
4993         bshell = ecld->ecgnz[ind][izd] - ecld << 
4994         defbet = ecld->beta2[ind][izd];       << 
4995                                               << 
4996         iinert =                              << 
4997             0.4 * 931.49 * 1.16 * 1.16 * std: << 
4998         erotlamb0 = jprflamb0 * jprflamb0 * 1 << 
4999         bsbkbc(a - 1., zprf, &bs, &bk, &bc);  << 
5000                                               << 
5001         // level density and temperature in t << 
5002         densniv(a - 1.0,                      << 
5003                 zprf,                         << 
5004                 ee,                           << 
5005                 slamb0,                       << 
5006                 &denslamb0,                   << 
5007                 bshell,                       << 
5008                 bs,                           << 
5009                 bk,                           << 
5010                 &temp,                        << 
5011                 fiss->optshp,                 << 
5012                 fiss->optcol,                 << 
5013                 defbet,                       << 
5014                 &ecor,                        << 
5015                 jprflamb0,                    << 
5016                 0,                            << 
5017                 &qr);                         << 
5018         lamb0t = temp;                        << 
5019         eclamb0 = 0.0;                        << 
5020         if (denslamb0 > 0.)                   << 
5021         {                                     << 
5022             G4int IS = 0;                     << 
5023             if (imaxwell == 1)                << 
5024             {                                 << 
5025                 rlamb0t = lamb0t;             << 
5026             dir1240:                          << 
5027                 eclamb0 = fvmaxhaz_neut(rlamb << 
5028                 IS++;                         << 
5029                 if (IS > 100)                 << 
5030                 {                             << 
5031                     std::cout << "WARNING: FV << 
5032                     goto exi1006;             << 
5033                 }                             << 
5034                 if (eclamb0 > (ee - slamb0))  << 
5035                 {                             << 
5036                     if ((ee - slamb0) < rlamb << 
5037                         eclamb0 = ee - slamb0 << 
5038                     else                      << 
5039                         goto dir1240;         << 
5040                 }                             << 
5041                 if (eclamb0 <= 0.0)           << 
5042                     goto dir1240;             << 
5043             }                                 << 
5044             else                              << 
5045             {                                 << 
5046                 eclamb0 = 2.0 * lamb0t;       << 
5047             }                                 << 
5048         }                                     << 
5049     }                                            3539     }
5050     else                                      << 3540 //
5051     {                                         << 3541 // Set fission barrier
5052         denslamb0 = 0.0;                      << 3542 //
5053         eclamb0 = 0.0;                        << 3543     (*ef_par) = ef;
5054         lamb0t = 0.0;                         << 3544 //
5055     }                                         << 3545   // calculation of surface and curvature integrals needed to      
5056 exi1006:                                      << 3546   // to calculate the level density parameter at the saddle point
5057                                               << 3547     xx = fissility((k+j),k,NbLam0,sn,slamb0,fiss->optxfis);
5058     // Decay widths for particles             << 3548     y = 1.00 - xx;
5059     if (densg > 0.)                           << 3549     if(y<0.0) y = 0.0;
5060     {                                         << 3550     if(y>1.0) y = 1.0;
5061         //                                    << 3551     bssp = bipol(1,y);
5062         // CALCULATION OF THE PARTIAL DECAY W << 3552     bksp = bipol(2,y);
5063         // USED FOR BOTH THE TIME SCALE AND T << 3553   }
5064         //                                    << 3554   else {
5065         //      AKAP = HBAR**2/(2* MN * R_0** << 3555     ef = 1.0e40;
5066         //                                    << 3556     sbfis = 1.0e40;
5067         // AK, KHS 2005 - Energy-dependen inv << 3557     bssp = 1.0;
5068         // of                                 << 3558     bksp = 1.0;
5069         //                Coulomb barrier for << 3559   }
5070         // JLRS 2017 - Implementation in abla << 3560 //
5071                                               << 3561 // COMPOUND NUCLEUS LEVEL DENSITY
5072         if (densn <= 0.0)                     << 3562 //
5073         {                                     << 3563 //  AK 2007 - Now DENSNIV called with correct BS, BK
5074             gn = 0.0;                         << 
5075         }                                     << 
5076         else                                  << 
5077         {                                     << 
5078             gn = width(a, zprf, 1.0, 0.0, nt, << 
5079         }                                     << 
5080         if (densp <= 0.0)                     << 
5081         {                                     << 
5082             gp = 0.0;                         << 
5083         }                                     << 
5084         else                                  << 
5085         {                                     << 
5086             gp = width(a, zprf, 1.0, 1.0, pt, << 
5087         }                                     << 
5088         if (densd <= 0.0)                     << 
5089         {                                     << 
5090             gd = 0.0;                         << 
5091         }                                     << 
5092         else                                  << 
5093         {                                     << 
5094             gd = width(a, zprf, 2.0, 1.0, dt, << 
5095         }                                     << 
5096         if (denst <= 0.0)                     << 
5097         {                                     << 
5098             gt = 0.0;                         << 
5099         }                                     << 
5100         else                                  << 
5101         {                                     << 
5102             gt = width(a, zprf, 3.0, 1.0, tt, << 
5103         }                                     << 
5104         if (denshe <= 0.0)                    << 
5105         {                                     << 
5106             ghe = 0.0;                        << 
5107         }                                     << 
5108         else                                  << 
5109         {                                     << 
5110             ghe = width(a, zprf, 3.0, 2.0, he << 
5111         }                                     << 
5112         if (densa <= 0.0)                     << 
5113         {                                     << 
5114             ga = 0.0;                         << 
5115         }                                     << 
5116         else                                  << 
5117         {                                     << 
5118             ga = width(a, zprf, 4.0, 2.0, at, << 
5119         }                                     << 
5120         if (denslamb0 <= 0.0)                 << 
5121         {                                     << 
5122             glamb0 = 0.0;                     << 
5123         }                                     << 
5124         else                                  << 
5125         {                                     << 
5126             glamb0 = width(a, zprf, 1.0, -2.0 << 
5127         }                                     << 
5128                                               << 
5129         //     **************************     << 
5130         //     *  Treatment of IMFs     *     << 
5131         //     * KHS, AK, MVR 2005-2006 *     << 
5132         //     **************************     << 
5133                                                  3564 
5134         G4int izcn = 0, incn = 0, inmin = 0,  << 3565   afp = idnint(a);
5135         G4double aimf, mares, maimf;          << 3566   iz = idnint(zprf);
                                                   >> 3567   in = afp - iz;
                                                   >> 3568   bshell = ecld->ecgnz[in][iz]- ecld->vgsld[in][iz];
                                                   >> 3569   defbet = ecld->beta2[in][iz];
                                                   >> 3570 
                                                   >> 3571   iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
                                                   >> 3572   erot = jprf * jprf * 197.328 * 197.328 /(2. * iinert);
                                                   >> 3573   erotcn = erot;
                                                   >> 3574 
                                                   >> 3575   bsbkbc(a,zprf,&bscn,&bkcn,&bccn);
                                                   >> 3576 
                                                   >> 3577  // if(ee > erot+emin){
                                                   >> 3578   densniv(a,zprf,ee,0.0,&densg,bshell,bscn,bkcn,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprf,0,&qrcn);
                                                   >> 3579   ftcn = temp;
                                                   >> 3580 /*
                                                   >> 3581   //ecorcn = ecor;
                                                   >> 3582   }else{
                                                   >> 3583 // If EE < EROT, only gamma emission can take place
                                                   >> 3584          probf = 0.0;
                                                   >> 3585      probp = 0.0;
                                                   >> 3586      probd = 0.0;
                                                   >> 3587      probt = 0.0;
                                                   >> 3588      probn = 0.0;
                                                   >> 3589      probhe = 0.0;
                                                   >> 3590      proba = 0.0;
                                                   >> 3591      probg = 1.0;
                                                   >> 3592          probimf = 0.0;
                                                   >> 3593 //c JLRS 03/2017 - Added this calculation
                                                   >> 3594 //C According to A. Ignatyuk, GG :
                                                   >> 3595 //C Here BS=BK=1, as this was assumed in the parameterization
                                                   >> 3596          pa = (ald->av)*a + (ald->as)*std::pow(a,2./3.) + (ald->ak)*std::pow(a,1./3.);
                                                   >> 3597          gamma = 2.5 * pa * std::pow(a,-4./3.);
                                                   >> 3598          gfactor = 1.+gamma*ecld->ecgnz[in][iz];
                                                   >> 3599          if(gfactor<=0.){
                                                   >> 3600           gfactor = 0.0;
                                                   >> 3601          }
                                                   >> 3602 //
                                                   >> 3603          gtemp = 17.60/(std::pow(a,0.699) * std::sqrt(gfactor));
                                                   >> 3604          ecg = 4.0 * gtemp;
                                                   >> 3605 //
                                                   >> 3606          goto direct70;
                                                   >> 3607   }
                                                   >> 3608 */
                                                   >> 3609 
                                                   >> 3610 //  ---------------------------------------------------------------
                                                   >> 3611 //        LEVEL DENSITIES AND TEMPERATURES OF THE FINAL STATES
                                                   >> 3612 //  ---------------------------------------------------------------
                                                   >> 3613 //
                                                   >> 3614 //  MVR - in case of charged particle emission temperature
                                                   >> 3615 //  comes from random kinetic energy from a Maxwelliam distribution
                                                   >> 3616 //  if option imaxwell = 1 (otherwise E=2T)
                                                   >> 3617 //
                                                   >> 3618 //  AK - LEVEL DENSITY AND TEMPERATURE AT THE SADDLE POINT -> now calculated in the subroutine FISSION_WIDTH
                                                   >> 3619 //
                                                   >> 3620 //
                                                   >> 3621 // LEVEL DENSITY AND TEMPERATURE IN THE NEUTRON DAUGHTER
                                                   >> 3622 //
                                                   >> 3623 // KHS, AK 2007 - Reduction of angular momentum due to orbital angular momentum of emitted fragment
                                                   >> 3624 // JLRS Nov-2016 - Added these caculations in abla++
5136                                                  3625 
5137         if (fimf_allowed == 0 || zprf <= 5.0  << 3626   if (in >= 2) {
5138         {                                     << 3627     ind=idnint(a)-idnint(zprf)-1;
5139             gimf = 0.0;                       << 3628     izd=idnint(zprf);
5140         }                                     << 3629     if(jprf>0.10){
5141         else                                  << 3630          lorb(a,a-1.,jprf,ee-sn,&dlout,&sdlout);
5142         {                                     << 3631          djprf = gausshaz(1,dlout,sdlout);
5143             //      Estimate the total decay  << 3632          if(IDjprf==1) djprf = 0.0;
5144             //      By using the logarithmic  << 3633          jprfn = jprf + djprf;
5145                                               << 3634          jprfn = dint(std::abs(jprfn));   // The nucleus just turns the other way around
5146             mglms(a, zprf, opt->optshpimf, &m << 3635     }
5147                                               << 3636     bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
5148             gimf3 = 0.0;                      << 3637     defbet = ecld->beta2[ind][izd];
5149             zimf = 3.0;                       << 3638 
5150             izimf = 3;                        << 3639     iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-1.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
5151             //      *** Find the limits that  << 3640     erotn = jprfn * jprfn * 197.328 * 197.328 /(2. * iinert);
5152             izcn = idnint(zprf);     // Z of  << 3641     bsbkbc(a-1.,zprf,&bs,&bk,&bc);   
5153             incn = idnint(a) - izcn; // N of  << 3642 
5154                                               << 3643     // level density and temperature in the neutron daughter                 
5155             isostab_lim(izimf, &inmin,        << 3644     densniv(a-1.0,zprf,ee,sn,&densn,bshell, bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfn,0,&qr);
5156                         &inmax); // Bound iso << 3645     nt = temp;
5157             isostab_lim(izcn - izimf,         << 3646     ecn=0.0;
5158                         &inmi,                << 3647     if(densn>0.){
5159                         &inma);               << 3648      G4int IS=0;
5160                                               << 3649      if(imaxwell == 1){
5161             inmin = max(inmin, incn - inma);  << 3650       rnt = nt;
5162             inmax = min(inmax, incn - inmi);  << 3651       dir1234:
5163                                               << 3652       ecn=fvmaxhaz_neut(rnt);
5164             inmax = max(inmax, inmin); // In  << 3653       IS++;
5165                                               << 3654       if(IS>100){std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl;
5166             for (G4int iaimf = izimf + inmin; << 3655       goto exi1000;
5167             {                                 << 3656       }
5168                 aimf = G4double(iaimf);       << 3657        if(ecn>(ee-sn)){
5169                 if (aimf >= a || zimf >= zprf << 3658         if((ee-sn)<rnt)
5170                 {                             << 3659            ecn = ee-sn;
5171                     width_imf = 0.0;          << 3660         else
5172                 }                             << 3661            goto dir1234;
5173                 else                          << 3662            }
5174                 {                             << 3663         if(ecn<=0.0) goto dir1234;
5175                     // Q-values               << 3664      }else{
5176                     mglms(a - aimf, zprf - zi << 3665       ecn = 2.0 * nt;
5177                     mglms(aimf, zimf, opt->op << 3666      }
5178                     // Bass barrier           << 3667     }
5179                     barrs(idnint(zprf - zimf) << 3668   } 
5180                     sbimf = maimf + mares - m << 3669   else {
5181                     // Rotation energy        << 3670     densn = 0.0;
5182                     defbetimf = ecld->beta2[i << 3671     ecn = 0.0;
5183                                 ecld->beta2[i << 3672     nt = 0.0;
5184                                               << 3673   }
5185                     iinert = 0.40 * 931.490 * << 3674   exi1000:
5186                                  (std::pow(ai << 
5187                              931.490 * 1.160  << 
5188                                  (std::pow(ai << 
5189                                  (std::pow(ai << 
5190                                               << 
5191                     erot = jprf * jprf * 197. << 
5192                                               << 
5193                     // Width                  << 
5194                     if (densg == 0.0 || ee <  << 
5195                     {                         << 
5196                         width_imf = 0.0;      << 
5197                     }                         << 
5198                     else                      << 
5199                     {                         << 
5200                         // To take into accou << 
5201                         //      BSIMF = ((A-A << 
5202                         //      AIMF**(2.D0/3 << 
5203                         bsimf = bscn;         << 
5204                         densniv(              << 
5205                             a, zprf, ee, sbim << 
5206                                               << 
5207                         imfarg = (sbimf + ero << 
5208                         if (imfarg > 200.0)   << 
5209                             imfarg = 200.0;   << 
5210                                               << 
5211                         // For IMF - The avai << 
5212                         // densities in CN at << 
5213                         // G=WIDTH*ro_CN(E-SB << 
5214                         // approximation: ro( << 
5215                         // included to take i << 
5216                         // deformed. If (abov << 
5217                         // this ratio is equa << 
5218                         width_imf = 0.0;      << 
5219                         //                    << 
5220                         width_imf =           << 
5221                             width(a, zprf, ai << 
5222                     } // if densg             << 
5223                 }     // if aimf              << 
5224                 gimf3 = gimf3 + width_imf;    << 
5225             } // for IAIMF                    << 
5226                                               << 
5227             //   zimf = 5                     << 
5228             gimf5 = 0.0;                      << 
5229             zimf = 5.0;                       << 
5230             izimf = 5;                        << 
5231             //      *** Find the limits that  << 
5232             izcn = idnint(zprf);     // Z of  << 
5233             incn = idnint(a) - izcn; // N of  << 
5234                                               << 
5235             isostab_lim(izimf, &inmin,        << 
5236                         &inmax); // Bound iso << 
5237             isostab_lim(izcn - izimf,         << 
5238                         &inmi,                << 
5239                         &inma);               << 
5240                                               << 
5241             inmin = max(inmin, incn - inma);  << 
5242             inmax = min(inmax, incn - inmi);  << 
5243                                               << 
5244             inmax = max(inmax, inmin); // In  << 
5245                                               << 
5246             for (G4int iaimf = izimf + inmin; << 
5247             {                                 << 
5248                 aimf = G4double(iaimf);       << 
5249                 if (aimf >= a || zimf >= zprf << 
5250                 {                             << 
5251                     width_imf = 0.0;          << 
5252                 }                             << 
5253                 else                          << 
5254                 {                             << 
5255                     // Q-values               << 
5256                     mglms(a - aimf, zprf - zi << 
5257                     mglms(aimf, zimf, opt->op << 
5258                     // Bass barrier           << 
5259                     barrs(idnint(zprf - zimf) << 
5260                     sbimf = maimf + mares - m << 
5261                     // Rotation energy        << 
5262                     defbetimf = ecld->beta2[i << 
5263                                 ecld->beta2[i << 
5264                                               << 
5265                     iinert = 0.40 * 931.490 * << 
5266                                  (std::pow(ai << 
5267                              931.490 * 1.160  << 
5268                                  (std::pow(ai << 
5269                                  (std::pow(ai << 
5270                                               << 
5271                     erot = jprf * jprf * 197. << 
5272                     //                        << 
5273                     // Width                  << 
5274                     if (densg == 0.0 || ee <  << 
5275                     {                         << 
5276                         width_imf = 0.0;      << 
5277                     }                         << 
5278                     else                      << 
5279                     {                         << 
5280                         // To take into accou << 
5281                         //      BSIMF = ((A-A << 
5282                         //      AIMF**(2.D0/3 << 
5283                         bsimf = bscn;         << 
5284                         densniv(              << 
5285                             a, zprf, ee, sbim << 
5286                         //                    << 
5287                         imfarg = (sbimf + ero << 
5288                         if (imfarg > 200.0)   << 
5289                             imfarg = 200.0;   << 
5290                         //                    << 
5291                         // For IMF - The avai << 
5292                         // densities in CN at << 
5293                         // G=WIDTH*ro_CN(E-SB << 
5294                         // approximation: ro( << 
5295                         // included to take i << 
5296                         // deformed. If (abov << 
5297                         // this ratio is equa << 
5298                         width_imf = 0.0;      << 
5299                         width_imf = width(a,  << 
5300                                     qrcn; //* << 
5301                     }                     //  << 
5302                 }                         //  << 
5303                 gimf5 = gimf5 + width_imf;    << 
5304             } // for IAIMF                    << 
5305             // It is assumed that GIMFi = A_I << 
5306             // integrates Int(A_IMF*ZIMF**B_I << 
5307                                               << 
5308             if (gimf3 <= 0.0 || gimf5 <= 0.0) << 
5309             {                                 << 
5310                 gimf = 0.0;                   << 
5311                 b_imf = -100.0;               << 
5312                 a_imf = 0.0;                  << 
5313             }                                 << 
5314             else                              << 
5315             {                                 << 
5316                 //                            << 
5317                 b_imf = (std::log10(gimf3) -  << 
5318                 //                            << 
5319                 if (b_imf >= -1.01)           << 
5320                     b_imf = -1.01;            << 
5321                 if (b_imf <= -100.0)          << 
5322                 {                             << 
5323                     b_imf = -100.0;           << 
5324                     a_imf = 0.0;              << 
5325                     gimf = 0.0;               << 
5326                     goto direct2007;          << 
5327                 }                             << 
5328                 //                            << 
5329                 a_imf = gimf3 / std::pow(3.0, << 
5330                 gimf = a_imf * (std::pow(zprf << 
5331             }                                 << 
5332                                                  3675 
5333         direct2007:                           << 3676 // LEVEL DENSITY AND TEMPERATURE IN THE PROTON DAUGHTER
5334             if (gimf < 1.e-10)                << 3677 //
5335                 gimf = 0.0;                   << 3678 // Reduction of angular momentum due to orbital angular momentum of emitted fragment
5336         } // if fimf_allowed                  << 3679   if (iz >= 2) {
5337           //                                  << 3680     ind=idnint(a)-idnint(zprf);
5338           // c JLRS 2016 - Added this calcula << 3681     izd=idnint(zprf)-1;
5339         // C AK 2004 - Gamma width            << 3682     if(jprf>0.10){
5340         // C According to A. Ignatyuk, GG :   << 3683          lorb(a,a-1.,jprf,ee-sbp,&dlout,&sdlout);
5341         // C Here BS=BK=1, as this was assume << 3684          djprf = gausshaz(1,dlout,sdlout);
5342         pa = (ald->av) * a + (ald->as) * std: << 3685          if(IDjprf==1) djprf = 0.0;
5343         gamma = 2.5 * pa * std::pow(a, -4. /  << 3686          jprfp = jprf + djprf;
5344         gfactor = 1. + gamma * ecld->ecgnz[in << 3687          jprfp = dint(std::abs(jprfp));   // The nucleus just turns the other way around
5345         if (gfactor <= 0.)                    << 3688     }
5346         {                                     << 3689     bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
5347             gfactor = 0.0;                    << 3690     defbet =ecld->beta2[ind][izd];
5348         }                                     << 3691 
5349         //                                    << 3692     iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-1.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
5350         gtemp = 17.60 / (std::pow(a, 0.699) * << 3693     erotp = jprfp * jprfp * 197.328 * 197.328 /(2. * iinert);
5351         //                                    << 3694 
5352         // C If one switches gammas off, one  << 3695     bsbkbc(a-1.,zprf-1.,&bs,&bk,&bc);
5353         // through the fission barrier.       << 3696    
5354         gg = 0.624e-9 * std::pow(a, 1.6) * st << 3697     // level density and temperature in the proton daughter                  
5355         // gammaemission==1                   << 3698     densniv(a-1.0,zprf-1.0,ee,sbp,&densp,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfp,0,&qr);
5356         // C For fission fragments, GG is ~ 2 << 3699     pt = temp;
5357         // c "oridnary" nuclei (A. Ignatyuk,  << 3700     ecp = 0.;
5358         if (gammaemission == 1)               << 3701     if(densp>0.){
5359         {                                     << 3702      G4int IS=0;
5360             gg = 2.0 * gg;                    << 3703      if(imaxwell == 1){
5361         }                                     << 3704       rpt = pt;
5362         ecg = 4.0 * gtemp;                    << 3705       dir1235:
5363         //                                    << 3706       ecp=fvmaxhaz(rpt);
5364         //                                    << 3707       IS++;
5365         gsum = ga + ghe + gd + gt + gp + gn + << 3708       if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
                                                   >> 3709       goto exi1001;
                                                   >> 3710       }
                                                   >> 3711        if(ecp>(ee-sbp)){
                                                   >> 3712         if((ee-sbp)<rpt)
                                                   >> 3713            ecp = ee-sbp;
                                                   >> 3714         else
                                                   >> 3715            goto dir1235;
                                                   >> 3716            }
                                                   >> 3717         if(ecp<=0.0) goto dir1235;
                                                   >> 3718       ecp = ecp + bp;
                                                   >> 3719      }else{
                                                   >> 3720       ecp = 2.0 * pt + bp;
                                                   >> 3721      }
                                                   >> 3722     }
                                                   >> 3723   }
                                                   >> 3724   else {
                                                   >> 3725     densp = 0.0;
                                                   >> 3726     ecp = 0.0;
                                                   >> 3727     pt = 0.0;
                                                   >> 3728   }
                                                   >> 3729   exi1001:
5366                                                  3730 
5367         // std::cout << gn << " " << gd << "  << 3731 //  FINAL LEVEL DENSITY AND TEMPERATURE AFTER DEUTERON EMISSION
                                                   >> 3732 //
                                                   >> 3733 // Reduction of angular momentum due to orbital angular momentum of emitted fragment
                                                   >> 3734   if ((in >= 2) && (iz >= 2)) {
                                                   >> 3735     ind=idnint(a)-idnint(zprf)-1;
                                                   >> 3736     izd=idnint(zprf)-1;
                                                   >> 3737     if(jprf>0.10){
                                                   >> 3738          lorb(a,a-2.,jprf,ee-sbd,&dlout,&sdlout);
                                                   >> 3739          djprf = gausshaz(1,dlout,sdlout);
                                                   >> 3740          if(IDjprf==1) djprf = 0.0;
                                                   >> 3741          jprfd = jprf + djprf;
                                                   >> 3742          jprfd = dint(std::abs(jprfd));   // The nucleus just turns the other way around
                                                   >> 3743     }
                                                   >> 3744     bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
                                                   >> 3745     defbet = ecld->beta2[ind][izd];
                                                   >> 3746 
                                                   >> 3747     iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-2.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
                                                   >> 3748     erotd = jprfd * jprfd * 197.328 * 197.328 /(2. * iinert);
                                                   >> 3749 
                                                   >> 3750     bsbkbc(a-2.,zprf-1.,&bs,&bk,&bc);
                                                   >> 3751 
                                                   >> 3752     // level density and temperature in the deuteron daughter                   
                                                   >> 3753     densniv(a-2.0,zprf-1.0e0,ee,sbd,&densd,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfd,0,&qr);
                                                   >> 3754 
                                                   >> 3755     dt = temp;
                                                   >> 3756     ecd = 0.0;
                                                   >> 3757     if(densd>0.){
                                                   >> 3758      G4int IS=0;
                                                   >> 3759      if(imaxwell == 1){
                                                   >> 3760       rdt = dt;
                                                   >> 3761       dir1236:
                                                   >> 3762       ecd=fvmaxhaz(rdt);
                                                   >> 3763       IS++;
                                                   >> 3764       if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
                                                   >> 3765       goto exi1002;
                                                   >> 3766       }
                                                   >> 3767        if(ecd>(ee-sbd)){
                                                   >> 3768         if((ee-sbd)<rdt)
                                                   >> 3769            ecd = ee-sbd;
                                                   >> 3770         else
                                                   >> 3771            goto dir1236;
                                                   >> 3772            }
                                                   >> 3773         if(ecd<=0.0) goto dir1236;
                                                   >> 3774       ecd = ecd + bd;
                                                   >> 3775      }else{
                                                   >> 3776       ecd = 2.0 * dt + bd;
                                                   >> 3777      }
                                                   >> 3778     }
                                                   >> 3779   }
                                                   >> 3780   else {
                                                   >> 3781     densd = 0.0;
                                                   >> 3782     ecd = 0.0;
                                                   >> 3783     dt = 0.0;
                                                   >> 3784   }
                                                   >> 3785   exi1002:
5368                                                  3786 
5369         if (gsum > 0.0)                       << 3787 //  FINAL LEVEL DENSITY AND TEMPERATURE AFTER TRITON EMISSION
5370         {                                     << 3788 //
5371             ts1 = hbar / gsum;                << 3789 // Reduction of angular momentum due to orbital angular momentum of emitted fragment
5372         }                                     << 3790   if ((in >= 3) && (iz >= 2)) {
5373         else                                  << 3791     ind=idnint(a)-idnint(zprf)-2;
5374         {                                     << 3792     izd=idnint(zprf)-1;
5375             ts1 = 1.0e99;                     << 3793     if(jprf>0.10){
5376             goto direct69;                    << 3794          lorb(a,a-3.,jprf,ee-sbt,&dlout,&sdlout);
5377         }                                     << 3795          djprf = gausshaz(1,dlout,sdlout);
5378         //                                    << 3796          if(IDjprf==1) djprf = 0.0;
5379         // Case of nuclei below Businaro-Gall << 3797          jprft = jprf + djprf;
5380         if (fiss->ifis == 0 || (zprf * zprf / << 3798          jprft = dint(std::abs(jprft));   // The nucleus just turns the other way around
5381         {                                     << 3799     }
5382             goto direct69;                    << 3800     bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
5383         }                                     << 3801     defbet = ecld->beta2[ind][izd];
5384         //                                    << 3802 
5385         // Calculation of the fission decay w << 3803     iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-3.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
5386         // Deformation is calculated using th << 3804     erott = jprft * jprft * 197.328 * 197.328 /(2. * iinert);
5387         //                                    << 3805 
5388         defbet = y;                           << 3806     bsbkbc(a-3.,zprf-1.,&bs,&bk,&bc);
5389         fission_width(zprf, a, ee, bssp, bksp << 3807 
5390         ft = temp;                            << 3808     // level density and temperature in the triton daughter                   
5391         //                                    << 3809     densniv(a-3.0,zprf-1.0,ee,sbt,&denst,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprft,0,&qr);
5392         // Case of very heavy nuclei that hav << 3810 
5393         // For them fission is the only decay << 3811     tt = temp;
5394         if (ef <= 0.0)                        << 3812     ect=0.;
5395         {                                     << 3813     if(denst>0.){
5396             probf = 1.0;                      << 3814      G4int IS=0;
5397             probp = 0.0;                      << 3815      if(imaxwell == 1){
5398             probd = 0.0;                      << 3816       rtt = tt;
5399             probt = 0.0;                      << 3817       dir1237:
5400             probn = 0.0;                      << 3818       ect=fvmaxhaz(rtt);
5401             probhe = 0.0;                     << 3819       IS++;
5402             proba = 0.0;                      << 3820       if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
5403             probg = 0.0;                      << 3821       goto exi1003;
5404             probimf = 0.0;                    << 3822       }
5405             problamb0 = 0.0;                  << 3823        if(ect>(ee-sbt)){
5406             goto direct70;                    << 3824         if((ee-sbt)<rtt)
5407         }                                     << 3825            ect = ee-sbt;
5408                                               << 3826         else
5409         if (fiss->bet <= 0.)                  << 3827            goto dir1237;
5410         {                                     << 3828            }
5411             gtotal = ga + ghe + gp + gd + gt  << 3829         if(ect<=0.0) goto dir1237;
5412             if (gtotal <= 0.0)                << 3830       ect = ect + bt;
5413             {                                 << 3831      }else{
5414                 probf = 0.0;                  << 3832       ect = 2.0 * tt + bt;
5415                 probp = 0.0;                  << 3833      }
5416                 probd = 0.0;                  << 3834     }
5417                 probt = 0.0;                  << 3835   }
5418                 probn = 0.0;                  << 3836   else {
5419                 probhe = 0.0;                 << 3837     denst = 0.0;
5420                 proba = 0.0;                  << 3838     ect = 0.0;
5421                 probg = 0.0;                  << 3839     tt = 0.0;
5422                 probimf = 0.0;                << 3840   }
5423                 problamb0 = 0.0;              << 3841   exi1003: 
5424                 goto direct70;                << 
5425             }                                 << 
5426             else                              << 
5427             {                                 << 
5428                 probf = gf / gtotal;          << 
5429                 probn = gn / gtotal;          << 
5430                 probp = gp / gtotal;          << 
5431                 probd = gd / gtotal;          << 
5432                 probt = gt / gtotal;          << 
5433                 probhe = ghe / gtotal;        << 
5434                 proba = ga / gtotal;          << 
5435                 probg = gg / gtotal;          << 
5436                 probimf = gimf / gtotal;      << 
5437                 problamb0 = glamb0 / gtotal;  << 
5438                 goto direct70;                << 
5439             }                                 << 
5440         }                                     << 
5441     }                                         << 
5442     else                                      << 
5443     {                                         << 
5444         goto direct69;                        << 
5445     }                                         << 
5446     //                                        << 
5447     if (inum > ilast)                         << 
5448     { // new event means reset the time scale << 
5449         tsum = 0.;                            << 
5450     }                                         << 
5451     //                                        << 
5452     // kramers factor for the dynamical hindr << 
5453     fomega_sp(a, y, &mfcd, &omegasp, &homegas << 
5454     cf = cram((NbLam0 > 0 ? fiss->bethyp : fi << 
5455     //                                        << 
5456     // We calculate the transient time        << 
5457     fomega_gs(a, zprf, &k1, &omegags, &homega << 
5458     tauc = tau((NbLam0 > 0 ? fiss->bethyp : f << 
5459     gf = gf * cf;                             << 
5460     //                                        << 
5461     /*                                        << 
5462     c The subroutine part_fiss calculates the << 
5463     to the time c dependence of the probabili << 
5464     the FOKKER-PLANCK eq c using a nucleus po << 
5465     parabola. It also gives the c decay time  << 
5466     all particle decay channels and the c fis << 
5467     the nucleus decays by particle evaporatio << 
5468     CHOICE_FISSPART = 2                       << 
5469     */                                        << 
5470     //                                        << 
5471     part_fiss((NbLam0 > 0 ? fiss->bethyp : fi << 
5472     gf = gff;                                 << 
5473     //                                        << 
5474     // We accumulate in TSUM the mean decay f << 
5475     // decay channels and fission             << 
5476     tsum = tsum + t_lapse;                    << 
5477                                               << 
5478     //   If fission occurs                    << 
5479     if (choice_fisspart == 2)                 << 
5480     {                                         << 
5481         probf = 1.0;                          << 
5482         probp = 0.0;                          << 
5483         probd = 0.0;                          << 
5484         probt = 0.0;                          << 
5485         probn = 0.0;                          << 
5486         probhe = 0.0;                         << 
5487         proba = 0.0;                          << 
5488         probg = 0.0;                          << 
5489         probimf = 0.0;                        << 
5490         problamb0 = 0.0;                      << 
5491         goto direct70;                        << 
5492     }                                         << 
5493     else                                      << 
5494     {                                         << 
5495         // If particle evaporation occurs     << 
5496         // The probabilities for the differen << 
5497         // account the fission width GFF that << 
5498                                               << 
5499         gtotal = ga + ghe + gp + gd + gt + gn << 
5500         if (gtotal <= 0.0)                    << 
5501         {                                     << 
5502             probf = 0.0;                      << 
5503             probp = 0.0;                      << 
5504             probd = 0.0;                      << 
5505             probt = 0.0;                      << 
5506             probn = 0.0;                      << 
5507             probhe = 0.0;                     << 
5508             proba = 0.0;                      << 
5509             probg = 0.0;                      << 
5510             probimf = 0.0;                    << 
5511             problamb0 = 0.0;                  << 
5512             goto direct70;                    << 
5513         }                                     << 
5514         else                                  << 
5515         {                                     << 
5516             probf = 0.0;                      << 
5517             probn = gn / gtotal;              << 
5518             probp = gp / gtotal;              << 
5519             probd = gd / gtotal;              << 
5520             probt = gt / gtotal;              << 
5521             probhe = ghe / gtotal;            << 
5522             proba = ga / gtotal;              << 
5523             probg = gg / gtotal;              << 
5524             probimf = gimf / gtotal;          << 
5525             problamb0 = glamb0 / gtotal;      << 
5526             goto direct70;                    << 
5527         }                                     << 
5528     }                                         << 
5529     //                                        << 
5530 direct69:                                     << 
5531     gtotal = ga + ghe + gp + gd + gt + gn + g << 
5532     if (gtotal <= 0.0)                        << 
5533     {                                         << 
5534         probf = 0.0;                          << 
5535         probp = 0.0;                          << 
5536         probd = 0.0;                          << 
5537         probt = 0.0;                          << 
5538         probn = 0.0;                          << 
5539         probhe = 0.0;                         << 
5540         proba = 0.0;                          << 
5541         probg = 0.0;                          << 
5542         probimf = 0.0;                        << 
5543         problamb0 = 0.0;                      << 
5544     }                                         << 
5545     else                                      << 
5546     {                                         << 
5547         probf = 0.0;                          << 
5548         probn = gn / gtotal;                  << 
5549         probp = gp / gtotal;                  << 
5550         probd = gd / gtotal;                  << 
5551         probt = gt / gtotal;                  << 
5552         probhe = ghe / gtotal;                << 
5553         proba = ga / gtotal;                  << 
5554         probg = gg / gtotal;                  << 
5555         probimf = gimf / gtotal;              << 
5556         problamb0 = glamb0 / gtotal;          << 
5557     }                                         << 
5558                                               << 
5559 direct70:                                     << 
5560     ptotl = probp + probd + probt + probn + p << 
5561     //                                        << 
5562     ee = eer;                                 << 
5563     ilast = inum;                             << 
5564                                               << 
5565     // Return values:                         << 
5566     (*probp_par) = probp;                     << 
5567     (*probd_par) = probd;                     << 
5568     (*probt_par) = probt;                     << 
5569     (*probn_par) = probn;                     << 
5570     (*probhe_par) = probhe;                   << 
5571     (*proba_par) = proba;                     << 
5572     (*probg_par) = probg;                     << 
5573     (*probimf_par) = probimf;                 << 
5574     (*problamb0_par) = problamb0;             << 
5575     (*probf_par) = probf;                     << 
5576     (*ptotl_par) = ptotl;                     << 
5577     (*sn_par) = sn;                           << 
5578     (*sp_par) = sp;                           << 
5579     (*sd_par) = sd;                           << 
5580     (*st_par) = st;                           << 
5581     (*she_par) = she;                         << 
5582     (*sa_par) = sa;                           << 
5583     (*slamb0_par) = slamb0;                   << 
5584     (*sbp_par) = sbp;                         << 
5585     (*sbd_par) = sbd;                         << 
5586     (*sbt_par) = sbt;                         << 
5587     (*sbhe_par) = sbhe;                       << 
5588     (*sba_par) = sba;                         << 
5589     (*ecn_par) = ecn;                         << 
5590     (*ecp_par) = ecp;                         << 
5591     (*ecd_par) = ecd;                         << 
5592     (*ect_par) = ect;                         << 
5593     (*eche_par) = eche;                       << 
5594     (*eca_par) = eca;                         << 
5595     (*ecg_par) = ecg;                         << 
5596     (*eclamb0_par) = eclamb0;                 << 
5597     (*bp_par) = bp;                           << 
5598     (*bd_par) = bd;                           << 
5599     (*bt_par) = bt;                           << 
5600     (*bhe_par) = bhe;                         << 
5601     (*ba_par) = ba;                           << 
5602     (*tcn) = ftcn;                            << 
5603     (*ts1_par) = ts1;                         << 
5604     (*jprfn_par) = jprfn;                     << 
5605     (*jprfp_par) = jprfp;                     << 
5606     (*jprfd_par) = jprfd;                     << 
5607     (*jprft_par) = jprft;                     << 
5608     (*jprfhe_par) = jprfhe;                   << 
5609     (*jprfa_par) = jprfa;                     << 
5610     (*jprflamb0_par) = jprflamb0;             << 
5611     (*tsum_par) = tsum;                       << 
5612     return;                                   << 
5613 }                                             << 
5614                                                  3842 
5615 void G4Abla::densniv(G4double a,              << 3843 // LEVEL DENSITY AND TEMPERATURE IN THE ALPHA DAUGHTER
5616                      G4double z,              << 3844 //
5617                      G4double ee,             << 3845 // Reduction of angular momentum due to orbital angular momentum of emitted fragment
5618                      G4double esous,          << 3846   if ((in >= 3) && (iz >= 3)) {
5619                      G4double* dens,          << 3847     ind=idnint(a)-idnint(zprf)-2;
5620                      G4double bshell,         << 3848     izd=idnint(zprf)-2;
5621                      G4double bsin,           << 3849     if(jprf>0.10){
5622                      G4double bkin,           << 3850          lorb(a,a-4.,jprf,ee-sba,&dlout,&sdlout);
5623                      G4double* temp,          << 3851          djprf = gausshaz(1,dlout,sdlout);
5624                      G4int optshp,            << 3852          if(IDjprf==1) djprf = 0.0;
5625                      G4int optcol,            << 3853          jprfa = jprf + djprf;
5626                      G4double defbet,         << 3854          jprfa = dint(std::abs(jprfa));   // The nucleus just turns the other way around
5627                      G4double* ecor,          << 3855     }
5628                      G4double jprf,           << 3856     bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
5629                      G4int ifis,              << 3857     defbet = ecld->beta2[ind][izd];
5630                      G4double* qr)            << 3858 
5631 {                                             << 3859     iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-4.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
5632     //   1498 C                               << 3860     erota = jprfa * jprfa * 197.328 * 197.328 /(2. * iinert);
5633     //   1499 C     INPUT:                    << 3861 
5634     //   1500 C             A,EE,ESOUS,OPTSHP << 3862     bsbkbc(a-4.,zprf-2.,&bs,&bk,&bc);
5635     //   1501 C                               << 3863 
5636     //   1502 C     LEVEL DENSITY PARAMETERS  << 3864     // level density and temperature in the alpha daughter                   
5637     //   1503 C     COMMON /ALD/    AV,AS,AK, << 3865     densniv(a-4.0,zprf-2.0,ee,sba,&densa,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfa,0,&qr);
5638     //   1504 C     AV,AS,AK - VOLUME,SURFACE << 3866 
5639     //   1505 C                LEVEL DENSITY  << 3867     at = temp;
5640     //   1506 C     OPTAFAN - 0/1  AF/AN >=1  << 3868     eca = 0.0;
5641     //   1507 C               RECOMMENDED IS  << 3869     if(densa>0.){
5642     //   1508                                 << 3870      G4int IS=0;
5643     //   C----------------------------------- << 3871      if(imaxwell == 1){
5644     //   1509 C     OUTPUT: DENS,TEMP         << 3872       rat = at;
5645     //   1510 C                               << 3873       dir1238:
5646     //   1511 C                               << 3874       eca=fvmaxhaz(rat);
5647     //   ____________________________________ << 3875       IS++;
5648     //   C  / 1513  C  /  PROCEDURE FOR CALCU << 3876       if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
5649     //   COMPOUND NUCLEUS 1514  C             << 3877       goto exi1004;
5650     //   /___________________________________ << 3878       }
5651     //   1515 C                               << 3879        if(eca>(ee-sba)){
5652     //   1516       INTEGER AFP,IZ,OPTSHP,OPT << 3880         if((ee-sba)<rat)
5653     //   1517       REAL*8                    << 3881            eca = ee-sba;
5654     //   A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y << 3882         else
5655     //   C=====INSERTED BY KUDYAEV=========== << 3883            goto dir1238;
5656     //   1519       COMMON /ALD/ AV,AS,AK,OPT << 3884            }
5657     //   1520       REAL*8                    << 3885         if(eca<=0.0) goto dir1238;
5658     //   ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE, << 3886       eca = eca + ba;
5659     //   1521       REAL*8                    << 3887      }else{
5660     //   BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE, << 3888       eca = 2.0 * at + ba;
5661     //   C=================================== << 3889      }
5662     //   1523 C                               << 3890     }
5663     //   1524 C                               << 3891   }
5664     //   1525                                 << 3892   else {
5665     //   C----------------------------------- << 3893     densa = 0.0;
5666     //   1526 C     A                 MASS NU << 3894     eca = 0.0;
5667     //   1527 C     EE                EXCITAT << 3895     at = 0.0;
5668     //   1528 C     ESOUS             SEPARAT << 3896   }
5669     //   BARRIER                              << 3897   exi1004: 
5670     //   1529 C     DENS              STATE D << 
5671     //   EE-ESOUS-EC 1530 C     BSHELL        << 
5672     //   NUCLEAR TEMPERATURE 1532 C     E     << 
5673     //   DAUGHTER NUCLEUS 1533  C     E1      << 
5674     //   1534 C     Y0,Y1,Y2,Y01,Y11,Y21      << 
5675     //   1535 C              LOCAL    HELP VA << 
5676     //   1536 C     PA       LOCAL    STATE-D << 
5677     //   1537 C     EC                KINETIC << 
5678     //   WITHOUT 1538 C                       << 
5679     //   FAKTOR FOR SUBSTRACTING KINETIC ENER << 
5680     //   PAIRING GAP 12 FOR GROUND STATE 1541 << 
5681     //   SADDLE POINT 1542  C     EITERA      << 
5682     //   TEMPERATURE ITERATION 1543           << 
5683     //   C----------------------------------- << 
5684     //   1544 C                               << 
5685     //   1545 C                               << 
5686     G4double delta0 = 0.0;                    << 
5687     G4double deltau = 0.0;                    << 
5688     G4double deltpp = 0.0;                    << 
5689     G4double e = 0.0;                         << 
5690     G4double e0 = 0.0;                        << 
5691     G4double ecor1 = 0.0;                     << 
5692     G4double ecr = 10.0;                      << 
5693     G4double fe = 0.0;                        << 
5694     G4double he = 0.0;                        << 
5695     G4double pa = 0.0;                        << 
5696     G4double para = 0.0;                      << 
5697     G4double parz = 0.0;                      << 
5698     G4double ponfe = 0.0;                     << 
5699     G4double ponniv = 0.0;                    << 
5700     G4double fqr = 1.0;                       << 
5701     G4double y01 = 0.0;                       << 
5702     G4double y11 = 0.0;                       << 
5703     G4double y2 = 0.0;                        << 
5704     G4double y21 = 0.0;                       << 
5705     G4double y1 = 0.0;                        << 
5706     G4double y0 = 0.0;                        << 
5707     G4double fnorm = 0.0;                     << 
5708     G4double fp_per = 0.;                     << 
5709     G4double fp_par = 0.;                     << 
5710     G4double sig_per = 0.;                    << 
5711     G4double sig_par = 0.;                    << 
5712     G4double sigma2;                          << 
5713     G4double jfact = 1.;                      << 
5714     G4double erot = 0.;                       << 
5715     G4double fdens = 0.;                      << 
5716     G4double fecor = 0.;                      << 
5717     G4double BSHELLCT = 0.;                   << 
5718     G4double gamma = 0.;                      << 
5719     G4double ftemp = 0.0;                     << 
5720     G4double tempct = 0.0;                    << 
5721     G4double densfm = 0.0;                    << 
5722     G4double densct = 0.0;                    << 
5723     G4double ein = 0.;                        << 
5724     G4double elim;                            << 
5725     G4double tfm;                             << 
5726     G4double bs = bsin;                       << 
5727     G4double bk = bkin;                       << 
5728     G4int IPARITE;                            << 
5729     G4int IOPTCT = fiss->optct;               << 
5730     //                                        << 
5731     G4double pi6 = std::pow(3.1415926535, 2)  << 
5732     G4double pi = 3.1415926535;               << 
5733     //                                        << 
5734     G4int afp = idnint(a);                    << 
5735     G4int iz = idnint(z);                     << 
5736     G4int in = afp - iz;                      << 
5737     //                                        << 
5738     if (ifis != 1)                            << 
5739     {                                         << 
5740         BSHELLCT = ecld->ecgnz[in][iz];       << 
5741     }                                         << 
5742     else                                      << 
5743     {                                         << 
5744         BSHELLCT = 0.0;                       << 
5745     }                                         << 
5746     if (afp <= 20)                            << 
5747         BSHELLCT = 0.0;                       << 
5748     //                                        << 
5749     parite(a, &para);                         << 
5750     if (para < 0.0)                           << 
5751     {                                         << 
5752         // Odd A                              << 
5753         IPARITE = 1;                          << 
5754     }                                         << 
5755     else                                      << 
5756     {                                         << 
5757         // Even A                             << 
5758         parite(z, &parz);                     << 
5759         if (parz > 0.0)                       << 
5760         {                                     << 
5761             // Even Z, even N                 << 
5762             IPARITE = 2;                      << 
5763         }                                     << 
5764         else                                  << 
5765         {                                     << 
5766             // Odd Z, odd N                   << 
5767             IPARITE = 0;                      << 
5768         }                                     << 
5769     }                                         << 
5770     //                                        << 
5771     ein = ee - esous;                         << 
5772     //                                        << 
5773     if (ein > 1.e30)                          << 
5774     {                                         << 
5775         fdens = 0.0;                          << 
5776         ftemp = 0.5;                          << 
5777         goto densniv100;                      << 
5778     }                                         << 
5779     //                                        << 
5780     e = ee - esous;                           << 
5781     //                                        << 
5782     if (e < 0.0 && ifis != 1)                 << 
5783     { // TUNNELING                            << 
5784         fdens = 0.0;                          << 
5785         densfm = 0.0;                         << 
5786         densct = 0.0;                         << 
5787         if (ald->optafan == 1)                << 
5788         {                                     << 
5789             pa = (ald->av) * a + (ald->as) *  << 
5790         }                                     << 
5791         else                                  << 
5792         {                                     << 
5793             pa = (ald->av) * a + (ald->as) *  << 
5794                  (ald->ak) * bkin * std::pow( << 
5795         }                                     << 
5796         gamma = 2.5 * pa * std::pow(a, -4.0 / << 
5797         fecor = 0.0;                          << 
5798         goto densniv100;                      << 
5799     }                                         << 
5800     //                                        << 
5801     if (ifis == 0 && bs != 1.0)               << 
5802     {                                         << 
5803         // - With increasing excitation energ << 
5804         // deformed:                          << 
5805         G4double ponq = (e - 100.0) / 5.0;    << 
5806         if (ponq > 700.0)                     << 
5807             ponq = 700.0;                     << 
5808         bs = 1.0 / (1.0 + std::exp(-ponq)) +  << 
5809         bk = 1.0 / (1.0 + std::exp(-ponq)) +  << 
5810     }                                         << 
5811     //                                        << 
5812     // level density parameter                << 
5813     if (ald->optafan == 1)                    << 
5814     {                                         << 
5815         pa = (ald->av) * a + (ald->as) * std: << 
5816     }                                         << 
5817     else                                      << 
5818     {                                         << 
5819         pa = (ald->av) * a + (ald->as) * bs * << 
5820     }                                         << 
5821     //                                        << 
5822     gamma = 2.5 * pa * std::pow(a, -4.0 / 3.0 << 
5823     //                                        << 
5824     // AK - 2009 - trial, in order to have tr << 
5825     // approach Idea - at the phase transitio << 
5826     // TEMP, and this determines critical ene << 
5827     if (a > 0.0)                              << 
5828     {                                         << 
5829         ecr = pa * 17.60 / (std::pow(a, 0.699 << 
5830               (std::pow(a, 0.699) * std::sqrt << 
5831     }                                         << 
5832                                               << 
5833     // pairing corrections                    << 
5834     if (ifis == 1)                            << 
5835     {                                         << 
5836         delta0 = 14;                          << 
5837     }                                         << 
5838     else                                      << 
5839     {                                         << 
5840         delta0 = 12;                          << 
5841     }                                         << 
5842                                               << 
5843     // shell corrections                      << 
5844     if (optshp > 0)                           << 
5845     {                                         << 
5846         deltau = bshell;                      << 
5847         if (optshp == 2)                      << 
5848         {                                     << 
5849             deltau = 0.0;                     << 
5850         }                                     << 
5851         if (optshp >= 2)                      << 
5852         {                                     << 
5853             // pairing energy shift with cond << 
5854             // deltpp = -0.25e0* (delta0/pow( << 
5855             // + 2.e0*delta0/sqrt(a);         << 
5856             deltpp = -0.25e0 * std::pow((delt << 
5857             // Odd A                          << 
5858             if (IPARITE == 1)                 << 
5859             {                                 << 
5860                 // e = e - delta0/sqrt(a);    << 
5861                 e = e - (0.285 + 11.17 * std: << 
5862             }                                 << 
5863             // Even Z, even N                 << 
5864             if (IPARITE == 2)                 << 
5865             {                                 << 
5866                 e = e - (22.34 * std::pow(a,  << 
5867             }                                 << 
5868             // Odd Z, odd N                   << 
5869             if (IPARITE == 0)                 << 
5870             {                                 << 
5871                 if (in == iz)                 << 
5872                 {                             << 
5873                     //  e = e;                << 
5874                 }                             << 
5875                 else                          << 
5876                 {                             << 
5877                     //  e = e-30./a;          << 
5878                 }                             << 
5879             }                                 << 
5880         }                                     << 
5881         else                                  << 
5882         {                                     << 
5883             deltpp = 0.0;                     << 
5884         }                                     << 
5885     }                                         << 
5886     else                                      << 
5887     {                                         << 
5888         deltau = 0.0;                         << 
5889         deltpp = 0.0;                         << 
5890     }                                         << 
5891                                               << 
5892     if (e < 0.0)                              << 
5893     {                                         << 
5894         e = 0.0;                              << 
5895         ftemp = 0.5;                          << 
5896     }                                         << 
5897                                               << 
5898     // washing out is made stronger           << 
5899     ponfe = -2.5 * pa * e * std::pow(a, (-4.0 << 
5900                                               << 
5901     if (ponfe < -700.0)                       << 
5902     {                                         << 
5903         ponfe = -700.0;                       << 
5904     }                                         << 
5905     fe = 1.0 - std::exp(ponfe);               << 
5906     if (e < ecr)                              << 
5907     {                                         << 
5908         // priv. comm. k.-h. schmidt          << 
5909         he = 1.0 - std::pow((1.0 - e / ecr),  << 
5910     }                                         << 
5911     else                                      << 
5912     {                                         << 
5913         he = 1.0;                             << 
5914     }                                         << 
5915     // Excitation energy corrected for pairin << 
5916     // washing out with excitation energy is  << 
5917     fecor = e + deltau * fe + deltpp * he;    << 
5918     if (fecor <= 0.1)                         << 
5919     {                                         << 
5920         fecor = 0.1;                          << 
5921     }                                         << 
5922     // iterative procedure according to gross << 
5923     // to avoid the singularity e = 0         << 
5924     if (ee < 5.0)                             << 
5925     {                                         << 
5926         y1 = std::sqrt(pa * fecor);           << 
5927         for (G4int j = 0; j < 5; j++)         << 
5928         {                                     << 
5929             y2 = pa * fecor * (1.e0 - std::ex << 
5930             y1 = std::sqrt(y2);               << 
5931         }                                     << 
5932         y0 = pa / y1;                         << 
5933         ftemp = 1.0 / y0;                     << 
5934         fdens = std::exp(y0 * fecor) /        << 
5935                 (std::pow((std::pow(fecor, 3) << 
5936                 std::exp(y1) * (1.0 - std::ex << 
5937         if (fecor < 1.0)                      << 
5938         {                                     << 
5939             ecor1 = 1.0;                      << 
5940             y11 = std::sqrt(pa * ecor1);      << 
5941             for (G4int j = 0; j < 7; j++)     << 
5942             {                                 << 
5943                 y21 = pa * ecor1 * (1.0 - std << 
5944                 y11 = std::sqrt(y21);         << 
5945             }                                 << 
5946                                                  3898 
5947             y01 = pa / y11;                   << 3899 //  FINAL LEVEL DENSITY AND TEMPERATURE AFTER 3HE EMISSION
5948             fdens = fdens * std::pow((y01 / y << 3900 //
5949             ftemp = ftemp * std::pow((y01 / y << 3901 // Reduction of angular momentum due to orbital angular momentum of emitted fragment
5950         }                                     << 3902   if ((in >= 2) && (iz >= 3)) {
5951     }                                         << 3903     ind=idnint(a)-idnint(zprf)-1;
5952     else                                      << 3904     izd=idnint(zprf)-2;
5953     {                                         << 3905     if(jprf>0.10){
5954         ponniv = 2.0 * std::sqrt(pa * fecor); << 3906          lorb(a,a-3.,jprf,ee-sbhe,&dlout,&sdlout);
5955         if (ponniv > 700.0)                   << 3907          djprf = gausshaz(1,dlout,sdlout);
5956         {                                     << 3908          if(IDjprf==1) djprf = 0.0;
5957             ponniv = 700.0;                   << 3909          jprfhe = jprf + djprf;
5958         }                                     << 3910          jprfhe = dint(std::abs(jprfhe));   // The nucleus just turns the other way around
5959         // fermi gas state density            << 3911     }
5960         fdens = 0.1477045 * std::exp(ponniv)  << 3912     bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
5961         ftemp = std::sqrt(fecor / pa);        << 3913     defbet = ecld->beta2[ind][izd];
5962     }                                         << 3914 
5963     //                                        << 3915     iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-3.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
5964     densfm = fdens;                           << 3916     erothe = jprfhe * jprfhe * 197.328 * 197.328 /(2. * iinert);
5965     tfm = ftemp;                              << 3917 
5966     //                                        << 3918     bsbkbc(a-3.,zprf-2.,&bs,&bk,&bc);
5967     if (IOPTCT == 0)                          << 3919 
5968         goto densniv100;                      << 3920     // level density and temperature in the he3 daughter                   
5969     tempct = 17.60 / (std::pow(a, 0.699) * st << 3921     densniv(a-3.0,zprf-2.0,ee,sbhe,&denshe,bshell,bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprfhe,0,&qr);
5970     // tempct = 1.0 / ( (0.0570 + 0.00193*BSH << 3922 
5971     // PRC 80 (2009) 054310                   << 3923     het = temp;
5972                                               << 3924     eche = 0.0;
5973     // - CONSTANT-TEMPERATURE LEVEL DENSITY P << 3925     if(denshe>0.){
5974     if (e < 30.)                              << 3926      G4int IS=0;
5975     {                                         << 3927      if(imaxwell == 1){
5976         if (a > 0.0)                          << 3928       rhet = het;
5977         {                                     << 3929       dir1239:
5978             if (optshp >= 2)                  << 3930       eche=fvmaxhaz(rhet);
5979             {                                 << 3931       IS++;
5980                 // Parametrization of CT mode << 3932       if(IS>100){std::cout << "WARNING: FVMAXHAZ CALLED MORE THAN 100 TIMES" << std::endl;
5981                 // correspond to pairing shif << 3933       goto exi1005;
5982                 // shifted taking odd-odd nuc << 3934       }
5983                 //  as bassis)                << 3935        if(eche>(ee-sbhe)){
5984                 // e-o, o-e                   << 3936         if((ee-sbhe)<rhet)
5985                 if (IPARITE == 1)             << 3937            eche = ee-sbhe;
5986                 {                             << 3938         else
5987                     e0 = 0.285 + 11.17 * std: << 3939            goto dir1239;
5988                 }                             << 3940            }
5989                 // e-e                        << 3941         if(eche<=0.0) goto dir1239;
5990                 if (IPARITE == 2)             << 3942       eche = eche + bhe;
5991                 {                             << 3943      }else{
5992                     e0 = 22.34 * std::pow(a,  << 3944       eche = 2.0 * het + bhe;
5993                 }                             << 3945      }
5994                 // o-o                        << 3946     }
5995                 if (IPARITE == 0)             << 3947   }
5996                 {                             << 3948   else {
5997                     e0 = 0.0;                 << 3949     denshe = 0.0;
5998                 }                             << 3950     eche = 0.0;
                                                   >> 3951     het = 0.0;
                                                   >> 3952   }
                                                   >> 3953   exi1005:
5999                                                  3954 
6000                 ponniv = (ein - e0) / tempct; << 3955 // LEVEL DENSITY AND TEMPERATURE IN THE LAMBDA0 DAUGHTER
6001                 if (ifis != 1)                << 3956 //
6002                     ponniv = max(0.0, (ein -  << 3957 // - Reduction of angular momentum due to orbital angular momentum of emitted fragment
6003                 if (ponniv > 700.0)           << 3958 // JLRS Jun-2017 - Added these caculations in abla++
6004                 {                             << 
6005                     ponniv = 700.0;           << 
6006                 }                             << 
6007                 densct = std::exp(ponniv) / t << 
6008                                                  3959 
6009                 elim = ein;                   << 3960   if (in >= 2 && NbLam0>0) {
                                                   >> 3961     ind=idnint(a)-idnint(zprf)-1;
                                                   >> 3962     izd=idnint(zprf);
                                                   >> 3963     if(jprf>0.10){
                                                   >> 3964          lorb(a,a-1.,jprf,ee-slamb0,&dlout,&sdlout);
                                                   >> 3965          djprf = gausshaz(1,dlout,sdlout);
                                                   >> 3966          if(IDjprf==1) djprf = 0.0;
                                                   >> 3967          jprflamb0 = jprf + djprf;
                                                   >> 3968          jprflamb0 = dint(std::abs(jprflamb0));   // The nucleus just turns the other way around
                                                   >> 3969     }
                                                   >> 3970     bshell = ecld->ecgnz[ind][izd] - ecld->vgsld[ind][izd];
                                                   >> 3971     defbet = ecld->beta2[ind][izd];
                                                   >> 3972 
                                                   >> 3973     iinert = 0.4 * 931.49 * 1.16*1.16 * std::pow(a-1.,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*pi))*defbet);
                                                   >> 3974     erotlamb0 = jprflamb0 * jprflamb0 * 197.328 * 197.328 /(2. * iinert);
                                                   >> 3975     bsbkbc(a-1.,zprf,&bs,&bk,&bc);   
                                                   >> 3976 
                                                   >> 3977     // level density and temperature in the neutron daughter                 
                                                   >> 3978     densniv(a-1.0,zprf,ee,slamb0,&denslamb0,bshell, bs,bk,&temp,fiss->optshp,fiss->optcol,defbet,&ecor,jprflamb0,0,&qr);
                                                   >> 3979     lamb0t = temp;
                                                   >> 3980     eclamb0=0.0;
                                                   >> 3981     if(denslamb0>0.){
                                                   >> 3982      G4int IS=0;
                                                   >> 3983      if(imaxwell == 1){
                                                   >> 3984       rlamb0t = lamb0t;
                                                   >> 3985       dir1240:
                                                   >> 3986       eclamb0=fvmaxhaz_neut(rlamb0t);
                                                   >> 3987       IS++;
                                                   >> 3988       if(IS>100){std::cout << "WARNING: FVMAXHAZ_NEUT CALLED MORE THAN 100 TIMES" << std::endl;
                                                   >> 3989       goto exi1006;
                                                   >> 3990       }
                                                   >> 3991        if(eclamb0>(ee-slamb0)){
                                                   >> 3992         if((ee-slamb0)<rlamb0t)
                                                   >> 3993            eclamb0 = ee-slamb0;
                                                   >> 3994         else
                                                   >> 3995            goto dir1240;
                                                   >> 3996            }
                                                   >> 3997         if(eclamb0<=0.0) goto dir1240;
                                                   >> 3998      }else{
                                                   >> 3999       eclamb0 = 2.0 * lamb0t;
                                                   >> 4000      }
                                                   >> 4001     }
                                                   >> 4002   } 
                                                   >> 4003   else {
                                                   >> 4004     denslamb0 = 0.0;
                                                   >> 4005     eclamb0 = 0.0;
                                                   >> 4006     lamb0t = 0.0;
                                                   >> 4007   }
                                                   >> 4008   exi1006:
6010                                                  4009 
6011                 if (elim >= ecr && densfm <=  << 
6012                 {                             << 
6013                     fdens = densfm;           << 
6014                     //  IREGCT = 0;           << 
6015                 }                             << 
6016                 else                          << 
6017                 {                             << 
6018                     fdens = densct;           << 
6019                     // IREGCT = 1;            << 
6020                     //         ecor = min(ein << 
6021                 }                             << 
6022                 if (elim >= ecr && tfm >= tem << 
6023                 {                             << 
6024                     ftemp = tfm;              << 
6025                 }                             << 
6026                 else                          << 
6027                 {                             << 
6028                     ftemp = tempct;           << 
6029                 }                             << 
6030             }                                 << 
6031             else                              << 
6032             {                                 << 
6033                 // Case of no pairing conside << 
6034                 //        ETEST = PA * TEMPCT << 
6035                 ponniv = (ein) / tempct;      << 
6036                 if (ponniv > 700.0)           << 
6037                 {                             << 
6038                     ponniv = 700.0;           << 
6039                 }                             << 
6040                 densct = std::exp(ponniv) / t << 
6041                                                  4010 
6042                 if (ein >= ecr && densfm <= d << 
6043                 {                             << 
6044                     fdens = densfm;           << 
6045                     ftemp = tfm;              << 
6046                     //  IREGCT = 0;           << 
6047                 }                             << 
6048                 else                          << 
6049                 {                             << 
6050                     fdens = densct;           << 
6051                     ftemp = tempct;           << 
6052                     //          ECOR = DMIN1( << 
6053                 }                             << 
6054                                                  4011 
6055                 if (ein >= ecr && tfm >= temp << 4012 // Decay widths for particles
6056                 {                             << 4013   if ( densg > 0.) {
6057                     ftemp = tfm;              << 4014 //
6058                 }                             << 4015 // CALCULATION OF THE PARTIAL DECAY WIDTH
6059                 else                          << 4016 // USED FOR BOTH THE TIME SCALE AND THE EVAPORATION DECAY WIDTH
6060                 {                             << 4017 //
6061                     ftemp = tempct;           << 4018 //      AKAP = HBAR**2/(2* MN * R_0**2) = 10 MEV    *** input param ***
6062                 }                             << 4019 //
6063             }                                 << 4020 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence of
6064         }                                     << 4021 //                Coulomb barrier for LCP, tunnelling for LCP
6065     }                                         << 4022 // JLRS 2017 - Implementation in abla++ 
                                                   >> 4023 
                                                   >> 4024        if(densn<=0.0){
                                                   >> 4025         gn = 0.0;
                                                   >> 4026        }else{
                                                   >> 4027         gn  = width(a,zprf,1.0,0.0,nt,0.0,sn,ee-erotn)* densn/densg;
                                                   >> 4028        }
                                                   >> 4029        if(densp<=0.0){
                                                   >> 4030         gp = 0.0;
                                                   >> 4031        }else{
                                                   >> 4032         gp  = width(a,zprf,1.0,1.0,pt,bp,sbp,ee-erotp)*densp/densg* pen(a, 1.0, omegap, pt);
                                                   >> 4033        }
                                                   >> 4034        if(densd<=0.0){
                                                   >> 4035         gd = 0.0;
                                                   >> 4036        }else{
                                                   >> 4037         gd  = width(a,zprf,2.0,1.0,dt,bd,sbd,ee-erotd)*densd/densg* pen(a, 2.0, omegad, dt);
                                                   >> 4038        }
                                                   >> 4039        if(denst<=0.0){
                                                   >> 4040         gt = 0.0;
                                                   >> 4041        }else{
                                                   >> 4042         gt  = width(a,zprf,3.0,1.0,tt,bt,sbt,ee-erott)*denst/densg* pen(a, 3.0, omegat, tt);
                                                   >> 4043        }
                                                   >> 4044        if(denshe<=0.0){
                                                   >> 4045         ghe = 0.0;
                                                   >> 4046        }else{
                                                   >> 4047         ghe =width(a,zprf,3.0,2.0,het,bhe,sbhe,ee-erothe)  * denshe/densg* pen(a, 3.0, omegahe, het);
                                                   >> 4048        }
                                                   >> 4049        if(densa<=0.0){
                                                   >> 4050         ga = 0.0;
                                                   >> 4051        }else{
                                                   >> 4052         ga  = width(a,zprf,4.0,2.0,at,ba,sba,ee-erota)  * densa/densg* pen(a, 4.0, omegaa, at);
                                                   >> 4053        }
                                                   >> 4054        if(denslamb0<=0.0){
                                                   >> 4055         glamb0 = 0.0;
                                                   >> 4056        }else{
                                                   >> 4057         glamb0  = width(a,zprf,1.0,-2.0,lamb0t,0.0,slamb0,ee-erotlamb0)* denslamb0/densg;
                                                   >> 4058        }
                                                   >> 4059 
                                                   >> 4060 //     **************************
                                                   >> 4061 //     *  Treatment of IMFs     *
                                                   >> 4062 //     * KHS, AK, MVR 2005-2006 *
                                                   >> 4063 //     **************************
                                                   >> 4064 
                                                   >> 4065        G4int izcn=0,incn=0,inmin=0,inmax=0,inmi=0,inma=0;
                                                   >> 4066        G4double aimf,mares,maimf;
                                                   >> 4067 
                                                   >> 4068        if(fimf_allowed==0 || zprf<=5.0 || a<=7.0){
                                                   >> 4069         gimf = 0.0;
                                                   >> 4070        }else{
                                                   >> 4071 //      Estimate the total decay width for IMFs (Z >= 3)
                                                   >> 4072 //      By using the logarithmic slope between GIMF3 and GIMF5
                                                   >> 4073 
                                                   >> 4074         mglms(a,zprf,opt->optshpimf,&mazz);
                                                   >> 4075 
                                                   >> 4076         gimf3 = 0.0;
                                                   >> 4077         zimf = 3.0;
                                                   >> 4078         izimf = 3;
                                                   >> 4079 //      *** Find the limits that both IMF and partner are bound :
                                                   >> 4080         izcn = idnint(zprf);                  // Z of CN
                                                   >> 4081         incn = idnint(a) - izcn;              // N of CN
                                                   >> 4082 
                                                   >> 4083         isostab_lim(izimf,&inmin,&inmax);     // Bound isotopes for IZIMF from INMIN to INIMFMA
                                                   >> 4084         isostab_lim(izcn-izimf,&inmi,&inma);  // Daughter nucleus after IMF emission,
                                                   >> 4085                                            //     limits of bound isotopes
                                                   >> 4086         inmin = max(inmin,incn-inma);      //     Both IMF and daughter must be bound
                                                   >> 4087         inmax = min(inmax,incn-inmi);      //        "
                                                   >> 4088 
                                                   >> 4089         inmax = max(inmax,inmin);          // In order to keep the variables below
                                                   >> 4090 
                                                   >> 4091         for(G4int iaimf=izimf+inmin;iaimf<=izimf+inmax;iaimf++){
                                                   >> 4092          aimf=G4double(iaimf);
                                                   >> 4093          if(aimf>=a || zimf>=zprf){
                                                   >> 4094           width_imf = 0.0;
                                                   >> 4095          }else{
                                                   >> 4096           // Q-values
                                                   >> 4097           mglms(a-aimf,zprf-zimf,opt->optshpimf,&mares);
                                                   >> 4098           mglms(aimf,zimf,opt->optshpimf,&maimf);
                                                   >> 4099           // Bass barrier
                                                   >> 4100           barrs(idnint(zprf-zimf),idnint(a-aimf),izimf,idnint(aimf),&bimf,&omegaimf);
                                                   >> 4101           sbimf = maimf+mares-mazz+bimf+getdeltabinding(a,NbLam0);
                                                   >> 4102           // Rotation energy
                                                   >> 4103           defbetimf = ecld->beta2[idnint(aimf-zimf)][idnint(zimf)]+ecld->beta2[idnint(a-aimf-zprf+zimf)][idnint(zprf-zimf)];
                                                   >> 4104 
                                                   >> 4105           iinert= 0.40 * 931.490 * 1.160*1.160 * std::pow(a,5.0/3.0)*(std::pow(aimf,5.0/3.0) + std::pow(a - aimf,5.0/3.0)) + 931.490 * 1.160*1.160 * aimf * (a-aimf) / a *(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0))*(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0));
                                                   >> 4106 
                                                   >> 4107           erot = jprf * jprf * 197.328 * 197.328 /(2.0 * iinert);
                                                   >> 4108 
                                                   >> 4109           // Width
                                                   >> 4110           if(densg==0.0 || ee < (sbimf + erot)){
                                                   >> 4111            width_imf = 0.0;
                                                   >> 4112           }else{
                                                   >> 4113           // To take into account that at the barrier the system is deformed:
                                                   >> 4114           //      BSIMF = ((A-AIMF)**(2.D0/3.D0) + AIMF**(2.D0/3.D0))/A**(2.D0/3.D0)
                                                   >> 4115            bsimf = bscn;
                                                   >> 4116            densniv(a,zprf,ee,sbimf,&densimf,0.0,bsimf,1.0,&timf,0,0,defbetimf,&ecor,jprf,2,&qr);
                                                   >> 4117 
                                                   >> 4118            imfarg = (sbimf+erotcn-erot)/timf;
                                                   >> 4119            if(imfarg > 200.0) imfarg = 200.0;
                                                   >> 4120 
                                                   >> 4121 // For IMF - The available phase space is given by the level densities in CN at the
                                                   >> 4122 // barrier; applaying MOrretto -> G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E).
                                                   >> 4123 // Constant temperature approximation: ro(E+dE)/ro(E)=exp(dE/T)
                                                   >> 4124 // Ratio  DENSIMF/DENSCN is included to take into account that at the barrier system
                                                   >> 4125 // is deformed. If (above) BSIMF = 1 no deformation is considered and this ratio
                                                   >> 4126 // is equal to 1.
                                                   >> 4127            width_imf = 0.0;
                                                   >> 4128          //
                                                   >> 4129            width_imf = width(a,zprf,aimf,zimf,timf,bimf,sbimf,ee-erot)*std::exp(-imfarg)*qr/qrcn;
                                                   >> 4130           }// if densg
                                                   >> 4131          }// if aimf
                                                   >> 4132          gimf3 = gimf3 + width_imf;
                                                   >> 4133         }// for IAIMF
                                                   >> 4134 
                                                   >> 4135 //   zimf = 5       
                                                   >> 4136         gimf5 = 0.0;
                                                   >> 4137         zimf = 5.0;
                                                   >> 4138         izimf = 5;
                                                   >> 4139 //      *** Find the limits that both IMF and partner are bound :
                                                   >> 4140         izcn = idnint(zprf);                  // Z of CN
                                                   >> 4141         incn = idnint(a) - izcn;              // N of CN
                                                   >> 4142 
                                                   >> 4143         isostab_lim(izimf,&inmin,&inmax);     // Bound isotopes for IZIMF from INMIN to INIMFMA
                                                   >> 4144         isostab_lim(izcn-izimf,&inmi,&inma);  // Daughter nucleus after IMF emission,
                                                   >> 4145                                            //     limits of bound isotopes
                                                   >> 4146         inmin = max(inmin,incn-inma);      //     Both IMF and daughter must be bound
                                                   >> 4147         inmax = min(inmax,incn-inmi);      //        "
                                                   >> 4148 
                                                   >> 4149         inmax = max(inmax,inmin);          // In order to keep the variables below
                                                   >> 4150 
                                                   >> 4151         for(G4int iaimf=izimf+inmin;iaimf<=izimf+inmax;iaimf++){
                                                   >> 4152          aimf=G4double(iaimf);
                                                   >> 4153          if(aimf>=a || zimf>=zprf){
                                                   >> 4154           width_imf = 0.0;
                                                   >> 4155          }else{
                                                   >> 4156           // Q-values
                                                   >> 4157           mglms(a-aimf,zprf-zimf,opt->optshpimf,&mares);
                                                   >> 4158           mglms(aimf,zimf,opt->optshpimf,&maimf);
                                                   >> 4159           // Bass barrier
                                                   >> 4160           barrs(idnint(zprf-zimf),idnint(a-aimf),izimf,idnint(aimf),&bimf,&omegaimf);
                                                   >> 4161           sbimf = maimf+mares-mazz+bimf+getdeltabinding(a,NbLam0);
                                                   >> 4162           // Rotation energy
                                                   >> 4163           defbetimf = ecld->beta2[idnint(aimf-zimf)][idnint(zimf)]+ecld->beta2[idnint(a-aimf-zprf+zimf)][idnint(zprf-zimf)];
6066                                                  4164 
6067 densniv100:                                   << 4165           iinert= 0.40 * 931.490 * 1.160*1.160 * std::pow(a,5.0/3.0)*(std::pow(aimf,5.0/3.0) + std::pow(a - aimf,5.0/3.0)) + 931.490 * 1.160*1.160 * aimf * (a-aimf) / a *(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0))*(std::pow(aimf,1.0/3.0) + std::pow(a - aimf,1.0/3.0));
6068                                                  4166 
6069     if (fdens == 0.0)                         << 4167           erot = jprf * jprf * 197.328 * 197.328 /(2.0 * iinert);
6070     {                                         << 4168 //
6071         if (a > 0.0)                          << 4169           // Width
6072         {                                     << 4170           if(densg==0.0 || ee < (sbimf + erot)){
6073             // Parametrization of CT model by << 4171            width_imf = 0.0;
6074             ftemp = 17.60 / (std::pow(a, 0.69 << 4172           }else{
6075             //  ftemp = 1.0 / ( (0.0570 + 0.0 << 4173           // To take into account that at the barrier the system is deformed:
6076             //  from  PRC 80 (2009) 054310    << 4174           //      BSIMF = ((A-AIMF)**(2.D0/3.D0) + AIMF**(2.D0/3.D0))/A**(2.D0/3.D0)
6077         }                                     << 4175            bsimf = bscn;
6078         else                                  << 4176            densniv(a,zprf,ee,sbimf,&densimf,0.0,bsimf,1.0,&timf,0,0,defbetimf,&ecor,jprf,2,&qr);
6079         {                                     << 4177 //
6080             ftemp = 0.5;                      << 4178            imfarg = (sbimf+erotcn-erot)/timf;
6081         }                                     << 4179            if(imfarg > 200.0) imfarg = 200.0;
6082     }                                         << 4180 //
6083     //                                        << 4181 // For IMF - The available phase space is given by the level densities in CN at the
6084     // spin cutoff parameter                  << 4182 // barrier; applaying MOrretto -> G=WIDTH*ro_CN(E-SBIMF)/ro_CN(E).
6085     /*                                        << 4183 // Constant temperature approximation: ro(E+dE)/ro(E)=exp(dE/T)
6086     C PERPENDICULAR AND PARALLEL MOMENT OF IN << 4184 // Ratio  DENSIMF/DENSCN is included to take into account that at the barrier system
6087     c fnorm = R0*M0/hbar**2 = 1.16fm*931.49Me << 4185 // is deformed. If (above) BSIMF = 1 no deformation is considered and this ratio
6088     c in units 1/MeV                          << 4186 // is equal to 1.
6089     */                                        << 4187            width_imf = 0.0;
6090     fnorm = std::pow(1.16, 2) * 931.49 * 1.e- << 4188            width_imf = width(a,zprf,aimf,zimf,timf,bimf,sbimf,ee-erot)*std::exp(-imfarg)*qr/qrcn;//*densimf/densg;
6091                                               << 4189           }// if densg
6092     if (ifis == 0 || ifis == 2)               << 4190          }// if aimf
6093     {                                         << 4191          gimf5 = gimf5 + width_imf;
6094         /*                                    << 4192         }// for IAIMF
6095         C GROUND STATE:                       << 4193 // It is assumed that GIMFi = A_IMF*ZIMF**B_IMF; to get the total GIMF one integrates
6096         C FP_PER ~ 1+0.5*alpha2, FP_PAR ~ 1-a << 4194 // Int(A_IMF*ZIMF**B_IMF)(3->ZPRF)
6097         macr. nucl. phys.) C alpha2 = sqrt(5/ << 4195 
6098         */                                    << 4196         if(gimf3<=0.0 || gimf5<=0.0){
6099         fp_per = 0.4 * std::pow(a, 5.0 / 3.0) << 4197          gimf = 0.0;
6100         fp_par = 0.40 * std::pow(a, 5.0 / 3.0 << 4198          b_imf = -100.0;
6101     }                                         << 4199          a_imf = 0.0;
6102     else                                      << 4200         }else{
6103     {                                         << 4201 //
6104         if (ifis == 1)                        << 4202         b_imf = (std::log10(gimf3) - std::log10(gimf5))/(std::log10(3.0)-std::log10(5.0));
6105         {                                     << 4203 //
6106             /*                                << 4204          if(b_imf >= -1.01) b_imf = -1.01;
6107             C SADDLE POINT                    << 4205          if(b_imf <= -100.0) {
6108             C See Hasse&Myer, p. 100          << 4206           b_imf = -100.0;
6109             C Perpendicular moment of inertia << 4207           a_imf = 0.0;
6110             */                                << 4208           gimf = 0.0;
6111             fp_per = 2.0 / 5.0 * std::pow(a,  << 4209           goto direct2007;
6112                      (1.0 + 7.0 / 6.0 * defbe << 4210          }
6113             // Parallel moment of inertia     << 4211 //
6114             fp_par = 2.0 / 5.0 * std::pow(a,  << 4212          a_imf = gimf3 / std::pow(3.0,b_imf);
6115                      (1.0 - 7.0 / 3.0 * defbe << 4213          gimf = a_imf * ( std::pow(zprf,b_imf+1.0) - std::pow(3.0,b_imf+1.0)) /(b_imf + 1.0);
6116         }                                     << 
6117         else                                  << 
6118         {                                     << 
6119             if (ifis == 20)                   << 
6120             {                                 << 
6121                 // IMF - two fragments in con << 
6122                 // See Hasse&Myers, p.106     << 
6123                 // Here, DEFBET = R1/R2, wher << 
6124                 // partner Perpendicular mome << 
6125                 fp_per = 0.4 * std::pow(a, 5. << 
6126                          std::pow(1.0 + defbe << 
6127                 fp_par = 0.4 * std::pow(a, 5. << 
6128                          std::pow(1.0 + defbe << 
6129             }                                 << 
6130         }                                        4214         }
6131     }                                         << 
6132     if (fp_par < 0.0)                         << 
6133         fp_par = 0.0;                         << 
6134     if (fp_per < 0.0)                         << 
6135         fp_per = 0.0;                         << 
6136     //                                        << 
6137     sig_per = std::sqrt(fp_per * ftemp);      << 
6138     sig_par = std::sqrt(fp_par * ftemp);      << 
6139     //                                        << 
6140     sigma2 = sig_per * sig_per + sig_par * si << 
6141     jfact = (2. * jprf + 1.) * std::exp(-1. * << 
6142             (std::sqrt(8.0 * 3.1415) * std::p << 
6143     erot = jprf * jprf / (2.0 * std::sqrt(fp_ << 
6144     //                                        << 
6145     // collective enhancement                 << 
6146     if (optcol == 1)                          << 
6147     {                                         << 
6148         qrot(z, a, defbet, sig_per, fecor - e << 
6149     }                                         << 
6150     else                                      << 
6151     {                                         << 
6152         fqr = 1.0;                            << 
6153     }                                         << 
6154     //                                        << 
6155     fdens = fdens * fqr * jfact;              << 
6156     //                                        << 
6157     if (fdens < 1e-300)                       << 
6158         fdens = 0.0;                          << 
6159     //                                        << 
6160     *dens = fdens;                            << 
6161     *ecor = fecor;                            << 
6162     *temp = ftemp;                            << 
6163     *qr = fqr;                                << 
6164 }                                             << 
6165                                               << 
6166 void G4Abla::qrot(G4double z, G4double a, G4d << 
6167 {                                             << 
6168     /*                                        << 
6169     C QROT INCLUDING DAMPING                  << 
6170     C                                         << 
6171     C INPUT: Z,A,DEFBET,SIG,U                 << 
6172     C                                         << 
6173     C OUTPUT: QR - COLLECTIVE ENHANCEMENT FAC << 
6174     C                                         << 
6175     C SEE  JUNGHANS ET AL., NUCL. PHYS. A 629 << 
6176     C                                         << 
6177     C                                         << 
6178     C   FR(U)    EXPONENTIAL FUNCTION TO DEFI << 
6179     C   UCR      CRITICAL ENERGY FOR DAMPING  << 
6180     C   DCR      WIDTH OF DAMPING             << 
6181     C   DEFBET   BETA-DEFORMATION !           << 
6182     C   SIG      PERPENDICULAR SPIN CUTOFF FA << 
6183     C     U      ENERGY                       << 
6184     C    QR      COEFFICIENT OF COLLECTIVE EN << 
6185     C     A      MASS NUMBER                  << 
6186     C     Z      CHARGE NUMBER                << 
6187     C                                         << 
6188     */                                        << 
6189     // JLRS: July 2016: new values for the co << 
6190     //                                        << 
6191                                               << 
6192     G4double ucr = fiss->ucr; // Critical ene << 
6193     G4double dcr = fiss->dcr; // Width of dam << 
6194     G4double ponq = 0.0, dn = 0.0, n = 0.0, d << 
6195     G4int distn, distz, ndist, zdist;         << 
6196     G4int nmn[8] = { 2, 8, 14, 20, 28, 50, 82 << 
6197     G4int nmz[8] = { 2, 8, 14, 20, 28, 50, 82 << 
6198     //                                        << 
6199     sig = sig * sig;                          << 
6200     //                                        << 
6201     if (std::abs(bet) <= 0.15)                << 
6202     {                                         << 
6203         goto qrot10;                          << 
6204     }                                         << 
6205     else                                      << 
6206     {                                         << 
6207         goto qrot11;                          << 
6208     }                                         << 
6209     //                                        << 
6210 qrot10:                                       << 
6211     n = a - z;                                << 
6212     distn = 10000000;                         << 
6213     distz = 10000000;                         << 
6214                                               << 
6215     for (G4int i = 0; i < 8; i++)             << 
6216     {                                         << 
6217         ndist = std::fabs(idnint(n) - nmn[i]) << 
6218         if (ndist < distn)                    << 
6219             distn = ndist;                    << 
6220         zdist = std::fabs(idnint(z) - nmz[i]) << 
6221         if (zdist < distz)                    << 
6222             distz = zdist;                    << 
6223     }                                         << 
6224                                               << 
6225     dz = G4float(distz);                      << 
6226     dn = G4float(distn);                      << 
6227                                               << 
6228     bet = 0.022 + 0.003 * dn + 0.002 * dz;    << 
6229                                               << 
6230     sig = 75.0 * std::pow(bet, 2.) * sig;     << 
6231                                               << 
6232     // NO VIBRATIONAL ENHANCEMENT             << 
6233 qrot11:                                       << 
6234     ponq = (u - ucr) / dcr;                   << 
6235                                               << 
6236     if (ponq > 700.0)                         << 
6237     {                                         << 
6238         ponq = 700.0;                         << 
6239     }                                         << 
6240     if (sig < 1.0)                            << 
6241     {                                         << 
6242         sig = 1.0;                            << 
6243     }                                         << 
6244     (*qr) = 1.0 / (1.0 + std::exp(ponq)) * (s << 
6245                                               << 
6246     if ((*qr) < 1.0)                          << 
6247     {                                         << 
6248         (*qr) = 1.0;                          << 
6249     }                                         << 
6250                                               << 
6251     return;                                   << 
6252 }                                             << 
6253                                               << 
6254 void G4Abla::lpoly(G4double x, G4int n, G4dou << 
6255 {                                             << 
6256     // THIS SUBROUTINE CALCULATES THE ORDINAR << 
6257     // ORDER 0 TO N-1 OF ARGUMENT X AND STORE << 
6258     // THEY ARE CALCULATED BY RECURSION RELAT << 
6259     // POLYNOMIALS.                           << 
6260     // WRITTEN BY A.J.SIERK  LANL  T-9  FEBRU << 
6261     // NOTE: PL AND X MUST BE DOUBLE PRECISIO << 
6262                                               << 
6263     pl[0] = 1.0;                              << 
6264     pl[1] = x;                                << 
6265                                               << 
6266     for (G4int i = 2; i < n; i++)             << 
6267     {                                         << 
6268         pl[i] = ((2 * G4double(i + 1) - 3.0)  << 
6269                 (G4double(i + 1) - 1.0);      << 
6270     }                                         << 
6271 }                                             << 
6272                                                  4215 
6273 G4double G4Abla::eflmac(G4int ia, G4int iz, G << 4216        direct2007:
6274 {                                             << 4217        if(gimf < 1.e-10) gimf = 0.0;
6275     // CHANGED TO CALCULATE TOTAL BINDING ENE << 4218        }// if fimf_allowed
6276     // SWITCH FOR PAIRING INCLUDED AS WELL.   << 4219 //
6277     // BINDING = EFLMAC(IA,IZ,0,OPTSHP)       << 4220 //c JLRS 2016 - Added this calculation
6278     // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EE << 4221 //C AK 2004 - Gamma width
6279     // A.J. 15.07.96                          << 4222 //C According to A. Ignatyuk, GG :
6280                                               << 4223 //C Here BS=BK=1, as this was assumed in the parameterization
6281     // this function will calculate the liqui << 4224       pa = (ald->av)*a + (ald->as)*std::pow(a,2./3.) + (ald->ak)*std::pow(a,1./3.);
6282     // configuration according to the preprin << 4225       gamma = 2.5 * pa * std::pow(a,-4./3.);
6283     // MASSES and DEFORMATIONS by P. M"oller  << 4226       gfactor = 1.+gamma*ecld->ecgnz[in][iz];
6284     // All constants are taken from this publ << 4227       if(gfactor<=0.){
6285                                               << 4228        gfactor = 0.0;
6286     // Parameters:                            << 4229       }
6287     // a:    nuclear mass number              << 4230 //
6288     // z:    nuclear charge                   << 4231       gtemp = 17.60/(std::pow(a,0.699) * std::sqrt(gfactor));
6289     // flag:     0       - return mass excess << 4232 //
6290     //       otherwise   - return pairing (=  << 4233 //C If one switches gammas off, one should also switch off tunneling through the fission barrier.
6291                                               << 4234       gg = 0.624e-9*std::pow(a,1.6)*std::pow(gtemp,5.);
6292     G4double eflmacResult = 0.0;              << 4235 //gammaemission==1
6293                                               << 4236 //C For fission fragments, GG is ~ 2 times larger than for
6294     if (ia == 0)                              << 4237 //c "oridnary" nuclei (A. Ignatyuk, private communication).
6295         return eflmacResult;                  << 4238       if(gammaemission==1){
6296                                               << 4239       gg = 2.0 * gg;
6297     G4int in = 0;                             << 4240       }
6298     G4double z = 0.0, n = 0.0, a = 0.0, av =  << 4241       ecg = 4.0 * gtemp;
6299     G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 << 4242 //
6300     G4double ff = 0.0, ca = 0.0, w = 0.0, efl << 4243 //
6301     G4double r0 = 0.0, kf = 0.0, ks = 0.0;    << 4244   gsum = ga + ghe + gd + gt + gp + gn + gimf + gg + glamb0;
6302     G4double kv = 0.0, rp = 0.0, ay = 0.0, ad << 
6303     G4double esq = 0.0, ael = 0.0, i = 0.0, e << 
6304     G4double pi = 3.141592653589793238e0;     << 
6305                                               << 
6306     // fundamental constants                  << 
6307     // electronic charge squared              << 
6308     esq = 1.4399764;                          << 
6309                                               << 
6310     // constants from considerations other th << 
6311     // electronic binding                     << 
6312     ael = 1.433e-5;                           << 
6313                                               << 
6314     // proton rms radius                      << 
6315     rp = 0.8;                                 << 
6316                                               << 
6317     // nuclear radius constant                << 
6318     r0 = 1.16;                                << 
6319                                               << 
6320     // range of yukawa-plus-expon. potential  << 
6321     ay = 0.68;                                << 
6322                                               << 
6323     // range of yukawa function used to gener << 
6324     // nuclear charge distribution            << 
6325     aden = 0.70;                              << 
6326                                               << 
6327     // wigner constant                        << 
6328     w = 30.0;                                 << 
6329                                               << 
6330     // adjusted parameters                    << 
6331     // volume energy                          << 
6332     av = 16.00126;                            << 
6333                                               << 
6334     // volume asymmetry                       << 
6335     kv = 1.92240;                             << 
6336                                               << 
6337     // surface energy                         << 
6338     as = 21.18466;                            << 
6339                                               << 
6340     // surface asymmetry                      << 
6341     ks = 2.345;                               << 
6342     // a^0 constant                           << 
6343     a0 = 2.615;                               << 
6344                                               << 
6345     // charge asymmetry                       << 
6346     ca = 0.10289;                             << 
6347                                                  4245 
6348     z = G4double(iz);                         << 4246   //std::cout << gn << " " << gd << " " << gp << std::endl;
6349     a = G4double(ia);                         << 
6350     in = ia - iz;                             << 
6351     n = G4double(in);                         << 
6352                                                  4247 
6353     if (flag == 1)                            << 4248   if (gsum > 0.0) {
6354     {                                         << 4249     ts1  = hbar / gsum;
6355         goto eflmac311;                       << 4250   }
                                                   >> 4251   else {
                                                   >> 4252     ts1  = 1.0e99;
                                                   >> 4253     goto direct69;
                                                   >> 4254   }
                                                   >> 4255 //
                                                   >> 4256 //Case of nuclei below Businaro-Gallone mass asymmetry point
                                                   >> 4257     if(fiss->ifis==0 || (zprf*zprf/a<=22.74 && zprf<60.)){
                                                   >> 4258      goto direct69;
6356     }                                            4259     }
                                                   >> 4260 //
                                                   >> 4261 // Calculation of the fission decay width
                                                   >> 4262 // Deformation is calculated using the fissility  
                                                   >> 4263 //
                                                   >> 4264     defbet = y;
                                                   >> 4265     fission_width(zprf,a,ee,bssp,bksp,ef,y,&gf,&temp,jprf,0,1,fiss->optcol,fiss->optshp,densg);
                                                   >> 4266     ft=temp;
                                                   >> 4267 //
                                                   >> 4268 // Case of very heavy nuclei that have no fission barrier
                                                   >> 4269 // For them fission is the only decay channel available
                                                   >> 4270        if(ef<=0.0){
                                                   >> 4271          probf = 1.0;
                                                   >> 4272      probp = 0.0;
                                                   >> 4273      probd = 0.0;
                                                   >> 4274      probt = 0.0;
                                                   >> 4275      probn = 0.0;
                                                   >> 4276      probhe = 0.0;
                                                   >> 4277      proba = 0.0;
                                                   >> 4278      probg = 0.0;
                                                   >> 4279          probimf = 0.0;
                                                   >> 4280          problamb0 = 0.0;
                                                   >> 4281          goto direct70;
                                                   >> 4282        }
                                                   >> 4283 
                                                   >> 4284        if(fiss->bet<=0.){
                                                   >> 4285         gtotal = ga + ghe + gp + gd + gt + gn + gg +gimf + gf + glamb0;
                                                   >> 4286         if(gtotal<=0.0){
                                                   >> 4287          probf = 0.0;
                                                   >> 4288      probp = 0.0;
                                                   >> 4289      probd = 0.0;
                                                   >> 4290      probt = 0.0;
                                                   >> 4291      probn = 0.0;
                                                   >> 4292      probhe = 0.0;
                                                   >> 4293      proba = 0.0;
                                                   >> 4294      probg = 0.0;
                                                   >> 4295          probimf = 0.0;
                                                   >> 4296          problamb0 = 0.0;
                                                   >> 4297          goto direct70;
                                                   >> 4298         }else{
                                                   >> 4299          probf = gf/gtotal;
                                                   >> 4300          probn = gn/gtotal;
                                                   >> 4301          probp = gp/gtotal;
                                                   >> 4302          probd = gd/gtotal;
                                                   >> 4303          probt = gt/gtotal;
                                                   >> 4304          probhe = ghe/gtotal;
                                                   >> 4305          proba = ga/gtotal;
                                                   >> 4306          probg = gg/gtotal;
                                                   >> 4307          probimf = gimf/gtotal;
                                                   >> 4308          problamb0 = glamb0/gtotal;
                                                   >> 4309          goto direct70;
                                                   >> 4310         }
                                                   >> 4311        }
                                                   >> 4312   }else{
                                                   >> 4313    goto direct69;
                                                   >> 4314   }
                                                   >> 4315 //
                                                   >> 4316   if (inum > ilast) {  // new event means reset the time scale
                                                   >> 4317     tsum = 0.;
                                                   >> 4318   }
                                                   >> 4319 //
                                                   >> 4320 // kramers factor for the dynamical hindrances of fission
                                                   >> 4321   fomega_sp(a,y,&mfcd,&omegasp,&homegasp);
                                                   >> 4322   cf = cram(fiss->bet,homegasp);
                                                   >> 4323 //
                                                   >> 4324 // We calculate the transient time
                                                   >> 4325   fomega_gs(a,zprf,&k1,&omegags,&homegags);
                                                   >> 4326   tauc=tau(fiss->bet,homegags,ef,ft);
                                                   >> 4327   gf=gf*cf;
                                                   >> 4328 //
                                                   >> 4329 /*
                                                   >> 4330 c The subroutine part_fiss calculates the fission width GFF that corresponds to the time
                                                   >> 4331 c dependence of the probability distribution obtained by solving the FOKKER-PLANCK eq
                                                   >> 4332 c using a nucleus potential that is approximated by a parabola. It also gives the
                                                   >> 4333 c decay time for this step T_LAPSE that includes all particle decay channels and the
                                                   >> 4334 c fission channel. And it decides whether the nucleus decays by particle evaporation
                                                   >> 4335 c CHOICE_FISSPART = 1 or fission CHOICE_FISSPART = 2
                                                   >> 4336 */
                                                   >> 4337 //
                                                   >> 4338  part_fiss(fiss->bet,gsum,gf,y,tauc,ts1,tsum, &choice_fisspart,zprf,a,ft,&t_lapse,&gff);
                                                   >> 4339  gf = gff;
                                                   >> 4340 //
                                                   >> 4341 // We accumulate in TSUM the mean decay for this step including all particle decay channels and fission
                                                   >> 4342  tsum = tsum + t_lapse;
6357                                                  4343 
6358     if (iz < 13 && in < 3)                    << 4344 //   If fission occurs
6359     {                                         << 4345     if(choice_fisspart==2){
6360         if (masses->mexpiop[in][iz] == 1)     << 4346     probf = 1.0;
6361         {                                     << 4347     probp = 0.0;
6362             return masses->bind[in][iz];      << 4348     probd = 0.0;
                                                   >> 4349     probt = 0.0;
                                                   >> 4350     probn = 0.0;
                                                   >> 4351     probhe = 0.0;
                                                   >> 4352     proba = 0.0;
                                                   >> 4353     probg = 0.0;
                                                   >> 4354           probimf = 0.0;
                                                   >> 4355           problamb0 = 0.0;
                                                   >> 4356           goto direct70;
                                                   >> 4357     }else{
                                                   >> 4358 // If particle evaporation occurs
                                                   >> 4359 // The probabilities for the different decays are calculated taking into account the fission width GFF that corresponds to this step
                                                   >> 4360 
                                                   >> 4361        gtotal=ga + ghe + gp + gd + gt + gn + gimf + gg + glamb0;
                                                   >> 4362         if(gtotal<=0.0){
                                                   >> 4363          probf = 0.0;
                                                   >> 4364      probp = 0.0;
                                                   >> 4365      probd = 0.0;
                                                   >> 4366      probt = 0.0;
                                                   >> 4367      probn = 0.0;
                                                   >> 4368      probhe = 0.0;
                                                   >> 4369      proba = 0.0;
                                                   >> 4370      probg = 0.0;
                                                   >> 4371          probimf = 0.0;
                                                   >> 4372          problamb0 = 0.0;
                                                   >> 4373          goto direct70;
                                                   >> 4374        }else{
                                                   >> 4375          probf = 0.0;
                                                   >> 4376          probn = gn/gtotal;
                                                   >> 4377          probp = gp/gtotal;
                                                   >> 4378          probd = gd/gtotal;
                                                   >> 4379          probt = gt/gtotal;
                                                   >> 4380          probhe = ghe/gtotal;
                                                   >> 4381          proba = ga/gtotal;
                                                   >> 4382          probg = gg/gtotal;
                                                   >> 4383          probimf = gimf/gtotal;
                                                   >> 4384          problamb0 = glamb0/gtotal;
                                                   >> 4385          goto direct70;
6363         }                                        4386         }
6364     }                                            4387     }
6365                                               << 4388 //
6366 eflmac311:                                    << 4389   direct69:
6367                                               << 4390         gtotal = ga + ghe + gp + gd + gt + gn + gg + gimf + glamb0;
6368     c1 = 3.0 / 5.0 * esq / r0;                << 4391         if(gtotal<=0.0){
6369     c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 * p << 4392          probf = 0.0;
6370     kf = std::pow((9.0 * pi * z / (4.0 * a)), << 4393      probp = 0.0;
6371                                               << 4394      probd = 0.0;
6372     ff = -1.0 / 8.0 * rp * rp * esq / std::po << 4395      probt = 0.0;
6373          (145.0 / 48.0 - 327.0 / 2880.0 * std << 4396      probn = 0.0;
6374           1527.0 / 1209600.0 * std::pow(kf, 4 << 4397      probhe = 0.0;
6375     i = (n - z) / a;                          << 4398      proba = 0.0;
6376                                               << 4399      probg = 0.0;
6377     x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay;  << 4400          probimf = 0.0;
6378     y0 = r0 * std::pow(a, (1.0 / 3.0)) / aden << 4401          problamb0 = 0.0;
6379                                               << 4402        }else{
6380     b1 = 1.0 - 3.0 / (std::pow(x0, 2)) + (1.0 << 4403          probf = 0.0;
6381                                               << 4404          probn = gn/gtotal;
6382     b3 = 1.0 - 5.0 / std::pow(y0, 2) *        << 4405          probp = gp/gtotal;
6383                    (1.0 - 15.0 / (8.0 * y0) + << 4406          probd = gd/gtotal;
6384                     3.0 / 4.0 * (1.0 + 9.0 /  << 4407          probt = gt/gtotal;
6385                         std::exp(-2.0 * y0)); << 4408          probhe = ghe/gtotal;
6386                                               << 4409          proba = ga/gtotal;
6387     // now calculation of total binding energ << 4410          probg = gg/gtotal;
6388                                               << 4411          probimf = gimf/gtotal;
6389     efl = -1.0 * av * (1.0 - kv * i * i) * a  << 4412          problamb0 = glamb0/gtotal;
6390           c1 * z * z * b3 / std::pow(a, (1.0  << 4413         }
6391           ff * std::pow(z, 2) / a - ca * (n - << 4414 
6392                                               << 4415   direct70:
6393     efl = efl + w * std::abs(i);              << 4416   ptotl = probp+probd+probt+probn+probhe+proba+probg+probimf+probf+problamb0;  
6394                                               << 4417   //
6395     // pairing is made optional               << 4418   ee = eer;
6396     if (optshp >= 2)                          << 4419   ilast = inum;
6397     {                                         << 4420 
6398         // average pairing                    << 4421   // Return values:
6399         if (in == iz && (mod(in, 2) == 1) &&  << 4422   (*probp_par) = probp;
6400         {                                     << 4423   (*probd_par) = probd;
6401             efl = efl + w / a;                << 4424   (*probt_par) = probt;
6402         }                                     << 4425   (*probn_par) = probn;
6403                                               << 4426   (*probhe_par) = probhe;
6404         // AK 2008 - Parametrization of CT mo << 4427   (*proba_par) = proba;
6405         // The following part has been introd << 4428   (*probg_par) = probg;
6406         // between pairing in masses and leve << 4429   (*probimf_par) = probimf;
6407         // AK 2010  note that E0 is shifted t << 4430   (*problamb0_par) = problamb0;
6408         // Fermi-gas model (there, energy is  << 4431   (*probf_par) = probf;
6409         // as bassis)                         << 4432   (*ptotl_par) = ptotl;
6410                                               << 4433   (*sn_par) = sn;
6411         G4double para = 0.;                   << 4434   (*sp_par) = sp;
6412         parite(a, &para);                     << 4435   (*sd_par) = sd;
6413                                               << 4436   (*st_par) = st;
6414         if (para < 0.0)                       << 4437   (*she_par) = she;
6415         {                                     << 4438   (*sa_par) = sa;
6416             // e-o, o-e                       << 4439   (*slamb0_par) = slamb0;
6417             e0 = 0.285 + 11.17 * std::pow(a,  << 4440   (*sbp_par) = sbp;
                                                   >> 4441   (*sbd_par) = sbd;
                                                   >> 4442   (*sbt_par) = sbt;
                                                   >> 4443   (*sbhe_par) = sbhe;
                                                   >> 4444   (*sba_par) = sba;
                                                   >> 4445   (*ecn_par) = ecn;
                                                   >> 4446   (*ecp_par) = ecp;
                                                   >> 4447   (*ecd_par) = ecd;
                                                   >> 4448   (*ect_par) = ect;
                                                   >> 4449   (*eche_par) = eche;
                                                   >> 4450   (*eca_par) = eca;
                                                   >> 4451   (*ecg_par) = ecg;
                                                   >> 4452   (*eclamb0_par) = eclamb0;
                                                   >> 4453   (*bp_par) = bp;
                                                   >> 4454   (*bd_par) = bd;
                                                   >> 4455   (*bt_par) = bt;
                                                   >> 4456   (*bhe_par) = bhe;
                                                   >> 4457   (*ba_par) = ba;
                                                   >> 4458   (*tcn) = ftcn;
                                                   >> 4459   (*ts1_par) = ts1;
                                                   >> 4460   (*jprfn_par) = jprfn;
                                                   >> 4461   (*jprfp_par) = jprfp;
                                                   >> 4462   (*jprfd_par) = jprfd;
                                                   >> 4463   (*jprft_par) = jprft;
                                                   >> 4464   (*jprfhe_par) = jprfhe;
                                                   >> 4465   (*jprfa_par) = jprfa;
                                                   >> 4466   (*jprflamb0_par) = jprflamb0;
                                                   >> 4467   (*tsum_par) = tsum;
                                                   >> 4468   return;
                                                   >> 4469 }
                                                   >> 4470 
                                                   >> 4471 void G4Abla::densniv(G4double a, G4double z, G4double ee, G4double esous, G4double *dens, G4double bshell, G4double bsin, G4double bkin, G4double *temp, G4int optshp, G4int optcol, G4double defbet, G4double *ecor, G4double jprf, G4int ifis,G4double *qr)
                                                   >> 4472 {
                                                   >> 4473   //   1498 C                                                                       
                                                   >> 4474   //   1499 C     INPUT:                                                            
                                                   >> 4475   //   1500 C             A,EE,ESOUS,OPTSHP,BS,BK,BSHELL,DEFBET                     
                                                   >> 4476   //   1501 C                                                                       
                                                   >> 4477   //   1502 C     LEVEL DENSITY PARAMETERS                                          
                                                   >> 4478   //   1503 C     COMMON /ALD/    AV,AS,AK,OPTAFAN                                  
                                                   >> 4479   //   1504 C     AV,AS,AK - VOLUME,SURFACE,CURVATURE DEPENDENCE OF THE             
                                                   >> 4480   //   1505 C                LEVEL DENSITY PARAMETER                                
                                                   >> 4481   //   1506 C     OPTAFAN - 0/1  AF/AN >=1 OR AF/AN ==1                             
                                                   >> 4482   //   1507 C               RECOMMENDED IS OPTAFAN = 0                              
                                                   >> 4483   //   1508 C---------------------------------------------------------------------  
                                                   >> 4484   //   1509 C     OUTPUT: DENS,TEMP                                                 
                                                   >> 4485   //   1510 C                                                                       
                                                   >> 4486   //   1511 C   ____________________________________________________________________
                                                   >> 4487   //   1512 C  /                                                                    
                                                   >> 4488   //   1513 C  /  PROCEDURE FOR CALCULATING THE STATE DENSITY OF A COMPOUND NUCLEUS 
                                                   >> 4489   //   1514 C  /____________________________________________________________________
                                                   >> 4490   //   1515 C                                                                       
                                                   >> 4491   //   1516       INTEGER AFP,IZ,OPTSHP,OPTCOL,J,OPTAFAN                            
                                                   >> 4492   //   1517       REAL*8 A,EE,ESOUS,DENS,E,Y0,Y1,Y2,Y01,Y11,Y21,PA,BS,BK,TEMP       
                                                   >> 4493   //   1518 C=====INSERTED BY KUDYAEV===============================================
                                                   >> 4494   //   1519       COMMON /ALD/ AV,AS,AK,OPTAFAN                                     
                                                   >> 4495   //   1520       REAL*8 ECR,ER,DELTAU,Z,DELTPP,PARA,PARZ,FE,HE,ECOR,ECOR1,Pi6      
                                                   >> 4496   //   1521       REAL*8 BSHELL,DELTA0,AV,AK,AS,PONNIV,PONFE,DEFBET,QR,SIG,FP       
                                                   >> 4497   //   1522 C=======================================================================
                                                   >> 4498   //   1523 C                                                                       
                                                   >> 4499   //   1524 C                                                                       
                                                   >> 4500   //   1525 C-----------------------------------------------------------------------
                                                   >> 4501   //   1526 C     A                 MASS NUMBER OF THE DAUGHTER NUCLEUS             
                                                   >> 4502   //   1527 C     EE                EXCITATION ENERGY OF THE MOTHER NUCLEUS         
                                                   >> 4503   //   1528 C     ESOUS             SEPARATION ENERGY PLUS EFFECTIVE COULOMB BARRIER
                                                   >> 4504   //   1529 C     DENS              STATE DENSITY OF DAUGHTER NUCLEUS AT EE-ESOUS-EC
                                                   >> 4505   //   1530 C     BSHELL            SHELL CORRECTION                                
                                                   >> 4506   //   1531 C     TEMP              NUCLEAR TEMPERATURE                             
                                                   >> 4507   //   1532 C     E        LOCAL    EXCITATION ENERGY OF THE DAUGHTER NUCLEUS       
                                                   >> 4508   //   1533 C     E1       LOCAL    HELP VARIABLE                                   
                                                   >> 4509   //   1534 C     Y0,Y1,Y2,Y01,Y11,Y21                                              
                                                   >> 4510   //   1535 C              LOCAL    HELP VARIABLES                                  
                                                   >> 4511   //   1536 C     PA       LOCAL    STATE-DENSITY PARAMETER                         
                                                   >> 4512   //   1537 C     EC                KINETIC ENERGY OF EMITTED PARTICLE WITHOUT      
                                                   >> 4513   //   1538 C                        COULOMB REPULSION                              
                                                   >> 4514   //   1539 C     IDEN              FAKTOR FOR SUBSTRACTING KINETIC ENERGY IDEN*TEMP
                                                   >> 4515   //   1540 C     DELTA0            PAIRING GAP 12 FOR GROUND STATE                 
                                                   >> 4516   //   1541 C                       14 FOR SADDLE POINT                             
                                                   >> 4517   //   1542 C     EITERA            HELP VARIABLE FOR TEMPERATURE ITERATION         
                                                   >> 4518   //   1543 C-----------------------------------------------------------------------
                                                   >> 4519   //   1544 C                                                                       
                                                   >> 4520   //   1545 C                                                                       
                                                   >> 4521   G4double delta0 = 0.0;
                                                   >> 4522   G4double deltau = 0.0;
                                                   >> 4523   G4double deltpp = 0.0;
                                                   >> 4524   G4double e = 0.0;
                                                   >> 4525   G4double e0 = 0.0;
                                                   >> 4526   G4double ecor1 = 0.0;
                                                   >> 4527   G4double ecr = 10.0;
                                                   >> 4528   G4double fe = 0.0;
                                                   >> 4529   G4double he = 0.0;
                                                   >> 4530   G4double pa = 0.0;
                                                   >> 4531   G4double para = 0.0;
                                                   >> 4532   G4double parz = 0.0;
                                                   >> 4533   G4double ponfe = 0.0;
                                                   >> 4534   G4double ponniv = 0.0;
                                                   >> 4535   G4double fqr = 1.0;
                                                   >> 4536   G4double y01 = 0.0;
                                                   >> 4537   G4double y11 = 0.0;
                                                   >> 4538   G4double y2 = 0.0;
                                                   >> 4539   G4double y21 = 0.0;
                                                   >> 4540   G4double y1 = 0.0;
                                                   >> 4541   G4double y0 = 0.0;
                                                   >> 4542   G4double fnorm=0.0;
                                                   >> 4543   G4double fp_per=0.;
                                                   >> 4544   G4double fp_par=0.;
                                                   >> 4545   G4double sig_per=0.;
                                                   >> 4546   G4double sig_par=0.;
                                                   >> 4547   G4double sigma2;
                                                   >> 4548   G4double jfact=1.;
                                                   >> 4549   G4double erot=0.;
                                                   >> 4550   G4double fdens=0.;
                                                   >> 4551   G4double fecor=0.;
                                                   >> 4552   G4double BSHELLCT=0.;
                                                   >> 4553   G4double gamma=0.;
                                                   >> 4554   G4double ftemp=0.0;
                                                   >> 4555   G4double tempct=0.0;
                                                   >> 4556   G4double densfm = 0.0;
                                                   >> 4557   G4double densct = 0.0;
                                                   >> 4558   G4double ein=0.;
                                                   >> 4559   G4double elim;
                                                   >> 4560   G4double tfm;
                                                   >> 4561   G4double bs=bsin;
                                                   >> 4562   G4double bk=bkin;
                                                   >> 4563   G4int IPARITE;
                                                   >> 4564   G4int IOPTCT=fiss->optct;
                                                   >> 4565 //
                                                   >> 4566   G4double pi6 = std::pow(3.1415926535,2) / 6.0;
                                                   >> 4567   G4double pi = 3.1415926535;
                                                   >> 4568 //
                                                   >> 4569   G4int afp=idnint(a);
                                                   >> 4570   G4int iz=idnint(z);
                                                   >> 4571   G4int in=afp-iz;
                                                   >> 4572 //
                                                   >> 4573   if(ifis!=1){
                                                   >> 4574      BSHELLCT = ecld->ecgnz[in][iz];
                                                   >> 4575   }else{
                                                   >> 4576      BSHELLCT = 0.0;
                                                   >> 4577   }
                                                   >> 4578   if(afp<=20) BSHELLCT = 0.0;
                                                   >> 4579   //
                                                   >> 4580    parite(a,&para);
                                                   >> 4581    if (para < 0.0){
                                                   >> 4582 // Odd A
                                                   >> 4583   IPARITE=1;
                                                   >> 4584    }else{   
                                                   >> 4585 // Even A                                                      
                                                   >> 4586       parite(z,&parz);
                                                   >> 4587       if(parz > 0.0){
                                                   >> 4588 // Even Z, even N
                                                   >> 4589         IPARITE=2;
                                                   >> 4590       }else{
                                                   >> 4591 // Odd Z, odd N 
                                                   >> 4592         IPARITE=0;
                                                   >> 4593       }
                                                   >> 4594    }
                                                   >> 4595 //
                                                   >> 4596    ein = ee - esous;
                                                   >> 4597 //
                                                   >> 4598    if(ein>1.e30){
                                                   >> 4599       fdens = 0.0;
                                                   >> 4600       ftemp = 0.5;
                                                   >> 4601       goto densniv100;
                                                   >> 4602    }
                                                   >> 4603 //
                                                   >> 4604    e = ee - esous;
                                                   >> 4605 //
                                                   >> 4606    if(e<0.0&&ifis!=1){  // TUNNELING
                                                   >> 4607         fdens = 0.0;
                                                   >> 4608         densfm = 0.0;
                                                   >> 4609         densct = 0.0;
                                                   >> 4610         if(ald->optafan == 1) {
                                                   >> 4611          pa = (ald->av)*a + (ald->as)*std::pow(a,(2.e0/3.e0)) + (ald->ak)*std::pow(a,(1.e0/3.e0));
                                                   >> 4612         }else {
                                                   >> 4613          pa = (ald->av)*a + (ald->as)*bsin*std::pow(a,(2.e0/3.e0)) + (ald->ak)*bkin*std::pow(a,(1.e0/3.e0));
6418         }                                        4614         }
6419         else                                  << 4615         gamma = 2.5 * pa * std::pow(a,-4.0/3.0);
6420         {                                     << 4616         fecor=0.0;
6421             G4double parz = 0.;               << 4617         goto densniv100;
6422             parite(z, &parz);                 << 4618    }
6423             if (parz > 0.0)                   << 4619 //
6424             {                                 << 4620    if(ifis==0&&bs!=1.0){
6425                 // e-e                        << 4621 // - With increasing excitation energy system in getting less and less deformed:
6426                 e0 = 22.34 * std::pow(a, -0.4 << 4622      G4double ponq = (e-100.0)/5.0;
6427             }                                 << 4623      if(ponq>700.0) ponq = 700.0;
6428             else                              << 4624        bs = 1.0/(1.0+std::exp(-ponq)) + 1.0/(1.0+std::exp(ponq)) * bsin;
6429             {                                 << 4625        bk = 1.0/(1.0+std::exp(-ponq)) + 1.0/(1.0+std::exp(ponq)) * bkin;
6430                 // o-o                        << 4626    }
6431                 e0 = 0.0;                     << 4627 //
6432             }                                 << 4628   // level density parameter                                               
                                                   >> 4629   if(ald->optafan == 1) {
                                                   >> 4630     pa = (ald->av)*a + (ald->as)*std::pow(a,(2.e0/3.e0)) + (ald->ak)*std::pow(a,(1.e0/3.e0));
                                                   >> 4631   }
                                                   >> 4632   else {
                                                   >> 4633     pa = (ald->av)*a + (ald->as)*bs*std::pow(a,(2.e0/3.e0)) + (ald->ak)*bk*std::pow(a,(1.e0/3.e0));
                                                   >> 4634   }
                                                   >> 4635 //
                                                   >> 4636   gamma = 2.5 * pa * std::pow(a,-4.0/3.0);
                                                   >> 4637 //
                                                   >> 4638 // AK - 2009 - trial, in order to have transition to constant-temperature approach
                                                   >> 4639 // Idea - at the phase transition superfluid-normal fluid, TCT = TEMP, and this
                                                   >> 4640 // determines critical energy for pairing.
                                                   >> 4641   if(a>0.0){
                                                   >> 4642    ecr = pa*17.60/(std::pow(a,0.699) * std::sqrt(1.0+gamma*BSHELLCT))*17.60/(std::pow(a,0.699) * std::sqrt(1.0+gamma*BSHELLCT));
                                                   >> 4643   }
                                                   >> 4644 
                                                   >> 4645   // pairing corrections                                                   
                                                   >> 4646   if (ifis == 1) {
                                                   >> 4647     delta0 = 14;
                                                   >> 4648   }
                                                   >> 4649   else {
                                                   >> 4650     delta0 = 12;
                                                   >> 4651   }
                                                   >> 4652 
                                                   >> 4653   // shell corrections                                                     
                                                   >> 4654   if (optshp > 0) {
                                                   >> 4655     deltau = bshell;
                                                   >> 4656     if (optshp == 2) {
                                                   >> 4657       deltau = 0.0;
                                                   >> 4658     }
                                                   >> 4659     if (optshp >= 2) {
                                                   >> 4660       // pairing energy shift with condensation energy a.r.j. 10.03.97        
                                                   >> 4661     //deltpp = -0.25e0* (delta0/pow(sqrt(a),2)) * pa /pi6 + 2.e0*delta0/sqrt(a);
                                                   >> 4662       deltpp = -0.25e0* std::pow((delta0/std::sqrt(a)),2) * pa /pi6 + 22.34e0*std::pow(a,-0.464)-0.235;
                                                   >> 4663       // Odd A
                                                   >> 4664       if (IPARITE == 1) {
                                                   >> 4665   //e = e - delta0/sqrt(a);
                                                   >> 4666         e=e-(0.285+11.17*std::pow(a,-0.464)-0.390-0.00058*a);//-30./a;//FIXME
                                                   >> 4667       }
                                                   >> 4668       // Even Z, even N
                                                   >> 4669       if(IPARITE==2){ 
                                                   >> 4670            e=e-(22.34*std::pow(a,-0.464)-0.235);//-30./a;//FIXME
                                                   >> 4671       }
                                                   >> 4672       // Odd Z, odd N
                                                   >> 4673       if(IPARITE==0){
                                                   >> 4674         if(in==iz){
                                                   >> 4675          //  e = e;
                                                   >> 4676         }else{
                                                   >> 4677          //  e = e-30./a;
6433         }                                        4678         }
6434         efl = efl - e0;                       << 4679       }
6435         // end if for pairing term            << 4680     } else {                                                          
                                                   >> 4681       deltpp = 0.0;
6436     }                                            4682     }
                                                   >> 4683   }else {
                                                   >> 4684     deltau = 0.0;
                                                   >> 4685     deltpp = 0.0;
                                                   >> 4686   }
                                                   >> 4687 
                                                   >> 4688   if(e < 0.0){
                                                   >> 4689     e = 0.0;
                                                   >> 4690     ftemp = 0.5;
                                                   >> 4691   }
                                                   >> 4692 
                                                   >> 4693   // washing out is made stronger                          
                                                   >> 4694   ponfe = -2.5*pa*e*std::pow(a,(-4.0/3.0));
                                                   >> 4695 
                                                   >> 4696   if (ponfe < -700.0)  {
                                                   >> 4697     ponfe = -700.0;
                                                   >> 4698   }
                                                   >> 4699   fe = 1.0 - std::exp(ponfe);
                                                   >> 4700   if (e < ecr) {
                                                   >> 4701     // priv. comm. k.-h. schmidt                                         
                                                   >> 4702     he = 1.0 - std::pow((1.0 - e/ecr),2);
                                                   >> 4703   }
                                                   >> 4704   else {
                                                   >> 4705     he = 1.0;
                                                   >> 4706   }
                                                   >> 4707   // Excitation energy corrected for pairing and shell effects             
                                                   >> 4708   // washing out with excitation energy is included.                        
                                                   >> 4709   fecor = e + deltau*fe + deltpp*he;
                                                   >> 4710   if (fecor <= 0.1) {
                                                   >> 4711     fecor = 0.1;
                                                   >> 4712   }                                          
                                                   >> 4713   // iterative procedure according to grossjean and feldmeier              
                                                   >> 4714   // to avoid the singularity e = 0                                        
                                                   >> 4715   if (ee < 5.0) {
                                                   >> 4716     y1 = std::sqrt(pa*fecor);
                                                   >> 4717     for(G4int j = 0; j < 5; j++) {
                                                   >> 4718       y2 = pa*fecor*(1.e0-std::exp(-y1));
                                                   >> 4719       y1 = std::sqrt(y2);
                                                   >> 4720     }
                                                   >> 4721     y0 = pa/y1;
                                                   >> 4722     ftemp=1.0/y0;
                                                   >> 4723     fdens = std::exp(y0*fecor)/ (std::pow((std::pow(fecor,3)*y0),0.5)*std::pow((1.0-0.5*y0*fecor*std::exp(-y1)),0.5))* std::exp(y1)*(1.0-std::exp(-y1))*0.1477045;
                                                   >> 4724     if (fecor < 1.0) {
                                                   >> 4725       ecor1=1.0;
                                                   >> 4726       y11 = std::sqrt(pa*ecor1);
                                                   >> 4727       for(G4int j = 0; j < 7; j++) {
                                                   >> 4728   y21 = pa*ecor1*(1.0-std::exp(-y11));
                                                   >> 4729   y11 = std::sqrt(y21);
                                                   >> 4730       }
6437                                                  4731 
6438     eflmacResult = efl;                       << 4732       y01 = pa/y11;
                                                   >> 4733       fdens = fdens*std::pow((y01/y0),1.5);
                                                   >> 4734       ftemp = ftemp*std::pow((y01/y0),1.5);
                                                   >> 4735     }
                                                   >> 4736   }
                                                   >> 4737   else {
                                                   >> 4738     ponniv = 2.0*std::sqrt(pa*fecor);
                                                   >> 4739     if (ponniv > 700.0) {
                                                   >> 4740       ponniv = 700.0;
                                                   >> 4741     }
                                                   >> 4742     // fermi gas state density                                               
                                                   >> 4743     fdens = 0.1477045 * std::exp(ponniv)/(std::pow(pa,0.25)*std::pow(fecor,1.25));
                                                   >> 4744     ftemp = std::sqrt(fecor/pa);
                                                   >> 4745   }
                                                   >> 4746 //
                                                   >> 4747   densfm = fdens;
                                                   >> 4748   tfm = ftemp;
                                                   >> 4749 //
                                                   >> 4750   if(IOPTCT==0) goto densniv100;
                                                   >> 4751   tempct = 17.60/( std::pow(a,0.699) * std::sqrt(1.+gamma*BSHELLCT));
                                                   >> 4752   //tempct = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667));  // from  PRC 80 (2009) 054310
                                                   >> 4753 
                                                   >> 4754 // - CONSTANT-TEMPERATURE LEVEL DENSITY PARAMETER (ONLY AT LOW ENERGIES)
                                                   >> 4755   if(e<30.){
                                                   >> 4756    if(a>0.0){
                                                   >> 4757      if(optshp>=2){
                                                   >> 4758 // Parametrization of CT model by Ignatyuk; note that E0 is shifted to correspond
                                                   >> 4759 // to pairing shift in Fermi-gas model (there, energy is shifted taking odd-odd nuclei
                                                   >> 4760 //  as bassis)
                                                   >> 4761 // e-o, o-e
                                                   >> 4762             if (IPARITE == 1) { e0 = 0.285+11.17*std::pow(a,-0.464) - 0.390-0.00058*a;}
                                                   >> 4763 // e-e
                                                   >> 4764             if (IPARITE == 2) { e0 = 22.34*std::pow(a,-0.464)-0.235;}
                                                   >> 4765 // o-o
                                                   >> 4766             if (IPARITE == 0){ e0 = 0.0;}
                                                   >> 4767 
                                                   >> 4768         ponniv = (ein-e0)/tempct;
                                                   >> 4769         if(ifis!=1) ponniv = max(0.0,(ein-e0)/tempct);
                                                   >> 4770         if(ponniv>700.0){ ponniv = 700.0;}
                                                   >> 4771         densct = std::exp(ponniv)/tempct*std::exp(0.079*BSHELLCT/tempct);
                                                   >> 4772 
                                                   >> 4773         elim = ein;
                                                   >> 4774 
                                                   >> 4775         if(elim>=ecr&&densfm<=densct){
                                                   >> 4776           fdens = densfm;
                                                   >> 4777         //  IREGCT = 0;
                                                   >> 4778         }else{
                                                   >> 4779           fdens = densct;
                                                   >> 4780          // IREGCT = 1;
                                                   >> 4781 //         ecor = min(ein-e0,0.10);
                                                   >> 4782         }
                                                   >> 4783         if(elim>=ecr&&tfm>=tempct){
                                                   >> 4784           ftemp = tfm;
                                                   >> 4785         }else{
                                                   >> 4786           ftemp = tempct;
                                                   >> 4787         }
                                                   >> 4788      }else{
                                                   >> 4789 // Case of no pairing considered
                                                   >> 4790 //        ETEST = PA * TEMPCT**2
                                                   >> 4791         ponniv = (ein)/tempct;
                                                   >> 4792         if(ponniv>700.0){ ponniv = 700.0;}
                                                   >> 4793         densct = std::exp(ponniv)/tempct;
                                                   >> 4794 
                                                   >> 4795         if(ein>=ecr && densfm<=densct){
                                                   >> 4796           fdens = densfm;
                                                   >> 4797           ftemp = tfm;
                                                   >> 4798         //  IREGCT = 0;
                                                   >> 4799         }else{
                                                   >> 4800           fdens = densct;
                                                   >> 4801           ftemp = tempct;
                                                   >> 4802 //          ECOR = DMIN1(EIN,0.1D0)
                                                   >> 4803         }
                                                   >> 4804 
                                                   >> 4805         if(ein>=ecr && tfm>=tempct){
                                                   >> 4806           ftemp = tfm;
                                                   >> 4807         }else{
                                                   >> 4808           ftemp = tempct;
                                                   >> 4809         }
                                                   >> 4810      }
                                                   >> 4811    }
                                                   >> 4812   }
                                                   >> 4813 
                                                   >> 4814 
                                                   >> 4815  densniv100:
                                                   >> 4816 
                                                   >> 4817  if(fdens==0.0){
                                                   >> 4818     if(a>0.0){
                                                   >> 4819 // Parametrization of CT model by Ignatyuk done for masses > 20
                                                   >> 4820          ftemp = 17.60/( std::pow(a,0.699) * std::sqrt(1.0+gamma*BSHELLCT));
                                                   >> 4821        //  ftemp = 1.0 / ( (0.0570 + 0.00193*BSHELLCT) * pow(a,0.6666667));  // from  PRC 80 (2009) 054310
                                                   >> 4822     }else{
                                                   >> 4823          ftemp = 0.5;
                                                   >> 4824     }
                                                   >> 4825  }
                                                   >> 4826 //
                                                   >> 4827 // spin cutoff parameter
                                                   >> 4828 /*
                                                   >> 4829 C PERPENDICULAR AND PARALLEL MOMENT OF INERTIA
                                                   >> 4830 c fnorm = R0*M0/hbar**2 = 1.16fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is
                                                   >> 4831 c in units 1/MeV
                                                   >> 4832 */
                                                   >> 4833  fnorm = std::pow(1.16,2)*931.49*1.e-2/(9.0* std::pow(6.582122,2));
                                                   >> 4834 
                                                   >> 4835  if(ifis==0 || ifis==2){
                                                   >> 4836 /*
                                                   >> 4837 C GROUND STATE:
                                                   >> 4838 C FP_PER ~ 1+0.5*alpha2, FP_PAR ~ 1-alpha2 (Hasse & Myers, Geom. relat. macr. nucl. phys.)
                                                   >> 4839 C alpha2 = sqrt(5/(4*pi))*beta2
                                                   >> 4840 */
                                                   >> 4841     fp_per = 0.4*std::pow(a,5.0/3.0)*fnorm*(1.0+0.50*defbet*std::sqrt(5.0/(4.0*pi)));
                                                   >> 4842     fp_par = 0.40*std::pow(a,5.0/3.0)*fnorm*(1.0-defbet*std::sqrt(5.0/(4.0*pi)));
                                                   >> 4843 
                                                   >> 4844  }else{
                                                   >> 4845   if(ifis==1){
                                                   >> 4846 /*
                                                   >> 4847 C SADDLE POINT
                                                   >> 4848 C See Hasse&Myer, p. 100
                                                   >> 4849 C Perpendicular moment of inertia
                                                   >> 4850 */
                                                   >> 4851     fp_per = 2.0/5.0*std::pow(a,5.0/3.0)*fnorm*(1.0+7.0/6.0*defbet*(1.0+1396.0/255.0*defbet));
                                                   >> 4852 // Parallel moment of inertia
                                                   >> 4853     fp_par = 2.0/5.0*std::pow(a,5.0/3.0)*fnorm*(1.0-7.0/3.0*defbet*(1.0-389.0/255.0*defbet));
                                                   >> 4854   }else{
                                                   >> 4855    if(ifis==20){
                                                   >> 4856 // IMF - two fragments in contact; it is asumed that both are spherical.
                                                   >> 4857 // See Hasse&Myers, p.106
                                                   >> 4858 // Here, DEFBET = R1/R2, where R1 and R2 are radii of IMF and its partner
                                                   >> 4859 // Perpendicular moment of inertia
                                                   >> 4860    fp_per = 0.4*std::pow(a,5.0/3.0)*fnorm*3.50*(1.0 + std::pow(defbet,5.))/std::pow(1.0 + defbet*defbet*defbet,5.0/3.0);
                                                   >> 4861    fp_par = 0.4*std::pow(a,5.0/3.0)*fnorm*(1.0 + std::pow(defbet,5.0))/std::pow(1.0 + defbet*defbet*defbet,5.0/3.0);
                                                   >> 4862    }
                                                   >> 4863   }
                                                   >> 4864  }
                                                   >> 4865   if(fp_par<0.0)fp_par=0.0;
                                                   >> 4866   if(fp_per<0.0)fp_per=0.0;
                                                   >> 4867 //
                                                   >> 4868   sig_per = std::sqrt(fp_per * ftemp);
                                                   >> 4869   sig_par = std::sqrt(fp_par * ftemp);
                                                   >> 4870 //
                                                   >> 4871   sigma2 = sig_per*sig_per + sig_par*sig_par;
                                                   >> 4872   jfact = (2.*jprf+1.)*std::exp(-1.*jprf*(jprf+1.0)/(2.0*sigma2))/(std::sqrt(8.0*3.1415)*std::pow(sigma2,1.5));
                                                   >> 4873   erot = jprf*jprf/(2.0*std::sqrt(fp_par*fp_par+fp_per*fp_per));
                                                   >> 4874 //
                                                   >> 4875   // collective enhancement                                            
                                                   >> 4876   if (optcol == 1) {
                                                   >> 4877     qrot(z,a,defbet,sig_per,fecor-erot,&fqr);
                                                   >> 4878   }
                                                   >> 4879   else {
                                                   >> 4880     fqr   = 1.0;
                                                   >> 4881   }
                                                   >> 4882 //
                                                   >> 4883   fdens = fdens * fqr *jfact;
                                                   >> 4884 //
                                                   >> 4885   if(fdens<1e-300)fdens=0.0;
                                                   >> 4886 //
                                                   >> 4887   *dens =fdens;
                                                   >> 4888   *ecor=fecor;
                                                   >> 4889   *temp=ftemp;
                                                   >> 4890   *qr=fqr;
                                                   >> 4891 }
                                                   >> 4892 
                                                   >> 4893 void G4Abla::qrot(G4double z, G4double a, G4double bet, G4double sig, G4double u, G4double *qr)
                                                   >> 4894 {
                                                   >> 4895 /*
                                                   >> 4896 C QROT INCLUDING DAMPING
                                                   >> 4897 C
                                                   >> 4898 C INPUT: Z,A,DEFBET,SIG,U
                                                   >> 4899 C
                                                   >> 4900 C OUTPUT: QR - COLLECTIVE ENHANCEMENT FACTOR
                                                   >> 4901 C
                                                   >> 4902 C SEE  JUNGHANS ET AL., NUCL. PHYS. A 629 (1998) 635
                                                   >> 4903 C
                                                   >> 4904 C
                                                   >> 4905 C   FR(U)    EXPONENTIAL FUNCTION TO DEFINE DAMPING
                                                   >> 4906 C   UCR      CRITICAL ENERGY FOR DAMPING
                                                   >> 4907 C   DCR      WIDTH OF DAMPING
                                                   >> 4908 C   DEFBET   BETA-DEFORMATION !
                                                   >> 4909 C   SIG      PERPENDICULAR SPIN CUTOFF FACTOR
                                                   >> 4910 C     U      ENERGY
                                                   >> 4911 C    QR      COEFFICIENT OF COLLECTIVE ENHANCEMENT
                                                   >> 4912 C     A      MASS NUMBER
                                                   >> 4913 C     Z      CHARGE NUMBER
                                                   >> 4914 C
                                                   >> 4915 */
                                                   >> 4916 // JLRS: July 2016: new values for the collective parameters
                                                   >> 4917 //
                                                   >> 4918 
                                                   >> 4919   G4double ucr = fiss->ucr; // Critical energy for damping.
                                                   >> 4920   G4double dcr = fiss->dcr; // Width of damping.
                                                   >> 4921   G4double ponq = 0.0, dn = 0.0, n = 0.0, dz = 0.0;
                                                   >> 4922   G4int distn,distz,ndist, zdist;
                                                   >> 4923   G4int nmn[8]= {2, 8, 14, 20, 28, 50, 82, 126};
                                                   >> 4924   G4int nmz[8]= {2, 8, 14, 20, 28, 50, 82, 126};
                                                   >> 4925 //
                                                   >> 4926   sig = sig*sig;
                                                   >> 4927 //
                                                   >> 4928  if(std::abs(bet)<=0.15){
                                                   >> 4929   goto qrot10;
                                                   >> 4930  }else{
                                                   >> 4931   goto qrot11;
                                                   >> 4932  }
                                                   >> 4933 //
                                                   >> 4934  qrot10:
                                                   >> 4935   n = a - z;
                                                   >> 4936   distn = 10000000;
                                                   >> 4937   distz = 10000000;
                                                   >> 4938 
                                                   >> 4939   for(G4int i =0;i<8;i++){
                                                   >> 4940    ndist = std::fabs(idnint(n) - nmn[i]);
                                                   >> 4941    if(ndist < distn) distn = ndist;
                                                   >> 4942    zdist = std::fabs(idnint(z) - nmz[i]);
                                                   >> 4943    if(zdist < distz) distz = zdist;
                                                   >> 4944   }
                                                   >> 4945 
                                                   >> 4946   dz = G4float(distz);
                                                   >> 4947   dn = G4float(distn);
                                                   >> 4948 
                                                   >> 4949   bet = 0.022 + 0.003*dn + 0.002*dz;
                                                   >> 4950 
                                                   >> 4951   sig = 75.0*std::pow(bet,2.) * sig;
                                                   >> 4952 
                                                   >> 4953 // NO VIBRATIONAL ENHANCEMENT
                                                   >> 4954  qrot11:   
                                                   >> 4955   ponq = (u - ucr)/dcr;
                                                   >> 4956 
                                                   >> 4957   if (ponq > 700.0) {
                                                   >> 4958     ponq = 700.0;
                                                   >> 4959   }
                                                   >> 4960   if (sig < 1.0) {
                                                   >> 4961     sig = 1.0;
                                                   >> 4962   }
                                                   >> 4963   (*qr) = 1.0/(1.0 + std::exp(ponq)) * (sig - 1.0) + 1.0;
                                                   >> 4964 
                                                   >> 4965   if ((*qr) < 1.0) {
                                                   >> 4966     (*qr) = 1.0;
                                                   >> 4967   }
6439                                                  4968 
6440     return eflmacResult;                      << 4969   return;
6441 }                                                4970 }
6442                                                  4971 
6443 void G4Abla::appariem(G4double a, G4double z, << 4972 void G4Abla::lpoly(G4double x, G4int n, G4double pl[])
6444 {                                                4973 {
6445     // CALCUL DE LA CORRECTION, DUE A L'APPAR << 4974   // THIS SUBROUTINE CALCULATES THE ORDINARY LEGENDRE POLYNOMIALS OF   
6446     // LIAISON D'UN NOYAU                     << 4975   // ORDER 0 TO N-1 OF ARGUMENT X AND STORES THEM IN THE VECTOR PL.    
6447     // PROCEDURE FOR CALCULATING THE PAIRING  << 4976   // THEY ARE CALCULATED BY RECURSION RELATION FROM THE FIRST TWO      
6448     // ENERGY OF A SPECIFIC NUCLEUS           << 4977   // POLYNOMIALS.                                                      
6449                                               << 4978   // WRITTEN BY A.J.SIERK  LANL  T-9  FEBRUARY, 1984            
6450     G4double para = 0.0, parz = 0.0;          << 4979   // NOTE: PL AND X MUST BE DOUBLE PRECISION ON 32-BIT COMPUTERS!      
6451     // A                 MASS NUMBER          << 4980 
6452     // Z                 NUCLEAR CHARGE       << 4981   pl[0] = 1.0;
6453     // PARA              HELP VARIABLE FOR PA << 4982   pl[1] = x;
6454     // PARZ              HELP VARIABLE FOR PA << 4983 
6455     // DEL               PAIRING CORRECTION   << 4984   for(G4int i = 2; i < n; i++) {
6456                                               << 4985     pl[i] = ((2*G4double(i+1) - 3.0)*x*pl[i-1] - (G4double(i+1) - 2.0)*pl[i-2])/(G4double(i+1)-1.0);
6457     parite(a, &para);                         << 4986   }
6458                                               << 
6459     if (para < 0.0)                           << 
6460     {                                         << 
6461         (*del) = 0.0;                         << 
6462     }                                         << 
6463     else                                      << 
6464     {                                         << 
6465         parite(z, &parz);                     << 
6466         if (parz > 0.0)                       << 
6467         {                                     << 
6468             (*del) = -12.0 / std::sqrt(a);    << 
6469         }                                     << 
6470         else                                  << 
6471         {                                     << 
6472             (*del) = 12.0 / std::sqrt(a);     << 
6473         }                                     << 
6474     }                                         << 
6475 }                                                4987 }
6476                                                  4988 
6477 void G4Abla::parite(G4double n, G4double* par << 4989 G4double G4Abla::eflmac(G4int ia, G4int iz, G4int flag, G4int optshp)
6478 {                                                4990 {
6479     // CALCUL DE LA PARITE DU NOMBRE N        << 4991   // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS.     
6480     //                                        << 4992   // SWITCH FOR PAIRING INCLUDED AS WELL.                                  
6481     // PROCEDURE FOR CALCULATING THE PARITY O << 4993   // BINDING = EFLMAC(IA,IZ,0,OPTSHP)                                      
6482     // RETURNS -1 IF N IS ODD AND +1 IF N IS  << 4994   // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C                       
6483                                               << 4995   // A.J. 15.07.96                                                         
6484     G4double n1 = 0.0, n2 = 0.0, n3 = 0.0;    << 4996 
6485                                               << 4997   // this function will calculate the liquid-drop nuclear mass for spheri
6486     // N                 NUMBER TO BE TESTED  << 4998   // configuration according to the preprint NUCLEAR GROUND-STATE        
6487     // N1,N2             HELP VARIABLES       << 4999   // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p.
6488     // PAR               HELP VARIABLE FOR PA << 5000   // All constants are taken from this publication for consistency.      
6489                                               << 5001 
6490     n3 = G4double(idnint(n));                 << 5002   // Parameters:                                                         
6491     n1 = n3 / 2.0;                            << 5003   // a:    nuclear mass number                                         
6492     n2 = n1 - dint(n1);                       << 5004   // z:    nuclear charge                                              
6493                                               << 5005   // flag:     0       - return mass excess                            
6494     if (n2 > 0.0)                             << 5006   //       otherwise   - return pairing (= -1/2 dpn + 1/2 (Dp + Dn))   
6495     {                                         << 5007 
6496         (*par) = -1.0;                        << 5008   G4double eflmacResult = 0.0;
6497     }                                         << 5009 
6498     else                                      << 5010   if(ia==0)return eflmacResult;
6499     {                                         << 5011 
6500         (*par) = 1.0;                         << 5012   G4int in = 0;
6501     }                                         << 5013   G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0;
                                                   >> 5014   G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0;
                                                   >> 5015   G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0; 
                                                   >> 5016   G4double r0 = 0.0, kf = 0.0, ks = 0.0;
                                                   >> 5017   G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0;
                                                   >> 5018   G4double esq = 0.0, ael = 0.0, i = 0.0, e0 = 0.0;
                                                   >> 5019   G4double pi = 3.141592653589793238e0;
                                                   >> 5020 
                                                   >> 5021   // fundamental constants
                                                   >> 5022   // electronic charge squared
                                                   >> 5023   esq = 1.4399764;
                                                   >> 5024 
                                                   >> 5025   // constants from considerations other than nucl. masses
                                                   >> 5026   // electronic binding
                                                   >> 5027   ael = 1.433e-5;
                                                   >> 5028 
                                                   >> 5029   // proton rms radius
                                                   >> 5030   rp  = 0.8;
                                                   >> 5031 
                                                   >> 5032   // nuclear radius constant
                                                   >> 5033   r0  = 1.16;
                                                   >> 5034 
                                                   >> 5035   // range of yukawa-plus-expon. potential
                                                   >> 5036   ay  = 0.68;
                                                   >> 5037 
                                                   >> 5038   // range of yukawa function used to generate                          
                                                   >> 5039   // nuclear charge distribution
                                                   >> 5040   aden= 0.70;
                                                   >> 5041 
                                                   >> 5042   // wigner constant
                                                   >> 5043   w   = 30.0;
                                                   >> 5044 
                                                   >> 5045   // adjusted parameters
                                                   >> 5046   // volume energy
                                                   >> 5047   av  = 16.00126;
                                                   >> 5048 
                                                   >> 5049   // volume asymmetry
                                                   >> 5050   kv  =  1.92240;
                                                   >> 5051 
                                                   >> 5052   // surface energy
                                                   >> 5053   as  = 21.18466;
                                                   >> 5054 
                                                   >> 5055   // surface asymmetry
                                                   >> 5056   ks  =  2.345;
                                                   >> 5057   // a^0 constant
                                                   >> 5058   a0  =  2.615;
                                                   >> 5059 
                                                   >> 5060   // charge asymmetry
                                                   >> 5061   ca  =  0.10289;
                                                   >> 5062 
                                                   >> 5063   z   = G4double(iz);
                                                   >> 5064   a   = G4double(ia);
                                                   >> 5065   in  = ia - iz;                                                       
                                                   >> 5066   n   = G4double(in);
                                                   >> 5067 
                                                   >> 5068   if(flag==1){goto eflmac311;}
                                                   >> 5069 
                                                   >> 5070   if(iz<13&&in<3){
                                                   >> 5071      if(masses->mexpiop[in][iz]==1){
                                                   >> 5072          return masses->bind[in][iz];
                                                   >> 5073      }
                                                   >> 5074   }
                                                   >> 5075 
                                                   >> 5076   eflmac311:
                                                   >> 5077   
                                                   >> 5078   c1  = 3.0/5.0*esq/r0;
                                                   >> 5079   c4  = 5.0/4.0*std::pow((3.0/(2.0*pi)),(2.0/3.0)) * c1;
                                                   >> 5080   kf  = std::pow((9.0*pi*z/(4.0*a)),(1.0/3.0))/r0;
                                                   >> 5081   
                                                   >> 5082   ff = -1.0/8.0*rp*rp*esq/std::pow(r0,3) * (145.0/48.0 - 327.0/2880.0*std::pow(kf,2) * std::pow(rp,2) + 1527.0/1209600.0*std::pow(kf,4) * std::pow(rp,4));
                                                   >> 5083   i   = (n-z)/a;
                                                   >> 5084 
                                                   >> 5085   x0  = r0 * std::pow(a,(1.0/3.0)) / ay;
                                                   >> 5086   y0  = r0 * std::pow(a,(1.0/3.0)) / aden;
                                                   >> 5087 
                                                   >> 5088   b1  = 1.0 - 3.0/(std::pow(x0,2)) + (1.0 + x0) * (2.0 + 3.0/x0 + 3.0/std::pow(x0,2)) * std::exp(-2.0*x0);
                                                   >> 5089 
                                                   >> 5090   b3  = 1.0 - 5.0/std::pow(y0,2) * (1.0 - 15.0/(8.0*y0) + 21.0/(8.0 * std::pow(y0,3))
                                                   >> 5091              - 3.0/4.0 * (1.0 + 9.0/(2.0*y0) + 7.0/std::pow(y0,2)
                                                   >> 5092               + 7.0/(2.0 * std::pow(y0,3))) * std::exp(-2.0*y0));
                                                   >> 5093 
                                                   >> 5094   // now calculation of total binding energy a.j. 16.7.96                   
                                                   >> 5095 
                                                   >> 5096   efl = -1.0 * av*(1.0 - kv*i*i)*a + as*(1.0 - ks*i*i)*b1 * std::pow(a,(2.0/3.0)) + a0
                                                   >> 5097     + c1*z*z*b3/std::pow(a,(1.0/3.0)) - c4*std::pow(z,(4.0/3.0))/std::pow(a,(1.e0/3.e0))
                                                   >> 5098     + ff*std::pow(z,2)/a -ca*(n-z) - ael * std::pow(z,(2.39e0));
                                                   >> 5099 
                                                   >> 5100   efl = efl + w*std::abs(i);
                                                   >> 5101 
                                                   >> 5102   // pairing is made optional                                              
                                                   >> 5103   if (optshp >= 2) {
                                                   >> 5104     // average pairing
                                                   >> 5105     if (in==iz && (mod(in,2) == 1) && (mod(iz,2) == 1) && in>0.) {
                                                   >> 5106       efl = efl + w/a;
                                                   >> 5107     }
                                                   >> 5108 
                                                   >> 5109 // AK 2008 - Parametrization of CT model by Ignatyuk;
                                                   >> 5110 // The following part has been introduced  in order to have correspondance
                                                   >> 5111 // between pairing in masses and level densities;
                                                   >> 5112 // AK 2010  note that E0 is shifted to correspond to pairing shift in
                                                   >> 5113 // Fermi-gas model (there, energy is shifted taking odd-odd nuclei
                                                   >> 5114 // as bassis)
                                                   >> 5115 
                                                   >> 5116     G4double para=0.;
                                                   >> 5117     parite(a,&para);
                                                   >> 5118 
                                                   >> 5119     if(para<0.0){
                                                   >> 5120 // e-o, o-e
                                                   >> 5121       e0 =  0.285+11.17*std::pow(a,-0.464) -0.390-0.00058*(a);
                                                   >> 5122     }else{
                                                   >> 5123         G4double parz=0.;
                                                   >> 5124         parite(z,&parz);
                                                   >> 5125         if (parz>0.0){
                                                   >> 5126 // e-e
                                                   >> 5127          e0 = 22.34*std::pow(a,-0.464)-0.235;
                                                   >> 5128         }else{
                                                   >> 5129 // o-o
                                                   >> 5130          e0 = 0.0;
                                                   >> 5131         }
                                                   >> 5132     }
                                                   >> 5133     efl = efl - e0;
                                                   >> 5134   // end if for pairing term                                  
                                                   >> 5135   }
                                                   >> 5136 
                                                   >> 5137   eflmacResult = efl;
                                                   >> 5138 
                                                   >> 5139   return eflmacResult;
                                                   >> 5140 }
                                                   >> 5141 
                                                   >> 5142 void G4Abla::appariem(G4double a, G4double z, G4double *del)
                                                   >> 5143 {
                                                   >> 5144   // CALCUL DE LA CORRECTION, DUE A L'APPARIEMENT, DE L'ENERGIE DE     
                                                   >> 5145   // LIAISON D'UN NOYAU                                                
                                                   >> 5146   // PROCEDURE FOR CALCULATING THE PAIRING CORRECTION TO THE BINDING   
                                                   >> 5147   // ENERGY OF A SPECIFIC NUCLEUS                                      
                                                   >> 5148 
                                                   >> 5149   G4double para = 0.0, parz = 0.0;
                                                   >> 5150   // A                 MASS NUMBER                                     
                                                   >> 5151   // Z                 NUCLEAR CHARGE                                  
                                                   >> 5152   // PARA              HELP VARIABLE FOR PARITY OF A                   
                                                   >> 5153   // PARZ              HELP VARIABLE FOR PARITY OF Z                   
                                                   >> 5154   // DEL               PAIRING CORRECTION                              
                                                   >> 5155 
                                                   >> 5156   parite(a, &para);
                                                   >> 5157 
                                                   >> 5158   if (para < 0.0) {
                                                   >> 5159     (*del) = 0.0;
                                                   >> 5160   }
                                                   >> 5161   else {
                                                   >> 5162     parite(z, &parz);
                                                   >> 5163     if (parz > 0.0) {
                                                   >> 5164       (*del) = -12.0/std::sqrt(a);
                                                   >> 5165     }
                                                   >> 5166     else {
                                                   >> 5167       (*del) = 12.0/std::sqrt(a);
                                                   >> 5168     }
                                                   >> 5169   }
                                                   >> 5170 }
                                                   >> 5171 
                                                   >> 5172 void G4Abla::parite(G4double n, G4double *par)
                                                   >> 5173 {
                                                   >> 5174   // CALCUL DE LA PARITE DU NOMBRE N                                   
                                                   >> 5175   //
                                                   >> 5176   // PROCEDURE FOR CALCULATING THE PARITY OF THE NUMBER N.             
                                                   >> 5177   // RETURNS -1 IF N IS ODD AND +1 IF N IS EVEN                        
                                                   >> 5178 
                                                   >> 5179   G4double n1 = 0.0, n2 = 0.0, n3 = 0.0;
                                                   >> 5180 
                                                   >> 5181   // N                 NUMBER TO BE TESTED                             
                                                   >> 5182   // N1,N2             HELP VARIABLES                                  
                                                   >> 5183   // PAR               HELP VARIABLE FOR PARITY OF N                   
                                                   >> 5184 
                                                   >> 5185   n3 = G4double(idnint(n));
                                                   >> 5186   n1 = n3/2.0;
                                                   >> 5187   n2 = n1 - dint(n1);
                                                   >> 5188 
                                                   >> 5189   if (n2 > 0.0) {
                                                   >> 5190     (*par) = -1.0;
                                                   >> 5191   }
                                                   >> 5192   else {
                                                   >> 5193     (*par) = 1.0;
                                                   >> 5194   }
6502 }                                                5195 }
6503                                                  5196 
6504 G4double G4Abla::tau(G4double bet, G4double h    5197 G4double G4Abla::tau(G4double bet, G4double homega, G4double ef, G4double t)
6505 {                                                5198 {
6506     // INPUT : BET, HOMEGA, EF, T             << 5199   // INPUT : BET, HOMEGA, EF, T                                          
6507     // OUTPUT: TAU - RISE TIME IN WHICH THE F << 5200   // OUTPUT: TAU - RISE TIME IN WHICH THE FISSION WIDTH HAS REACHED      
6508     //               90 PERCENT OF ITS FINAL  << 5201   //               90 PERCENT OF ITS FINAL VALUE                               
6509     //                                        << 5202   // 
6510     // BETA   - NUCLEAR VISCOSITY             << 5203   // BETA   - NUCLEAR VISCOSITY                                          
6511     // HOMEGA - CURVATURE OF POTENTIAL        << 5204   // HOMEGA - CURVATURE OF POTENTIAL                                     
6512     // EF     - FISSION BARRIER               << 5205   // EF     - FISSION BARRIER                                            
6513     // T      - NUCLEAR TEMPERATURE           << 5206   // T      - NUCLEAR TEMPERATURE                                        
6514                                               << 5207 
6515     G4double tauResult = 0.0;                 << 5208   G4double tauResult = 0.0;
6516                                               << 5209 
6517     G4double tlim = 8.e0 * ef;                << 5210   G4double tlim = 8.e0 * ef;
6518     if (t > tlim)                             << 5211   if (t > tlim) {
6519     {                                         << 5212     t = tlim;
6520         t = tlim;                             << 5213   }
6521     }                                         << 5214   //
6522     //                                        << 5215   if (bet/(std::sqrt(2.0)*10.0*(homega/6.582122)) <= 1.0) {
6523     if (bet / (std::sqrt(2.0) * 10.0 * (homeg << 5216     tauResult = std::log(10.0*ef/t)/(bet*1.0e21);
6524     {                                         << 5217   }
6525         tauResult = std::log(10.0 * ef / t) / << 5218   else {
6526     }                                         << 5219     tauResult = std::log(10.0*ef/t)/ (2.0*std::pow((10.0*homega/6.582122),2))*(bet*1.0e-21);
6527     else                                      << 5220   } //end if                                                            
6528     {                                         << 
6529         tauResult = std::log(10.0 * ef / t) / << 
6530     } // end if                               << 
6531                                                  5221 
6532     return tauResult;                         << 5222   return tauResult;
6533 }                                                5223 }
6534                                                  5224 
6535 G4double G4Abla::cram(G4double bet, G4double     5225 G4double G4Abla::cram(G4double bet, G4double homega)
6536 {                                                5226 {
6537     // INPUT : BET, HOMEGA  NUCLEAR VISCOSITY << 5227   // INPUT : BET, HOMEGA  NUCLEAR VISCOSITY + CURVATURE OF POTENTIAL      
6538     // OUTPUT: KRAMERS FAKTOR  - REDUCTION OF << 5228   // OUTPUT: KRAMERS FAKTOR  - REDUCTION OF THE FISSION PROBABILITY       
6539     //                           INDEPENDENT  << 5229   //                           INDEPENDENT OF EXCITATION ENERGY                             
6540                                               << 5230 
6541     G4double rel = bet / (20.0 * homega / 6.5 << 5231   G4double rel = bet/(20.0*homega/6.582122);
6542     G4double cramResult = std::sqrt(1.0 + std << 5232   G4double cramResult = std::sqrt(1.0 + std::pow(rel,2)) - rel;
6543     // limitation introduced   6.1.2000  by   << 5233   // limitation introduced   6.1.2000  by  khs
6544                                               << 5234 
6545     if (cramResult > 1.0)                     << 5235   if (cramResult > 1.0) {
6546     {                                         << 5236     cramResult = 1.0;
6547         cramResult = 1.0;                     << 5237   }
6548     }                                         << 
6549                                                  5238 
6550     return cramResult;                        << 5239   return cramResult;
6551 }                                                5240 }
6552                                                  5241 
6553 G4double G4Abla::bipol(G4int iflag, G4double     5242 G4double G4Abla::bipol(G4int iflag, G4double y)
6554 {                                                5243 {
6555     // CALCULATION OF THE SURFACE BS OR CURVA << 5244   // CALCULATION OF THE SURFACE BS OR CURVATURE BK OF A NUCLEUS        
6556     // RELATIVE TO THE SPHERICAL CONFIGURATIO << 5245   // RELATIVE TO THE SPHERICAL CONFIGURATION                           
6557     // BASED ON  MYERS, DROPLET MODEL FOR ARB << 5246   // BASED ON  MYERS, DROPLET MODEL FOR ARBITRARY SHAPES               
6558                                               << 5247 
6559     // INPUT: IFLAG - 0/1 BK/BS CALCULATION   << 5248   // INPUT: IFLAG - 0/1 BK/BS CALCULATION                              
6560     //         Y    - (1 - X) COMPLEMENT OF T << 5249   //         Y    - (1 - X) COMPLEMENT OF THE FISSILITY                
6561                                               << 5250 
6562     // LINEAR INTERPOLATION OF BS BK TABLE    << 5251   // LINEAR INTERPOLATION OF BS BK TABLE                               
6563                                               << 5252 
6564     G4int i = 0;                              << 5253   G4int i = 0;
6565                                               << 5254 
6566     G4double bipolResult = 0.0;               << 5255   G4double bipolResult = 0.0;
6567                                               << 5256 
6568     const G4int bsbkSize = 54;                << 5257   const G4int bsbkSize = 54;
6569                                               << 5258 
6570     G4double bk[bsbkSize] = {                 << 5259   G4double bk[bsbkSize] = {0.0, 1.00000,1.00087,1.00352,1.00799,1.01433,1.02265,1.03306,
6571         0.0,     1.00000, 1.00087, 1.00352, 1 << 5260          1.04576,1.06099,1.07910,1.10056,1.12603,1.15651,1.19348,
6572         1.10056, 1.12603, 1.15651, 1.19348, 1 << 5261          1.23915,1.29590,1.35951,1.41013,1.44103,1.46026,1.47339,
6573         1.48308, 1.49068, 1.49692, 1.50226, 1 << 5262          1.48308,1.49068,1.49692,1.50226,1.50694,1.51114,1.51502,
6574         1.53177, 1.53490, 1.53803, 1.54117, 1 << 5263          1.51864,1.52208,1.52539,1.52861,1.53177,1.53490,1.53803,
6575         1.56980, 1.57413, 1.57860, 1.58301, 1 << 5264          1.54117,1.54473,1.54762,1.55096,1.55440,1.55798,1.56173,
6576     }; // Zeroes at bk[0], and at             << 5265          1.56567,1.56980,1.57413,1.57860,1.58301,1.58688,1.58688,
6577        // the end added by PK                 << 5266          1.58688,1.58740,1.58740, 0.0}; //Zeroes at bk[0], and at the end added by PK
6578                                               << 5267 
6579     G4double bs[bsbkSize] = { 0.0,     1.0000 << 5268   G4double bs[bsbkSize] = {0.0, 1.00000,1.00086,1.00338,1.00750,1.01319,
6580                               1.05195, 1.0660 << 5269          1.02044,1.02927,1.03974,
6581                               1.26532, 1.2761 << 5270          1.05195,1.06604,1.08224,1.10085,1.12229,1.14717,1.17623,1.20963,
6582                               1.28235, 1.2814 << 5271          1.24296,1.26532,1.27619,1.28126,1.28362,1.28458,1.28477,1.28450,
6583                               1.27314, 1.2721 << 5272          1.28394,1.28320,1.28235,1.28141,1.28042,1.27941,1.27837,1.27732,
6584                               1.26418, 1.2632 << 5273          1.27627,1.27522,1.27418,1.27314,1.27210,1.27108,1.27006,1.26906,
6585                                               << 5274          1.26806,1.26707,1.26610,1.26514,1.26418,1.26325,1.26233,1.26147,
6586     i = idint(y / (2.0e-02)) + 1;             << 5275          1.26147,1.26147,1.25992,1.25992, 0.0};
6587                                               << 5276 
6588     if ((i + 1) >= bsbkSize)                  << 5277   i = idint(y/(2.0e-02)) + 1;
6589     {                                         << 5278     
6590         if (verboseLevel > 2)                 << 5279   if((i + 1) >= bsbkSize) {
6591         {                                     << 5280     if(verboseLevel > 2) {
6592             // G4cout <<"G4Abla error: index  << 5281       // G4cout <<"G4Abla error: index " << i + 1 << " is greater than array size permits." << G4endl;
6593             // size permits." << G4endl;      << 5282     }
6594         }                                     << 5283     bipolResult = 0.0;
6595         bipolResult = 0.0;                    << 5284   }
6596     }                                         << 5285   else {
6597     else                                      << 5286     if (iflag == 1) {
6598     {                                         << 5287       bipolResult = bs[i] + (bs[i+1] - bs[i])/2.0e-02 * (y - 2.0e-02*(i - 1));
6599         if (iflag == 1)                       << 5288     }
6600         {                                     << 5289     else {
6601             bipolResult = bs[i] + (bs[i + 1]  << 5290       bipolResult = bk[i] + (bk[i+1] - bk[i])/2.0e-02 * (y - 2.0e-02*(i - 1));
6602         }                                     << 5291     }
6603         else                                  << 5292   }
6604         {                                     << 5293   
6605             bipolResult = bk[i] + (bk[i + 1]  << 5294   return bipolResult;
6606         }                                     << 5295 }
6607     }                                         << 5296 
6608                                               << 5297 void G4Abla::fomega_sp(G4double AF,G4double Y,G4double *MFCD,G4double *sOMEGA,G4double *sHOMEGA)
6609     return bipolResult;                       << 5298 {
                                                   >> 5299 /*
                                                   >> 5300 c  Y                 1 - Fissility
                                                   >> 5301 c  OMEGA             Frequency at the ground state, in units 1.e-21 s
                                                   >> 5302 */
                                                   >> 5303   G4double OMEGA,HOMEGA,ES0,MR02;
                                                   >> 5304 
                                                   >> 5305       ES0 = 20.760*std::pow(AF,2.0/3.0);
                                                   >> 5306 // In units 1.e-42 MeVs**2; r0 = 1.175e-15 m, u=931.49MeV/c**2=103.4MeV*s**2/m**2
                                                   >> 5307 // divided by 1.e-4 to go from 1.e-46 to 1.e-42
                                                   >> 5308       MR02 = std::pow(AF,5.0/3.0)*1.0340*0.010*1.175*1.175;
                                                   >> 5309 // Determination of the inertia of the fission collective degree of freedom
                                                   >> 5310       (*MFCD) = MR02 * 3.0/10.0*(1.0+3.0*Y);
                                                   >> 5311 // Omega at saddle
                                                   >> 5312       OMEGA = std::sqrt(ES0/MR02)*std::sqrt(8.0/3.0*Y*(1.0+304.0*Y/255.0));
                                                   >> 5313 //
                                                   >> 5314       HOMEGA = 6.58122*OMEGA/10.0;
                                                   >> 5315 //
                                                   >> 5316    (*sOMEGA)=OMEGA;
                                                   >> 5317    (*sHOMEGA)=HOMEGA;
                                                   >> 5318 //
                                                   >> 5319   return;
6610 }                                                5320 }
6611                                                  5321 
6612 void G4Abla::fomega_sp(G4double AF, G4double  << 
6613 {                                             << 
6614     /*                                        << 
6615     c  Y                 1 - Fissility        << 
6616     c  OMEGA             Frequency at the gro << 
6617     */                                        << 
6618     G4double OMEGA, HOMEGA, ES0, MR02;        << 
6619                                               << 
6620     ES0 = 20.760 * std::pow(AF, 2.0 / 3.0);   << 
6621     // In units 1.e-42 MeVs**2; r0 = 1.175e-1 << 
6622     // u=931.49MeV/c**2=103.4MeV*s**2/m**2 di << 
6623     // to 1.e-42                              << 
6624     MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * << 
6625     // Determination of the inertia of the fi << 
6626     (*MFCD) = MR02 * 3.0 / 10.0 * (1.0 + 3.0  << 
6627     // Omega at saddle                        << 
6628     OMEGA = std::sqrt(ES0 / MR02) * std::sqrt << 
6629     //                                        << 
6630     HOMEGA = 6.58122 * OMEGA / 10.0;          << 
6631     //                                        << 
6632     (*sOMEGA) = OMEGA;                        << 
6633     (*sHOMEGA) = HOMEGA;                      << 
6634     //                                        << 
6635     return;                                   << 
6636 }                                             << 
6637                                                  5322 
6638 void G4Abla::fomega_gs(G4double AF, G4double  << 5323 void G4Abla::fomega_gs(G4double AF,G4double ZF,G4double *K1,G4double *sOMEGA,G4double *sHOMEGA)
6639 {                                                5324 {
6640     /*                                        << 5325 /*
6641     c  Y                 1 - Fissility        << 5326 c  Y                 1 - Fissility
6642     c  OMEGA             Frequency at the gro << 5327 c  OMEGA             Frequency at the ground state, in units 1.e-21 s
6643     */                                        << 5328 */
6644     G4double OMEGA, HOMEGA, MR02, MINERT, C,  << 5329   G4double OMEGA,HOMEGA,MR02,MINERT,C,fk1;
6645     //                                        << 5330 //
6646     MR02 = std::pow(AF, 5.0 / 3.0) * 1.0340 * << 5331       MR02 = std::pow(AF,5.0/3.0)*1.0340*0.01*1.175*1.175;
6647     MINERT = 3. * MR02 / 10.0;                << 5332       MINERT = 3.*MR02/10.0;
6648     C = 17.9439 * (1. - 1.7826 * std::pow((AF << 5333       C = 17.9439*(1.-1.7826*std::pow((AF-2.0*ZF)/AF,2));
6649     fk1 = 0.4 * C * std::pow(AF, 2.0 / 3.0) - << 5334       fk1 = 0.4*C*std::pow(AF,2.0/3.0)-0.1464*std::pow(ZF,2)/std::pow(AF,1./3.);
6650     OMEGA = std::sqrt(fk1 / MINERT);          << 5335       OMEGA = std::sqrt(fk1/MINERT);
6651     HOMEGA = 6.58122 * OMEGA / 10.0;          << 5336       HOMEGA = 6.58122*OMEGA/10.0;
6652     //                                        << 5337 //
6653     (*K1) = fk1;                              << 5338    (*K1)=fk1;
6654     (*sOMEGA) = OMEGA;                        << 5339    (*sOMEGA)=OMEGA;
6655     (*sHOMEGA) = HOMEGA;                      << 5340    (*sHOMEGA)=HOMEGA;
6656     //                                        << 5341 //
6657     return;                                   << 5342   return;
6658 }                                                5343 }
6659                                                  5344 
6660 void G4Abla::barrs(G4int Z1, G4int A1, G4int  << 5345 void G4Abla::barrs(G4int Z1,G4int A1,G4int Z2,G4int A2,G4double *sBARR,G4double *sOMEGA)
6661 { /*                                          << 5346 {/*
6662  C AK 2004 - Barriers for LCP and IMF are cal << 5347 C AK 2004 - Barriers for LCP and IMF are calculated now according to the
6663  according to the C           Bass model (Nuc << 5348 C           Bass model (Nucl. Phys. A (1974))
6664  C KHS 2007 - To speed up, barriers are read  << 5349 C KHS 2007 - To speed up, barriers are read from tabels; in case thermal
6665  case thermal C            expansion is consi << 5350 C            expansion is considered, barriers are calculated.
6666  are calculated. C INPUT: C EA    - Excitatio << 5351 C INPUT:
6667  nucleon C Z11, A11 - Charge and mass of daug << 5352 C EA    - Excitation energy per nucleon
6668  Z22, A22 - Charge and mass of LCP or IMF     << 5353 C Z11, A11 - Charge and mass of daughter nucleus
6669  C                                            << 5354 C Z22, A22 - Charge and mass of LCP or IMF
6670  C OUTPUT:                                    << 5355 C
6671  C BARR - Barrier                             << 5356 C OUTPUT:
6672  C OMEGA - Curvature of the potential         << 5357 C BARR - Barrier
6673  C                                            << 5358 C OMEGA - Curvature of the potential
6674  C BASS MODEL NPA 1974 - used only if expansi << 5359 C
6675  (OPTEXP=1) C                        or one w << 5360 C BASS MODEL NPA 1974 - used only if expansion is considered (OPTEXP=1)
6676  explicitly (OPTBAR=1) C October 2011 - AK -  << 5361 C                        or one wants this model explicitly (OPTBAR=1)
6677  parametrization of the barrier and its posit << 5362 C October 2011 - AK - new parametrization of the barrier and its position,
6678  et al., NPA 868 (2011) 1; this is now C defa << 5363 C                    see W.W. Qu et al., NPA 868 (2011) 1; this is now
6679  (OPTBAR=0)                                   << 5364 C                    default option (OPTBAR=0)
6680  c                                            << 5365 c
6681  c November 2016 - JLRS - Added this function << 5366 c November 2016 - JLRS - Added this function from abla07v4
6682  c                                            << 5367 c
6683  */                                           << 5368 */
6684     G4double BARR, OMEGA, RMAX;               << 5369      G4double BARR, OMEGA, RMAX;
6685     RMAX = 1.1 * (ecld->rms[A1 - Z1][Z1] + ec << 5370      RMAX = 1.1 * (ecld->rms[A1-Z1][Z1]+ecld->rms[A2-Z2][Z2]) + 2.8;
6686     BARR = 1.345 * Z1 * Z2 / RMAX;            << 5371      BARR = 1.345 * Z1 * Z2 / RMAX;
6687     // C Omega according to Avishai:          << 5372 //C Omega according to Avishai:
6688     OMEGA = 4.5 / 197.3287;                   << 5373      OMEGA = 4.5 / 197.3287;
6689                                                  5374 
6690     // if(Z1<60){                                5375     // if(Z1<60){
6691     //  if(Z2==1 && A2==2) BARR = BARR * 1.1;    5376     //  if(Z2==1 && A2==2) BARR = BARR * 1.1;
6692     //  if(Z2==1 && A2==3) BARR = BARR * 1.1;    5377     //  if(Z2==1 && A2==3) BARR = BARR * 1.1;
6693     //   if(Z2==2 && A2==3) BARR = BARR * 1.3 << 5378    //   if(Z2==2 && A2==3) BARR = BARR * 1.3;
6694     //  if(Z2==2 && A2==4) BARR = BARR * 1.1;    5379     //  if(Z2==2 && A2==4) BARR = BARR * 1.1;
6695     // }                                         5380     // }
6696                                                  5381 
6697     (*sOMEGA) = OMEGA;                        << 5382      (*sOMEGA)=OMEGA;
6698     (*sBARR) = BARR;                          << 5383      (*sBARR)=BARR;
6699     //                                        << 5384 //
6700     return;                                   << 5385   return;
6701 }                                                5386 }
6702                                                  5387 
6703 void G4Abla::barfit(G4int iz, G4int ia, G4int << 5388 void G4Abla::barfit(G4int iz, G4int ia, G4int il, G4double *sbfis, G4double *segs, G4double *selmax)
6704 {                                                5389 {
6705     //   2223 C     VERSION FOR 32BIT COMPUTE << 5390   //   2223 C     VERSION FOR 32BIT COMPUTER                                        
6706     //   2224 C     THIS SUBROUTINE RETURNS T << 5391   //   2224 C     THIS SUBROUTINE RETURNS THE BARRIER HEIGHT BFIS, THE              
6707     //   2225 C     GROUND-STATE ENERGY SEGS, << 5392   //   2225 C     GROUND-STATE ENERGY SEGS, IN MEV, AND THE ANGULAR MOMENTUM        
6708     //   2226 C     AT WHICH THE FISSION BARR << 5393   //   2226 C     AT WHICH THE FISSION BARRIER DISAPPEARS, LMAX, IN UNITS OF        
6709     //   2227 C     H-BAR, WHEN CALLED WITH I << 5394   //   2227 C     H-BAR, WHEN CALLED WITH INTEGER AGUMENTS IZ, THE ATOMIC           
6710     //   2228 C     NUMBER, IA, THE ATOMIC MA << 5395   //   2228 C     NUMBER, IA, THE ATOMIC MASS NUMBER, AND IL, THE ANGULAR           
6711     //   2229 C     MOMENTUM IN UNITS OF H-BA << 5396   //   2229 C     MOMENTUM IN UNITS OF H-BAR. (PLANCK'S CONSTANT DIVIDED BY         
6712     //   2230 C     2*PI).                    << 5397   //   2230 C     2*PI).                                                            
6713     //   2231 C                               << 5398   //   2231 C                                                                       
6714     //   2232 C        THE FISSION BARRIER FO << 5399   //   2232 C        THE FISSION BARRIER FO IL = 0 IS CALCULATED FROM A 7TH         
6715     //   2233 C     ORDER FIT IN TWO VARIABLE << 5400   //   2233 C     ORDER FIT IN TWO VARIABLES TO 638 CALCULATED FISSION              
6716     //   2234 C     BARRIERS FOR Z VALUES FRO << 5401   //   2234 C     BARRIERS FOR Z VALUES FROM 20 TO 110. THESE 638 BARRIERS ARE      
6717     //   ARE 2235 C     FIT WITH AN RMS DEVIA << 5402   //   2235 C     FIT WITH AN RMS DEVIATION OF 0.10 MEV BY THIS 49-PARAMETER        
6718     //   2236 C     FUNCTION.                 << 5403   //   2236 C     FUNCTION.                                                         
6719     //   2237 C     IF BARFIT IS CALLED WITH  << 5404   //   2237 C     IF BARFIT IS CALLED WITH (IZ,IA) VALUES OUTSIDE THE RANGE OF      
6720     //   OF 2238  C     THE BARRIER HEIGHT IS << 5405   //   2238 C     THE BARRIER HEIGHT IS SET TO 0.0, AND A MESSAGE IS PRINTED        
6721     //   2239 C     ON THE DEFAULT OUTPUT FIL << 5406   //   2239 C     ON THE DEFAULT OUTPUT FILE.                                       
6722     //   2240 C                               << 5407   //   2240 C                                                                       
6723     //   2241 C        FOR IL VALUES NOT EQUA << 5408   //   2241 C        FOR IL VALUES NOT EQUAL TO ZERO, THE VALUES OF L AT WHICH      
6724     //   WHICH 2242 C     THE BARRIER IS 80%  << 5409   //   2242 C     THE BARRIER IS 80% AND 20% OF THE L=0 VALUE ARE RESPECTIVELY      
6725     //   RESPECTIVELY                         << 5410   //   2243 C     FIT TO 20-PARAMETER FUNCTIONS OF Z AND A, OVER A MORE             
6726     //   2243 C     FIT TO 20-PARAMETER FUNCT << 5411   //   2244 C     RESTRICTED RANGE OF A VALUES, THAN IS THE CASE FOR L = 0.         
6727     //   2244 C     RESTRICTED RANGE OF A VAL << 5412   //   2245 C     THE VALUE OF L WHERE THE BARRIER DISAPPEARS, LMAX IS FIT TO       
6728     //   2245 C     THE VALUE OF L WHERE THE  << 5413   //   2246 C     A 24-PARAMETER FUNCTION OF Z AND A, WITH THE SAME RANGE OF        
6729     //   TO 2246  C     A 24-PARAMETER FUNCTI << 5414   //   2247 C     Z AND A VALUES AS L-80 AND L-20.                                  
6730     //   2247 C     Z AND A VALUES AS L-80 AN << 5415   //   2248 C        ONCE AGAIN, IF AN (IZ,IA) PAIR IS OUTSIDE OF THE RANGE OF      
6731     //   2248 C        ONCE AGAIN, IF AN (IZ, << 5416   //   2249 C     VALIDITY OF THE FIT, THE BARRIER VALUE IS SET TO 0.0 AND A        
6732     //   OF 2249  C     VALIDITY OF THE FIT,  << 5417   //   2250 C     MESSAGE IS PRINTED. THESE THREE VALUES (BFIS(L=0),L-80, AND       
6733     //   2250 C     MESSAGE IS PRINTED. THESE << 5418   //   2251 C     L-20) AND THE CONSTRINTS OF BFIS = 0 AND D(BFIS)/DL = 0 AT        
6734     //   AND 2251 C     L-20) AND THE CONSTRI << 5419   //   2252 C     L = LMAX AND L=0 LEAD TO A FIFTH-ORDER FIT TO BFIS(L) FOR         
6735     //   2252 C     L = LMAX AND L=0 LEAD TO  << 5420   //   2253 C     L>L-20. THE FIRST THREE CONSTRAINTS LEAD TO A THIRD-ORDER FIT     
6736     //   2253 C     L>L-20. THE FIRST THREE C << 5421   //   2254 C     FOR THE REGION L < L-20.                                          
6737     //   FIT 2254 C     FOR THE REGION L < L- << 5422   //   2255 C                                                                       
6738     //   GROUND STATE ENERGIES ARE CALCULATED << 5423   //   2256 C        THE GROUND STATE ENERGIES ARE CALCULATED FROM A                
6739     //   IN Z, A, AND L TO 214 GROUND-STATE E << 5424   //   2257 C     120-PARAMETER FIT IN Z, A, AND L TO 214 GROUND-STATE ENERGIES     
6740     //   AND A VALUES.                        << 5425   //   2258 C     FOR 36 DIFFERENT Z AND A VALUES.                                  
6741     //   2259 C     (THE RANGE OF Z AND A IS  << 5426   //   2259 C     (THE RANGE OF Z AND A IS THE SAME AS FOR L-80, L-20, AND          
6742     //   2260 C     L-MAX)                    << 5427   //   2260 C     L-MAX)                                                            
6743     //   2261 C                               << 5428   //   2261 C                                                                       
6744     //   2262 C        THE CALCULATED BARRIER << 5429   //   2262 C        THE CALCULATED BARRIERS FROM WHICH THE FITS WERE MADE WERE     
6745     //   WERE 2263  C     CALCULATED IN 1983- << 5430   //   2263 C     CALCULATED IN 1983-1984 BY A. J. SIERK OF LOS ALAMOS              
6746     //   ALAMOS 2264  C     NATIONAL LABORATO << 5431   //   2264 C     NATIONAL LABORATORY GROUP T-9, USING YUKAWA-PLUS-EXPONENTIAL      
6747     //   YUKAWA-PLUS-EXPONENTIAL              << 5432   //   2265 C     G4DOUBLE FOLDED NUCLEAR ENERGY, EXACT COULOMB DIFFUSENESS           
6748     //   2265 C     G4DOUBLE FOLDED NUCLEAR E << 5433   //   2266 C     CORRECTIONS, AND DIFFUSE-MATTER MOMENTS OF INERTIA.               
6749     //   2266 C     CORRECTIONS, AND DIFFUSE- << 5434   //   2267 C     THE PARAMETERS OF THE MODEL R-0 = 1.16 FM, AS 21.13 MEV,          
6750     //   2267 C     THE PARAMETERS OF THE MOD << 5435   //   2268 C     KAPPA-S = 2.3, A = 0.68 FM.                                       
6751     //   2268 C     KAPPA-S = 2.3, A = 0.68 F << 5436   //   2269 C     THE DIFFUSENESS OF THE MATTER AND CHARGE DISTRIBUTIONS USED       
6752     //   2269 C     THE DIFFUSENESS OF THE MA << 5437   //   2270 C     CORRESPONDS TO A SURFACE DIFFUSENESS PARAMETER (DEFINED BY        
6753     //   USED 2270  C     CORRESPONDS TO A SU << 5438   //   2271 C     MYERS) OF 0.99 FM. THE CALCULATED BARRIERS FOR L = 0 ARE          
6754     //   (DEFINED BY 2271 C     MYERS) OF 0.9 << 5439   //   2272 C     ACCURATE TO A LITTLE LESS THAN 0.1 MEV; THE OUTPUT FROM           
6755     //   0 ARE 2272 C     ACCURATE TO A LITTL << 5440   //   2273 C     THIS SUBROUTINE IS A LITTLE LESS ACCURATE. WORST ERRORS MAY BE    
6756     //   FROM 2273  C     THIS SUBROUTINE IS  << 5441   //   2274 C     AS LARGE AS 0.5 MEV; CHARACTERISTIC UNCERTAINY IS IN THE RANGE    
6757     //   ERRORS MAY BE                        << 5442   //   2275 C     OF 0.1-0.2 MEV. THE RMS DEVIATION OF THE GROUND-STATE FIT         
6758     //   2274 C     AS LARGE AS 0.5 MEV; CHAR << 5443   //   2276 C     FROM THE 214 INPUT VALUES IS 0.20 MEV. THE MAXIMUM ERROR          
6759     //   RANGE                                << 5444   //   2277 C     OCCURS FOR LIGHT NUCLEI IN THE REGION WHERE THE GROUND STATE      
6760     //   2275 C     OF 0.1-0.2 MEV. THE RMS D << 5445   //   2278 C     IS PROLATE, AND MAY BE GREATER THAN 1.0 MEV FOR VERY NEUTRON      
6761     //   2276 C     FROM THE 214 INPUT VALUES << 5446   //   2279 C     DEFICIENT NUCLEI, WITH L NEAR LMAX. FOR MOST NUCLEI LIKELY TO     
6762     //   2277 C     OCCURS FOR LIGHT NUCLEI I << 5447   //   2280 C     BE ENCOUNTERED IN REAL EXPERIMENTS, THE MAXIMUM ERROR IS          
6763     //   STATE                                << 5448   //   2281 C     CLOSER TO 0.5 MEV, AGAIN FOR LIGHT NUCLEI AND L NEAR LMAX.        
6764     //   2278 C     IS PROLATE, AND MAY BE GR << 5449   //   2282 C                                                                       
6765     //   NEUTRON                              << 5450   //   2283 C     WRITTEN BY A. J. SIERK, LANL T-9                                  
6766     //   2279 C     DEFICIENT NUCLEI, WITH L  << 5451   //   2284 C     VERSION 1.0 FEBRUARY, 1984                                        
6767     //   TO 2280  C     BE ENCOUNTERED IN REA << 5452   //   2285 C                                                                       
6768     //   2281 C     CLOSER TO 0.5 MEV, AGAIN  << 5453   //   2286 C     THE FOLLOWING IS NECESSARY FOR 32-BIT MACHINES LIKE DEC VAX,      
6769     //   2282 C                               << 5454   //   2287 C     IBM, ETC                                                          
6770     //   2283 C     WRITTEN BY A. J. SIERK, L << 5455 
6771     //   2284 C     VERSION 1.0 FEBRUARY, 198 << 5456   G4double pa[7],pz[7],pl[10];
6772     //   2285 C                               << 5457   for(G4int init_i = 0; init_i < 7; init_i++) {
6773     //   2286 C     THE FOLLOWING IS NECESSAR << 5458     pa[init_i] = 0.0; 
6774     //   VAX, 2287  C     IBM, ETC            << 5459     pz[init_i] = 0.0; 
6775                                               << 5460   }
6776     G4double pa[7], pz[7], pl[10];            << 5461   for(G4int init_i = 0; init_i < 10; init_i++) {
6777     for (G4int init_i = 0; init_i < 7; init_i << 5462     pl[init_i] = 0.0;
6778     {                                         << 5463   }
6779         pa[init_i] = 0.0;                     << 5464 
6780         pz[init_i] = 0.0;                     << 5465   G4double a = 0.0, z = 0.0, amin = 0.0, amax = 0.0, amin2 = 0.0;
6781     }                                         << 5466   G4double amax2 = 0.0, aa = 0.0, zz = 0.0, bfis = 0.0;
6782     for (G4int init_i = 0; init_i < 10; init_ << 5467   G4double bfis0 = 0.0, ell = 0.0, el = 0.0, egs = 0.0, el80 = 0.0, el20 = 0.0;
6783     {                                         << 5468   G4double elmax = 0.0, sel80 = 0.0, sel20 = 0.0, x = 0.0, y = 0.0, q = 0.0, qa = 0.0, qb = 0.0;
6784         pl[init_i] = 0.0;                     << 5469   G4double aj = 0.0, ak = 0.0, a1 = 0.0, a2 = 0.0;
6785     }                                         << 5470 
6786                                               << 5471   G4int i = 0, j = 0, k = 0, m = 0;
6787     G4double a = 0.0, z = 0.0, amin = 0.0, am << 5472   G4int l = 0;
6788     G4double amax2 = 0.0, aa = 0.0, zz = 0.0, << 5473 
6789     G4double bfis0 = 0.0, ell = 0.0, el = 0.0 << 5474   G4double emncof[4][5] = {{-9.01100e+2,-1.40818e+3, 2.77000e+3,-7.06695e+2, 8.89867e+2}, 
6790     G4double elmax = 0.0, sel80 = 0.0, sel20  << 5475          {1.35355e+4,-2.03847e+4, 1.09384e+4,-4.86297e+3,-6.18603e+2},
6791     G4double aj = 0.0, ak = 0.0, a1 = 0.0, a2 << 5476          {-3.26367e+3, 1.62447e+3, 1.36856e+3, 1.31731e+3, 1.53372e+2},
6792                                               << 5477          {7.48863e+3,-1.21581e+4, 5.50281e+3,-1.33630e+3, 5.05367e-2}};
6793     G4int i = 0, j = 0, k = 0, m = 0;         << 5478 
6794     G4int l = 0;                              << 5479   G4double elmcof[4][5] = {{1.84542e+3,-5.64002e+3, 5.66730e+3,-3.15150e+3, 9.54160e+2},
6795                                               << 5480          {-2.24577e+3, 8.56133e+3,-9.67348e+3, 5.81744e+3,-1.86997e+3},
6796     G4double emncof[4][5] = { { -9.01100e+2,  << 5481          {2.79772e+3,-8.73073e+3, 9.19706e+3,-4.91900e+3, 1.37283e+3},
6797                               { 1.35355e+4, - << 5482          {-3.01866e+1, 1.41161e+3,-2.85919e+3, 2.13016e+3,-6.49072e+2}};
6798                               { -3.26367e+3,  << 5483 
6799                               { 7.48863e+3, - << 5484   G4double emxcof[4][6] = {{9.43596e4,-2.241997e5,2.223237e5,-1.324408e5,4.68922e4,-8.83568e3},
6800                                               << 5485          {-1.655827e5,4.062365e5,-4.236128e5,2.66837e5,-9.93242e4,1.90644e4},
6801     G4double elmcof[4][5] = { { 1.84542e+3, - << 5486          {1.705447e5,-4.032e5,3.970312e5,-2.313704e5,7.81147e4,-1.322775e4},
6802                               { -2.24577e+3,  << 5487          {-9.274555e4,2.278093e5,-2.422225e5,1.55431e5,-5.78742e4,9.97505e3}};
6803                               { 2.79772e+3, - << 5488 
6804                               { -3.01866e+1,  << 5489   G4double elzcof[7][7] = {{5.11819909e+5,-1.30303186e+6, 1.90119870e+6,-1.20628242e+6, 5.68208488e+5, 5.48346483e+4,-2.45883052e+4},
6805                                               << 5490          {-1.13269453e+6, 2.97764590e+6,-4.54326326e+6, 3.00464870e+6, -1.44989274e+6,-1.02026610e+5, 6.27959815e+4},
6806     G4double emxcof[4][6] = { { 9.43596e4, -2 << 5491          {1.37543304e+6,-3.65808988e+6, 5.47798999e+6,-3.78109283e+6, 1.84131765e+6, 1.53669695e+4,-6.96817834e+4},
6807                               { -1.655827e5,  << 5492          {-8.56559835e+5, 2.48872266e+6,-4.07349128e+6, 3.12835899e+6, -1.62394090e+6, 1.19797378e+5, 4.25737058e+4},
6808                               { 1.705447e5, - << 5493          {3.28723311e+5,-1.09892175e+6, 2.03997269e+6,-1.77185718e+6, 9.96051545e+5,-1.53305699e+5,-1.12982954e+4},
6809                               { -9.274555e4,  << 5494          {4.15850238e+4, 7.29653408e+4,-4.93776346e+5, 6.01254680e+5, -4.01308292e+5, 9.65968391e+4,-3.49596027e+3},
6810                                               << 5495          {-1.82751044e+5, 3.91386300e+5,-3.03639248e+5, 1.15782417e+5, -4.24399280e+3,-6.11477247e+3, 3.66982647e+2}};
6811     G4double elzcof[7][7] = {                 << 5496 
6812         { 5.11819909e+5, -1.30303186e+6, 1.90 << 5497   const G4int sizex = 5;
6813         { -1.13269453e+6, 2.97764590e+6, -4.5 << 5498   const G4int sizey = 6;
6814         { 1.37543304e+6, -3.65808988e+6, 5.47 << 5499   const G4int sizez = 4;
6815         { -8.56559835e+5, 2.48872266e+6, -4.0 << 5500 
6816         { 3.28723311e+5, -1.09892175e+6, 2.03 << 5501   G4double egscof[sizey][sizey][sizez];
6817         { 4.15850238e+4, 7.29653408e+4, -4.93 << 5502 
6818         { -1.82751044e+5, 3.91386300e+5, -3.0 << 5503   G4double egs1[sizey][sizex] = {{1.927813e5, 7.666859e5, 6.628436e5, 1.586504e5,-7.786476e3},
6819     };                                        << 5504          {-4.499687e5,-1.784644e6,-1.546968e6,-4.020658e5,-3.929522e3},
6820                                               << 5505          {4.667741e5, 1.849838e6, 1.641313e6, 5.229787e5, 5.928137e4},
6821     const G4int sizex = 5;                    << 5506          {-3.017927e5,-1.206483e6,-1.124685e6,-4.478641e5,-8.682323e4},
6822     const G4int sizey = 6;                    << 5507          {1.226517e5, 5.015667e5, 5.032605e5, 2.404477e5, 5.603301e4},
6823     const G4int sizez = 4;                    << 5508          {-1.752824e4,-7.411621e4,-7.989019e4,-4.175486e4,-1.024194e4}};
6824                                               << 5509 
6825     G4double egscof[sizey][sizey][sizez];     << 5510   G4double egs2[sizey][sizex] = {{-6.459162e5,-2.903581e6,-3.048551e6,-1.004411e6,-6.558220e4},
6826                                               << 5511          {1.469853e6, 6.564615e6, 6.843078e6, 2.280839e6, 1.802023e5},
6827     G4double egs1[sizey][sizex] = { { 1.92781 << 5512          {-1.435116e6,-6.322470e6,-6.531834e6,-2.298744e6,-2.639612e5},
6828                                     { -4.4996 << 5513          {8.665296e5, 3.769159e6, 3.899685e6, 1.520520e6, 2.498728e5},      
6829                                     { 4.66774 << 5514          {-3.302885e5,-1.429313e6,-1.512075e6,-6.744828e5,-1.398771e5},
6830                                     { -3.0179 << 5515          {4.958167e4, 2.178202e5, 2.400617e5, 1.167815e5, 2.663901e4}};
6831                                     { 1.22651 << 5516 
6832                                     { -1.7528 << 5517   G4double egs3[sizey][sizex] = {{3.117030e5, 1.195474e6, 9.036289e5, 6.876190e4,-6.814556e4},
6833                                               << 5518          {-7.394913e5,-2.826468e6,-2.152757e6,-2.459553e5, 1.101414e5},
6834     G4double egs2[sizey][sizex] = { { -6.4591 << 5519          {7.918994e5, 3.030439e6, 2.412611e6, 5.228065e5, 8.542465e3},
6835                                     { 1.46985 << 5520          {-5.421004e5,-2.102672e6,-1.813959e6,-6.251700e5,-1.184348e5},
6836                                     { -1.4351 << 5521          {2.370771e5, 9.459043e5, 9.026235e5, 4.116799e5, 1.001348e5},
6837                                     { 8.66529 << 5522          {-4.227664e4,-1.738756e5,-1.795906e5,-9.292141e4,-2.397528e4}};
6838                                     { -3.3028 << 5523 
6839                                     { 4.95816 << 5524   G4double egs4[sizey][sizex] = {{-1.072763e5,-5.973532e5,-6.151814e5, 7.371898e4, 1.255490e5},
6840                                               << 5525          {2.298769e5, 1.265001e6, 1.252798e6,-2.306276e5,-2.845824e5},
6841     G4double egs3[sizey][sizex] = { { 3.11703 << 5526          {-2.093664e5,-1.100874e6,-1.009313e6, 2.705945e5, 2.506562e5},
6842                                     { -7.3949 << 5527          {1.274613e5, 6.190307e5, 5.262822e5,-1.336039e5,-1.115865e5},
6843                                     { 7.91899 << 5528          {-5.715764e4,-2.560989e5,-2.228781e5,-3.222789e3, 1.575670e4},
6844                                     { -5.4210 << 5529          {1.189447e4, 5.161815e4, 4.870290e4, 1.266808e4, 2.069603e3}};
6845                                     { 2.37077 << 5530 
6846                                     { -4.2276 << 5531   for(i = 0; i < sizey; i++) {
6847                                               << 5532     for(j = 0; j < sizex; j++) {
6848     G4double egs4[sizey][sizex] = { { -1.0727 << 5533       egscof[i][j][0] = egs1[i][j];
6849                                     { 2.29876 << 5534       egscof[i][j][1] = egs2[i][j];
6850                                     { -2.0936 << 5535       egscof[i][j][2] = egs3[i][j];
6851                                     { 1.27461 << 5536       egscof[i][j][3] = egs4[i][j];
6852                                     { -5.7157 << 5537     }
6853                                     { 1.18944 << 5538   }
6854                                               << 5539 
6855     for (i = 0; i < sizey; i++)               << 5540   // the program starts here                                           
6856     {                                         << 5541   if (iz < 19  ||  iz > 111) {
6857         for (j = 0; j < sizex; j++)           << 5542     goto barfit900;
6858         {                                     << 5543   }
6859             egscof[i][j][0] = egs1[i][j];     << 5544 
6860             egscof[i][j][1] = egs2[i][j];     << 5545   if(iz > 102   &&  il > 0) {
6861             egscof[i][j][2] = egs3[i][j];     << 5546     goto barfit902;
6862             egscof[i][j][3] = egs4[i][j];     << 5547   }
6863         }                                     << 5548 
6864     }                                         << 5549   z=G4double(iz);
6865                                               << 5550   a=G4double(ia);
6866     // the program starts here                << 5551   el=G4double(il);
6867     if (iz < 19 || iz > 122)                  << 5552   amin= 1.2e0*z + 0.01e0*z*z;
6868     {                                         << 5553   amax= 5.8e0*z - 0.024e0*z*z;
6869         goto barfit900;                       << 5554 
6870     }                                         << 5555   if(a  <  amin  ||  a  >  amax) {
6871                                               << 5556     goto barfit910;
6872     if (iz > 122 && il > 0)                   << 5557   }
6873     {                                         << 5558 
6874         goto barfit902;                       << 5559   // angul.mom.zero barrier                 
6875     }                                         << 5560   aa=2.5e-3*a;
6876                                               << 5561   zz=1.0e-2*z;
6877     z = G4double(iz);                         << 5562   ell=1.0e-2*el;
6878     a = G4double(ia);                         << 5563   bfis0 = 0.0;
6879     el = G4double(il);                        << 5564   lpoly(zz,7,pz);
6880     amin = 1.2e0 * z + 0.01e0 * z * z;        << 5565   lpoly(aa,7,pa);
6881     amax = 5.8e0 * z - 0.024e0 * z * z;       << 5566 
6882                                               << 5567   for(i = 0; i < 7; i++) { //do 10 i=1,7                                                       
6883     if (a < amin || a > amax)                 << 5568     for(j = 0; j < 7; j++) { //do 10 j=1,7                                                       
6884     {                                         << 5569       bfis0=bfis0+elzcof[j][i]*pz[i]*pa[j];
6885         goto barfit910;                       << 5570     }
6886     }                                         << 5571   }
6887                                               << 5572 
6888     // angul.mom.zero barrier                 << 5573   bfis=bfis0;
6889     aa = 2.5e-3 * a;                          << 5574   
6890     zz = 1.0e-2 * z;                          << 5575   (*sbfis)=bfis;
6891     ell = 1.0e-2 * el;                        << 5576   egs=0.0;
6892     bfis0 = 0.0;                              << 5577   (*segs)=egs;
6893     lpoly(zz, 7, pz);                         << 5578 
6894     lpoly(aa, 7, pa);                         << 5579   // values of l at which the barrier        
6895                                               << 5580   // is 20%(el20) and 80%(el80) of l=0 value    
6896     for (i = 0; i < 7; i++)                   << 5581   amin2 = 1.4e0*z + 0.009e0*z*z;
6897     { // do 10 i=1,7                          << 5582   amax2 = 20.e0 + 3.0e0*z;
6898         for (j = 0; j < 7; j++)               << 5583 
6899         { // do 10 j=1,7                      << 5584   if((a < amin2-5.e0  ||  a > amax2+10.e0) &&  il > 0) {
6900             bfis0 = bfis0 + elzcof[j][i] * pz << 5585     goto barfit920;
6901         }                                     << 5586   }
6902     }                                         << 5587 
6903                                               << 5588   lpoly(zz,5,pz);
6904     bfis = bfis0;                             << 5589   lpoly(aa,4,pa);
6905                                               << 5590   el80=0.0;
6906     (*sbfis) = bfis;                          << 5591   el20=0.0;
6907     egs = 0.0;                                << 5592   elmax=0.0;
6908     (*segs) = egs;                            << 5593 
6909                                               << 5594   for(i = 0; i < 4; i++) {
6910     // values of l at which the barrier       << 5595     for(j = 0; j < 5; j++) {
6911     // is 20%(el20) and 80%(el80) of l=0 valu << 5596             el80 = el80 + elmcof[i][j]*pz[j]*pa[i];
6912     amin2 = 1.4e0 * z + 0.009e0 * z * z;      << 5597             el20 = el20 + emncof[i][j]*pz[j]*pa[i];
6913     amax2 = 20.e0 + 3.0e0 * z;                << 5598     }
6914                                               << 5599   }
6915     if ((a < amin2 - 5.e0 || a > amax2 + 10.e << 5600 
6916     {                                         << 5601   sel80 = el80;
6917         goto barfit920;                       << 5602   sel20 = el20;
6918     }                                         << 5603 
6919                                               << 5604   // value of l (elmax) where barrier disapp.
6920     lpoly(zz, 5, pz);                         << 5605   lpoly(zz,6,pz);
6921     lpoly(aa, 4, pa);                         << 5606   lpoly(ell,9,pl);
6922     el80 = 0.0;                               << 5607 
6923     el20 = 0.0;                               << 5608   for(i = 0; i < 4; i++) { //do 30 i= 1,4                                                      
6924     elmax = 0.0;                              << 5609     for(j = 0; j < 6; j++) { //do 30 j=1,6
6925                                               << 5610       elmax = elmax + emxcof[i][j]*pz[j]*pa[i];
6926     for (i = 0; i < 4; i++)                   << 5611     }
6927     {                                         << 5612   }
6928         for (j = 0; j < 5; j++)               << 5613 
6929         {                                     << 5614   (*selmax)=elmax;
6930             el80 = el80 + elmcof[i][j] * pz[j << 5615 
6931             el20 = el20 + emncof[i][j] * pz[j << 5616   // value of barrier at ang.mom.  l          
6932         }                                     << 5617   if(il < 1){
6933     }                                         << 5618     return;                                                
6934                                               << 5619   }
6935     sel80 = el80;                             << 5620 
6936     sel20 = el20;                             << 5621   x = sel20/(*selmax);
6937                                               << 5622   y = sel80/(*selmax);
6938     // value of l (elmax) where barrier disap << 5623   
6939     lpoly(zz, 6, pz);                         << 5624   if(el <= sel20) {
6940     lpoly(ell, 9, pl);                        << 5625     // low l              
6941                                               << 5626     q = 0.2/(std::pow(sel20,2)*std::pow(sel80,2)*(sel20-sel80));
6942     for (i = 0; i < 4; i++)                   << 5627     qa = q*(4.0*std::pow(sel80,3) - std::pow(sel20,3));
6943     { // do 30 i= 1,4                         << 5628     qb = -q*(4.0*std::pow(sel80,2) - std::pow(sel20,2));
6944         for (j = 0; j < 6; j++)               << 5629     bfis = bfis*(1.0 + qa*std::pow(el,2) + qb*std::pow(el,3));
6945         { // do 30 j=1,6                      << 5630   }
6946             elmax = elmax + emxcof[i][j] * pz << 5631   else {
6947         }                                     << 5632     // high l             
6948     }                                         << 5633     aj = (-20.0*std::pow(x,5) + 25.e0*std::pow(x,4) - 4.0)*std::pow((y-1.0),2)*y*y;
6949                                               << 5634     ak = (-20.0*std::pow(y,5) + 25.0*std::pow(y,4) - 1.0) * std::pow((x-1.0),2)*x*x;
6950     (*selmax) = elmax;                        << 5635     q = 0.2/(std::pow((y-x)*((1.0-x)*(1.0-y)*x*y),2));
6951                                               << 5636     qa = q*(aj*y - ak*x);
6952     // value of barrier at ang.mom.  l        << 5637     qb = -q*(aj*(2.0*y + 1.0) - ak*(2.0*x + 1.0));
6953     if (il < 1)                               << 5638     z = el/(*selmax);
6954     {                                         << 5639     a1 = 4.0*std::pow(z,5) - 5.0*std::pow(z,4) + 1.0;
6955         return;                               << 5640     a2 = qa*(2.e0*z + 1.e0);
6956     }                                         << 5641     bfis=bfis*(a1 + (z - 1.e0)*(a2 + qb*z)*z*z*(z - 1.e0));
6957                                               << 5642   }
6958     x = sel20 / (*selmax);                    << 5643   
6959     y = sel80 / (*selmax);                    << 5644   if(bfis <= 0.0) {
6960                                               << 5645     bfis=0.0;
6961     if (el <= sel20)                          << 5646   }
6962     {                                         << 5647 
6963         // low l                              << 5648   if(el > (*selmax)) {
6964         q = 0.2 / (std::pow(sel20, 2) * std:: << 5649     bfis=0.0;
6965         qa = q * (4.0 * std::pow(sel80, 3) -  << 5650   }
6966         qb = -q * (4.0 * std::pow(sel80, 2) - << 5651   (*sbfis)=bfis;
6967         bfis = bfis * (1.0 + qa * std::pow(el << 5652 
6968     }                                         << 5653   // now calculate rotating ground state energy                        
6969     else                                      << 5654   if(el > (*selmax)) {
6970     {                                         << 5655     return;                                           
6971         // high l                             << 5656   }
6972         aj = (-20.0 * std::pow(x, 5) + 25.e0  << 5657 
6973         ak = (-20.0 * std::pow(y, 5) + 25.0 * << 5658   for(k = 0; k < 4; k++) {
6974         q = 0.2 / (std::pow((y - x) * ((1.0 - << 5659     for(l = 0; l < 6; l++) {
6975         qa = q * (aj * y - ak * x);           << 5660       for(m = 0; m < 5; m++) {
6976         qb = -q * (aj * (2.0 * y + 1.0) - ak  << 5661   egs = egs + egscof[l][m][k]*pz[l]*pa[k]*pl[2*m];
6977         z = el / (*selmax);                   << 5662       }
6978         a1 = 4.0 * std::pow(z, 5) - 5.0 * std << 
6979         a2 = qa * (2.e0 * z + 1.e0);          << 
6980         bfis = bfis * (a1 + (z - 1.e0) * (a2  << 
6981     }                                         << 
6982                                               << 
6983     if (bfis <= 0.0)                          << 
6984     {                                         << 
6985         bfis = 0.0;                           << 
6986     }                                         << 
6987                                               << 
6988     if (el > (*selmax))                       << 
6989     {                                         << 
6990         bfis = 0.0;                           << 
6991     }                                         << 
6992     (*sbfis) = bfis;                          << 
6993                                               << 
6994     // now calculate rotating ground state en << 
6995     if (el > (*selmax))                       << 
6996     {                                         << 
6997         return;                               << 
6998     }                                         << 
6999                                               << 
7000     for (k = 0; k < 4; k++)                   << 
7001     {                                         << 
7002         for (l = 0; l < 6; l++)               << 
7003         {                                     << 
7004             for (m = 0; m < 5; m++)           << 
7005             {                                 << 
7006                 egs = egs + egscof[l][m][k] * << 
7007             }                                 << 
7008         }                                     << 
7009     }                                         << 
7010                                               << 
7011     (*segs) = egs;                            << 
7012     if ((*segs) < 0.0)                        << 
7013     {                                         << 
7014         (*segs) = 0.0;                        << 
7015     }                                         << 
7016                                               << 
7017     return;                                   << 
7018                                               << 
7019 barfit900: // continue                        << 
7020     (*sbfis) = 0.0;                           << 
7021     // for z<19 sbfis set to 1.0e3            << 
7022     if (iz < 19)                              << 
7023     {                                         << 
7024         (*sbfis) = 1.0e3;                     << 
7025     }                                            5663     }
7026     (*segs) = 0.0;                            << 5664   }
7027     (*selmax) = 0.0;                          << 
7028     return;                                   << 
7029                                               << 
7030 barfit902:                                    << 
7031     (*sbfis) = 0.0;                           << 
7032     (*segs) = 0.0;                            << 
7033     (*selmax) = 0.0;                          << 
7034     return;                                   << 
7035                                                  5665 
7036 barfit910:                                    << 5666   (*segs)=egs;
7037     (*sbfis) = 0.0;                           << 5667   if((*segs) < 0.0) {
7038     (*segs) = 0.0;                            << 5668     (*segs)=0.0;
7039     (*selmax) = 0.0;                          << 5669   }
7040     return;                                   << 5670 
7041                                               << 5671   return;                                                            
7042 barfit920:                                    << 5672 
7043     (*sbfis) = 0.0;                           << 5673  barfit900:  //continue                                                          
7044     (*segs) = 0.0;                            << 5674   (*sbfis)=0.0;
7045     (*selmax) = 0.0;                          << 5675   // for z<19 sbfis set to 1.0e3                                            
7046     return;                                   << 5676   if (iz < 19)  {
                                                   >> 5677     (*sbfis) = 1.0e3;
                                                   >> 5678   }
                                                   >> 5679   (*segs)=0.0;
                                                   >> 5680   (*selmax)=0.0;
                                                   >> 5681   return;                                                            
                                                   >> 5682 
                                                   >> 5683  barfit902:
                                                   >> 5684   (*sbfis)=0.0;
                                                   >> 5685   (*segs)=0.0;
                                                   >> 5686   (*selmax)=0.0;
                                                   >> 5687   return;                                                            
                                                   >> 5688 
                                                   >> 5689  barfit910:
                                                   >> 5690   (*sbfis)=0.0;
                                                   >> 5691   (*segs)=0.0;
                                                   >> 5692   (*selmax)=0.0;
                                                   >> 5693   return;                                                           
                                                   >> 5694 
                                                   >> 5695  barfit920:
                                                   >> 5696   (*sbfis)=0.0;
                                                   >> 5697   (*segs)=0.0;
                                                   >> 5698   (*selmax)=0.0;
                                                   >> 5699   return;                                                            
7047 }                                                5700 }
7048                                                  5701 
7049 G4double G4Abla::erf(G4double x)                 5702 G4double G4Abla::erf(G4double x)
7050 {                                                5703 {
7051     G4double ferf;                            << 5704  G4double ferf;
7052                                                  5705 
7053     if (x < 0.)                               << 5706  if(x<0.){
7054     {                                         << 5707    ferf=-gammp(0.5,x*x);
7055         ferf = -gammp(0.5, x * x);            << 5708  }else{
7056     }                                         << 5709    ferf=gammp(0.5,x*x);;
7057     else                                      << 5710  }
7058     {                                         << 5711  return ferf;
7059         ferf = gammp(0.5, x * x);             << 
7060         ;                                     << 
7061     }                                         << 
7062     return ferf;                              << 
7063 }                                                5712 }
7064                                                  5713 
7065 G4double G4Abla::gammp(G4double a, G4double x    5714 G4double G4Abla::gammp(G4double a, G4double x)
7066 {                                                5715 {
7067     G4double fgammp;                          << 5716  G4double fgammp;
7068     G4double gammcf, gamser, gln = 0.;        << 5717  G4double gammcf,gamser,gln=0.;
7069                                               << 
7070     if (x < 0.0 || a <= 0.0)                  << 
7071         std::cout << "G4Abla::gammp = bad arg << 
7072     if (x < a + 1.)                           << 
7073     {                                         << 
7074         gser(&gamser, a, x, gln);             << 
7075         fgammp = gamser;                      << 
7076     }                                         << 
7077     else                                      << 
7078     {                                         << 
7079         gcf(&gammcf, a, x, gln);              << 
7080         fgammp = 1. - gammcf;                 << 
7081     }                                         << 
7082     return fgammp;                            << 
7083 }                                             << 
7084                                               << 
7085 void G4Abla::gcf(G4double* gammcf, G4double a << 
7086 {                                             << 
7087     G4double fgammcf, del;                    << 
7088     G4double eps = 3e-7;                      << 
7089     G4double fpmin = 1e-30;                   << 
7090     G4int itmax = 100;                        << 
7091     G4double an, b, c, d, h;                  << 
7092                                               << 
7093     gln = gammln(a);                          << 
7094     b = x + 1. - a;                           << 
7095     c = 1. / fpmin;                           << 
7096     d = 1. / b;                               << 
7097     h = d;                                    << 
7098     for (G4int i = 1; i <= itmax; i++)        << 
7099     {                                         << 
7100         an = -i * (i - a);                    << 
7101         b = b + 2.;                           << 
7102         d = an * d + b;                       << 
7103         if (std::fabs(d) < fpmin)             << 
7104             d = fpmin;                        << 
7105         c = b + an / c;                       << 
7106         if (std::fabs(c) < fpmin)             << 
7107             c = fpmin;                        << 
7108         d = 1.0 / d;                          << 
7109         del = d * c;                          << 
7110         h = h * del;                          << 
7111         if (std::fabs(del - 1.) < eps)        << 
7112             goto dir1;                        << 
7113     }                                         << 
7114     std::cout << "a too large, ITMAX too smal << 
7115 dir1:                                         << 
7116     fgammcf = std::exp(-x + a * std::log(x) - << 
7117     (*gammcf) = fgammcf;                      << 
7118     return;                                   << 
7119 }                                             << 
7120                                                  5718 
7121 void G4Abla::gser(G4double* gamser, G4double  << 5719  if(x<0.0 || a<=0.0)std::cout << "G4Abla::gammp = bad arguments in gammp" << std::endl;
7122 {                                             << 5720  if(x<a+1.){
7123     G4double fgamser, ap, sum, del;           << 5721   gser(&gamser,a,x,gln);
7124     G4double eps = 3e-7;                      << 5722   fgammp=gamser;
7125     G4int itmax = 100;                        << 5723  }else{
7126                                               << 5724   gcf(&gammcf,a,x,gln);
7127     gln = gammln(a);                          << 5725   fgammp=1.-gammcf;
7128     if (x <= 0.)                              << 5726  }
7129     {                                         << 5727  return fgammp;
7130         if (x < 0.)                           << 5728 }
7131             std::cout << "G4Abla::gser = x <  << 5729 
7132         (*gamser) = 0.0;                      << 5730 void G4Abla::gcf(G4double *gammcf,G4double a,G4double x,G4double gln)
7133         return;                               << 5731 {
7134     }                                         << 5732  G4double fgammcf,del;
7135     ap = a;                                   << 5733  G4double eps=3e-7;
7136     sum = 1. / a;                             << 5734  G4double fpmin=1e-30;
7137     del = sum;                                << 5735  G4int itmax=100;
7138     for (G4int n = 0; n < itmax; n++)         << 5736  G4double an,b,c,d,h;
7139     {                                         << 5737 
7140         ap = ap + 1.;                         << 5738  gln=gammln(a);
7141         del = del * x / ap;                   << 5739  b=x+1.-a;
7142         sum = sum + del;                      << 5740  c=1./fpmin;
7143         if (std::fabs(del) < std::fabs(sum) * << 5741  d=1./b;
7144             goto dir1;                        << 5742  h=d;
7145     }                                         << 5743  for(G4int i=1;i<=itmax;i++){
7146     std::cout << "a too large, ITMAX too smal << 5744   an=-i*(i-a);
7147 dir1:                                         << 5745   b=b+2.;
7148     fgamser = sum * std::exp(-x + a * std::lo << 5746   d=an*d+b;
7149     (*gamser) = fgamser;                      << 5747   if(std::fabs(d)<fpmin)d=fpmin;
7150     return;                                   << 5748   c=b+an/c;
                                                   >> 5749   if(std::fabs(c)<fpmin)c=fpmin;
                                                   >> 5750   d=1.0/d;
                                                   >> 5751   del=d*c;
                                                   >> 5752   h=h*del;
                                                   >> 5753   if(std::fabs(del-1.)<eps)goto dir1;
                                                   >> 5754  }
                                                   >> 5755  std::cout << "a too large, ITMAX too small in gcf" << std::endl;
                                                   >> 5756  dir1:
                                                   >> 5757  fgammcf=std::exp(-x+a*std::log(x)-gln)*h;
                                                   >> 5758  (*gammcf)=fgammcf;
                                                   >> 5759  return;
                                                   >> 5760 }
                                                   >> 5761 
                                                   >> 5762 void G4Abla::gser(G4double *gamser,G4double a,G4double x,G4double gln)
                                                   >> 5763 {
                                                   >> 5764  G4double fgamser,ap,sum,del;
                                                   >> 5765  G4double eps=3e-7;
                                                   >> 5766  G4int itmax=100;
                                                   >> 5767 
                                                   >> 5768  gln=gammln(a);
                                                   >> 5769  if(x<=0.){
                                                   >> 5770    if(x<0.)std::cout << "G4Abla::gser = x < 0 in gser" << std::endl;
                                                   >> 5771    (*gamser)=0.0;
                                                   >> 5772    return;
                                                   >> 5773  }
                                                   >> 5774  ap=a;
                                                   >> 5775  sum=1./a;
                                                   >> 5776  del=sum;
                                                   >> 5777  for(G4int n=0;n<itmax;n++){
                                                   >> 5778  ap=ap+1.;
                                                   >> 5779  del=del*x/ap;
                                                   >> 5780  sum=sum+del;
                                                   >> 5781  if(std::fabs(del)<std::fabs(sum)*eps)goto dir1;
                                                   >> 5782  }
                                                   >> 5783  std::cout << "a too large, ITMAX too small in gser" << std::endl;
                                                   >> 5784  dir1:
                                                   >> 5785  fgamser=sum*std::exp(-x+a*std::log(x)-gln);
                                                   >> 5786  (*gamser)=fgamser;
                                                   >> 5787  return;
7151 }                                                5788 }
7152                                                  5789 
7153 G4double G4Abla::gammln(G4double xx)             5790 G4double G4Abla::gammln(G4double xx)
7154 {                                                5791 {
7155     G4double fgammln, x, ser, tmp, y;         << 5792  G4double fgammln,x,ser,tmp,y;
7156     G4double cof[6] = { 76.18009172947146,  - << 5793  G4double cof[6]={76.18009172947146,-86.50532032941677,24.01409824083091,
7157                         -1.231739572450155, 0 << 5794 -1.231739572450155,0.1208650973866179e-2,-0.5395239384953e-5};
7158     G4double stp = 2.5066282746310005;        << 5795  G4double stp=2.5066282746310005;
7159                                               << 5796 
7160     x = xx;                                   << 5797  x=xx;
7161     y = x;                                    << 5798  y=x;
7162     tmp = x + 5.5;                            << 5799  tmp=x+5.5;
7163     tmp = (x + 0.5) * std::log(tmp) - tmp;    << 5800  tmp=(x+0.5)*std::log(tmp)-tmp;
7164     ser = 1.000000000190015;                  << 5801  ser=1.000000000190015;
7165     for (G4int j = 0; j < 6; j++)             << 5802  for(G4int j=0;j<6;j++){
7166     {                                         << 5803  y=y+1.;
7167         y = y + 1.;                           << 5804  ser=ser+cof[j]/y;
7168         ser = ser + cof[j] / y;               << 5805  }
7169     }                                         << 
7170                                                  5806 
7171     return fgammln = tmp + std::log(stp * ser << 5807  return fgammln=tmp+std::log(stp*ser/x);
7172 }                                                5808 }
7173                                                  5809 
                                                   >> 5810 
7174 G4double G4Abla::fd(G4double E)                  5811 G4double G4Abla::fd(G4double E)
7175 {                                                5812 {
7176     // DISTRIBUTION DE MAXWELL                << 5813   // DISTRIBUTION DE MAXWELL
7177                                                  5814 
7178     return (E * std::exp(-E));                << 5815   return (E*std::exp(-E));
7179 }                                                5816 }
7180                                                  5817 
7181 G4double G4Abla::f(G4double E)                   5818 G4double G4Abla::f(G4double E)
7182 {                                                5819 {
7183     // FONCTION INTEGRALE DE FD(E)            << 5820   // FONCTION INTEGRALE DE FD(E)
7184     return (1.0 - (E + 1.0) * std::exp(-E));  << 5821   return (1.0 - (E + 1.0) * std::exp(-E));
7185 }                                                5822 }
7186                                                  5823 
7187 G4double G4Abla::fmaxhaz(G4double x)             5824 G4double G4Abla::fmaxhaz(G4double x)
7188 {                                                5825 {
7189     return (-x * std::log(G4AblaRandom::flat( << 5826  return ( -x*std::log(G4AblaRandom::flat()) -x*std::log(G4AblaRandom::flat()) -x*std::log(G4AblaRandom::flat()) ) ;
7190             x * std::log(G4AblaRandom::flat() << 
7191 }                                                5827 }
7192                                                  5828 
7193 G4double G4Abla::fmaxhaz_old(G4double T)         5829 G4double G4Abla::fmaxhaz_old(G4double T)
7194 {                                                5830 {
7195     // tirage aleatoire dans une maxwellienne << 5831   // tirage aleatoire dans une maxwellienne
7196     // t : temperature                        << 5832   // t : temperature
7197     //                                        << 5833   //
7198     // declaration des variables              << 5834   // declaration des variables
7199     //                                        << 5835   //
7200                                               << 5836 
7201     const G4int pSize = 101;                  << 5837   const G4int pSize = 101;
7202     G4double p[pSize];                        << 5838   G4double p[pSize];
7203                                               << 5839 
7204     // ial generateur pour le cascade (et les << 5840   // ial generateur pour le cascade (et les iy pour eviter les correlations)
7205     G4int i = 0;                              << 5841   G4int i = 0;
7206     G4int itest = 0;                          << 5842   G4int itest = 0;
7207     // programme principal                    << 5843   // programme principal
7208                                               << 5844 
7209     // calcul des p(i) par approximation de n << 5845   // calcul des p(i) par approximation de newton
7210     p[pSize - 1] = 8.0;                       << 5846   p[pSize-1] = 8.0;
7211     G4double x = 0.1;                         << 5847   G4double x = 0.1;
7212     G4double x1 = 0.0;                        << 5848   G4double x1 = 0.0;
7213     G4double y = 0.0;                         << 5849   G4double y = 0.0;
7214                                               << 5850 
7215     if (itest == 1)                           << 5851   if (itest == 1) {
7216     {                                         << 5852     goto fmaxhaz120;
7217         goto fmaxhaz120;                      << 5853   }
7218     }                                         << 5854 
7219                                               << 5855   for(i = 1; i <= 99; i++) {
7220     for (i = 1; i <= 99; i++)                 << 5856   fmaxhaz20:
7221     {                                         << 5857     x1 = x - (f(x) - G4double(i)/100.0)/fd(x);
7222     fmaxhaz20:                                << 5858     x = x1;
7223         x1 = x - (f(x) - G4double(i) / 100.0) << 5859     if (std::fabs(f(x) - G4double(i)/100.0) < 1e-5) {
7224         x = x1;                               << 5860       goto fmaxhaz100;
7225         if (std::fabs(f(x) - G4double(i) / 10 << 5861     }
7226         {                                     << 5862     goto fmaxhaz20;
7227             goto fmaxhaz100;                  << 5863   fmaxhaz100:
7228         }                                     << 5864     p[i] = x;
7229         goto fmaxhaz20;                       << 5865   } //end do
7230     fmaxhaz100:                               << 5866 
7231         p[i] = x;                             << 5867   //  itest = 1;
7232     } // end do                               << 5868   itest = 0;
7233                                               << 5869   // tirage aleatoire et calcul du x correspondant 
7234     //  itest = 1;                            << 5870   // par regression lineaire
7235     itest = 0;                                << 5871  fmaxhaz120:
7236     // tirage aleatoire et calcul du x corres << 
7237     // par regression lineaire                << 
7238 fmaxhaz120:                                   << 
7239     y = G4AblaRandom::flat();                    5872     y = G4AblaRandom::flat();
7240     i = nint(y * 100);                        << 5873   i = nint(y*100);
7241                                                  5874 
7242     //   2590 c ici on evite froidement les d << 5875   //   2590 c ici on evite froidement les depassements de tableaux....(a.b. 3/9/99)        
7243     //   3/9/99)                              << 5876   if(i == 0) {
7244     if (i == 0)                               << 5877     goto fmaxhaz120;
7245     {                                         << 5878   }
7246         goto fmaxhaz120;                      << 5879 
7247     }                                         << 5880   if (i == 1) {
7248                                               << 5881     x = p[i]*y*100;
7249     if (i == 1)                               << 5882   }
7250     {                                         << 5883   else {
7251         x = p[i] * y * 100;                   << 5884     x = (p[i] - p[i-1])*(y*100 - i) + p[i];
7252     }                                         << 5885   }
7253     else                                      << 5886 
7254     {                                         << 5887   return(x*T);
7255         x = (p[i] - p[i - 1]) * (y * 100 - i) << 5888 }
7256     }                                         << 5889 
7257                                               << 5890 G4double G4Abla::pace2(G4double a, G4double z)
7258     return (x * T);                           << 5891 {
7259 }                                             << 5892   // PACE2
7260                                               << 5893   // Cette fonction retourne le defaut de masse du noyau A,Z en MeV
7261 void G4Abla::guet(G4double* x_par, G4double*  << 5894   // Revisee pour a, z flottants 25/4/2002                         =
7262 {                                             << 5895 
7263     // TABLE DE MASSES ET FORMULE DE MASSE TI << 5896   G4double fpace2 = 0.0;
7264     // Gives the theoritical value for mass e << 5897 
7265     // Revisee pour x, z flottants 25/4/2002  << 5898   G4int ii = idint(a+0.5);
7266                                               << 5899   G4int jj = idint(z+0.5);
7267     // real*8 x,z                             << 5900 
7268     //  dimension q(0:50,0:70)                << 5901   if(ii <= 0 || jj < 0) {
7269     G4double x = (*x_par);                    << 5902     fpace2=0.;
7270     G4double z = (*z_par);                    << 5903     return fpace2;
7271     G4double find = (*find_par);              << 5904   }
7272                                               << 5905 
7273     const G4int qrows = 50;                   << 5906   if(jj > 300) {
7274     const G4int qcols = 70;                   << 5907     fpace2=0.0;
7275     G4double q[qrows][qcols];                 << 5908   }
7276     for (G4int init_i = 0; init_i < qrows; in << 5909   else {
7277     {                                         << 5910     fpace2=pace->dm[ii][jj];
7278         for (G4int init_j = 0; init_j < qcols << 5911   }
7279         {                                     << 5912   fpace2=fpace2/1000.;
7280             q[init_i][init_j] = 0.0;          << 5913 
7281         }                                     << 5914   if(pace->dm[ii][jj] == 0.) {
7282     }                                         << 5915     if(ii < 12) {
7283                                               << 5916       fpace2=-500.;
7284     G4int ix = G4int(std::floor(x + 0.5));    << 5917     }
7285     G4int iz = G4int(std::floor(z + 0.5));    << 5918     else {
7286     G4double zz = iz;                         << 5919       guet(&a, &z, &fpace2);
7287     G4double xx = ix;                         << 5920       fpace2=fpace2-ii*931.5;
7288     find = 0.0;                               << 5921       fpace2=fpace2/1000.;
7289     G4double avol = 15.776;                   << 5922     }
7290     G4double asur = -17.22;                   << 5923   }
7291     G4double ac = -10.24;                     << 5924 
7292     G4double azer = 8.0;                      << 5925   return fpace2;
7293     G4double xjj = -30.03;                    << 5926 }
7294     G4double qq = -35.4;                      << 5927 
7295     G4double c1 = -0.737;                     << 5928 void G4Abla::guet(G4double *x_par, G4double *z_par, G4double *find_par)
7296     G4double c2 = 1.28;                       << 5929 {
7297                                               << 5930   // TABLE DE MASSES ET FORMULE DE MASSE TIRE DU PAPIER DE BRACK-GUET
7298     if (ix <= 7)                              << 5931   // Gives the theoritical value for mass excess...
7299     {                                         << 5932   // Revisee pour x, z flottants 25/4/2002
7300         q[0][1] = 939.50;                     << 5933 
7301         q[1][1] = 938.21;                     << 5934   //real*8 x,z
7302         q[1][2] = 1876.1;                     << 5935   //  dimension q(0:50,0:70)
7303         q[1][3] = 2809.39;                    << 5936   G4double x = (*x_par);
7304         q[2][4] = 3728.34;                    << 5937   G4double z = (*z_par);
7305         q[2][3] = 2809.4;                     << 5938   G4double find = (*find_par);
7306         q[2][5] = 4668.8;                     << 5939 
7307         q[2][6] = 5606.5;                     << 5940   const G4int qrows = 50;
7308         q[3][5] = 4669.1;                     << 5941   const G4int qcols = 70;
7309         q[3][6] = 5602.9;                     << 5942   G4double q[qrows][qcols];
7310         q[3][7] = 6535.27;                    << 5943   for(G4int init_i = 0; init_i < qrows; init_i++) {
7311         q[4][6] = 5607.3;                     << 5944     for(G4int init_j = 0; init_j < qcols; init_j++) {
7312         q[4][7] = 6536.1;                     << 5945       q[init_i][init_j] = 0.0;
7313         q[5][7] = 6548.3;                     << 5946     }
7314         find = q[iz][ix];                     << 5947   }
7315     }                                         << 5948 
7316     else                                      << 5949   G4int ix=G4int(std::floor(x+0.5));
7317     {                                         << 5950   G4int iz=G4int(std::floor(z+0.5));
7318         G4double xneu = xx - zz;              << 5951   G4double zz = iz;
7319         G4double si = (xneu - zz) / xx;       << 5952   G4double xx = ix;
7320         G4double x13 = std::pow(xx, .333);    << 5953   find = 0.0;
7321         G4double ee1 = c1 * zz * zz / x13;    << 5954   G4double avol = 15.776;
7322         G4double ee2 = c2 * zz * zz / xx;     << 5955   G4double asur = -17.22;
7323         G4double aux = 1. + (9. * xjj / 4. /  << 5956   G4double ac = -10.24;
7324         G4double ee3 = xjj * xx * si * si / a << 5957   G4double azer = 8.0;
7325         G4double ee4 = avol * xx + asur * (st << 5958   G4double xjj = -30.03;
7326         G4double tota = ee1 + ee2 + ee3 + ee4 << 5959   G4double qq = -35.4;
7327         find = 939.55 * xneu + 938.77 * zz -  << 5960   G4double c1 = -0.737;
7328     }                                         << 5961   G4double c2 = 1.28;
7329                                               << 5962 
7330     (*x_par) = x;                             << 5963   if(ix <= 7) {
7331     (*z_par) = z;                             << 5964     q[0][1]=939.50;
7332     (*find_par) = find;                       << 5965     q[1][1]=938.21;
                                                   >> 5966     q[1][2]=1876.1;
                                                   >> 5967     q[1][3]=2809.39;
                                                   >> 5968     q[2][4]=3728.34;
                                                   >> 5969     q[2][3]=2809.4;
                                                   >> 5970     q[2][5]=4668.8;
                                                   >> 5971     q[2][6]=5606.5;
                                                   >> 5972     q[3][5]=4669.1;
                                                   >> 5973     q[3][6]=5602.9;
                                                   >> 5974     q[3][7]=6535.27;
                                                   >> 5975     q[4][6]=5607.3;
                                                   >> 5976     q[4][7]=6536.1;
                                                   >> 5977     q[5][7]=6548.3;
                                                   >> 5978     find=q[iz][ix];
                                                   >> 5979   }
                                                   >> 5980   else {
                                                   >> 5981     G4double xneu=xx-zz;
                                                   >> 5982     G4double si=(xneu-zz)/xx;
                                                   >> 5983     G4double x13=std::pow(xx,.333);
                                                   >> 5984     G4double ee1=c1*zz*zz/x13;
                                                   >> 5985     G4double ee2=c2*zz*zz/xx;
                                                   >> 5986     G4double aux=1.+(9.*xjj/4./qq/x13);
                                                   >> 5987     G4double ee3=xjj*xx*si*si/aux;
                                                   >> 5988     G4double ee4=avol*xx+asur*(std::pow(xx,.666))+ac*x13+azer;
                                                   >> 5989     G4double tota = ee1 + ee2 + ee3 + ee4;
                                                   >> 5990     find = 939.55*xneu+938.77*zz - tota;
                                                   >> 5991   }
                                                   >> 5992 
                                                   >> 5993   (*x_par) = x;
                                                   >> 5994   (*z_par) = z;
                                                   >> 5995   (*find_par) = find;
7333 }                                                5996 }
7334 //                                               5997 //
7335                                                  5998 
7336 void G4Abla::FillData(G4int IMULTBU, G4int IE << 5999 void G4Abla::FillData(G4int IMULTBU,G4int IEV_TAB){
7337 {                                             << 
7338                                                  6000 
7339     const G4double c = 29.9792458;               6001     const G4double c = 29.9792458;
7340     const G4double fmp = 938.27231, fmn = 939 << 6002     const G4double fmp = 938.27231,fmn=939.56563,fml=1115.683; 
7341                                                  6003 
7342     varntp->ntrack = IMULTBU + IEV_TAB;          6004     varntp->ntrack = IMULTBU + IEV_TAB;
7343                                                  6005 
7344     for (G4int i = 0; i < IMULTBU; i++)       << 6006     G4int intp=0;
7345     {                                         << 
7346                                                  6007 
7347         G4int iz = nint(BU_TAB[i][7]);        << 6008     for(G4int i=0;i<IMULTBU;i++){
7348         G4int ia = nint(BU_TAB[i][8]);        << 6009  
7349         G4int is = nint(BU_TAB[i][11]);       << 6010     G4int iz = nint(BU_TAB[i][7]);
7350                                               << 6011     G4int ia = nint(BU_TAB[i][8]);
7351         Ainit = Ainit + ia;                   << 6012     G4int is = nint(BU_TAB[i][11]);
7352         Zinit = Zinit + iz;                   << 6013 
7353         Sinit = Sinit - is;                   << 6014     Ainit = Ainit + ia;
7354                                               << 6015     Zinit = Zinit + iz;
7355         varntp->zvv.push_back(iz);            << 6016     Sinit = Sinit - is;
7356         varntp->avv.push_back(ia);            << 6017 
7357         varntp->svv.push_back(-1 * is);       << 6018     varntp->zvv[intp] = iz;
7358         varntp->itypcasc.push_back(0);        << 6019     varntp->avv[intp] = ia;
7359                                               << 6020     varntp->svv[intp] = -1*is;
7360         G4double v2 = BU_TAB[i][4] * BU_TAB[i << 6021     varntp->itypcasc[intp] = 0;
7361         G4double gamma = std::sqrt(1.0 - v2 / << 6022 
7362         G4double avvmass = iz * fmp + (ia - i << 6023     G4double v2 = BU_TAB[i][4]*BU_TAB[i][4]+BU_TAB[i][5]*BU_TAB[i][5]+BU_TAB[i][6]*BU_TAB[i][6];
7363         G4double etot = avvmass / gamma;      << 6024     G4double gamma = std::sqrt(1.0 - v2 / (c*c));
7364         varntp->pxlab.push_back(etot * BU_TAB << 6025     G4double avvmass = iz*fmp + (ia-iz-is)*fmn + is*fml + eflmac(ia,iz,0,3);
7365         varntp->pylab.push_back(etot * BU_TAB << 6026     G4double etot = avvmass / gamma;
7366         varntp->pzlab.push_back(etot * BU_TAB << 6027     varntp->pxlab[intp] = etot * BU_TAB[i][4] / c;
7367         varntp->enerj.push_back(etot - avvmas << 6028     varntp->pylab[intp] = etot * BU_TAB[i][5] / c;
7368     }                                         << 6029     varntp->pzlab[intp] = etot * BU_TAB[i][6] / c;
7369                                               << 6030     varntp->enerj[intp] = etot - avvmass;
7370     for (G4int i = 0; i < IEV_TAB; i++)       << 6031     intp++;
7371     {                                         << 6032     }
7372                                               << 6033 
7373         G4int iz = nint(EV_TAB[i][0]);        << 6034 
7374         G4int ia = nint(EV_TAB[i][1]);        << 6035     for(G4int i=0;i<IEV_TAB;i++){
7375         G4int is = EV_TAB[i][5];              << 6036  
7376                                               << 6037     G4int iz = nint(EV_TAB[i][0]);
7377         varntp->itypcasc.push_back(0);        << 6038     G4int ia = nint(EV_TAB[i][1]);
7378                                               << 6039     G4int is = EV_TAB[i][5];
7379         if (ia > 0)                           << 6040 
7380         { // normal particles                 << 6041     varntp->itypcasc[intp] = 0;
7381             varntp->zvv.push_back(iz);        << 6042 
7382             varntp->avv.push_back(ia);        << 6043      if(ia>0){// normal particles
7383             varntp->svv.push_back(-1 * is);   << 6044      varntp->zvv[intp] = iz;
7384             Ainit = Ainit + ia;               << 6045      varntp->avv[intp] = ia;
7385             Zinit = Zinit + iz;               << 6046      varntp->svv[intp] = -1*is;
7386             Sinit = Sinit - is;               << 6047      Ainit = Ainit + ia;
7387             G4double v2 = EV_TAB[i][2] * EV_T << 6048      Zinit = Zinit + iz;
7388             G4double gamma = std::sqrt(1.0 -  << 6049      Sinit = Sinit - is;
7389             G4double avvmass = iz * fmp + (ia << 6050      G4double v2 = EV_TAB[i][2]*EV_TAB[i][2]+EV_TAB[i][3]*EV_TAB[i][3]+EV_TAB[i][4]*EV_TAB[i][4];
7390             G4double etot = avvmass / gamma;  << 6051      G4double gamma = std::sqrt(1.0 - v2 / (c*c));
7391             varntp->pxlab.push_back(etot * EV << 6052      G4double avvmass = iz*fmp + (ia-iz-is)*fmn + is*fml + eflmac(ia,iz,0,3);
7392             varntp->pylab.push_back(etot * EV << 6053      G4double etot = avvmass / gamma;
7393             varntp->pzlab.push_back(etot * EV << 6054      varntp->pxlab[intp] = etot * EV_TAB[i][2] / c;
7394             varntp->enerj.push_back(etot - av << 6055      varntp->pylab[intp] = etot * EV_TAB[i][3] / c;
7395         }                                     << 6056      varntp->pzlab[intp] = etot * EV_TAB[i][4] / c;
7396         else if (ia == -2)                    << 6057      varntp->enerj[intp] = etot - avvmass;
7397         { // lambda0                          << 6058      }else if(ia==-2){// lambda0
7398             varntp->zvv.push_back(0);         << 6059      varntp->zvv[intp] = 0;
7399             varntp->avv.push_back(1);         << 6060      varntp->avv[intp] = 1;
7400             varntp->svv.push_back(-1);        << 6061      varntp->svv[intp] = -1;
7401             Ainit = Ainit + 1;                << 6062      Ainit = Ainit + 1;
7402             Sinit = Sinit - 1;                << 6063      Sinit = Sinit - 1;
7403             G4double v2 = EV_TAB[i][2] * EV_T << 6064      G4double v2 = EV_TAB[i][2]*EV_TAB[i][2]+EV_TAB[i][3]*EV_TAB[i][3]+EV_TAB[i][4]*EV_TAB[i][4];
7404             G4double gamma = std::sqrt(1.0 -  << 6065      G4double gamma = std::sqrt(1.0 - v2 / (c*c));
7405             G4double avvmass = fml;           << 6066      G4double avvmass = fml;
7406             G4double etot = avvmass / gamma;  << 6067      G4double etot = avvmass / gamma;
7407             varntp->pxlab.push_back(etot * EV << 6068      varntp->pxlab[intp] = etot * EV_TAB[i][2] / c;
7408             varntp->pylab.push_back(etot * EV << 6069      varntp->pylab[intp] = etot * EV_TAB[i][3] / c;
7409             varntp->pzlab.push_back(etot * EV << 6070      varntp->pzlab[intp] = etot * EV_TAB[i][4] / c;
7410             varntp->enerj.push_back(etot - av << 6071      varntp->enerj[intp] = etot - avvmass;
7411         }                                     << 6072      }else{// photons
7412         else                                  << 6073      varntp->zvv[intp] = iz;
7413         { // photons                          << 6074      varntp->avv[intp] = ia;
7414             varntp->zvv.push_back(iz);        << 6075      varntp->svv[intp] = 0;
7415             varntp->avv.push_back(ia);        << 6076      Ainit = Ainit + ia;
7416             varntp->svv.push_back(0);         << 6077      Zinit = Zinit + iz;
7417             Ainit = Ainit + ia;               << 6078      Sinit = Sinit - is;
7418             Zinit = Zinit + iz;               << 6079      varntp->pxlab[intp] = EV_TAB[i][2];
7419             Sinit = Sinit - is;               << 6080      varntp->pylab[intp] = EV_TAB[i][3];
7420             varntp->pxlab.push_back(EV_TAB[i] << 6081      varntp->pzlab[intp] = EV_TAB[i][4];
7421             varntp->pylab.push_back(EV_TAB[i] << 6082      varntp->enerj[intp] = std::sqrt(EV_TAB[i][2]*EV_TAB[i][2]+EV_TAB[i][3]*EV_TAB[i][3]+EV_TAB[i][4]*EV_TAB[i][4]);
7422             varntp->pzlab.push_back(EV_TAB[i] << 6083      }
7423             varntp->enerj.push_back(          << 6084     intp++;
7424                 std::sqrt(EV_TAB[i][2] * EV_T << 
7425         }                                     << 
7426     }                                            6085     }
7427     //                                        << 6086 // 
7428     return;                                   << 6087  return;
7429 }                                                6088 }
7430                                                  6089 
7431 // Utilities                                     6090 // Utilities
7432                                                  6091 
7433 G4double G4Abla::min(G4double a, G4double b)     6092 G4double G4Abla::min(G4double a, G4double b)
7434 {                                                6093 {
7435     if (a < b)                                << 6094   if(a < b) {
7436     {                                         << 6095     return a;
7437         return a;                             << 6096   }
7438     }                                         << 6097   else {
7439     else                                      << 6098     return b;
7440     {                                         << 6099   }
7441         return b;                             << 
7442     }                                         << 
7443 }                                                6100 }
7444                                                  6101 
7445 G4int G4Abla::min(G4int a, G4int b)              6102 G4int G4Abla::min(G4int a, G4int b)
7446 {                                                6103 {
7447     if (a < b)                                << 6104   if(a < b) {
7448     {                                         << 6105     return a;
7449         return a;                             << 6106   }
7450     }                                         << 6107   else {
7451     else                                      << 6108     return b;
7452     {                                         << 6109   }
7453         return b;                             << 
7454     }                                         << 
7455 }                                                6110 }
7456                                                  6111 
7457 G4double G4Abla::max(G4double a, G4double b)     6112 G4double G4Abla::max(G4double a, G4double b)
7458 {                                                6113 {
7459     if (a > b)                                << 6114   if(a > b) {
7460     {                                         << 6115     return a;
7461         return a;                             << 6116   }
7462     }                                         << 6117   else {
7463     else                                      << 6118     return b;
7464     {                                         << 6119   }
7465         return b;                             << 
7466     }                                         << 
7467 }                                                6120 }
7468                                                  6121 
7469 G4int G4Abla::max(G4int a, G4int b)              6122 G4int G4Abla::max(G4int a, G4int b)
7470 {                                                6123 {
7471     if (a > b)                                << 6124   if(a > b) {
7472     {                                         << 6125     return a;
7473         return a;                             << 6126   }
7474     }                                         << 6127   else {
7475     else                                      << 6128     return b;
7476     {                                         << 6129   }
7477         return b;                             << 6130 }
7478     }                                         << 6131 
                                                   >> 6132 G4double G4Abla::DSIGN(G4double a, G4double b){
                                                   >> 6133 // A function that assigns the sign of the second argument to the
                                                   >> 6134 // absolute value of the first
                                                   >> 6135 
                                                   >> 6136  if(b>=0){ 
                                                   >> 6137   return std::abs(a);
                                                   >> 6138  }else{
                                                   >> 6139   return -1.0*std::abs(a);
                                                   >> 6140  }
                                                   >> 6141  return 0;
                                                   >> 6142 }
                                                   >> 6143 
                                                   >> 6144 G4int G4Abla::ISIGN(G4int a, G4int b){
                                                   >> 6145 // A function that assigns the sign of the second argument to the
                                                   >> 6146 // absolute value of the first
                                                   >> 6147 
                                                   >> 6148  if(b>=0){ 
                                                   >> 6149   return std::abs(a);
                                                   >> 6150  }else{
                                                   >> 6151   return -1*std::abs(a);
                                                   >> 6152  }
                                                   >> 6153  return 0;
7479 }                                                6154 }
7480                                                  6155 
7481 G4double G4Abla::DSIGN(G4double a, G4double b << 6156 G4int G4Abla::nint(G4double number)
7482 {                                                6157 {
7483     // A function that assigns the sign of th << 6158   G4double intpart = 0.0;
7484     // absolute value of the first            << 6159   G4double fractpart = 0.0;
7485                                               << 6160   fractpart = std::modf(number, &intpart);
7486     if (b >= 0)                               << 6161   if(number == 0) {
7487     {                                         << 
7488         return std::abs(a);                   << 
7489     }                                         << 
7490     else                                      << 
7491     {                                         << 
7492         return -1.0 * std::abs(a);            << 
7493     }                                         << 
7494     return 0;                                    6162     return 0;
7495 }                                             << 6163   }
7496                                               << 6164   if(number > 0) {
7497 G4int G4Abla::ISIGN(G4int a, G4int b)         << 6165     if(fractpart < 0.5) {
7498 {                                             << 6166       return G4int(std::floor(number));
7499     // A function that assigns the sign of th << 
7500     // absolute value of the first            << 
7501                                               << 
7502     if (b >= 0)                               << 
7503     {                                         << 
7504         return std::abs(a);                   << 
7505     }                                         << 
7506     else                                      << 
7507     {                                         << 
7508         return -1 * std::abs(a);              << 
7509     }                                            6167     }
7510     return 0;                                 << 6168     else {
7511 }                                             << 6169       return G4int(std::ceil(number));
7512                                               << 
7513 G4int G4Abla::nint(G4double number)           << 
7514 {                                             << 
7515     G4double intpart = 0.0;                   << 
7516     G4double fractpart = 0.0;                 << 
7517     fractpart = std::modf(number, &intpart);  << 
7518     if (number == 0)                          << 
7519     {                                         << 
7520         return 0;                             << 
7521     }                                         << 
7522     if (number > 0)                           << 
7523     {                                         << 
7524         if (fractpart < 0.5)                  << 
7525         {                                     << 
7526             return G4int(std::floor(number)); << 
7527         }                                     << 
7528         else                                  << 
7529         {                                     << 
7530             return G4int(std::ceil(number));  << 
7531         }                                     << 
7532     }                                            6170     }
7533     if (number < 0)                           << 6171   }
7534     {                                         << 6172   if(number < 0) {
7535         if (fractpart < -0.5)                 << 6173     if(fractpart < -0.5) {
7536         {                                     << 6174       return G4int(std::floor(number));
7537             return G4int(std::floor(number)); << 6175     }
7538         }                                     << 6176     else {
7539         else                                  << 6177       return G4int(std::ceil(number));
7540         {                                     << 
7541             return G4int(std::ceil(number));  << 
7542         }                                     << 
7543     }                                            6178     }
                                                   >> 6179   }
7544                                                  6180 
7545     return G4int(std::floor(number));         << 6181   return G4int(std::floor(number));
7546 }                                                6182 }
7547                                                  6183 
7548 G4int G4Abla::secnds(G4int x)                    6184 G4int G4Abla::secnds(G4int x)
7549 {                                                6185 {
7550     time_t mytime;                            << 6186   time_t mytime;
7551     tm* mylocaltime;                          << 6187   tm *mylocaltime;
7552                                                  6188 
7553     time(&mytime);                            << 6189   time(&mytime);
7554     mylocaltime = localtime(&mytime);         << 6190   mylocaltime = localtime(&mytime);
7555                                                  6191 
7556     if (x == 0)                               << 6192   if(x == 0) {
7557     {                                         << 6193     return(mylocaltime->tm_hour*60*60 + mylocaltime->tm_min*60 + mylocaltime->tm_sec);
7558         return (mylocaltime->tm_hour * 60 * 6 << 6194   }
7559     }                                         << 6195   else {
7560     else                                      << 6196     return(mytime - x);
7561     {                                         << 6197   }
7562         return G4int(mytime - x);             << 
7563     }                                         << 
7564 }                                                6198 }
7565                                                  6199 
7566 G4int G4Abla::mod(G4int a, G4int b)              6200 G4int G4Abla::mod(G4int a, G4int b)
7567 {                                                6201 {
7568     if (b != 0)                               << 6202   if(b != 0) {
7569     {                                         << 6203     return a%b;
7570         return a % b;                         << 6204   }
7571     }                                         << 6205   else {
7572     else                                      << 6206     return 0;
7573     {                                         << 6207   } 
7574         return 0;                             << 
7575     }                                         << 
7576 }                                                6208 }
7577                                                  6209 
7578 G4double G4Abla::dint(G4double x)                6210 G4double G4Abla::dint(G4double x)
7579 {                                                6211 {
7580     G4double value = 0.0;                     << 6212   G4double value = 0.0;
7581     /*                                        << 6213 /*
7582       if(a < 0.0) {                           << 6214   if(a < 0.0) {
7583         value = double(std::ceil(a));         << 6215     value = double(std::ceil(a));
7584       }                                       << 6216   }
7585       else {                                  << 6217   else {
7586         value = double(std::floor(a));        << 6218     value = double(std::floor(a));
7587       }                                       << 6219   }
7588     */                                        << 6220 */
7589     if (x - std::floor(x) <= std::ceil(x) - x << 6221   if(x-std::floor(x) <= std::ceil(x)-x) 
7590         value = G4double(std::floor(x));      << 6222          value = G4double(std::floor(x));
7591     else                                      << 6223   else 
7592         value = G4double(std::ceil(x));       << 6224          value = G4double(std::ceil(x));
7593                                                  6225 
7594     return value;                             << 6226   return value;
7595 }                                                6227 }
7596                                                  6228 
7597 G4int G4Abla::idint(G4double x)                  6229 G4int G4Abla::idint(G4double x)
7598 {                                                6230 {
7599     G4int value = 0;                          << 6231   G4int value = 0;
7600     if (x - std::floor(x) <= std::ceil(x) - x << 6232   if(x-std::floor(x) <= std::ceil(x)-x) 
7601         value = G4int(std::floor(x));         << 6233          value = G4int(std::floor(x));
7602     else                                      << 6234   else 
7603         value = G4int(std::ceil(x));          << 6235          value = G4int(std::ceil(x));
7604                                                  6236 
7605     return value;                             << 6237   return value;
7606 }                                                6238 }
7607                                                  6239 
7608 G4int G4Abla::idnint(G4double x)                 6240 G4int G4Abla::idnint(G4double x)
7609 {                                                6241 {
7610     if (x - std::floor(x) <= std::ceil(x) - x << 6242   if(x-std::floor(x) <= std::ceil(x)-x) 
7611         return G4int(std::floor(x));          << 6243          return G4int(std::floor(x));
7612     else                                      << 6244   else 
7613         return G4int(std::ceil(x));           << 6245          return G4int(std::ceil(x));
7614 }                                                6246 }
7615                                                  6247 
7616 G4double G4Abla::dmin1(G4double a, G4double b    6248 G4double G4Abla::dmin1(G4double a, G4double b, G4double c)
7617 {                                                6249 {
7618     if (a < b && a < c)                       << 6250   if(a < b && a < c) {
7619     {                                         << 
7620         return a;                             << 
7621     }                                         << 
7622     if (b < a && b < c)                       << 
7623     {                                         << 
7624         return b;                             << 
7625     }                                         << 
7626     if (c < a && c < b)                       << 
7627     {                                         << 
7628         return c;                             << 
7629     }                                         << 
7630     return a;                                    6251     return a;
                                                   >> 6252   }
                                                   >> 6253   if(b < a && b < c) {
                                                   >> 6254     return b;
                                                   >> 6255   }
                                                   >> 6256   if(c < a && c < b) {
                                                   >> 6257     return c;
                                                   >> 6258   }
                                                   >> 6259   return a;
                                                   >> 6260 }
                                                   >> 6261 
                                                   >> 6262 G4double G4Abla::utilabs(G4double a)
                                                   >> 6263 {
                                                   >> 6264   return std::abs(a);
7631 }                                                6265 }
7632                                                  6266 
7633 G4double G4Abla::utilabs(G4double a) { return << 
7634                                                  6267 
7635 G4double G4Abla::width(G4double AMOTHER,      << 6268 G4double G4Abla::width(G4double AMOTHER,G4double ZMOTHER,G4double APART,G4double ZPART,G4double TEMP,G4double B1,G4double SB1,G4double EXC)
7636                        G4double ZMOTHER,      << 6269 {
7637                        G4double APART,        << 6270 /*
7638                        G4double ZPART,        << 6271 * Implemented by JLRS for Abla c++: 06/11/2016
7639                        G4double TEMP,         << 6272 *
7640                        G4double B1,           << 6273 C  Last update:
7641                        G4double SB1,          << 6274 C       28/10/13 - JLRS - from abrablav4 (AK)
7642                        G4double EXC)          << 6275 */
7643 {                                             << 6276       G4int IZPART,IAPART,NMOTHER;
7644     /*                                        << 6277       G4double B,HBAR,PI,RGEOM,MPART,SB;
7645     * Implemented by JLRS for Abla c++: 06/11 << 6278       G4double BKONST,C,C2,G,APARTNER,MU;
7646     *                                         << 6279       G4double INT1,INT2,INT3,AKONST,EARG,R0,MPARTNER;
7647     C  Last update:                           << 6280       G4double AEXP;
7648     C       28/10/13 - JLRS - from abrablav4  << 6281       G4double ARG;
7649     */                                        << 6282       G4double PAR_A1=0.,PAR_B1=0.,FACT=1.;
7650     G4int IZPART, IAPART, NMOTHER;            << 6283       G4double fwidth=0.;
7651     G4double B, HBAR, PI, RGEOM, MPART, SB;   << 6284       G4int idlamb0=0;
7652     G4double BKONST, C, C2, G, APARTNER, MU;  << 6285       PI=3.141592654;
7653     G4double INT1, INT2, INT3, AKONST, EARG,  << 6286 
7654     G4double AEXP;                            << 6287       if(ZPART==-2.){
7655     G4double ARG;                             << 6288        ZPART=0.;
7656     G4double PAR_A1 = 0., PAR_B1 = 0., FACT = << 6289        idlamb0=1;
7657     G4double fwidth = 0.;                     << 6290       }
7658     G4int idlamb0 = 0;                        << 6291 
7659     PI = 3.141592654;                         << 6292       IZPART = idnint(ZPART);
7660                                               << 6293       IAPART = idnint(APART);
7661     if (ZPART == -2.)                         << 6294 
7662     {                                         << 6295       B = B1;
7663         ZPART = 0.;                           << 6296       SB = SB1;
7664         idlamb0 = 1;                          << 6297       NMOTHER = idnint(AMOTHER-ZMOTHER);
7665     }                                         << 6298 
7666                                               << 6299       PAR_A1 = 0.0;
7667     IZPART = idnint(ZPART);                   << 6300       PAR_B1 = 0.0;
7668     IAPART = idnint(APART);                   << 6301 
7669                                               << 6302       if(SB>EXC){
7670     B = B1;                                   << 6303        return fwidth=0.0;
7671     SB = SB1;                                 << 6304       }else{
7672     NMOTHER = idnint(AMOTHER - ZMOTHER);      << 6305 // in MeV*s
7673                                               << 6306       HBAR = 6.582122e-22;
7674     PAR_A1 = 0.0;                             << 6307 //      HBAR2 = HBAR * HBAR
7675     PAR_B1 = 0.0;                             << 6308 // in m/s
7676                                               << 6309       C = 2.99792458e8;
7677     if (SB > EXC)                             << 6310       C2 = C * C;
7678     {                                         << 6311       APARTNER = AMOTHER - APART;
7679         return fwidth = 0.0;                  << 6312       MPARTNER = APARTNER * 931.49 / C2;
7680     }                                         << 6313 
7681     else                                      << 6314 //           g=(2s+1)
7682     {                                         << 6315       if(IAPART==1&&IZPART==0){
7683         // in MeV*s                           << 6316         G = 2.0;
7684         HBAR = 6.582122e-22;                  << 6317         MPART =  939.56 / C2;
7685         //      HBAR2 = HBAR * HBAR           << 6318         if(idlamb0==1)MPART =  1115.683 / C2;
7686         // in m/s                             << 6319       }else{
7687         C = 2.99792458e8;                     << 6320        if(IAPART==1&&IZPART==1){
7688         C2 = C * C;                           << 6321         G = 2.0;
7689         APARTNER = AMOTHER - APART;           << 6322         MPART = 938.27 / C2;
7690         MPARTNER = APARTNER * 931.49 / C2;    << 6323        }
7691                                               << 6324        else{
7692         //           g=(2s+1)                 << 6325         if(IAPART==2&&IZPART==0){
7693         if (IAPART == 1 && IZPART == 0)       << 6326         G = 1.0;
7694         {                                     << 6327         MPART = 2.*939.56 / C2;
                                                   >> 6328         }else{
                                                   >> 6329          if(IAPART==2&&IZPART==1){
                                                   >> 6330          G = 3.0;
                                                   >> 6331          MPART = 1876.10 / C2;
                                                   >> 6332          }else{
                                                   >> 6333           if(IAPART==3&&IZPART==1){
                                                   >> 6334            G = 2.0;
                                                   >> 6335            MPART = 2809.39 / C2;
                                                   >> 6336           }else{
                                                   >> 6337            if(IAPART==3&&IZPART==2){
7695             G = 2.0;                             6338             G = 2.0;
7696             MPART = 939.56 / C2;              << 6339             MPART = 2809.37 / C2;
7697             if (idlamb0 == 1)                 << 6340            }else{
7698                 MPART = 1115.683 / C2;        << 6341             if(IAPART==4&&IZPART==2){
7699         }                                     << 6342              G = 1.0;
7700         else                                  << 6343              MPART = 3728.35 / C2;
7701         {                                     << 6344             }else{
7702             if (IAPART == 1 && IZPART == 1)   << 6345              // IMF
7703             {                                 << 6346              G = 1.0;
7704                 G = 2.0;                      << 6347              MPART = APART * 931.49 / C2;   
7705                 MPART = 938.27 / C2;          << 6348             }
7706             }                                 << 6349            }
7707             else                              << 6350           }
7708             {                                 << 6351          }
7709                 if (IAPART == 2 && IZPART ==  << 6352         }
7710                 {                             << 6353        }
7711                     G = 1.0;                  << 6354       }//end g
7712                     MPART = 2. * 939.56 / C2; << 6355 
7713                 }                             << 6356 // Relative mass in MeV*s^2/m^2
7714                 else                          << 6357       MU = MPARTNER * MPART / (MPARTNER + MPART);
7715                 {                             << 6358 // in m
7716                     if (IAPART == 2 && IZPART << 6359       R0 = 1.16e-15;
7717                     {                         << 
7718                         G = 3.0;              << 
7719                         MPART = 1876.10 / C2; << 
7720                     }                         << 
7721                     else                      << 
7722                     {                         << 
7723                         if (IAPART == 3 && IZ << 
7724                         {                     << 
7725                             G = 2.0;          << 
7726                             MPART = 2809.39 / << 
7727                         }                     << 
7728                         else                  << 
7729                         {                     << 
7730                             if (IAPART == 3 & << 
7731                             {                 << 
7732                                 G = 2.0;      << 
7733                                 MPART = 2809. << 
7734                             }                 << 
7735                             else              << 
7736                             {                 << 
7737                                 if (IAPART == << 
7738                                 {             << 
7739                                     G = 1.0;  << 
7740                                     MPART = 3 << 
7741                                 }             << 
7742                                 else          << 
7743                                 {             << 
7744                                     // IMF    << 
7745                                     G = 1.0;  << 
7746                                     MPART = A << 
7747                                 }             << 
7748                             }                 << 
7749                         }                     << 
7750                     }                         << 
7751                 }                             << 
7752             }                                 << 
7753         } // end g                            << 
7754                                                  6360 
7755         // Relative mass in MeV*s^2/m^2       << 6361       RGEOM = R0 * (std::pow(APART,1.0/3.0)+std::pow(AMOTHER-APART,1.0/3.0));
7756         MU = MPARTNER * MPART / (MPARTNER + M << 
7757         // in m                               << 
7758         R0 = 1.16e-15;                        << 
7759                                                  6362 
7760         RGEOM = R0 * (std::pow(APART, 1.0 / 3 << 6363 // in m*sqrt(MeV)
                                                   >> 6364       AKONST = HBAR*std::sqrt(1.0 / MU);
7761                                                  6365 
7762         // in m*sqrt(MeV)                     << 6366 // in  1/(MeV*m^2)
7763         AKONST = HBAR * std::sqrt(1.0 / MU);  << 6367       BKONST =  MPART / ( PI * PI * HBAR * HBAR);
                                                   >> 6368 //
                                                   >> 6369 // USING ANALYTICAL APPROXIMATION
7764                                                  6370 
7765         // in  1/(MeV*m^2)                    << 6371       INT1 = 2.0 * std::pow(TEMP,3.) / (2.0 * TEMP + B);
7766         BKONST = MPART / (PI * PI * HBAR * HB << 
7767         //                                    << 
7768         // USING ANALYTICAL APPROXIMATION     << 
7769                                                  6372 
7770         INT1 = 2.0 * std::pow(TEMP, 3.) / (2. << 6373       ARG = std::sqrt(B/TEMP);
                                                   >> 6374       EARG = (erf(ARG) - 1.0);
                                                   >> 6375       if(std::abs(EARG)<1.e-9) EARG = 0.0;
                                                   >> 6376       if(B==0.0){
                                                   >> 6377         INT2 = 0.5 * std::sqrt(PI) * std::pow(TEMP,3.0/2.0);
                                                   >> 6378       }else{
                                                   >> 6379          AEXP = B/TEMP;
                                                   >> 6380           if(AEXP>700.0) AEXP = 700.0;
                                                   >> 6381          INT2 = (2.0*B*B +TEMP*B)/std::sqrt(B) + std::exp(AEXP) * std::sqrt(PI/(4.0*TEMP))*(4.0*B*B+4.0*B*TEMP - TEMP*TEMP) *EARG;
                                                   >> 6382        if(INT2<0.0) INT2 = 0.0;
                                                   >> 6383 // For very low temperatures when EARG=0, INT2 get unreasonably high values
                                                   >> 6384 // comming from the first term. Therefore, for these cases INT2 is set to 0.
                                                   >> 6385        if(EARG==0.0) INT2 = 0.0;
                                                   >> 6386       }//if B
                                                   >> 6387 
                                                   >> 6388       INT3 = 2.0*TEMP*TEMP*TEMP / (2.0*TEMP*TEMP + 4.0*B*TEMP + B*B);
                                                   >> 6389 
                                                   >> 6390       if(IZPART<-1.0&&ZMOTHER<151.0){
                                                   >> 6391 //      IF(IZPART.LT.1)THEN
                                                   >> 6392 // For neutrons, the width is given by a mean value between geometrical and QM values;
                                                   >> 6393 // Only QM contribution (Rgeom -> Rgeom + Rlamda) seems to be too strong for neutrons
                                                   >> 6394        fwidth = PI * BKONST *  G * std::sqrt((RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3) * RGEOM * RGEOM * INT1);
7771                                                  6395 
7772         ARG = std::sqrt(B / TEMP);            << 6396       }else{
7773         EARG = (erf(ARG) - 1.0);              << 6397        fwidth = PI * BKONST *  G *(RGEOM * RGEOM * INT1 + 2.0 * AKONST * RGEOM * INT2 + AKONST * AKONST * INT3);
7774         if (std::abs(EARG) < 1.e-9)           << 6398       }
7775             EARG = 0.0;                       << 
7776         if (B == 0.0)                         << 
7777         {                                     << 
7778             INT2 = 0.5 * std::sqrt(PI) * std: << 
7779         }                                     << 
7780         else                                  << 
7781         {                                     << 
7782             AEXP = B / TEMP;                  << 
7783             if (AEXP > 700.0)                 << 
7784                 AEXP = 700.0;                 << 
7785             INT2 = (2.0 * B * B + TEMP * B) / << 
7786                    std::exp(AEXP) * std::sqrt << 
7787             if (INT2 < 0.0)                   << 
7788                 INT2 = 0.0;                   << 
7789             // For very low temperatures when << 
7790             // values comming from the first  << 
7791             // set to 0.                      << 
7792             if (EARG == 0.0)                  << 
7793                 INT2 = 0.0;                   << 
7794         } // if B                             << 
7795                                               << 
7796         INT3 = 2.0 * TEMP * TEMP * TEMP / (2. << 
7797                                               << 
7798         if (IZPART < -1.0 && ZMOTHER < 151.0) << 
7799         {                                     << 
7800             //      IF(IZPART.LT.1)THEN       << 
7801             // For neutrons, the width is giv << 
7802             // and QM values; Only QM contrib << 
7803             // be too strong for neutrons     << 
7804             fwidth = PI * BKONST * G *        << 
7805                      std::sqrt((RGEOM * RGEOM << 
7806                                RGEOM * INT1); << 
7807         }                                     << 
7808         else                                  << 
7809         {                                     << 
7810             fwidth = PI * BKONST * G * (RGEOM << 
7811         }                                     << 
7812                                                  6399 
7813         // To correct for too high values of  << 
7814         // numerical solution for energies cl << 
7815         if (IZPART < 3.0)                     << 
7816         {                                     << 
7817             if (AMOTHER < 155.0)              << 
7818             {                                 << 
7819                 PAR_A1 = std::exp(2.302585 *  << 
7820                 PAR_B1 = 0.59939389 + 0.00915 << 
7821             }                                 << 
7822             else                              << 
7823             {                                 << 
7824                 if (AMOTHER > 154.0 && AMOTHE << 
7825                 {                             << 
7826                     PAR_A1 = 1.0086961 - 8.62 << 
7827                     PAR_B1 = 1.5329331 + 0.00 << 
7828                 }                             << 
7829                 else                          << 
7830                 {                             << 
7831                     if (AMOTHER > 194.0 && AM << 
7832                     {                         << 
7833                         PAR_A1 = 9.8356347 -  << 
7834                         PAR_B1 = 7.7701987 -  << 
7835                     }                         << 
7836                     else                      << 
7837                     {                         << 
7838                         if (AMOTHER > 207.0 & << 
7839                         {                     << 
7840                             PAR_A1 = 15.10738 << 
7841                             PAR_B1 = -64.0780 << 
7842                         }                     << 
7843                         else                  << 
7844                         {                     << 
7845                             if (AMOTHER > 227 << 
7846                             {                 << 
7847                                 if (mod(NMOTH << 
7848                                 {             << 
7849                                     PAR_A1 =  << 
7850                                 }             << 
7851                                 else          << 
7852                                 {             << 
7853                                     if (mod(N << 
7854                                         PAR_A << 
7855                                 }             << 
7856                                 PAR_B1 = 2.15 << 
7857                             }                 << 
7858                         }                     << 
7859                     }                         << 
7860                 }                             << 
7861             }                                 << 
7862             FACT = std::exp((2.302585 * PAR_A << 
7863             if (FACT < 1.0)                   << 
7864                 FACT = 1.0;                   << 
7865             if (IZPART < -1. && ZMOTHER < 151 << 
7866             {                                 << 
7867                 //       IF(IZPART.LT.1)THEN  << 
7868                 fwidth = fwidth / std::sqrt(F << 
7869             }                                 << 
7870             else                              << 
7871             {                                 << 
7872                 fwidth = fwidth / FACT;       << 
7873             }                                 << 
7874         } // if IZPART<3.0                    << 
7875                                                  6400 
7876         if (fwidth <= 0.0)                    << 6401 // To correct for too high values of analytical width compared to
7877         {                                     << 6402 // numerical solution for energies close to the particle threshold:
7878             std::cout << "LOOK IN PARTICLE_WI << 6403        if(IZPART<3.0){
7879             std::cout << "ACN,APART :" << AMO << 6404         if(AMOTHER<155.0){
7880             std::cout << "EXC,TEMP,B,SB :" << << 6405          PAR_A1=std::exp(2.302585*0.2083*std::exp(-0.01548472*AMOTHER))-0.05;
7881             std::cout << "INTi, i=1-3 :" << I << 6406          PAR_B1 = 0.59939389 + 0.00915657 * AMOTHER;
7882             std::cout << " " << std::endl;    << 6407         }else{
7883         }                                     << 6408          if(AMOTHER>154.0&&AMOTHER<195.0){
                                                   >> 6409            PAR_A1=1.0086961-8.629e-5*AMOTHER;
                                                   >> 6410            PAR_B1 = 1.5329331 + 0.00302074 * AMOTHER;
                                                   >> 6411          }else{
                                                   >> 6412           if(AMOTHER>194.0&&AMOTHER<208.0){
                                                   >> 6413            PAR_A1=9.8356347-0.09294663*AMOTHER+2.441e-4*AMOTHER*AMOTHER;
                                                   >> 6414            PAR_B1 = 7.7701987 - 0.02897401 * AMOTHER;
                                                   >> 6415           }else{
                                                   >> 6416            if(AMOTHER>207.0&&AMOTHER<228.0){
                                                   >> 6417             PAR_A1=15.107385-0.12414415*AMOTHER+2.7222e-4*AMOTHER*AMOTHER;
                                                   >> 6418             PAR_B1=-64.078009+0.56813179*AMOTHER-0.00121078*AMOTHER*AMOTHER; 
                                                   >> 6419            }else{
                                                   >> 6420              if(AMOTHER>227.0){
                                                   >> 6421               if(mod(NMOTHER,2)==0&&NMOTHER>147.){
                                                   >> 6422                PAR_A1 = 2.0*(0.9389118 + 6.4559e-5 * AMOTHER);
                                                   >> 6423               }else{
                                                   >> 6424                if(mod(NMOTHER,2)==1)PAR_A1 = 3.0*(0.9389118 + 6.4559e-5 * AMOTHER);
                                                   >> 6425               }
                                                   >> 6426               PAR_B1 = 2.1507177 + 0.00146119 * AMOTHER;
                                                   >> 6427              }
                                                   >> 6428            }
                                                   >> 6429           }
                                                   >> 6430          }
                                                   >> 6431         }
                                                   >> 6432        FACT = std::exp((2.302585*PAR_A1*std::exp(-PAR_B1*(EXC-SB))));
                                                   >> 6433        if(FACT<1.0) FACT = 1.0;
                                                   >> 6434        if(IZPART<-1.&&ZMOTHER<151.0){
                                                   >> 6435 //       IF(IZPART.LT.1)THEN
                                                   >> 6436         fwidth = fwidth / std::sqrt(FACT);
                                                   >> 6437        }else{
                                                   >> 6438         fwidth = fwidth / FACT;
                                                   >> 6439        }
                                                   >> 6440        }//if IZPART<3.0
                                                   >> 6441 
                                                   >> 6442        if(fwidth<=0.0){
                                                   >> 6443        std::cout <<"LOOK IN PARTICLE_WIDTH!" << std::endl;
                                                   >> 6444        std::cout <<"ACN,APART :"<< AMOTHER << APART << std::endl;
                                                   >> 6445        std::cout <<"EXC,TEMP,B,SB :" << EXC << " " << TEMP << " "  << B << " "  << SB << std::endl;
                                                   >> 6446        std::cout <<"INTi, i=1-3 :" << INT1 << " "  << INT2 << " "  << INT3 << std::endl;
                                                   >> 6447        std::cout <<" " << std::endl;
                                                   >> 6448        }
7884                                                  6449 
7885     } // if SB>EXC                            << 6450       }//if SB>EXC
7886     return fwidth;                            << 6451   return fwidth;
7887 }                                                6452 }
7888                                                  6453 
7889 G4double G4Abla::pen(G4double A, G4double ap,    6454 G4double G4Abla::pen(G4double A, G4double ap, G4double omega, G4double T)
7890 {                                                6455 {
7891     // JLRS: 06/11/2016                       << 6456 // JLRS: 06/11/2016
7892     // CORRECTIONS FOR BARRIER PENETRATION    << 6457 // CORRECTIONS FOR BARRIER PENETRATION
7893     // AK, KHS 2005 - Energy-dependen inverse << 6458 // AK, KHS 2005 - Energy-dependen inverse cross sections included, influence of
7894     // of                                     << 6459 //                Coulomb barrier for LCP, tunnelling for LCP
7895     //                Coulomb barrier for LCP << 
7896                                                  6460 
7897     G4double fpen = 0., MU, HO;               << 6461  G4double fpen=0., MU, HO;
7898                                                  6462 
7899     // REDUCED MASSES (IN MeV/C**2)           << 6463 // REDUCED MASSES (IN MeV/C**2)
7900     MU = (A - ap) * ap / A;                   << 6464        MU = (A - ap) * ap / A;
7901                                                  6465 
7902     // ENERGY OF THE INVERSE PARABOLA AT THE  << 6466 // ENERGY OF THE INVERSE PARABOLA AT THE POTENTIAL BARRIER (hbar*omega);
7903     // HERE hbar = 197.3287 fm*MeV/c, omega i << 6467 // HERE hbar = 197.3287 fm*MeV/c, omega is in c/fm
7904     HO = 197.3287 * omega;                    << 6468        HO = 197.3287 * omega;
7905                                                  6469 
7906     if (T <= 0.0)                             << 6470      if(T<=0.0){
7907     {                                         << 6471        fpen = 0.0;
7908         fpen = 0.0;                           << 6472      }else{
7909     }                                         << 6473        fpen=std::pow(10.0,4.e-4*std::pow(T/(HO*HO*std::pow(MU,0.25)),-4.3/2.3026));
7910     else                                      << 6474      }
7911     {                                         << 
7912         fpen = std::pow(10.0, 4.e-4 * std::po << 
7913     }                                         << 
7914                                                  6475 
7915     return fpen;                              << 6476  return fpen;
7916 }                                                6477 }
7917                                                  6478 
7918 void G4Abla::bsbkbc(G4double A, G4double Z, G << 6479 void G4Abla::bsbkbc(G4double A,G4double Z,G4double *BS,G4double *BK,G4double *BC)
7919 {                                                6480 {
7920     // Calculate BS and BK needed for a level << 6481 // Calculate BS and BK needed for a level-density parameter:
7921     // BETA2 and BETA4 = quadrupole and hexad << 6482 // BETA2 and BETA4 = quadrupole and hexadecapole deformation
7922                                                  6483 
7923     G4double PI = 3.14159265;                 << 6484       G4double PI = 3.14159265;
7924     G4int IZ = idnint(Z);                     << 6485       G4int IZ = idnint(Z);
7925     G4int IN = idnint(A - Z);                 << 6486       G4int IN = idnint(A - Z);
7926     // alphaN = sqrt(2*N/(4*pi))*BetaN        << 6487 // alphaN = sqrt(2*N/(4*pi))*BetaN
7927     G4double ALPHA2 = std::sqrt(5.0 / (4.0 *  << 6488       G4double ALPHA2 = std::sqrt(5.0/(4.0*PI))*ecld->beta2[IN][IZ];
7928     G4double ALPHA4 = std::sqrt(9.0 / (4.0 *  << 6489       G4double ALPHA4 = std::sqrt(9.0/(4.0*PI))*ecld->beta4[IN][IZ];
7929                                                  6490 
7930     (*BS) = 1.0 + 0.4 * ALPHA2 * ALPHA2 - 4.0 << 6491       (*BS) = 1.0 + 0.4*ALPHA2*ALPHA2 - 4.0/105.0*ALPHA2*ALPHA2*ALPHA2 - 66.0/175.0*ALPHA2*ALPHA2*ALPHA2*ALPHA2 - 4.0/35.0*ALPHA2*ALPHA2*ALPHA4 + ALPHA4*ALPHA4;
7931             66.0 / 175.0 * ALPHA2 * ALPHA2 *  << 
7932                                                  6492 
7933     (*BK) = 1.0 + 0.4 * ALPHA2 * ALPHA2 + 16. << 6493       (*BK) = 1.0 + 0.4*ALPHA2*ALPHA2 + 16.0/105.0*ALPHA2*ALPHA2*ALPHA2 - 82.0/175.0*ALPHA2*ALPHA2*ALPHA2*ALPHA2 + 2.0/35.0*ALPHA2*ALPHA2*ALPHA4 + ALPHA4*ALPHA4;
7934             82.0 / 175.0 * ALPHA2 * ALPHA2 *  << 
7935                                                  6494 
7936     (*BC) = 0.0;                              << 6495       (*BC)=0.0;      
7937                                                  6496 
7938     return;                                   << 6497  return;
7939 }                                                6498 }
7940                                                  6499 
7941 G4double G4Abla::fvmaxhaz(G4double T)         << 6500 G4double G4Abla::fvmaxhaz( G4double T)
7942 {                                                6501 {
7943     // Random generator according to a distri << 6502 // Random generator according to a distribution similar to a
7944     // Maxwell distribution with quantum-mech << 6503 // Maxwell distribution with quantum-mech. x-section for charged particles according to KHS
7945     // according to KHS                       << 6504 //      Y = X**(1.5E0) / (B+X) * EXP(-X/T) (approximation:)
7946     //      Y = X**(1.5E0) / (B+X) * EXP(-X/T << 6505 
7947                                               << 6506 return (3.0 * T * std::pow(-1.*std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat())*std::log(G4AblaRandom::flat()),0.333333));
7948     return (                                  << 6507 }
7949         3.0 * T *                             << 6508 
7950         std::pow(-1. * std::log(G4AblaRandom: << 6509 G4double G4Abla::func_trans(G4double TIME,G4double ZF,G4double AF,G4double bet,G4double Y,G4double FT,G4double T_0)
7951                  0.333333));                  << 6510 {
7952 }                                             << 6511 /*
7953                                               << 6512 c   This function determines the fission width as a function o time
7954 G4double                                      << 6513 c   according to the analytical solution of the FPE for the probability distribution
7955     G4Abla::func_trans(G4double TIME, G4doubl << 6514 c   at the barrier when the nucleus potential is aproximated by a parabolic
7956 {                                             << 6515 c   potential. It is taken from S. Chandrasekhar, Rev. Mod. Phys. 15 (1943) 1
7957     /*                                        << 6516 c                   
7958     c   This function determines the fission  << 6517 c***********************INPUT PARAMETERS*********************************
7959     c   according to the analytical solution  << 6518 c  Time               Time at which we evaluate the fission width
7960     distribution c   at the barrier when the  << 6519 c  ZF                 Z of nucleus
7961     parabolic c   potential. It is taken from << 6520 C  AF                 A of nucleus    
7962     (1943) 1                                  << 6521 c  BET                Reduced dissipation coefficient
7963     c                                         << 6522 c  FT                 Nuclear temperature
7964     c***********************INPUT PARAMETERS* << 6523 C**************************************************************************
7965     c  Time               Time at which we ev << 6524 C********************************OUTPUT***********************************
7966     c  ZF                 Z of nucleus        << 6525 C   Fission decay width at the corresponding time of the decay cascade
7967     C  AF                 A of nucleus        << 6526 C*************************************************************************
7968     c  BET                Reduced dissipation << 6527 c****************************OTHER VARIABLES******************************
7969     c  FT                 Nuclear temperature << 6528 C  SIGMA_SQR         Square of the width of the prob. distribution
7970     C**************************************** << 6529 C  XB                Deformation of the nucleus at the saddle point
7971     C********************************OUTPUT** << 6530 c  NORM              Normalization factor of the probability distribution
7972     C   Fission decay width at the correspond << 6531 c  W                 Probability distribution at the saddle deformation XB
7973     C**************************************** << 6532 c  W_INFIN           Probability distr. at XB at infinite time
7974     c****************************OTHER VARIAB << 6533 c  MFCD              Mass of the fission collective degree of freedom
7975     C  SIGMA_SQR         Square of the width  << 6534 C*************************************************************************
7976     C  XB                Deformation of the n << 6535 */
7977     c  NORM              Normalization factor << 6536       G4double PI = 3.14159;
7978     c  W                 Probability distribu << 6537       G4double DEFO_INIT,OMEGA,HOMEGA,OMEGA_GS,HOMEGA_GS,K1,MFCD;
7979     c  W_INFIN           Probability distr. a << 6538       G4double BET1,XACT,SIGMA_SQR,W_EXP,XB,NORM,SIGMA_SQR_INF,W_INFIN,W;
7980     c  MFCD              Mass of the fission  << 6539       G4double FUNC_TRANS,LOG_SLOPE_INF,LOG_SLOPE_ABS;
7981     C**************************************** << 6540 //
7982     */                                        << 6541 // Influence of initial deformation
7983     G4double PI = 3.14159;                    << 6542 // Initial alpha2 deformation (GS)
7984     G4double DEFO_INIT, OMEGA, HOMEGA, OMEGA_ << 6543       DEFO_INIT = std::sqrt(5.0/(4.0*PI))*ecld->beta2[fiss->at-fiss->zt][fiss->zt];
7985     G4double BET1, XACT, SIGMA_SQR, W_EXP, XB << 6544 //
7986     G4double FUNC_TRANS, LOG_SLOPE_INF, LOG_S << 6545       fomega_sp(AF,Y,&MFCD,&OMEGA,&HOMEGA);
7987     //                                        << 6546       fomega_gs(AF,ZF,&K1,&OMEGA_GS,&HOMEGA_GS);
7988     // Influence of initial deformation       << 6547 //
7989     // Initial alpha2 deformation (GS)        << 6548 // Determination of the square of the width of the probability distribution
7990     DEFO_INIT = std::sqrt(5.0 / (4.0 * PI)) * << 6549 // For the overdamped regime BET**2 > 4*OMEGA**2
7991     //                                        << 6550          if((bet*bet)>4.0*OMEGA_GS*OMEGA_GS){
7992     fomega_sp(AF, Y, &MFCD, &OMEGA, &HOMEGA); << 6551           BET1=std::sqrt(bet*bet-4.0*OMEGA_GS*OMEGA_GS);
7993     fomega_gs(AF, ZF, &K1, &OMEGA_GS, &HOMEGA << 6552 //
7994     //                                        << 6553 // REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV
7995     // Determination of the square of the wid << 6554 // SO THAT HOMEGA1 = HOMEGA/HBAR
7996     // For the overdamped regime BET**2 > 4*O << 6555 //
7997     if ((bet * bet) > 4.0 * OMEGA_GS * OMEGA_ << 6556           SIGMA_SQR = (FT/K1)*(1.0 -((2.0*bet*bet/(BET1*BET1)* (0.5 * (std::exp(0.50*(BET1-bet)*1.e21*TIME) - std::exp(0.5*(-BET1-bet)*1.e21*TIME)))*(0.5 * (std::exp(0.50*(BET1-bet)*1.e21*TIME) - std::exp(0.5*(-BET1-bet)*1.e21*TIME)))) + (bet/BET1*0.50 * (std::exp((BET1-bet)*1.e21*TIME)-std::exp((-BET1-bet)*1.e21*TIME))) + 1. * std::exp(-bet*1.e21*TIME)));
7998     {                                         << 6557 //
7999         BET1 = std::sqrt(bet * bet - 4.0 * OM << 6558 // Evolution of the mean x-value (KHS March 2006)
8000         //                                    << 6559           XACT = DEFO_INIT *std::exp(-0.5*(bet-BET1)*1.e21*(TIME-T_0));
8001         // REMEMBER THAT HOMEGA IS ACTUALLY H << 6560 //
8002         // SO THAT HOMEGA1 = HOMEGA/HBAR      << 6561          }else{
8003         //                                    << 6562 // For the underdamped regime BET**2 < 4*HOMEGA**2 BET1 becomes a complex number
8004         SIGMA_SQR =                           << 6563 // and the expression with sinh and cosh can be transformed in one with sin and cos
8005             (FT / K1) *                       << 6564           BET1=std::sqrt(4.0*OMEGA_GS*OMEGA_GS-bet*bet);
8006             (1.0 -                            << 6565           SIGMA_SQR = FT/K1*(1.-std::exp(-1.0*bet*1.e21*TIME)*(bet*bet/(BET1*BET1)*(1.-std::cos(BET1*1.e21*TIME)) + bet/BET1*std::sin(BET1*1.e21*TIME) + 1.0));
8007              ((2.0 * bet * bet / (BET1 * BET1 << 6566           XACT = DEFO_INIT*std::cos(0.5*BET1*1.e21*(TIME-T_0))*std::exp(-bet*1.e21*(TIME-T_0));
8008                (0.5 * (std::exp(0.50 * (BET1  << 6567          }
8009                (0.5 * (std::exp(0.50 * (BET1  << 6568 
8010               (bet / BET1 * 0.50 * (std::exp( << 6569 // Determination of the deformation at the saddle point according to
8011               1. * std::exp(-bet * 1.e21 * TI << 6570 // "Geometrical relationships of Macroscopic Nucl. Phys." from Hass and Myers page 100
8012         //                                    << 6571 // This corresponds to alpha2 deformation.
8013         // Evolution of the mean x-value (KHS << 6572           XB = 7./3.*Y-938./765.*Y*Y+9.499768*Y*Y*Y-8.050944*Y*Y*Y*Y;
8014         XACT = DEFO_INIT * std::exp(-0.5 * (b << 6573 //
8015         //                                    << 6574 // Determination of the probability distribution at the saddle deformation
8016     }                                         << 6575 //
8017     else                                      << 6576           if(SIGMA_SQR>0.0){
8018     {                                         << 6577            NORM = 1./std::sqrt(2.*PI*SIGMA_SQR);
8019         // For the underdamped regime BET**2  << 6578 //
8020         // number and the expression with sin << 6579            W_EXP = -1.*(XB - XACT)*(XB - XACT)/(2.0 * SIGMA_SQR);
8021         // with sin and cos                   << 6580             if(W_EXP<(-708.0) ) W_EXP = -708.0;
8022         BET1 = std::sqrt(4.0 * OMEGA_GS * OME << 6581            W = NORM * std::exp( W_EXP ) * FT / (K1 * SIGMA_SQR);
8023         SIGMA_SQR = FT / K1 *                 << 6582            }else{
8024                     (1. - std::exp(-1.0 * bet << 6583            W = 0.0;
8025                               (bet * bet / (B << 6584            }
8026                                bet / BET1 * s << 6585 //
8027         XACT = DEFO_INIT * std::cos(0.5 * BET << 6586 // Determination of the fission decay width, we assume we are in the overdamped regime
8028     }                                         << 6587 //
8029                                               << 6588               SIGMA_SQR_INF = FT/K1;
8030     // Determination of the deformation at th << 6589               W_EXP = -XB*XB/(2.0 * SIGMA_SQR_INF);
8031     // "Geometrical relationships of Macrosco << 6590               if(W_EXP<(-708.0))W_EXP = -708.0;
8032     // page 100 This corresponds to alpha2 de << 6591               W_INFIN = std::exp(W_EXP)/std::sqrt(2.0*PI*SIGMA_SQR_INF);
8033     XB = 7. / 3. * Y - 938. / 765. * Y * Y +  << 6592               FUNC_TRANS = W / W_INFIN;
8034     //                                        << 6593 //
8035     // Determination of the probability distr << 6594 // Correction for the variation of the mean velocity at the fission barrier
8036     //                                        << 6595 //  (see B. Jurado et al, Nucl. Phys. A747, p. 14)
8037     if (SIGMA_SQR > 0.0)                      << 6596 //
8038     {                                         << 6597               LOG_SLOPE_INF = cram(bet,HOMEGA)*bet*MFCD*OMEGA/FT;
8039         NORM = 1. / std::sqrt(2. * PI * SIGMA << 6598               LOG_SLOPE_ABS = (XB-XACT)/SIGMA_SQR-XB/SIGMA_SQR_INF+cram(bet,HOMEGA)*bet*MFCD*OMEGA/FT;
8040         //                                    << 6599 //
8041         W_EXP = -1. * (XB - XACT) * (XB - XAC << 6600               FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS/LOG_SLOPE_INF;
8042         if (W_EXP < (-708.0))                 << 6601 //
8043             W_EXP = -708.0;                   << 6602  return FUNC_TRANS;
8044         W = NORM * std::exp(W_EXP) * FT / (K1 << 6603 }
8045     }                                         << 6604 
8046     else                                      << 6605 
8047     {                                         << 6606 void G4Abla::part_fiss(G4double BET,G4double GP,G4double GF,G4double Y,G4double TAUF,G4double TS1,G4double TSUM,G4int *CHOICE,G4double ZF,G4double AF,G4double FT,G4double *T_LAPSE,G4double *GF_LOC)
8048         W = 0.0;                              << 6607 {
8049     }                                         << 6608 /*
8050     //                                        << 6609 C     THIS SUBROUTINE IS AIMED TO CHOOSE BETWEEN PARTICLE EMISSION
8051     // Determination of the fission decay wid << 6610 C     AND FISSION
8052     // overdamped regime                      << 6611 C     WE USE MONTE-CARLO METHODS AND SAMPLE TIME BETWEEN T=0 AND T=1.5*TAUF
8053     //                                        << 6612 c TO SIMULATE THE TRANSIENT TIME WITH 30 STEPS (0.05*TAUF EACH)
8054     SIGMA_SQR_INF = FT / K1;                  << 6613 C     FOR t>1.5*TAUF , GF=CONSTANT=ASYMPTOTICAL VALUE (INCLUDING KRAMERS FACTOR)
8055     W_EXP = -XB * XB / (2.0 * SIGMA_SQR_INF); << 6614 c------------------------------------------------------------------------
8056     if (W_EXP < (-708.0))                     << 6615 c    Modifications introduced by BEATRIZ JURADO 18/10/01:
8057         W_EXP = -708.0;                       << 6616 c    1. Now this subrutine is included in the rutine direct
8058     W_INFIN = std::exp(W_EXP) / std::sqrt(2.0 << 6617 c    2. TSUM does not include the current particle decay time
8059     FUNC_TRANS = W / W_INFIN;                 << 6618 C    3. T_LAPSE is the time until decay, taken as an output variable
8060     //                                        << 6619 C    4. GF_LOC is also taken as an output variable
8061     // Correction for the variation of the me << 6620 C    5. BET (Diss. Coeff.) and HOMEGA (Frequency at the ground state
8062     //  (see B. Jurado et al, Nucl. Phys. A74 << 6621 c       are included as input variables because they are needed for FUNC_TRANS
8063     //                                        << 6622 C-----------------------------------------------------------------------
8064     LOG_SLOPE_INF = cram(bet, HOMEGA) * bet * << 6623 C     ON INPUT:
8065     LOG_SLOPE_ABS = (XB - XACT) / SIGMA_SQR - << 6624 C       GP                 Partial particle decay width
8066     //                                        << 6625 C       GF                 Asymptotic value of Gamma-f, including Kramers factor
8067     FUNC_TRANS = FUNC_TRANS * LOG_SLOPE_ABS / << 6626 C       AF                 Mass number of nucleus
8068     //                                        << 6627 C       TAUF               Transient time
8069     return FUNC_TRANS;                        << 6628 C       TS1                Partial particle decay time for the next step
8070 }                                             << 6629 C       TSUM               Total sum of partial particle decay times, including
8071                                               << 6630 C                               the next expected one, which is in competition
8072 void G4Abla::part_fiss(G4double BET,          << 6631 C                               with fission now
8073                        G4double GP,           << 6632 C       ZF                 Z of nucleus
8074                        G4double GF,           << 6633 C       AF                 A of nucleus
8075                        G4double Y,            << 6634 C-----------------------------------------------------------------------
8076                        G4double TAUF,         << 6635 C     ON OUTPUT:
8077                        G4double TS1,          << 6636 C       CHOICE             Key for decay mode: 0 = no decay (only internal)
8078                        G4double TSUM,         << 6637 C                                              1 = evaporation
8079                        G4int* CHOICE,         << 6638 C                                              2 = fission
8080                        G4double ZF,           << 6639 C-----------------------------------------------------------------------
8081                        G4double AF,           << 6640 C     VARIABLES:
8082                        G4double FT,           << 6641 C       GP                 Partial particle decay width
8083                        G4double* T_LAPSE,     << 6642 C       GF                 Asymptotic value of Gamma-f, including Kramers factor
8084                        G4double* GF_LOC)      << 6643 C       TAUF               Transient time
8085 {                                             << 6644 C       TS1                Partial particle decay time
8086     /*                                        << 6645 C       TSUM               Total sum of partial particle decay times
8087     C     THIS SUBROUTINE IS AIMED TO CHOOSE  << 6646 C       CHOICE              Key for decay mode
8088     C     AND FISSION                         << 6647 C       ZF                 Z of nucleus
8089     C     WE USE MONTE-CARLO METHODS AND SAMP << 6648 C       AF                 A of nucleus
8090     c TO SIMULATE THE TRANSIENT TIME WITH 30  << 6649 C       FT                 Used for Fermi function in FUNC_TRANS
8091     C     FOR t>1.5*TAUF , GF=CONSTANT=ASYMPT << 6650 C       STEP_LENGTH        Step in time to sample different decays
8092     FACTOR)                                   << 6651 C       BEGIN_TIME         Total sum of partial particle decay times, excluding
8093     c---------------------------------------- << 6652 C                               the next expected one, which is in competition
8094     c    Modifications introduced by BEATRIZ  << 6653 C                               with fission now
8095     c    1. Now this subrutine is included in << 6654 C       LOC_TIME_BEGIN     Begin of time interval considered in one step
8096     c    2. TSUM does not include the current << 6655 C       LOC_TIME_END       End of time interval considered in one step
8097     C    3. T_LAPSE is the time until decay,  << 6656 C       GF_LOC             In-grow function for fission width,
8098     C    4. GF_LOC is also taken as an output << 6657 c                                 normalized to asymptotic value
8099     C    5. BET (Diss. Coeff.) and HOMEGA (Fr << 6658 C       TS2                Effective partial fission decay time in one time step
8100     c       are included as input variables b << 6659 C       HBAR               hbar
8101     C---------------------------------------- << 6660 C       T_LAPSE            Effective decay time in one time step
8102     C     ON INPUT:                           << 6661 C       REAC_PROB          Reaction probability in one time step
8103     C       GP                 Partial partic << 6662 C       X                  Help variable for random generator
8104     C       GF                 Asymptotic val << 6663 C------------------------------------------------------------------------
8105     factor C       AF                 Mass nu << 6664 */
8106     Transient time C       TS1                << 6665   G4double K1,OMEGA,HOMEGA,t_0,STEP_LENGTH,LOC_TIME_BEGIN,LOC_TIME_END=0.,BEGIN_TIME=0.,FISS_PROB,X,TS2,LAMBDA,REAC_PROB;
8107     next step C       TSUM               Tota << 6666   G4double HBAR=6.582122e-22;
8108     times, including C                        << 6667   G4int fchoice=0;
8109     is in competition C                       << 6668   G4double fGF_LOC=0.,fT_LAPSE=0.;
8110     Z of nucleus C       AF                 A << 6669 //
8111     C---------------------------------------- << 6670   if(GF<=0.0){
8112     C     ON OUTPUT:                          << 6671           *CHOICE = 1;
8113     C       CHOICE             Key for decay  << 6672           *T_LAPSE=TS1;
8114     C                                         << 6673           *GF_LOC = 0.0;
8115     C                                         << 6674       goto direct107;
8116     C---------------------------------------- << 6675   }
8117     C     VARIABLES:                          << 6676 //
8118     C       GP                 Partial partic << 6677       fomega_gs(AF,ZF,&K1,&OMEGA,&HOMEGA);
8119     C       GF                 Asymptotic val << 6678 //
8120     factor C       TAUF               Transie << 6679 // ****************************************************************
8121     decay time C       TSUM               Tot << 6680 //    Calculation of the shift in time due to the initial conditions
8122     times C       CHOICE              Key for << 6681 //
8123     C       AF                 A of nucleus   << 6682 //    Overdamped regime
8124     C       FT                 Used for Fermi << 6683       if(BET*BET>4.0*OMEGA*OMEGA){
8125     C       STEP_LENGTH        Step in time t << 6684 //         REMEMBER THAT HOMEGA IS ACTUALLY HBAR*HOMEGA1=1MeV
8126     C       BEGIN_TIME         Total sum of p << 6685 //         SO THAT HOMEGA1 = HOMEGA/HBAR
8127     excluding C                               << 6686 //     Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into
8128     competition C                             << 6687 //     account the fact that the curvature of the potential is ~16 times
8129     Begin of time interval considered in one  << 6688 //     larger than what predicted by the liquid drop model, because of
8130     of time interval considered in one step C << 6689 //     shell effects.
8131     function for fission width, c             << 6690           t_0 = BET*1.e21*HBAR*HBAR/(4.*HOMEGA*FT)/16.;
8132     asymptotic value C       TS2              << 6691        }else{
8133     time in one time step C       HBAR        << 6692 //     Underdamped regime
8134     Effective decay time in one time step C   << 6693          if(((2.*FT-HOMEGA/16.)>0.000001) && BET>0.0){
8135     probability in one time step C       X    << 6694 //     Additional factor 1/16 proposed by KHS on 14/7/2010. Takes into
8136     random generator                          << 6695 //     account the fact that the curvature of the potential is ~16 times
8137     C---------------------------------------- << 6696 //     larger than what predicted by the liquid drop model, because of
8138     */                                        << 6697 //     shell effects.
8139     G4double K1, OMEGA, HOMEGA, t_0, STEP_LEN << 6698            t_0 = (std::log(2.*FT/(2.*FT-HOMEGA/16.)))/(BET*1.e21);
8140                                               << 6699          }else{
8141     G4double HBAR = 6.582122e-22;             << 6700 //     Neglect fission transients if the time shift t_0 is too
8142     G4int fchoice = 0;                        << 6701 //     large. Suppresses large, spurious fission cross section at very
8143     G4double fGF_LOC = 0., fT_LAPSE = 0.;     << 6702 //     low excitation energy in p+Ta.
8144     //                                        << 6703 //
8145     if (GF <= 0.0)                            << 6704               fchoice = 0;
8146     {                                         << 6705               goto direct106;
8147         *CHOICE = 1;                          << 6706          }
8148         *T_LAPSE = TS1;                       << 6707        }
8149         *GF_LOC = 0.0;                        << 6708 // ********************************************************************+
8150         goto direct107;                       << 6709       fchoice = 0;
8151     }                                         << 6710       STEP_LENGTH = 1.5*TAUF/50.;
8152     //                                        << 6711 //
8153     fomega_gs(AF, ZF, &K1, &OMEGA, &HOMEGA);  << 6712 //  AT FIRST WE CACULATE THE REAL CURRENT TIME
8154     //                                        << 6713 //  TSUM includes only the time elapsed in the previous steps
8155     // ************************************** << 6714 //
8156     //    Calculation of the shift in time du << 6715       BEGIN_TIME = TSUM + t_0;
8157     //                                        << 6716 //
8158     //    Overdamped regime                   << 6717       if(BEGIN_TIME<0.0) std::cout << "CURRENT TIME < 0" << BEGIN_TIME << std::endl;
8159     if (BET * BET > 4.0 * OMEGA * OMEGA)      << 6718 //
8160     {                                         << 6719       if(BEGIN_TIME<1.50*TAUF){
8161         //         REMEMBER THAT HOMEGA IS AC << 
8162         //         SO THAT HOMEGA1 = HOMEGA/H << 
8163         //     Additional factor 1/16 propose << 
8164         //     account the fact that the curv << 
8165         //     larger than what predicted by  << 
8166         //     shell effects.                 << 
8167         t_0 = BET * 1.e21 * HBAR * HBAR / (4. << 
8168     }                                         << 
8169     else                                      << 
8170     {                                         << 
8171         //     Underdamped regime             << 
8172         if (((2. * FT - HOMEGA / 16.) > 0.000 << 
8173         {                                     << 
8174             //     Additional factor 1/16 pro << 
8175             //     account the fact that the  << 
8176             //     larger than what predicted << 
8177             //     shell effects.             << 
8178             t_0 = (std::log(2. * FT / (2. * F << 
8179         }                                     << 
8180         else                                  << 
8181         {                                     << 
8182             //     Neglect fission transients << 
8183             //     large. Suppresses large, s << 
8184             //     low excitation energy in p << 
8185             //                                << 
8186             fchoice = 0;                      << 
8187             goto direct106;                   << 
8188         }                                     << 
8189     }                                         << 
8190     // ************************************** << 
8191     fchoice = 0;                              << 
8192     STEP_LENGTH = 1.5 * TAUF / 50.;           << 
8193     //                                        << 
8194     //  AT FIRST WE CACULATE THE REAL CURRENT << 
8195     //  TSUM includes only the time elapsed i << 
8196     //                                        << 
8197     BEGIN_TIME = TSUM + t_0;                  << 
8198     //                                        << 
8199     if (BEGIN_TIME < 0.0)                     << 
8200         std::cout << "CURRENT TIME < 0" << BE << 
8201     //                                        << 
8202     if (BEGIN_TIME < 1.50 * TAUF)             << 
8203     {                                         << 
8204         LOC_TIME_BEGIN = BEGIN_TIME;             6720         LOC_TIME_BEGIN = BEGIN_TIME;
8205         //                                    << 6721 //
8206         while ((LOC_TIME_BEGIN < 1.5 * TAUF)  << 6722         while((LOC_TIME_BEGIN<1.5*TAUF)&&fchoice==0){
8207         {                                     << 
8208                                                  6723 
8209             LOC_TIME_END = LOC_TIME_BEGIN + S << 6724          LOC_TIME_END = LOC_TIME_BEGIN + STEP_LENGTH;
8210             //                                << 6725 //
8211             // NOW WE ESTIMATE THE MEAN VALUE << 6726 // NOW WE ESTIMATE THE MEAN VALUE OF THE FISSION WIDTH WITHIN THE SMALL INTERVAL
8212             // INTERVAL                       << 6727          fGF_LOC=(func_trans(LOC_TIME_BEGIN,ZF,AF,BET,Y,FT,t_0)+func_trans(LOC_TIME_END,ZF,AF,BET,Y,FT,t_0))/2.0;
8213             fGF_LOC = (func_trans(LOC_TIME_BE << 6728 //
8214                        func_trans(LOC_TIME_EN << 6729          fGF_LOC = fGF_LOC * GF;
8215                       2.0;                    << 6730 
8216             //                                << 6731 // TS2 IS THE MEAN DECAY TIME OF THE FISSION CHANNEL
8217             fGF_LOC = fGF_LOC * GF;           << 6732                  if(fGF_LOC>0.0){
8218                                               << 6733                      TS2 = HBAR/fGF_LOC;
8219             // TS2 IS THE MEAN DECAY TIME OF  << 6734                  }else{
8220             if (fGF_LOC > 0.0)                << 6735                      TS2 = 0.0;
8221             {                                 << 6736                  }
8222                 TS2 = HBAR / fGF_LOC;         << 6737 //
8223             }                                 << 6738                  if(TS2>0.0){
8224             else                              << 6739                      LAMBDA  = 1.0/TS1 + 1.0/TS2;
8225             {                                 << 6740                  }else{
8226                 TS2 = 0.0;                    << 6741                      LAMBDA = 1.0/TS1;
8227             }                                 << 6742                  }
8228             //                                << 6743 //
8229             if (TS2 > 0.0)                    << 6744 // This is the probability to survive the decay at this step
8230             {                                 << 6745                  REAC_PROB = std::exp(-1.0*STEP_LENGTH*LAMBDA);
8231                 LAMBDA = 1.0 / TS1 + 1.0 / TS << 6746 // I GENERATE A RANDOM NUMBER
8232             }                                 << 6747                  X = G4AblaRandom::flat();
8233             else                              << 6748                  if(X>REAC_PROB){
8234             {                                 << 6749 // THEN THE EVAPORATION OR FISSION HAS OCCURED
8235                 LAMBDA = 1.0 / TS1;           << 6750                         FISS_PROB = fGF_LOC / (fGF_LOC+GP);
                                                   >> 6751                         X = G4AblaRandom::flat();
                                                   >> 6752 //                       WRITE(6,*)'X=',X
                                                   >> 6753                         if(X<FISS_PROB){
                                                   >> 6754 // FISSION OCCURED
                                                   >> 6755                            fchoice = 2;
                                                   >> 6756                         }else{
                                                   >> 6757 // EVAPORATION OCCURED
                                                   >> 6758                            fchoice = 1;
                                                   >> 6759                         }
                                                   >> 6760                   }// if x
                                                   >> 6761                   LOC_TIME_BEGIN = LOC_TIME_END;
                                                   >> 6762        }// while
                                                   >> 6763 // Take the real decay time of this decay step
                                                   >> 6764       fT_LAPSE = LOC_TIME_END - BEGIN_TIME;
                                                   >> 6765       }// if BEGIN_TIME
                                                   >> 6766 //
                                                   >> 6767 // NOW, IF NOTHING HAPPENED DURING TRANSIENT TIME
                                                   >> 6768   direct106:
                                                   >> 6769     if(fchoice==0){
                                                   >> 6770             fGF_LOC=GF;
                                                   >> 6771             FISS_PROB = GF / (GF+GP);
                                                   >> 6772  
                                                   >> 6773 // Added for cases where already at the beginning BEGIN_TIME > 1.5d0*TAUF
                                                   >> 6774             if(GF>0.0){
                                                   >> 6775                  TS2 = HBAR/GF;
                                                   >> 6776             }else{
                                                   >> 6777                  TS2 = 0.0;
                                                   >> 6778             }
                                                   >> 6779 
                                                   >> 6780             if(TS2>0.0){
                                                   >> 6781                  LAMBDA  = 1./TS1 + 1./TS2;
                                                   >> 6782             }else{
                                                   >> 6783                  LAMBDA = 1./TS1;
8236             }                                    6784             }
8237             //                                << 6785 //
8238             // This is the probability to sur << 
8239             REAC_PROB = std::exp(-1.0 * STEP_ << 
8240             // I GENERATE A RANDOM NUMBER     << 
8241             X = G4AblaRandom::flat();            6786             X = G4AblaRandom::flat();
8242             if (X > REAC_PROB)                << 
8243             {                                 << 
8244                 // THEN THE EVAPORATION OR FI << 
8245                 FISS_PROB = fGF_LOC / (fGF_LO << 
8246                 X = G4AblaRandom::flat();     << 
8247                 //                       WRIT << 
8248                 if (X < FISS_PROB)            << 
8249                 {                             << 
8250                     // FISSION OCCURED        << 
8251                     fchoice = 2;              << 
8252                 }                             << 
8253                 else                          << 
8254                 {                             << 
8255                     // EVAPORATION OCCURED    << 
8256                     fchoice = 1;              << 
8257                 }                             << 
8258             } // if x                         << 
8259             LOC_TIME_BEGIN = LOC_TIME_END;    << 
8260         } // while                            << 
8261           // Take the real decay time of this << 
8262         fT_LAPSE = LOC_TIME_END - BEGIN_TIME; << 
8263     } // if BEGIN_TIME                        << 
8264       //                                      << 
8265       // NOW, IF NOTHING HAPPENED DURING TRAN << 
8266 direct106:                                    << 
8267     if (fchoice == 0)                         << 
8268     {                                         << 
8269         fGF_LOC = GF;                         << 
8270         FISS_PROB = GF / (GF + GP);           << 
8271                                               << 
8272         // Added for cases where already at t << 
8273         if (GF > 0.0)                         << 
8274         {                                     << 
8275             TS2 = HBAR / GF;                  << 
8276         }                                     << 
8277         else                                  << 
8278         {                                     << 
8279             TS2 = 0.0;                        << 
8280         }                                     << 
8281                                                  6787 
8282         if (TS2 > 0.0)                        << 6788             if(X<FISS_PROB){
8283         {                                     << 6789 // FISSION OCCURED
8284             LAMBDA = 1. / TS1 + 1. / TS2;     << 6790                   fchoice = 2;
8285         }                                     << 6791             }else{
8286         else                                  << 6792 // EVAPORATION OCCURED
8287         {                                     << 6793                   fchoice = 1;
8288             LAMBDA = 1. / TS1;                << 6794             }
8289         }                                     << 6795 //
8290         //                                    << 6796 //TIRAGE ALEATOIRE DANS UNE EXPONENTIELLLE : Y=EXP(-X/T)
8291         X = G4AblaRandom::flat();             << 6797 //       EXPOHAZ=-T*LOG(HAZ(K))
                                                   >> 6798        fT_LAPSE = fT_LAPSE -1.0/LAMBDA*std::log(G4AblaRandom::flat());
                                                   >> 6799       }
                                                   >> 6800 //
                                                   >> 6801   direct107:
8292                                                  6802 
8293         if (X < FISS_PROB)                    << 6803   (*T_LAPSE)=fT_LAPSE;
8294         {                                     << 6804   (*GF_LOC)=fGF_LOC;
8295             // FISSION OCCURED                << 6805   (*CHOICE)=fchoice;
8296             fchoice = 2;                      << 6806   return;
8297         }                                     << 
8298         else                                  << 
8299         {                                     << 
8300             // EVAPORATION OCCURED            << 
8301             fchoice = 1;                      << 
8302         }                                     << 
8303         //                                    << 
8304         // TIRAGE ALEATOIRE DANS UNE EXPONENT << 
8305         //       EXPOHAZ=-T*LOG(HAZ(K))       << 
8306         fT_LAPSE = fT_LAPSE - 1.0 / LAMBDA *  << 
8307     }                                         << 
8308     //                                        << 
8309 direct107:                                    << 
8310                                               << 
8311     (*T_LAPSE) = fT_LAPSE;                    << 
8312     (*GF_LOC) = fGF_LOC;                      << 
8313     (*CHOICE) = fchoice;                      << 
8314     return;                                   << 
8315 }                                                6807 }
8316                                                  6808 
8317 G4double G4Abla::tunnelling(G4double A,       << 6809 G4double G4Abla::tunnelling(G4double A,G4double ZPRF,G4double Y,G4double EE,G4double EF,G4double TEMP,G4double DENSG,G4double DENSF,G4double ENH_FACT)
8318                             G4double ZPRF,    << 6810 {
8319                             G4double Y,       << 6811 // Subroutine to caluclate fission width with included effects
8320                             G4double EE,      << 6812 // of tunnelling through the fission barrier
8321                             G4double EF,      << 6813 
8322                             G4double TEMP,    << 6814       G4double PI = 3.14159;
8323                             G4double DENSG,   << 6815       G4int IZ, IN;
8324                             G4double DENSF,   << 6816       G4double MFCD,OMEGA,HOMEGA1,HOMEGA2=0.,GFTUN;
8325                             G4double ENH_FACT << 6817       G4double E1,E2,EXP_FACT,CORR_FUNCT,FACT1,FACT2,FACT3;
8326 {                                             << 6818 
8327     // Subroutine to caluclate fission width  << 6819       IZ = idnint(ZPRF);
8328     // of tunnelling through the fission barr << 6820       IN = idnint(A-ZPRF);
8329                                               << 6821 
8330     G4double PI = 3.14159;                    << 6822 // For low energies system "sees" LD barrier
8331     G4int IZ, IN;                             << 6823       fomega_sp(A,Y,&MFCD,&OMEGA,&HOMEGA1);
8332     G4double MFCD, OMEGA, HOMEGA1, HOMEGA2 =  << 6824 
8333     G4double E1, E2, EXP_FACT, CORR_FUNCT, FA << 6825       if(mod(IN,2)==0&&mod(IZ,2)==0){    // e-e
8334                                               << 6826 // Due to pairing gap, even-even nuclei cannot tunnel for excitation energy lower
8335     IZ = idnint(ZPRF);                        << 6827 // than pairing gap (no levels at which system can be)
8336     IN = idnint(A - ZPRF);                    << 6828       EE = EE - 12.0/std::sqrt(A);
8337                                               << 6829       HOMEGA2 = 1.04;
8338     // For low energies system "sees" LD barr << 6830       }
8339     fomega_sp(A, Y, &MFCD, &OMEGA, &HOMEGA1); << 6831 
8340                                               << 6832       if(mod(IN,2)==1&&mod(IZ,2)==1){   // o-o
8341     if (mod(IN, 2) == 0 && mod(IZ, 2) == 0)   << 6833       HOMEGA2 = 0.65;
8342     { // e-e                                  << 6834       }
8343         // Due to pairing gap, even-even nucl << 6835 
8344         // lower than pairing gap (no levels  << 6836       if(mod(IN,2)==1&&mod(IZ,2)==0){   // o-e
8345         EE = EE - 12.0 / std::sqrt(A);        << 6837       HOMEGA2 = 0.8;
8346         HOMEGA2 = 1.04;                       << 6838       }
8347     }                                         << 6839 
8348                                               << 6840       if(mod(IN,2)==0&&mod(IZ,2)==1){   // e-0
8349     if (mod(IN, 2) == 1 && mod(IZ, 2) == 1)   << 6841       HOMEGA2 = 0.8;
8350     { // o-o                                  << 6842       }
8351         HOMEGA2 = 0.65;                       << 6843 
8352     }                                         << 6844       E1 = EF + HOMEGA1/2.0/PI*std::log(HOMEGA1*(2.0*PI+HOMEGA2)/4.0/PI/PI);
8353                                               << 6845 
8354     if (mod(IN, 2) == 1 && mod(IZ, 2) == 0)   << 6846       E2 = EF + HOMEGA2/(2.0*PI)*std::log(1.0+2.0*PI/HOMEGA2);
8355     { // o-e                                  << 6847 
8356         HOMEGA2 = 0.8;                        << 6848 // AKH May 2013 - Due to approximations in the analytical integration, at energies
8357     }                                         << 6849 // just above barrier Pf was to low, at energies below
8358                                               << 6850 // barrier it was somewhat higher. LInes below are supposed to correct for this.
8359     if (mod(IN, 2) == 0 && mod(IZ, 2) == 1)   << 6851 // Factor 0.20 in EXP_FACT comes from the slope of the Pf(Eexc) (Gavron's data)
8360     { // e-0                                  << 6852 // around fission barrier.
8361         HOMEGA2 = 0.8;                        << 6853       EXP_FACT = (EE-EF)/(HOMEGA2/(2.0*PI));
8362     }                                         << 6854       if(EXP_FACT>700.0) EXP_FACT = 700.0;
8363                                               << 6855       CORR_FUNCT = HOMEGA1 * (1.0-1.0/(1.0+std::exp(EXP_FACT)));
8364     E1 = EF + HOMEGA1 / 2.0 / PI * std::log(H << 6856       if(mod(IN,2)==0&&mod(IZ,2)==0){
8365                                               << 6857       CORR_FUNCT = HOMEGA1 * (1.0-1.0/(1.0+std::exp(EXP_FACT)));
8366     E2 = EF + HOMEGA2 / (2.0 * PI) * std::log << 6858       }
8367                                               << 6859 
8368     // AKH May 2013 - Due to approximations i << 6860       FACT1 = HOMEGA1/(2.0*PI*TEMP+HOMEGA1);
8369     // energies just above barrier Pf was to  << 6861       FACT2 = (2.0*PI/(2.0*PI+HOMEGA2)-HOMEGA1*(2.0*PI+HOMEGA2)/4.0/PI/PI)/(E2-E1);
8370     // somewhat higher. LInes below are suppo << 6862       FACT3 = HOMEGA2/(2.0*PI*TEMP-HOMEGA2);
8371     // in EXP_FACT comes from the slope of th << 6863 
8372     // fission barrier.                       << 6864       if(EE<E1){
8373     EXP_FACT = (EE - EF) / (HOMEGA2 / (2.0 *  << 6865       GFTUN = FACT1*(std::exp(EE/TEMP)*std::exp(2.0*PI*(EE-EF)/HOMEGA1)-std::exp(-2.0*PI*EF/HOMEGA1));
8374     if (EXP_FACT > 700.0)                     << 6866       }else{
8375         EXP_FACT = 700.0;                     << 6867         if(EE>=E1&&EE<E2){
8376     CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / (1.0  << 6868          GFTUN = std::exp(EE/TEMP)*(0.50+FACT2*(EE-EF-TEMP))-std::exp(E1/TEMP)*(0.5+FACT2*(E1-EF-TEMP))+FACT1*(std::exp(E1/TEMP)*std::exp(2.0*PI*(E1-EF)/HOMEGA1)-std::exp(-2.0*PI*EF/HOMEGA1));
8377     if (mod(IN, 2) == 0 && mod(IZ, 2) == 0)   << 6869         }else{
8378     {                                         << 6870          GFTUN = std::exp(EE/TEMP)*(1.0+FACT3*std::exp(-2.0*PI*(EE-EF)/HOMEGA2))-std::exp(E2/TEMP)*(1.0+FACT3*std::exp(-2.0*PI*(E2-EF)/HOMEGA2))+std::exp(E2/TEMP)*(0.5+FACT2*(E2-EF-TEMP))-std::exp(E1/TEMP)*(0.5+FACT2*(E1-EF-TEMP))+FACT1*(std::exp(E1/TEMP)*std::exp(2.0*PI*(E1-EF)/HOMEGA1)-std::exp(-2.0*PI*EF/HOMEGA1));
8379         CORR_FUNCT = HOMEGA1 * (1.0 - 1.0 / ( << 
8380     }                                         << 
8381                                               << 
8382     FACT1 = HOMEGA1 / (2.0 * PI * TEMP + HOME << 
8383     FACT2 = (2.0 * PI / (2.0 * PI + HOMEGA2)  << 
8384     FACT3 = HOMEGA2 / (2.0 * PI * TEMP - HOME << 
8385                                               << 
8386     if (EE < E1)                              << 
8387     {                                         << 
8388         GFTUN = FACT1 *                       << 
8389                 (std::exp(EE / TEMP) * std::e << 
8390     }                                         << 
8391     else                                      << 
8392     {                                         << 
8393         if (EE >= E1 && EE < E2)              << 
8394         {                                     << 
8395             GFTUN = std::exp(EE / TEMP) * (0. << 
8396                     std::exp(E1 / TEMP) * (0. << 
8397                     FACT1 * (std::exp(E1 / TE << 
8398                              std::exp(-2.0 *  << 
8399         }                                        6871         }
8400         else                                  << 6872       }
8401         {                                     << 6873       GFTUN = GFTUN/std::exp(EE/TEMP)*DENSF*ENH_FACT/DENSG/2.0/PI;
8402             GFTUN = std::exp(EE / TEMP) * (1. << 6874       GFTUN = GFTUN * CORR_FUNCT;
8403                     std::exp(E2 / TEMP) * (1. << 6875  return GFTUN;
8404                     std::exp(E2 / TEMP) * (0. << 6876 }
8405                     std::exp(E1 / TEMP) * (0. << 6877 
8406                     FACT1 * (std::exp(E1 / TE << 6878 
8407                              std::exp(-2.0 *  << 6879 void G4Abla::fission_width(G4double ZPRF,G4double A,G4double EE,G4double BS,G4double BK,G4double EF,G4double Y,G4double *GF,G4double *TEMP,G4double JPR,G4int IEROT,G4int FF_ALLOWED,G4int OPTCOL,G4int OPTSHP,G4double DENSG)
8408         }                                     << 6880 {
8409     }                                         << 6881 //
8410     GFTUN = GFTUN / std::exp(EE / TEMP) * DEN << 6882  G4double FNORM,MASS_ASYM_SADD_B,FP_PER,FP_PAR,SIG_PER_SP,SIG_PAR_SP;
8411     GFTUN = GFTUN * CORR_FUNCT;               << 6883  G4double Z2OVERA,ftemp,fgf,DENSF,ECOR,EROT,qr;
8412     return GFTUN;                             << 6884  G4double DCR,UCR,ENH_FACTA,ENH_FACTB,ENH_FACT,PONFE;
8413 }                                             << 6885  G4double PI = 3.14159;
8414                                               << 6886 
8415 void G4Abla::fission_width(G4double ZPRF,     << 6887       DCR = fiss->dcr;
8416                            G4double A,        << 6888       UCR = fiss->ucr;
8417                            G4double EE,       << 6889       Z2OVERA = ZPRF * ZPRF / A;
8418                            G4double BS,       << 6890 
8419                            G4double BK,       << 6891 // Nuclei below Businaro-Gallone point do not go through fission
8420                            G4double EF,       << 6892       if((ZPRF<=55.0) || (FF_ALLOWED==0)){
8421                            G4double Y,        << 
8422                            G4double* GF,      << 
8423                            G4double* TEMP,    << 
8424                            G4double JPR,      << 
8425                            G4int IEROT,       << 
8426                            G4int FF_ALLOWED,  << 
8427                            G4int OPTCOL,      << 
8428                            G4int OPTSHP,      << 
8429                            G4double DENSG)    << 
8430 {                                             << 
8431     //                                        << 
8432     G4double FNORM, MASS_ASYM_SADD_B, FP_PER, << 
8433     G4double Z2OVERA, ftemp, fgf, DENSF, ECOR << 
8434     G4double DCR, UCR, ENH_FACTA, ENH_FACTB,  << 
8435     G4double PI = 3.14159;                    << 
8436                                               << 
8437     DCR = fiss->dcr;                          << 
8438     UCR = fiss->ucr;                          << 
8439     Z2OVERA = ZPRF * ZPRF / A;                << 
8440                                               << 
8441     // Nuclei below Businaro-Gallone point do << 
8442     if ((ZPRF <= 55.0) || (FF_ALLOWED == 0))  << 
8443     {                                         << 
8444         (*GF) = 0.0;                             6893         (*GF) = 0.0;
8445         (*TEMP) = 0.5;                           6894         (*TEMP) = 0.5;
8446         return;                                  6895         return;
8447     }                                         << 6896       }
8448                                                  6897 
8449     // Level density above SP                 << 6898 // Level density above SP
8450     // Saddle-point deformation is defbet as  << 6899 // Saddle-point deformation is defbet as above. But, FP_PER and FP_PAR
8451     // are calculated for fission in DENSNIV  << 6900 // are calculated for fission in DENSNIV acc to Myers and Hasse, and their
8452     // parametrization is done as function of << 6901 // parametrization is done as function of y
8453     densniv(A, ZPRF, EE, EF, &DENSF, 0.0, BS, << 6902       densniv(A,ZPRF,EE,EF,&DENSF,0.0,BS,BK,&ftemp,OPTSHP,0,Y,&ECOR,JPR,1,&qr);
8454                                               << 6903 
8455     if (OPTCOL == 0)                          << 6904       if(OPTCOL==0){
8456     {                                         << 6905          fgf= DENSF/DENSG/PI/2.0*ftemp;
8457         fgf = DENSF / DENSG / PI / 2.0 * ftem << 6906          (*TEMP)=ftemp;
8458         (*TEMP) = ftemp;                      << 6907          (*GF)= fgf;
8459         (*GF) = fgf;                          << 6908          return;
8460         return;                               << 6909       }
8461     }                                         << 
8462                                                  6910 
8463     // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * << 6911 // FP = 2/5*M0*R0**2/HBAR**2 * A**(5/3) * (1 + DEFBET/3)
8464     // FP is used to calculate the spin-cutof << 6912 // FP is used to calculate the spin-cutoff parameter SIG=FP*TEMP/hbar**2; hbar**2
8465     // hbar**2 is, therefore, included in FP  << 6913 // is, therefore, included in FP in order to avoid problems with large exponents
8466     // exponents The factor fnorm inlcudes th << 6914 // The factor fnorm inlcudes then R0, M0 and hbar**2 -
8467     // R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 / << 6915 // fnorm = R0*M0/hbar**2 = 1.2fm*931.49MeV/c**2 /(6.582122e-22 MeVs)**2 and is
8468     // units 1/MeV                            << 6916 // in units 1/MeV
8469     FNORM = 1.2 * 1.2 * 931.49 * 1.e-2 / (9.0 << 6917       FNORM = 1.2*1.2 * 931.49 * 1.e-2 / (9.0 * 6.582122*6.582122);
8470     // FP_PER ~ 1+7*y/6, FP_PAR ~ 1-7*y/3 (Ha << 6918 // FP_PER ~ 1+7*y/6, FP_PAR ~ 1-7*y/3 (Hasse & Myers, Geom. relat. macr. nucl. phys.)
8471     // phys.) Perpendicular moment of inertia << 6919 // Perpendicular moment of inertia
8472     FP_PER = 2.0 / 5.0 * std::pow(A, 5.0 / 3. << 6920       FP_PER = 2.0/5.0*std::pow(A,5.0/3.0)*FNORM*(1. + 7.0/6.0*Y*(1.0+1396.0/255.*Y));
8473                                               << 6921 
8474     // AK - Jan 2011 - following line is need << 6922 // AK - Jan 2011 - following line is needed, as for these nuclei it seems that
8475     // FP_PER calculated according to above f << 6923 // FP_PER calculated according to above formula has too large values, leading to too
8476     // to too large ENH_FACT                  << 6924 // large ENH_FACT
8477     if (Z2OVERA <= 30.0)                      << 6925       if(Z2OVERA<=30.0) FP_PER = 6.50;
8478         FP_PER = 6.50;                        << 6926 
8479                                               << 6927 // Parallel moment of inertia
8480     // Parallel moment of inertia             << 6928       FP_PAR = 2.0/5.0*std::pow(A,5.0/3.0)*FNORM*(1.0 - 7.0/3.0*Y*(1.0-389.0/255.0*Y));
8481     FP_PAR = 2.0 / 5.0 * std::pow(A, 5.0 / 3. << 6929       if(FP_PAR<0.0) FP_PAR = 0.0;
8482     if (FP_PAR < 0.0)                         << 6930 
8483         FP_PAR = 0.0;                         << 6931       EROT = JPR * JPR / (2.0 * std::sqrt(FP_PAR*FP_PAR + FP_PER*FP_PER));
8484                                               << 6932       if(IEROT==1) EROT = 0.0;
8485     EROT = JPR * JPR / (2.0 * std::sqrt(FP_PA << 6933 
8486     if (IEROT == 1)                           << 6934 // Perpendicular spin cut-off parameter
8487         EROT = 0.0;                           << 6935       SIG_PER_SP = std::sqrt(FP_PER * ftemp);
8488                                               << 6936 
8489     // Perpendicular spin cut-off parameter   << 6937       if(SIG_PER_SP<1.0) SIG_PER_SP = 1.0;
8490     SIG_PER_SP = std::sqrt(FP_PER * ftemp);   << 6938 
8491                                               << 6939 // Parallel spin cut-off parameter
8492     if (SIG_PER_SP < 1.0)                     << 6940       SIG_PAR_SP = std::sqrt(FP_PAR * ftemp);
8493         SIG_PER_SP = 1.0;                     << 6941       ENH_FACT = 1.0;
8494                                               << 6942 //
8495     // Parallel spin cut-off parameter        << 6943         if(A>223.0){
8496     SIG_PAR_SP = std::sqrt(FP_PAR * ftemp);   << 6944          MASS_ASYM_SADD_B = 2.0;
8497     ENH_FACT = 1.0;                           << 6945         }else{
8498     //                                        << 6946          MASS_ASYM_SADD_B = 1.0;
8499     if (A > 223.0)                            << 
8500     {                                         << 
8501         MASS_ASYM_SADD_B = 2.0;               << 
8502     }                                         << 
8503     else                                      << 
8504     {                                         << 
8505         MASS_ASYM_SADD_B = 1.0;               << 
8506     }                                         << 
8507                                               << 
8508     // actinides with low barriers            << 
8509     if (Z2OVERA > 35. && Z2OVERA <= (110. * 1 << 
8510     {                                         << 
8511         // Barrier A is axial asymmetric      << 
8512         ENH_FACTA = std::sqrt(8.0 * PI) * SIG << 
8513         // Barrier B is axial symmetric       << 
8514         ENH_FACTB = MASS_ASYM_SADD_B * SIG_PE << 
8515         // Total enhancement                  << 
8516         ENH_FACT = ENH_FACTA * ENH_FACTB / (E << 
8517     }                                         << 
8518     else                                      << 
8519     {                                         << 
8520         // nuclei with high fission barriers  << 
8521         // symmetric)                         << 
8522         if (Z2OVERA <= 35.)                   << 
8523         {                                     << 
8524             ENH_FACT = MASS_ASYM_SADD_B * SIG << 
8525         }                                        6947         }
8526         else                                  << 6948 
8527         {                                     << 6949 // actinides with low barriers
8528             // super-heavy nuclei  (only barr << 6950       if(Z2OVERA>35.&&Z2OVERA<=(110.*110./298.0)){
8529             ENH_FACT = std::sqrt(8.0 * PI) *  << 6951 // Barrier A is axial asymmetric
                                                   >> 6952        ENH_FACTA = std::sqrt(8.0*PI) * SIG_PER_SP*SIG_PER_SP * SIG_PAR_SP;
                                                   >> 6953 // Barrier B is axial symmetric
                                                   >> 6954       ENH_FACTB = MASS_ASYM_SADD_B * SIG_PER_SP*SIG_PER_SP;
                                                   >> 6955 // Total enhancement
                                                   >> 6956       ENH_FACT = ENH_FACTA * ENH_FACTB / (ENH_FACTA + ENH_FACTB);
                                                   >> 6957       }else{
                                                   >> 6958 // nuclei with high fission barriers (only barrier B plays a role, axial symmetric)
                                                   >> 6959         if(Z2OVERA<=35.){
                                                   >> 6960           ENH_FACT = MASS_ASYM_SADD_B*SIG_PER_SP*SIG_PER_SP;
                                                   >> 6961          }else{
                                                   >> 6962 // super-heavy nuclei  (only barrier A plays a role, axial asymmetric)
                                                   >> 6963           ENH_FACT =  std::sqrt(8.0*PI) * SIG_PER_SP*SIG_PER_SP* SIG_PAR_SP;
8530         }                                        6964         }
8531     }                                         << 6965       }
8532                                                  6966 
8533     // Fading-out with excitation energy abov << 6967 // Fading-out with excitation energy above the saddle point:
8534     PONFE = (ECOR - UCR - EROT) / DCR;        << 6968       PONFE = (ECOR-UCR-EROT)/DCR;
8535     if (PONFE > 700.)                         << 6969       if(PONFE>700.) PONFE = 700.0;
8536         PONFE = 700.0;                        << 6970 // Fading-out according to Junghans:
8537     // Fading-out according to Junghans:      << 6971       ENH_FACT = 1.0/(1.0+std::exp(PONFE))*ENH_FACT+1.0;
8538     ENH_FACT = 1.0 / (1.0 + std::exp(PONFE))  << 6972 
8539                                               << 6973       if(ENH_FACT<1.0)ENH_FACT = 1.0;
8540     if (ENH_FACT < 1.0)                       << 6974       fgf= DENSF/DENSG/PI/2.0*ftemp*ENH_FACT;
8541         ENH_FACT = 1.0;                       << 6975 
8542     fgf = DENSF / DENSG / PI / 2.0 * ftemp *  << 6976 // Tunneling
8543                                               << 6977       if(EE<EF+1.){
8544     // Tunneling                              << 6978       fgf=tunnelling(A,ZPRF,Y,EE,EF,ftemp,DENSG,DENSF,ENH_FACT);
8545     if (EE < EF)                              << 6979       }
8546     {                                         << 6980 //
8547         fgf = tunnelling(A, ZPRF, Y, EE, EF,  << 6981       (*GF)= fgf;
8548     }                                         << 6982       (*TEMP)=ftemp;
8549     //                                        << 6983  return;
8550     (*GF) = fgf;                              << 
8551     (*TEMP) = ftemp;                          << 
8552     return;                                   << 
8553 }                                                6984 }
8554                                                  6985 
8555 void G4Abla::lorb(G4double AMOTHER,           << 
8556                   G4double ADAUGHTER,         << 
8557                   G4double LMOTHER,           << 
8558                   G4double EEFINAL,           << 
8559                   G4double* LORBITAL,         << 
8560                   G4double* SIGMA_LORBITAL)   << 
8561 {                                             << 
8562                                               << 
8563     G4double AFRAGMENT, S4FINAL, ALEVDENS;    << 
8564     G4double THETA_MOTHER, THETA_ORBITAL;     << 
8565                                               << 
8566     /*                                        << 
8567     C     Values on input:                    << 
8568     C       AMOTHER          mass of mother n << 
8569     C       ADAUGHTER        mass of daughter << 
8570     C       LMOTHER          angular momentum << 
8571     C       EEFINAL          excitation energ << 
8572     C                          (sum of daught << 
8573     C                                         << 
8574     C     Values on output:                   << 
8575     C       LORBITAL         mean value of or << 
8576     C                           (assumed to b << 
8577     C       SIGMA_LORBITAL   standard deviati << 
8578     */                                        << 
8579     if (EEFINAL <= 0.01)                      << 
8580         EEFINAL = 0.01;                       << 
8581     AFRAGMENT = AMOTHER - ADAUGHTER;          << 
8582     ALEVDENS = 0.073 * AMOTHER + 0.095 * std: << 
8583     S4FINAL = ALEVDENS * EEFINAL;             << 
8584     if (S4FINAL <= 0.0 || S4FINAL > 100000.)  << 
8585     {                                         << 
8586         std::cout << "S4FINAL:" << S4FINAL << << 
8587     }                                         << 
8588     THETA_MOTHER = 0.0111 * std::pow(AMOTHER, << 
8589     THETA_ORBITAL = 0.0323 / std::pow(AMOTHER << 
8590                     std::pow(std::pow(AFRAGME << 
8591                     (AFRAGMENT + ADAUGHTER);  << 
8592                                                  6986 
8593     *LORBITAL = -1. * THETA_ORBITAL * (LMOTHE << 6987 void G4Abla::lorb(G4double AMOTHER,G4double ADAUGHTER,G4double LMOTHER,G4double EEFINAL,G4double *LORBITAL,G4double *SIGMA_LORBITAL)
                                                   >> 6988 {
                                                   >> 6989 
                                                   >> 6990     G4double AFRAGMENT,S4FINAL,ALEVDENS;
                                                   >> 6991     G4double THETA_MOTHER,THETA_ORBITAL;
                                                   >> 6992 
                                                   >> 6993 /*
                                                   >> 6994 C     Values on input:
                                                   >> 6995 C       AMOTHER          mass of mother nucleus
                                                   >> 6996 C       ADAUGHTER        mass of daughter fragment
                                                   >> 6997 C       LMOTHER          angular momentum of mother (may be real)
                                                   >> 6998 C       EEFINAL          excitation energy after emission
                                                   >> 6999 C                          (sum of daughter and fragment)
                                                   >> 7000 C
                                                   >> 7001 C     Values on output:
                                                   >> 7002 C       LORBITAL         mean value of orbital angular momentum
                                                   >> 7003 C                           (assumed to be fully aligned with LMOTHER)
                                                   >> 7004 C       SIGMA_LORBITAL   standard deviation of the orbital angular momentum
                                                   >> 7005 */
                                                   >> 7006     if (EEFINAL<=0.01) EEFINAL = 0.01;
                                                   >> 7007         AFRAGMENT = AMOTHER - ADAUGHTER;
                                                   >> 7008         ALEVDENS = 0.073*AMOTHER + 0.095*std::pow(AMOTHER,2.0/3.0);
                                                   >> 7009         S4FINAL = ALEVDENS * EEFINAL;
                                                   >> 7010         if(S4FINAL <= 0.0 || S4FINAL > 100000.){
                                                   >> 7011             std::cout<< "S4FINAL:" << S4FINAL << ALEVDENS << EEFINAL  << idnint(AMOTHER) << idnint(AFRAGMENT) << std::endl;
                                                   >> 7012         }
                                                   >> 7013         THETA_MOTHER = 0.0111 * std::pow(AMOTHER,1.66667);
                                                   >> 7014         THETA_ORBITAL = 0.0323 / std::pow(AMOTHER,2.) *std::pow(std::pow(AFRAGMENT,0.33333) + std::pow(ADAUGHTER,0.33333),2.) * AFRAGMENT*ADAUGHTER*(AFRAGMENT+ADAUGHTER);
8594                                                  7015 
8595     *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4F << 7016         *LORBITAL = -1.* THETA_ORBITAL * (LMOTHER / THETA_MOTHER + std::sqrt(S4FINAL) /(ALEVDENS*LMOTHER));
8596                                                  7017 
8597     return;                                   << 7018         *SIGMA_LORBITAL = std::sqrt(std::sqrt(S4FINAL) * THETA_ORBITAL / ALEVDENS);
                                                   >> 7019 
                                                   >> 7020  return;
8598 }                                                7021 }
8599                                                  7022 
8600 // Random generator according to a distributi    7023 // Random generator according to a distribution similar to a
8601 // Maxwell distribution with quantum-mech. x- << 7024 // Maxwell distribution with quantum-mech. x-section for neutrons according to KHS
8602 // KHS                                        << 
8603 //      Y = SQRT(X) * EXP(-X/T) (approximatio    7025 //      Y = SQRT(X) * EXP(-X/T) (approximation:)
8604 G4double G4Abla::fvmaxhaz_neut(G4double x)    << 7026 G4double G4Abla::fvmaxhaz_neut(G4double x){
8605 {                                             << 
8606                                                  7027 
8607     return (2.0 * x * std::sqrt(std::log(G4Ab << 7028  return (2.0 * x * std::sqrt(std::log(G4AblaRandom::flat()) * std::log(G4AblaRandom::flat())));
8608 }                                                7029 }
8609                                                  7030 
8610 void G4Abla::imf(G4double ACN,                << 7031 void G4Abla::imf(G4double ACN,G4double ZCN,G4double TEMP,G4double EE,G4double *ZIMF,G4double *AIMF,G4double *BIMF,G4double *SBIMF,G4double *TIMF,G4double JPRF)
8611                  G4double ZCN,                << 7032 {
8612                  G4double TEMP,               << 7033 //     input variables (compound nucleus) Acn, Zcn, Temp, EE
8613                  G4double EE,                 << 7034 //     output variable (IMF) Zimf,Aimf,Bimf,Sbimf,IRNDM
8614                  G4double* ZIMF,              << 7035 //
8615                  G4double* AIMF,              << 7036 //     SBIMF = separation energy + coulomb barrier
8616                  G4double* BIMF,              << 7037 //
8617                  G4double* SBIMF,             << 7038 //     SDW(Z) is the sum over all isotopes for a given Z of the decay widths
8618                  G4double* TIMF,              << 7039 //     DW(Z,A) is the decay width of a certain nuclide
8619                  G4double JPRF)               << 7040 //
8620 {                                             << 7041 //  Last update:
8621     //     input variables (compound nucleus) << 7042 //             28/10/13 - JLRS - from abrablav4 (AK)
8622     //     output variable (IMF) Zimf,Aimf,Bi << 7043 //             13/11/16 - JLRS - Included this function in Abla++
8623     //                                        << 7044 
8624     //     SBIMF = separation energy + coulom << 7045    G4int IZIMFMAX=0;
8625     //                                        << 7046    G4int iz=0,in=0,IZIMF=0,INMI=0,INMA=0,IZCN=0,INCN=0,INIMFMI=0,INIMFMA=0,ILIMMAX=0,INNMAX=0,INMIN=0,IAIMF=0,IZSTOP=3,IZMEM=0,IA=0,INMINMEM=0,INMAXMEM=0,IIA=0;
8626     //     SDW(Z) is the sum over all isotope << 7047    G4double BS=0,BK=0,BC=0,BSHELL=0,DEFBET=0,DEFBETIMF=0,EROT=0,MAIMF=0,MAZ=0,MARES=0,AIMF_1,OMEGAP=0,fBIMF=0.0,BSIMF=0,A1PAR=0,A2PAR=0,SUM_A,EEDAUG;
8627     //     DW(Z,A) is the decay width of a ce << 7048    G4double DENSCN=0,TEMPCN=0,ECOR=0,IINERT=0,EROTCN=0,WIDTH_IMF=0.0,WIDTH1=0,IMFARG=0,QR=0,QRCN=0,DENSIMF=0,fTIMF=0,fZIMF=0,fAIMF=0.0,NIMF=0,fSBIMF=0;
8628     //                                        << 7049    G4double PI = 3.141592653589793238;
8629     //  Last update:                          << 7050    G4double ZIMF_1=0.0;
8630     //             28/10/13 - JLRS - from abr << 7051    G4double SDWprevious=0,SUMDW_TOT=0,SUM_Z=0,X=0,SUMDW_N_TOT=0,XX=0;
8631     //             13/11/16 - JLRS - Included << 7052    G4double SDW[98];
8632                                               << 7053    G4double DW[98][251];
8633     G4int IZIMFMAX = 0;                       << 7054    G4double BBIMF[98][251];
8634     G4int iz = 0, in = 0, IZIMF = 0, INMI = 0 << 7055    G4double SSBIMF[98][251];
8635           INNMAX = 0, INMIN = 0, IAIMF = 0, I << 7056    G4int OPTSHPIMF=opt->optshpimf;
8636     G4double BS = 0, BK = 0, BC = 0, BSHELL = << 7057      
8637              AIMF_1, OMEGAP = 0, fBIMF = 0.0, << 7058    // Initialization
8638     G4double DENSCN = 0, TEMPCN = 0, ECOR = 0 << 7059    for (G4int ia = 0; ia < 98; ia++)
8639              QRCN = 0, DENSIMF = 0, fTIMF = 0 << 7060     for (G4int ib = 0; ib < 251; ib++) {
8640     G4double PI = 3.141592653589793238;       << 7061       BBIMF[ia][ib] = 0.0;
8641     G4double ZIMF_1 = 0.0;                    << 7062       SSBIMF[ia][ib] = 0.0;
8642     G4double SDWprevious = 0, SUMDW_TOT = 0,  << 7063     }
8643     G4double SDW[98];                         << 7064 
8644     G4double DW[98][251];                     << 7065    // take the half of the CN and transform it in integer (floor it)
8645     G4double BBIMF[98][251];                  << 7066    IZIMFMAX = idnint(ZCN / 2.0);
8646     G4double SSBIMF[98][251];                 << 7067 
8647     G4int OPTSHPIMF = opt->optshpimf;         << 7068    if(IZIMFMAX<3){
8648                                               << 7069          std::cout << "CHARGE_IMF line 46" << std::endl;
8649     // Initialization                         << 7070          std::cout << "Problem: IZIMFMAX < 3 " << std::endl;
8650     for (G4int ia = 0; ia < 98; ia++)         << 7071          std::cout << "ZCN,IZIMFMAX," << ZCN << "," << IZIMFMAX << std::endl;
8651         for (G4int ib = 0; ib < 251; ib++)    << 7072    }
8652         {                                     << 7073 
8653             BBIMF[ia][ib] = 0.0;              << 7074   iz = idnint(ZCN);
8654             SSBIMF[ia][ib] = 0.0;             << 7075   in = idnint(ACN) - iz;
8655         }                                     << 7076   BSHELL = ecld->ecgnz[in][iz]- ecld->vgsld[in][iz];
8656                                               << 7077   DEFBET = ecld->beta2[in][iz];
8657     // take the half of the CN and transform  << 
8658     IZIMFMAX = idnint(ZCN / 2.0);             << 
8659                                               << 
8660     if (IZIMFMAX < 3)                         << 
8661     {                                         << 
8662         std::cout << "CHARGE_IMF line 46" <<  << 
8663         std::cout << "Problem: IZIMFMAX < 3 " << 
8664         std::cout << "ZCN,IZIMFMAX," << ZCN < << 
8665     }                                         << 
8666                                               << 
8667     iz = idnint(ZCN);                         << 
8668     in = idnint(ACN) - iz;                    << 
8669     BSHELL = ecld->ecgnz[in][iz] - ecld->vgsl << 
8670     DEFBET = ecld->beta2[in][iz];             << 
8671                                               << 
8672     bsbkbc(ACN, ZCN, &BS, &BK, &BC);          << 
8673                                               << 
8674     densniv(ACN, ZCN, EE, 0.0, &DENSCN, BSHEL << 
8675                                               << 
8676     IINERT = 0.4 * 931.49 * 1.16 * 1.16 * std << 
8677     EROTCN = JPRF * JPRF * 197.328 * 197.328  << 
8678     //                                        << 
8679     for (IZIMF = 3; IZIMF <= IZIMFMAX; IZIMF+ << 
8680     {                                         << 
8681                                               << 
8682         SDW[IZIMF] = 0.0;                     << 
8683         ZIMF_1 = 1.0 * IZIMF;                 << 
8684                                               << 
8685         //     *** Find the limits that both  << 
8686                                               << 
8687         isostab_lim(IZIMF, &INIMFMI,          << 
8688                     &INIMFMA); // Bound isoto << 
8689         // Idea - very proton-rich nuclei can << 
8690         // before decaying:                   << 
8691         INIMFMI = max(1, INIMFMI - 2);        << 
8692                                               << 
8693         IZCN = idnint(ZCN);        //  Z of C << 
8694         INCN = idnint(ACN) - IZCN; //  N of C << 
8695                                               << 
8696         isostab_lim(IZCN - IZIMF,             << 
8697                     &INMI,                    << 
8698                     &INMA); // Daughter nucle << 
8699                             // limits of boun << 
8700         INMI = max(1, INMI - 2);              << 
8701         INMIN = max(INIMFMI, INCN - INMA);  / << 
8702         INNMAX = min(INIMFMA, INCN - INMI); / << 
8703                                               << 
8704         ILIMMAX = max(INNMAX, INMIN); // In o << 
8705                                       //      << 
8706                                               << 
8707         for (G4int INIMF = INMIN; INIMF <= IL << 
8708         { // Range of possible IMF isotopes   << 
8709             IAIMF = IZIMF + INIMF;            << 
8710             DW[IZIMF][IAIMF] = 0.0;           << 
8711             AIMF_1 = 1.0 * (IAIMF);           << 
8712                                               << 
8713             //         Q-values               << 
8714             mglms(ACN - AIMF_1, ZCN - ZIMF_1, << 
8715             mglms(AIMF_1, ZIMF_1, OPTSHPIMF,  << 
8716             mglms(ACN, ZCN, OPTSHPIMF, &MAZ); << 
8717                                               << 
8718             //         Barrier                << 
8719             if (ACN <= AIMF_1)                << 
8720             {                                 << 
8721                 SSBIMF[IZIMF][IAIMF] = 1.e37; << 
8722             }                                 << 
8723             else                              << 
8724             {                                 << 
8725                 barrs(idnint(ZCN - ZIMF_1), i << 
8726                 SSBIMF[IZIMF][IAIMF] = MAIMF  << 
8727                 BBIMF[IZIMF][IAIMF] = fBIMF;  << 
8728             }                                 << 
8729                                               << 
8730             // *****  Width ***************** << 
8731             DEFBETIMF = ecld->beta2[idnint(AI << 
8732                         ecld->beta2[idnint(AC << 
8733                                               << 
8734             IINERT = 0.40 * 931.490 * 1.160 * << 
8735                          (std::pow(AIMF_1, 5. << 
8736                      931.490 * 1.160 * 1.160  << 
8737                          (std::pow(AIMF_1, 1. << 
8738                          (std::pow(AIMF_1, 1. << 
8739                                               << 
8740             EROT = JPRF * JPRF * 197.328 * 19 << 
8741                                               << 
8742             //      IF(IEROT.EQ.1) EROT = 0.D << 
8743             if (EE < (SSBIMF[IZIMF][IAIMF] +  << 
8744             {                                 << 
8745                 WIDTH_IMF = 0.0;              << 
8746                 //          PRINT*,IDNINT(ACN << 
8747             }                                 << 
8748             else                              << 
8749             {                                 << 
8750                 //          here the temperat << 
8751                 // Increase of the level dens << 
8752                 // comment in ABLA            << 
8753                 //          BSIMF = ((ACN-AIM << 
8754                 //     &                ACN** << 
8755                 BSIMF = BS;                   << 
8756                 densniv(ACN,                  << 
8757                         ZCN,                  << 
8758                         EE,                   << 
8759                         SSBIMF[IZIMF][IAIMF], << 
8760                         &DENSIMF,             << 
8761                         0.0,                  << 
8762                         BSIMF,                << 
8763                         1.0,                  << 
8764                         &fTIMF,               << 
8765                         0,                    << 
8766                         0,                    << 
8767                         DEFBETIMF,            << 
8768                         &ECOR,                << 
8769                         JPRF,                 << 
8770                         2,                    << 
8771                         &QR);                 << 
8772                 IMFARG = (SSBIMF[IZIMF][IAIMF << 
8773                 if (IMFARG > 200.0)           << 
8774                     IMFARG = 200.0;           << 
8775                                               << 
8776                 WIDTH1 = width(ACN, ZCN, AIMF << 
8777                                               << 
8778                 WIDTH_IMF = WIDTH1 * std::exp << 
8779                                               << 
8780                 if (WIDTH_IMF <= 0.0)         << 
8781                 {                             << 
8782                     std::cout << "GAMMA_IMF=0 << 
8783                     std::cout << "ACN,ZCN,AIM << 
8784                               << "," << idnin << 
8785                     std::cout << "SSBIMF,TIMF << 
8786                     std::cout << "DEXP(-IMFAR << 
8787                     std::cout << "WIDTH1 =" < << 
8788                 }                             << 
8789             } // if ee                        << 
8790                                               << 
8791             SDW[IZIMF] = SDW[IZIMF] + WIDTH_I << 
8792                                                  7078 
8793             DW[IZIMF][IAIMF] = WIDTH_IMF;     << 7079   bsbkbc(ACN,ZCN,&BS,&BK,&BC);
8794                                                  7080 
8795         } // for INIMF                        << 7081   densniv(ACN,ZCN,EE,0.0,&DENSCN,BSHELL,BS,BK,&TEMPCN,0,0,DEFBET,&ECOR,JPRF,0,&QRCN);
8796     }     // for IZIMF                        << 
8797       //     End loop to calculate the decay  << 
8798       //     ******************************** << 
8799                                                  7082 
8800     //     Loop to calculate where the gamma  << 7083   IINERT = 0.4 * 931.49 * 1.16*1.16 * std::pow(ACN,5.0/3.0)*(1.0 + 0.5*std::sqrt(5./(4.*PI))*DEFBET);
8801     SDWprevious = 1.e20;                      << 7084   EROTCN = JPRF * JPRF * 197.328 * 197.328 /(2. * IINERT);
8802     IZSTOP = 0;                               << 7085 //
                                                   >> 7086   for(IZIMF=3;IZIMF<=IZIMFMAX;IZIMF++){
                                                   >> 7087   
                                                   >> 7088      SDW[IZIMF] = 0.0;
                                                   >> 7089      ZIMF_1 = 1.0*IZIMF;
                                                   >> 7090 
                                                   >> 7091 //     *** Find the limits that both IMF and partner are bound :
                                                   >> 7092 
                                                   >> 7093      isostab_lim(IZIMF,&INIMFMI,&INIMFMA);// Bound isotopes for IZIMF from INMIN to INIMFMA
                                                   >> 7094 // Idea - very proton-rich nuclei can live long enough to evaporate IMF before decaying:
                                                   >> 7095      INIMFMI = max(1,INIMFMI-2);
                                                   >> 7096 
                                                   >> 7097      IZCN = idnint(ZCN);        //  Z of CN
                                                   >> 7098      INCN = idnint(ACN) - IZCN; //  N of CN
                                                   >> 7099 
                                                   >> 7100      isostab_lim(IZCN-IZIMF,&INMI,&INMA); // Daughter nucleus after IMF emission,
                                                   >> 7101                                          // limits of bound isotopes
                                                   >> 7102      INMI = max(1,INMI-2);
                                                   >> 7103      INMIN = max(INIMFMI,INCN-INMA);  //  Both IMF and daughter must be bound
                                                   >> 7104      INNMAX = min(INIMFMA,INCN-INMI); //   "
                                                   >> 7105 
                                                   >> 7106      ILIMMAX = max(INNMAX,INMIN);     // In order to keep the variables below
                                                   >> 7107 //     ***
                                                   >> 7108 
                                                   >> 7109      for(G4int INIMF=INMIN;INIMF<=ILIMMAX;INIMF++){ // Range of possible IMF isotopes
                                                   >> 7110           IAIMF = IZIMF + INIMF;
                                                   >> 7111           DW[IZIMF][IAIMF] = 0.0;
                                                   >> 7112           AIMF_1 = 1.0*(IAIMF);
                                                   >> 7113 
                                                   >> 7114 //         Q-values
                                                   >> 7115           mglms(ACN-AIMF_1,ZCN-ZIMF_1,OPTSHPIMF,&MARES);
                                                   >> 7116           mglms(AIMF_1,ZIMF_1,OPTSHPIMF,&MAIMF);
                                                   >> 7117           mglms(ACN,ZCN,OPTSHPIMF,&MAZ);
                                                   >> 7118 
                                                   >> 7119 //         Barrier
                                                   >> 7120           if(ACN<=AIMF_1){
                                                   >> 7121             SSBIMF[IZIMF][IAIMF] = 1.e37;
                                                   >> 7122           }else{
                                                   >> 7123             barrs(idnint(ZCN-ZIMF_1),idnint(ACN-AIMF_1),idnint(ZIMF_1),idnint(AIMF_1),&fBIMF,&OMEGAP);
                                                   >> 7124             SSBIMF[IZIMF][IAIMF] = MAIMF + MARES - MAZ + fBIMF;
                                                   >> 7125             BBIMF[IZIMF][IAIMF] = fBIMF;
                                                   >> 7126           }
                                                   >> 7127 
                                                   >> 7128 // *****  Width *********************
                                                   >> 7129           DEFBETIMF = ecld->beta2[idnint(AIMF_1-ZIMF_1)][idnint(ZIMF_1)]+ecld->beta2[idnint(ACN-AIMF_1-ZCN+ZIMF_1)][idnint(ZCN-ZIMF_1)];
                                                   >> 7130 
                                                   >> 7131           IINERT = 0.40 * 931.490 * 1.160*1.160 * std::pow(ACN,5.0/3.0)*(std::pow(AIMF_1,5.0/3.0) + std::pow(ACN - AIMF_1,5.0/3.0)) + 931.490 * 1.160*1.160 * AIMF_1 * (ACN-AIMF_1) / ACN *(std::pow(AIMF_1,1.0/3.0) + std::pow(ACN - AIMF_1,1.0/3.0))*(std::pow(AIMF_1,1.0/3.0) + std::pow(ACN - AIMF_1,1.0/3.0));
                                                   >> 7132 
                                                   >> 7133           EROT = JPRF * JPRF * 197.328 * 197.328 /(2.0 * IINERT);
                                                   >> 7134 
                                                   >> 7135  //      IF(IEROT.EQ.1) EROT = 0.D0
                                                   >> 7136           if (EE<(SSBIMF[IZIMF][IAIMF]+EROT) || DENSCN<=0.0){
                                                   >> 7137            WIDTH_IMF = 0.0;
                                                   >> 7138 //          PRINT*,IDNINT(ACN),IDNINT(ZCN),IZIMF,IAIMF
                                                   >> 7139           }else{
                                                   >> 7140 //          here the temperature at "saddle point" is used
                                                   >> 7141 // Increase of the level densitiy at the barrier due to deformation; see comment in ABLA
                                                   >> 7142 //          BSIMF = ((ACN-AIMF_1)**(2.D0/3.D0) + AIMF_1**(2.D0/3.D0))/
                                                   >> 7143 //     &                ACN**(2.D0/3.D0)
                                                   >> 7144            BSIMF = BS;
                                                   >> 7145            densniv(ACN,ZCN,EE,SSBIMF[IZIMF][IAIMF],&DENSIMF,0.0,BSIMF,1.0,&fTIMF,0,0,DEFBETIMF,&ECOR,JPRF,2,&QR);
                                                   >> 7146            IMFARG = (SSBIMF[IZIMF][IAIMF]+EROTCN-EROT)/fTIMF;
                                                   >> 7147            if(IMFARG>200.0) IMFARG = 200.0;
                                                   >> 7148 
                                                   >> 7149            WIDTH1 = width(ACN,ZCN,AIMF_1,ZIMF_1,fTIMF,fBIMF,SSBIMF[IZIMF][IAIMF],EE-EROT);
                                                   >> 7150 
                                                   >> 7151            WIDTH_IMF = WIDTH1 * std::exp(-IMFARG) * QR / QRCN;
                                                   >> 7152 
                                                   >> 7153            if(WIDTH_IMF<=0.0){
                                                   >> 7154             std::cout << "GAMMA_IMF=0 -> LOOK IN GAMMA_IMF CALCULATIONS!" << std::endl;
                                                   >> 7155             std::cout << "ACN,ZCN,AIMF,ZIMF:" << idnint(ACN) << "," << idnint(ZCN) << "," << idnint(AIMF_1) << "," << idnint(ZIMF_1) << std::endl;
                                                   >> 7156             std::cout << "SSBIMF,TIMF :" << SSBIMF[IZIMF][IAIMF] << "," << fTIMF << std::endl;
                                                   >> 7157             std::cout << "DEXP(-IMFARG) = " << std::exp(-IMFARG) << std::endl;
                                                   >> 7158             std::cout << "WIDTH1 =" << WIDTH1 << std::endl;
                                                   >> 7159            }
                                                   >> 7160           }// if ee
                                                   >> 7161 
                                                   >> 7162           SDW[IZIMF] = SDW[IZIMF] + WIDTH_IMF;
                                                   >> 7163 
                                                   >> 7164           DW[IZIMF][IAIMF] = WIDTH_IMF;
                                                   >> 7165 
                                                   >> 7166      }// for INIMF
                                                   >> 7167   }// for IZIMF
                                                   >> 7168 //     End loop to calculate the decay widths ************************
                                                   >> 7169 //     ***************************************************************
                                                   >> 7170 
                                                   >> 7171 //     Loop to calculate where the gamma of IMF has the minimum ******
                                                   >> 7172       SDWprevious = 1.e20;
                                                   >> 7173       IZSTOP = 0;
8803                                                  7174 
8804     for (G4int III_ZIMF = 3; III_ZIMF <= IZIM << 7175       for(G4int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++){
8805     {                                         << 
8806                                                  7176 
8807         if (SDW[III_ZIMF] == 0.0)             << 7177         if(SDW[III_ZIMF]==0.0){
8808         {                                     << 7178           IZSTOP = III_ZIMF - 1;
8809             IZSTOP = III_ZIMF - 1;            << 
8810             goto imfs30;                         7179             goto imfs30;
8811         }                                        7180         }
8812                                                  7181 
8813         if (SDW[III_ZIMF] > SDWprevious)      << 7182         if(SDW[III_ZIMF]>SDWprevious){
8814         {                                     << 
8815             IZSTOP = III_ZIMF - 1;               7183             IZSTOP = III_ZIMF - 1;
8816             goto imfs30;                         7184             goto imfs30;
8817         }                                     << 7185         }else{
8818         else                                  << 
8819         {                                     << 
8820             SDWprevious = SDW[III_ZIMF];         7186             SDWprevious = SDW[III_ZIMF];
8821         }                                        7187         }
8822                                                  7188 
8823     } // for III_ZIMF                         << 7189       }// for III_ZIMF
8824                                               << 
8825 imfs30:                                       << 
8826                                               << 
8827     if (IZSTOP <= 6)                          << 
8828     {                                         << 
8829         IZSTOP = IZIMFMAX;                    << 
8830         goto imfs15;                          << 
8831     }                                         << 
8832                                                  7190 
8833     A1PAR = std::log10(SDW[IZSTOP] / SDW[IZST << 7191       imfs30:
8834     A2PAR = std::log10(SDW[IZSTOP]) - A1PAR * << 
8835     if (A2PAR > 0.)                           << 
8836         A2PAR = -1. * A2PAR;                  << 
8837     if (A1PAR > 0.)                           << 
8838         A1PAR = -1. * A1PAR;                  << 
8839                                                  7192 
8840     //     End loop to calculate where gamma  << 7193       if(IZSTOP<=6){
                                                   >> 7194        IZSTOP = IZIMFMAX;
                                                   >> 7195        goto imfs15;
                                                   >> 7196       }
8841                                                  7197 
8842     for (G4int II_ZIMF = IZSTOP; II_ZIMF <= I << 7198       A1PAR = std::log10(SDW[IZSTOP]/SDW[IZSTOP-2])/std::log10((1.0*IZSTOP)/(1.0*IZSTOP-2.0));
8843     {                                         << 7199       A2PAR = std::log10(SDW[IZSTOP]) - A1PAR * std::log10(1.0*(IZSTOP));
8844         SDW[II_ZIMF] = std::pow(10.0, A2PAR)  << 7200       if(A2PAR>0.)A2PAR=-1.*A2PAR;
8845         if (SDW[II_ZIMF] < 0.0)               << 7201       if(A1PAR>0.)A1PAR=-1.*A1PAR;
8846             SDW[II_ZIMF] = 0.0;               << 7202 
8847     }                                         << 7203 //     End loop to calculate where gamma of IMF has the minimum
                                                   >> 7204 
                                                   >> 7205       for(G4int II_ZIMF = IZSTOP;II_ZIMF<=IZIMFMAX;II_ZIMF++){
                                                   >> 7206        SDW[II_ZIMF] =  std::pow(10.0,A2PAR) * std::pow(1.0*II_ZIMF,A1PAR);  // Power-low
                                                   >> 7207        if(SDW[II_ZIMF]<0.0) SDW[II_ZIMF] = 0.0;
                                                   >> 7208       }
8848                                                  7209 
8849 imfs15:                                       << 7210       imfs15:
8850                                                  7211 
8851     //    Sum of all decay widths (for normal << 7212 //    Sum of all decay widths (for normalisation)
8852     SUMDW_TOT = 0.0;                          << 7213       SUMDW_TOT = 0.0;
8853     for (G4int I_ZIMF = 3; I_ZIMF <= IZIMFMAX << 7214       for(G4int I_ZIMF = 3;I_ZIMF<=IZIMFMAX;I_ZIMF++){
8854     {                                         << 
8855         SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF];     7215         SUMDW_TOT = SUMDW_TOT + SDW[I_ZIMF];
8856     }                                         << 7216       }
8857     if (SUMDW_TOT <= 0.0)                     << 7217       if(SUMDW_TOT<=0.0){
8858     {                                         << 
8859         std::cout << "*********************"     7218         std::cout << "*********************" << std::endl;
8860         std::cout << "IMF function" << std::e << 7219         std::cout <<  "IMF function" << std::endl;
8861         std::cout << "SUM of decay widths = " << 7220         std::cout <<  "SUM of decay widths = " << SUMDW_TOT << " IZIMFMAX = " << IZIMFMAX << std::endl;
8862         std::cout << "IZSTOP = " << IZSTOP << << 7221         std::cout <<  "IZSTOP = " << IZSTOP << std::endl;
8863     }                                         << 7222       }
8864                                               << 7223 
8865     //    End of Sum of all decay widths (for << 7224 //    End of Sum of all decay widths (for normalisation)
8866                                               << 7225   
8867     //    Loop to sample the nuclide that is  << 7226 //    Loop to sample the nuclide that is emitted ********************
8868     //    ------- sample Z -----------        << 7227 //    ------- sample Z -----------
8869 imfs10:                                       << 7228       imfs10:
8870     X = haz(1) * SUMDW_TOT;                   << 7229       X = haz(1)*SUMDW_TOT;
8871                                               << 7230 
8872     //      IF(X.EQ.0.D0) PRINT*,'WARNING: X= << 7231 //      IF(X.EQ.0.D0) PRINT*,'WARNING: X=0',XRNDM,SUMDW_TOT
8873     SUM_Z = 0.0;                              << 7232       SUM_Z = 0.0;
8874     fZIMF = 0.0;                              << 7233       fZIMF = 0.0;
8875     IZMEM = 0;                                << 7234       IZMEM = 0;
8876                                               << 7235 
8877     for (G4int IZ = 3; IZ <= IZIMFMAX; IZ++)  << 7236       for(G4int IZ = 3;IZ<=IZIMFMAX;IZ++){
8878     {                                         << 7237          SUM_Z = SUM_Z + SDW[IZ];
8879         SUM_Z = SUM_Z + SDW[IZ];              << 7238          if(X<SUM_Z){
8880         if (X < SUM_Z)                        << 7239             fZIMF = 1.0*IZ;
8881         {                                     << 
8882             fZIMF = 1.0 * IZ;                 << 
8883             IZMEM = IZ;                          7240             IZMEM = IZ;
8884             goto imfs20;                         7241             goto imfs20;
8885         }                                     << 7242          }
8886     } // for IZ                               << 7243       }//for IZ
8887                                               << 
8888 imfs20:                                       << 
8889                                                  7244 
8890     //     ------- sample N -----------       << 7245       imfs20:
8891                                                  7246 
8892     isostab_lim(IZMEM, &INMINMEM, &INMAXMEM); << 7247 //     ------- sample N -----------
8893     INMINMEM = max(1, INMINMEM - 2);          << 
8894                                                  7248 
8895     isostab_lim(IZCN - IZMEM, &INMI,          << 7249       isostab_lim(IZMEM,&INMINMEM,&INMAXMEM);
8896                 &INMA); // Daughter nucleus a << 7250       INMINMEM = max(1,INMINMEM-2);
8897     INMI = max(1, INMI - 2);                  << 7251 
8898     // limits of bound isotopes               << 7252       isostab_lim(IZCN-IZMEM,&INMI,&INMA);  // Daughter nucleus after IMF emission,
8899                                               << 7253       INMI = max(1,INMI-2);
8900     INMINMEM = max(INMINMEM, INCN - INMA); // << 7254                                             // limits of bound isotopes
8901     INMAXMEM = min(INMAXMEM, INCN - INMI); // << 7255 
8902                                               << 7256       INMINMEM = max(INMINMEM,INCN-INMA); // Both IMF and daughter must be bound
8903     INMAXMEM = max(INMINMEM, INMAXMEM);       << 7257       INMAXMEM = min(INMAXMEM,INCN-INMI); //   "
8904                                               << 7258 
8905     IA = 0;                                   << 7259       INMAXMEM = max(INMINMEM,INMAXMEM);
8906     SUMDW_N_TOT = 0.0;                        << 7260 
8907     for (G4int IIINIMF = INMINMEM; IIINIMF <= << 7261       IA = 0;
8908     {                                         << 7262       SUMDW_N_TOT = 0.0;
8909         IA = IZMEM + IIINIMF;                 << 7263       for(G4int IIINIMF = INMINMEM;IIINIMF<=INMAXMEM;IIINIMF++){
8910         if (IZMEM >= 3 && IZMEM <= 95 && IA > << 7264        IA = IZMEM + IIINIMF;
8911         {                                     << 7265        if(IZMEM>=3&&IZMEM<=95&&IA>=4&&IA<=250){
8912             SUMDW_N_TOT = SUMDW_N_TOT + DW[IZ << 7266         SUMDW_N_TOT = SUMDW_N_TOT + DW[IZMEM][IA];
8913         }                                     << 7267        }else{
8914         else                                  << 7268          std::cout << "CHARGE IMF OUT OF RANGE" << IZMEM << ", " << IA << ", " << idnint(ACN) << ", " << idnint(ZCN) << ", " << TEMP << std::endl;
8915         {                                     << 7269        }
8916             std::cout << "CHARGE IMF OUT OF R << 7270       }
8917                       << ", " << TEMP << std: << 
8918         }                                     << 
8919     }                                         << 
8920                                                  7271 
8921     XX = haz(1) * SUMDW_N_TOT;                << 7272       XX = haz(1)*SUMDW_N_TOT;
8922     IIA = 0;                                  << 7273       IIA = 0;
8923     SUM_A = 0.0;                              << 7274       SUM_A = 0.0;
8924     for (G4int IINIMF = INMINMEM; IINIMF <= I << 7275       for(G4int IINIMF = INMINMEM;IINIMF<=INMAXMEM; IINIMF++){
8925     {                                         << 
8926         IIA = IZMEM + IINIMF;                    7276         IIA = IZMEM + IINIMF;
8927         //      SUM_A = SUM_A + DW[IZ][IIA];  << 7277   //      SUM_A = SUM_A + DW[IZ][IIA]; //FIXME
8928         SUM_A = SUM_A + DW[IZMEM][IIA];          7278         SUM_A = SUM_A + DW[IZMEM][IIA];
8929         if (XX < SUM_A)                       << 7279         if(XX<SUM_A){
8930         {                                     << 7280           fAIMF = G4double(IIA);
8931             fAIMF = G4double(IIA);            << 7281           goto imfs25;
8932             goto imfs25;                      << 
8933         }                                        7282         }
8934     }                                         << 7283       }
8935                                                  7284 
8936 imfs25:                                       << 7285       imfs25:
8937     //     CHECK POINT 1                      << 7286 //     CHECK POINT 1
8938     NIMF = fAIMF - fZIMF;                     << 7287       NIMF = fAIMF - fZIMF;
8939                                               << 7288 
8940     if ((ACN - ZCN - NIMF) <= 0.0 || (ZCN - f << 7289       if((ACN-ZCN-NIMF)<=0.0 || (ZCN-fZIMF) <= 0.0){
8941     {                                         << 7290        std::cout << "IMF Partner unstable:" << std::endl;
8942         std::cout << "IMF Partner unstable:"  << 7291        std::cout << "System: Acn,Zcn,NCN:" << std::endl;
8943         std::cout << "System: Acn,Zcn,NCN:" < << 7292        std::cout << idnint(ACN) << ", " << idnint(ZCN) << ", " << idnint(ACN-ZCN) << std::endl;
8944         std::cout << idnint(ACN) << ", " << i << 7293        std::cout << "IMF: A,Z,N:" << std::endl;
8945         std::cout << "IMF: A,Z,N:" << std::en << 7294        std::cout << idnint(fAIMF) << ", " << idnint(fZIMF) << ", " << idnint(fAIMF-fZIMF) << std::endl;
8946         std::cout << idnint(fAIMF) << ", " << << 7295        std::cout << "Partner: A,Z,N:" << std::endl;
8947         std::cout << "Partner: A,Z,N:" << std << 7296        std::cout << idnint(ACN-fAIMF) << ", " << idnint(ZCN-fZIMF) << ", " << idnint(ACN-ZCN-NIMF) << std::endl;
8948         std::cout << idnint(ACN - fAIMF) << " << 
8949                   << std::endl;               << 
8950         std::cout << "----nmin,nmax" << INMIN    7297         std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl;
8951         std::cout << "----- warning: Zimf=" <    7298         std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl;
8952         std::cout << "----- look in subroutin    7299         std::cout << "----- look in subroutine IMF" << std::endl;
8953         std::cout << "ACN,ZCN,ZIMF,AIMF,temp, << 7300         std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF::" << ACN << ", " << ZCN << ", " << fZIMF << ", " << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl;
8954                   << TEMP << ", " << EE << ", << 7301 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl;
8955         std::cout << "-IZSTOP,IZIMFMAX:" << I << 7302 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl;
8956         std::cout << "----X,SUM_Z,SUMDW_TOT:" << 7303 //for(int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++)
8957         // for(int III_ZIMF=3;III_ZIMF<=IZIMF << 7304   //    std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] << std::endl;
8958         //     std::cout << "-**Z,SDW:" << II << 
8959         //     std::endl;                     << 
8960                                                  7305 
8961         goto imfs10;                          << 7306       goto imfs10;
8962     }                                         << 7307       }
8963     if (fZIMF >= ZCN || fAIMF >= ACN || fZIMF << 7308       if(fZIMF>=ZCN || fAIMF>=ACN || fZIMF<=2 || fAIMF<=3){
8964     {                                         << 
8965         std::cout << "----nmin,nmax" << INMIN    7309         std::cout << "----nmin,nmax" << INMINMEM << ", " << INMAXMEM << std::endl;
8966         std::cout << "----- warning: Zimf=" <    7310         std::cout << "----- warning: Zimf=" << fZIMF << " Aimf=" << fAIMF << std::endl;
8967         std::cout << "----- look in subroutin    7311         std::cout << "----- look in subroutine IMF" << std::endl;
8968         std::cout << "ACN,ZCN,ZIMF,AIMF,temp, << 7312         std::cout << "ACN,ZCN,ZIMF,AIMF,temp,EE,JPRF:" << ACN << ", " << ZCN << ", " << fZIMF << ", " << fAIMF << ", " << TEMP << ", " << EE << ", " << JPRF << std::endl;
8969                   << TEMP << ", " << EE << ", << 7313 std::cout << "-IZSTOP,IZIMFMAX:" << IZSTOP << ", " << IZIMFMAX << std::endl;
8970         std::cout << "-IZSTOP,IZIMFMAX:" << I << 7314 std::cout << "----X,SUM_Z,SUMDW_TOT:" << X << ", " << SUM_Z << ", " << SUMDW_TOT << std::endl;
8971         std::cout << "----X,SUM_Z,SUMDW_TOT:" << 7315 for(int III_ZIMF=3;III_ZIMF<=IZIMFMAX;III_ZIMF++)
8972         for (int III_ZIMF = 3; III_ZIMF <= IZ << 7316       std::cout << "-**Z,SDW:" << III_ZIMF << ", " << SDW[III_ZIMF] << std::endl;
8973             std::cout << "-**Z,SDW:" << III_Z << 
8974                                                  7317 
8975         fZIMF = 3.0; // provisorisch AK       << 7318         fZIMF = 3.0;  // provisorisch AK
8976         fAIMF = 4.0;                             7319         fAIMF = 4.0;
8977     }                                         << 7320       }
                                                   >> 7321 
                                                   >> 7322 // Characteristics of selected IMF (AIMF, ZIMF, BIMF, SBIMF, TIMF)
                                                   >> 7323       fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAIMF)];
                                                   >> 7324       fBIMF = BBIMF[idnint(fZIMF)][idnint(fAIMF)];
                                                   >> 7325 
                                                   >> 7326       if((ZCN-fZIMF)<=0.0)std::cout << "CHARGE_IMF ZIMF > ZCN" << std::endl;
                                                   >> 7327       if((ACN-fAIMF)<=0.0)std::cout << "CHARGE_IMF AIMF > ACN" << std::endl;
                                                   >> 7328 
                                                   >> 7329       BSHELL = ecld->ecgnz[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)] -ecld->vgsld[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)];
                                                   >> 7330 
                                                   >> 7331       DEFBET = ecld->beta2[idnint(ACN-ZCN-NIMF)][idnint(ZCN-fZIMF)];
                                                   >> 7332       EEDAUG = (EE - fSBIMF) * (ACN - fAIMF) / ACN;
                                                   >> 7333       bsbkbc(ACN - fAIMF,ZCN-fZIMF,&BS,&BK,&BC);
                                                   >> 7334       densniv(ACN-fAIMF,ZCN-fZIMF,EEDAUG,0.0,&DENSIMF,BSHELL,BS,BK,&fTIMF,0,0,DEFBET,&ECOR,0.0,0,&QR);
8978                                                  7335 
8979     // Characteristics of selected IMF (AIMF, << 7336       if(fSBIMF>EE){
8980     fSBIMF = SSBIMF[idnint(fZIMF)][idnint(fAI << 7337         std::cout << "----- warning: EE=" << EE << "," << " S+Bimf=" << fSBIMF  << std::endl;
8981     fBIMF = BBIMF[idnint(fZIMF)][idnint(fAIMF << 
8982                                               << 
8983     if ((ZCN - fZIMF) <= 0.0)                 << 
8984         std::cout << "CHARGE_IMF ZIMF > ZCN"  << 
8985     if ((ACN - fAIMF) <= 0.0)                 << 
8986         std::cout << "CHARGE_IMF AIMF > ACN"  << 
8987                                               << 
8988     BSHELL = ecld->ecgnz[idnint(ACN - ZCN - N << 
8989              ecld->vgsld[idnint(ACN - ZCN - N << 
8990                                               << 
8991     DEFBET = ecld->beta2[idnint(ACN - ZCN - N << 
8992     EEDAUG = (EE - fSBIMF) * (ACN - fAIMF) /  << 
8993     bsbkbc(ACN - fAIMF, ZCN - fZIMF, &BS, &BK << 
8994     densniv(ACN - fAIMF, ZCN - fZIMF, EEDAUG, << 
8995                                               << 
8996     if (fSBIMF > EE)                          << 
8997     {                                         << 
8998         std::cout << "----- warning: EE=" <<  << 
8999                   << " S+Bimf=" << fSBIMF <<  << 
9000         std::cout << "----- look in subroutin    7338         std::cout << "----- look in subroutine IMF" << std::endl;
9001         std::cout << "IMF will be resampled"     7339         std::cout << "IMF will be resampled" << std::endl;
9002         goto imfs10;                          << 7340        goto imfs10;
9003     }                                         << 7341       }
9004     (*ZIMF) = fZIMF;                          << 7342    (*ZIMF) = fZIMF;
9005     (*AIMF) = fAIMF;                          << 7343    (*AIMF) = fAIMF;
9006     (*SBIMF) = fSBIMF;                        << 7344    (*SBIMF) = fSBIMF;
9007     (*BIMF) = fBIMF;                          << 7345    (*BIMF) = fBIMF;
9008     (*TIMF) = fTIMF;                          << 7346    (*TIMF) = fTIMF;
9009     return;                                   << 7347   return;
9010 }                                             << 7348 }
9011                                               << 7349 
9012 void G4Abla::isostab_lim(G4int z, G4int* nmin << 7350 void G4Abla::isostab_lim(G4int z, G4int *nmin, G4int *nmax)
9013 {                                             << 7351 {
9014                                               << 7352 
9015     G4int VISOSTAB[191][2] = {                << 7353 G4int VISOSTAB[191][2]={
9016         { 0, 7 },     { 1, 8 },     { 1, 9 }, << 7354            {0 ,           7 },
9017         { 6, 22 },    { 6, 28 },    { 7, 28 } << 7355            {1 ,           8 },
9018         { 11, 38 },   { 10, 42 },   { 13, 50  << 7356            {1 ,           9 },
9019         { 19, 60 },   { 19, 62 },   { 21, 64  << 7357            {2 ,          12 },
9020         { 27, 78 },   { 29, 82 },   { 33, 82  << 7358            {2 ,          14 },
9021         { 40, 92 },   { 38, 96 },   { 42, 102 << 7359            {2 ,          16 },
9022         { 49, 116 },  { 46, 118 },  { 52, 120 << 7360            {3 ,          18 },
9023         { 60, 126 },  { 58, 130 },  { 62, 132 << 7361            {4 ,          22 },
9024         { 70, 148 },  { 70, 152 },  { 73, 152 << 7362            {6 ,          22 },
9025         { 82, 166 },  { 80, 166 },  { 85, 168 << 7363            {6 ,          28 },
9026         { 96, 184 },  { 95, 184 },  { 99, 184 << 7364            {7 ,          28 },
9027         { 115, 204 }, { 110, 206 }, { 119, 21 << 7365            {7 ,          30 },
9028     };                                        << 7366            {8 ,          28 },
                                                   >> 7367            {8 ,          36 },
                                                   >> 7368           {10 ,          38 },
                                                   >> 7369           {10 ,          40 },
                                                   >> 7370           {11 ,          38 },
                                                   >> 7371           {10 ,          42 },
                                                   >> 7372           {13 ,          50 },
                                                   >> 7373           {14 ,          50 },
                                                   >> 7374           {15 ,          52 },
                                                   >> 7375           {16 ,          52 },
                                                   >> 7376           {17 ,          54 },
                                                   >> 7377           {18 ,          54 },
                                                   >> 7378           {19 ,          60 },
                                                   >> 7379           {19 ,          62 },
                                                   >> 7380           {21 ,          64 },
                                                   >> 7381           {20 ,          66 },
                                                   >> 7382           {23 ,          66 },
                                                   >> 7383           {24 ,          70 },
                                                   >> 7384           {25 ,          70 },
                                                   >> 7385           {26 ,          74 },
                                                   >> 7386           {27 ,          78 },
                                                   >> 7387           {29 ,          82 },
                                                   >> 7388           {33 ,          82 },
                                                   >> 7389           {31 ,          82 },
                                                   >> 7390           {35 ,          82 },
                                                   >> 7391           {34 ,          84 },
                                                   >> 7392           {40 ,          84 },
                                                   >> 7393           {36 ,          86 },
                                                   >> 7394           {40 ,          92 },
                                                   >> 7395           {38 ,          96 },
                                                   >> 7396           {42 ,         102 },
                                                   >> 7397           {42 ,         102 },
                                                   >> 7398           {44 ,         102 },
                                                   >> 7399           {42 ,         106 },
                                                   >> 7400           {47 ,         112 },
                                                   >> 7401           {44 ,         114 },
                                                   >> 7402           {49 ,         116 },
                                                   >> 7403           {46 ,         118 },
                                                   >> 7404           {52 ,         120 },
                                                   >> 7405           {52 ,         124 },
                                                   >> 7406           {55 ,         126 },
                                                   >> 7407           {54 ,         126 },
                                                   >> 7408           {57 ,         126 },
                                                   >> 7409           {57 ,         126 },
                                                   >> 7410           {60 ,         126 },
                                                   >> 7411           {58 ,         130 },
                                                   >> 7412         {  62 ,         132 },
                                                   >> 7413         {  60 ,         140 },
                                                   >> 7414         {  67 ,         138 },
                                                   >> 7415         {  64 ,         142 },
                                                   >> 7416         {  67 ,         144 },
                                                   >> 7417         {  68 ,         146 },
                                                   >> 7418         {  70 ,         148 },
                                                   >> 7419         {  70 ,         152 },
                                                   >> 7420         {  73 ,         152 },
                                                   >> 7421         {  72 ,         154 },
                                                   >> 7422         {  75 ,         156 },
                                                   >> 7423         {  77 ,         162 },
                                                   >> 7424         {  79 ,         164 },
                                                   >> 7425         {  78 ,         164 },
                                                   >> 7426         {  82 ,         166 },
                                                   >> 7427         {  80 ,         166 },
                                                   >> 7428         {  85 ,         168 },
                                                   >> 7429         {  83 ,         176 },
                                                   >> 7430         {  87 ,         178 },
                                                   >> 7431         {  88 ,         178 },
                                                   >> 7432         {  91 ,         182 },
                                                   >> 7433         {  90 ,         184 },
                                                   >> 7434         {  96 ,         184 },
                                                   >> 7435         {  95 ,         184 },
                                                   >> 7436         {  99 ,         184 },
                                                   >> 7437         {  98 ,         184 },
                                                   >> 7438         { 105 ,         194 },
                                                   >> 7439         { 102 ,         194 },
                                                   >> 7440         { 108 ,         196 },
                                                   >> 7441         { 106 ,         198 },
                                                   >> 7442         { 115 ,         204 },
                                                   >> 7443         { 110 ,         206 },
                                                   >> 7444         { 119 ,         210 },
                                                   >> 7445         { 114 ,         210 },
                                                   >> 7446         { 124 ,         210 },
                                                   >> 7447         { 117 ,         212 },
                                                   >> 7448         { 130 ,         212 }
                                                   >> 7449         };
9029                                                  7450 
9030     if (z < 0)                                << 7451       if (z<0){
9031     {                                         << 
9032         *nmin = 0;                               7452         *nmin = 0;
9033         *nmax = 0;                               7453         *nmax = 0;
9034     }                                         << 7454       }else{ 
9035     else                                      << 7455         if(z==0){
9036     {                                         << 7456          *nmin = 1;
9037         if (z == 0)                           << 7457          *nmax = 1;
9038         {                                     << 7458 // AK (Dez2010) - Just to avoid numerical problems
9039             *nmin = 1;                        << 7459         }else{ 
9040             *nmax = 1;                        << 7460          if(z>95){
9041             // AK (Dez2010) - Just to avoid n << 7461           *nmin = 130;
9042         }                                     << 7462           *nmax = 200;
9043         else                                  << 7463          }else{
9044         {                                     << 7464           *nmin = VISOSTAB[z-1][0];
9045             if (z > 95)                       << 7465           *nmax = VISOSTAB[z-1][1];
9046             {                                 << 7466          }
9047                 *nmin = 130;                  << 
9048                 *nmax = 200;                  << 
9049             }                                 << 
9050             else                              << 
9051             {                                 << 
9052                 *nmin = VISOSTAB[z - 1][0];   << 
9053                 *nmax = VISOSTAB[z - 1][1];   << 
9054             }                                 << 
9055         }                                        7467         }
9056     }                                         << 7468       }
9057                                                  7469 
9058     return;                                   << 7470   return;
9059 }                                                7471 }
9060                                                  7472 
9061 void G4Abla::evap_postsaddle(G4double A,      << 
9062                              G4double Z,      << 
9063                              G4double EXC,    << 
9064                              G4double* E_scis << 
9065                              G4double* A_scis << 
9066                              G4double* Z_scis << 
9067                              G4double& vx_eva << 
9068                              G4double& vy_eva << 
9069                              G4double& vz_eva << 
9070                              G4int* NbLam0_pa << 
9071 {                                             << 
9072                                               << 
9073     //  AK 2006 - Now in case of fission deex << 
9074     //            is explicitly calculated. L << 
9075     //            Nadtochy used to parametris << 
9076                                               << 
9077     G4double af, zf, ee;                      << 
9078     G4double epsiln = 0.0, probp = 0.0, probd << 
9079              probimf = 0.0, problamb0 = 0.0,  << 
9080     G4double sn = 0.0, sbp = 0.0, sbd = 0.0,  << 
9081              sp = 0.0, sd = 0.0, st = 0.0, sh << 
9082     G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, << 
9083              bd = 0.0, bt = 0.0, bhe = 0.0, b << 
9084                                               << 
9085     G4double xcv = 0., ycv = 0., zcv = 0., VX << 
9086                                               << 
9087     G4double jprfn = 0.0, jprfp = 0.0, jprfd  << 
9088     G4double ctet1 = 0.0, stet1 = 0.0, phi1 = << 
9089     G4double rnd = 0.0;                       << 
9090                                               << 
9091     G4int itest = 0, sortie = 0;              << 
9092     G4double probf = 0.0;                     << 
9093                                               << 
9094     G4double ef = 0.0;                        << 
9095     G4double pc = 0.0;                        << 
9096                                               << 
9097     G4double time, tauf, tau0, a0, a1, emin,  << 
9098     G4int inttype = 0, inum = 0, gammadecay = << 
9099     G4double pleva = 0.0;                     << 
9100     G4double pxeva = 0.0;                     << 
9101     G4double pyeva = 0.0;                     << 
9102     G4double pteva = 0.0;                     << 
9103     G4double etot = 0.0;                      << 
9104     G4int NbLam0 = (*NbLam0_par);             << 
9105                                                  7473 
9106     const G4double c = 29.9792458;            << 7474 void G4Abla::evap_postsaddle(G4double A, G4double Z, G4double EXC, G4double *E_scission_post, G4double *A_scission, G4double *Z_scission,G4double &vx_eva,G4double &vy_eva,G4double &vz_eva,G4int *NbLam0_par){
9107     const G4double mu = 931.494;              << 
9108     const G4double mu2 = 931.494 * 931.494;   << 
9109                                                  7475 
9110     vx_eva = 0.;                              << 7476 //  AK 2006 - Now in case of fission deexcitation between saddle and scission
9111     vy_eva = 0.;                              << 7477 //            is explicitly calculated. Langevin calculations made by P. Nadtochy
9112     vz_eva = 0.;                              << 7478 //            used to parametrise saddle-to-scission time
9113     IEV_TAB_SSC = 0;                          << 7479 
9114                                               << 7480   G4double af,zf,ee;
9115     af = dint(A);                             << 7481   G4double epsiln = 0.0, probp = 0.0, probd = 0.0, probt = 0.0, probn = 0.0, probhe = 0.0, proba = 0.0, probg = 0.0, probimf=0.0, problamb0=0.0, ptotl = 0.0, tcn = 0.0;  
9116     zf = dint(Z);                             << 7482   G4double sn = 0.0, sbp = 0.0, sbd = 0.0, sbt = 0.0, sbhe = 0.0, sba = 0.0, x = 0.0, amoins = 0.0, zmoins = 0.0,sp= 0.0,sd= 0.0,st= 0.0,she= 0.0,sa= 0.0, slamb0 = 0.0;
9117     ee = EXC;                                 << 7483   G4double ecn = 0.0, ecp = 0.0, ecd = 0.0, ect = 0.0,eche = 0.0,eca = 0.0, ecg = 0.0, eclamb0 = 0.0, bp = 0.0, bd = 0.0, bt = 0.0, bhe = 0.0, ba = 0.0;
9118                                               << 7484 
9119     fiss->ifis = 0;                           << 7485   G4double xcv=0.,ycv=0.,zcv=0.,VXOUT=0.,VYOUT=0.,VZOUT=0.;
9120     opt->optimfallowed = 0;                   << 7486 
9121     gammaemission = 0;                        << 7487   G4double jprfn=0.0, jprfp=0.0, jprfd=0.0, jprft=0.0, jprfhe=0.0, jprfa=0.0, jprflamb0=0.0;
9122     // Initialsation                          << 7488   G4double ctet1 = 0.0, stet1 = 0.0, phi1 = 0.0;
9123     time = 0.0;                               << 7489   G4double rnd = 0.0;
9124                                               << 7490 
9125     // in sec                                 << 7491   G4int itest = 0, sortie=0;
9126     tau0 = 1.0e-21;                           << 7492   G4double probf = 0.0;
9127     a0 = 0.66482503 - 3.4678935 * std::exp(-0 << 7493 
9128     a1 = 5.6846e-04 + 0.00574515 * std::exp(- << 7494   G4double ef = 0.0;
9129     tauf = (a0 + a1 * zf * zf / std::pow(af,  << 7495   G4double pc = 0.0;
9130     //                                        << 7496 
9131 post10:                                       << 7497   G4double time,tauf,tau0,a0,a1,emin,ts1,tsum=0.;
9132     direct(zf,                                << 7498   G4int inttype=0,inum=0,gammadecay = 0, flamb0decay = 0;
9133            af,                                << 7499   G4double pleva = 0.0;
9134            ee,                                << 7500   G4double pxeva = 0.0;
9135            0.,                                << 7501   G4double pyeva = 0.0;
9136            &probp,                            << 7502   G4double pteva = 0.0;
9137            &probd,                            << 7503   G4double etot = 0.0;
9138            &probt,                            << 7504   G4int NbLam0= (*NbLam0_par);
9139            &probn,                            << 7505 
9140            &probhe,                           << 7506   const G4double c = 29.9792458;
9141            &proba,                            << 7507   const G4double mu = 931.494;
9142            &probg,                            << 7508   const G4double mu2 = 931.494*931.494;
9143            &probimf,                          << 7509 
9144            &probf,                            << 7510       vx_eva=0.;
9145            &problamb0,                        << 7511       vy_eva=0.;
9146            &ptotl,                            << 7512       vz_eva=0.;
9147            &sn,                               << 7513       IEV_TAB_SSC = 0;
9148            &sbp,                              << 7514 
9149            &sbd,                              << 7515 
9150            &sbt,                              << 7516       af = dint(A);
9151            &sbhe,                             << 7517       zf = dint(Z);
9152            &sba,                              << 7518       ee = EXC;
9153            &slamb0,                           << 7519 
9154            &ecn,                              << 7520       fiss->ifis = 0;
9155            &ecp,                              << 7521       opt->optimfallowed = 0;
9156            &ecd,                              << 7522       gammaemission=0;
9157            &ect,                              << 7523 // Initialsation
9158            &eche,                             << 7524       time = 0.0;
9159            &eca,                              << 7525  
9160            &ecg,                              << 7526 // in sec
9161            &eclamb0,                          << 7527       tau0 = 1.0e-21;
9162            &bp,                               << 7528       a0 = 0.66482503 - 3.4678935 * std::exp(-0.0104002*ee);
9163            &bd,                               << 7529       a1  = 5.6846e-04 + 0.00574515 * std::exp(-0.01114307*ee);
9164            &bt,                               << 7530       tauf = (a0 + a1 * zf*zf/std::pow(af,0.3333333)) * tau0;
9165            &bhe,                              << 7531 //
9166            &ba,                               << 7532       post10:
9167            &sp,                               << 7533       direct(zf,af,ee,0.,&probp,&probd,&probt,&probn,&probhe,&proba,&probg,&probimf,&probf,&problamb0,&ptotl,
9168            &sd,                               << 7534    &sn,&sbp,&sbd,&sbt,&sbhe,&sba,&slamb0,
9169            &st,                               << 7535          &ecn,&ecp,&ecd,&ect,&eche,&eca,&ecg,&eclamb0,
9170            &she,                              << 7536          &bp,&bd,&bt,&bhe,&ba,&sp,&sd,&st,&she,&sa,&ef,&ts1,inttype,inum,itest,&sortie,&tcn,
9171            &sa,                               << 7537          &jprfn, &jprfp, &jprfd, &jprft, &jprfhe, &jprfa, &jprflamb0, &tsum, NbLam0); //:::FIXME::: Call
9172            &ef,                               << 7538 //
9173            &ts1,                              << 7539 // HERE THE FINAL STEPS OF THE EVAPORATION ARE CALCULATED
9174            inttype,                           << 7540 //
9175            inum,                              << 7541   if(ptotl<=0.)goto post100;
9176            itest,                             << 7542 
9177            &sortie,                           << 7543   emin = dmin1(sba,sbhe,dmin1(sbt,sbhe,dmin1(sn,sbp,sbd)));
9178            &tcn,                              << 7544 
9179            &jprfn,                            << 7545   if(emin>1e30)std::cout << "ERROR AT THE EXIT OF EVAPORA,E>1.D30,AF" << std::endl;
9180            &jprfp,                            << 7546 
9181            &jprfd,                            << 7547   if(sortie==1){
9182            &jprft,                            << 7548    if (probn!=0.0) {
9183            &jprfhe,                           << 7549     amoins = 1.0;
9184            &jprfa,                            << 7550     zmoins = 0.0;
9185            &jprflamb0,                        << 7551     epsiln = sn + ecn;
9186            &tsum,                             << 7552     pc = std::sqrt(std::pow((1.0 + ecn/9.3956e2),2.) - 1.0) * 9.3956e2;
9187            NbLam0); //:::FIXME::: Call        << 7553     gammadecay = 0;
9188                     //                        << 7554     flamb0decay = 0;
9189     // HERE THE FINAL STEPS OF THE EVAPORATIO << 7555    }
9190     //                                        << 7556    else if(probp!=0.0){
9191     if (ptotl <= 0.)                          << 7557     amoins = 1.0;
9192         goto post100;                         << 7558     zmoins = 1.0;
9193                                               << 7559     epsiln = sp + ecp;
9194     emin = dmin1(sba, sbhe, dmin1(sbt, sbhe,  << 7560     pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2.) - 1.0) * 9.3827e2;
9195                                               << 7561     gammadecay = 0;
9196     if (emin > 1e30)                          << 7562     flamb0decay = 0;
9197         std::cout << "ERROR AT THE EXIT OF EV << 7563    }
9198                                               << 7564    else if(probd!=0.0){
9199     if (sortie == 1)                          << 7565     amoins = 2.0;
9200     {                                         << 7566     zmoins = 1.0;
9201         if (probn != 0.0)                     << 7567     epsiln = sd + ecd;
9202         {                                     << 7568     pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3;
9203             amoins = 1.0;                     << 7569     gammadecay = 0;
9204             zmoins = 0.0;                     << 7570     flamb0decay = 0;
9205             epsiln = sn + ecn;                << 7571    }
9206             pc = std::sqrt(std::pow((1.0 + ec << 7572    else if(probt!=0.0){
9207             gammadecay = 0;                   << 7573     amoins = 3.0;
9208             flamb0decay = 0;                  << 7574     zmoins = 1.0;
9209         }                                     << 7575     epsiln = st + ect;
9210         else if (probp != 0.0)                << 7576     pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3;
9211         {                                     << 7577     gammadecay = 0;
9212             amoins = 1.0;                     << 7578     flamb0decay = 0;
9213             zmoins = 1.0;                     << 7579    }
9214             epsiln = sp + ecp;                << 7580    else if(probhe!=0.0){
9215             pc = std::sqrt(std::pow((1.0 + ec << 7581     amoins = 3.0;
9216             gammadecay = 0;                   << 7582     zmoins = 2.0;
9217             flamb0decay = 0;                  << 7583     epsiln = she + eche;
9218         }                                     << 7584     pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3;
9219         else if (probd != 0.0)                << 7585     gammadecay = 0;
9220         {                                     << 7586     flamb0decay = 0;
9221             amoins = 2.0;                     << 7587    }
9222             zmoins = 1.0;                     << 7588    else{ if(proba!=0.0){
9223             epsiln = sd + ecd;                << 7589     amoins = 4.0;
9224             pc = std::sqrt(std::pow((1.0 + ec << 7590     zmoins = 2.0;
9225             gammadecay = 0;                   << 7591     epsiln = sa + eca;
9226             flamb0decay = 0;                  << 7592     pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3;
9227         }                                     << 7593     gammadecay = 0;
9228         else if (probt != 0.0)                << 7594     flamb0decay = 0;
9229         {                                     << 7595     }
9230             amoins = 3.0;                     << 7596    }
9231             zmoins = 1.0;                     << 7597   goto post99;
9232             epsiln = st + ect;                << 7598   }
9233             pc = std::sqrt(std::pow((1.0 + ec << 7599 
9234             gammadecay = 0;                   << 7600   //    IRNDM = IRNDM+1;
9235             flamb0decay = 0;                  << 7601 //
9236         }                                     << 7602 // HERE THE NORMAL EVAPORATION CASCADE STARTS
9237         else if (probhe != 0.0)               << 7603 // RANDOM NUMBER FOR THE EVAPORATION
9238         {                                     << 7604 
9239             amoins = 3.0;                     << 7605 
9240             zmoins = 2.0;                     << 7606   // random number for the evaporation
9241             epsiln = she + eche;              << 7607   x = G4AblaRandom::flat() * ptotl;
9242             pc = std::sqrt(std::pow((1.0 + ec << 7608 
9243             gammadecay = 0;                   << 7609   itest = 0;
9244             flamb0decay = 0;                  << 7610   if (x < proba) {
9245         }                                     << 7611     // alpha evaporation                                                     
9246         else                                  << 7612     amoins = 4.0;
9247         {                                     << 7613     zmoins = 2.0;
9248             if (proba != 0.0)                 << 7614     epsiln = sa + eca;
9249             {                                 << 7615     pc = std::sqrt(std::pow((1.0 + eca/3.72834e3),2) - 1.0) * 3.72834e3;
9250                 amoins = 4.0;                 << 7616     gammadecay = 0;
9251                 zmoins = 2.0;                 << 7617     flamb0decay = 0;
9252                 epsiln = sa + eca;            << 7618   }  
9253                 pc = std::sqrt(std::pow((1.0  << 7619   else if (x < proba+probhe) {
9254                 gammadecay = 0;               << 7620     // He3 evaporation                                                    
9255                 flamb0decay = 0;              << 7621     amoins = 3.0;
9256             }                                 << 7622     zmoins = 2.0;
9257         }                                     << 7623     epsiln = she + eche;
9258         goto post99;                          << 7624     pc = std::sqrt(std::pow((1.0 + eche/2.80826e3),2) - 1.0) * 2.80826e3;
                                                   >> 7625     gammadecay = 0;
                                                   >> 7626     flamb0decay = 0;
                                                   >> 7627   }
                                                   >> 7628   else if (x < proba+probhe+probt) {
                                                   >> 7629     // triton evaporation                                                    
                                                   >> 7630     amoins = 3.0;
                                                   >> 7631     zmoins = 1.0;
                                                   >> 7632     epsiln = st + ect;
                                                   >> 7633     pc = std::sqrt(std::pow((1.0 + ect/2.80828e3),2) - 1.0) * 2.80828e3;
                                                   >> 7634     gammadecay = 0;
                                                   >> 7635     flamb0decay = 0;
                                                   >> 7636   }
                                                   >> 7637   else if (x < proba+probhe+probt+probd) {
                                                   >> 7638     // deuteron evaporation                                                    
                                                   >> 7639     amoins = 2.0;
                                                   >> 7640     zmoins = 1.0;
                                                   >> 7641     epsiln = sd + ecd;
                                                   >> 7642     pc = std::sqrt(std::pow((1.0 + ecd/1.875358e3),2) - 1.0) * 1.875358e3;
                                                   >> 7643     gammadecay = 0;
                                                   >> 7644     flamb0decay = 0;
                                                   >> 7645   }
                                                   >> 7646   else if (x < proba+probhe+probt+probd+probp) {
                                                   >> 7647     // proton evaporation                                                    
                                                   >> 7648     amoins = 1.0;
                                                   >> 7649     zmoins = 1.0;
                                                   >> 7650     epsiln = sp + ecp;
                                                   >> 7651     pc = std::sqrt(std::pow((1.0 + ecp/9.3827e2),2) - 1.0) * 9.3827e2;
                                                   >> 7652     gammadecay = 0;
                                                   >> 7653     flamb0decay = 0;
                                                   >> 7654   }
                                                   >> 7655   else if (x < proba+probhe+probt+probd+probp+probn) {
                                                   >> 7656     // neutron evaporation                                                   
                                                   >> 7657     amoins = 1.0;
                                                   >> 7658     zmoins = 0.0;
                                                   >> 7659     epsiln = sn + ecn;
                                                   >> 7660     pc = std::sqrt(std::pow((1.0 + ecn/9.3956e2),2.) - 1.0) * 9.3956e2;
                                                   >> 7661     gammadecay = 0;
                                                   >> 7662     flamb0decay = 0;
                                                   >> 7663   }
                                                   >> 7664   else if (x < proba+probhe+probt+probd+probp+probn+problamb0) {
                                                   >> 7665     // lambda0 evaporation  
                                                   >> 7666     amoins = 1.0;
                                                   >> 7667     zmoins = 0.0;
                                                   >> 7668     epsiln = slamb0 + eclamb0;
                                                   >> 7669     pc = std::sqrt(std::pow((1.0 + (eclamb0)/11.1568e2),2.) - 1.0) * 11.1568e2;
                                                   >> 7670     opt->nblan0 = opt->nblan0 -1;
                                                   >> 7671     NbLam0 = NbLam0 -1;
                                                   >> 7672     gammadecay = 0;
                                                   >> 7673     flamb0decay = 1;
                                                   >> 7674   }
                                                   >> 7675   else if (x < proba+probhe+probt+probd+probp+probn+problamb0+probg) {
                                                   >> 7676     // gamma evaporation                                                    
                                                   >> 7677     amoins = 0.0;
                                                   >> 7678     zmoins = 0.0;
                                                   >> 7679     epsiln = ecg;
                                                   >> 7680     pc = ecg;
                                                   >> 7681     gammadecay = 1;
                                                   >> 7682     flamb0decay = 0;
                                                   >> 7683     if(probp==0.0 && probn==0.0 && probd==0.0 && probt==0.0 && proba==0.0 && probhe==0.0 && problamb0==0.0 && probimf==0.0 && probf==0.0){
                                                   >> 7684     //ee = ee-epsiln;
                                                   >> 7685     //if(ee<=0.01) ee = 0.010;
                                                   >> 7686     goto post100;
9259     }                                            7687     }
                                                   >> 7688   }
                                                   >> 7689 
                                                   >> 7690 // CALCULATION OF THE DAUGHTER NUCLEUS
                                                   >> 7691 //
                                                   >> 7692       post99:
                                                   >> 7693 
                                                   >> 7694       if(gammadecay==1 && ee<=0.01+epsiln){
                                                   >> 7695        epsiln = ee-0.01;
                                                   >> 7696        time = tauf + 1.;
                                                   >> 7697       }
                                                   >> 7698 
                                                   >> 7699       af = af-amoins;
                                                   >> 7700       zf = zf-zmoins;
                                                   >> 7701       ee = ee-epsiln;
                                                   >> 7702 
                                                   >> 7703       if(ee<=0.01) ee = 0.010;
                                                   >> 7704 
                                                   >> 7705       if(af<2.5) goto post100;
                                                   >> 7706 
                                                   >> 7707       time = time + ts1;
9260                                                  7708 
9261     //    IRNDM = IRNDM+1;                    << 7709 // Determination of x,y,z components of momentum from known emission momentum
9262     //                                        << 7710         if(flamb0decay==1){
9263     // HERE THE NORMAL EVAPORATION CASCADE ST << 
9264     // RANDOM NUMBER FOR THE EVAPORATION      << 
9265                                               << 
9266     // random number for the evaporation      << 
9267     x = G4AblaRandom::flat() * ptotl;         << 
9268                                               << 
9269     itest = 0;                                << 
9270     if (x < proba)                            << 
9271     {                                         << 
9272         // alpha evaporation                  << 
9273         amoins = 4.0;                         << 
9274         zmoins = 2.0;                         << 
9275         epsiln = sa + eca;                    << 
9276         pc = std::sqrt(std::pow((1.0 + eca /  << 
9277         gammadecay = 0;                       << 
9278         flamb0decay = 0;                      << 
9279     }                                         << 
9280     else if (x < proba + probhe)              << 
9281     {                                         << 
9282         // He3 evaporation                    << 
9283         amoins = 3.0;                         << 
9284         zmoins = 2.0;                         << 
9285         epsiln = she + eche;                  << 
9286         pc = std::sqrt(std::pow((1.0 + eche / << 
9287         gammadecay = 0;                       << 
9288         flamb0decay = 0;                      << 
9289     }                                         << 
9290     else if (x < proba + probhe + probt)      << 
9291     {                                         << 
9292         // triton evaporation                 << 
9293         amoins = 3.0;                         << 
9294         zmoins = 1.0;                         << 
9295         epsiln = st + ect;                    << 
9296         pc = std::sqrt(std::pow((1.0 + ect /  << 
9297         gammadecay = 0;                       << 
9298         flamb0decay = 0;                      << 
9299     }                                         << 
9300     else if (x < proba + probhe + probt + pro << 
9301     {                                         << 
9302         // deuteron evaporation               << 
9303         amoins = 2.0;                         << 
9304         zmoins = 1.0;                         << 
9305         epsiln = sd + ecd;                    << 
9306         pc = std::sqrt(std::pow((1.0 + ecd /  << 
9307         gammadecay = 0;                       << 
9308         flamb0decay = 0;                      << 
9309     }                                         << 
9310     else if (x < proba + probhe + probt + pro << 
9311     {                                         << 
9312         // proton evaporation                 << 
9313         amoins = 1.0;                         << 
9314         zmoins = 1.0;                         << 
9315         epsiln = sp + ecp;                    << 
9316         pc = std::sqrt(std::pow((1.0 + ecp /  << 
9317         gammadecay = 0;                       << 
9318         flamb0decay = 0;                      << 
9319     }                                         << 
9320     else if (x < proba + probhe + probt + pro << 
9321     {                                         << 
9322         // neutron evaporation                << 
9323         amoins = 1.0;                         << 
9324         zmoins = 0.0;                         << 
9325         epsiln = sn + ecn;                    << 
9326         pc = std::sqrt(std::pow((1.0 + ecn /  << 
9327         gammadecay = 0;                       << 
9328         flamb0decay = 0;                      << 
9329     }                                         << 
9330     else if (x < proba + probhe + probt + pro << 
9331     {                                         << 
9332         // lambda0 evaporation                << 
9333         amoins = 1.0;                         << 
9334         zmoins = 0.0;                         << 
9335         epsiln = slamb0 + eclamb0;            << 
9336         pc = std::sqrt(std::pow((1.0 + (eclam << 
9337         opt->nblan0 = opt->nblan0 - 1;        << 
9338         NbLam0 = NbLam0 - 1;                  << 
9339         gammadecay = 0;                       << 
9340         flamb0decay = 1;                      << 
9341     }                                         << 
9342     else if (x < proba + probhe + probt + pro << 
9343     {                                         << 
9344         // gamma evaporation                  << 
9345         amoins = 0.0;                         << 
9346         zmoins = 0.0;                         << 
9347         epsiln = ecg;                         << 
9348         pc = ecg;                             << 
9349         gammadecay = 1;                       << 
9350         flamb0decay = 0;                      << 
9351         if (probp == 0.0 && probn == 0.0 && p << 
9352             problamb0 == 0.0 && probimf == 0. << 
9353         {                                     << 
9354             // ee = ee-epsiln;                << 
9355             // if(ee<=0.01) ee = 0.010;       << 
9356             goto post100;                     << 
9357         }                                     << 
9358     }                                         << 
9359                                               << 
9360     // CALCULATION OF THE DAUGHTER NUCLEUS    << 
9361     //                                        << 
9362 post99:                                       << 
9363                                               << 
9364     if (gammadecay == 1 && ee <= 0.01 + epsil << 
9365     {                                         << 
9366         epsiln = ee - 0.01;                   << 
9367         time = tauf + 1.;                     << 
9368     }                                         << 
9369                                               << 
9370     af = af - amoins;                         << 
9371     zf = zf - zmoins;                         << 
9372     ee = ee - epsiln;                         << 
9373                                               << 
9374     if (ee <= 0.01)                           << 
9375         ee = 0.010;                           << 
9376                                               << 
9377     if (af < 2.5)                             << 
9378         goto post100;                         << 
9379                                               << 
9380     time = time + ts1;                        << 
9381                                               << 
9382     // Determination of x,y,z components of m << 
9383     if (flamb0decay == 1)                     << 
9384     {                                         << 
9385         EV_TAB_SSC[IEV_TAB_SSC][0] = 0.;         7711         EV_TAB_SSC[IEV_TAB_SSC][0] = 0.;
9386         EV_TAB_SSC[IEV_TAB_SSC][1] = -2.;        7712         EV_TAB_SSC[IEV_TAB_SSC][1] = -2.;
9387         EV_TAB_SSC[IEV_TAB_SSC][5] = 1.;         7713         EV_TAB_SSC[IEV_TAB_SSC][5] = 1.;
9388     }                                         << 7714         }else{
9389     else                                      << 
9390     {                                         << 
9391         EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins;     7715         EV_TAB_SSC[IEV_TAB_SSC][0] = zmoins;
9392         EV_TAB_SSC[IEV_TAB_SSC][1] = amoins;     7716         EV_TAB_SSC[IEV_TAB_SSC][1] = amoins;
9393         EV_TAB_SSC[IEV_TAB_SSC][5] = 0.;         7717         EV_TAB_SSC[IEV_TAB_SSC][5] = 0.;
9394     }                                         << 7718         }
9395                                                  7719 
9396     rnd = G4AblaRandom::flat();               << 7720         rnd = G4AblaRandom::flat();
9397     ctet1 = 2.0 * rnd - 1.0;                  << 7721         ctet1 = 2.0*rnd - 1.0;           // z component: uniform probability between -1 and 1
9398     stet1 = std::sqrt(1.0 - std::pow(ctet1, 2 << 7722         stet1 = std::sqrt(1.0 - std::pow(ctet1,2));// component perpendicular to z
9399     rnd = G4AblaRandom::flat();               << 7723         rnd = G4AblaRandom::flat();
9400     phi1 = rnd * 2.0 * 3.141592654; // angle  << 7724         phi1 = rnd*2.0*3.141592654;   // angle in x-y plane: uniform probability between 0 and 2*pi
9401     xcv = stet1 * std::cos(phi1);   // x comp << 7725         xcv = stet1*std::cos(phi1);   // x component
9402     ycv = stet1 * std::sin(phi1);   // y comp << 7726         ycv = stet1*std::sin(phi1);   // y component
9403     zcv = ctet1;                    // z comp << 7727         zcv = ctet1;                  // z component
9404                                     // In the << 7728 // In the CM system
9405     if (gammadecay == 0)                      << 7729         if(gammadecay==0){
9406     {                                         << 7730 // Light particle
9407         // Light particle                     << 7731            G4double ETOT_LP = std::sqrt(pc*pc + amoins*amoins * mu2);
9408         G4double ETOT_LP = std::sqrt(pc * pc  << 7732            if(flamb0decay==1)ETOT_LP = std::sqrt(pc*pc + 1115.683*1115.683);
9409         if (flamb0decay == 1)                 << 7733            EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * xcv / ETOT_LP;
9410             ETOT_LP = std::sqrt(pc * pc + 111 << 7734            EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * ycv / ETOT_LP;
9411         EV_TAB_SSC[IEV_TAB_SSC][2] = c * pc * << 7735            EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * zcv / ETOT_LP;
9412         EV_TAB_SSC[IEV_TAB_SSC][3] = c * pc * << 7736         }else{
9413         EV_TAB_SSC[IEV_TAB_SSC][4] = c * pc * << 7737 // gamma ray
9414     }                                         << 7738            EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv;
9415     else                                      << 7739            EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv;
9416     {                                         << 7740            EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv;
9417         // gamma ray                          << 7741         }
9418         EV_TAB_SSC[IEV_TAB_SSC][2] = pc * xcv << 7742         lorentz_boost(vx_eva,vy_eva,vz_eva,
9419         EV_TAB_SSC[IEV_TAB_SSC][3] = pc * ycv << 7743             EV_TAB_SSC[IEV_TAB_SSC][2],EV_TAB_SSC[IEV_TAB_SSC][3],
9420         EV_TAB_SSC[IEV_TAB_SSC][4] = pc * zcv << 7744             EV_TAB_SSC[IEV_TAB_SSC][4],
9421     }                                         << 7745             &VXOUT,&VYOUT,&VZOUT);
9422     lorentz_boost(vx_eva,                     << 7746         EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT;
9423                   vy_eva,                     << 7747         EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT;
9424                   vz_eva,                     << 7748         EV_TAB_SSC[IEV_TAB_SSC][4] = VZOUT;
9425                   EV_TAB_SSC[IEV_TAB_SSC][2], << 7749 
9426                   EV_TAB_SSC[IEV_TAB_SSC][3], << 7750 // Heavy residue
9427                   EV_TAB_SSC[IEV_TAB_SSC][4], << 7751         if(gammadecay==0){
9428                   &VXOUT,                     << 7752         G4double v2 = std::pow(EV_TAB_SSC[IEV_TAB_SSC][2],2.) +
9429                   &VYOUT,                     << 7753              std::pow(EV_TAB_SSC[IEV_TAB_SSC][3],2.) +
9430                   &VZOUT);                    << 7754              std::pow(EV_TAB_SSC[IEV_TAB_SSC][4],2.);
9431     EV_TAB_SSC[IEV_TAB_SSC][2] = VXOUT;       << 7755         G4double gamma = 1.0/std::sqrt(1.0 - v2 / (c*c));
9432     EV_TAB_SSC[IEV_TAB_SSC][3] = VYOUT;       << 7756         G4double etot_lp = amoins*mu * gamma;
9433     EV_TAB_SSC[IEV_TAB_SSC][4] = VZOUT;       << 
9434                                               << 
9435     // Heavy residue                          << 
9436     if (gammadecay == 0)                      << 
9437     {                                         << 
9438         G4double v2 = std::pow(EV_TAB_SSC[IEV << 
9439                       std::pow(EV_TAB_SSC[IEV << 
9440         G4double gamma = 1.0 / std::sqrt(1.0  << 
9441         G4double etot_lp = amoins * mu * gamm << 
9442         pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SS    7757         pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2] * etot_lp / c;
9443         pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS    7758         pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3] * etot_lp / c;
9444         pleva = pleva - EV_TAB_SSC[IEV_TAB_SS    7759         pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4] * etot_lp / c;
9445     }                                         << 7760         }else{
9446     else                                      << 7761 // in case of gammas, EV_TEMP contains momentum components and not velocity
9447     {                                         << 
9448         // in case of gammas, EV_TEMP contain << 
9449         pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SS    7762         pxeva = pxeva - EV_TAB_SSC[IEV_TAB_SSC][2];
9450         pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SS    7763         pyeva = pyeva - EV_TAB_SSC[IEV_TAB_SSC][3];
9451         pleva = pleva - EV_TAB_SSC[IEV_TAB_SS    7764         pleva = pleva - EV_TAB_SSC[IEV_TAB_SSC][4];
9452     }                                         << 7765         }
9453     pteva = std::sqrt(pxeva * pxeva + pyeva * << 7766         pteva = std::sqrt(pxeva*pxeva + pyeva*pyeva);
9454     // To be checked:                         << 7767 // To be checked:
9455     etot = std::sqrt(pleva * pleva + pteva *  << 7768         etot = std::sqrt ( pleva*pleva + pteva*pteva + af*af * mu2 );
9456     vx_eva = c * pxeva / etot; // recoil velo << 7769         vx_eva = c * pxeva / etot;  // recoil velocity components of residue due to evaporation
9457     vy_eva = c * pyeva / etot;                << 7770         vy_eva = c * pyeva / etot;
9458     vz_eva = c * pleva / etot;                << 7771         vz_eva = c * pleva / etot;
9459                                               << 7772 
9460     IEV_TAB_SSC = IEV_TAB_SSC + 1;            << 7773         IEV_TAB_SSC = IEV_TAB_SSC +1;
9461                                               << 7774 
9462     if (time < tauf)                          << 7775       if(time<tauf)goto post10;
9463         goto post10;                          << 7776 //
9464     //                                        << 7777      post100:
9465 post100:                                      << 7778 //
9466     //                                        << 7779       *A_scission= af;
9467     *A_scission = af;                         << 7780       *Z_scission= zf;
9468     *Z_scission = zf;                         << 7781       *E_scission_post = ee;
9469     *E_scission_post = ee;                    << 7782       *NbLam0_par = NbLam0;
9470     *NbLam0_par = NbLam0;                     << 7783  return;
9471     return;                                   << 7784 }
                                                   >> 7785 
                                                   >> 7786 G4double G4Abla::getdeltabinding(G4double A, G4int H){
                                                   >> 7787  if(A<1.)return (1.*H)/A*(10.68*A-21.27*std::pow(A,2./3.))*10.;
                                                   >> 7788  return (1.*H)/A*(10.68*A-21.27*std::pow(A,2./3.));
9472 }                                                7789 }
9473                                                  7790 
9474 G4double G4Abla::getdeltabinding(G4double A,  << 
9475 {                                             << 
9476     if (A < 1.)                               << 
9477         return (1. * H) / A * (10.68 * A - 21 << 
9478     return (1. * H) / A * (10.68 * A - 21.27  << 
9479 }                                             << 
9480                                               << 
9481 G4double G4Abla::gethyperseparation(G4double  << 
9482 {                                             << 
9483     if (A < 1.)                               << 
9484         return 1.e38;                         << 
9485     // For light nuclei we take experimental  << 
9486     // Journal of Physics G, Nucl Part Phys 3 << 
9487     if (ny == 1)                              << 
9488     {                                         << 
9489         if (Z == 1 && A == 4)                 << 
9490             return 2.04;                      << 
9491         else if (Z == 2 && A == 4)            << 
9492             return 2.39;                      << 
9493         else if (Z == 2 && A == 5)            << 
9494             return 3.12;                      << 
9495         else if (Z == 2 && A == 6)            << 
9496             return 4.18;                      << 
9497         else if (Z == 2 && A == 7)            << 
9498             return 5.23;                      << 
9499         else if (Z == 2 && A == 8)            << 
9500             return 7.16;                      << 
9501         else if (Z == 3 && A == 6)            << 
9502             return 4.50;                      << 
9503         else if (Z == 3 && A == 7)            << 
9504             return 5.58;                      << 
9505         else if (Z == 3 && A == 8)            << 
9506             return 6.80;                      << 
9507         else if (Z == 3 && A == 9)            << 
9508             return 8.50;                      << 
9509         else if (Z == 4 && A == 7)            << 
9510             return 5.16;                      << 
9511         else if (Z == 4 && A == 8)            << 
9512             return 6.84;                      << 
9513         else if (Z == 4 && A == 9)            << 
9514             return 6.71;                      << 
9515         else if (Z == 4 && A == 10)           << 
9516             return 9.11;                      << 
9517         else if (Z == 5 && A == 9)            << 
9518             return 8.29;                      << 
9519         else if (Z == 5 && A == 10)           << 
9520             return 9.01;                      << 
9521         else if (Z == 5 && A == 11)           << 
9522             return 10.29;                     << 
9523         else if (Z == 5 && A == 12)           << 
9524             return 11.43;                     << 
9525         else if (Z == 6 && A == 12)           << 
9526             return 10.95;                     << 
9527         else if (Z == 6 && A == 13)           << 
9528             return 11.81;                     << 
9529         else if (Z == 6 && A == 14)           << 
9530             return 12.50;                     << 
9531         else if (Z == 7 && A == 14)           << 
9532             return 12.17;                     << 
9533         else if (Z == 7 && A == 15)           << 
9534             return 13.59;                     << 
9535         else if (Z == 8 && A == 16)           << 
9536             return 12.50;                     << 
9537         else if (Z == 8 && A == 17)           << 
9538             return 13.59;                     << 
9539         else if (Z == 14 && A == 28)          << 
9540             return 16.0;                      << 
9541         else if (Z == 39 && A == 89)          << 
9542             return 22.1;                      << 
9543         else if (Z == 57 && A == 139)         << 
9544             return 23.8;                      << 
9545         else if (Z == 82 && A == 208)         << 
9546             return 26.5;                      << 
9547     } // ny==1                                << 
9548     // For other nuclei we take Bethe-Weizsac << 
9549     return gethyperbinding(A, Z, ny) - gethyp << 
9550 }                                             << 
9551                                               << 
9552 G4double G4Abla::gethyperbinding(G4double A,  << 
9553 {                                             << 
9554     //                                        << 
9555     // Bethe-Weizsacker mass formula          << 
9556     // Journal of Physics G, Nucl Part Phys 3 << 
9557     //                                        << 
9558     if (A < 2 || Z < 2)                       << 
9559         return 0.;                            << 
9560     G4double N = A - Z - 1. * ny;             << 
9561     G4double be = 0., my = 1115.683, av = 15. << 
9562     if (mod(N, 2) == 1 && mod(Z, 2) == 1)     << 
9563         D = -12. / std::sqrt(A);              << 
9564     if (mod(N, 2) == 0 && mod(Z, 2) == 0)     << 
9565         D = 12. / std::sqrt(A);               << 
9566     //                                        << 
9567     G4double deltanew = (1. - std::exp(-1. *  << 
9568     //                                        << 
9569     be = av * A - as * std::pow(A, 2. / 3.) - << 
9570          asym * (N - Z) * (N - Z) / ((1. + st << 
9571          ny * (0.0335 * my - 26.7 - 48.7 / st << 
9572     return be;                                << 
9573 }                                             << 
9574                                               << 
9575 void G4Abla::unbound(G4double SN,             << 
9576                      G4double SP,             << 
9577                      G4double SD,             << 
9578                      G4double ST,             << 
9579                      G4double SHE,            << 
9580                      G4double SA,             << 
9581                      G4double BP,             << 
9582                      G4double BD,             << 
9583                      G4double BT,             << 
9584                      G4double BHE,            << 
9585                      G4double BA,             << 
9586                      G4double* PROBF,         << 
9587                      G4double* PROBN,         << 
9588                      G4double* PROBP,         << 
9589                      G4double* PROBD,         << 
9590                      G4double* PROBT,         << 
9591                      G4double* PROBHE,        << 
9592                      G4double* PROBA,         << 
9593                      G4double* PROBIMF,       << 
9594                      G4double* PROBG,         << 
9595                      G4double* ECN,           << 
9596                      G4double* ECP,           << 
9597                      G4double* ECD,           << 
9598                      G4double* ECT,           << 
9599                      G4double* ECHE,          << 
9600                      G4double* ECA)           << 
9601 {                                             << 
9602     G4double SBP = SP + BP;                   << 
9603     G4double SBD = SD + BD;                   << 
9604     G4double SBT = ST + BT;                   << 
9605     G4double SBHE = SHE + BHE;                << 
9606     G4double SBA = SA + BA;                   << 
9607                                               << 
9608     G4double e = dmin1(SBP, SBD, SBT);        << 
9609     e = dmin1(SBHE, SN, e);                   << 
9610     e = dmin1(SBHE, SBA, e);                  << 
9611     //                                        << 
9612     if (SN == e)                              << 
9613     {                                         << 
9614         *ECN = (-1.0) * SN;                   << 
9615         *ECP = 0.0;                           << 
9616         *ECD = 0.0;                           << 
9617         *ECT = 0.0;                           << 
9618         *ECHE = 0.0;                          << 
9619         *ECA = 0.0;                           << 
9620         *PROBN = 1.0;                         << 
9621         *PROBP = 0.0;                         << 
9622         *PROBD = 0.0;                         << 
9623         *PROBT = 0.0;                         << 
9624         *PROBHE = 0.0;                        << 
9625         *PROBA = 0.0;                         << 
9626         *PROBIMF = 0.0;                       << 
9627         *PROBF = 0.0;                         << 
9628         *PROBG = 0.0;                         << 
9629     }                                         << 
9630     else if (SBP == e)                        << 
9631     {                                         << 
9632         *ECN = 0.0;                           << 
9633         *ECP = (-1.0) * SP + BP;              << 
9634         *ECD = 0.0;                           << 
9635         *ECT = 0.0;                           << 
9636         *ECHE = 0.0;                          << 
9637         *ECA = 0.0;                           << 
9638         *PROBN = 0.0;                         << 
9639         *PROBP = 1.0;                         << 
9640         *PROBD = 0.0;                         << 
9641         *PROBT = 0.0;                         << 
9642         *PROBHE = 0.0;                        << 
9643         *PROBA = 0.0;                         << 
9644         *PROBIMF = 0.0;                       << 
9645         *PROBF = 0.0;                         << 
9646         *PROBG = 0.0;                         << 
9647     }                                         << 
9648     else if (SBD == e)                        << 
9649     {                                         << 
9650         *ECN = 0.0;                           << 
9651         *ECD = (-1.0) * SD + BD;              << 
9652         *ECP = 0.0;                           << 
9653         *ECT = 0.0;                           << 
9654         *ECHE = 0.0;                          << 
9655         *ECA = 0.0;                           << 
9656         *PROBN = 0.0;                         << 
9657         *PROBP = 0.0;                         << 
9658         *PROBD = 1.0;                         << 
9659         *PROBT = 0.0;                         << 
9660         *PROBHE = 0.0;                        << 
9661         *PROBA = 0.0;                         << 
9662         *PROBIMF = 0.0;                       << 
9663         *PROBF = 0.0;                         << 
9664         *PROBG = 0.0;                         << 
9665     }                                         << 
9666     else if (SBT == e)                        << 
9667     {                                         << 
9668         *ECN = 0.0;                           << 
9669         *ECT = (-1.0) * ST + BT;              << 
9670         *ECD = 0.0;                           << 
9671         *ECP = 0.0;                           << 
9672         *ECHE = 0.0;                          << 
9673         *ECA = 0.0;                           << 
9674         *PROBN = 0.0;                         << 
9675         *PROBP = 0.0;                         << 
9676         *PROBD = 0.0;                         << 
9677         *PROBT = 1.0;                         << 
9678         *PROBHE = 0.0;                        << 
9679         *PROBA = 0.0;                         << 
9680         *PROBIMF = 0.0;                       << 
9681         *PROBF = 0.0;                         << 
9682         *PROBG = 0.0;                         << 
9683     }                                         << 
9684     else if (SBHE == e)                       << 
9685     {                                         << 
9686         *ECN = 0.0;                           << 
9687         *ECHE = (-1.0) * SHE + BHE;           << 
9688         *ECD = 0.0;                           << 
9689         *ECT = 0.0;                           << 
9690         *ECP = 0.0;                           << 
9691         *ECA = 0.0;                           << 
9692         *PROBN = 0.0;                         << 
9693         *PROBP = 0.0;                         << 
9694         *PROBD = 0.0;                         << 
9695         *PROBT = 0.0;                         << 
9696         *PROBHE = 1.0;                        << 
9697         *PROBA = 0.0;                         << 
9698         *PROBIMF = 0.0;                       << 
9699         *PROBF = 0.0;                         << 
9700         *PROBG = 0.0;                         << 
9701     }                                         << 
9702     else                                      << 
9703     {                                         << 
9704         if (SBA == e)                         << 
9705         {                                     << 
9706             *ECN = 0.0;                       << 
9707             *ECA = (-1.0) * SA + BA;          << 
9708             *ECD = 0.0;                       << 
9709             *ECT = 0.0;                       << 
9710             *ECHE = 0.0;                      << 
9711             *ECP = 0.0;                       << 
9712             *PROBN = 0.0;                     << 
9713             *PROBP = 0.0;                     << 
9714             *PROBD = 0.0;                     << 
9715             *PROBT = 0.0;                     << 
9716             *PROBHE = 0.0;                    << 
9717             *PROBA = 1.0;                     << 
9718             *PROBIMF = 0.0;                   << 
9719             *PROBF = 0.0;                     << 
9720             *PROBG = 0.0;                     << 
9721         }                                     << 
9722     }                                         << 
9723                                                  7791 
9724     return;                                   << 7792 G4double G4Abla::gethyperseparation(G4double A, G4double Z, G4int ny){
                                                   >> 7793  if(A<1.)return 1.e38;
                                                   >> 7794 // For light nuclei we take experimental values
                                                   >> 7795 // Journal of Physics G, Nucl Part Phys 32,363 (2006)
                                                   >> 7796  if(ny==1){
                                                   >> 7797  if(Z==1 && A==4) return 2.04;
                                                   >> 7798  else if(Z==2 && A==4) return 2.39;
                                                   >> 7799  else if(Z==2 && A==5) return 3.12;
                                                   >> 7800  else if(Z==2 && A==6) return 4.18;
                                                   >> 7801  else if(Z==2 && A==7) return 5.23;
                                                   >> 7802  else if(Z==2 && A==8) return 7.16;
                                                   >> 7803  else if(Z==3 && A==6) return 4.50;
                                                   >> 7804  else if(Z==3 && A==7) return 5.58;
                                                   >> 7805  else if(Z==3 && A==8) return 6.80;
                                                   >> 7806  else if(Z==3 && A==9) return 8.50;
                                                   >> 7807  else if(Z==4 && A==7) return 5.16;
                                                   >> 7808  else if(Z==4 && A==8) return 6.84;
                                                   >> 7809  else if(Z==4 && A==9) return 6.71;
                                                   >> 7810  else if(Z==4 && A==10) return 9.11;
                                                   >> 7811  else if(Z==5 && A==9) return 8.29;
                                                   >> 7812  else if(Z==5 && A==10) return 8.89;
                                                   >> 7813  else if(Z==5 && A==11) return 10.24;
                                                   >> 7814  else if(Z==5 && A==12) return 11.37;
                                                   >> 7815  else if(Z==6 && A==12) return 10.76;
                                                   >> 7816  else if(Z==6 && A==13) return 11.69;
                                                   >> 7817  else if(Z==6 && A==14) return 12.17;
                                                   >> 7818  else if(Z==14 && A==28) return 16.0;
                                                   >> 7819  else if(Z==39 && A==89) return 22.1;
                                                   >> 7820  else if(Z==57 && A==139) return 23.8;
                                                   >> 7821  else if(Z==82 && A==208) return 26.5;
                                                   >> 7822  }//ny==1
                                                   >> 7823 // For other nuclei we take Bethe-Weizsacker mass formula
                                                   >> 7824  return gethyperbinding(A, Z, ny)-gethyperbinding(A-1., Z, ny-1);
9725 }                                                7825 }
9726                                                  7826 
9727 void G4Abla::fissionDistri(G4double& A,       << 7827 G4double G4Abla::gethyperbinding(G4double A, G4double Z, G4int ny){
9728                            G4double& Z,       << 7828 //
9729                            G4double& E,       << 7829 // Bethe-Weizsacker mass formula
9730                            G4double& a1,      << 7830 // Journal of Physics G, Nucl Part Phys 32,363 (2006)
9731                            G4double& z1,      << 7831 //
9732                            G4double& e1,      << 7832  if(A<2 || Z<2)return 0.;
9733                            G4double& v1,      << 7833  G4double N = A-Z -1.*ny;
9734                            G4double& a2,      << 7834  G4double be=0., my = 1115.683,
9735                            G4double& z2,      << 7835  av = 15.77,
9736                            G4double& e2,      << 7836  as = 18.34,
9737                            G4double& v2,      << 7837  ac = 0.71,
9738                            G4double& vx_eva_s << 7838  asym = 23.21,
9739                            G4double& vy_eva_s << 7839  k = 17.,
9740                            G4double& vz_eva_s << 7840  c = 30.,
9741                            G4int* NbLam0_par) << 7841  D = 0.;
9742 {                                             << 7842  if(mod(N,2) == 1 && mod(Z,2) == 1)D = -12./std::sqrt(A);
9743                                               << 7843  if(mod(N,2) == 0 && mod(Z,2) == 0)D = 12./std::sqrt(A);
9744     /*                                        << 7844 //
9745       Last update:                            << 7845  G4double deltanew = (1.-std::exp(-1.*A/c))*D;
9746                                               << 7846 //
9747       21/01/17 - J.L.R.S. - Implementation of << 7847  be= av*A-as*std::pow(A,2./3.)-ac*Z*(Z-1.)/std::pow(A,1./3.)-asym*(N-Z)*(N-Z)/((1.+std::exp(-1.*A/k))*A)+deltanew + ny*(0.0335*my-26.7-48.7/std::pow(A,2.0/3.0));
9748                                               << 7848  return be;
9749                                               << 7849 }
9750       Authors: K.-H. Schmidt, A. Kelic, M. V. << 
9751                J.L.Rodriguez-Sanchez(1995 - 2 << 
9752                                               << 
9753       On input: A, Z, E (mass, atomic number  << 
9754                          before fission)      << 
9755       On output: Ai, Zi, Ei (mass, atomic num << 
9756                              fragment 1 and 2 << 
9757                                               << 
9758     */                                        << 
9759     /* This program calculates isotopic distr << 
9760     /* with a semiempirical model             << 
9761     /* The width and eventually a shift in N/ << 
9762     /* following rules:                       << 
9763     /*                                        << 
9764     /* The line N/Z following UCD has an angl << 
9765     /* to the horizontal axis on a chart of n << 
9766     /*   (For 238U the angle is 32.2 deg.)    << 
9767     /*                                        << 
9768     /*   The following relations hold: (from  << 
9769     c                                         << 
9770     c    sigma(N) (A=const) = sigma(Z) (A=con << 
9771     c    sigma(A) (N=const) = sigma(Z) (N=con << 
9772     c    sigma(A) (Z=const) = sigma(N) (Z=con << 
9773     c                                         << 
9774     c   From this we get:                     << 
9775     c    sigma(Z) (N=const) * N = sigma(N) (Z << 
9776     c    sigma(A) (Z=const) = sigma(Z) (A=con << 
9777     c    sigma(N) (Z=const) = sigma(Z) (A=con << 
9778     c    Z*sigma(N) (Z=const) = N*sigma(Z) (N << 
9779     //                                        << 
9780                                               << 
9781     /*   Model parameters:                    << 
9782     C     These parameters have been adjusted << 
9783     c     For the fission of another compound << 
9784     c     necessary to slightly adjust some p << 
9785     c     The most important ones are         << 
9786     C      Delta_U1_shell_max and             << 
9787     c      Delta_u2_shell.                    << 
9788     */                                        << 
9789     G4double Nheavy1_in; //  'position of she << 
9790     Nheavy1_in = 83.0;                        << 
9791                                               << 
9792     G4double Zheavy1_in; //  'position of she << 
9793     Zheavy1_in = 50.0;                        << 
9794                                               << 
9795     G4double Nheavy2; //  'position of heavy  << 
9796     Nheavy2 = 89.0;                           << 
9797                                               << 
9798     G4double Delta_U1_shell_max; //  'Shell e << 
9799     Delta_U1_shell_max = -2.45;               << 
9800                                               << 
9801     G4double U1NZ_SLOPE; // Reduction of shel << 
9802     U1NZ_SLOPE = 0.2;                         << 
9803                                               << 
9804     G4double Delta_U2_shell; //  'Shell effec << 
9805     Delta_U2_shell = -2.45;                   << 
9806                                               << 
9807     G4double X_s2s; //  'Ratio (C_sad/C_scis) << 
9808     X_s2s = 0.8;                              << 
9809                                               << 
9810     G4double hbom1, hbom2, hbom3; //  'Curvat << 
9811     hbom1 = 0.2;                  // hbom1 is << 
9812     hbom2 = 0.2;                  // hbom2 is << 
9813     hbom3 = 0.2;                  // hbom3 is << 
9814                                               << 
9815     G4double Fwidth_asymm1, Fwidth_asymm2, Fw << 
9816     //         'Factors for widths of distr.  << 
9817     Fwidth_asymm1 = 0.65;                     << 
9818     Fwidth_asymm2 = 0.65;                     << 
9819     Fwidth_symm = 1.16;                       << 
9820                                               << 
9821     G4double xLevdens; // 'Parameter x: a = A << 
9822     xLevdens = 10.75;                         << 
9823     //     The value of 1/0.093 = 10.75 is co << 
9824     //     systematics of the mass widths of  << 
9825                                               << 
9826     G4double FGAMMA; // 'Factor to gamma'     << 
9827     FGAMMA = 1.;     // Theoretical expectati << 
9828     //     Additional factor to attenuation c << 
9829     //     with increasing excitation energy  << 
9830                                               << 
9831     G4double FGAMMA1; // 'Factor to gamma_hea << 
9832     FGAMMA1 = 2.;                             << 
9833     //     Adjusted to reduce the weight of S << 
9834     //     excitation energies, as required b << 
9835                                               << 
9836     G4double FREDSHELL;                       << 
9837     FREDSHELL = 0.;                           << 
9838     //     Adjusted to the reduced attenuatio << 
9839     //     If FGAMMA is modified,             << 
9840     //     FGAMMA * FREADSHELL should remain  << 
9841     //     the attenuation of the shell effec << 
9842     //     pairing energy ECRIT unchanged, wh << 
9843     //     adjusted to the mass yields of Viv << 
9844     //     energy range. A high value of FGAM << 
9845     //     attenuation of shell effects above << 
9846                                               << 
9847     G4double Ecrit;                           << 
9848     Ecrit = 5.;                               << 
9849     //     The value of ECRIT determines the  << 
9850     //     decrease of the shell effect below << 
9851     //     decrease above the superfluid rang << 
9852     const G4double d = 2.0; // 'Surface dista << 
9853                             // d = 2.0;       << 
9854                             //    Charge pola << 
9855     G4double cpol1;         // Charge polaris << 
9856     cpol1 = 0.35;           // calculated int << 
9857     G4double cpol2;         // Charge polaris << 
9858     cpol2 = 0.;             // calculated int << 
9859     G4double Friction_factor;                 << 
9860     Friction_factor = 1.0;                    << 
9861     G4double Nheavy1;            // position  << 
9862     G4double Delta_U1, Delta_U2; // used shel << 
9863     G4double cN_asymm1_shell, cN_asymm2_shell << 
9864     G4double gamma, gamma_heavy1, gamma_heavy << 
9865     G4double E_saddle_scission;               << 
9866     G4double Ysymm = 0.;                      << 
9867     G4double Yasymm1 = 0.;                    << 
9868     G4double Yasymm2 = 0.;                    << 
9869     G4double Nheavy1_eff;                     << 
9870     G4double Nheavy2_eff;                     << 
9871     G4double eexc1_saddle;                    << 
9872     G4double eexc2_saddle;                    << 
9873     G4double EEXC_MAX;                        << 
9874     G4double r_e_o;                           << 
9875     G4double cN_symm;                         << 
9876     G4double CZ;                              << 
9877     G4double Nheavy2_NZ;                      << 
9878     G4double N;                               << 
9879     G4double Aheavy1, Aheavy2;                << 
9880     G4double Sasymm1 = 0., Sasymm2 = 0., Ssym << 
9881     G4double Ssymm_mode1, Ssymm_mode2;        << 
9882     G4double wNasymm1_saddle, wNasymm2_saddle << 
9883     G4double wNasymm2_scission, wNsymm_scissi << 
9884     G4double wNasymm1, wNasymm2, wNsymm;      << 
9885     G4int imode;                              << 
9886     G4double rmode;                           << 
9887     G4double ZA1width;                        << 
9888     G4double N1r, N2r, A1r, N1, N2;           << 
9889     G4double Zsymm, Nsymm;                    << 
9890     G4double N1mean, N1width;                 << 
9891     G4double dUeff;                           << 
9892     /* effective shell effect at lowest barri << 
9893     G4double Eld;                             << 
9894     /* Excitation energy with respect to ld b << 
9895     G4double re1, re2, re3;                   << 
9896     G4double eps1, eps2;                      << 
9897     G4double Z1UCD, Z2UCD;                    << 
9898     G4double beta = 0., beta1 = 0., beta2 = 0 << 
9899     // double betacomplement;                 << 
9900     G4double DN1_POL;                         << 
9901     /* shift of most probable neutron number  << 
9902           according to polarization */        << 
9903     G4int i_help;                             << 
9904     G4double A_levdens;                       << 
9905     /* level-density parameter */             << 
9906     // double A_levdens_light1,A_levdens_ligh << 
9907     G4double A_levdens_heavy1, A_levdens_heav << 
9908                                               << 
9909     G4double R0 = 1.16;                       << 
9910                                               << 
9911     G4double epsilon_1_saddle, epsilon0_1_sad << 
9912     G4double epsilon_2_saddle, epsilon0_2_sad << 
9913     G4double epsilon_1_scission; //,epsilon0_ << 
9914     G4double epsilon_2_scission; //,epsilon0_ << 
9915     G4double epsilon_symm_scission;           << 
9916     /* modified energy */                     << 
9917     G4double E_eff1_saddle, E_eff2_saddle;    << 
9918     G4double Epot0_mode1_saddle, Epot0_mode2_ << 
9919     G4double Epot_mode1_saddle, Epot_mode2_sa << 
9920     G4double E_defo, E_defo1, E_defo2, E_scis << 
9921     G4double E_asym;                          << 
9922     G4double E1exc = 0., E2exc = 0.;          << 
9923     G4double E1exc_sigma, E2exc_sigma;        << 
9924     G4double TKER;                            << 
9925     G4double EkinR1, EkinR2;                  << 
9926     G4double MassCurv_scis, MassCurv_sadd;    << 
9927     G4double cN_symm_sadd;                    << 
9928     G4double Nheavy1_shell, Nheavy2_shell;    << 
9929     G4double wNasymm1_scission;               << 
9930     G4double Aheavy1_eff, Aheavy2_eff;        << 
9931     G4double Z1rr, Z1r;                       << 
9932     G4double E_HELP;                          << 
9933     G4double Z_scission, N_scission, A_scissi << 
9934     G4double Z2_over_A_eff;                   << 
9935     G4double beta1gs = 0., beta2gs = 0., beta << 
9936     G4double sigZmin;                         << 
9937     G4double DSN132, Delta_U1_shell, E_eff0_s << 
9938     G4int NbLam0 = (*NbLam0_par);             << 
9939     //                                        << 
9940     sigZmin = 0.5;                            << 
9941     N = A - Z; /*  neutron number of the fiss << 
9942                //                             << 
9943     cN_asymm1_shell = 0.700 * N / Z;          << 
9944     cN_asymm2_shell = 0.040 * N / Z;          << 
9945                                                  7850 
9946     //*************************************** << 7851 void G4Abla::unbound(G4double SN,G4double SP,G4double  SD,G4double ST,G4double SHE,G4double SA,G4double BP,G4double BD,G4double BT,G4double BHE,G4double BA,G4double *PROBF,G4double *PROBN,G4double *PROBP,G4double *PROBD,G4double *PROBT,G4double *PROBHE,G4double *PROBA,G4double *PROBIMF,G4double *PROBG,G4double *ECN,G4double *ECP,G4double *ECD,G4double *ECT,G4double *ECHE,G4double *ECA)
                                                   >> 7852 {
                                                   >> 7853  G4double SBP = SP + BP;
                                                   >> 7854  G4double SBD = SD + BD;
                                                   >> 7855  G4double SBT = ST + BT;
                                                   >> 7856  G4double SBHE = SHE + BHE;
                                                   >> 7857  G4double SBA = SA + BA;
9947                                                  7858 
9948     DSN132 = Nheavy1_in - N / Z * Zheavy1_in; << 7859  G4double e = dmin1(SBP,SBD,SBT);
9949     Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 << 7860         e = dmin1(SBHE,SN,e);
9950     /* Neutron number of valley Standard 1 */ << 7861         e = dmin1(SBHE,SBA,e);
9951     /* It is assumed that the 82-neutron shel << 7862 //
9952   c         the 50-proton shell effect. There << 7863  if(SN==e){
9953   c         the fissioning nucleus from the N << 7864      *ECN = (-1.0)*SN;
9954   c         change the position of the combin << 7865      *ECP = 0.0;
9955   c         deficient fissioning nuclei, the  << 7866      *ECD = 0.0;
9956   c         versa.  */                        << 7867      *ECT = 0.0;
9957                                               << 7868      *ECHE = 0.0;
9958     Delta_U1_shell = Delta_U1_shell_max + U1N << 7869      *ECA = 0.0;
9959     Delta_U1_shell = min(0., Delta_U1_shell); << 7870      *PROBN = 1.0;
9960     /* Empirical reduction of shell effect wi << 7871      *PROBP = 0.0;
9961     /* Fits (239U,n)f and 226Th e.-m.-induced << 7872      *PROBD = 0.0;
9962                                               << 7873      *PROBT = 0.0;
9963     Nheavy1 = N / A * Aheavy1; /* UCD */      << 7874      *PROBHE = 0.0;
9964     Aheavy2 = Nheavy2 * A / N;                << 7875      *PROBA = 0.0;
9965                                               << 7876      *PROBIMF = 0.0;
9966     Zsymm = Z / 2.0; /* proton number in symm << 7877      *PROBF = 0.0;
9967     Nsymm = N / 2.0;                          << 7878      *PROBG = 0.0;
9968     A_levdens = A / xLevdens;                 << 7879  }
9969     gamma = A_levdens / (0.40 * std::pow(A, 1 << 7880  else if(SBP==e){
9970     A_levdens_heavy1 = Aheavy1 / xLevdens;    << 7881      *ECN = 0.0;
9971     gamma_heavy1 = A_levdens_heavy1 / (0.40 * << 7882      *ECP = (-1.0)*SP + BP;
9972     A_levdens_heavy2 = Aheavy2 / xLevdens;    << 7883      *ECD = 0.0;
9973     gamma_heavy2 = A_levdens_heavy2 / (0.40 * << 7884      *ECT = 0.0;
9974                                               << 7885      *ECHE = 0.0;
9975     //     Energy dissipated from saddle to s << 7886      *ECA = 0.0;
9976     //     F. Rejmund et al., Nucl. Phys. A 6 << 7887      *PROBN = 0.0;
9977     E_saddle_scission = (-24. + 0.02227 * Z * << 7888      *PROBP = 1.0;
9978     E_saddle_scission = max(0.0, E_saddle_sci << 7889      *PROBD = 0.0;
9979                                               << 7890      *PROBT = 0.0;
9980     //     Fit to experimental result on curv << 7891      *PROBHE = 0.0;
9981     //     Parametrization of T. Enqvist acco << 7892      *PROBA = 0.0;
9982     //     MassCurv taken at scission.    */  << 7893      *PROBIMF = 0.0;
9983                                               << 7894      *PROBF = 0.0;
9984     Z2_over_A_eff = Z * Z / A;                << 7895      *PROBG = 0.0;
9985                                               << 7896  }
9986     if (Z2_over_A_eff < 34.0)                 << 7897  else if(SBD==e){
9987         MassCurv_scis = std::pow(10., -1.0933 << 7898      *ECN = 0.0;
9988     else                                      << 7899      *ECD = (-1.0)*SD + BD;
9989         MassCurv_scis = std::pow(10., 3.05353 << 7900      *ECP = 0.0;
9990                                               << 7901      *ECT = 0.0;
9991     //     to do:                             << 7902      *ECHE = 0.0;
9992     //     fix the X with the channel intensi << 7903      *ECA = 0.0;
9993     //     replace then (all) cN_symm by cN_s << 7904      *PROBN = 0.0;
9994     MassCurv_sadd = X_s2s * MassCurv_scis;    << 7905      *PROBP = 0.0;
9995                                               << 7906      *PROBD = 1.0;
9996     cN_symm = 8.0 / std::pow(N, 2.) * MassCur << 7907      *PROBT = 0.0;
9997     cN_symm_sadd = 8.0 / std::pow(N, 2.) * Ma << 7908      *PROBHE = 0.0;
9998                                               << 7909      *PROBA = 0.0;
9999     Nheavy1_shell = Nheavy1;                  << 7910      *PROBIMF = 0.0;
10000                                              << 7911      *PROBF = 0.0;
10001     if (E < 100.0)                           << 7912      *PROBG = 0.0;
10002         Nheavy1_eff = (cN_symm_sadd * Nsymm  << 7913  }
10003                        cN_asymm1_shell * Uwa << 7914  else if(SBT==e){
10004                       (cN_symm_sadd + cN_asy << 7915      *ECN = 0.0;
10005     else                                     << 7916      *ECT = (-1.0)*ST + BT;
10006         Nheavy1_eff = (cN_symm_sadd * Nsymm  << 7917      *ECD = 0.0;
10007                                              << 7918      *ECP = 0.0;
10008     /* Position of Standard II defined by ne << 7919      *ECHE = 0.0;
10009     Nheavy2_NZ = Nheavy2;                    << 7920      *ECA = 0.0;
10010     Nheavy2_shell = Nheavy2_NZ;              << 7921      *PROBN = 0.0;
10011     if (E < 100.)                            << 7922      *PROBP = 0.0;
10012         Nheavy2_eff = (cN_symm_sadd * Nsymm  << 7923      *PROBD = 0.0;
10013                        cN_asymm2_shell * Uwa << 7924      *PROBT = 1.0;
10014                       (cN_symm_sadd + cN_asy << 7925      *PROBHE = 0.0;
10015     else                                     << 7926      *PROBA = 0.0;
10016         Nheavy2_eff = (cN_symm_sadd * Nsymm  << 7927      *PROBIMF = 0.0;
10017                                              << 7928      *PROBF = 0.0;
10018     Delta_U1 = Delta_U1_shell + (Nheavy1_she << 7929      *PROBG = 0.0;
10019                                     cN_asymm << 7930  }
10020     Delta_U1 = min(Delta_U1, 0.0);           << 7931  else if(SBHE==e){
10021     Delta_U2 = Delta_U2_shell + (Nheavy2_she << 7932      *ECN = 0.0;
10022                                     cN_asymm << 7933      *ECHE= (-1.0)*SHE + BHE;
10023     Delta_U2 = min(Delta_U2, 0.0);           << 7934      *ECD = 0.0;
10024                                              << 7935      *ECT = 0.0;
10025     //    liquid drop energies at the centre << 7936      *ECP = 0.0;
10026     //    with respect to liquid drop at sym << 7937      *ECA = 0.0;
10027     Epot0_mode1_saddle = (Nheavy1_eff - Nsym << 7938      *PROBN = 0.0;
10028     Epot0_mode2_saddle = (Nheavy2_eff - Nsym << 7939      *PROBP = 0.0;
10029     Epot0_symm_saddle = 0.0;                 << 7940      *PROBD = 0.0;
10030                                              << 7941      *PROBT = 0.0;
10031     //    energies including shell effects a << 7942      *PROBHE = 1.0;
10032     //    shell effects with respect to liqu << 7943      *PROBA = 0.0;
10033     Epot_mode1_saddle = Epot0_mode1_saddle + << 7944      *PROBIMF = 0.0;
10034     Epot_mode2_saddle = Epot0_mode2_saddle + << 7945      *PROBF = 0.0;
10035     Epot_symm_saddle = Epot0_symm_saddle;    << 7946      *PROBG = 0.0;
10036                                              << 7947  }
10037     //    minimum of potential with respect  << 7948  else{ 
10038     dUeff = min(Epot_mode1_saddle, Epot_mode << 7949     if(SBA==e){
10039     dUeff = min(dUeff, Epot_symm_saddle);    << 7950      *ECN = 0.0;
10040     dUeff = dUeff - Epot_symm_saddle;        << 7951      *ECA = (-1.0)*SA + BA;
10041                                              << 7952      *ECD = 0.0;
10042     Eld = E + dUeff;                         << 7953      *ECT = 0.0;
10043     //     E   = energy above lowest effecti << 7954      *ECHE = 0.0;
10044     //     Eld = energy above liquid-drop ba << 7955      *ECP = 0.0;
10045     //     Due to this treatment the energy  << 7956      *PROBN = 0.0;
10046     //     energy above the lowest saddle.   << 7957      *PROBP = 0.0;
10047                                              << 7958      *PROBD = 0.0;
10048     //    excitation energies at saddle mode << 7959      *PROBT = 0.0;
10049     epsilon0_1_saddle = Eld - Epot0_mode1_sa << 7960      *PROBHE = 0.0;
10050     epsilon0_2_saddle = Eld - Epot0_mode2_sa << 7961      *PROBA = 1.0;
10051                                              << 7962      *PROBIMF = 0.0;
10052     //    excitation energies at saddle mode << 7963      *PROBF = 0.0;
10053     epsilon_1_saddle = Eld - Epot_mode1_sadd << 7964      *PROBG = 0.0;
10054     epsilon_2_saddle = Eld - Epot_mode2_sadd << 7965     }
10055                                              << 7966  }
10056     epsilon_symm_saddle = Eld - Epot_symm_sa << 7967 
10057     //    epsilon_symm_saddle = Eld - dUeff; << 7968  return;
10058                                              << 7969 }
10059     eexc1_saddle = epsilon_1_saddle;         << 7970 
10060     eexc2_saddle = epsilon_2_saddle;         << 7971 void G4Abla::fissionDistri(G4double &A,G4double &Z,G4double &E,
10061                                              << 7972                G4double &a1,G4double &z1,G4double &e1,G4double &v1,
10062     //    EEXC_MAX is energy above the lowes << 7973                G4double &a2,G4double &z2,G4double &e2,G4double &v2,
10063     EEXC_MAX = max(eexc1_saddle, eexc2_saddl << 7974                            G4double &vx_eva_sc,G4double &vy_eva_sc,G4double &vz_eva_sc, 
10064     EEXC_MAX = max(EEXC_MAX, Eld);           << 7975                            G4int *NbLam0_par)
10065                                              << 7976 {
10066     //    excitation energy at scission */   << 7977 
10067     epsilon_1_scission = Eld + E_saddle_scis << 7978 /*
10068     epsilon_2_scission = Eld + E_saddle_scis << 7979   Last update:
10069                                              << 7980 
10070     //    excitation energy of symmetric fra << 7981   21/01/17 - J.L.R.S. - Implementation of this fission model in C++
10071     epsilon_symm_scission = Eld + E_saddle_s << 7982 
10072                                              << 7983 
10073     //    calculate widhts at the saddle     << 7984   Authors: K.-H. Schmidt, A. Kelic, M. V. Ricciardi,J. Benlliure, and 
10074     E_eff1_saddle =                          << 7985            J.L.Rodriguez-Sanchez(1995 - 2017)
10075         epsilon0_1_saddle - Delta_U1 * Uwash << 7986 
10076                                              << 7987   On input: A, Z, E (mass, atomic number and exc. energy of compound nucleus
10077     if (E_eff1_saddle < A_levdens * hbom1 *  << 7988                      before fission)
10078         E_eff1_saddle = A_levdens * hbom1 *  << 7989   On output: Ai, Zi, Ei (mass, atomic number and (absolute) exc. energy of
10079                                              << 7990                          fragment 1 and 2 after fission)
10080     wNasymm1_saddle = std::sqrt(             << 7991 
10081         0.50 * std::sqrt(1.0 / A_levdens * E << 7992 */
10082         (cN_asymm1_shell * Uwash(epsilon_1_s << 7993   /* This program calculates isotopic distributions of fission fragments    */
10083                                              << 7994   /* with a semiempirical model                                             */
10084     E_eff2_saddle =                          << 7995   /* The width and eventually a shift in N/Z (polarization) follows the     */
10085         epsilon0_2_saddle - Delta_U2 * Uwash << 7996   /* following rules:                                                       */
10086                                              << 7997   /*                                                                        */
10087     if (E_eff2_saddle < A_levdens * hbom2 *  << 7998   /* The line N/Z following UCD has an angle of atan(Zcn/Ncn)               */
10088         E_eff2_saddle = A_levdens * hbom2 *  << 7999   /* to the horizontal axis on a chart of nuclides.                         */
10089                                              << 8000 /*   (For 238U the angle is 32.2 deg.)                                      */
10090     wNasymm2_saddle = std::sqrt(             << 8001 /*                                                                        */
10091         0.50 * std::sqrt(1.0 / A_levdens * E << 8002 /*   The following relations hold: (from Armbruster)
10092         (cN_asymm2_shell * Uwash(epsilon_2_s << 8003 c
10093                                              << 8004 c    sigma(N) (A=const) = sigma(Z) (A=const)
10094     E_eff0_saddle = epsilon_symm_saddle;     << 8005 c    sigma(A) (N=const) = sigma(Z) (N=const)
10095     if (E_eff0_saddle < A_levdens * hbom3 *  << 8006 c    sigma(A) (Z=const) = sigma(N) (Z=const)
10096         E_eff0_saddle = A_levdens * hbom3 *  << 8007 c
10097                                              << 8008 c   From this we get:
10098     wNsymm_saddle = std::sqrt(0.50 * std::sq << 8009 c    sigma(Z) (N=const) * N = sigma(N) (Z=const) * Z
10099                                              << 8010 c    sigma(A) (Z=const) = sigma(Z) (A=const) * A/Z
10100     if (epsilon_symm_scission > 0.0)         << 8011 c    sigma(N) (Z=const) = sigma(Z) (A=const) * A/Z
10101     {                                        << 8012 c    Z*sigma(N) (Z=const) = N*sigma(Z) (N=const) = A*sigma(Z) (A=const)     */
10102         E_HELP = max(E_saddle_scission, epsi << 8013 //
10103         wNsymm_scission = std::sqrt(0.50 * s << 8014 
10104     }                                        << 8015 /*   Model parameters: 
10105     else                                     << 8016 C     These parameters have been adjusted to the compound nucleus 238U.
10106     {                                        << 8017 c     For the fission of another compound nucleus, it might be
10107         wNsymm_scission = std::sqrt(0.50 * s << 8018 c     necessary to slightly adjust some parameter values.
10108     }                                        << 8019 c     The most important ones are
                                                   >> 8020 C      Delta_U1_shell_max and
                                                   >> 8021 c      Delta_u2_shell.
                                                   >> 8022 */
                                                   >> 8023       G4double Nheavy1_in;   //  'position of shell for Standard 1'
                                                   >> 8024       Nheavy1_in = 83.0;
                                                   >> 8025 
                                                   >> 8026       G4double Zheavy1_in;   //  'position of shell for Standard 1'
                                                   >> 8027       Zheavy1_in = 50.0;
                                                   >> 8028 
                                                   >> 8029       G4double Nheavy2;   //  'position of heavy peak valley 2'
                                                   >> 8030       Nheavy2 = 89.0;
                                                   >> 8031 
                                                   >> 8032       G4double Delta_U1_shell_max;  //  'Shell effect for valley 1'
                                                   >> 8033       Delta_U1_shell_max = -2.45;
                                                   >> 8034 
                                                   >> 8035       G4double U1NZ_SLOPE;  // Reduction of shell effect with distance to 132Sn
                                                   >> 8036       U1NZ_SLOPE = 0.2;
                                                   >> 8037 
                                                   >> 8038       G4double Delta_U2_shell;  //  'Shell effect for valley 2'
                                                   >> 8039       Delta_U2_shell = -2.45;
                                                   >> 8040 
                                                   >> 8041       G4double X_s2s;   //  'Ratio (C_sad/C_scis) of curvature of potential'
                                                   >> 8042       X_s2s = 0.8;
                                                   >> 8043 
                                                   >> 8044       G4double hbom1,hbom2,hbom3;   //  'Curvature of potential at saddle'
                                                   >> 8045       hbom1 = 0.2;  // hbom1 is hbar * omega1 / (2 pi) !!!
                                                   >> 8046       hbom2 = 0.2;  // hbom2 is hbar * omega2 / (2 pi) !!!
                                                   >> 8047       hbom3 = 0.2;  // hbom3 is hbar * omega3 / (2 pi) !!!
                                                   >> 8048 
                                                   >> 8049       G4double Fwidth_asymm1,Fwidth_asymm2,Fwidth_symm;
                                                   >> 8050 //         'Factors for widths of distr. valley 1 and 2'
                                                   >> 8051       Fwidth_asymm1 = 0.65;
                                                   >> 8052       Fwidth_asymm2 = 0.65;
                                                   >> 8053       Fwidth_symm   = 1.16;
                                                   >> 8054 
                                                   >> 8055       G4double xLevdens;   // 'Parameter x: a = A/x'
                                                   >> 8056       xLevdens = 10.75;
                                                   >> 8057 //     The value of 1/0.093 = 10.75 is consistent with the
                                                   >> 8058 //     systematics of the mass widths of Ref. (RuI97).
                                                   >> 8059 
                                                   >> 8060       G4double FGAMMA; // 'Factor to gamma'
                                                   >> 8061       FGAMMA = 1.;  // Theoretical expectation, not adjusted to data.
                                                   >> 8062 //     Additional factor to attenuation coefficient of shell effects
                                                   >> 8063 //     with increasing excitation energy
                                                   >> 8064 
                                                   >> 8065       G4double FGAMMA1; // 'Factor to gamma_heavy1'
                                                   >> 8066       FGAMMA1 = 2.;
                                                   >> 8067 //     Adjusted to reduce the weight of Standard 1 with increasing
                                                   >> 8068 //     excitation energies, as required by experimental data.
                                                   >> 8069 
                                                   >> 8070       G4double FREDSHELL;
                                                   >> 8071       FREDSHELL = 0.;
                                                   >> 8072 //     Adjusted to the reduced attenuation of shells in the superfluid region.
                                                   >> 8073 //     If FGAMMA is modified,
                                                   >> 8074 //     FGAMMA * FREADSHELL should remain constant (0.65) to keep
                                                   >> 8075 //     the attenuation of the shell effects below the critical
                                                   >> 8076 //     pairing energy ECRIT unchanged, which has been carefully
                                                   >> 8077 //     adjusted to the mass yields of Vives and Zoeller in this
                                                   >> 8078 //     energy range. A high value of FGAMMA leads ot a stronger
                                                   >> 8079 //     attenuation of shell effects above the superfluid region.
                                                   >> 8080 
                                                   >> 8081       G4double Ecrit;
                                                   >> 8082       Ecrit = 5.;
                                                   >> 8083 //     The value of ECRIT determines the transition from a weak
                                                   >> 8084 //     decrease of the shell effect below ECRIT to a stronger
                                                   >> 8085 //     decrease above the superfluid range.
                                                   >> 8086       const G4double d = 2.0;   // 'Surface distance of scission configuration'
                                                   >> 8087      // d = 2.0;
                                                   >> 8088 //    Charge polarisation from Wagemanns p. 397: 
                                                   >> 8089       G4double cpol1; // Charge polarisation standard I
                                                   >> 8090       cpol1 = 0.35;  // calculated internally with shells
                                                   >> 8091       G4double cpol2;  // Charge polarisation standard II
                                                   >> 8092       cpol2 = 0.;  // calculated internally from LDM
                                                   >> 8093       G4double Friction_factor;
                                                   >> 8094       Friction_factor = 1.0;
                                                   >> 8095       G4double Nheavy1;    // position of valley St 1 in Z and N
                                                   >> 8096       G4double Delta_U1,Delta_U2; // used shell effects
                                                   >> 8097       G4double cN_asymm1_shell, cN_asymm2_shell;
                                                   >> 8098       G4double gamma,gamma_heavy1,gamma_heavy2; // fading of shells
                                                   >> 8099       G4double E_saddle_scission;  // friction from saddle to scission
                                                   >> 8100       G4double Ysymm=0.;    // Yield of symmetric mode
                                                   >> 8101       G4double Yasymm1=0.;  // Yield of asymmetric mode 1
                                                   >> 8102       G4double Yasymm2=0.;  // Yield of asymmetric mode 2
                                                   >> 8103       G4double Nheavy1_eff; // Effective position of valley 1
                                                   >> 8104       G4double Nheavy2_eff; // Effective position of valley 2
                                                   >> 8105       G4double eexc1_saddle; // Excitation energy above saddle 1
                                                   >> 8106       G4double eexc2_saddle; // Excitation energy above saddle 2
                                                   >> 8107       G4double EEXC_MAX;  // Excitation energy above lowest saddle
                                                   >> 8108       G4double r_e_o;  // Even-odd effect in Z
                                                   >> 8109       G4double cN_symm;  // Curvature of symmetric valley
                                                   >> 8110       G4double CZ;  // Curvature of Z distribution for fixed A
                                                   >> 8111       G4double Nheavy2_NZ;  // Position of Shell 2, combined N and Z
                                                   >> 8112       G4double N;
                                                   >> 8113       G4double Aheavy1,Aheavy2;
                                                   >> 8114       G4double Sasymm1=0.,Sasymm2=0.,Ssymm=0.,Ysum=0.,Yasymm=0.;
                                                   >> 8115       G4double Ssymm_mode1,Ssymm_mode2;
                                                   >> 8116       G4double wNasymm1_saddle, wNasymm2_saddle, wNsymm_saddle;
                                                   >> 8117       G4double wNasymm2_scission, wNsymm_scission;
                                                   >> 8118       G4double wNasymm1, wNasymm2, wNsymm;
                                                   >> 8119       G4int imode;
                                                   >> 8120       G4double  rmode;
                                                   >> 8121       G4double ZA1width;
                                                   >> 8122       G4double N1r,N2r,A1r,N1,N2;
                                                   >> 8123       G4double Zsymm,Nsymm;
                                                   >> 8124       G4double N1mean, N1width;
                                                   >> 8125       G4double dUeff;
                                                   >> 8126       /* effective shell effect at lowest barrier */
                                                   >> 8127       G4double Eld;
                                                   >> 8128       /* Excitation energy with respect to ld barrier */
                                                   >> 8129       G4double re1,re2,re3;
                                                   >> 8130       G4double eps1,eps2;
                                                   >> 8131       G4double Z1UCD,Z2UCD;
                                                   >> 8132       G4double beta,beta1,beta2;
                                                   >> 8133      // double betacomplement;
                                                   >> 8134       G4double DN1_POL;
                                                   >> 8135       /* shift of most probable neutron number for given Z,
                                                   >> 8136             according to polarization */
                                                   >> 8137       G4int i_help;
                                                   >> 8138       G4double A_levdens;
                                                   >> 8139             /* level-density parameter */
                                                   >> 8140      // double A_levdens_light1,A_levdens_light2;
                                                   >> 8141       G4double A_levdens_heavy1,A_levdens_heavy2;
                                                   >> 8142 
                                                   >> 8143       G4double R0=1.16;
                                                   >> 8144 
                                                   >> 8145       G4double epsilon_1_saddle,epsilon0_1_saddle;
                                                   >> 8146       G4double epsilon_2_saddle,epsilon0_2_saddle,epsilon_symm_saddle;
                                                   >> 8147       G4double epsilon_1_scission;//,epsilon0_1_scission;
                                                   >> 8148       G4double epsilon_2_scission;//,epsilon0_2_scission;
                                                   >> 8149       G4double epsilon_symm_scission;
                                                   >> 8150                                     /* modified energy */
                                                   >> 8151       G4double E_eff1_saddle,E_eff2_saddle;
                                                   >> 8152       G4double Epot0_mode1_saddle,Epot0_mode2_saddle,Epot0_symm_saddle;
                                                   >> 8153       G4double Epot_mode1_saddle,Epot_mode2_saddle,Epot_symm_saddle;
                                                   >> 8154       G4double E_defo,E_defo1,E_defo2,E_scission_pre,E_scission_post;
                                                   >> 8155       G4double E_asym;
                                                   >> 8156       G4double E1exc,E2exc;
                                                   >> 8157       G4double E1exc_sigma,E2exc_sigma;
                                                   >> 8158       G4double TKER;
                                                   >> 8159       G4double EkinR1,EkinR2;
                                                   >> 8160       G4double MassCurv_scis, MassCurv_sadd;
                                                   >> 8161       G4double cN_symm_sadd;
                                                   >> 8162       G4double Nheavy1_shell,Nheavy2_shell;
                                                   >> 8163       G4double wNasymm1_scission;
                                                   >> 8164       G4double Aheavy1_eff,Aheavy2_eff;
                                                   >> 8165       G4double Z1rr,Z1r;
                                                   >> 8166       G4double E_HELP;
                                                   >> 8167       G4double Z_scission,N_scission,A_scission;
                                                   >> 8168       G4double Z2_over_A_eff;
                                                   >> 8169       G4double beta1gs,beta2gs,betags;
                                                   >> 8170       G4double sigZmin;   // 'Minimum neutron width for constant Z'
                                                   >> 8171       G4double DSN132,Delta_U1_shell,E_eff0_saddle;//,e_scission;
                                                   >> 8172       G4int NbLam0= (*NbLam0_par);
                                                   >> 8173       //
                                                   >> 8174       sigZmin = 0.5;
                                                   >> 8175       N = A - Z;  /*  neutron number of the fissioning nucleus  */
                                                   >> 8176 //
                                                   >> 8177       cN_asymm1_shell = 0.700 * N/Z;
                                                   >> 8178       cN_asymm2_shell = 0.040 * N/Z;
10109                                                 8179 
10110     //    Calculate widhts at the scission p << 8180 //*********************************************************************
10111     //    fits of ref. Beizin 1991 (Plots by << 
10112                                                 8181 
10113     if (E_saddle_scission == 0.0)            << 8182       DSN132 = Nheavy1_in - N/Z * Zheavy1_in;
10114     {                                        << 8183       Aheavy1 = Nheavy1_in + Zheavy1_in + 0.340 * DSN132;
                                                   >> 8184      /* Neutron number of valley Standard 1 */
                                                   >> 8185      /* It is assumed that the 82-neutron shell effect is stronger than
                                                   >> 8186 c         the 50-proton shell effect. Therefore, the deviation in N/Z of
                                                   >> 8187 c         the fissioning nucleus from the N/Z of 132Sn will
                                                   >> 8188 c         change the position of the combined shell in mass. For neutron-
                                                   >> 8189 c         deficient fissioning nuclei, the mass will increase and vice
                                                   >> 8190 c         versa.  */
                                                   >> 8191 
                                                   >> 8192       Delta_U1_shell = Delta_U1_shell_max + U1NZ_SLOPE * std::abs(DSN132);
                                                   >> 8193       Delta_U1_shell = min(0.,Delta_U1_shell);
                                                   >> 8194       /* Empirical reduction of shell effect with distance in N/Z of CN to 132Sn */
                                                   >> 8195       /* Fits (239U,n)f and 226Th e.-m.-induced fission */
                                                   >> 8196 
                                                   >> 8197       Nheavy1 = N/A * Aheavy1;   /* UCD */
                                                   >> 8198       Aheavy2 = Nheavy2 * A/N;
                                                   >> 8199 
                                                   >> 8200       Zsymm  = Z / 2.0; /* proton number in symmetric fission (centre) */
                                                   >> 8201       Nsymm  = N / 2.0;
                                                   >> 8202       A_levdens = A / xLevdens;
                                                   >> 8203       gamma = A_levdens / (0.40 * std::pow(A,1.3333)) * FGAMMA;
                                                   >> 8204       A_levdens_heavy1 = Aheavy1 / xLevdens;
                                                   >> 8205       gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1,1.3333)) * FGAMMA * FGAMMA1;
                                                   >> 8206       A_levdens_heavy2 = Aheavy2 / xLevdens;
                                                   >> 8207       gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2,1.3333)) * FGAMMA;
                                                   >> 8208 
                                                   >> 8209 //     Energy dissipated from saddle to scission
                                                   >> 8210 //     F. Rejmund et al., Nucl. Phys. A 678 (2000) 215, fig. 4 b    */
                                                   >> 8211       E_saddle_scission = (-24. + 0.02227 * Z*Z/std::pow(A,0.33333))*Friction_factor;
                                                   >> 8212       E_saddle_scission = max( 0.0, E_saddle_scission );
                                                   >> 8213 
                                                   >> 8214 //     Fit to experimental result on curvature of potential at saddle
                                                   >> 8215 //     Parametrization of T. Enqvist according to Mulgin et al. 1998
                                                   >> 8216 //     MassCurv taken at scission.    */
                                                   >> 8217 
                                                   >> 8218        Z2_over_A_eff = Z*Z/A;
                                                   >> 8219 
                                                   >> 8220       if( Z2_over_A_eff< 34.0 )
                                                   >> 8221         MassCurv_scis = std::pow(10., -1.093364 + 0.082933 * Z2_over_A_eff - 0.0002602 * Z2_over_A_eff*Z2_over_A_eff);
                                                   >> 8222       else
                                                   >> 8223         MassCurv_scis = std::pow(10., 3.053536 - 0.056477 * Z2_over_A_eff+ 0.0002454 * Z2_over_A_eff*Z2_over_A_eff );
                                                   >> 8224 
                                                   >> 8225 //     to do:
                                                   >> 8226 //     fix the X with the channel intensities of 226Th (KHS at SEYSSINS,1998)
                                                   >> 8227 //     replace then (all) cN_symm by cN_symm_saddle (at least for Yields)
                                                   >> 8228       MassCurv_sadd = X_s2s * MassCurv_scis;
                                                   >> 8229 
                                                   >> 8230       cN_symm      = 8.0 / std::pow(N,2.) * MassCurv_scis;
                                                   >> 8231       cN_symm_sadd = 8.0 / std::pow(N,2.) * MassCurv_sadd;
                                                   >> 8232 
                                                   >> 8233       Nheavy1_shell = Nheavy1;
                                                   >> 8234 
                                                   >> 8235       if(E < 100.0)
                                                   >> 8236       Nheavy1_eff = (cN_symm_sadd*Nsymm + cN_asymm1_shell * 
                                                   >> 8237                      Uwash(E/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1) *
                                                   >> 8238                      Nheavy1_shell)
                                                   >> 8239                      / (cN_symm_sadd +
                                                   >> 8240                        cN_asymm1_shell *
                                                   >> 8241                      Uwash(E/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1));
                                                   >> 8242       else
                                                   >> 8243       Nheavy1_eff = (cN_symm_sadd*Nsymm +
                                                   >> 8244                     cN_asymm1_shell*Nheavy1_shell)
                                                   >> 8245                   / (cN_symm_sadd +
                                                   >> 8246                     cN_asymm1_shell);
                                                   >> 8247       
                                                   >> 8248       /* Position of Standard II defined by neutron shell */
                                                   >> 8249       Nheavy2_NZ = Nheavy2;
                                                   >> 8250       Nheavy2_shell = Nheavy2_NZ;
                                                   >> 8251       if (E < 100.)
                                                   >> 8252       Nheavy2_eff = (cN_symm_sadd*Nsymm +
                                                   >> 8253                     cN_asymm2_shell*
                                                   >> 8254                     Uwash(E/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2) *
                                                   >> 8255                     Nheavy2_shell)
                                                   >> 8256                   / (cN_symm_sadd +
                                                   >> 8257                     cN_asymm2_shell*
                                                   >> 8258                     Uwash(E/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2));
                                                   >> 8259       else
                                                   >> 8260       Nheavy2_eff = (cN_symm_sadd*Nsymm +
                                                   >> 8261                     cN_asymm2_shell*Nheavy2_shell)
                                                   >> 8262                   / (cN_symm_sadd +
                                                   >> 8263                     cN_asymm2_shell);
                                                   >> 8264      
                                                   >> 8265       Delta_U1 = Delta_U1_shell + (Nheavy1_shell - Nheavy1_eff)*(Nheavy1_shell - Nheavy1_eff) * cN_asymm1_shell; /* shell effect in valley of mode 1 */
                                                   >> 8266       Delta_U1 = min(Delta_U1,0.0);
                                                   >> 8267       Delta_U2 = Delta_U2_shell + (Nheavy2_shell - Nheavy2_eff)*(Nheavy2_shell - Nheavy2_eff) * cN_asymm2_shell; /* shell effect in valley of mode 2 */
                                                   >> 8268       Delta_U2 = min(Delta_U2,0.0);
                                                   >> 8269 
                                                   >> 8270 //    liquid drop energies at the centres of the different shell effects
                                                   >> 8271 //    with respect to liquid drop at symmetry
                                                   >> 8272       Epot0_mode1_saddle = (Nheavy1_eff-Nsymm)*(Nheavy1_eff-Nsymm) * cN_symm_sadd;
                                                   >> 8273       Epot0_mode2_saddle = (Nheavy2_eff-Nsymm)*(Nheavy2_eff-Nsymm) * cN_symm_sadd;
                                                   >> 8274       Epot0_symm_saddle = 0.0;
                                                   >> 8275 
                                                   >> 8276 //    energies including shell effects at the centres of the different
                                                   >> 8277 //    shell effects with respect to liquid drop at symmetry  */
                                                   >> 8278       Epot_mode1_saddle = Epot0_mode1_saddle + Delta_U1;
                                                   >> 8279       Epot_mode2_saddle = Epot0_mode2_saddle + Delta_U2;
                                                   >> 8280       Epot_symm_saddle = Epot0_symm_saddle;
                                                   >> 8281 
                                                   >> 8282 //    minimum of potential with respect to ld potential at symmetry
                                                   >> 8283       dUeff = min( Epot_mode1_saddle, Epot_mode2_saddle);
                                                   >> 8284       dUeff = min( dUeff, Epot_symm_saddle);
                                                   >> 8285       dUeff = dUeff - Epot_symm_saddle;
                                                   >> 8286 
                                                   >> 8287       Eld = E + dUeff;
                                                   >> 8288 //     E   = energy above lowest effective barrier
                                                   >> 8289 //     Eld = energy above liquid-drop barrier
                                                   >> 8290 //     Due to this treatment the energy E on input means the excitation
                                                   >> 8291 //     energy above the lowest saddle.                                  */
                                                   >> 8292 
                                                   >> 8293 //    excitation energies at saddle modes 1 and 2 without shell effect  */
                                                   >> 8294       epsilon0_1_saddle = Eld - Epot0_mode1_saddle;
                                                   >> 8295       epsilon0_2_saddle = Eld - Epot0_mode2_saddle;
                                                   >> 8296 
                                                   >> 8297 //    excitation energies at saddle modes 1 and 2 with shell effect */
                                                   >> 8298       epsilon_1_saddle = Eld - Epot_mode1_saddle;
                                                   >> 8299       epsilon_2_saddle = Eld - Epot_mode2_saddle;
                                                   >> 8300 
                                                   >> 8301       epsilon_symm_saddle = Eld - Epot_symm_saddle;
                                                   >> 8302 //    epsilon_symm_saddle = Eld - dUeff;
                                                   >> 8303 
                                                   >> 8304       eexc1_saddle = epsilon_1_saddle;
                                                   >> 8305       eexc2_saddle = epsilon_2_saddle;
                                                   >> 8306 
                                                   >> 8307 //    EEXC_MAX is energy above the lowest saddle */
                                                   >> 8308       EEXC_MAX = max( eexc1_saddle, eexc2_saddle);
                                                   >> 8309       EEXC_MAX = max( EEXC_MAX, Eld);
                                                   >> 8310 
                                                   >> 8311 //    excitation energy at scission */
                                                   >> 8312       epsilon_1_scission = Eld + E_saddle_scission - Epot_mode1_saddle;
                                                   >> 8313       epsilon_2_scission = Eld + E_saddle_scission - Epot_mode2_saddle;
                                                   >> 8314 
                                                   >> 8315 //    excitation energy of symmetric fragment at scission  */
                                                   >> 8316       epsilon_symm_scission = Eld + E_saddle_scission - Epot_symm_saddle;
                                                   >> 8317 
                                                   >> 8318 //    calculate widhts at the saddle
                                                   >> 8319       E_eff1_saddle = epsilon0_1_saddle - Delta_U1 *
                                                   >> 8320       Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1);
                                                   >> 8321 
                                                   >> 8322       if( E_eff1_saddle < A_levdens * hbom1*hbom1)
                                                   >> 8323           E_eff1_saddle = A_levdens * hbom1*hbom1;
                                                   >> 8324       
                                                   >> 8325       wNasymm1_saddle =
                                                   >> 8326         std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff1_saddle) /
                                                   >> 8327         (cN_asymm1_shell *
                                                   >> 8328       Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)+
                                                   >> 8329         cN_symm_sadd));
                                                   >> 8330 
                                                   >> 8331       E_eff2_saddle = epsilon0_2_saddle -
                                                   >> 8332       Delta_U2 *
                                                   >> 8333       Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2);
                                                   >> 8334 
                                                   >> 8335       if(E_eff2_saddle < A_levdens * hbom2*hbom2)
                                                   >> 8336           E_eff2_saddle = A_levdens * hbom2*hbom2;
                                                   >> 8337       
                                                   >> 8338       wNasymm2_saddle =
                                                   >> 8339         std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff2_saddle) /
                                                   >> 8340         (cN_asymm2_shell *
                                                   >> 8341        Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)+
                                                   >> 8342         cN_symm_sadd));
                                                   >> 8343 
                                                   >> 8344       E_eff0_saddle = epsilon_symm_saddle;
                                                   >> 8345       if(E_eff0_saddle < A_levdens * hbom3*hbom3)
                                                   >> 8346           E_eff0_saddle = A_levdens * hbom3*hbom3;
                                                   >> 8347       
                                                   >> 8348       wNsymm_saddle =
                                                   >> 8349           std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_eff0_saddle) /
                                                   >> 8350                     cN_symm_sadd);
                                                   >> 8351 
                                                   >> 8352       if(epsilon_symm_scission > 0.0 ){
                                                   >> 8353         E_HELP = max(E_saddle_scission,epsilon_symm_scission);
                                                   >> 8354         wNsymm_scission =
                                                   >> 8355         std::sqrt(0.50 * std::sqrt(1.0/A_levdens*(E_HELP)) /
                                                   >> 8356                     cN_symm);
                                                   >> 8357       }else{
                                                   >> 8358         wNsymm_scission =
                                                   >> 8359         std::sqrt(0.50 * std::sqrt(1.0/A_levdens*E_saddle_scission) /
                                                   >> 8360                     cN_symm);
                                                   >> 8361       }
                                                   >> 8362 
                                                   >> 8363 //    Calculate widhts at the scission point: 
                                                   >> 8364 //    fits of ref. Beizin 1991 (Plots by Sergei Zhdanov) 
                                                   >> 8365 
                                                   >> 8366       if( E_saddle_scission == 0.0 ){
10115         wNasymm1_scission = wNasymm1_saddle;    8367         wNasymm1_scission = wNasymm1_saddle;
10116         wNasymm2_scission = wNasymm2_saddle;    8368         wNasymm2_scission = wNasymm2_saddle;
10117     }                                        << 8369       }else{
10118     else                                     << 8370         if( Nheavy1_eff > 75.0 ){
10119     {                                        << 8371           wNasymm1_scission = std::sqrt(21.0)*N/A;
10120         if (Nheavy1_eff > 75.0)              << 8372           wNasymm2_scission = max( 12.8 - 1.0 *(92.0 - Nheavy2_eff),1.0)*N/A;
10121         {                                    << 8373 
10122             wNasymm1_scission = std::sqrt(21 << 8374         }else{
10123             wNasymm2_scission = max(12.8 - 1 << 8375            wNasymm1_scission = wNasymm1_saddle;
                                                   >> 8376            wNasymm2_scission = wNasymm2_saddle;
10124         }                                       8377         }
10125         else                                 << 8378       }
10126         {                                    << 
10127             wNasymm1_scission = wNasymm1_sad << 
10128             wNasymm2_scission = wNasymm2_sad << 
10129         }                                    << 
10130     }                                        << 
10131                                              << 
10132     wNasymm1_scission = max(wNasymm1_scissio << 
10133     wNasymm2_scission = max(wNasymm2_scissio << 
10134                                              << 
10135     wNasymm1 = wNasymm1_scission * Fwidth_as << 
10136     wNasymm2 = wNasymm2_scission * Fwidth_as << 
10137     wNsymm = wNsymm_scission * Fwidth_symm;  << 
10138                                              << 
10139     //     mass and charge of fragments usin << 
10140     Aheavy1_eff = Nheavy1_eff * A / N;       << 
10141     Aheavy2_eff = Nheavy2_eff * A / N;       << 
10142                                              << 
10143     A_levdens_heavy1 = Aheavy1_eff / xLevden << 
10144     A_levdens_heavy2 = Aheavy2_eff / xLevden << 
10145     gamma_heavy1 = A_levdens_heavy1 / (0.40  << 
10146     gamma_heavy2 = A_levdens_heavy2 / (0.40  << 
10147                                              << 
10148     if (epsilon_symm_saddle < A_levdens * hb << 
10149         Ssymm = 2.0 * std::sqrt(A_levdens *  << 
10150                 (epsilon_symm_saddle - A_lev << 
10151     else                                     << 
10152         Ssymm = 2.0 * std::sqrt(A_levdens *  << 
10153                                              << 
10154     Ysymm = 1.0;                             << 
10155                                              << 
10156     if (epsilon0_1_saddle < A_levdens * hbom << 
10157         Ssymm_mode1 = 2.0 * std::sqrt(A_levd << 
10158                       (epsilon0_1_saddle - A << 
10159     else                                     << 
10160         Ssymm_mode1 = 2.0 * std::sqrt(A_levd << 
10161                                              << 
10162     if (epsilon0_2_saddle < A_levdens * hbom << 
10163         Ssymm_mode2 = 2.0 * std::sqrt(A_levd << 
10164                       (epsilon0_2_saddle - A << 
10165     else                                     << 
10166         Ssymm_mode2 = 2.0 * std::sqrt(A_levd << 
10167                                              << 
10168     if (epsilon0_1_saddle - Delta_U1 * Uwash << 
10169         A_levdens * hbom1 * hbom1)           << 
10170         Sasymm1 =                            << 
10171             2.0 * std::sqrt(A_levdens * A_le << 
10172             (epsilon0_1_saddle - Delta_U1 *  << 
10173              A_levdens * hbom1 * hbom1) /    << 
10174                 hbom1;                       << 
10175     else                                     << 
10176         Sasymm1 = 2.0 * std::sqrt(A_levdens  << 
10177                                   (epsilon0_ << 
10178                                    Delta_U1  << 
10179                                              << 
10180     if (epsilon0_2_saddle - Delta_U2 * Uwash << 
10181         A_levdens * hbom2 * hbom2)           << 
10182         Sasymm2 =                            << 
10183             2.0 * std::sqrt(A_levdens * A_le << 
10184             (epsilon0_1_saddle - Delta_U1 *  << 
10185              A_levdens * hbom2 * hbom2) /    << 
10186                 hbom2;                       << 
10187     else                                     << 
10188         Sasymm2 = 2.0 * std::sqrt(A_levdens  << 
10189                                   (epsilon0_ << 
10190                                    Delta_U2  << 
10191                                                 8379 
10192     Yasymm1 = (std::exp(Sasymm1 - Ssymm) - s << 8380       wNasymm1_scission = max( wNasymm1_scission, wNasymm1_saddle );
                                                   >> 8381       wNasymm2_scission = max( wNasymm2_scission, wNasymm2_saddle );
10193                                                 8382 
10194     Yasymm2 = (std::exp(Sasymm2 - Ssymm) - s << 8383       wNasymm1 = wNasymm1_scission * Fwidth_asymm1;
                                                   >> 8384       wNasymm2 = wNasymm2_scission * Fwidth_asymm2;
                                                   >> 8385       wNsymm   = wNsymm_scission * Fwidth_symm;
                                                   >> 8386 
                                                   >> 8387 //     mass and charge of fragments using UCD, needed for level densities
                                                   >> 8388       Aheavy1_eff = Nheavy1_eff * A/N;
                                                   >> 8389       Aheavy2_eff = Nheavy2_eff * A/N;
                                                   >> 8390 
                                                   >> 8391       A_levdens_heavy1 = Aheavy1_eff / xLevdens;
                                                   >> 8392       A_levdens_heavy2 = Aheavy2_eff / xLevdens;
                                                   >> 8393       gamma_heavy1 = A_levdens_heavy1 / (0.40 * std::pow(Aheavy1_eff,1.3333)) * FGAMMA * FGAMMA1;
                                                   >> 8394       gamma_heavy2 = A_levdens_heavy2 / (0.40 * std::pow(Aheavy2_eff,1.3333)) * FGAMMA;
                                                   >> 8395 
                                                   >> 8396       if( epsilon_symm_saddle < A_levdens * hbom3*hbom3)
                                                   >> 8397         Ssymm = 2.0 * std::sqrt(A_levdens*A_levdens * hbom3*hbom3) +
                                                   >> 8398         (epsilon_symm_saddle - A_levdens * hbom3*hbom3)/hbom3;
                                                   >> 8399       else
                                                   >> 8400         Ssymm = 2.0 * std::sqrt(A_levdens*epsilon_symm_saddle);
                                                   >> 8401       
                                                   >> 8402       Ysymm = 1.0;
                                                   >> 8403 
                                                   >> 8404       if( epsilon0_1_saddle < A_levdens * hbom1*hbom1 )
                                                   >> 8405         Ssymm_mode1 = 2.0 * std::sqrt(A_levdens*A_levdens * hbom1*hbom1) +
                                                   >> 8406              (epsilon0_1_saddle - A_levdens * hbom1*hbom1)/hbom1;
                                                   >> 8407       else
                                                   >> 8408         Ssymm_mode1 = 2.0 * std::sqrt( A_levdens*epsilon0_1_saddle );
                                                   >> 8409 
                                                   >> 8410       if( epsilon0_2_saddle < A_levdens * hbom2*hbom2 )
                                                   >> 8411         Ssymm_mode2 = 2.0 * std::sqrt(A_levdens*A_levdens * hbom2*hbom2) +
                                                   >> 8412              (epsilon0_2_saddle - A_levdens * hbom2*hbom2)/hbom2;
                                                   >> 8413       else
                                                   >> 8414         Ssymm_mode2 = 2.0 * std::sqrt(A_levdens*epsilon0_2_saddle);
                                                   >> 8415 
                                                   >> 8416 
                                                   >> 8417       if( epsilon0_1_saddle -
                                                   >> 8418          Delta_U1*
                                                   >> 8419        Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)
                                                   >> 8420            < A_levdens * hbom1*hbom1 )
                                                   >> 8421         Sasymm1 = 2.0 * std::sqrt( A_levdens*A_levdens * hbom1*hbom1 ) +
                                                   >> 8422          (epsilon0_1_saddle - Delta_U1 *
                                                   >> 8423        Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)
                                                   >> 8424          - A_levdens * hbom1*hbom1)/hbom1;
                                                   >> 8425       else
                                                   >> 8426         Sasymm1 = 2.0 *std::sqrt( A_levdens*(epsilon0_1_saddle - Delta_U1 *
                                                   >> 8427         Uwash(epsilon_1_saddle/A*Aheavy1,Ecrit,FREDSHELL,gamma_heavy1)));
                                                   >> 8428       
                                                   >> 8429       if( epsilon0_2_saddle -
                                                   >> 8430         Delta_U2*
                                                   >> 8431         Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)
                                                   >> 8432         < A_levdens * hbom2*hbom2 )
                                                   >> 8433         Sasymm2 = 2.0 * std::sqrt( A_levdens*A_levdens * hbom2*hbom2 ) +
                                                   >> 8434          (epsilon0_1_saddle-Delta_U1 *
                                                   >> 8435          Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)
                                                   >> 8436          - A_levdens * hbom2*hbom2)/hbom2;
                                                   >> 8437       else
                                                   >> 8438         Sasymm2 = 2.0 *
                                                   >> 8439              std::sqrt( A_levdens*(epsilon0_2_saddle - Delta_U2 *
                                                   >> 8440        Uwash(epsilon_2_saddle/A*Aheavy2,Ecrit,FREDSHELL,gamma_heavy2)));
                                                   >> 8441 
                                                   >> 8442       Yasymm1 = ( std::exp(Sasymm1 - Ssymm) - std::exp(Ssymm_mode1 - Ssymm) ) *
                                                   >> 8443                  wNasymm1_saddle / wNsymm_saddle * 2.0;
10195                                                 8444 
10196     Ysum = Ysymm + Yasymm1 + Yasymm2; /* nor << 8445       Yasymm2 = ( std::exp(Sasymm2 - Ssymm) - std::exp(Ssymm_mode2 - Ssymm) ) *
                                                   >> 8446                  wNasymm2_saddle / wNsymm_saddle * 2.0;
10197                                                 8447 
10198     if (Ysum > 0.00)                         << 8448       Ysum = Ysymm + Yasymm1 + Yasymm2;  /* normalize */
10199     {                                        << 8449 
                                                   >> 8450       if( Ysum > 0.00 ){
10200         Ysymm = Ysymm / Ysum;                   8451         Ysymm = Ysymm / Ysum;
10201         Yasymm1 = Yasymm1 / Ysum;               8452         Yasymm1 = Yasymm1 / Ysum;
10202         Yasymm2 = Yasymm2 / Ysum;               8453         Yasymm2 = Yasymm2 / Ysum;
10203         Yasymm = Yasymm1 + Yasymm2;             8454         Yasymm = Yasymm1 + Yasymm2;
10204     }                                        << 8455       }else{
10205     else                                     << 
10206     {                                        << 
10207         Ysymm = 0.0;                            8456         Ysymm = 0.0;
10208         Yasymm1 = 0.0;                          8457         Yasymm1 = 0.0;
10209         Yasymm2 = 0.0;                          8458         Yasymm2 = 0.0;
10210         //       search minimum threshold an << 8459 //       search minimum threshold and attribute all events to this mode */
10211         if ((epsilon_symm_saddle < epsilon_1 << 8460         if( (epsilon_symm_saddle < epsilon_1_saddle) &&
10212             Ysymm = 1.0;                     << 8461             (epsilon_symm_saddle < epsilon_2_saddle) )
10213         else if (epsilon_1_saddle < epsilon_ << 8462           Ysymm = 1.0;
10214             Yasymm1 = 1.0;                   << 
10215         else                                    8463         else
                                                   >> 8464           if( epsilon_1_saddle < epsilon_2_saddle )
                                                   >> 8465             Yasymm1 = 1.0;
                                                   >> 8466           else
10216             Yasymm2 = 1.0;                      8467             Yasymm2 = 1.0;
10217     }                                        << 8468       }
10218     // even-odd effect                       << 8469   // even-odd effect
10219     // Parametrization from Rejmund et al.   << 8470   // Parametrization from Rejmund et al. 
10220     if (mod(Z, 2.0) == 0)                    << 8471      if (mod(Z,2.0)== 0)
10221         r_e_o = std::pow(10.0, -0.0170 * (E_ << 8472       r_e_o = std::pow(10.0,-0.0170 * (E_saddle_scission + Eld)*(E_saddle_scission + Eld));
10222     else                                     << 8473      else
10223         r_e_o = 0.0;                         << 8474       r_e_o = 0.0;
10224                                              << 8475      
10225     /*     --------------------------------- << 8476 /*     -------------------------------------------------------
10226     c     selecting the fission mode using t << 8477 c     selecting the fission mode using the yields at scission
10227     c     ---------------------------------- << 8478 c     -------------------------------------------------------
10228     c     random decision: symmetric or asym << 8479 c     random decision: symmetric or asymmetric
10229     c     IMODE = 1 means asymmetric fission << 8480 c     IMODE = 1 means asymmetric fission, mode 1
10230     c     IMODE = 2 means asymmetric fission << 8481 c     IMODE = 2 means asymmetric fission, mode 2
10231     c     IMODE = 3 means symmetric fission  << 8482 c     IMODE = 3 means symmetric fission
10232     c     testcase: 238U, E*= 6 MeV :    646 << 8483 c     testcase: 238U, E*= 6 MeV :    6467   8781   4752   (20000)
10233     c                                  12779 << 8484 c                                  127798 176480  95722  (400000)
10234     c                                  31991 << 8485 c                                  319919 440322 239759 (1000000)
10235     c                     E*=12 MeV :  15340 << 8486 c                     E*=12 MeV :  153407 293063 553530 (1000000) */
10236                                              << 8487 
10237 fiss321: // rmode = DBLE(HAZ(k))             << 8488  fiss321:  // rmode = DBLE(HAZ(k))
10238     rmode = G4AblaRandom::flat();            << 8489         rmode = G4AblaRandom::flat();
10239     if (rmode < Yasymm1)                     << 8490       if( rmode < Yasymm1 )
10240         imode = 1;                           << 8491          imode = 1;
10241     else if ((rmode > Yasymm1) && (rmode < Y << 8492       else
10242         imode = 2;                           << 8493          if( (rmode > Yasymm1) && (rmode < Yasymm) )
10243     else                                     << 8494             imode = 2;
10244         imode = 3;                           << 8495          else
10245                                              << 8496             imode = 3;
10246     //    determine parameters of the neutro << 8497          
10247     //    at scission                        << 8498 //    determine parameters of the neutron distribution of each mode
10248                                              << 8499 //    at scission
10249     if (imode == 1)                          << 8500 
10250     {                                        << 8501       if( imode == 1){
10251         N1mean = Nheavy1_eff;                << 8502          N1mean = Nheavy1_eff;
10252         N1width = wNasymm1;                  << 8503          N1width = wNasymm1;
10253     }                                        << 8504       }else{
10254     else                                     << 8505        if( imode == 2 ){
10255     {                                        << 8506          N1mean = Nheavy2_eff;
10256         if (imode == 2)                      << 8507          N1width = wNasymm2;
10257         {                                    << 8508        }else{
10258             N1mean = Nheavy2_eff;            << 8509         //if( imode == 3 ) then
10259             N1width = wNasymm2;              << 8510          N1mean = Nsymm;
10260         }                                    << 8511          N1width = wNsymm;
10261         else                                 << 8512        }
10262         {                                    << 8513       }
10263             // if( imode == 3 ) then         << 
10264             N1mean = Nsymm;                  << 
10265             N1width = wNsymm;                << 
10266         }                                    << 
10267     }                                        << 
10268                                                 8514 
10269     //     N2mean needed by CZ below         << 8515 //     N2mean needed by CZ below
10270     //  N2mean = N - N1mean;                    8516     //  N2mean = N - N1mean;
10271                                              << 8517       
10272     //     fission mode found, then the dete << 8518 //     fission mode found, then the determination of the
10273     //     neutron numbers N1 and N2 at scis << 8519 //     neutron numbers N1 and N2 at scission by randon decision
10274     N1r = 1.0;                               << 8520       N1r = 1.0;
10275     N2r = 1.0;                               << 8521       N2r = 1.0;
10276     while (N1r < 5.0 || N2r < 5.0)           << 8522       while( N1r < 5.0 || N2r < 5.0 ){
10277     {                                        << 8523        //  N1r = DBLE(GaussHaz(k,sngl(N1mean), sngl(N1width) ))
10278         //  N1r = DBLE(GaussHaz(k,sngl(N1mea << 
10279         // N1r = N1mean+G4AblaRandom::gaus(N    8524         // N1r = N1mean+G4AblaRandom::gaus(N1width);//
10280         N1r = gausshaz(0, N1mean, N1width);  << 8525          N1r = gausshaz(0,N1mean,N1width);
10281         N2r = N - N1r;                       << 8526          N2r = N - N1r;
10282     }                                        << 8527       }
10283                                                 8528 
10284     //     --------------------------------- << 8529 //     --------------------------------------------------
10285     //     first approximation of fission fr << 8530 //     first approximation of fission fragments using UCD at saddle
10286     //     --------------------------------- << 8531 //     --------------------------------------------------
10287     Z1UCD = Z / N * N1r;                     << 8532       Z1UCD = Z/N * N1r;
10288     Z2UCD = Z / N * N2r;                     << 8533       Z2UCD = Z/N * N2r;
10289     A1r = A / N * N1r;                       << 8534       A1r = A/N * N1r;
10290     //                                       << 8535 //
10291     //     --------------------------        << 8536 //     --------------------------
10292     //     deformations: starting ...        << 8537 //     deformations: starting ...
10293     //     --------------------------  */    << 8538 //     --------------------------  */
10294     if (imode == 1)                          << 8539       if( imode == 1 ){
10295     {                                        << 8540 // ---   N = 82  */
10296         // ---   N = 82  */                  << 8541         E_scission_pre = max( epsilon_1_scission, 1.0 );
10297         E_scission_pre = max(epsilon_1_sciss << 8542 //   ! Eexc at scission, neutron evaporation from saddle to scission not considered */
10298         //   ! Eexc at scission, neutron eva << 8543         if( N1mean > N*0.50 ){
10299         //   considered */                   << 8544           beta1  = 0.0;                   /*   1. fragment is spherical */
10300         if (N1mean > N * 0.50)               << 8545           beta2  = 0.55;                 /*   2. fragment is deformed  0.5*/
10301         {                                    << 8546         }else{
10302             beta1 = 0.0;  /*   1. fragment i << 8547           beta1  = 0.55;                 /*  1. fragment is deformed 0.5*/
10303             beta2 = 0.55; /*   2. fragment i << 8548           beta2  = 0.00;                  /*  2. fragment is spherical */
10304         }                                    << 8549         }
10305         else                                 << 8550        }
10306         {                                    << 8551       if( imode == 2 ){
10307             beta1 = 0.55; /*  1. fragment is << 8552 // ---   N appr. 86  */
10308             beta2 = 0.00; /*  2. fragment is << 8553         E_scission_pre = max( epsilon_2_scission, 1.0 );
10309         }                                    << 8554         if( N1mean > N*0.50 ){
10310     }                                        << 8555           beta1  = (N1r - 92.0) * 0.030 + 0.60;
10311     if (imode == 2)                          << 8556 
10312     {                                        << 8557           beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)];
10313         // ---   N appr. 86  */              << 8558           beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)];
10314         E_scission_pre = max(epsilon_2_sciss << 8559 
10315         if (N1mean > N * 0.50)               << 8560           beta1 = max(beta1,beta1gs);
10316         {                                    << 8561           beta2  = 1.0 - beta1;
10317             beta1 = (N1r - 92.0) * 0.030 + 0 << 8562           beta2 = max(beta2,beta2gs);
10318                                              << 8563         }else{
10319             beta1gs = ecld->beta2[idint(N1r) << 8564 
10320             beta2gs = ecld->beta2[idint(N2r) << 8565           beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)];
10321                                              << 8566           beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)];
10322             beta1 = max(beta1, beta1gs);     << 8567 
10323             beta2 = 1.0 - beta1;             << 8568           beta2  = (N2r -92.0) * 0.030 + 0.60;
10324             beta2 = max(beta2, beta2gs);     << 8569           beta2 = max(beta2,beta2gs);
                                                   >> 8570           beta1 = 1.0 - beta2;
                                                   >> 8571           beta1 = max(beta1,beta1gs);
10325         }                                       8572         }
10326         else                                 << 8573       }
10327         {                                    << 8574       beta = 0.0;
10328                                              << 8575       if( imode == 3 ){
10329             beta1gs = ecld->beta2[idint(N1r) << 8576 //      if( imode >0 ){
10330             beta2gs = ecld->beta2[idint(N2r) << 8577 // ---   Symmetric fission channel
10331                                              << 8578 //       the fit function for beta is the deformation for optimum energy
10332             beta2 = (N2r - 92.0) * 0.030 + 0 << 8579 //       at the scission point, d = 2
10333             beta2 = max(beta2, beta2gs);     << 8580 //       beta  : deformation of symmetric fragments
10334             beta1 = 1.0 - beta2;             << 8581 //       beta1 : deformation of first fragment
10335             beta1 = max(beta1, beta1gs);     << 8582 //       beta2 : deformation of second fragment
10336         }                                    << 
10337     }                                        << 
10338     beta = 0.0;                              << 
10339     if (imode == 3)                          << 
10340     {                                        << 
10341         //      if( imode >0 ){              << 
10342         // ---   Symmetric fission channel   << 
10343         //       the fit function for beta i << 
10344         //       at the scission point, d =  << 
10345         //       beta  : deformation of symm << 
10346         //       beta1 : deformation of firs << 
10347         //       beta2 : deformation of seco << 
10348         betags = ecld->beta2[idint(Nsymm)][i    8583         betags = ecld->beta2[idint(Nsymm)][idint(Zsymm)];
10349         beta1gs = ecld->beta2[idint(N1r)][id    8584         beta1gs = ecld->beta2[idint(N1r)][idint(Z1UCD)];
10350         beta2gs = ecld->beta2[idint(N2r)][id    8585         beta2gs = ecld->beta2[idint(N2r)][idint(Z2UCD)];
10351         beta = max(0.177963 + 0.0153241 * Zs << 8586         beta  = max(0.177963+0.0153241*Zsymm-1.62037e-4*Zsymm*Zsymm,betags);
10352         beta1 = max(0.177963 + 0.0153241 * Z << 8587         beta1 = max(0.177963+0.0153241*Z1UCD-1.62037e-4*Z1UCD*Z1UCD,beta1gs);
10353         beta2 = max(0.177963 + 0.0153241 * Z << 8588         beta2 = max(0.177963+0.0153241*Z2UCD-1.62037e-4*Z2UCD*Z2UCD,beta2gs);
10354                                              << 8589 
10355         E_asym = frldm(Z1UCD, N1r, beta1) +  << 8590         E_asym = frldm( Z1UCD, N1r, beta1 ) +
10356                  ecoul(Z1UCD, N1r, beta1, Z2 << 8591               frldm( Z2UCD, N2r, beta2 ) +
10357                  ecoul(Zsymm, Nsymm, beta, Z << 8592               ecoul( Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0 ) -
10358         E_scission_pre = max(epsilon_symm_sc << 8593               2.0 * frldm( Zsymm, Nsymm, beta ) -
10359     }                                        << 8594               ecoul( Zsymm, Nsymm, beta, Zsymm, Nsymm, beta, 2.0 );
10360     //     -----------------------           << 8595         E_scission_pre = max( epsilon_symm_scission - E_asym, 1. );
10361     //     ... end of deformations           << 8596       }
10362     //     -----------------------           << 8597 //     -----------------------
10363                                              << 8598 //     ... end of deformations
10364     //     --------------------------------- << 8599 //     -----------------------
10365     //     evaporation from saddle to scissi << 8600 
10366     //     --------------------------------- << 8601 //     ------------------------------------------
10367     if (E_scission_pre > 5. && NbLam0 < 1)   << 8602 //     evaporation from saddle to scission ...
10368     {                                        << 8603 //     ------------------------------------------     
10369         evap_postsaddle(                     << 8604       if(E_scission_pre>5. && NbLam0<1){
10370             A, Z, E_scission_pre, &E_scissio << 8605        evap_postsaddle(A,Z,E_scission_pre,&E_scission_post,
10371         N_scission = A_scission - Z_scission << 8606         &A_scission,&Z_scission,vx_eva_sc,vy_eva_sc,vz_eva_sc,&NbLam0);
10372     }                                        << 8607        N_scission = A_scission - Z_scission;
10373     else                                     << 8608       }else{
10374     {                                        << 8609        A_scission = A;
10375         A_scission = A;                      << 8610        Z_scission = Z;
10376         Z_scission = Z;                      << 8611        E_scission_post = E_scission_pre;
10377         E_scission_post = E_scission_pre;    << 8612        N_scission = A_scission - Z_scission;
10378         N_scission = A_scission - Z_scission << 8613       }
10379     }                                        << 8614 //     ---------------------------------------------------
10380     //     --------------------------------- << 8615 //     second approximation of fission fragments using UCD
10381     //     second approximation of fission f << 8616 //     --------------------------------------------------- */
10382     //     --------------------------------- << 8617 //
10383     //                                       << 8618       N1r = N1r * N_scission / N;
10384     N1r = N1r * N_scission / N;              << 8619       N2r = N2r * N_scission / N;
10385     N2r = N2r * N_scission / N;              << 8620       Z1UCD = Z1UCD * Z_scission / Z;
10386     Z1UCD = Z1UCD * Z_scission / Z;          << 8621       Z2UCD = Z2UCD * Z_scission / Z;
10387     Z2UCD = Z2UCD * Z_scission / Z;          << 8622       A1r = Z1UCD + N1r;
10388     A1r = Z1UCD + N1r;                       << 8623 
10389                                              << 8624 //     ---------------------------------------------------------
10390     //     --------------------------------- << 8625 //     determination of the charge and mass of the fragments ...
10391     //     determination of the charge and m << 8626 //     ---------------------------------------------------------
10392     //     --------------------------------- << 8627 
10393                                              << 8628 //     - CZ is the curvature of charge distribution for fixed mass,
10394     //     - CZ is the curvature of charge d << 8629 //       common to all modes, gives the width of the charge distribution.
10395     //       common to all modes, gives the  << 8630 //       The physics picture behind is that the division of the
10396     //       The physics picture behind is t << 8631 //       fissioning nucleus in N and Z is slow when mass transport from
10397     //       fissioning nucleus in N and Z i << 8632 //       one nascent fragment to the other is concerned but fast when the
10398     //       one nascent fragment to the oth << 8633 //       N/Z degree of freedom is concernded. In addition, the potential
10399     //       N/Z degree of freedom is concer << 8634 //       minima in direction of mass transport are broad compared to the
10400     //       minima in direction of mass tra << 8635 //       potential minimum in N/Z direction.
10401     //       potential minimum in N/Z direct << 8636 //          The minima in direction of mass transport are calculated
10402     //          The minima in direction of m << 8637 //          by the liquid-drop (LD) potential (for superlong mode),
10403     //          by the liquid-drop (LD) pote << 8638 //          by LD + N=82 shell (for standard 1 mode) and
10404     //          by LD + N=82 shell (for stan << 8639 //          by LD + N=86 shell (for standard 2 mode).
10405     //          by LD + N=86 shell (for stan << 8640 //          Since the variation of N/Z is fast, it can quickly adjust to
10406     //          Since the variation of N/Z i << 8641 //          the potential and is thus determined close to scission.
10407     //          the potential and is thus de << 8642 //          Thus, we calculate the mean N/Z and its width for fixed mass
10408     //          Thus, we calculate the mean  << 8643 //          at scission.
10409     //          at scission.                 << 8644 //          For the SL mode, the mean N/Z is calculated by the
10410     //          For the SL mode, the mean N/ << 8645 //          minimum of the potential at scission as a function of N/Z for
10411     //          minimum of the potential at  << 8646 //          fixed mass.
10412     //          fixed mass.                  << 8647 //          For the S1 and S2 modes, this correlation is imposed by the
10413     //          For the S1 and S2 modes, thi << 8648 //          empirical charge polarisation.
10414     //          empirical charge polarisatio << 8649 //          For the SL mode, the fluctuation in this width is calculated
10415     //          For the SL mode, the fluctua << 8650 //          from the curvature of the potential at scission as a function
10416     //          from the curvature of the po << 8651 //          of N/Z. This value is also used for the widths of S1 and S2.
10417     //          of N/Z. This value is also u << 8652 
10418                                              << 8653 
10419     //     Polarisation assumed for standard << 8654 //     Polarisation assumed for standard I and standard II:
10420     //      Z - Zucd = cpol (for A = const); << 8655 //      Z - Zucd = cpol (for A = const);
10421     //      from this we get (see remarks ab << 8656 //      from this we get (see remarks above)
10422     //      Z - Zucd =  Acn/Ncn * cpol (for  << 8657 //      Z - Zucd =  Acn/Ncn * cpol (for N = const)   */
10423     //                                       << 8658 //
10424     CZ = (frldm(Z1UCD - 1.0, N1r + 1.0, beta << 8659       CZ = ( frldm( Z1UCD-1.0, N1r+1.0, beta1 ) +
10425           frldm(Z1UCD + 1.0, N1r - 1.0, beta << 8660              frldm( Z2UCD+1.0, N2r-1.0, beta2 ) +
10426           ecoul(Z1UCD - 1.0, N1r + 1.0, beta << 8661              frldm( Z1UCD+1.0, N1r-1.0, beta1 ) +
10427           ecoul(Z1UCD + 1.0, N1r - 1.0, beta << 8662              frldm( Z2UCD-1.0, N2r+1.0, beta2 ) +
10428           2.0 * ecoul(Z1UCD, N1r, beta1, Z2U << 8663              ecoul( Z1UCD-1.0, N1r+1.0, beta1,
10429           2.0 * frldm(Z2UCD, N2r, beta2)) *  << 8664                     Z2UCD+1.0, N2r-1.0, beta2, 2.0) +
10430          0.50;                               << 8665              ecoul( Z1UCD+1.0, N1r-1.0, beta1,
10431     //                                       << 8666                     Z2UCD-1.0, N2r+1.0, beta2, 2.0) -
10432     if (1.0 / A_levdens * E_scission_post <  << 8667          2.0*ecoul( Z1UCD, N1r, beta1, Z2UCD, N2r, beta2, 2.0) -
                                                   >> 8668          2.0*frldm( Z1UCD, N1r, beta1 ) -
                                                   >> 8669          2.0*frldm( Z2UCD, N2r, beta2) ) * 0.50;
                                                   >> 8670 //
                                                   >> 8671       if(1.0/A_levdens*E_scission_post < 0.0)
10433         std::cout << "DSQRT 1 < 0" << A_levd    8672         std::cout << "DSQRT 1 < 0" << A_levdens << " " << E_scission_post << std::endl;
10434                                              << 8673       
10435     if (0.50 * std::sqrt(1.0 / A_levdens * E << 8674       if(0.50 * std::sqrt(1.0/A_levdens*E_scission_post) / CZ < 0.0){
10436     {                                        << 
10437         std::cout << "DSQRT 2 < 0 " << CZ <<    8675         std::cout << "DSQRT 2 < 0 " << CZ << std::endl;
10438         std::cout << "This event was not con    8676         std::cout << "This event was not considered" << std::endl;
10439         goto fiss321;                           8677         goto fiss321;
10440     }                                        << 8678       }
10441                                                 8679 
10442     ZA1width = std::sqrt(0.5 * std::sqrt(1.0 << 8680       ZA1width = std::sqrt(0.5*std::sqrt(1.0/A_levdens*E_scission_post)/CZ);
10443                                                 8681 
10444     //     Minimum width in N/Z imposed.     << 8682 //     Minimum width in N/Z imposed.
10445     //     Value of minimum width taken from << 8683 //     Value of minimum width taken from 235U(nth,f) data
10446     //     sigma_Z(A=const) = 0.4 to 0.5  (f << 8684 //     sigma_Z(A=const) = 0.4 to 0.5  (from Lang paper Nucl Phys. A345 (1980) 34)
10447     //     34) sigma_N(Z=const) = 0.45 * A/Z << 8685 //     sigma_N(Z=const) = 0.45 * A/Z  (= 1.16 for 238U)
10448     //      therefore: SIGZMIN = 1.16        << 8686 //      therefore: SIGZMIN = 1.16                                              
10449     //     Physics; variation in N/Z for fix << 8687 //     Physics; variation in N/Z for fixed A assumed.
10450     //      Thermal energy at scission is re << 8688 //      Thermal energy at scission is reduced by
10451     //      pre-scission neutron evaporation << 8689 //      pre-scission neutron evaporation"
10452                                              << 8690 
10453     ZA1width = max(ZA1width, sigZmin);       << 8691        ZA1width = max(ZA1width,sigZmin);
10454                                              << 8692 
10455     if (imode == 1 && cpol1 != 0.0)          << 8693       if(imode == 1 && cpol1 != 0.0){
10456     {                                        << 8694 //       --- asymmetric fission, mode 1 */
10457         //       --- asymmetric fission, mod << 8695        G4int IS = 0;
                                                   >> 8696        fiss2801:
                                                   >> 8697        Z1rr = Z1UCD - cpol1 * A_scission/N_scission;
                                                   >> 8698      // Z1r = DBLE(GaussHaz(k,sngl(Z1rr), sngl(ZA1width) ));
                                                   >> 8699       // Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);//
                                                   >> 8700        Z1r =gausshaz(0,Z1rr,ZA1width);
                                                   >> 8701        IS = IS +1;
                                                   >> 8702        if(IS>100){
                                                   >> 8703        std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl;
                                                   >> 8704          Z1r = Z1rr;
                                                   >> 8705        }
                                                   >> 8706        if ((utilabs(Z1rr - Z1r) > 3.0*ZA1width) || Z1r<1.0)goto fiss2801;
                                                   >> 8707        N1r = A1r - Z1r;
                                                   >> 8708       }else{
                                                   >> 8709         if( imode == 2 && cpol2 != 0.0 ){
                                                   >> 8710 //       --- asymmetric fission, mode 2 */
10458         G4int IS = 0;                           8711         G4int IS = 0;
10459     fiss2801:                                << 
10460         Z1rr = Z1UCD - cpol1 * A_scission /  << 
10461         // Z1r = DBLE(GaussHaz(k,sngl(Z1rr), << 
10462         // Z1r = Z1rr+G4AblaRandom::gaus(ZA1 << 
10463         Z1r = gausshaz(0, Z1rr, ZA1width);   << 
10464         IS = IS + 1;                         << 
10465         if (IS > 100)                        << 
10466         {                                    << 
10467             std::cout << "WARNING: GAUSSHAZ  << 
10468                          "CALCULATING Z1R IN << 
10469                       << std::endl;          << 
10470             Z1r = Z1rr;                      << 
10471         }                                    << 
10472         if ((utilabs(Z1rr - Z1r) > 3.0 * ZA1 << 
10473             goto fiss2801;                   << 
10474         N1r = A1r - Z1r;                     << 
10475     }                                        << 
10476     else                                     << 
10477     {                                        << 
10478         if (imode == 2 && cpol2 != 0.0)      << 
10479         {                                    << 
10480             //       --- asymmetric fission, << 
10481             G4int IS = 0;                    << 
10482         fiss2802:                               8712         fiss2802:
10483             Z1rr = Z1UCD - cpol2 * A_scissio << 8713         Z1rr = Z1UCD - cpol2 * A_scission/N_scission;
10484             // Z1r = Z1rr+G4AblaRandom::gaus << 8714         //Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);//
10485             Z1r = gausshaz(0, Z1rr, ZA1width << 8715         Z1r = gausshaz(0,Z1rr,ZA1width);
10486             IS = IS + 1;                     << 8716         IS = IS +1;
10487             if (IS > 100)                    << 8717         if(IS>100){
10488             {                                << 8718         std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl;
10489                 std::cout << "WARNING: GAUSS << 8719          Z1r = Z1rr;
10490                              "CALCULATING Z1 << 
10491                           << std::endl;      << 
10492                 Z1r = Z1rr;                  << 
10493             }                                << 
10494             if ((utilabs(Z1rr - Z1r) > 3.0 * << 
10495                 goto fiss2802;               << 
10496             N1r = A1r - Z1r;                 << 
10497         }                                       8720         }
10498         else                                 << 8721         if( (utilabs(Z1rr - Z1r) > 3.0*ZA1width) || Z1r < 1.0 ) goto fiss2802;
10499         {                                    << 8722         N1r = A1r - Z1r;
10500             //      Otherwise do; /* Imode = << 8723         }else{
10501             //      0 */                     << 8724 //      Otherwise do; /* Imode = 3 in any case; imode = 1 and 2 for CPOL = 0 */
10502             //       and symmetric case      << 8725 //       and symmetric case     */
10503             //         We treat a simultaneo << 8726 //         We treat a simultaneous split in Z and N to determine
10504             //         polarisation  */      << 8727 //         polarisation  */
10505                                              << 8728 
10506             re1 = frldm(Z1UCD - 1.0, N1r + 1 << 8729           re1 = frldm( Z1UCD-1.0, N1r+1.0, beta1 ) +
10507                   ecoul(Z1UCD - 1.0, N1r + 1 << 8730                 frldm( Z2UCD+1.0, N2r-1.0, beta2 ) +
10508             re2 = frldm(Z1UCD, N1r, beta1) + << 8731                 ecoul( Z1UCD-1.0, N1r+1.0, beta1,
10509                   ecoul(Z1UCD, N1r, beta1, Z << 8732                       Z2UCD+1.0, N2r-1.0, beta2, d ); /* d = 2 fm */
10510             re3 = frldm(Z1UCD + 1.0, N1r - 1 << 8733           re2 = frldm( Z1UCD, N1r, beta1) +
10511                   ecoul(Z1UCD + 1.0, N1r - 1 << 8734                 frldm( Z2UCD, N2r, beta2 ) +
10512             eps2 = (re1 - 2.0 * re2 + re3) / << 8735                 ecoul( Z1UCD, N1r, beta1,
10513             eps1 = (re3 - re1) / 2.0;        << 8736                       Z2UCD, N2r, beta2, d );  /*  d = 2 fm */
10514             DN1_POL = -eps1 / (2.0 * eps2);  << 8737           re3 = frldm( Z1UCD+1.0, N1r-1.0, beta1 ) +
10515             //                               << 8738                 frldm( Z2UCD-1.0, N2r+1.0, beta2 ) +
10516             Z1rr = Z1UCD + DN1_POL;          << 8739                 ecoul( Z1UCD+1.0, N1r-1.0, beta1,
10517                                              << 8740                       Z2UCD-1.0, N2r+1.0, beta2, d ); /* d = 2 fm */
10518             //       Polarization of Standar << 8741           eps2 = ( re1 - 2.0*re2 + re3 ) / 2.0;
10519             if (imode == 1)                  << 8742           eps1 = ( re3 - re1 ) / 2.0;
10520             {                                << 8743           DN1_POL = -eps1 / ( 2.0 * eps2 );
10521                 if (Z1rr > 50.0)             << 8744 //
10522                 {                            << 8745           Z1rr = Z1UCD + DN1_POL;
10523                     DN1_POL = DN1_POL - 0.6  << 
10524                     Z1rr = Z1UCD + DN1_POL;  << 
10525                     if (Z1rr < 50.)          << 
10526                         Z1rr = 50.0;         << 
10527                 }                            << 
10528                 else                         << 
10529                 {                            << 
10530                     DN1_POL = DN1_POL + 0.60 << 
10531                     Z1rr = Z1UCD + DN1_POL;  << 
10532                     if (Z1rr > 50.0)         << 
10533                         Z1rr = 50.0;         << 
10534                 }                            << 
10535             }                                << 
10536                                                 8746 
10537             G4int IS = 0;                    << 8747 //       Polarization of Standard 1 from shell effects around 132Sn
10538         fiss2803:                            << 8748           if ( imode == 1 ){
10539             // Z1r = Z1rr+G4AblaRandom::gaus << 8749             if ( Z1rr > 50.0 ){
10540             Z1r = gausshaz(0, Z1rr, ZA1width << 8750               DN1_POL = DN1_POL - 0.6 * Uwash(E_scission_post,Ecrit,FREDSHELL,gamma);
10541             IS = IS + 1;                     << 8751               Z1rr = Z1UCD + DN1_POL;
10542             if (IS > 100)                    << 8752               if ( Z1rr < 50. ) Z1rr = 50.0;
10543             {                                << 8753             }else{
10544                 std::cout << "WARNING: GAUSS << 8754               DN1_POL = DN1_POL + 0.60 * Uwash(E_scission_post,Ecrit,FREDSHELL,gamma);
10545                              "CALCULATING Z1 << 8755               Z1rr = Z1UCD + DN1_POL;
10546                           << std::endl;      << 8756               if ( Z1rr > 50.0 ) Z1rr = 50.0;
10547                 Z1r = Z1rr;                  << 
10548             }                                   8757             }
                                                   >> 8758           }
10549                                                 8759 
10550             if ((utilabs(Z1rr - Z1r) > 3.0 * << 8760         G4int IS = 0;
10551                 goto fiss2803;               << 8761         fiss2803:      
10552             N1r = A1r - Z1r;                 << 8762         //Z1r = Z1rr+G4AblaRandom::gaus(ZA1width);
                                                   >> 8763         Z1r = gausshaz(0,Z1rr,ZA1width);
                                                   >> 8764         IS = IS +1;
                                                   >> 8765         if(IS>100){
                                                   >> 8766         std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING Z1R IN PROFI.FOR. A VALUE WILL BE FORCED" << std::endl;
                                                   >> 8767          Z1r = Z1rr;
10553         }                                       8768         }
10554     }                                        << 
10555                                                 8769 
10556     //     --------------------------------- << 8770         if( (utilabs(Z1rr - Z1r) > 3.0*ZA1width) || (Z1r < 1.0) )goto fiss2803;
10557     //     Integer proton number with even-o << 8771         N1r = A1r - Z1r;
10558     //     --------------------------------- << 8772 
10559     even_odd(Z1r, r_e_o, i_help);            << 
10560                                              << 
10561     z1 = G4double(i_help);                   << 
10562     z2 = dint(Z_scission) - z1;              << 
10563     N1 = dint(N1r);                          << 
10564     N2 = dint(N_scission) - N1;              << 
10565     a1 = z1 + N1;                            << 
10566     a2 = z2 + N2;                            << 
10567                                              << 
10568     if ((z1 < 0) || (z2 < 0) || (a1 < 0) ||  << 
10569     {                                        << 
10570         std::cout << " --------------------- << 
10571         std::cout << " Z, A, N : " << Z << " << 
10572         std::cout << z1 << " " << z2 << " "  << 
10573         std::cout << E_scission_post << " "  << 
10574                                              << 
10575         std::cout << " --------------------- << 
10576     }                                        << 
10577                                              << 
10578     //     -----------------------           << 
10579     //     excitation energies ...           << 
10580     //     -----------------------           << 
10581     //                                       << 
10582     if (imode == 1)                          << 
10583     {                                        << 
10584         // ----  N = 82                      << 
10585         if (N1mean > N * 0.50)               << 
10586         {                                    << 
10587             //         (a) 1. fragment is sp << 
10588             E_defo = 0.0;                    << 
10589             beta2gs = ecld->beta2[idint(N2)] << 
10590             if (beta2 < beta2gs)             << 
10591                 beta2 = beta2gs;             << 
10592             E1exc = E_scission_pre * a1 / A  << 
10593             E_defo = frldm(z2, N2, beta2) -  << 
10594             E2exc = E_scission_pre * a2 / A  << 
10595         }                                    << 
10596         else                                 << 
10597         {                                    << 
10598             //         (b) 1. fragment is de << 
10599             beta1gs = ecld->beta2[idint(N1)] << 
10600             if (beta1 < beta1gs)             << 
10601                 beta1 = beta1gs;             << 
10602             E_defo = frldm(z1, N1, beta1) -  << 
10603             E1exc = E_scission_pre * a1 / A  << 
10604             E_defo = 0.0;                    << 
10605             E2exc = E_scission_pre * a2 / A  << 
10606         }                                       8773         }
10607     }                                        << 8774       }
                                                   >> 8775 
                                                   >> 8776 //     ------------------------------------------
                                                   >> 8777 //     Integer proton number with even-odd effect
                                                   >> 8778 //     ------------------------------------------ 
                                                   >> 8779       even_odd(Z1r, r_e_o, i_help);
                                                   >> 8780 
                                                   >> 8781       z1 = G4double(i_help);
                                                   >> 8782       z2 = dint( Z_scission ) - z1;
                                                   >> 8783       N1 = dint( N1r );
                                                   >> 8784       N2 = dint( N_scission ) - N1;
                                                   >> 8785       a1 = z1 + N1;
                                                   >> 8786       a2 = z2 + N2;
                                                   >> 8787 
                                                   >> 8788       if( (z1 < 0) || (z2 < 0) || (a1 < 0) || (a2 < 0) ){
                                                   >> 8789          std::cout << " -------------------------------" << std::endl;
                                                   >> 8790          std::cout << " Z, A, N : " << Z  << " " << A << " " << N << std::endl;
                                                   >> 8791          std::cout << z1 << " " << z2 << " " << a1 << " " << a2 << std::endl;
                                                   >> 8792          std::cout << E_scission_post << " " << A_levdens << " " << CZ <<  std::endl;
10608                                                 8793 
10609     if (imode == 2)                          << 8794          std::cout << " -------------------------------" << std::endl;
10610     {                                        << 8795       }
10611         // ---   N appr. 86 */               << 8796 
10612         if (N1mean > N * 0.5)                << 8797 //     -----------------------
10613         {                                    << 8798 //     excitation energies ...
10614             /*  2. fragment is spherical */  << 8799 //     -----------------------
10615             beta1gs = ecld->beta2[idint(N1)] << 8800 //
10616             if (beta1 < beta1gs)             << 8801       if( imode == 1 ){
10617                 beta1 = beta1gs;             << 8802 // ----  N = 82
10618             E_defo = frldm(z1, N1, beta1) -  << 8803         if( N1mean > N*0.50 ){
10619             E1exc = E_scission_pre * a1 / A  << 8804 //         (a) 1. fragment is spherical and  2. fragment is deformed */
10620             beta2gs = ecld->beta2[idint(N2)] << 8805           E_defo = 0.0;
10621             if (beta2 < beta2gs)             << 8806           beta2gs = ecld->beta2[idint(N2)][idint(z2)];
10622                 beta2 = beta2gs;             << 8807           if(beta2< beta2gs) beta2 = beta2gs;
10623             E_defo = frldm(z2, N2, beta2) -  << 8808           E1exc = E_scission_pre * a1 / A + E_defo;
10624             E2exc = E_scission_pre * a2 / A  << 8809           E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs );
                                                   >> 8810           E2exc = E_scission_pre * a2 / A + E_defo;
                                                   >> 8811         }else{
                                                   >> 8812 //         (b) 1. fragment is deformed and  2. fragment is spherical */
                                                   >> 8813           beta1gs = ecld->beta2[idint(N1)][idint(z1)];
                                                   >> 8814           if(beta1< beta1gs) beta1 = beta1gs;
                                                   >> 8815           E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs );
                                                   >> 8816           E1exc = E_scission_pre * a1 / A + E_defo;
                                                   >> 8817           E_defo = 0.0;
                                                   >> 8818           E2exc = E_scission_pre * a2 / A + E_defo;
10625         }                                       8819         }
10626         else                                 << 8820       }
10627         {                                    << 8821 
10628             /*  1. fragment is spherical */  << 8822 
10629             beta2gs = ecld->beta2[idint(N2)] << 8823       if( imode == 2 ){
10630             if (beta2 < beta2gs)             << 8824 // ---   N appr. 86 */
10631                 beta2 = beta2gs;             << 8825         if( N1mean > N*0.5 ){       
10632             E_defo = frldm(z2, N2, beta2) -  << 8826           /*  2. fragment is spherical */
10633             E2exc = E_scission_pre * a2 / A  << 8827           beta1gs = ecld->beta2[idint(N1)][idint(z1)];
10634             beta1gs = ecld->beta2[idint(N1)] << 8828           if(beta1< beta1gs) beta1 = beta1gs;
10635             if (beta1 < beta1gs)             << 8829           E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs );
10636                 beta1 = beta1gs;             << 8830           E1exc = E_scission_pre * a1 / A + E_defo;
10637             E_defo = frldm(z1, N1, beta1) -  << 8831           beta2gs = ecld->beta2[idint(N2)][idint(z2)];
10638             E1exc = E_scission_pre * a1 / A  << 8832           if(beta2< beta2gs) beta2 = beta2gs;
                                                   >> 8833           E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs );
                                                   >> 8834           E2exc = E_scission_pre * a2 / A + E_defo;
                                                   >> 8835         }else{                           
                                                   >> 8836           /*  1. fragment is spherical */
                                                   >> 8837           beta2gs = ecld->beta2[idint(N2)][idint(z2)];
                                                   >> 8838           if(beta2< beta2gs) beta2 = beta2gs;
                                                   >> 8839           E_defo = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs );
                                                   >> 8840           E2exc = E_scission_pre * a2 / A + E_defo;
                                                   >> 8841           beta1gs = ecld->beta2[idint(N1)][idint(z1)];
                                                   >> 8842           if(beta1< beta1gs) beta1 = beta1gs;
                                                   >> 8843           E_defo = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs );
                                                   >> 8844           E1exc = E_scission_pre * a1 / A + E_defo;
10639         }                                       8845         }
10640     }                                        << 8846       }
10641                                                 8847 
10642     if (imode == 3)                          << 8848       if( imode == 3 ){
10643     {                                        << 8849 // ---   Symmetric fission channel
10644         // ---   Symmetric fission channel   << 8850           beta1gs = ecld->beta2[idint(N1)][idint(z1)];
10645         beta1gs = ecld->beta2[idint(N1)][idi << 8851           if(beta1< beta1gs) beta1 = beta1gs;
10646         if (beta1 < beta1gs)                 << 8852           beta2gs = ecld->beta2[idint(N2)][idint(z2)];
10647             beta1 = beta1gs;                 << 8853           if(beta2< beta2gs) beta2 = beta2gs;
10648         beta2gs = ecld->beta2[idint(N2)][idi << 8854         E_defo1 = frldm( z1, N1, beta1 ) - frldm( z1, N1, beta1gs );
10649         if (beta2 < beta2gs)                 << 8855         E_defo2 = frldm( z2, N2, beta2 ) - frldm( z2, N2, beta2gs );
10650             beta2 = beta2gs;                 << 
10651         E_defo1 = frldm(z1, N1, beta1) - frl << 
10652         E_defo2 = frldm(z2, N2, beta2) - frl << 
10653         E1exc = E_scission_pre * a1 / A + E_    8856         E1exc = E_scission_pre * a1 / A + E_defo1;
10654         E2exc = E_scission_pre * a2 / A + E_    8857         E2exc = E_scission_pre * a2 / A + E_defo2;
10655     }                                        << 8858       }
                                                   >> 8859 
10656                                                 8860 
10657     //  pre-neutron-emission total kinetic e << 8861 //  pre-neutron-emission total kinetic energy */
10658     TKER = (z1 * z2 * 1.440) / (R0 * std::po << 8862     TKER = ( z1 * z2 * 1.440 ) /
10659                                 R0 * std::po << 8863            ( R0 * std::pow(a1,0.333330) * (1.0 + 2.0/3.0 * beta1 ) +
10660     //  Pre-neutron-emission kinetic energie << 8864              R0 * std::pow(a2,0.333330) * (1.0 + 2.0/3.0 * beta2 ) + 2.0 );
                                                   >> 8865 //  Pre-neutron-emission kinetic energies of the fragments */
10661     EkinR1 = TKER * a2 / A;                     8866     EkinR1 = TKER * a2 / A;
10662     EkinR2 = TKER * a1 / A;                     8867     EkinR2 = TKER * a1 / A;
10663     v1 = std::sqrt(EkinR1 / a1) * 1.3887;    << 8868     v1 = std::sqrt(EkinR1/a1) * 1.3887;
10664     v2 = std::sqrt(EkinR2 / a2) * 1.3887;    << 8869     v2 = std::sqrt(EkinR2/a2) * 1.3887;
10665                                                 8870 
10666     //  Extracted from Lang et al. Nucl. Phy << 8871 //  Extracted from Lang et al. Nucl. Phys. A 345 (1980) 34 */
10667     E1exc_sigma = 5.50;                         8872     E1exc_sigma = 5.50;
10668     E2exc_sigma = 5.50;                         8873     E2exc_sigma = 5.50;
10669                                                 8874 
10670 fis987:                                      << 8875     fis987:
10671     // e1 = E1exc+G4AblaRandom::gaus(E1exc_s << 8876     //e1 = E1exc+G4AblaRandom::gaus(E1exc_sigma);//
10672     e1 = gausshaz(0, E1exc, E1exc_sigma);    << 8877     e1 = gausshaz(0,E1exc,E1exc_sigma);
10673     if (e1 < 0.)                             << 8878     if(e1<0.)goto fis987;
10674         goto fis987;                         << 8879     fis988:
10675 fis988:                                      << 8880     //e2 = E2exc+G4AblaRandom::gaus(E2exc_sigma);//
10676     // e2 = E2exc+G4AblaRandom::gaus(E2exc_s << 8881     e2 = gausshaz(0,E2exc,E2exc_sigma);
10677     e2 = gausshaz(0, E2exc, E2exc_sigma);    << 8882     if(e2<0.)goto fis988;
10678     if (e2 < 0.)                             << 
10679         goto fis988;                         << 
10680                                                 8883 
10681     (*NbLam0_par) = NbLam0;                     8884     (*NbLam0_par) = NbLam0;
10682     return;                                     8885     return;
10683 }                                               8886 }
10684                                                 8887 
10685 void G4Abla::even_odd(G4double r_origin, G4d << 
10686 {                                            << 
10687     // Procedure to calculate I_OUT from R_I << 
10688     // on the average a flat distribution in << 
10689     // fluctuating distribution in I_OUT wit << 
10690     // given by R_EVEN_ODD                   << 
10691                                              << 
10692     //     /* ------------------------------ << 
10693     //     /* EXAMPLES :                     << 
10694     //     /* ------------------------------ << 
10695     //     /*    If R_EVEN_ODD = 0 :         << 
10696     //     /*           CEIL(R_IN)  ----     << 
10697     //     /*                                << 
10698     //     /*              R_IN ->           << 
10699     //     /*            (somewhere in betwe << 
10700     //     /*                                << 
10701     //     /*           FLOOR(R_IN) ----     << 
10702     //     /* ------------------------------ << 
10703     //     /*    If R_EVEN_ODD > 0 :         << 
10704     //     /*      The interval for the abov << 
10705     //     /*         larger for FLOOR(R_IN) << 
10706     //     /*         smaller for FLOOR(R_IN << 
10707     //     /*    For R_EVEN_ODD < 0 : just o << 
10708     //     /* ------------------------------ << 
10709                                              << 
10710     //     /* ------------------------------ << 
10711     //     /* On input:   R_ORIGIN    nuclea << 
10712     //     /*             R_EVEN_ODD  reques << 
10713     //     /* Intermediate quantity: R_IN =  << 
10714     //     /* On output:  I_OUT       nuclea << 
10715     //     /* ------------------------------ << 
10716                                              << 
10717     //      G4double R_ORIGIN,R_IN,R_EVEN_OD << 
10718     G4double r_in = 0.0, r_rest = 0.0, r_hel << 
10719     G4double r_floor = 0.0;                  << 
10720     G4double r_middle = 0.0;                 << 
10721     //      G4int I_OUT,N_FLOOR;             << 
10722     G4int n_floor = 0;                       << 
10723                                              << 
10724     r_in = r_origin + 0.5;                   << 
10725     r_floor = (G4double)((G4int)(r_in));     << 
10726     if (r_even_odd < 0.001)                  << 
10727     {                                        << 
10728         i_out = (G4int)(r_floor);            << 
10729     }                                        << 
10730     else                                     << 
10731     {                                        << 
10732         r_rest = r_in - r_floor;             << 
10733         r_middle = r_floor + 0.5;            << 
10734         n_floor = (G4int)(r_floor);          << 
10735         if (n_floor % 2 == 0)                << 
10736         {                                    << 
10737             // even before modif.            << 
10738             r_help = r_middle + (r_rest - 0. << 
10739         }                                    << 
10740         else                                 << 
10741         {                                    << 
10742             // odd before modification       << 
10743             r_help = r_middle + (r_rest - 0. << 
10744         }                                    << 
10745         i_out = (G4int)(r_help);             << 
10746     }                                        << 
10747 }                                            << 
10748                                                 8888 
10749 double G4Abla::umass(G4double z, G4double n, << 8889 void G4Abla::even_odd(G4double r_origin,G4double r_even_odd,G4int &i_out)     
10750 {                                               8890 {
10751     // liquid-drop mass, Myers & Swiatecki,  << 8891   // Procedure to calculate I_OUT from R_IN in a way that
10752     // pure liquid drop, without pairing and << 8892   // on the average a flat distribution in R_IN results in a
10753                                              << 8893   // fluctuating distribution in I_OUT with an even-odd effect as
10754     // On input:    Z     nuclear charge of  << 8894   // given by R_EVEN_ODD
10755     //              N     number of neutrons << 8895 
10756     //              beta  deformation of nuc << 8896   //     /* ------------------------------------------------------------ */
10757     // On output:   binding energy of nucleu << 8897   //     /* EXAMPLES :                                                   */
10758                                              << 8898   //     /* ------------------------------------------------------------ */
10759     G4double a = 0.0, fumass = 0.0;          << 8899   //     /*    If R_EVEN_ODD = 0 :                                       */
10760     G4double alpha = 0.0;                    << 8900   //     /*           CEIL(R_IN)  ----                                   */
10761     G4double xcom = 0.0, xvs = 0.0, xe = 0.0 << 8901   //     /*                                                              */
10762     const G4double pi = 3.1416;              << 8902   //     /*              R_IN ->                                         */
10763                                              << 8903   //     /*            (somewhere in between CEIL(R_IN) and FLOOR(R_IN)) */                                            */
10764     a = n + z;                               << 8904   //     /*                                                              */
10765     alpha = (std::sqrt(5.0 / (4.0 * pi))) *  << 8905   //     /*           FLOOR(R_IN) ----       --> I_OUT                   */
10766                                              << 8906   //     /* ------------------------------------------------------------ */
10767     xcom = 1.0 - 1.7826 * ((a - 2.0 * z) / a << 8907   //     /*    If R_EVEN_ODD > 0 :                                       */
10768     // factor for asymmetry dependence of su << 8908   //     /*      The interval for the above treatment is                 */
10769     xvs = -xcom * (15.4941 * a - 17.9439 * s << 8909   //     /*         larger for FLOOR(R_IN) = even and                    */
10770     // sum of volume and surface energy      << 8910   //     /*         smaller for FLOOR(R_IN) = odd                        */
10771     xe = z * z * (0.7053 / (std::pow(a, 1.0  << 8911   //     /*    For R_EVEN_ODD < 0 : just opposite treatment              */
10772     fumass = xvs + xe;                       << 8912   //     /* ------------------------------------------------------------ */
10773                                              << 8913 
10774     return fumass;                           << 8914   //     /* ------------------------------------------------------------ */
                                                   >> 8915   //     /* On input:   R_ORIGIN    nuclear charge (real number)         */
                                                   >> 8916   //     /*             R_EVEN_ODD  requested even-odd effect            */
                                                   >> 8917   //     /* Intermediate quantity: R_IN = R_ORIGIN + 0.5                 */
                                                   >> 8918   //     /* On output:  I_OUT       nuclear charge (integer)             */
                                                   >> 8919   //     /* ------------------------------------------------------------ */
                                                   >> 8920 
                                                   >> 8921   //      G4double R_ORIGIN,R_IN,R_EVEN_ODD,R_REST,R_HELP;
                                                   >> 8922   G4double r_in = 0.0, r_rest = 0.0, r_help = 0.0;
                                                   >> 8923   G4double r_floor = 0.0;
                                                   >> 8924   G4double r_middle = 0.0;
                                                   >> 8925   //      G4int I_OUT,N_FLOOR;
                                                   >> 8926   G4int n_floor = 0;
                                                   >> 8927 
                                                   >> 8928   r_in = r_origin + 0.5;
                                                   >> 8929   r_floor = (G4double)((G4int)(r_in));
                                                   >> 8930   if (r_even_odd < 0.001) {
                                                   >> 8931     i_out = (G4int)(r_floor);
                                                   >> 8932   } 
                                                   >> 8933   else {
                                                   >> 8934     r_rest = r_in - r_floor;
                                                   >> 8935     r_middle = r_floor + 0.5;
                                                   >> 8936     n_floor = (G4int)(r_floor);
                                                   >> 8937     if (n_floor%2 == 0) {
                                                   >> 8938       // even before modif.
                                                   >> 8939       r_help = r_middle + (r_rest - 0.5) * (1.0 - r_even_odd);
                                                   >> 8940     } 
                                                   >> 8941     else {
                                                   >> 8942       // odd before modification
                                                   >> 8943       r_help = r_middle + (r_rest - 0.5) * (1.0 + r_even_odd);
                                                   >> 8944     }
                                                   >> 8945     i_out = (G4int)(r_help);
                                                   >> 8946   }
                                                   >> 8947 }
                                                   >> 8948 
                                                   >> 8949 double G4Abla::umass(G4double z,G4double n,G4double beta)
                                                   >> 8950 {
                                                   >> 8951   // liquid-drop mass, Myers & Swiatecki, Lysekil, 1967
                                                   >> 8952   // pure liquid drop, without pairing and shell effects
                                                   >> 8953 
                                                   >> 8954   // On input:    Z     nuclear charge of nucleus
                                                   >> 8955   //              N     number of neutrons in nucleus
                                                   >> 8956   //              beta  deformation of nucleus
                                                   >> 8957   // On output:   binding energy of nucleus
                                                   >> 8958 
                                                   >> 8959   G4double a = 0.0, fumass = 0.0;
                                                   >> 8960   G4double alpha = 0.0;
                                                   >> 8961   G4double xcom = 0.0, xvs = 0.0, xe = 0.0;
                                                   >> 8962   const G4double pi = 3.1416;
                                                   >> 8963 
                                                   >> 8964   a = n + z;
                                                   >> 8965   alpha = ( std::sqrt(5.0/(4.0*pi)) ) * beta;
                                                   >> 8966   
                                                   >> 8967   xcom = 1.0 - 1.7826 * ((a - 2.0*z)/a)*((a - 2.0*z)/a);
                                                   >> 8968   // factor for asymmetry dependence of surface and volume term
                                                   >> 8969   xvs = - xcom * ( 15.4941 * a - 
                                                   >> 8970        17.9439 * std::pow(a,2.0/3.0) * (1.0+0.4*alpha*alpha) );
                                                   >> 8971   // sum of volume and surface energy
                                                   >> 8972   xe = z*z * (0.7053/(std::pow(a,1.0/3.0)) * (1.0-0.2*alpha*alpha) - 1.1529/a);
                                                   >> 8973   fumass = xvs + xe;
                                                   >> 8974   
                                                   >> 8975   return fumass;
                                                   >> 8976 }
                                                   >> 8977 
                                                   >> 8978 
                                                   >> 8979 double G4Abla::ecoul(G4double z1,G4double n1,G4double beta1,G4double z2,G4double n2,G4double beta2,G4double d)
                                                   >> 8980 {
                                                   >> 8981   // Coulomb potential between two nuclei
                                                   >> 8982   // surfaces are in a distance of d
                                                   >> 8983   // in a tip to tip configuration
                                                   >> 8984 
                                                   >> 8985   // approximate formulation
                                                   >> 8986   // On input: Z1      nuclear charge of first nucleus
                                                   >> 8987   //           N1      number of neutrons in first nucleus
                                                   >> 8988   //           beta1   deformation of first nucleus
                                                   >> 8989   //           Z2      nuclear charge of second nucleus
                                                   >> 8990   //           N2      number of neutrons in second nucleus
                                                   >> 8991   //           beta2   deformation of second nucleus
                                                   >> 8992   //           d       distance of surfaces of the nuclei
                                                   >> 8993 
                                                   >> 8994   //      G4double Z1,N1,beta1,Z2,N2,beta2,d,ecoul;
                                                   >> 8995   G4double fecoul = 0;
                                                   >> 8996   G4double dtot = 0;
                                                   >> 8997   const G4double r0 = 1.16;
                                                   >> 8998 
                                                   >> 8999   dtot = r0 * ( std::pow((z1+n1),1.0/3.0) * (1.0+0.6666667*beta1)
                                                   >> 9000     + std::pow((z2+n2),1.0/3.0) * (1.0+0.6666667*beta2) ) + d;
                                                   >> 9001   fecoul = z1 * z2 * 1.44 / dtot;
                                                   >> 9002 
                                                   >> 9003   return fecoul;
                                                   >> 9004 }
                                                   >> 9005 
                                                   >> 9006 
                                                   >> 9007  G4double G4Abla::Uwash(G4double E, G4double Ecrit,G4double Freduction,G4double gamma){
                                                   >> 9008         // E       excitation energy 
                                                   >> 9009         // Ecrit   critical pairing energy 
                                                   >> 9010         // Freduction  reduction factor for shell washing in superfluid region
                                                   >> 9011         G4double R_wash,uwash;
                                                   >> 9012         if(E < Ecrit)
                                                   >> 9013           R_wash = std::exp(-E * Freduction * gamma);
                                                   >> 9014         else
                                                   >> 9015           R_wash = std::exp(- Ecrit * Freduction * gamma -(E-Ecrit) * gamma);
                                                   >> 9016         
                                                   >> 9017         uwash = R_wash;
                                                   >> 9018  return uwash;
10775 }                                               9019 }
10776                                                 9020 
10777 double G4Abla::ecoul(G4double z1, G4double n << 
10778 {                                            << 
10779     // Coulomb potential between two nuclei  << 
10780     // surfaces are in a distance of d       << 
10781     // in a tip to tip configuration         << 
10782                                              << 
10783     // approximate formulation               << 
10784     // On input: Z1      nuclear charge of f << 
10785     //           N1      number of neutrons  << 
10786     //           beta1   deformation of firs << 
10787     //           Z2      nuclear charge of s << 
10788     //           N2      number of neutrons  << 
10789     //           beta2   deformation of seco << 
10790     //           d       distance of surface << 
10791                                                 9021 
10792     //      G4double Z1,N1,beta1,Z2,N2,beta2 << 9022 G4double G4Abla::frldm(G4double z,G4double n,G4double beta){
10793     G4double fecoul = 0;                     << 
10794     G4double dtot = 0;                       << 
10795     const G4double r0 = 1.16;                << 
10796                                                 9023 
10797     dtot = r0 * (std::pow((z1 + n1), 1.0 / 3 << 9024 //     Liquid-drop mass, Myers & Swiatecki, Lysekil, 1967
10798                  std::pow((z2 + n2), 1.0 / 3 << 9025 //     pure liquid drop, without pairing and shell effects
10799            d;                                << 9026 //
10800     fecoul = z1 * z2 * 1.44 / dtot;          << 9027 //     On input:    Z     nuclear charge of nucleus
10801                                              << 9028 //                  N     number of neutrons in nucleus
10802     return fecoul;                           << 9029 //                  beta  deformation of nucleus
10803 }                                            << 9030 //     On output:   binding energy of nucleus
10804                                              << 9031 // The idea is to use FRLDM model for beta=0 and using Lysekil
10805 G4double G4Abla::Uwash(G4double E, G4double  << 9032 // model to get the deformation energy
10806 {                                            << 9033 
10807     // E       excitation energy             << 9034       G4double a;
10808     // Ecrit   critical pairing energy       << 9035       a = n + z;
10809     // Freduction  reduction factor for shel << 9036       return eflmac_profi(a,z) + umass(z,n,beta) - umass(z,n,0.0);
10810     G4double R_wash, uwash;                  << 
10811     if (E < Ecrit)                           << 
10812         R_wash = std::exp(-E * Freduction *  << 
10813     else                                     << 
10814         R_wash = std::exp(-Ecrit * Freductio << 
10815                                              << 
10816     uwash = R_wash;                          << 
10817     return uwash;                            << 
10818 }                                               9037 }
10819                                                 9038 
10820 G4double G4Abla::frldm(G4double z, G4double  << 
10821 {                                            << 
10822                                              << 
10823     //     Liquid-drop mass, Myers & Swiatec << 
10824     //     pure liquid drop, without pairing << 
10825     //                                       << 
10826     //     On input:    Z     nuclear charge << 
10827     //                  N     number of neut << 
10828     //                  beta  deformation of << 
10829     //     On output:   binding energy of nu << 
10830     // The idea is to use FRLDM model for be << 
10831     // model to get the deformation energy   << 
10832                                              << 
10833     G4double a;                              << 
10834     a = n + z;                               << 
10835     return eflmac_profi(a, z) + umass(z, n,  << 
10836 }                                            << 
10837                                                 9039 
10838 //******************************************    9040 //**********************************************************************
10839 // *                                            9041 // *
10840 // * this function will calculate the liquid    9042 // * this function will calculate the liquid-drop nuclear mass for spheri
10841 // * configuration according to the preprint    9043 // * configuration according to the preprint NUCLEAR GROUND-STATE
10842 // * MASSES and DEFORMATIONS by P. M"oller e    9044 // * MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p.
10843 // * All constants are taken from this publi    9045 // * All constants are taken from this publication for consistency.
10844 // *                                            9046 // *
10845 // * Parameters:                                9047 // * Parameters:
10846 // *   a:    nuclear mass number                9048 // *   a:    nuclear mass number
10847 // *   z:    nuclear charge                     9049 // *   z:    nuclear charge
10848 // *****************************************    9050 // **********************************************************************
10849                                                 9051 
                                                   >> 9052 
10850 G4double G4Abla::eflmac_profi(G4double ia, G    9053 G4double G4Abla::eflmac_profi(G4double ia, G4double iz)
10851 {                                               9054 {
10852     // CHANGED TO CALCULATE TOTAL BINDING EN << 9055   // CHANGED TO CALCULATE TOTAL BINDING ENERGY INSTEAD OF MASS EXCESS.     
10853     // SWITCH FOR PAIRING INCLUDED AS WELL.  << 9056   // SWITCH FOR PAIRING INCLUDED AS WELL.                                  
10854     // BINDING = EFLMAC(IA,IZ,0,OPTSHP)      << 9057   // BINDING = EFLMAC(IA,IZ,0,OPTSHP)                                      
10855     // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/E << 9058   // FORTRAN TRANSCRIPT OF /U/GREWE/LANG/EEX/FRLDM.C                       
10856     // A.J. 15.07.96                         << 9059   // A.J. 15.07.96                                                         
10857                                              << 
10858     // this function will calculate the liqu << 
10859     // configuration according to the prepri << 
10860     // MASSES and DEFORMATIONS by P. M"oller << 
10861     // All constants are taken from this pub << 
10862                                              << 
10863     // Parameters:                           << 
10864     // a:    nuclear mass number             << 
10865     // z:    nuclear charge                  << 
10866                                              << 
10867     G4double eflmacResult = 0.0;             << 
10868                                              << 
10869     G4int in = 0;                            << 
10870     G4double z = 0.0, n = 0.0, a = 0.0, av = << 
10871     G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b << 
10872     G4double ff = 0.0, ca = 0.0, w = 0.0, ef << 
10873     G4double r0 = 0.0, kf = 0.0, ks = 0.0;   << 
10874     G4double kv = 0.0, rp = 0.0, ay = 0.0, a << 
10875     G4double esq = 0.0, ael = 0.0, i = 0.0;  << 
10876     G4double pi = 3.141592653589793238e0;    << 
10877                                              << 
10878     // fundamental constants                 << 
10879     // electronic charge squared             << 
10880     esq = 1.4399764;                         << 
10881                                              << 
10882     // constants from considerations other t << 
10883     // electronic binding                    << 
10884     ael = 1.433e-5;                          << 
10885                                              << 
10886     // proton rms radius                     << 
10887     rp = 0.8;                                << 
10888                                              << 
10889     // nuclear radius constant               << 
10890     r0 = 1.16;                               << 
10891                                              << 
10892     // range of yukawa-plus-expon. potential << 
10893     ay = 0.68;                               << 
10894                                              << 
10895     // range of yukawa function used to gene << 
10896     // nuclear charge distribution           << 
10897     aden = 0.70;                             << 
10898                                              << 
10899     // wigner constant                       << 
10900     w = 30.0;                                << 
10901                                              << 
10902     // adjusted parameters                   << 
10903     // volume energy                         << 
10904     av = 16.00126;                           << 
10905                                              << 
10906     // volume asymmetry                      << 
10907     kv = 1.92240;                            << 
10908                                              << 
10909     // surface energy                        << 
10910     as = 21.18466;                           << 
10911                                              << 
10912     // surface asymmetry                     << 
10913     ks = 2.345;                              << 
10914     // a^0 constant                          << 
10915     a0 = 2.615;                              << 
10916                                              << 
10917     // charge asymmetry                      << 
10918     ca = 0.10289;                            << 
10919                                              << 
10920     z = G4double(iz);                        << 
10921     a = G4double(ia);                        << 
10922     in = ia - iz;                            << 
10923     n = G4double(in);                        << 
10924                                              << 
10925     c1 = 3.0 / 5.0 * esq / r0;               << 
10926     c4 = 5.0 / 4.0 * std::pow((3.0 / (2.0 *  << 
10927     kf = std::pow((9.0 * pi * z / (4.0 * a)) << 
10928                                              << 
10929     ff = -1.0 / 8.0 * rp * rp * esq / std::p << 
10930          (145.0 / 48.0 - 327.0 / 2880.0 * st << 
10931           1527.0 / 1209600.0 * std::pow(kf,  << 
10932                                              << 
10933     i = (n - z) / a;                         << 
10934                                              << 
10935     x0 = r0 * std::pow(a, (1.0 / 3.0)) / ay; << 
10936     y0 = r0 * std::pow(a, (1.0 / 3.0)) / ade << 
10937                                              << 
10938     b1 = 1.0 - 3.0 / (std::pow(x0, 2)) + (1. << 
10939                                              << 
10940     b3 = 1.0 - 5.0 / std::pow(y0, 2) *       << 
10941                    (1.0 - 15.0 / (8.0 * y0)  << 
10942                     3.0 / 4.0 * (1.0 + 9.0 / << 
10943                         std::exp(-2.0 * y0)) << 
10944                                              << 
10945     // now calculation of total binding ener << 
10946                                              << 
10947     efl = -1.0 * av * (1.0 - kv * i * i) * a << 
10948           c1 * z * z * b3 / std::pow(a, (1.0 << 
10949           ff * std::pow(z, 2) / a - ca * (n  << 
10950                                              << 
10951     efl = efl + w * utilabs(i);              << 
10952                                              << 
10953     eflmacResult = efl;                      << 
10954                                              << 
10955     return eflmacResult;                     << 
10956 }                                            << 
10957 //                                           << 
10958 //                                           << 
10959 //                                           << 
10960 void G4Abla::unstable_nuclei(G4int AFP,      << 
10961                              G4int ZFP,      << 
10962                              G4int* AFPNEW,  << 
10963                              G4int* ZFPNEW,  << 
10964                              G4int& IOUNSTAB << 
10965                              G4double VX,    << 
10966                              G4double VY,    << 
10967                              G4double VZ,    << 
10968                              G4double* VP1X, << 
10969                              G4double* VP1Y, << 
10970                              G4double* VP1Z, << 
10971                              G4double BU_TAB << 
10972                              G4int* ILOOP)   << 
10973 {                                            << 
10974     //                                       << 
10975     G4int INMIN, INMAX, NDIF = 0, IMEM;      << 
10976     G4int NEVA = 0, PEVA = 0;                << 
10977     G4double VP2X, VP2Y, VP2Z;               << 
10978                                              << 
10979     *AFPNEW = AFP;                           << 
10980     *ZFPNEW = ZFP;                           << 
10981     IOUNSTABLE = 0;                          << 
10982     *ILOOP = 0;                              << 
10983     IMEM = 0;                                << 
10984     for (G4int i = 0; i < indexpart; i++)    << 
10985     {                                        << 
10986         BU_TAB_TEMP[i][0] = 0.0;             << 
10987         BU_TAB_TEMP[i][1] = 0.0;             << 
10988         BU_TAB_TEMP[i][2] = 0.0;             << 
10989         BU_TAB_TEMP[i][3] = 0.0;             << 
10990         BU_TAB_TEMP[i][4] = 0.0;             << 
10991         // BU_TAB_TEMP[i][5] = 0.0;          << 
10992     }                                        << 
10993     *VP1X = 0.0;                             << 
10994     *VP1Y = 0.0;                             << 
10995     *VP1Z = 0.0;                             << 
10996                                              << 
10997     if (AFP == 0 && ZFP == 0)                << 
10998     {                                        << 
10999         //       PRINT*,'UNSTABLE NUCLEI, AF << 
11000         return;                              << 
11001     }                                        << 
11002     if ((AFP == 1 && ZFP == 0) || (AFP == 1  << 
11003         (AFP == 3 && ZFP == 2) || (AFP == 4  << 
11004     {                                        << 
11005         *VP1X = VX;                          << 
11006         *VP1Y = VY;                          << 
11007         *VP1Z = VZ;                          << 
11008         return;                              << 
11009     }                                        << 
11010                                                 9060 
11011     if ((AFP - ZFP) == 0 && ZFP > 1)         << 9061   // this function will calculate the liquid-drop nuclear mass for spheri
11012     {                                        << 9062   // configuration according to the preprint NUCLEAR GROUND-STATE        
11013         for (G4int I = 0; I <= AFP - 2; I++) << 9063   // MASSES and DEFORMATIONS by P. M"oller et al. from August 16, 1993 p.
11014         {                                    << 9064   // All constants are taken from this publication for consistency.      
11015             unstable_tke(G4double(AFP - I),  << 
11016                          G4double(AFP - I),  << 
11017                          G4double(AFP - I -  << 
11018                          G4double(AFP - I -  << 
11019                          VX,                 << 
11020                          VY,                 << 
11021                          VZ,                 << 
11022                          &(*VP1X),           << 
11023                          &(*VP1Y),           << 
11024                          &(*VP1Z),           << 
11025                          &VP2X,              << 
11026                          &VP2Y,              << 
11027                          &VP2Z);             << 
11028             BU_TAB_TEMP[*ILOOP][0] = 1.0;    << 
11029             BU_TAB_TEMP[*ILOOP][1] = 1.0;    << 
11030             BU_TAB_TEMP[*ILOOP][2] = VP2X;   << 
11031             BU_TAB_TEMP[*ILOOP][3] = VP2Y;   << 
11032             BU_TAB_TEMP[*ILOOP][4] = VP2Z;   << 
11033             *ILOOP = *ILOOP + 1;             << 
11034             VX = *VP1X;                      << 
11035             VY = *VP1Y;                      << 
11036             VZ = *VP1Z;                      << 
11037         }                                    << 
11038         // PEVA = PEVA + ZFP - 1;            << 
11039         AFP = 1;                             << 
11040         ZFP = 1;                             << 
11041         IOUNSTABLE = 1;                      << 
11042     }                                        << 
11043     //                                       << 
11044     //*** Find the limits nucleus is bound : << 
11045     isostab_lim(ZFP, &INMIN, &INMAX);        << 
11046     NDIF = AFP - ZFP;                        << 
11047     if (NDIF < INMIN)                        << 
11048     {                                        << 
11049         // Proton unbound                    << 
11050         IOUNSTABLE = 1;                      << 
11051         for (G4int I = 1; I <= 10; I++)      << 
11052         {                                    << 
11053             isostab_lim(ZFP - I, &INMIN, &IN << 
11054             if (INMIN <= NDIF)               << 
11055             {                                << 
11056                 IMEM = I;                    << 
11057                 ZFP = ZFP - I;               << 
11058                 AFP = ZFP + NDIF;            << 
11059                 PEVA = I;                    << 
11060                 goto u10;                    << 
11061             }                                << 
11062         }                                    << 
11063         //                                   << 
11064     u10:                                     << 
11065         for (G4int I = 0; I < IMEM; I++)     << 
11066         {                                    << 
11067             unstable_tke(G4double(NDIF + ZFP << 
11068                          G4double(ZFP + IMEM << 
11069                          G4double(NDIF + ZFP << 
11070                          G4double(ZFP + IMEM << 
11071                          VX,                 << 
11072                          VY,                 << 
11073                          VZ,                 << 
11074                          &(*VP1X),           << 
11075                          &(*VP1Y),           << 
11076                          &(*VP1Z),           << 
11077                          &VP2X,              << 
11078                          &VP2Y,              << 
11079                          &VP2Z);             << 
11080             BU_TAB_TEMP[I + 1 + *ILOOP][0] = << 
11081             BU_TAB_TEMP[I + 1 + *ILOOP][1] = << 
11082             BU_TAB_TEMP[I + 1 + *ILOOP][2] = << 
11083             BU_TAB_TEMP[I + 1 + *ILOOP][3] = << 
11084             BU_TAB_TEMP[I + 1 + *ILOOP][4] = << 
11085             VX = *VP1X;                      << 
11086             VY = *VP1Y;                      << 
11087             VZ = *VP1Z;                      << 
11088         }                                    << 
11089         *ILOOP = *ILOOP + IMEM;              << 
11090     }                                        << 
11091     if (NDIF > INMAX)                        << 
11092     {                                        << 
11093         // Neutron unbound                   << 
11094         NEVA = NDIF - INMAX;                 << 
11095         AFP = ZFP + INMAX;                   << 
11096         IOUNSTABLE = 1;                      << 
11097         for (G4int I = 0; I < NEVA; I++)     << 
11098         {                                    << 
11099             unstable_tke(G4double(ZFP + NDIF << 
11100                          G4double(ZFP),      << 
11101                          G4double(ZFP + NDIF << 
11102                          G4double(ZFP),      << 
11103                          VX,                 << 
11104                          VY,                 << 
11105                          VZ,                 << 
11106                          &(*VP1X),           << 
11107                          &(*VP1Y),           << 
11108                          &(*VP1Z),           << 
11109                          &VP2X,              << 
11110                          &VP2Y,              << 
11111                          &VP2Z);             << 
11112                                              << 
11113             BU_TAB_TEMP[*ILOOP][0] = 0.0;    << 
11114             BU_TAB_TEMP[*ILOOP][1] = 1.0;    << 
11115             BU_TAB_TEMP[*ILOOP][2] = VP2X;   << 
11116             BU_TAB_TEMP[*ILOOP][3] = VP2Y;   << 
11117             BU_TAB_TEMP[*ILOOP][4] = VP2Z;   << 
11118             *ILOOP = *ILOOP + 1;             << 
11119             VX = *VP1X;                      << 
11120             VY = *VP1Y;                      << 
11121             VZ = *VP1Z;                      << 
11122         }                                    << 
11123     }                                        << 
11124                                                 9065 
11125     if ((AFP >= 2) && (ZFP == 0))            << 9066   // Parameters:                                                         
11126     {                                        << 9067   // a:    nuclear mass number                                         
11127         for (G4int I = 0; I <= AFP - 2; I++) << 9068   // z:    nuclear charge                                     
11128         {                                    << 
11129             unstable_tke(G4double(AFP - I),  << 
11130                          G4double(ZFP),      << 
11131                          G4double(AFP - I -  << 
11132                          G4double(ZFP),      << 
11133                          VX,                 << 
11134                          VY,                 << 
11135                          VZ,                 << 
11136                          &(*VP1X),           << 
11137                          &(*VP1Y),           << 
11138                          &(*VP1Z),           << 
11139                          &VP2X,              << 
11140                          &VP2Y,              << 
11141                          &VP2Z);             << 
11142                                              << 
11143             BU_TAB_TEMP[*ILOOP][0] = 0.0;    << 
11144             BU_TAB_TEMP[*ILOOP][1] = 1.0;    << 
11145             BU_TAB_TEMP[*ILOOP][2] = VP2X;   << 
11146             BU_TAB_TEMP[*ILOOP][3] = VP2Y;   << 
11147             BU_TAB_TEMP[*ILOOP][4] = VP2Z;   << 
11148             *ILOOP = *ILOOP + 1;             << 
11149             VX = *VP1X;                      << 
11150             VY = *VP1Y;                      << 
11151             VZ = *VP1Z;                      << 
11152         }                                    << 
11153                                              << 
11154         // NEVA = NEVA + (AFP - 1);          << 
11155         AFP = 1;                             << 
11156         ZFP = 0;                             << 
11157         IOUNSTABLE = 1;                      << 
11158     }                                        << 
11159     if (AFP < ZFP)                           << 
11160     {                                        << 
11161         std::cout << "WARNING - BU UNSTABLE: << 
11162         AFP = 0;                             << 
11163         ZFP = 0;                             << 
11164         IOUNSTABLE = 1;                      << 
11165     }                                        << 
11166     if ((AFP >= 4) && (ZFP == 1))            << 
11167     {                                        << 
11168         // Heavy residue is treated as 3H an << 
11169         // neutrons:                         << 
11170         for (G4int I = 0; I < AFP - 3; I++)  << 
11171         {                                    << 
11172             unstable_tke(G4double(AFP - I),  << 
11173                          G4double(ZFP),      << 
11174                          G4double(AFP - I -  << 
11175                          G4double(ZFP),      << 
11176                          VX,                 << 
11177                          VY,                 << 
11178                          VZ,                 << 
11179                          &(*VP1X),           << 
11180                          &(*VP1Y),           << 
11181                          &(*VP1Z),           << 
11182                          &VP2X,              << 
11183                          &VP2Y,              << 
11184                          &VP2Z);             << 
11185                                              << 
11186             BU_TAB_TEMP[*ILOOP][0] = 0.0;    << 
11187             BU_TAB_TEMP[*ILOOP][1] = 1.0;    << 
11188             BU_TAB_TEMP[*ILOOP][2] = VP2X;   << 
11189             BU_TAB_TEMP[*ILOOP][3] = VP2Y;   << 
11190             BU_TAB_TEMP[*ILOOP][4] = VP2Z;   << 
11191             *ILOOP = *ILOOP + 1;             << 
11192             VX = *VP1X;                      << 
11193             VY = *VP1Y;                      << 
11194             VZ = *VP1Z;                      << 
11195         }                                    << 
11196                                              << 
11197         // NEVA = NEVA + (AFP - 3);          << 
11198         AFP = 3;                             << 
11199         ZFP = 1;                             << 
11200         IOUNSTABLE = 1;                      << 
11201     }                                        << 
11202                                                 9069 
11203     if ((AFP == 4) && (ZFP == 3))            << 9070   G4double eflmacResult = 0.0;
11204     {                                        << 
11205         // 4Li -> 3He + p  ->                << 
11206         AFP = 3;                             << 
11207         ZFP = 2;                             << 
11208         // PEVA = PEVA + 1;                  << 
11209         IOUNSTABLE = 1;                      << 
11210         unstable_tke(4.0, 3.0, 3.0, 2.0, VX, << 
11211                                                 9071 
11212         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9072   G4int in = 0;
11213         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9073   G4double z = 0.0, n = 0.0, a = 0.0, av = 0.0, as = 0.0;
11214         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9074   G4double a0 = 0.0, c1 = 0.0, c4 = 0.0, b1 = 0.0, b3 = 0.0;
11215         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9075   G4double ff = 0.0, ca = 0.0, w = 0.0, efl = 0.0; 
11216         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9076   G4double r0 = 0.0, kf = 0.0, ks = 0.0;
11217         *ILOOP = *ILOOP + 1;                 << 9077   G4double kv = 0.0, rp = 0.0, ay = 0.0, aden = 0.0, x0 = 0.0, y0 = 0.0;
11218     }                                        << 9078   G4double esq = 0.0, ael = 0.0, i = 0.0;
11219     if ((AFP == 5) && (ZFP == 2))            << 9079   G4double pi = 3.141592653589793238e0;
11220     {                                        << 
11221         // 5He -> 4He + n  ->                << 
11222         AFP = 4;                             << 
11223         ZFP = 2;                             << 
11224         // NEVA = NEVA + 1;                  << 
11225         IOUNSTABLE = 1;                      << 
11226         unstable_tke(5.0, 2.0, 4.0, 2.0, VX, << 
11227         BU_TAB_TEMP[*ILOOP][0] = 0.0;        << 
11228         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11229         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11230         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11231         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11232         *ILOOP = *ILOOP + 1;                 << 
11233     }                                        << 
11234                                                 9080 
11235     if ((AFP == 5) && (ZFP == 3))            << 9081   // fundamental constants
11236     {                                        << 9082   // electronic charge squared
11237         // 5Li -> 4He + p                    << 9083   esq = 1.4399764;
11238         AFP = 4;                             << 
11239         ZFP = 2;                             << 
11240         // PEVA = PEVA + 1;                  << 
11241         IOUNSTABLE = 1;                      << 
11242         unstable_tke(5.0, 3.0, 4.0, 2.0, VX, << 
11243         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 
11244         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11245         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11246         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11247         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11248         *ILOOP = *ILOOP + 1;                 << 
11249     }                                        << 
11250                                                 9084 
11251     if ((AFP == 6) && (ZFP == 4))            << 9085   // constants from considerations other than nucl. masses
11252     {                                        << 9086   // electronic binding
11253         // 6Be -> 4He + 2p (velocity in two  << 9087   ael = 1.433e-5;
11254         AFP = 4;                             << 
11255         ZFP = 2;                             << 
11256         // PEVA = PEVA + 2;                  << 
11257         IOUNSTABLE = 1;                      << 
11258         // 6Be -> 5Li + p                    << 
11259         unstable_tke(6.0, 4.0, 5.0, 3.0, VX, << 
11260         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 
11261         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11262         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11263         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11264         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11265         *ILOOP = *ILOOP + 1;                 << 
11266         VX = *VP1X;                          << 
11267         VY = *VP1Y;                          << 
11268         VZ = *VP1Z;                          << 
11269                                              << 
11270         // 5Li -> 4He + p                    << 
11271         unstable_tke(5.0, 3.0, 4.0, 2.0, VX, << 
11272         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 
11273         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11274         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11275         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11276         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11277         *ILOOP = *ILOOP + 1;                 << 
11278     }                                        << 
11279     if ((AFP == 7) && (ZFP == 2))            << 
11280     {                                        << 
11281         // 7He -> 6He + n                    << 
11282         AFP = 6;                             << 
11283         ZFP = 2;                             << 
11284         // NEVA = NEVA + 1;                  << 
11285         IOUNSTABLE = 1;                      << 
11286         unstable_tke(7.0, 2.0, 6.0, 2.0, VX, << 
11287         BU_TAB_TEMP[*ILOOP][0] = 0.0;        << 
11288         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11289         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11290         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11291         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11292         *ILOOP = *ILOOP + 1;                 << 
11293     }                                        << 
11294                                              << 
11295     if ((AFP == 7) && (ZFP == 5))            << 
11296     {                                        << 
11297         // 7B -> 6Be + p -> 4He + 3p         << 
11298         for (int I = 0; I <= AFP - 5; I++)   << 
11299         {                                    << 
11300             unstable_tke(double(AFP - I),    << 
11301                          double(ZFP - I),    << 
11302                          double(AFP - I - 1) << 
11303                          double(ZFP - I - 1) << 
11304                          VX,                 << 
11305                          VY,                 << 
11306                          VZ,                 << 
11307                          &(*VP1X),           << 
11308                          &(*VP1Y),           << 
11309                          &(*VP1Z),           << 
11310                          &VP2X,              << 
11311                          &VP2Y,              << 
11312                          &VP2Z);             << 
11313             BU_TAB_TEMP[*ILOOP][0] = 1.0;    << 
11314             BU_TAB_TEMP[*ILOOP][1] = 1.0;    << 
11315             BU_TAB_TEMP[*ILOOP][2] = VP2X;   << 
11316             BU_TAB_TEMP[*ILOOP][3] = VP2Y;   << 
11317             BU_TAB_TEMP[*ILOOP][4] = VP2Z;   << 
11318             *ILOOP = *ILOOP + 1;             << 
11319             VX = *VP1X;                      << 
11320             VY = *VP1Y;                      << 
11321             VZ = *VP1Z;                      << 
11322         }                                    << 
11323                                              << 
11324         AFP = 4;                             << 
11325         ZFP = 2;                             << 
11326         // PEVA = PEVA + 3;                  << 
11327         IOUNSTABLE = 1;                      << 
11328     }                                        << 
11329     if ((AFP == 8) && (ZFP == 4))            << 
11330     {                                        << 
11331         // 8Be  -> 4He + 4He                 << 
11332         AFP = 4;                             << 
11333         ZFP = 2;                             << 
11334         IOUNSTABLE = 1;                      << 
11335         unstable_tke(8.0, 4.0, 4.0, 2.0, VX, << 
11336         BU_TAB_TEMP[*ILOOP][0] = 2.0;        << 
11337         BU_TAB_TEMP[*ILOOP][1] = 4.0;        << 
11338         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11339         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11340         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11341         *ILOOP = *ILOOP + 1;                 << 
11342     }                                        << 
11343     if ((AFP == 8) && (ZFP == 6))            << 
11344     {                                        << 
11345         // 8C  -> 2p + 6Be                   << 
11346         AFP = 6;                             << 
11347         ZFP = 4;                             << 
11348         // PEVA = PEVA + 2;                  << 
11349         IOUNSTABLE = 1;                      << 
11350                                                 9088 
11351         unstable_tke(8.0, 6.0, 7.0, 5.0, VX, << 9089   // proton rms radius
11352         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9090   rp  = 0.8;
11353         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11354         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11355         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11356         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11357         *ILOOP = *ILOOP + 1;                 << 
11358         VX = *VP1X;                          << 
11359         VY = *VP1Y;                          << 
11360         VZ = *VP1Z;                          << 
11361                                              << 
11362         unstable_tke(7.0, 5.0, 6.0, 4.0, VX, << 
11363         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 
11364         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11365         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11366         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11367         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11368         *ILOOP = *ILOOP + 1;                 << 
11369         VX = *VP1X;                          << 
11370         VY = *VP1Y;                          << 
11371         VZ = *VP1Z;                          << 
11372     }                                        << 
11373                                              << 
11374     if ((AFP == 9) && (ZFP == 2))            << 
11375     {                                        << 
11376         // 9He -> 8He + n                    << 
11377         AFP = 8;                             << 
11378         ZFP = 2;                             << 
11379         // NEVA = NEVA + 1;                  << 
11380         IOUNSTABLE = 1;                      << 
11381                                                 9091 
11382         unstable_tke(9.0, 2.0, 8.0, 2.0, VX, << 9092   // nuclear radius constant
11383         BU_TAB_TEMP[*ILOOP][0] = 0.0;        << 9093   r0  = 1.16;
11384         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11385         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11386         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11387         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11388         *ILOOP = *ILOOP + 1;                 << 
11389         VX = *VP1X;                          << 
11390         VY = *VP1Y;                          << 
11391         VZ = *VP1Z;                          << 
11392     }                                        << 
11393                                              << 
11394     if ((AFP == 9) && (ZFP == 5))            << 
11395     {                                        << 
11396         // 9B -> 4He + 4He + p  ->           << 
11397         AFP = 4;                             << 
11398         ZFP = 2;                             << 
11399         // PEVA = PEVA + 1;                  << 
11400         IOUNSTABLE = 1;                      << 
11401         unstable_tke(9.0, 5.0, 8.0, 4.0, VX, << 
11402         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 
11403         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11404         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11405         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11406         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11407         *ILOOP = *ILOOP + 1;                 << 
11408         VX = *VP1X;                          << 
11409         VY = *VP1Y;                          << 
11410         VZ = *VP1Z;                          << 
11411                                              << 
11412         unstable_tke(8.0, 4.0, 4.0, 2.0, VX, << 
11413         BU_TAB_TEMP[*ILOOP][0] = 2.0;        << 
11414         BU_TAB_TEMP[*ILOOP][1] = 4.0;        << 
11415         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11416         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11417         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11418         *ILOOP = *ILOOP + 1;                 << 
11419         VX = *VP1X;                          << 
11420         VY = *VP1Y;                          << 
11421         VZ = *VP1Z;                          << 
11422     }                                        << 
11423                                              << 
11424     if ((AFP == 10) && (ZFP == 2))           << 
11425     {                                        << 
11426         // 10He -> 8He + 2n                  << 
11427         AFP = 8;                             << 
11428         ZFP = 2;                             << 
11429         // NEVA = NEVA + 2;                  << 
11430         IOUNSTABLE = 1;                      << 
11431         // 10He -> 9He + n                   << 
11432         unstable_tke(10.0, 2.0, 9.0, 2.0, VX << 
11433         BU_TAB_TEMP[*ILOOP][0] = 0.0;        << 
11434         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11435         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11436         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11437         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11438         *ILOOP = *ILOOP + 1;                 << 
11439         VX = *VP1X;                          << 
11440         VY = *VP1Y;                          << 
11441         VZ = *VP1Z;                          << 
11442                                              << 
11443         // 9He -> 8He + n                    << 
11444         unstable_tke(9.0, 2.0, 8.0, 2.0, VX, << 
11445         BU_TAB_TEMP[*ILOOP][0] = 0.0;        << 
11446         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11447         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11448         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11449         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11450         *ILOOP = *ILOOP + 1;                 << 
11451         VX = *VP1X;                          << 
11452         VY = *VP1Y;                          << 
11453         VZ = *VP1Z;                          << 
11454     }                                        << 
11455     if ((AFP == 10) && (ZFP == 3))           << 
11456     {                                        << 
11457         // 10Li -> 9Li + n  ->               << 
11458         AFP = 9;                             << 
11459         ZFP = 3;                             << 
11460         // NEVA = NEVA + 1;                  << 
11461         IOUNSTABLE = 1;                      << 
11462         unstable_tke(10.0, 3.0, 9.0, 3.0, VX << 
11463         BU_TAB_TEMP[*ILOOP][0] = 0.0;        << 
11464         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11465         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11466         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11467         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11468         *ILOOP = *ILOOP + 1;                 << 
11469         VX = *VP1X;                          << 
11470         VY = *VP1Y;                          << 
11471         VZ = *VP1Z;                          << 
11472     }                                        << 
11473     if ((AFP == 10) && (ZFP == 7))           << 
11474     {                                        << 
11475         // 10N -> 9C + p  ->                 << 
11476         AFP = 9;                             << 
11477         ZFP = 6;                             << 
11478         // PEVA = PEVA + 1;                  << 
11479         IOUNSTABLE = 1;                      << 
11480         unstable_tke(10.0, 7.0, 9.0, 6.0, VX << 
11481         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 
11482         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11483         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11484         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11485         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11486         *ILOOP = *ILOOP + 1;                 << 
11487         VX = *VP1X;                          << 
11488         VY = *VP1Y;                          << 
11489         VZ = *VP1Z;                          << 
11490     }                                        << 
11491                                              << 
11492     if ((AFP == 11) && (ZFP == 7))           << 
11493     {                                        << 
11494         // 11N -> 10C + p  ->                << 
11495         AFP = 10;                            << 
11496         ZFP = 6;                             << 
11497         // PEVA = PEVA + 1;                  << 
11498         IOUNSTABLE = 1;                      << 
11499         unstable_tke(11.0, 7.0, 10.0, 6.0, V << 
11500         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 
11501         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 
11502         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 
11503         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 
11504         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 
11505         *ILOOP = *ILOOP + 1;                 << 
11506         VX = *VP1X;                          << 
11507         VY = *VP1Y;                          << 
11508         VZ = *VP1Z;                          << 
11509     }                                        << 
11510     if ((AFP == 12) && (ZFP == 8))           << 
11511     {                                        << 
11512         // 12O -> 10C + 2p  ->               << 
11513         AFP = 10;                            << 
11514         ZFP = 6;                             << 
11515         // PEVA = PEVA + 2;                  << 
11516         IOUNSTABLE = 1;                      << 
11517                                                 9094 
11518         unstable_tke(12.0, 8.0, 11.0, 7.0, V << 9095   // range of yukawa-plus-expon. potential
11519         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9096   ay  = 0.68;
11520         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9097 
11521         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9098   // range of yukawa function used to generate                          
11522         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9099   // nuclear charge distribution
11523         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9100   aden= 0.70;
11524         *ILOOP = *ILOOP + 1;                 << 9101 
11525         VX = *VP1X;                          << 9102   // wigner constant
11526         VY = *VP1Y;                          << 9103   w   = 30.0;
11527         VZ = *VP1Z;                          << 9104 
11528                                              << 9105   // adjusted parameters
11529         unstable_tke(11.0, 7.0, 10.0, 6.0, V << 9106   // volume energy
11530         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9107   av  = 16.00126;
11531         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9108 
11532         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9109   // volume asymmetry
11533         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9110   kv  =  1.92240;
11534         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9111 
11535         *ILOOP = *ILOOP + 1;                 << 9112   // surface energy
11536         VX = *VP1X;                          << 9113   as  = 21.18466;
11537         VY = *VP1Y;                          << 9114 
11538         VZ = *VP1Z;                          << 9115   // surface asymmetry
11539     }                                        << 9116   ks  =  2.345;
11540     if ((AFP == 15) && (ZFP == 9))           << 9117   // a^0 constant
11541     {                                        << 9118   a0  =  2.615;
11542         // 15F -> 14O + p  ->                << 9119 
11543         AFP = 14;                            << 9120   // charge asymmetry
11544         ZFP = 8;                             << 9121   ca  =  0.10289;
11545         // PEVA = PEVA + 1;                  << 9122 
11546         IOUNSTABLE = 1;                      << 9123   z   = G4double(iz);
11547         unstable_tke(15.0, 9.0, 14.0, 8.0, V << 9124   a   = G4double(ia);
11548         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9125   in  = ia - iz;                                                       
11549         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9126   n   = G4double(in);
11550         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9127 
11551         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9128   
11552         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9129   c1  = 3.0/5.0*esq/r0;
11553         *ILOOP = *ILOOP + 1;                 << 9130   c4  = 5.0/4.0*std::pow((3.0/(2.0*pi)),(2.0/3.0)) * c1;
11554         VX = *VP1X;                          << 9131   kf  = std::pow((9.0*pi*z/(4.0*a)),(1.0/3.0))/r0;
11555         VY = *VP1Y;                          << 9132   
11556         VZ = *VP1Z;                          << 9133   ff = -1.0/8.0*rp*rp*esq/std::pow(r0,3) * (145.0/48.0 - 327.0/2880.0*std::pow(kf,2) * std::pow(rp,2) + 1527.0/1209600.0*std::pow(kf,4) * std::pow(rp,4));
11557     }                                        << 9134 
11558                                              << 9135   i   = (n-z)/a;
11559     if ((AFP == 16) && (ZFP == 9))           << 9136 
11560     {                                        << 9137   x0  = r0 * std::pow(a,(1.0/3.0)) / ay;
11561         // 16F -> 15O + p  ->                << 9138   y0  = r0 * std::pow(a,(1.0/3.0)) / aden;
11562         AFP = 15;                            << 9139 
11563         ZFP = 8;                             << 9140   b1  = 1.0 - 3.0/(std::pow(x0,2)) + (1.0 + x0) * (2.0 + 3.0/x0 + 3.0/std::pow(x0,2)) * std::exp(-2.0*x0);
11564         // PEVA = PEVA + 1;                  << 9141 
11565         IOUNSTABLE = 1;                      << 9142   b3  = 1.0 - 5.0/std::pow(y0,2) * (1.0 - 15.0/(8.0*y0) + 21.0/(8.0 * std::pow(y0,3))
11566         unstable_tke(16.0, 9.0, 15.0, 8.0, V << 9143              - 3.0/4.0 * (1.0 + 9.0/(2.0*y0) + 7.0/std::pow(y0,2)
11567         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9144               + 7.0/(2.0 * std::pow(y0,3))) * std::exp(-2.0*y0));
11568         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9145 
11569         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9146   // now calculation of total binding energy                  
11570         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9147 
11571         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9148   efl = -1.0 * av*(1.0 - kv*i*i)*a + as*(1.0 - ks*i*i)*b1 * std::pow(a,(2.0/3.0)) + a0
11572         *ILOOP = *ILOOP + 1;                 << 9149     + c1*z*z*b3/std::pow(a,(1.0/3.0)) - c4*std::pow(z,(4.0/3.0))/std::pow(a,(1.e0/3.e0))
11573         VX = *VP1X;                          << 9150     + ff*std::pow(z,2)/a -ca*(n-z) - ael * std::pow(z,(2.39e0));
11574         VY = *VP1Y;                          << 9151 
11575         VZ = *VP1Z;                          << 9152   efl = efl + w*utilabs(i);
11576     }                                        << 9153 
11577                                              << 9154   eflmacResult = efl;
11578     if ((AFP == 16) && (ZFP == 10))          << 9155 
11579     {                                        << 9156   return eflmacResult;
11580         // 16Ne -> 14O + 2p  ->              << 9157 }
11581         AFP = 14;                            << 9158 //
11582         ZFP = 8;                             << 9159 //
11583         // PEVA = PEVA + 2;                  << 9160 //
11584         IOUNSTABLE = 1;                      << 9161 void G4Abla::unstable_nuclei(G4int AFP,G4int ZFP,G4int *AFPNEW,G4int *ZFPNEW,G4int &IOUNSTABLE,G4double VX,G4double VY,G4double VZ,G4double *VP1X,G4double *VP1Y,G4double *VP1Z,G4double BU_TAB_TEMP[200][6],G4int *ILOOP){
11585         unstable_tke(16.0, 10.0, 15.0, 9.0,  << 9162 //
11586         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9163       G4int INMIN,INMAX,NDIF=0,IMEM;
11587         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9164       G4int NEVA=0,PEVA=0;
11588         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9165       G4double   VP2X,VP2Y,VP2Z;
11589         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9166 
11590         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9167       *AFPNEW = AFP;
11591         *ILOOP = *ILOOP + 1;                 << 9168       *ZFPNEW = ZFP;
11592         VX = *VP1X;                          << 9169       IOUNSTABLE = 0;
11593         VY = *VP1Y;                          << 9170       *ILOOP = 0;
11594         VZ = *VP1Z;                          << 9171       IMEM = 0;
11595                                              << 9172       for(G4int i=0;i<200;i++){
11596         unstable_tke(15.0, 9.0, 14.0, 8.0, V << 9173       BU_TAB_TEMP[i][0] = 0.0;
11597         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9174       BU_TAB_TEMP[i][1] = 0.0;
11598         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9175       BU_TAB_TEMP[i][2] = 0.0;
11599         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9176       BU_TAB_TEMP[i][3] = 0.0;
11600         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9177       BU_TAB_TEMP[i][4] = 0.0;
11601         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9178       //BU_TAB_TEMP[i][5] = 0.0;
11602         *ILOOP = *ILOOP + 1;                 << 9179       }
11603         VX = *VP1X;                          << 9180       *VP1X = 0.0;
11604         VY = *VP1Y;                          << 9181       *VP1Y = 0.0;
11605         VZ = *VP1Z;                          << 9182       *VP1Z = 0.0;
11606     }                                        << 9183 
11607     if ((AFP == 18) && (ZFP == 11))          << 9184       if(AFP==0 && ZFP==0){
11608     {                                        << 9185 //       PRINT*,'UNSTABLE NUCLEI, AFP=0, ZFP=0'
11609         // 18Na -> 17Ne + p  ->              << 9186        return;
11610         AFP = 17;                            << 9187       }
11611         ZFP = 10;                            << 9188       if((AFP==1 && ZFP==0) || 
11612         // PEVA = PEVA + 1;                  << 9189          (AFP==1 && ZFP==1) || 
11613         IOUNSTABLE = 1;                      << 9190          (AFP==2 && ZFP==1) || 
11614         unstable_tke(18.0, 11.0, 17.0, 10.0, << 9191          (AFP==3 && ZFP==1) || 
11615         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9192          (AFP==3 && ZFP==2) || 
11616         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9193          (AFP==4 && ZFP==2) || 
11617         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9194          (AFP==6 && ZFP==2) || 
11618         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9195          (AFP==8 && ZFP==2)
11619         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9196        ){
11620         *ILOOP = *ILOOP + 1;                 << 9197        *VP1X = VX;
11621         VX = *VP1X;                          << 9198        *VP1Y = VY;
11622         VY = *VP1Y;                          << 9199        *VP1Z = VZ;
11623         VZ = *VP1Z;                          << 9200        return;
11624     }                                        << 9201       }
11625     if ((AFP == 19) && (ZFP == 11))          << 9202 
11626     {                                        << 9203       if ((AFP-ZFP)==0 && ZFP>1){
11627         // 19Na -> 18Ne + p  ->              << 9204         for(G4int I = 0;I<=AFP-2;I++){
11628         AFP = 18;                            << 9205          unstable_tke(G4double(AFP-I),G4double(AFP-I),G4double(AFP-I-1),G4double(AFP-I-1),VX,VY,VZ,
11629         ZFP = 10;                            << 9206            &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
11630         // PEVA = PEVA + 1;                  << 9207          BU_TAB_TEMP[*ILOOP][0] = 1.0;
11631         IOUNSTABLE = 1;                      << 9208          BU_TAB_TEMP[*ILOOP][1] = 1.0;
11632         unstable_tke(19.0, 11.0, 18.0, 10.0, << 9209          BU_TAB_TEMP[*ILOOP][2] = VP2X;
11633         BU_TAB_TEMP[*ILOOP][0] = 1.0;        << 9210          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
11634         BU_TAB_TEMP[*ILOOP][1] = 1.0;        << 9211          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
11635         BU_TAB_TEMP[*ILOOP][2] = VP2X;       << 9212          *ILOOP = *ILOOP + 1;
11636         BU_TAB_TEMP[*ILOOP][3] = VP2Y;       << 9213          VX = *VP1X;
11637         BU_TAB_TEMP[*ILOOP][4] = VP2Z;       << 9214          VY = *VP1Y;
11638         *ILOOP = *ILOOP + 1;                 << 9215          VZ = *VP1Z;
11639         VX = *VP1X;                          << 
11640         VY = *VP1Y;                          << 
11641         VZ = *VP1Z;                          << 
11642     }                                        << 
11643     if (ZFP >= 4 && (AFP - ZFP) == 1)        << 
11644     {                                        << 
11645         // Heavy residue is treated as 3He   << 
11646         NEVA = AFP - 3;                      << 
11647         PEVA = ZFP - 2;                      << 
11648                                              << 
11649         for (G4int I = 0; I < NEVA; I++)     << 
11650         {                                    << 
11651             unstable_tke(G4double(AFP - I),  << 
11652                          G4double(ZFP),      << 
11653                          G4double(AFP - I -  << 
11654                          G4double(ZFP),      << 
11655                          VX,                 << 
11656                          VY,                 << 
11657                          VZ,                 << 
11658                          &(*VP1X),           << 
11659                          &(*VP1Y),           << 
11660                          &(*VP1Z),           << 
11661                          &VP2X,              << 
11662                          &VP2Y,              << 
11663                          &VP2Z);             << 
11664             BU_TAB_TEMP[*ILOOP][0] = 0.0;    << 
11665             BU_TAB_TEMP[*ILOOP][1] = 1.0;    << 
11666             BU_TAB_TEMP[*ILOOP][2] = VP2X;   << 
11667             BU_TAB_TEMP[*ILOOP][3] = VP2Y;   << 
11668             BU_TAB_TEMP[*ILOOP][4] = VP2Z;   << 
11669             *ILOOP = *ILOOP + 1;             << 
11670             VX = *VP1X;                      << 
11671             VY = *VP1Y;                      << 
11672             VZ = *VP1Z;                      << 
11673         }                                    << 
11674         for (G4int I = 0; I < PEVA; I++)     << 
11675         {                                    << 
11676             unstable_tke(G4double(AFP - NEVA << 
11677                          G4double(ZFP - I),  << 
11678                          G4double(AFP - NEVA << 
11679                          G4double(ZFP - I -  << 
11680                          VX,                 << 
11681                          VY,                 << 
11682                          VZ,                 << 
11683                          &(*VP1X),           << 
11684                          &(*VP1Y),           << 
11685                          &(*VP1Z),           << 
11686                          &VP2X,              << 
11687                          &VP2Y,              << 
11688                          &VP2Z);             << 
11689             BU_TAB_TEMP[*ILOOP][0] = 1.0;    << 
11690             BU_TAB_TEMP[*ILOOP][1] = 1.0;    << 
11691             BU_TAB_TEMP[*ILOOP][2] = VP2X;   << 
11692             BU_TAB_TEMP[*ILOOP][3] = VP2Y;   << 
11693             BU_TAB_TEMP[*ILOOP][4] = VP2Z;   << 
11694             *ILOOP = *ILOOP + 1;             << 
11695             VX = *VP1X;                      << 
11696             VY = *VP1Y;                      << 
11697             VZ = *VP1Z;                      << 
11698         }                                       9216         }
                                                   >> 9217         // PEVA = PEVA + ZFP - 1;
                                                   >> 9218          AFP = 1;
                                                   >> 9219          ZFP = 1;
                                                   >> 9220          IOUNSTABLE = 1;
                                                   >> 9221       }
                                                   >> 9222 //
                                                   >> 9223 //*** Find the limits nucleus is bound :
                                                   >> 9224       isostab_lim(ZFP,&INMIN,&INMAX);
                                                   >> 9225       NDIF = AFP - ZFP;
                                                   >> 9226       if(NDIF<INMIN){
                                                   >> 9227 // Proton unbound
                                                   >> 9228         IOUNSTABLE = 1;
                                                   >> 9229        for(G4int I = 1;I<=10; I++){
                                                   >> 9230         isostab_lim(ZFP-I,&INMIN,&INMAX);
                                                   >> 9231          if(INMIN<=NDIF){
                                                   >> 9232          IMEM = I;
                                                   >> 9233          ZFP = ZFP - I;
                                                   >> 9234          AFP = ZFP + NDIF;
                                                   >> 9235          PEVA = I;
                                                   >> 9236          goto u10;
                                                   >> 9237          }
                                                   >> 9238        }
                                                   >> 9239 //
                                                   >> 9240       u10:
                                                   >> 9241        for(G4int I = 0;I< IMEM;I++){
                                                   >> 9242          unstable_tke(G4double(NDIF+ZFP+IMEM-I),
                                                   >> 9243          G4double(ZFP+IMEM-I),
                                                   >> 9244          G4double(NDIF+ZFP+IMEM-I-1),
                                                   >> 9245          G4double(ZFP+IMEM-I-1),
                                                   >> 9246          VX,VY,VZ,
                                                   >> 9247          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9248          BU_TAB_TEMP[I+1+*ILOOP][0] = 1.0;
                                                   >> 9249          BU_TAB_TEMP[I+1+*ILOOP][1] = 1.0;
                                                   >> 9250          BU_TAB_TEMP[I+1+*ILOOP][2] = VP2X;
                                                   >> 9251          BU_TAB_TEMP[I+1+*ILOOP][3] = VP2Y;
                                                   >> 9252          BU_TAB_TEMP[I+1+*ILOOP][4] = VP2Z;
                                                   >> 9253          VX = *VP1X;
                                                   >> 9254          VY = *VP1Y;
                                                   >> 9255          VZ = *VP1Z;
                                                   >> 9256        }
                                                   >> 9257          *ILOOP = *ILOOP + IMEM;
11699                                                 9258 
11700         AFP = 3;                             << 9259       }
11701         ZFP = 2;                             << 9260       if(NDIF>INMAX){
                                                   >> 9261 // Neutron unbound
                                                   >> 9262         NEVA = NDIF - INMAX;
                                                   >> 9263         AFP = ZFP + INMAX;
11702         IOUNSTABLE = 1;                         9264         IOUNSTABLE = 1;
11703     }                                        << 9265          for(G4int I = 0;I<NEVA;I++){
11704     //                                       << 9266          unstable_tke(G4double(ZFP+NDIF-I),
11705     *AFPNEW = AFP;                           << 9267          G4double(ZFP),
11706     *ZFPNEW = ZFP;                           << 9268          G4double(ZFP+NDIF-I-1),
11707     return;                                  << 9269          G4double(ZFP),
                                                   >> 9270          VX,VY,VZ,
                                                   >> 9271          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9272 
                                                   >> 9273          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9274          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9275          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9276          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9277          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9278          *ILOOP = *ILOOP + 1;
                                                   >> 9279          VX = *VP1X;
                                                   >> 9280          VY = *VP1Y;
                                                   >> 9281          VZ = *VP1Z;
                                                   >> 9282          }
                                                   >> 9283       }
                                                   >> 9284 
                                                   >> 9285          if ((AFP>=2) && (ZFP==0)){
                                                   >> 9286          for(G4int I = 0;I<= AFP-2;I++){
                                                   >> 9287          unstable_tke(G4double(AFP-I),G4double(ZFP),
                                                   >> 9288          G4double(AFP-I-1),G4double(ZFP),
                                                   >> 9289          VX,VY,VZ,
                                                   >> 9290          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9291 
                                                   >> 9292          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9293          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9294          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9295          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9296          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9297          *ILOOP = *ILOOP + 1;
                                                   >> 9298          VX = *VP1X;
                                                   >> 9299          VY = *VP1Y;
                                                   >> 9300          VZ = *VP1Z;
                                                   >> 9301          }
                                                   >> 9302 
                                                   >> 9303    //NEVA = NEVA + (AFP - 1);
                                                   >> 9304           AFP = 1;
                                                   >> 9305           ZFP = 0;
                                                   >> 9306           IOUNSTABLE = 1;
                                                   >> 9307          }
                                                   >> 9308          if (AFP<ZFP){
                                                   >> 9309           std::cout << "WARNING - BU UNSTABLE: AF < ZF" << std::endl;
                                                   >> 9310           AFP = 0;
                                                   >> 9311           ZFP = 0;
                                                   >> 9312           IOUNSTABLE = 1;
                                                   >> 9313          }
                                                   >> 9314          if ((AFP>=4) && (ZFP==1)){
                                                   >> 9315 // Heavy residue is treated as 3H and the rest of mass is emitted as neutrons:
                                                   >> 9316          for(G4int I = 0; I<AFP-3;I++){
                                                   >> 9317          unstable_tke(G4double(AFP-I),G4double(ZFP),
                                                   >> 9318          G4double(AFP-I-1),G4double(ZFP),
                                                   >> 9319          VX,VY,VZ,
                                                   >> 9320          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9321 
                                                   >> 9322          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9323          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9324          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9325          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9326          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9327          *ILOOP = *ILOOP + 1;
                                                   >> 9328          VX = *VP1X;
                                                   >> 9329          VY = *VP1Y;
                                                   >> 9330          VZ = *VP1Z;
                                                   >> 9331          }
                                                   >> 9332 
                                                   >> 9333    // NEVA = NEVA + (AFP - 3);
                                                   >> 9334          AFP = 3;
                                                   >> 9335          ZFP = 1;
                                                   >> 9336          IOUNSTABLE = 1;
                                                   >> 9337          }
                                                   >> 9338 
                                                   >> 9339          if ((AFP==4) && (ZFP==3)){
                                                   >> 9340 // 4Li -> 3He + p  ->
                                                   >> 9341          AFP = 3;
                                                   >> 9342          ZFP = 2;
                                                   >> 9343          //PEVA = PEVA + 1;
                                                   >> 9344          IOUNSTABLE = 1;
                                                   >> 9345          unstable_tke(4.0,3.0,3.0,2.0,
                                                   >> 9346          VX,VY,VZ,
                                                   >> 9347          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9348 
                                                   >> 9349          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9350          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9351          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9352          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9353          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9354          *ILOOP = *ILOOP + 1;
                                                   >> 9355          }
                                                   >> 9356          if ((AFP==5) && (ZFP==2)){
                                                   >> 9357 // 5He -> 4He + n  ->
                                                   >> 9358          AFP = 4;
                                                   >> 9359          ZFP = 2;
                                                   >> 9360          //NEVA = NEVA + 1;
                                                   >> 9361          IOUNSTABLE = 1;
                                                   >> 9362          unstable_tke(5.0,2.0,4.0,2.0,
                                                   >> 9363          VX,VY,VZ,
                                                   >> 9364          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9365          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9366          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9367          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9368          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9369          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9370          *ILOOP = *ILOOP + 1;
                                                   >> 9371          }
                                                   >> 9372 
                                                   >> 9373          if ((AFP==5) && (ZFP==3)){
                                                   >> 9374 // 5Li -> 4He + p
                                                   >> 9375          AFP = 4;
                                                   >> 9376          ZFP = 2;
                                                   >> 9377          //PEVA = PEVA + 1;
                                                   >> 9378          IOUNSTABLE = 1;
                                                   >> 9379          unstable_tke(5.0,3.0,4.0,2.0,
                                                   >> 9380          VX,VY,VZ,
                                                   >> 9381          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9382          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9383          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9384          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9385          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9386          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9387          *ILOOP = *ILOOP + 1;
                                                   >> 9388          }
                                                   >> 9389 
                                                   >> 9390          if ((AFP==6) && (ZFP==4)){
                                                   >> 9391 // 6Be -> 4He + 2p (velocity in two steps: 6Be->5Li->4He)
                                                   >> 9392          AFP = 4;
                                                   >> 9393          ZFP = 2;
                                                   >> 9394          //PEVA = PEVA + 2;
                                                   >> 9395          IOUNSTABLE = 1;
                                                   >> 9396 // 6Be -> 5Li + p
                                                   >> 9397          unstable_tke(6.0,4.0,5.0,3.0,
                                                   >> 9398          VX,VY,VZ,
                                                   >> 9399          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9400          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9401          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9402          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9403          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9404          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9405          *ILOOP = *ILOOP + 1;
                                                   >> 9406          VX = *VP1X;
                                                   >> 9407          VY = *VP1Y;
                                                   >> 9408          VZ = *VP1Z;
                                                   >> 9409 
                                                   >> 9410 // 5Li -> 4He + p
                                                   >> 9411          unstable_tke(5.0,3.0,4.0,2.0,
                                                   >> 9412          VX,VY,VZ,
                                                   >> 9413          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9414          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9415          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9416          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9417          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9418          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9419          *ILOOP = *ILOOP + 1;
                                                   >> 9420          }
                                                   >> 9421          if ((AFP==7)&&(ZFP==2)){
                                                   >> 9422 // 7He -> 6He + n
                                                   >> 9423          AFP = 6;
                                                   >> 9424          ZFP = 2;
                                                   >> 9425          //NEVA = NEVA + 1;
                                                   >> 9426          IOUNSTABLE = 1;
                                                   >> 9427          unstable_tke(7.0,2.0,6.0,2.0,
                                                   >> 9428          VX,VY,VZ,
                                                   >> 9429          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9430          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9431          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9432          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9433          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9434          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9435          *ILOOP = *ILOOP + 1;
                                                   >> 9436          }
                                                   >> 9437 
                                                   >> 9438          if ((AFP==7) && (ZFP==5)){
                                                   >> 9439 // 7B -> 6Be + p -> 4He + 3p
                                                   >> 9440          for(int I = 0; I<= AFP-5;I++){
                                                   >> 9441          unstable_tke(double(AFP-I),double(ZFP-I),
                                                   >> 9442          double(AFP-I-1),double(ZFP-I-1),
                                                   >> 9443          VX,VY,VZ,
                                                   >> 9444          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9445          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9446          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9447          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9448          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9449          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9450          *ILOOP = *ILOOP + 1;
                                                   >> 9451          VX = *VP1X;
                                                   >> 9452          VY = *VP1Y;
                                                   >> 9453          VZ = *VP1Z;
                                                   >> 9454          }
                                                   >> 9455 
                                                   >> 9456          AFP = 4;
                                                   >> 9457          ZFP = 2;
                                                   >> 9458          //PEVA = PEVA + 3;
                                                   >> 9459          IOUNSTABLE = 1;
                                                   >> 9460          }
                                                   >> 9461          if ((AFP==8) && (ZFP==4)){
                                                   >> 9462 // 8Be  -> 4He + 4He
                                                   >> 9463           AFP = 4;
                                                   >> 9464           ZFP = 2;
                                                   >> 9465          IOUNSTABLE = 1;
                                                   >> 9466          unstable_tke(8.0,4.0,4.0,2.0,
                                                   >> 9467          VX,VY,VZ,
                                                   >> 9468          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9469          BU_TAB_TEMP[*ILOOP][0] = 2.0;
                                                   >> 9470          BU_TAB_TEMP[*ILOOP][1] = 4.0;
                                                   >> 9471          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9472          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9473          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9474          *ILOOP = *ILOOP + 1;
                                                   >> 9475          }
                                                   >> 9476          if ((AFP==8) && (ZFP==6)){
                                                   >> 9477 // 8C  -> 2p + 6Be
                                                   >> 9478           AFP = 6;
                                                   >> 9479           ZFP = 4;
                                                   >> 9480           //PEVA = PEVA + 2;
                                                   >> 9481          IOUNSTABLE = 1;
                                                   >> 9482 
                                                   >> 9483          unstable_tke(8.0,6.0,7.0,5.0,
                                                   >> 9484          VX,VY,VZ,
                                                   >> 9485          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9486          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9487          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9488          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9489          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9490          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9491          *ILOOP = *ILOOP + 1;
                                                   >> 9492          VX = *VP1X;
                                                   >> 9493          VY = *VP1Y;
                                                   >> 9494          VZ = *VP1Z;
                                                   >> 9495 
                                                   >> 9496          unstable_tke(7.0,5.0,6.0,4.0,
                                                   >> 9497          VX,VY,VZ,
                                                   >> 9498          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9499          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9500          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9501          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9502          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9503          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9504          *ILOOP = *ILOOP + 1;
                                                   >> 9505          VX = *VP1X;
                                                   >> 9506          VY = *VP1Y;
                                                   >> 9507          VZ = *VP1Z;
                                                   >> 9508          }
                                                   >> 9509 
                                                   >> 9510          if((AFP==9) && (ZFP==2)){
                                                   >> 9511 // 9He -> 8He + n
                                                   >> 9512            AFP = 8;
                                                   >> 9513            ZFP = 2;
                                                   >> 9514            //NEVA = NEVA + 1;
                                                   >> 9515          IOUNSTABLE = 1;
                                                   >> 9516 
                                                   >> 9517          unstable_tke(9.0,2.0,8.0,2.0,
                                                   >> 9518          VX,VY,VZ,
                                                   >> 9519          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9520          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9521          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9522          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9523          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9524          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9525          *ILOOP = *ILOOP + 1;
                                                   >> 9526          VX = *VP1X;
                                                   >> 9527          VY = *VP1Y;
                                                   >> 9528          VZ = *VP1Z;
                                                   >> 9529          }
                                                   >> 9530 
                                                   >> 9531          if((AFP==9) && (ZFP==5)){
                                                   >> 9532 // 9B -> 4He + 4He + p  ->
                                                   >> 9533           AFP = 4;
                                                   >> 9534           ZFP = 2;
                                                   >> 9535           //PEVA = PEVA + 1;
                                                   >> 9536          IOUNSTABLE = 1;
                                                   >> 9537          unstable_tke(9.0,5.0,8.0,4.0,
                                                   >> 9538          VX,VY,VZ,
                                                   >> 9539          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9540          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9541          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9542          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9543          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9544          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9545          *ILOOP = *ILOOP + 1;
                                                   >> 9546          VX = *VP1X;
                                                   >> 9547          VY = *VP1Y;
                                                   >> 9548          VZ = *VP1Z;
                                                   >> 9549 
                                                   >> 9550          unstable_tke(8.0,4.0,4.0,2.0,
                                                   >> 9551          VX,VY,VZ,
                                                   >> 9552          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9553          BU_TAB_TEMP[*ILOOP][0] = 2.0;
                                                   >> 9554          BU_TAB_TEMP[*ILOOP][1] = 4.0;
                                                   >> 9555          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9556          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9557          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9558          *ILOOP = *ILOOP + 1;
                                                   >> 9559          VX = *VP1X;
                                                   >> 9560          VY = *VP1Y;
                                                   >> 9561          VZ = *VP1Z;
                                                   >> 9562          }
                                                   >> 9563 
                                                   >> 9564          if((AFP==10) && (ZFP==2)){
                                                   >> 9565 // 10He -> 8He + 2n
                                                   >> 9566            AFP = 8;
                                                   >> 9567            ZFP = 2;
                                                   >> 9568            //NEVA = NEVA + 2;
                                                   >> 9569          IOUNSTABLE = 1;
                                                   >> 9570 // 10He -> 9He + n
                                                   >> 9571          unstable_tke(10.0,2.0,9.0,2.0,
                                                   >> 9572          VX,VY,VZ,
                                                   >> 9573          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9574          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9575          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9576          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9577          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9578          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9579          *ILOOP = *ILOOP + 1;
                                                   >> 9580          VX = *VP1X;
                                                   >> 9581          VY = *VP1Y;
                                                   >> 9582          VZ = *VP1Z;
                                                   >> 9583 
                                                   >> 9584 // 9He -> 8He + n
                                                   >> 9585          unstable_tke(9.0,2.0,8.0,2.0,
                                                   >> 9586          VX,VY,VZ,
                                                   >> 9587          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9588          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9589          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9590          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9591          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9592          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9593          *ILOOP = *ILOOP + 1;
                                                   >> 9594          VX = *VP1X;
                                                   >> 9595          VY = *VP1Y;
                                                   >> 9596          VZ = *VP1Z;
                                                   >> 9597          }
                                                   >> 9598          if ((AFP==10) && (ZFP==3)){
                                                   >> 9599 // 10Li -> 9Li + n  ->
                                                   >> 9600           AFP = 9;
                                                   >> 9601           ZFP = 3;
                                                   >> 9602           //NEVA = NEVA + 1;
                                                   >> 9603          IOUNSTABLE = 1;
                                                   >> 9604          unstable_tke(10.0,3.0,9.0,3.0,
                                                   >> 9605          VX,VY,VZ,
                                                   >> 9606          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9607          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9608          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9609          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9610          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9611          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9612          *ILOOP = *ILOOP + 1;
                                                   >> 9613          VX = *VP1X;
                                                   >> 9614          VY = *VP1Y;
                                                   >> 9615          VZ = *VP1Z;
                                                   >> 9616          }
                                                   >> 9617          if ((AFP==10) && (ZFP==7)){
                                                   >> 9618 // 10N -> 9C + p  ->
                                                   >> 9619           AFP = 9;
                                                   >> 9620           ZFP = 6;
                                                   >> 9621           //PEVA = PEVA + 1;
                                                   >> 9622          IOUNSTABLE = 1;
                                                   >> 9623          unstable_tke(10.0,7.0,9.0,6.0,
                                                   >> 9624          VX,VY,VZ,
                                                   >> 9625          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9626          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9627          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9628          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9629          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9630          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9631          *ILOOP = *ILOOP + 1;
                                                   >> 9632          VX = *VP1X;
                                                   >> 9633          VY = *VP1Y;
                                                   >> 9634          VZ = *VP1Z;
                                                   >> 9635          }
                                                   >> 9636 
                                                   >> 9637          if((AFP==11) && (ZFP==7)){
                                                   >> 9638 // 11N -> 10C + p  ->
                                                   >> 9639           AFP = 10;
                                                   >> 9640           ZFP = 6;
                                                   >> 9641           //PEVA = PEVA + 1;
                                                   >> 9642          IOUNSTABLE = 1;
                                                   >> 9643          unstable_tke(11.0,7.0,10.0,6.0,
                                                   >> 9644          VX,VY,VZ,
                                                   >> 9645          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9646          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9647          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9648          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9649          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9650          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9651          *ILOOP = *ILOOP + 1;
                                                   >> 9652          VX = *VP1X;
                                                   >> 9653          VY = *VP1Y;
                                                   >> 9654          VZ = *VP1Z;
                                                   >> 9655          }
                                                   >> 9656          if ((AFP==12) && (ZFP==8)){
                                                   >> 9657 // 12O -> 10C + 2p  ->
                                                   >> 9658           AFP = 10;
                                                   >> 9659           ZFP = 6;
                                                   >> 9660           //PEVA = PEVA + 2;
                                                   >> 9661          IOUNSTABLE = 1;
                                                   >> 9662 
                                                   >> 9663          unstable_tke(12.0,8.0,11.0,7.0,
                                                   >> 9664          VX,VY,VZ,
                                                   >> 9665          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9666          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9667          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9668          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9669          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9670          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9671          *ILOOP = *ILOOP + 1;
                                                   >> 9672          VX = *VP1X;
                                                   >> 9673          VY = *VP1Y;
                                                   >> 9674          VZ = *VP1Z;
                                                   >> 9675 
                                                   >> 9676          unstable_tke(11.0,7.0,10.0,6.0,
                                                   >> 9677          VX,VY,VZ,
                                                   >> 9678          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9679          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9680          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9681          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9682          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9683          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9684          *ILOOP = *ILOOP + 1;
                                                   >> 9685          VX = *VP1X;
                                                   >> 9686          VY = *VP1Y;
                                                   >> 9687          VZ = *VP1Z;
                                                   >> 9688          }
                                                   >> 9689          if ((AFP==15) && (ZFP==9)){
                                                   >> 9690 // 15F -> 14O + p  ->
                                                   >> 9691           AFP = 14;
                                                   >> 9692           ZFP = 8;
                                                   >> 9693           //PEVA = PEVA + 1;
                                                   >> 9694          IOUNSTABLE = 1;
                                                   >> 9695          unstable_tke(15.0,9.0,14.0,8.0,
                                                   >> 9696          VX,VY,VZ,
                                                   >> 9697          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9698          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9699          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9700          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9701          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9702          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9703          *ILOOP = *ILOOP + 1;
                                                   >> 9704          VX = *VP1X;
                                                   >> 9705          VY = *VP1Y;
                                                   >> 9706          VZ = *VP1Z;
                                                   >> 9707          }
                                                   >> 9708 
                                                   >> 9709          if ((AFP==16) && (ZFP==9)){
                                                   >> 9710 // 16F -> 15O + p  ->
                                                   >> 9711           AFP = 15;
                                                   >> 9712           ZFP = 8;
                                                   >> 9713           //PEVA = PEVA + 1;
                                                   >> 9714          IOUNSTABLE = 1;
                                                   >> 9715          unstable_tke(16.0,9.0,15.0,8.0,
                                                   >> 9716          VX,VY,VZ,
                                                   >> 9717          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9718          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9719          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9720          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9721          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9722          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9723          *ILOOP = *ILOOP + 1;
                                                   >> 9724          VX = *VP1X;
                                                   >> 9725          VY = *VP1Y;
                                                   >> 9726          VZ = *VP1Z;
                                                   >> 9727          }
                                                   >> 9728 
                                                   >> 9729          if ((AFP==16) && (ZFP==10)){
                                                   >> 9730 // 16Ne -> 14O + 2p  ->
                                                   >> 9731           AFP = 14;
                                                   >> 9732           ZFP = 8;
                                                   >> 9733           //PEVA = PEVA + 2;
                                                   >> 9734          IOUNSTABLE = 1;
                                                   >> 9735          unstable_tke(16.0,10.0,15.0,9.0,
                                                   >> 9736          VX,VY,VZ,
                                                   >> 9737          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9738          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9739          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9740          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9741          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9742          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9743          *ILOOP = *ILOOP + 1;
                                                   >> 9744          VX = *VP1X;
                                                   >> 9745          VY = *VP1Y;
                                                   >> 9746          VZ = *VP1Z;
                                                   >> 9747 
                                                   >> 9748          unstable_tke(15.0,9.0,14.0,8.0,
                                                   >> 9749          VX,VY,VZ,
                                                   >> 9750          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9751          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9752          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9753          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9754          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9755          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9756          *ILOOP = *ILOOP + 1;
                                                   >> 9757          VX = *VP1X;
                                                   >> 9758          VY = *VP1Y;
                                                   >> 9759          VZ = *VP1Z;
                                                   >> 9760          }
                                                   >> 9761          if((AFP==18) && (ZFP==11)){
                                                   >> 9762 // 18Na -> 17Ne + p  ->
                                                   >> 9763           AFP = 17;
                                                   >> 9764           ZFP = 10;
                                                   >> 9765           //PEVA = PEVA + 1;
                                                   >> 9766          IOUNSTABLE = 1;
                                                   >> 9767          unstable_tke(18.0,11.0,17.0,10.0,
                                                   >> 9768          VX,VY,VZ,
                                                   >> 9769          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9770          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9771          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9772          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9773          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9774          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9775          *ILOOP = *ILOOP + 1;
                                                   >> 9776          VX = *VP1X;
                                                   >> 9777          VY = *VP1Y;
                                                   >> 9778          VZ = *VP1Z;
                                                   >> 9779          }
                                                   >> 9780          if((AFP==19) && (ZFP==11)){
                                                   >> 9781 // 19Na -> 18Ne + p  ->
                                                   >> 9782          AFP = 18;
                                                   >> 9783          ZFP = 10;
                                                   >> 9784          //PEVA = PEVA + 1;
                                                   >> 9785          IOUNSTABLE = 1;
                                                   >> 9786          unstable_tke(19.0,11.0,18.0,10.0,
                                                   >> 9787          VX,VY,VZ,
                                                   >> 9788          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9789          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9790          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9791          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9792          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9793          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9794          *ILOOP = *ILOOP + 1;
                                                   >> 9795          VX = *VP1X;
                                                   >> 9796          VY = *VP1Y;
                                                   >> 9797          VZ = *VP1Z;
                                                   >> 9798          }
                                                   >> 9799          if (ZFP>=4 && (AFP-ZFP)==1){
                                                   >> 9800 // Heavy residue is treated as 3He
                                                   >> 9801            NEVA = AFP - 3;
                                                   >> 9802            PEVA = ZFP - 2;
                                                   >> 9803 
                                                   >> 9804          for(G4int I = 0;I< NEVA;I++){
                                                   >> 9805         unstable_tke(G4double(AFP-I),G4double(ZFP),
                                                   >> 9806          G4double(AFP-I-1),G4double(ZFP),
                                                   >> 9807          VX,VY,VZ,
                                                   >> 9808          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9809          BU_TAB_TEMP[*ILOOP][0] = 0.0;
                                                   >> 9810          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9811          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9812          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9813          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9814          *ILOOP = *ILOOP + 1;
                                                   >> 9815          VX = *VP1X;
                                                   >> 9816          VY = *VP1Y;
                                                   >> 9817          VZ = *VP1Z;
                                                   >> 9818          }
                                                   >> 9819         for( G4int I = 0;I<PEVA;I++){
                                                   >> 9820         unstable_tke(G4double(AFP-NEVA-I),G4double(ZFP-I),
                                                   >> 9821          G4double(AFP-NEVA-I-1),G4double(ZFP-I-1),
                                                   >> 9822          VX,VY,VZ,
                                                   >> 9823          &(*VP1X),&(*VP1Y),&(*VP1Z),&VP2X,&VP2Y,&VP2Z);
                                                   >> 9824          BU_TAB_TEMP[*ILOOP][0] = 1.0;
                                                   >> 9825          BU_TAB_TEMP[*ILOOP][1] = 1.0;
                                                   >> 9826          BU_TAB_TEMP[*ILOOP][2] = VP2X;
                                                   >> 9827          BU_TAB_TEMP[*ILOOP][3] = VP2Y;
                                                   >> 9828          BU_TAB_TEMP[*ILOOP][4] = VP2Z;
                                                   >> 9829          *ILOOP = *ILOOP + 1;
                                                   >> 9830          VX = *VP1X;
                                                   >> 9831          VY = *VP1Y;
                                                   >> 9832          VZ = *VP1Z;
                                                   >> 9833          }
                                                   >> 9834 
                                                   >> 9835          AFP = 3;
                                                   >> 9836          ZFP = 2;
                                                   >> 9837          IOUNSTABLE = 1;
                                                   >> 9838          }
                                                   >> 9839 //
                                                   >> 9840       *AFPNEW = AFP;
                                                   >> 9841       *ZFPNEW = ZFP;
                                                   >> 9842       return;
11708 }                                               9843 }
11709                                                 9844 
11710 //                                              9845 //
11711 //                                              9846 //
11712 void G4Abla::unstable_tke(G4double ain,      << 9847 void G4Abla::unstable_tke(G4double ain,G4double zin,G4double anew,G4double znew,G4double vxin,G4double vyin,G4double vzin,G4double *v1x,G4double *v1y,G4double *v1z,G4double *v2x,G4double *v2y,G4double *v2z){
11713                           G4double zin,      << 9848 //
11714                           G4double anew,     << 9849       G4double EKIN_P1=0.,ekin_tot=0.;
11715                           G4double znew,     << 9850       G4double PX1,PX2,PY1,PY2,PZ1,PZ2,PTOT;
11716                           G4double vxin,     << 9851       G4double RNDT,CTET1,STET1,RNDP,PHI1,ETOT_P1,ETOT_P2;
11717                           G4double vyin,     << 9852       G4double MASS,MASS1,MASS2;
11718                           G4double vzin,     << 9853       G4double vxout=0.,vyout=0.,vzout=0.;
11719                           G4double* v1x,     << 9854       G4int iain,izin,ianew,iznew,inin,innew;
11720                           G4double* v1y,     << 9855 //
11721                           G4double* v1z,     << 9856       G4double C = 29.97924580;//         cm/ns
11722                           G4double* v2x,     << 9857       G4double AMU = 931.4940; //         MeV/C^2
11723                           G4double* v2y,     << 9858 //
11724                           G4double* v2z)     << 9859       iain = idnint(ain);
11725 {                                            << 9860       izin = idnint(zin);
11726     //                                       << 9861       inin = iain - izin;
11727     G4double EKIN_P1 = 0., ekin_tot = 0.;    << 9862       ianew = idnint(anew);
11728     G4double PX1, PX2, PY1, PY2, PZ1, PZ2, P << 9863       iznew = idnint(znew);
11729     G4double RNDT, CTET1, STET1, RNDP, PHI1, << 9864       innew = ianew - iznew;
11730     G4double MASS, MASS1, MASS2;             << 9865       //
11731     G4double vxout = 0., vyout = 0., vzout = << 9866       if(ain==0)return;
11732     G4int iain, izin, ianew, iznew, inin, in << 9867       //
11733     //                                       << 9868       if(izin>12){
11734     G4double C = 29.97924580; //         cm/ << 9869       mglms(ain,zin,3,&MASS);
11735     G4double AMU = 931.4940;  //         MeV << 9870       mglms(anew,znew,3,&MASS1);
11736                               //             << 9871       mglms(ain-anew,zin-znew,3,&MASS2);
11737     iain = idnint(ain);                      << 9872       ekin_tot = MASS-MASS1-MASS2;
11738     izin = idnint(zin);                      << 9873       }else{
11739     inin = iain - izin;                      << 9874     //  ekin_tot = MEXP(ININ,IZIN)-(MEXP(INNEW,IZNEW)+MEXP(ININ-INNEW,IZIN-IZNEW));
11740     ianew = idnint(anew);                    << 9875       ekin_tot = masses->massexp[inin][izin]-(masses->massexp[innew][iznew]+masses->massexp[inin-innew][izin-iznew]);
11741     iznew = idnint(znew);                    << 9876       if(izin>12)std::cout << "*** ZIN > 12 ***" << izin << std::endl;
11742     innew = ianew - iznew;                   << 9877       }
11743     //                                       << 9878 
11744     if (ain == 0)                            << 9879       if( ekin_tot<0.00 ){
11745         return;                              << 9880 //         if( iain.ne.izin .and. izin.ne.0 ){
11746     //                                       << 9881 //            print *,"Negative Q-value in UNSTABLE_TKE"
11747     if (izin > 12)                           << 9882 //            print *,"ekin_tot=",ekin_tot
11748     {                                        << 9883 //            print *,"ain,zin=",ain,zin,MEXP(ININ,IZIN)
11749         mglms(ain, zin, 3, &MASS);           << 9884 //            print *,"anew,znew=",anew,znew,MEXP(INNEW,IZNEW)
11750         mglms(anew, znew, 3, &MASS1);        << 9885 //            print *
11751         mglms(ain - anew, zin - znew, 3, &MA << 9886 //          }
11752         ekin_tot = MASS - MASS1 - MASS2;     << 9887         ekin_tot=0.0;
11753     }                                        << 9888       }
11754     else                                     << 9889 //
11755     {                                        << 9890       EKIN_P1 = ekin_tot*(ain-anew)/ ain;
11756         //  ekin_tot =                       << 9891       ETOT_P1 = EKIN_P1 + anew * AMU;
11757         //  MEXP(ININ,IZIN)-(MEXP(INNEW,IZNE << 9892       PTOT = anew*AMU*std::sqrt((EKIN_P1/(anew*AMU)+1.0)*(EKIN_P1/(anew*AMU)+1.0)-1.0);  // MeV/C
11758         ekin_tot =                           << 9893 //
11759             masses->massexp[inin][izin] - (m << 9894       RNDT = G4AblaRandom::flat();
11760         if (izin > 12)                       << 9895       CTET1 = 2.0*RNDT-1.0;
11761             std::cout << "*** ZIN > 12 ***"  << 9896       STET1 = std::sqrt(1.0-CTET1*CTET1);
11762     }                                        << 9897       RNDP = G4AblaRandom::flat();
11763                                              << 9898       PHI1 = RNDP*2.0*3.141592654;
11764     if (ekin_tot < 0.00)                     << 9899       PX1 = PTOT * STET1*std::cos(PHI1);
11765     {                                        << 9900       PY1 = PTOT * STET1*std::sin(PHI1);
11766         //         if( iain.ne.izin .and. iz << 9901       PZ1 = PTOT * CTET1;
11767         //            print *,"Negative Q-va << 9902       *v1x = C * PX1 / ETOT_P1;
11768         //            print *,"ekin_tot=",ek << 9903       *v1y = C * PY1 / ETOT_P1;
11769         //            print *,"ain,zin=",ain << 9904       *v1z = C * PZ1 / ETOT_P1;
11770         //            print *,"anew,znew=",a << 9905       lorentz_boost(vxin,vyin,vzin,*v1x,*v1y,*v1z,&vxout,&vyout,&vzout);
11771         //            print *                << 9906       *v1x = vxout;
11772         //          }                        << 9907       *v1y = vyout;
11773         ekin_tot = 0.0;                      << 9908       *v1z = vzout;
11774     }                                        << 9909 //
11775     //                                       << 9910       PX2 = - PX1;
11776     EKIN_P1 = ekin_tot * (ain - anew) / ain; << 9911       PY2 = - PY1;
11777     ETOT_P1 = EKIN_P1 + anew * AMU;          << 9912       PZ2 = - PZ1;
11778     PTOT = anew * AMU * std::sqrt((EKIN_P1 / << 9913       ETOT_P2 = (ekin_tot - EKIN_P1) + (ain-anew) * AMU;
11779                                              << 9914       *v2x = C * PX2 / ETOT_P2;
11780     RNDT = G4AblaRandom::flat();             << 9915       *v2y = C * PY2 / ETOT_P2;
11781     CTET1 = 2.0 * RNDT - 1.0;                << 9916       *v2z = C * PZ2 / ETOT_P2;
11782     STET1 = std::sqrt(1.0 - CTET1 * CTET1);  << 9917       lorentz_boost(vxin,vyin,vzin,*v2x,*v2y,*v2z,&vxout,&vyout,&vzout);
11783     RNDP = G4AblaRandom::flat();             << 9918       *v2x = vxout;
11784     PHI1 = RNDP * 2.0 * 3.141592654;         << 9919       *v2y = vyout;
11785     PX1 = PTOT * STET1 * std::cos(PHI1);     << 9920       *v2z = vzout;
11786     PY1 = PTOT * STET1 * std::sin(PHI1);     << 9921 //
11787     PZ1 = PTOT * CTET1;                      << 9922    return;
11788     *v1x = C * PX1 / ETOT_P1;                << 
11789     *v1y = C * PY1 / ETOT_P1;                << 
11790     *v1z = C * PZ1 / ETOT_P1;                << 
11791     lorentz_boost(vxin, vyin, vzin, *v1x, *v << 
11792     *v1x = vxout;                            << 
11793     *v1y = vyout;                            << 
11794     *v1z = vzout;                            << 
11795     //                                       << 
11796     PX2 = -PX1;                              << 
11797     PY2 = -PY1;                              << 
11798     PZ2 = -PZ1;                              << 
11799     ETOT_P2 = (ekin_tot - EKIN_P1) + (ain -  << 
11800     *v2x = C * PX2 / ETOT_P2;                << 
11801     *v2y = C * PY2 / ETOT_P2;                << 
11802     *v2z = C * PZ2 / ETOT_P2;                << 
11803     lorentz_boost(vxin, vyin, vzin, *v2x, *v << 
11804     *v2x = vxout;                            << 
11805     *v2y = vyout;                            << 
11806     *v2z = vzout;                            << 
11807     //                                       << 
11808     return;                                  << 
11809 }                                               9923 }
11810 //                                              9924 //
11811 //******************************************    9925 //**************************************************************************
11812 //                                              9926 //
11813 void G4Abla::lorentz_boost(G4double VXRIN,   << 9927 void G4Abla::lorentz_boost(G4double VXRIN,G4double VYRIN,G4double VZRIN,G4double VXIN,G4double VYIN,G4double VZIN,G4double *VXOUT,G4double *VYOUT,G4double *VZOUT){
11814                            G4double VYRIN,   << 9928 //
11815                            G4double VZRIN,   << 9929 // Calculate velocities of a given fragment from frame 1 into frame 2.
11816                            G4double VXIN,    << 9930 // Frame 1 is moving with velocity v=(vxr,vyr,vzr) relative to frame 2.
11817                            G4double VYIN,    << 9931 // Velocity of the fragment in frame 1 -> vxin,vyin,vzin
11818                            G4double VZIN,    << 9932 // Velocity of the fragment in frame 2 -> vxout,vyout,vzout
11819                            G4double* VXOUT,  << 9933 //
11820                            G4double* VYOUT,  << 9934       G4double  VXR,VYR,VZR;
11821                            G4double* VZOUT)  << 9935       G4double  GAMMA,VR,C,CC,DENO,VXNOM,VYNOM,VZNOM;
11822 {                                            << 9936 //
11823     //                                       << 9937       C = 29.9792458;        // cm/ns
11824     // Calculate velocities of a given fragm << 9938       CC = C*C;
11825     // Frame 1 is moving with velocity v=(vx << 9939 //
11826     // Velocity of the fragment in frame 1 - << 9940 // VXR,VYR,VZR are velocities of frame 1 relative to frame 2; to go from 1 to 2
11827     // Velocity of the fragment in frame 2 - << 9941 // we need to multiply them by -1
11828     //                                       << 9942       VXR = -1.0 * VXRIN;
11829     G4double VXR, VYR, VZR;                  << 9943       VYR = -1.0 * VYRIN;
11830     G4double GAMMA, VR, C, CC, DENO, VXNOM,  << 9944       VZR = -1.0 * VZRIN;
11831     //                                       << 9945 //
11832     C = 29.9792458; // cm/ns                 << 9946       VR = std::sqrt(VXR*VXR + VYR*VYR + VZR*VZR);
11833     CC = C * C;                              << 9947       if(VR<1e-9){
11834     //                                       << 9948          *VXOUT = VXIN;
11835     // VXR,VYR,VZR are velocities of frame 1 << 9949          *VYOUT = VYIN;
11836     // 2 we need to multiply them by -1      << 9950          *VZOUT = VZIN;
11837     VXR = -1.0 * VXRIN;                      << 9951          return;
11838     VYR = -1.0 * VYRIN;                      << 9952       }
11839     VZR = -1.0 * VZRIN;                      << 9953       GAMMA = 1.0/std::sqrt(1.0 - VR*VR/CC);
11840     //                                       << 9954       DENO = 1.0 - VXR*VXIN/CC - VYR*VYIN/CC - VZR*VZIN/CC;
11841     VR = std::sqrt(VXR * VXR + VYR * VYR + V << 
11842     if (VR < 1e-9)                           << 
11843     {                                        << 
11844         *VXOUT = VXIN;                       << 
11845         *VYOUT = VYIN;                       << 
11846         *VZOUT = VZIN;                       << 
11847         return;                              << 
11848     }                                        << 
11849     GAMMA = 1.0 / std::sqrt(1.0 - VR * VR /  << 
11850     DENO = 1.0 - VXR * VXIN / CC - VYR * VYI << 
11851                                              << 
11852     // X component                           << 
11853     VXNOM = -GAMMA * VXR + (1.0 + (GAMMA - 1 << 
11854             (GAMMA - 1.0) * VXR * VYR / (VR  << 
11855                                              << 
11856     *VXOUT = VXNOM / (GAMMA * DENO);         << 
11857                                                 9955 
11858     // Y component                           << 9956 // X component
11859     VYNOM = -GAMMA * VYR + (1.0 + (GAMMA - 1 << 9957       VXNOM = -GAMMA*VXR + (1.0+(GAMMA-1.0)*VXR*VXR/(VR*VR))*VXIN + (GAMMA-1.0)*VXR*VYR/(VR*VR)*VYIN + (GAMMA-1.0)*VXR*VZR/(VR*VR)*VZIN;
11860             (GAMMA - 1.0) * VXR * VYR / (VR  << 
11861                                                 9958 
11862     *VYOUT = VYNOM / (GAMMA * DENO);         << 9959       *VXOUT = VXNOM / (GAMMA * DENO);
11863                                                 9960 
11864     // Z component                           << 9961 // Y component
11865     VZNOM = -GAMMA * VZR + (1.0 + (GAMMA - 1 << 9962       VYNOM = -GAMMA*VYR + (1.0+(GAMMA-1.0)*VYR*VYR/(VR*VR))*VYIN + (GAMMA-1.0)*VXR*VYR/(VR*VR)*VXIN + (GAMMA-1.0)*VYR*VZR/(VR*VR)*VZIN;
11866             (GAMMA - 1.0) * VXR * VZR / (VR  << 9963 
                                                   >> 9964       *VYOUT = VYNOM / (GAMMA * DENO);
                                                   >> 9965 
                                                   >> 9966 // Z component
                                                   >> 9967       VZNOM = -GAMMA*VZR + (1.0+(GAMMA-1.0)*VZR*VZR/(VR*VR))*VZIN + (GAMMA-1.0)*VXR*VZR/(VR*VR)*VXIN + (GAMMA-1.0)*VYR*VZR/(VR*VR)*VYIN;
                                                   >> 9968 
                                                   >> 9969       *VZOUT = VZNOM / (GAMMA * DENO);
                                                   >> 9970 
                                                   >> 9971      return;
                                                   >> 9972 }
                                                   >> 9973 
                                                   >> 9974 void G4Abla::fission(G4double AF,G4double ZF,G4double EE,G4double JPRF,
                                                   >> 9975         G4double *VX1_FISSION_par,G4double *VY1_FISSION_par,G4double *VZ1_FISSION_par,
                                                   >> 9976         G4double *VX2_FISSION_par,G4double *VY2_FISSION_par,G4double *VZ2_FISSION_par,
                                                   >> 9977         G4int *ZFP1,G4int *AFP1,G4int *SFP1, G4int *ZFP2,G4int *AFP2,G4int *SFP2,G4int *imode_par, 
                                                   >> 9978         G4double *VX_EVA_SC_par, G4double *VY_EVA_SC_par, G4double *VZ_EVA_SC_par,
                                                   >> 9979         G4double EV_TEMP[200][6],G4int *IEV_TAB_FIS_par, G4int *NbLam0_par){
                                                   >> 9980 ///
                                                   >> 9981        G4double EFF1=0.,EFF2=0.,VFF1=0.,VFF2=0.,
                                                   >> 9982                  AF1=0.,ZF1=0.,AF2=0.,ZF2=0.,
                                                   >> 9983                  AFF1=0.,ZFF1=0.,AFF2=0.,ZFF2=0.,
                                                   >> 9984                  vz1_eva=0., vx1_eva=0.,vy1_eva=0.,
                                                   >> 9985                  vz2_eva=0., vx2_eva=0.,vy2_eva=0.,
                                                   >> 9986                  vx_eva_sc=0.,vy_eva_sc=0.,vz_eva_sc=0.,
                                                   >> 9987                  VXOUT=0.,VYOUT=0.,VZOUT=0.,
                                                   >> 9988                  VX2OUT=0.,VY2OUT=0.,VZ2OUT=0.;
                                                   >> 9989        G4int IEV_TAB_FIS=0,IEV_TAB_TEMP=0;
                                                   >> 9990        G4double EV_TEMP1[200][6], EV_TEMP2[200][6],mtota=0.;
                                                   >> 9991        G4int inttype = 0,inum=0;
                                                   >> 9992        IEV_TAB_SSC=0;
                                                   >> 9993        (*imode_par)=0;
                                                   >> 9994        G4int NbLam0= (*NbLam0_par);
                                                   >> 9995 
                                                   >> 9996        for(G4int I1=0;I1<200;I1++)
                                                   >> 9997        for(G4int I2=0;I2<6;I2++){
                                                   >> 9998        EV_TEMP[I1][I2] = 0.0;
                                                   >> 9999        EV_TEMP1[I1][I2] = 0.0;
                                                   >> 10000        EV_TEMP2[I1][I2] = 0.0;
                                                   >> 10001        }
                                                   >> 10002 
                                                   >> 10003        G4double et = EE - JPRF * JPRF * 197. * 197./(2.*0.4*931.*std::pow(AF,5.0/3.0)*1.16*1.16);
                                                   >> 10004 
                                                   >> 10005        fissionDistri(AF,ZF,et,AF1,ZF1,EFF1,VFF1,AF2,ZF2,EFF2,VFF2,
                                                   >> 10006                      vx_eva_sc,vy_eva_sc,vz_eva_sc,&NbLam0);
                                                   >> 10007 
                                                   >> 10008 //  Lambda particles 
                                                   >> 10009       G4int NbLam1=0;
                                                   >> 10010       G4int NbLam2=0;
                                                   >> 10011       G4double pbH = (AF1 - ZF1) / (AF1 - ZF1 + AF2 - ZF2);  
                                                   >> 10012       for(G4int i=0;i<NbLam0;i++){
                                                   >> 10013        if(G4AblaRandom::flat()<pbH){
                                                   >> 10014         NbLam1++;
                                                   >> 10015        }else{
                                                   >> 10016         NbLam2++;
                                                   >> 10017        }
                                                   >> 10018       }
                                                   >> 10019 //     Copy of the evaporated particles from saddle to scission
                                                   >> 10020        for(G4int IJ = 0; IJ< IEV_TAB_SSC;IJ++){
                                                   >> 10021              EV_TEMP[IJ][0] = EV_TAB_SSC[IJ][0];
                                                   >> 10022              EV_TEMP[IJ][1] = EV_TAB_SSC[IJ][1];
                                                   >> 10023              EV_TEMP[IJ][2] = EV_TAB_SSC[IJ][2];
                                                   >> 10024              EV_TEMP[IJ][3] = EV_TAB_SSC[IJ][3];
                                                   >> 10025              EV_TEMP[IJ][4] = EV_TAB_SSC[IJ][4];
                                                   >> 10026              EV_TEMP[IJ][5] = EV_TAB_SSC[IJ][5];
                                                   >> 10027        }
                                                   >> 10028        IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_SSC;
                                                   >> 10029 
                                                   >> 10030 //    Velocities
                                                   >> 10031       G4double VZ1_FISSION = (2.0 * G4AblaRandom::flat() - 1.0) * VFF1;
                                                   >> 10032       G4double VPERP1 = std::sqrt(VFF1*VFF1 - VZ1_FISSION*VZ1_FISSION);
                                                   >> 10033       G4double ALPHA1 = G4AblaRandom::flat() * 2. * 3.142;
                                                   >> 10034       G4double VX1_FISSION = VPERP1 * std::sin(ALPHA1);
                                                   >> 10035       G4double VY1_FISSION = VPERP1 * std::cos(ALPHA1);
                                                   >> 10036       G4double VX2_FISSION = - VX1_FISSION / VFF1 * VFF2;
                                                   >> 10037       G4double VY2_FISSION = - VY1_FISSION / VFF1 * VFF2;
                                                   >> 10038       G4double VZ2_FISSION = - VZ1_FISSION / VFF1 * VFF2;
                                                   >> 10039 //
                                                   >> 10040 // Fission fragment 1
                                                   >> 10041       if( (ZF1<=0.0) || (AF1<=0.0) || (AF1<ZF1) ){
                                                   >> 10042        std::cout << "F1 unphysical: "<<ZF<< " "<<AF<< " "<<EE<< " "<<ZF1<< " "<<AF1 << std::endl;
                                                   >> 10043       }else{
                                                   >> 10044 // fission and IMF emission are not allowed
                                                   >> 10045      opt->optimfallowed = 0; //  IMF is not allowed
                                                   >> 10046      fiss->ifis = 0;         //  fission is not allowed
                                                   >> 10047      gammaemission=1;
                                                   >> 10048      G4int FF11=0, FIMF11=0;
                                                   >> 10049      G4double ZIMFF1=0., AIMFF1=0.,TKEIMF1=0.,JPRFOUT=0.;
                                                   >> 10050 //
                                                   >> 10051      evapora(ZF1,AF1,&EFF1,0., &ZFF1, &AFF1, &mtota, &vz1_eva, &vx1_eva,&vy1_eva, &FF11, &FIMF11, &ZIMFF1, &AIMFF1,&TKEIMF1, &JPRFOUT, &inttype, &inum,EV_TEMP1,&IEV_TAB_TEMP,&NbLam1);
11867                                                 10052 
11868     *VZOUT = VZNOM / (GAMMA * DENO);         << 10053                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){ 
                                                   >> 10054                EV_TEMP[IJ+IEV_TAB_FIS][0] = EV_TEMP1[IJ][0];
                                                   >> 10055                EV_TEMP[IJ+IEV_TAB_FIS][1] = EV_TEMP1[IJ][1];
                                                   >> 10056 // Lorentz kinematics
                                                   >> 10057 //               EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
                                                   >> 10058 //               EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
                                                   >> 10059 //               EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
                                                   >> 10060 // Lorentz transformation
                                                   >> 10061                lorentz_boost(VX1_FISSION,VY1_FISSION,VZ1_FISSION,
                                                   >> 10062                 EV_TEMP1[IJ][2],EV_TEMP1[IJ][3],EV_TEMP1[IJ][4],
                                                   >> 10063                 &VXOUT,&VYOUT,&VZOUT);
                                                   >> 10064                lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc,
                                                   >> 10065                 VXOUT,VYOUT,VZOUT,
                                                   >> 10066                 &VX2OUT,&VY2OUT,&VZ2OUT);
                                                   >> 10067                EV_TEMP[IJ+IEV_TAB_FIS][2] = VX2OUT;
                                                   >> 10068                EV_TEMP[IJ+IEV_TAB_FIS][3] = VY2OUT;
                                                   >> 10069                EV_TEMP[IJ+IEV_TAB_FIS][4] = VZ2OUT;
                                                   >> 10070                //
                                                   >> 10071                }
                                                   >> 10072                IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP;
11869                                                 10073 
11870     return;                                  << 10074       }
11871 }                                            << 10075 //
                                                   >> 10076 // Fission fragment 2
                                                   >> 10077       if( (ZF2<=0.0) || (AF2<=0.0) || (AF2<ZF2) ){
                                                   >> 10078        std::cout << "F2 unphysical: "<<ZF<< " "<<AF<< " "<<EE<< " "<<ZF2<< " "<<AF2 << std::endl;
                                                   >> 10079       }else{
                                                   >> 10080 // fission and IMF emission are not allowed
                                                   >> 10081      opt->optimfallowed = 0; //  IMF is not allowed
                                                   >> 10082      fiss->ifis = 0;         //  fission is not allowed
                                                   >> 10083      gammaemission=1;
                                                   >> 10084      G4int FF22=0, FIMF22=0;
                                                   >> 10085      G4double ZIMFF2=0., AIMFF2=0.,TKEIMF2=0.,JPRFOUT=0.;
                                                   >> 10086 //
                                                   >> 10087      evapora(ZF2,AF2,&EFF2,0., &ZFF2, &AFF2, &mtota, &vz2_eva, &vx2_eva,&vy2_eva, &FF22, &FIMF22, &ZIMFF2, &AIMFF2,&TKEIMF2, &JPRFOUT, &inttype, &inum,EV_TEMP2,&IEV_TAB_TEMP,&NbLam2);
11872                                                 10088 
11873 void G4Abla::fission(G4double AF,            << 10089                for(G4int IJ = 0; IJ< IEV_TAB_TEMP;IJ++){
11874                      G4double ZF,            << 10090                EV_TEMP[IJ+IEV_TAB_FIS][0] = EV_TEMP2[IJ][0];
11875                      G4double EE,            << 10091                EV_TEMP[IJ+IEV_TAB_FIS][1] = EV_TEMP2[IJ][1];
11876                      G4double JPRF,          << 10092 // Lorentz kinematics
11877                      G4double* VX1_FISSION_p << 10093 //               EV_TEMP(IJ+IEV_TAB,3) = EV_TEMP(IJ,3) + VX_PREF
11878                      G4double* VY1_FISSION_p << 10094 //               EV_TEMP(IJ+IEV_TAB,4) = EV_TEMP(IJ,4) + VY_PREF
11879                      G4double* VZ1_FISSION_p << 10095 //               EV_TEMP(IJ+IEV_TAB,5) = EV_TEMP(IJ,5) + VZ_PREF
11880                      G4double* VX2_FISSION_p << 10096 // Lorentz transformation
11881                      G4double* VY2_FISSION_p << 10097                lorentz_boost(VX2_FISSION,VY2_FISSION,VZ2_FISSION,
11882                      G4double* VZ2_FISSION_p << 10098                 EV_TEMP2[IJ][2],EV_TEMP2[IJ][3],EV_TEMP2[IJ][4],
11883                      G4int* ZFP1,            << 10099                 &VXOUT,&VYOUT,&VZOUT);
11884                      G4int* AFP1,            << 10100                lorentz_boost(vx_eva_sc,vy_eva_sc,vz_eva_sc,
11885                      G4int* SFP1,            << 10101                 VXOUT,VYOUT,VZOUT,
11886                      G4int* ZFP2,            << 10102                 &VX2OUT,&VY2OUT,&VZ2OUT);
11887                      G4int* AFP2,            << 10103                EV_TEMP[IJ+IEV_TAB_FIS][2] = VX2OUT;
11888                      G4int* SFP2,            << 10104                EV_TEMP[IJ+IEV_TAB_FIS][3] = VY2OUT;
11889                      G4int* imode_par,       << 10105                EV_TEMP[IJ+IEV_TAB_FIS][4] = VZ2OUT;
11890                      G4double* VX_EVA_SC_par << 10106                //
11891                      G4double* VY_EVA_SC_par << 10107                }
11892                      G4double* VZ_EVA_SC_par << 10108                IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_TEMP;
11893                      G4double EV_TEMP[indexp << 10109       }
11894                      G4int* IEV_TAB_FIS_par, << 10110 //
11895                      G4int* NbLam0_par)      << 10111 // Lorentz kinematics 
11896 {                                            << 10112 //      vx1_fission = vx1_fission + vx1_eva
11897     ///                                      << 10113 //      vy1_fission = vy1_fission + vy1_eva
11898     G4double EFF1 = 0., EFF2 = 0., VFF1 = 0. << 10114 //      vz1_fission = vz1_fission + vz1_eva
11899              AFF2 = 0., ZFF2 = 0., vz1_eva = << 10115 //      vx2_fission = vx2_fission + vx2_eva
11900              vx_eva_sc = 0., vy_eva_sc = 0., << 10116 //      vy2_fission = vy2_fission + vy2_eva
11901              VY2OUT = 0., VZ2OUT = 0.;       << 10117 //      vz2_fission = vz2_fission + vz2_eva
11902     G4int IEV_TAB_FIS = 0, IEV_TAB_TEMP = 0; << 10118 // The v_eva_sc contribution is considered in the calling subroutine
11903     G4double EV_TEMP1[indexpart][6], EV_TEMP << 10119 // Lorentz transformations
11904     G4int inttype = 0, inum = 0;             << 10120                lorentz_boost(vx1_eva,vy1_eva,vz1_eva,
11905     IEV_TAB_SSC = 0;                         << 10121                 VX1_FISSION,VY1_FISSION,VZ1_FISSION,
11906     (*imode_par) = 0;                        << 10122                 &VXOUT,&VYOUT,&VZOUT);
11907     G4int NbLam0 = (*NbLam0_par);            << 10123                VX1_FISSION = VXOUT;
11908                                              << 10124                VY1_FISSION = VYOUT;
11909     for (G4int I1 = 0; I1 < indexpart; I1++) << 10125                VZ1_FISSION = VZOUT;
11910         for (G4int I2 = 0; I2 < 6; I2++)     << 10126                lorentz_boost(vx2_eva,vy2_eva,vz2_eva,
11911         {                                    << 10127                 VX2_FISSION,VY2_FISSION,VZ2_FISSION,
11912             EV_TEMP[I1][I2] = 0.0;           << 10128                 &VXOUT,&VYOUT,&VZOUT);
11913             EV_TEMP1[I1][I2] = 0.0;          << 10129                VX2_FISSION = VXOUT;
11914             EV_TEMP2[I1][I2] = 0.0;          << 10130                VY2_FISSION = VYOUT;
11915         }                                    << 10131                VZ2_FISSION = VZOUT;
11916                                              << 10132 //
11917     G4double et = EE - JPRF * JPRF * 197. *  << 10133  (*ZFP1) = idnint(ZFF1);
11918                                              << 10134  (*AFP1) = idnint(AFF1);
11919     fissionDistri(AF, ZF, et, AF1, ZF1, EFF1 << 10135  (*SFP1) = NbLam1;
11920                                              << 10136  (*VX1_FISSION_par) = VX1_FISSION;
11921     //  Lambda particles                     << 10137  (*VY1_FISSION_par) = VY1_FISSION;
11922     G4int NbLam1 = 0;                        << 10138  (*VZ1_FISSION_par) = VZ1_FISSION;
11923     G4int NbLam2 = 0;                        << 10139  (*VX_EVA_SC_par)=vx_eva_sc;
11924     G4double pbH = (AF1 - ZF1) / (AF1 - ZF1  << 10140  (*VY_EVA_SC_par)=vy_eva_sc;
11925     for (G4int i = 0; i < NbLam0; i++)       << 10141  (*VZ_EVA_SC_par)=vz_eva_sc;
11926     {                                        << 10142  (*ZFP2) = idnint(ZFF2);
11927         if (G4AblaRandom::flat() < pbH)      << 10143  (*AFP2) = idnint(AFF2);
11928         {                                    << 10144  (*SFP2) = NbLam2;
11929             NbLam1++;                        << 10145  (*VX2_FISSION_par) = VX2_FISSION;
11930         }                                    << 10146  (*VY2_FISSION_par) = VY2_FISSION;
11931         else                                 << 10147  (*VZ2_FISSION_par) = VZ2_FISSION;
11932         {                                    << 10148  (*IEV_TAB_FIS_par) = IEV_TAB_FIS;
11933             NbLam2++;                        << 10149  (*NbLam0_par) = NbLam1 + NbLam2;
11934         }                                    << 10150  if(NbLam0>(NbLam1 + NbLam2))varntp->kfis = 25;
11935     }                                        << 10151  return;
11936     //     Copy of the evaporated particles  << 
11937     for (G4int IJ = 0; IJ < IEV_TAB_SSC; IJ+ << 
11938     {                                        << 
11939         EV_TEMP[IJ][0] = EV_TAB_SSC[IJ][0];  << 
11940         EV_TEMP[IJ][1] = EV_TAB_SSC[IJ][1];  << 
11941         EV_TEMP[IJ][2] = EV_TAB_SSC[IJ][2];  << 
11942         EV_TEMP[IJ][3] = EV_TAB_SSC[IJ][3];  << 
11943         EV_TEMP[IJ][4] = EV_TAB_SSC[IJ][4];  << 
11944         EV_TEMP[IJ][5] = EV_TAB_SSC[IJ][5];  << 
11945     }                                        << 
11946     IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_SSC; << 
11947                                              << 
11948     //    Velocities                         << 
11949     G4double VZ1_FISSION = (2.0 * G4AblaRand << 
11950     G4double VPERP1 = std::sqrt(VFF1 * VFF1  << 
11951     G4double ALPHA1 = G4AblaRandom::flat() * << 
11952     G4double VX1_FISSION = VPERP1 * std::sin << 
11953     G4double VY1_FISSION = VPERP1 * std::cos << 
11954     G4double VX2_FISSION = -VX1_FISSION / VF << 
11955     G4double VY2_FISSION = -VY1_FISSION / VF << 
11956     G4double VZ2_FISSION = -VZ1_FISSION / VF << 
11957     //                                       << 
11958     // Fission fragment 1                    << 
11959     if ((ZF1 <= 0.0) || (AF1 <= 0.0) || (AF1 << 
11960     {                                        << 
11961         std::cout << "F1 unphysical: " << ZF << 
11962     }                                        << 
11963     else                                     << 
11964     {                                        << 
11965         // fission and IMF emission are not  << 
11966         opt->optimfallowed = 0; //  IMF is n << 
11967         fiss->ifis = 0;         //  fission  << 
11968         gammaemission = 1;                   << 
11969         G4int FF11 = 0, FIMF11 = 0;          << 
11970         G4double ZIMFF1 = 0., AIMFF1 = 0., T << 
11971         //                                   << 
11972         evapora(ZF1,                         << 
11973                 AF1,                         << 
11974                 &EFF1,                       << 
11975                 0.,                          << 
11976                 &ZFF1,                       << 
11977                 &AFF1,                       << 
11978                 &mtota,                      << 
11979                 &vz1_eva,                    << 
11980                 &vx1_eva,                    << 
11981                 &vy1_eva,                    << 
11982                 &FF11,                       << 
11983                 &FIMF11,                     << 
11984                 &ZIMFF1,                     << 
11985                 &AIMFF1,                     << 
11986                 &TKEIMF1,                    << 
11987                 &JPRFOUT,                    << 
11988                 &inttype,                    << 
11989                 &inum,                       << 
11990                 EV_TEMP1,                    << 
11991                 &IEV_TAB_TEMP,               << 
11992                 &NbLam1);                    << 
11993                                              << 
11994         for (G4int IJ = 0; IJ < IEV_TAB_TEMP << 
11995         {                                    << 
11996             EV_TEMP[IJ + IEV_TAB_FIS][0] = E << 
11997             EV_TEMP[IJ + IEV_TAB_FIS][1] = E << 
11998             // Lorentz kinematics            << 
11999             //               EV_TEMP(IJ+IEV_ << 
12000             //               EV_TEMP(IJ+IEV_ << 
12001             //               EV_TEMP(IJ+IEV_ << 
12002             // Lorentz transformation        << 
12003             lorentz_boost(VX1_FISSION,       << 
12004                           VY1_FISSION,       << 
12005                           VZ1_FISSION,       << 
12006                           EV_TEMP1[IJ][2],   << 
12007                           EV_TEMP1[IJ][3],   << 
12008                           EV_TEMP1[IJ][4],   << 
12009                           &VXOUT,            << 
12010                           &VYOUT,            << 
12011                           &VZOUT);           << 
12012             lorentz_boost(vx_eva_sc, vy_eva_ << 
12013             EV_TEMP[IJ + IEV_TAB_FIS][2] = V << 
12014             EV_TEMP[IJ + IEV_TAB_FIS][3] = V << 
12015             EV_TEMP[IJ + IEV_TAB_FIS][4] = V << 
12016             //                               << 
12017         }                                    << 
12018         IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_ << 
12019     }                                        << 
12020     //                                       << 
12021     // Fission fragment 2                    << 
12022     if ((ZF2 <= 0.0) || (AF2 <= 0.0) || (AF2 << 
12023     {                                        << 
12024         std::cout << "F2 unphysical: " << ZF << 
12025     }                                        << 
12026     else                                     << 
12027     {                                        << 
12028         // fission and IMF emission are not  << 
12029         opt->optimfallowed = 0; //  IMF is n << 
12030         fiss->ifis = 0;         //  fission  << 
12031         gammaemission = 1;                   << 
12032         G4int FF22 = 0, FIMF22 = 0;          << 
12033         G4double ZIMFF2 = 0., AIMFF2 = 0., T << 
12034         //                                   << 
12035         evapora(ZF2,                         << 
12036                 AF2,                         << 
12037                 &EFF2,                       << 
12038                 0.,                          << 
12039                 &ZFF2,                       << 
12040                 &AFF2,                       << 
12041                 &mtota,                      << 
12042                 &vz2_eva,                    << 
12043                 &vx2_eva,                    << 
12044                 &vy2_eva,                    << 
12045                 &FF22,                       << 
12046                 &FIMF22,                     << 
12047                 &ZIMFF2,                     << 
12048                 &AIMFF2,                     << 
12049                 &TKEIMF2,                    << 
12050                 &JPRFOUT,                    << 
12051                 &inttype,                    << 
12052                 &inum,                       << 
12053                 EV_TEMP2,                    << 
12054                 &IEV_TAB_TEMP,               << 
12055                 &NbLam2);                    << 
12056                                              << 
12057         for (G4int IJ = 0; IJ < IEV_TAB_TEMP << 
12058         {                                    << 
12059             EV_TEMP[IJ + IEV_TAB_FIS][0] = E << 
12060             EV_TEMP[IJ + IEV_TAB_FIS][1] = E << 
12061             // Lorentz kinematics            << 
12062             //               EV_TEMP(IJ+IEV_ << 
12063             //               EV_TEMP(IJ+IEV_ << 
12064             //               EV_TEMP(IJ+IEV_ << 
12065             // Lorentz transformation        << 
12066             lorentz_boost(VX2_FISSION,       << 
12067                           VY2_FISSION,       << 
12068                           VZ2_FISSION,       << 
12069                           EV_TEMP2[IJ][2],   << 
12070                           EV_TEMP2[IJ][3],   << 
12071                           EV_TEMP2[IJ][4],   << 
12072                           &VXOUT,            << 
12073                           &VYOUT,            << 
12074                           &VZOUT);           << 
12075             lorentz_boost(vx_eva_sc, vy_eva_ << 
12076             EV_TEMP[IJ + IEV_TAB_FIS][2] = V << 
12077             EV_TEMP[IJ + IEV_TAB_FIS][3] = V << 
12078             EV_TEMP[IJ + IEV_TAB_FIS][4] = V << 
12079             //                               << 
12080         }                                    << 
12081         IEV_TAB_FIS = IEV_TAB_FIS + IEV_TAB_ << 
12082     }                                        << 
12083     //                                       << 
12084     // Lorentz kinematics                    << 
12085     //      vx1_fission = vx1_fission + vx1_ << 
12086     //      vy1_fission = vy1_fission + vy1_ << 
12087     //      vz1_fission = vz1_fission + vz1_ << 
12088     //      vx2_fission = vx2_fission + vx2_ << 
12089     //      vy2_fission = vy2_fission + vy2_ << 
12090     //      vz2_fission = vz2_fission + vz2_ << 
12091     // The v_eva_sc contribution is consider << 
12092     // Lorentz transformations               << 
12093     lorentz_boost(vx1_eva, vy1_eva, vz1_eva, << 
12094     VX1_FISSION = VXOUT;                     << 
12095     VY1_FISSION = VYOUT;                     << 
12096     VZ1_FISSION = VZOUT;                     << 
12097     lorentz_boost(vx2_eva, vy2_eva, vz2_eva, << 
12098     VX2_FISSION = VXOUT;                     << 
12099     VY2_FISSION = VYOUT;                     << 
12100     VZ2_FISSION = VZOUT;                     << 
12101     //                                       << 
12102     (*ZFP1) = idnint(ZFF1);                  << 
12103     (*AFP1) = idnint(AFF1);                  << 
12104     (*SFP1) = NbLam1;                        << 
12105     (*VX1_FISSION_par) = VX1_FISSION;        << 
12106     (*VY1_FISSION_par) = VY1_FISSION;        << 
12107     (*VZ1_FISSION_par) = VZ1_FISSION;        << 
12108     (*VX_EVA_SC_par) = vx_eva_sc;            << 
12109     (*VY_EVA_SC_par) = vy_eva_sc;            << 
12110     (*VZ_EVA_SC_par) = vz_eva_sc;            << 
12111     (*ZFP2) = idnint(ZFF2);                  << 
12112     (*AFP2) = idnint(AFF2);                  << 
12113     (*SFP2) = NbLam2;                        << 
12114     (*VX2_FISSION_par) = VX2_FISSION;        << 
12115     (*VY2_FISSION_par) = VY2_FISSION;        << 
12116     (*VZ2_FISSION_par) = VZ2_FISSION;        << 
12117     (*IEV_TAB_FIS_par) = IEV_TAB_FIS;        << 
12118     (*NbLam0_par) = NbLam1 + NbLam2;         << 
12119     if (NbLam0 > (NbLam1 + NbLam2))          << 
12120         varntp->kfis = 25;                   << 
12121     return;                                  << 
12122 }                                               10152 }
12123 //******************************************    10153 //*************************************************************************
12124 //                                              10154 //
12125 void G4Abla::tke_bu(G4double Z, G4double A,  << 10155 void G4Abla::tke_bu(G4double Z,G4double A,G4double ZALL,G4double AAL,G4double *VX,G4double *VY,G4double *VZ){
12126 {                                            << 
12127                                                 10156 
12128     G4double V_over_V0, R0, RALL, RHAZ, R, T << 10157        G4double V_over_V0,R0,RALL,RHAZ,R,TKE,Ekin,V,VPERP,ALPHA1;
12129                                                 10158 
12130     V_over_V0 = 6.0;                         << 10159        V_over_V0 = 6.0;
12131     R0 = 1.16;                               << 10160        R0 = 1.16;
12132                                                 10161 
12133     if (Z < 1.0)                             << 10162        if(Z < 1.0){
12134     {                                        << 
12135         *VX = 0.0;                              10163         *VX = 0.0;
12136         *VY = 0.0;                              10164         *VY = 0.0;
12137         *VZ = 0.0;                              10165         *VZ = 0.0;
12138         return;                                 10166         return;
12139     }                                        << 10167        }
12140                                                 10168 
12141     RALL = R0 * std::pow(V_over_V0, 1.0 / 3. << 10169        RALL = R0 * std::pow(V_over_V0,1.0/3.0) * std::pow(AAL,1.0/3.0);
12142     RHAZ = G4double(haz(1));                 << 10170        RHAZ = G4double(haz(1));
12143     R = std::pow(RHAZ, 1.0 / 3.0) * RALL;    << 10171        R = std::pow(RHAZ,1.0/3.0) * RALL;
12144     TKE = 1.44 * Z * ZALL * R * R * (1.0 - A << 10172        TKE = 1.44 * Z * ZALL * R*R * (1.0 - A/AAL)*(1.0 - A/AAL) / std::pow(RALL,3.0);
12145                                              << 10173 
12146     Ekin = TKE * (AAL - A) / AAL;            << 10174        Ekin = TKE * (AAL - A) / AAL;
12147     //       print*,'!!!',IDNINT(AAl),IDNINT << 10175 //       print*,'!!!',IDNINT(AAl),IDNINT(A),IDNINT(ZALL),IDNINT(Z)
12148     V = std::sqrt(Ekin / A) * 1.3887;        << 10176        V = std::sqrt(Ekin/A) * 1.3887;
12149     *VZ = (2.0 * G4double(haz(1)) - 1.0) * V << 10177        *VZ = (2.0 * G4double(haz(1)) - 1.0) * V;
12150     VPERP = std::sqrt(V * V - (*VZ) * (*VZ)) << 10178        VPERP = std::sqrt(V*V - (*VZ)*(*VZ));
12151     ALPHA1 = G4double(haz(1)) * 2.0 * 3.142; << 10179        ALPHA1 = G4double(haz(1)) * 2.0 * 3.142;
12152     *VX = VPERP * std::sin(ALPHA1);          << 10180        *VX = VPERP * std::sin(ALPHA1);
12153     *VY = VPERP * std::cos(ALPHA1);          << 10181        *VY = VPERP * std::cos(ALPHA1);
12154     return;                                  << 10182  return;
12155 }                                               10183 }
12156                                                 10184 
12157 G4double G4Abla::haz(G4int k)                   10185 G4double G4Abla::haz(G4int k)
12158 {                                               10186 {
12159     // const G4int pSize = 110;              << 10187  // const G4int pSize = 110;
12160     // static G4ThreadLocal G4double p[pSize << 10188  // static G4ThreadLocal G4double p[pSize];
12161     static G4ThreadLocal G4int ix = 0;       << 10189   static G4ThreadLocal G4long ix = 0;
12162     static G4ThreadLocal G4double x = 0.0, y << 10190   static G4ThreadLocal G4double x = 0.0, y = 0.0;
12163     //  k =< -1 on initialise                << 10191   //  k =< -1 on initialise                                        
12164     //  k = -1 c'est reproductible           << 10192   //  k = -1 c'est reproductible                                   
12165     //  k < -1 || k > -1 ce n'est pas reprod << 10193   //  k < -1 || k > -1 ce n'est pas reproductible
12166     /*                                       << 10194 /*
12167       // Zero is invalid random seed. Set pr << 10195   // Zero is invalid random seed. Set proper value from our random seed collection:
12168       collection: if(ix == 0) {              << 10196   if(ix == 0) {
12169         //    ix = hazard->ial;              << 10197     //    ix = hazard->ial;
12170       }                                      << 10198   }
12171     */                                       << 10199 */
12172     if (k <= -1)                             << 10200   if (k <= -1) { //then                                             
12173     { // then                                << 10201     if(k == -1) { //then                                            
12174         if (k == -1)                         << 10202       ix = 0;
12175         { // then                            << 10203     }
12176             ix = 0;                          << 10204     else {
12177         }                                    << 10205       x = 0.0;
12178         else                                 << 10206       y = secnds(G4int(x));
12179         {                                    << 10207       ix = G4int(y * 100 + 43543000);
12180             x = 0.0;                         << 10208       if(mod(ix,2) == 0) {
12181             y = secnds(G4int(x));            << 10209   ix = ix + 1;
12182             ix = G4int(y * 100 + 43543000);  << 10210       }
12183             if (mod(ix, 2) == 0)             << 10211     }}
12184             {                                << 
12185                 ix = ix + 1;                 << 
12186             }                                << 
12187         }                                    << 
12188     }                                        << 
12189                                                 10212 
12190     return G4AblaRandom::flat();             << 10213   return G4AblaRandom::flat();
12191 }                                               10214 }
12192                                                 10215 
12193 //  Random generator according to the           10216 //  Random generator according to the
12194 //  powerfunction y = x**(lambda) in the ran    10217 //  powerfunction y = x**(lambda) in the range from xmin to xmax
12195 //  xmin, xmax and y are integers.              10218 //  xmin, xmax and y are integers.
12196 //  lambda must be different from -1 !          10219 //  lambda must be different from -1 !
12197 G4int G4Abla::IPOWERLIMHAZ(G4double lambda,  << 10220 G4int G4Abla::IPOWERLIMHAZ(G4double lambda,G4int xmin,G4int xmax){
12198 {                                            << 10221        G4double y,l_plus,rxmin,rxmax;
12199     G4double y, l_plus, rxmin, rxmax;        << 10222          l_plus = lambda + 1.;
12200     l_plus = lambda + 1.;                    << 10223          rxmin = G4double(xmin) - 0.5;
12201     rxmin = G4double(xmin) - 0.5;            << 10224          rxmax = G4double(xmax) + 0.5;
12202     rxmax = G4double(xmax) + 0.5;            << 10225 //       y=(HAZ(k)*(rxmax**l_plus-rxmin**l_plus)+ rxmin**l_plus)**(1.E0/l_plus)
12203     //       y=(HAZ(k)*(rxmax**l_plus-rxmin* << 10226          y=std::pow(G4AblaRandom::flat()*(std::pow(rxmax,l_plus)-std::pow(rxmin,l_plus))+ std::pow(rxmin,l_plus),1.0/l_plus);
12204     //       rxmin**l_plus)**(1.E0/l_plus)   << 10227          return nint(y);
12205     y = std::pow(G4AblaRandom::flat() * (std << 10228 }
12206                  1.0 / l_plus);              << 10229 
12207     return nint(y);                          << 10230 void G4Abla::AMOMENT(G4double AABRA,G4double APRF, G4int IMULTIFR,G4double *PX,G4double *PY,G4double *PZ){
12208 }                                            << 10231 
12209                                              << 10232       G4int ISIGOPT = 0;
12210 void G4Abla::AMOMENT(G4double AABRA, G4doubl << 10233       G4double GOLDHA_BU=0.,GOLDHA=0.;
12211 {                                            << 10234       G4double PI = 3.141592653589793;
12212                                              << 10235       //nu = 1.d0
12213     G4int ISIGOPT = 0;                       << 
12214     G4double GOLDHA_BU = 0., GOLDHA = 0.;    << 
12215     G4double PI = 3.141592653589793;         << 
12216     // nu = 1.d0                             << 
12217                                                 10236 
12218     //  G4double BETAP = sqrt(1.0 - 1.0/sqrt    10237     //  G4double BETAP = sqrt(1.0 - 1.0/sqrt(1.0+EAP/931.494));
12219     //  G4double GAMMAP = 1.0 / sqrt(1. - BE    10238     //  G4double GAMMAP = 1.0 / sqrt(1. - BETAP*BETAP);
12220     //  G4double FACT_PROJ = (GAMMAP + 1.) /    10239     //  G4double FACT_PROJ = (GAMMAP + 1.) / (BETAP * GAMMAP);
12221                                                 10240 
12222     // G4double R = 1.160 * pow(APRF,1.0/3.0 << 10241      // G4double R = 1.160 * pow(APRF,1.0/3.0);
12223                                                 10242 
12224     //  G4double RNDT = double(haz(1));         10243     //  G4double RNDT = double(haz(1));
12225     //  G4double CTET = 2.0*RNDT-1.0;           10244     //  G4double CTET = 2.0*RNDT-1.0;
12226     //  G4double TETA = acos(CTET);             10245     //  G4double TETA = acos(CTET);
12227     //  G4double RNDP = double(haz(1));         10246     //  G4double RNDP = double(haz(1));
12228     //  G4double PHI = RNDP*2.0*PI;             10247     //  G4double PHI = RNDP*2.0*PI;
12229     //  G4double STET = sqrt(1.0-CTET*CTET);    10248     //  G4double STET = sqrt(1.0-CTET*CTET);
12230     //      RX = R * STET * DCOS(PHI)        << 10249 //      RX = R * STET * DCOS(PHI)
12231     //      RY = R * STET * DSIN(PHI)        << 10250 //      RY = R * STET * DSIN(PHI)
12232     //      RZ = R * CTET                    << 10251 //      RZ = R * CTET
12233                                                 10252 
12234     //  G4double RZ = 0.0;                      10253     //  G4double RZ = 0.0;
12235     //  G4double RY = R * sin(PHI);             10254     //  G4double RY = R * sin(PHI);
12236     //  G4double RX = R * cos(PHI);             10255     //  G4double RX = R * cos(PHI);
12237                                                 10256 
12238     // In MeV/C                              << 10257 // In MeV/C
12239     G4double V0_over_VBU = 1.0 / 6.0;        << 10258       G4double V0_over_VBU = 1.0 / 6.0;
12240     G4double SIGMA_0 = 118.50;               << 10259       G4double SIGMA_0 = 118.50;
12241     G4double Efermi = 5.0 * SIGMA_0 * SIGMA_ << 10260       G4double Efermi = 5.0 * SIGMA_0 * SIGMA_0 / (2.0 * 931.4940);
12242                                              << 10261 
12243     if (IMULTIFR == 1)                       << 10262       if(IMULTIFR==1){
12244     {                                        << 10263        if(ISIGOPT == 0){
12245         if (ISIGOPT == 0)                    << 10264 // "Fermi model" picture:
12246         {                                    << 10265 // Influence of expansion:
12247             // "Fermi model" picture:        << 10266         SIGMA_0 = SIGMA_0 * std::pow(V0_over_VBU,1.0/3.0);
12248             // Influence of expansion:       << 10267 // To take into account the influence of thermal motion of nucleons (see W. Bauer,
12249             SIGMA_0 = SIGMA_0 * std::pow(V0_ << 10268 // PRC 51 (1995) 803)
12250             // To take into account the infl << 10269 //        Efermi = 5.D0 * SIGMA_0 * SIGMA_0 / (2.D0 * 931.49D0)
12251             // W. Bauer, PRC 51 (1995) 803)  << 10270 
12252             //        Efermi = 5.D0 * SIGMA_ << 10271         GOLDHA_BU = SIGMA_0 * std::sqrt((APRF*(AABRA-APRF))/(AABRA-1.0));
12253                                              << 10272         GOLDHA    = GOLDHA_BU*std::sqrt(1.0 +
12254             GOLDHA_BU = SIGMA_0 * std::sqrt( << 10273                     5.0 * PI*PI / 12.0 * (T_freeze_out / Efermi)*(T_freeze_out / Efermi));
12255             GOLDHA =                         << 10274 //       PRINT*,'AFTER BU fermi:',IDNINT(AABRA),IDNINT(APRF),GOLDHA,
12256                 GOLDHA_BU * std::sqrt(1.0 +  << 10275 //     &                          GOLDHA_BU
12257             //       PRINT*,'AFTER BU fermi: << 10276        }else{
12258             //     &                         << 10277 // Thermal equilibrium picture (<=> to Boltzmann distribution in momentum with sigma2=M*T)
12259         }                                    << 10278 // The factor (AABRA-APRF)/AP comes from momentum conservation:
12260         else                                 << 10279         GOLDHA_BU = std::sqrt(APRF *  T_freeze_out * 931.494 *
12261         {                                    << 10280                    (AABRA - APRF) / AABRA);
12262             // Thermal equilibrium picture ( << 10281         GOLDHA   = GOLDHA_BU;
12263             // with sigma2=M*T) The factor ( << 10282 //       PRINT*,'AFTER BU therm:',IDNINT(AABRA),IDNINT(APRF),GOLDHA,
12264             // conservation:                 << 10283 //     &                          GOLDHA_BU
12265             GOLDHA_BU = std::sqrt(APRF * T_f << 10284        }
12266             GOLDHA = GOLDHA_BU;              << 10285       }else{
12267             //       PRINT*,'AFTER BU therm: << 10286       GOLDHA = SIGMA_0 * std::sqrt((APRF*(AABRA-APRF))/(AABRA-1.0));
12268             //     &                         << 10287       }
12269         }                                    << 10288 
12270     }                                        << 10289       G4int IS = 0;
12271     else                                     << 10290       mom123:  
12272     {                                        << 10291       *PX = G4double(gausshaz(1,0.0,GOLDHA));
12273         GOLDHA = SIGMA_0 * std::sqrt((APRF * << 10292       IS = IS +1;
12274     }                                        << 10293       if(IS>100){
12275                                              << 10294       std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING PX IN Rn07.FOR. A VALUE WILL BE FORCED." << std::endl;
12276     G4int IS = 0;                            << 10295       *PX = (AABRA-1.0)*931.4940;
12277 mom123:                                      << 10296       }
12278     *PX = G4double(gausshaz(1, 0.0, GOLDHA)) << 10297       if(std::abs(*PX)>= AABRA*931.494){
12279     IS = IS + 1;                             << 10298 //       PRINT*,'VX > C',PX,IDNINT(APRF)
12280     if (IS > 100)                            << 10299        goto mom123;
12281     {                                        << 10300       }
12282         std::cout << "WARNING: GAUSSHAZ CALL << 10301       IS = 0;
12283                      "CALCULATING PX IN Rn07 << 10302       mom456:  
12284                   << std::endl;              << 10303       *PY = G4double(gausshaz(1,0.0,GOLDHA));
12285         *PX = (AABRA - 1.0) * 931.4940;      << 10304       IS = IS +1;
12286     }                                        << 10305       if(IS>100){
12287     if (std::abs(*PX) >= AABRA * 931.494)    << 10306       std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING PY IN Rn07.FOR. A VALUE WILL BE FORCED." << std::endl;
12288     {                                        << 10307       *PY = (AABRA-1.0)*931.4940;
12289         //       PRINT*,'VX > C',PX,IDNINT(A << 10308       }
12290         goto mom123;                         << 10309       if(std::abs(*PY)>= AABRA*931.494){
12291     }                                        << 10310 //       PRINT*,'VX > C',PX,IDNINT(APRF)
12292     IS = 0;                                  << 10311        goto mom456;
12293 mom456:                                      << 10312       }
12294     *PY = G4double(gausshaz(1, 0.0, GOLDHA)) << 10313       IS = 0;
12295     IS = IS + 1;                             << 10314       mom789:  
12296     if (IS > 100)                            << 10315       *PZ = G4double(gausshaz(1,0.0,GOLDHA));
12297     {                                        << 10316       IS = IS +1;
12298         std::cout << "WARNING: GAUSSHAZ CALL << 10317       if(IS>100){
12299                      "CALCULATING PY IN Rn07 << 10318       std::cout << "WARNING: GAUSSHAZ CALLED MORE THAN 100 TIMES WHEN CALCULATING PZ IN Rn07.FOR. A VALUE WILL BE FORCED." << std::endl;
12300                   << std::endl;              << 10319       *PZ = (AABRA-1.0)*931.4940;
12301         *PY = (AABRA - 1.0) * 931.4940;      << 10320       }
12302     }                                        << 10321       if(std::abs(*PZ)>= AABRA*931.494){
12303     if (std::abs(*PY) >= AABRA * 931.494)    << 10322 //       PRINT*,'VX > C',PX,IDNINT(APRF)
12304     {                                        << 10323        goto mom789;
12305         //       PRINT*,'VX > C',PX,IDNINT(A << 10324       }
12306         goto mom456;                         << 10325  return;
12307     }                                        << 
12308     IS = 0;                                  << 
12309 mom789:                                      << 
12310     *PZ = G4double(gausshaz(1, 0.0, GOLDHA)) << 
12311     IS = IS + 1;                             << 
12312     if (IS > 100)                            << 
12313     {                                        << 
12314         std::cout << "WARNING: GAUSSHAZ CALL << 
12315                      "CALCULATING PZ IN Rn07 << 
12316                   << std::endl;              << 
12317         *PZ = (AABRA - 1.0) * 931.4940;      << 
12318     }                                        << 
12319     if (std::abs(*PZ) >= AABRA * 931.494)    << 
12320     {                                        << 
12321         //       PRINT*,'VX > C',PX,IDNINT(A << 
12322         goto mom789;                         << 
12323     }                                        << 
12324     return;                                  << 
12325 }                                               10326 }
12326                                                 10327 
12327 G4double G4Abla::gausshaz(G4int k, G4double     10328 G4double G4Abla::gausshaz(G4int k, G4double xmoy, G4double sig)
12328 {                                               10329 {
12329     // Gaussian random numbers:              << 10330   // Gaussian random numbers:
12330                                                 10331 
12331     //   1005       C*** TIRAGE ALEATOIRE DA << 10332   //   1005       C*** TIRAGE ALEATOIRE DANS UNE GAUSSIENNE DE LARGEUR SIG ET MOYENNE XMOY
12332     //   MOYENNE XMOY                        << 10333   static G4ThreadLocal G4int  iset = 0;
12333     static G4ThreadLocal G4int iset = 0;     << 10334   static G4ThreadLocal G4double v1,v2,r,fac,gset,fgausshaz;
12334     static G4ThreadLocal G4double v1, v2, r, << 10335 
12335                                              << 10336   if(iset == 0) { //then                                              
12336     if (iset == 0)                           << 10337     do {
12337     { // then                                << 10338       v1 = 2.0*haz(k) - 1.0;
12338         do                                   << 10339       v2 = 2.0*haz(k) - 1.0;
12339         {                                    << 10340       r = std::pow(v1,2) + std::pow(v2,2);
12340             v1 = 2.0 * haz(k) - 1.0;         << 10341     } while(r >= 1);
12341             v2 = 2.0 * haz(k) - 1.0;         << 10342 
12342             r = std::pow(v1, 2) + std::pow(v << 10343     fac = std::sqrt(-2.*std::log(r)/r);
12343         } while (r >= 1);                    << 10344     gset = v1*fac;
12344                                              << 10345     fgausshaz = v2*fac*sig+xmoy;
12345         fac = std::sqrt(-2. * std::log(r) /  << 10346     iset = 1;
12346         gset = v1 * fac;                     << 10347   }
12347         fgausshaz = v2 * fac * sig + xmoy;   << 10348   else {
12348         iset = 1;                            << 10349     fgausshaz=gset*sig+xmoy;
12349     }                                        << 10350     iset=0;
12350     else                                     << 10351   }
12351     {                                        << 10352   return fgausshaz;                                                         
12352         fgausshaz = gset * sig + xmoy;       << 
12353         iset = 0;                            << 
12354     }                                        << 
12355     return fgausshaz;                        << 
12356 }                                               10353 }
12357                                                 10354