| 1 | //
|
|---|
| 2 | // ********************************************************************
|
|---|
| 3 | // * License and Disclaimer *
|
|---|
| 4 | // * *
|
|---|
| 5 | // * The Geant4 software is copyright of the Copyright Holders of *
|
|---|
| 6 | // * the Geant4 Collaboration. It is provided under the terms and *
|
|---|
| 7 | // * conditions of the Geant4 Software License, included in the file *
|
|---|
| 8 | // * LICENSE and available at http://cern.ch/geant4/license . These *
|
|---|
| 9 | // * include a list of copyright holders. *
|
|---|
| 10 | // * *
|
|---|
| 11 | // * Neither the authors of this software system, nor their employing *
|
|---|
| 12 | // * institutes,nor the agencies providing financial support for this *
|
|---|
| 13 | // * work make any representation or warranty, express or implied, *
|
|---|
| 14 | // * regarding this software system or assume any liability for its *
|
|---|
| 15 | // * use. Please see the license in the file LICENSE and URL above *
|
|---|
| 16 | // * for the full disclaimer and the limitation of liability. *
|
|---|
| 17 | // * *
|
|---|
| 18 | // * This code implementation is the result of the scientific and *
|
|---|
| 19 | // * technical work of the GEANT4 collaboration. *
|
|---|
| 20 | // * By using, copying, modifying or distributing the software (or *
|
|---|
| 21 | // * any work based on the software) you agree to acknowledge its *
|
|---|
| 22 | // * use in resulting scientific publications, and indicate your *
|
|---|
| 23 | // * acceptance of all terms of the Geant4 Software license. *
|
|---|
| 24 | // ********************************************************************
|
|---|
| 25 | //
|
|---|
| 26 | // $Id: G4Incl.hh,v 1.15 2009/11/18 10:43:14 kaitanie Exp $
|
|---|
| 27 | // Translation of INCL4.2/ABLA V3
|
|---|
| 28 | // Pekka Kaitaniemi, HIP (translation)
|
|---|
| 29 | // Christelle Schmidt, IPNL (fission code)
|
|---|
| 30 | // Alain Boudard, CEA (contact person INCL/ABLA)
|
|---|
| 31 | // Aatos Heikkinen, HIP (project coordination)
|
|---|
| 32 |
|
|---|
| 33 | #ifndef G4Incl_hh
|
|---|
| 34 | #define G4Incl_hh 1
|
|---|
| 35 |
|
|---|
| 36 | #include "globals.hh"
|
|---|
| 37 | #include "G4InclRandomNumbers.hh"
|
|---|
| 38 | #include "G4InclDataDefs.hh"
|
|---|
| 39 | #include "G4Abla.hh"
|
|---|
| 40 | #include <fstream>
|
|---|
| 41 |
|
|---|
| 42 | using namespace std;
|
|---|
| 43 | /**
|
|---|
| 44 | * Class containing INCL4 hadronic cascade algorithm.
|
|---|
| 45 | */
|
|---|
| 46 |
|
|---|
| 47 | class G4Incl {
|
|---|
| 48 |
|
|---|
| 49 | public:
|
|---|
| 50 | /**
|
|---|
| 51 | *
|
|---|
| 52 | * Support for Doxygen JavaDoc style.
|
|---|
| 53 | *
|
|---|
| 54 | * \author{pekka.kaitaniemi@helsinki.fi}
|
|---|
| 55 | */
|
|---|
| 56 |
|
|---|
| 57 | /**
|
|---|
| 58 | * Constructor to be used with Geant4.
|
|---|
| 59 | * @param hazard a pointer to G4Hazard structure.
|
|---|
| 60 | * @param calincl a pointer to G4Calincl structure.
|
|---|
| 61 | * @param ws a pointer to G4Ws structure.
|
|---|
| 62 | * @param mat a pointer to G4Mat structure.
|
|---|
| 63 | * @param varntp a pointer to G4VarNtp structure.
|
|---|
| 64 | */
|
|---|
| 65 | G4Incl(G4Hazard *hazard, G4Calincl *calincl, G4Ws *ws, G4Mat *mat, G4VarNtp *varntp);
|
|---|
| 66 |
|
|---|
| 67 | /**
|
|---|
| 68 | * Constructor for private unit testing purposes.
|
|---|
| 69 | * @param hazard a pointer to G4Hazard structure.
|
|---|
| 70 | * @param dton a pointer to G4Dton structure.
|
|---|
| 71 | * @param saxw a pointer to G4Saxw structure.
|
|---|
| 72 | * @param ws a pointer to G4Ws structure.
|
|---|
| 73 | */
|
|---|
| 74 | G4Incl(G4Hazard *hazard, G4Dton *dton, G4Saxw *saxw, G4Ws *ws);
|
|---|
| 75 |
|
|---|
| 76 | G4Incl();
|
|---|
| 77 |
|
|---|
| 78 | ~G4Incl(); // Destructor
|
|---|
| 79 |
|
|---|
| 80 | void dumpParticles();
|
|---|
| 81 | G4double energyTest(G4int i); // Test for NaN energy of particle i.
|
|---|
| 82 | void dumpBl5(std::ofstream& dumpOut); // Dump the contents of G4Bl5.
|
|---|
| 83 | void dumpSaxw(std::ofstream& dumpOut); // Dump the contents of G4Saxw.
|
|---|
| 84 | void dumpBl1(std::ofstream& dumpOut); // Dump the contents of G4Bl1.
|
|---|
| 85 | void dumpBl2(std::ofstream& dumpOut); // Dump the contents of G4Bl2.
|
|---|
| 86 | void dumpBl3(std::ofstream& dumpOut); // Dump the contents of G4Bl3.
|
|---|
| 87 |
|
|---|
| 88 | /**
|
|---|
| 89 | * Set verbosity level.
|
|---|
| 90 | */
|
|---|
| 91 | void setVerboseLevel(G4int level);
|
|---|
| 92 | /**
|
|---|
| 93 | * Get verbosity level.
|
|---|
| 94 | */
|
|---|
| 95 | G4int getVerboseLevel();
|
|---|
| 96 |
|
|---|
| 97 | void setDtonData(G4Dton *newDton); // Set internal data.
|
|---|
| 98 | void setWsData(G4Ws *newWs);
|
|---|
| 99 | void setHazardData(G4Hazard *newHazard);
|
|---|
| 100 | void setSaxwData(G4Saxw *newSaxw);
|
|---|
| 101 | void setSpl2Data(G4Spl2 *newSpl2);
|
|---|
| 102 | void setMatData(G4Mat *newMat);
|
|---|
| 103 | void setCalinclData(G4Calincl *newCalincl);
|
|---|
| 104 | void setLightNucData(G4LightNuc *newLightNuc);
|
|---|
| 105 | void setLightGausNucData(G4LightGausNuc *newLightGausNuc);
|
|---|
| 106 | void setBl1Data(G4Bl1 *newBl1);
|
|---|
| 107 | void setBl2Data(G4Bl2 *newBl2);
|
|---|
| 108 | void setBl3Data(G4Bl3 *newBl3);
|
|---|
| 109 | void setBl4Data(G4Bl4 *newBl4);
|
|---|
| 110 | void setBl5Data(G4Bl5 *newBl5);
|
|---|
| 111 | void setBl6Data(G4Bl6 *newBl6);
|
|---|
| 112 | void setBl8Data(G4Bl8 *newBl8);
|
|---|
| 113 | void setBl9Data(G4Bl9 *newBl9);
|
|---|
| 114 | void setBl10Data(G4Bl10 *newBl10);
|
|---|
| 115 | void setKindData(G4Kind *newKind);
|
|---|
| 116 |
|
|---|
| 117 | public:
|
|---|
| 118 | /**
|
|---|
| 119 | * Process one event with INCL4 only.
|
|---|
| 120 | */
|
|---|
| 121 | void processEventIncl();
|
|---|
| 122 |
|
|---|
| 123 | /**
|
|---|
| 124 | * Process one event with INCL4 and built-in ABLA evaporation and fission.
|
|---|
| 125 | */
|
|---|
| 126 | void processEventInclAbla(G4int eventnumber);
|
|---|
| 127 |
|
|---|
| 128 | public: // Methods used to initialize INCL
|
|---|
| 129 | /**
|
|---|
| 130 | * Initialize INCL.
|
|---|
| 131 | *
|
|---|
| 132 | * @param initRandomSeed choose whether INCL should initialize random seeds.
|
|---|
| 133 | */
|
|---|
| 134 | void initIncl(G4bool initRandomSeed);
|
|---|
| 135 |
|
|---|
| 136 | /**
|
|---|
| 137 | * Initialize target materials.
|
|---|
| 138 | *
|
|---|
| 139 | * @param izmat charge number
|
|---|
| 140 | * @param iamat mass number
|
|---|
| 141 | * @param imat material number (array index)
|
|---|
| 142 | */
|
|---|
| 143 | void initMaterial(G4int izmat, G4int iamat, G4int imat);
|
|---|
| 144 |
|
|---|
| 145 | /**
|
|---|
| 146 | * A normal member taking two arguments and returning an integer value.
|
|---|
| 147 | *
|
|---|
| 148 | * @param l an integer argument.
|
|---|
| 149 | * @param q a constant character pointer.
|
|---|
| 150 | * @return The test results
|
|---|
| 151 | */
|
|---|
| 152 | G4double deutv(G4int l, G4double q);
|
|---|
| 153 |
|
|---|
| 154 | /**
|
|---|
| 155 | * Returns the values of the function:
|
|---|
| 156 | * \f[
|
|---|
| 157 | * (0.23162461 + (j - 1))^2
|
|---|
| 158 | * \f]
|
|---|
| 159 | *
|
|---|
| 160 | * @param j an integer parameter
|
|---|
| 161 | * @return a double value
|
|---|
| 162 | */
|
|---|
| 163 | G4double fm2(G4int j);
|
|---|
| 164 |
|
|---|
| 165 | /**
|
|---|
| 166 | * Interpolates function described by class G4Saxw around a point.
|
|---|
| 167 | *
|
|---|
| 168 | * @param xv interpolation point
|
|---|
| 169 | * @return a double value
|
|---|
| 170 | */
|
|---|
| 171 | G4double interpolateFunction(G4double xv);
|
|---|
| 172 |
|
|---|
| 173 | /**
|
|---|
| 174 | * Calculates the first derivative of the function stored in class G4Saxw.
|
|---|
| 175 | *
|
|---|
| 176 | * @param xv an integer parameter
|
|---|
| 177 | */
|
|---|
| 178 | void firstDerivative(G4int k);
|
|---|
| 179 |
|
|---|
| 180 | /**
|
|---|
| 181 | * Returns the values of the function:
|
|---|
| 182 | * \f[
|
|---|
| 183 | * \frac{r^2}{1 + e^{\frac{r - r_{0}}{A_{dif}}}}
|
|---|
| 184 | * \f]
|
|---|
| 185 | *
|
|---|
| 186 | * @param r a G4double argument
|
|---|
| 187 | * @return a double value
|
|---|
| 188 | */
|
|---|
| 189 | G4double wsax(G4double r);
|
|---|
| 190 |
|
|---|
| 191 | /**
|
|---|
| 192 | * Returns the values of the function:
|
|---|
| 193 | * \f[
|
|---|
| 194 | * \frac{1}{A_{dif}^{2}} \frac{r^3 e^{r - r_0}}{1 + e^{\frac{r - r_{0}}{A_{dif}}}}
|
|---|
| 195 | * \f]
|
|---|
| 196 | *
|
|---|
| 197 | * @param r a G4double argument
|
|---|
| 198 | * @return a double value
|
|---|
| 199 | */
|
|---|
| 200 | G4double derivWsax(G4double r);
|
|---|
| 201 |
|
|---|
| 202 | /**
|
|---|
| 203 | * Returns the values of the function:
|
|---|
| 204 | * \f[
|
|---|
| 205 | * r^2 (1.0 + r_0 \frac{r^2}{A_{dif}}) e^{-\frac{r^2}{A_{dif}^2}}
|
|---|
| 206 | * \f]
|
|---|
| 207 | * @param r a G4double argument
|
|---|
| 208 | * @return a double value
|
|---|
| 209 | */
|
|---|
| 210 | G4double dmho(G4double r);
|
|---|
| 211 |
|
|---|
| 212 | /**
|
|---|
| 213 | * Returns the values of the function:
|
|---|
| 214 | * \f[
|
|---|
| 215 | * -\frac{2r^4}{A_{dif}^2} (r_0(1.0 - \frac{r^2}{A_{dif}^2}) - 1.0) e^{-\frac{r^2}{A_{dif}^2}}
|
|---|
| 216 | * \f]
|
|---|
| 217 | *
|
|---|
| 218 | * @param r a G4double argument
|
|---|
| 219 | * @return a double value
|
|---|
| 220 | */
|
|---|
| 221 | G4double derivMho(G4double r);
|
|---|
| 222 |
|
|---|
| 223 | /**
|
|---|
| 224 | * Returns the values of the function:
|
|---|
| 225 | * \f[
|
|---|
| 226 | * \frac{r^4}{A_{dif}^2} e^{-\frac{1}{2} \frac{r^2}{A_{dif}^2}}
|
|---|
| 227 | * \f]
|
|---|
| 228 | *
|
|---|
| 229 | * @param r a G4double argument
|
|---|
| 230 | * @return a double value
|
|---|
| 231 | */
|
|---|
| 232 | G4double derivGaus(G4double r);
|
|---|
| 233 |
|
|---|
| 234 | /**
|
|---|
| 235 | * Ce subroutine appele sur le premier tir va calculer la densite du deuton
|
|---|
| 236 | * dans l'espace des impulsions et preparer l'interpolation permettant ensuite
|
|---|
| 237 | * le tir au hasard d'un module de l'impulsion (q).
|
|---|
| 238 | * Ce subroutine remplit le G4Spl2:
|
|---|
| 239 | * xsp, ysp integrale normalisee de la densite de 0 a q.
|
|---|
| 240 | * a(),b(),c() coefs des nsp points pour une interpolation du second degre.
|
|---|
| 241 | * q est en fm-1.
|
|---|
| 242 | */
|
|---|
| 243 | void densDeut();
|
|---|
| 244 |
|
|---|
| 245 | /**
|
|---|
| 246 | * Integrate using Alkazhov's method.
|
|---|
| 247 | *
|
|---|
| 248 | * @param ami a double parameter
|
|---|
| 249 | * @param ama a double parameter
|
|---|
| 250 | * @param dr a double parameter
|
|---|
| 251 | * @param functionChoice an integer parameter
|
|---|
| 252 | * @return a double value
|
|---|
| 253 | */
|
|---|
| 254 | G4double integrate(G4double ami, G4double ama, G4double step, G4int functionChoice);
|
|---|
| 255 |
|
|---|
| 256 | /**
|
|---|
| 257 | * Deuteron density
|
|---|
| 258 | *
|
|---|
| 259 | * @param q a double parameter
|
|---|
| 260 | * @return a double value
|
|---|
| 261 | */
|
|---|
| 262 | G4double dens(G4double q);
|
|---|
| 263 |
|
|---|
| 264 | /**
|
|---|
| 265 | *
|
|---|
| 266 | */
|
|---|
| 267 | void spl2ab();
|
|---|
| 268 |
|
|---|
| 269 | /**
|
|---|
| 270 | *
|
|---|
| 271 | * @param xv a double parameter
|
|---|
| 272 | * @return a double value
|
|---|
| 273 | */
|
|---|
| 274 | G4double splineab(G4double xv);
|
|---|
| 275 |
|
|---|
| 276 | public: // Main INCL routines
|
|---|
| 277 | /**
|
|---|
| 278 | * INCL model as a function.
|
|---|
| 279 | */
|
|---|
| 280 | void pnu(G4int *ibert_p, G4int *nopart_p, G4int *izrem_p, G4int *iarem_p, G4double *esrem_p,
|
|---|
| 281 | G4double *erecrem_p, G4double *alrem_p, G4double *berem_p, G4double *garem_p,
|
|---|
| 282 | G4double *bimpact_p, G4int *l_p);
|
|---|
| 283 |
|
|---|
| 284 | /**
|
|---|
| 285 | * Single nucleon-nucleon collision.
|
|---|
| 286 | */
|
|---|
| 287 | void collis(G4double *p1_p, G4double *p2_p, G4double *p3_p, G4double *e1_p, G4double *pout11_p, G4double *pout12_p,
|
|---|
| 288 | G4double *pout13_p, G4double *eout1_p, G4double *q1_p, G4double *q2_p, G4double *q3_p,
|
|---|
| 289 | G4double *q4_p, G4int *np_p, G4int *ip_p, G4int *k2_p, G4int *k3_p, G4int *k4_p,
|
|---|
| 290 | G4int *k5_p, G4int *m1_p, G4int *m2_p, G4int *is1_p, G4int *is2_p);
|
|---|
| 291 |
|
|---|
| 292 | /**
|
|---|
| 293 | * This routine describes the anisotropic decay of a particle of
|
|---|
| 294 | * mass xi into 2 particles of masses x1,x2.
|
|---|
| 295 | * The anisotropy is supposed to follow a 1+3*hel*(std::cos(theta))**2 law
|
|---|
| 296 | * with respect to the direction of the incoming particle.
|
|---|
| 297 | *
|
|---|
| 298 | * In the input, p1,p2,p3 is the momentum of particle xi.
|
|---|
| 299 | *
|
|---|
| 300 | * In the output, p1,p2,p3 is the momentum of particle x1,
|
|---|
| 301 | * while q1,q2,q3 is the momentum of particle x2.
|
|---|
| 302 | *
|
|---|
| 303 | * @param p1_p pointer to momentum component 1
|
|---|
| 304 | * @param p2_p pointer to momentum component 2
|
|---|
| 305 | * @param p3_p pointer to momentum component 3
|
|---|
| 306 | * @param wp_p pointer to a double parameter
|
|---|
| 307 | * @param q1_p pointer to momentum component 1
|
|---|
| 308 | * @param q2_p pointer to momentum component 2
|
|---|
| 309 | * @param q3_p pointer to momentum component 3
|
|---|
| 310 | * @param wq_p pointer to a double parameter
|
|---|
| 311 | * @param xi_p pointer to a double parameter
|
|---|
| 312 | * @param x1_p pointer to momentum component 1
|
|---|
| 313 | * @param x2_p pointer to momentum component 2
|
|---|
| 314 | * @param x3_p pointer to momentum compone n3
|
|---|
| 315 | * @param hel_p pointer to a double parameter
|
|---|
| 316 | */
|
|---|
| 317 | void decay2(G4double *p1_p, G4double *p2_p, G4double *p3_p, G4double *wp_p, G4double *q1_p,
|
|---|
| 318 | G4double *q2_p, G4double *q3_p, G4double *wq_p, G4double *xi_p, G4double *x1_p,
|
|---|
| 319 | G4double *x2_p, G4double *hel_p);
|
|---|
| 320 |
|
|---|
| 321 | /**
|
|---|
| 322 | * Time calculation.
|
|---|
| 323 | *
|
|---|
| 324 | * @param i an index of particle 1
|
|---|
| 325 | * @param j an index of particle 2
|
|---|
| 326 | */
|
|---|
| 327 | void time(G4int i, G4int j);
|
|---|
| 328 |
|
|---|
| 329 | /**
|
|---|
| 330 | * New time.
|
|---|
| 331 | *
|
|---|
| 332 | * @param l1 an integer parameter
|
|---|
| 333 | * @param l2 an integer parameter
|
|---|
| 334 | */
|
|---|
| 335 | void newt(G4int l1, G4int l2);
|
|---|
| 336 |
|
|---|
| 337 | /**
|
|---|
| 338 | *
|
|---|
| 339 | *
|
|---|
| 340 | * @param l1 an integer parameter
|
|---|
| 341 | */
|
|---|
| 342 | void new1(G4int l1);
|
|---|
| 343 |
|
|---|
| 344 | /**
|
|---|
| 345 | *
|
|---|
| 346 | *
|
|---|
| 347 | * @param y1 a double parameter
|
|---|
| 348 | * @param y2 a double parameter
|
|---|
| 349 | * @param y3 a double parameter
|
|---|
| 350 | * @param q1 a double parameter
|
|---|
| 351 | * @param q2 a double parameter
|
|---|
| 352 | * @param q3 a double parameter
|
|---|
| 353 | * @param q4 a double parameter
|
|---|
| 354 | * @param npion number of pions
|
|---|
| 355 | * @param l1 an integer parameter
|
|---|
| 356 | */
|
|---|
| 357 | void new2(G4double y1, G4double y2, G4double y3, G4double q1, G4double q2, G4double q3,
|
|---|
| 358 | G4double q4, G4int npion, G4int l1);
|
|---|
| 359 |
|
|---|
| 360 | /**
|
|---|
| 361 | *
|
|---|
| 362 | *
|
|---|
| 363 | * @param y1 a double parameter
|
|---|
| 364 | * @param y2 a double parameter
|
|---|
| 365 | * @param y3 a double parameter
|
|---|
| 366 | * @param q1 a double parameter
|
|---|
| 367 | * @param q2 a double parameter
|
|---|
| 368 | * @param q3 a double parameter
|
|---|
| 369 | * @param q4 a double parameter
|
|---|
| 370 | * @param npion number of pions
|
|---|
| 371 | * @param l1 an integer parameter
|
|---|
| 372 | */
|
|---|
| 373 | void new3(G4double y1, G4double y2, G4double y3, G4double q1, G4double q2, G4double q3,
|
|---|
| 374 | G4double q4, G4int npion, G4int l1);
|
|---|
| 375 |
|
|---|
| 376 | /**
|
|---|
| 377 | * Lorentz transformation.
|
|---|
| 378 | *
|
|---|
| 379 | * @param q1 a double parameter
|
|---|
| 380 | * @param q2 a double parameter
|
|---|
| 381 | * @param q3 a double parameter
|
|---|
| 382 | * @param b1 a double parameter
|
|---|
| 383 | * @param b2 a double parameter
|
|---|
| 384 | * @param b3 a double parameter
|
|---|
| 385 | * @param E energy
|
|---|
| 386 | */
|
|---|
| 387 | void loren(G4double *q1, G4double *q2, G4double *q3, G4double *b1, G4double *b2, G4double *b3, G4double *E);
|
|---|
| 388 |
|
|---|
| 389 | /**
|
|---|
| 390 | * Pauli blocking.
|
|---|
| 391 | *
|
|---|
| 392 | * @param l an integer parameter
|
|---|
| 393 | * @param xr a double parameter
|
|---|
| 394 | * @param pr a double parameter
|
|---|
| 395 | * @return a double value
|
|---|
| 396 | */
|
|---|
| 397 | G4double pauliBlocking(G4int l, G4double xr, G4double pr);
|
|---|
| 398 |
|
|---|
| 399 | /**
|
|---|
| 400 | * Fit by J. Vandermeulen.
|
|---|
| 401 | * Low energy fit from reference J.Cugnon, D. L'hote and J. Vandermeulen, NIM B111 (1996) 215.
|
|---|
| 402 | *
|
|---|
| 403 | * @param E energy
|
|---|
| 404 | * @param m a double parameter m = 0, 1, 2 for nucleon-nucleon, nucleon-delta, delta-delta
|
|---|
| 405 | * @param i a double parameter i = 2, 0, -2 for pp, pn, nn
|
|---|
| 406 | * @return a double value
|
|---|
| 407 | */
|
|---|
| 408 | G4double lowEnergy(G4double E, G4double m, G4double i);
|
|---|
| 409 |
|
|---|
| 410 | /**
|
|---|
| 411 | * Total cross-sections.
|
|---|
| 412 | *
|
|---|
| 413 | * @param E energy
|
|---|
| 414 | * @param m an integer parameter m=0,1,2 for nucleon-nucleon, nucleon-delta, delta-delta
|
|---|
| 415 | * @param i an integer parameter i = 2, 0, -2 for pp, pn, nn
|
|---|
| 416 | * @return a double value
|
|---|
| 417 | */
|
|---|
| 418 | G4double totalCrossSection(G4double E, G4int m, G4int i);
|
|---|
| 419 |
|
|---|
| 420 | /**
|
|---|
| 421 | *
|
|---|
| 422 | *
|
|---|
| 423 | * @param Ein energy
|
|---|
| 424 | * @param d a double parameter
|
|---|
| 425 | * @param i an integer parameter
|
|---|
| 426 | * @param isa an integer parameter
|
|---|
| 427 | * @return a double value
|
|---|
| 428 | */
|
|---|
| 429 | G4double srec(G4double Ein, G4double d, G4int i, G4int isa);
|
|---|
| 430 |
|
|---|
| 431 | /**
|
|---|
| 432 | * Delta production cross section.
|
|---|
| 433 | *
|
|---|
| 434 | * @param E energy
|
|---|
| 435 | * @param i an integer parameter
|
|---|
| 436 | * @return a double value
|
|---|
| 437 | */
|
|---|
| 438 | G4double deltaProductionCrossSection(G4double E, G4int i);
|
|---|
| 439 |
|
|---|
| 440 | /**
|
|---|
| 441 | * Sigma(pi+ + p) in the (3,3) region.
|
|---|
| 442 | * New fit by J. Vandermeulen and constant value above the (3,3) resonance.
|
|---|
| 443 | *
|
|---|
| 444 | * @param x a double parameter
|
|---|
| 445 | * @return a double value
|
|---|
| 446 | */
|
|---|
| 447 | G4double pionNucleonCrossSection(G4double x);
|
|---|
| 448 |
|
|---|
| 449 | /**
|
|---|
| 450 | * Transmission probability for a nucleon of kinetic energy
|
|---|
| 451 | * E on the edge of the well of depth v0 (nr approximation).
|
|---|
| 452 | * ,
|
|---|
| 453 | * of the nucleus and r is the target radius
|
|---|
| 454 | *
|
|---|
| 455 | * @param E kinetic energy
|
|---|
| 456 | * @param iz the isospin of the nucleon
|
|---|
| 457 | * @param izn the instanteneous charge
|
|---|
| 458 | * @param r
|
|---|
| 459 | * @param v0
|
|---|
| 460 | * @return a double value
|
|---|
| 461 | */
|
|---|
| 462 | G4double transmissionProb(G4double E, G4double iz, G4double izn, G4double r, G4double v0);
|
|---|
| 463 |
|
|---|
| 464 | /**
|
|---|
| 465 | *
|
|---|
| 466 | *
|
|---|
| 467 | * @param x1 a double parameter
|
|---|
| 468 | * @param x2 a double parameter
|
|---|
| 469 | * @param x3 a double parameter
|
|---|
| 470 | * @param p1 a double parameter
|
|---|
| 471 | * @param p2 a double parameter
|
|---|
| 472 | * @param p3 a double parameter
|
|---|
| 473 | * @param E a double parameter
|
|---|
| 474 | * @param r2 a double parameter
|
|---|
| 475 | * @return a double value
|
|---|
| 476 | */
|
|---|
| 477 | G4double ref(G4double &x1, G4double &x2, G4double &x3, G4double p1,
|
|---|
| 478 | G4double p2, G4double p3, G4double E, G4double r2);
|
|---|
| 479 |
|
|---|
| 480 | /**
|
|---|
| 481 | * ForceAbsor
|
|---|
| 482 | */
|
|---|
| 483 | void forceAbsor(G4int *nopart, G4int *iarem, G4int *izrem, G4double *esrem, G4double *erecrem,
|
|---|
| 484 | G4double *alrem, G4double *berem, G4double *garem, G4int *jrem);
|
|---|
| 485 |
|
|---|
| 486 | /**
|
|---|
| 487 | * ForceAbs
|
|---|
| 488 | * @param iprojo projectile
|
|---|
| 489 | * @param at target mass number
|
|---|
| 490 | * @param zt target charge number
|
|---|
| 491 | * @param ep projectile energy
|
|---|
| 492 | * @param bmax a double parameter
|
|---|
| 493 | * @param pt a double parameter
|
|---|
| 494 | * @return absorption probability
|
|---|
| 495 | */
|
|---|
| 496 | G4double forceAbs(G4double iprojo, G4double at, G4double zt, G4double ep, G4double bmax, G4double pt);
|
|---|
| 497 |
|
|---|
| 498 | /**
|
|---|
| 499 | * absoprption xsec revised version rkt-97/5
|
|---|
| 500 | * neutron data from barashenkov
|
|---|
| 501 | * this gives absorption xsec for given zp,ap,zt,at,e (mev/nucleon)
|
|---|
| 502 | * arguement changed to mev; then e=ep/ap mev/nucleon
|
|---|
| 503 | * can be used for neutrons also.
|
|---|
| 504 | * this has coulomb as ours
|
|---|
| 505 | * @param zp projectile charge number
|
|---|
| 506 | * @param zp projectile mass number
|
|---|
| 507 | * @param zt a double parameter
|
|---|
| 508 | * @param zt target charge number
|
|---|
| 509 | * @param at target mass number
|
|---|
| 510 | * @param ep projectile energy
|
|---|
| 511 | */
|
|---|
| 512 | G4double xabs2(G4double zp, G4double ap, G4double zt, G4double at, G4double ep);
|
|---|
| 513 |
|
|---|
| 514 | /**
|
|---|
| 515 | * Standard random number generator.
|
|---|
| 516 | * @param *rndm pointer to the variable reserved for random number
|
|---|
| 517 | * @param *seed pointer to the random seed
|
|---|
| 518 | */
|
|---|
| 519 | void standardRandom(G4double *rndm, G4long *seed);
|
|---|
| 520 |
|
|---|
| 521 | /**
|
|---|
| 522 | * First derivative of a gaussian potential.
|
|---|
| 523 | * @param *rndm pointer to the variable reserved for random number
|
|---|
| 524 | */
|
|---|
| 525 | void gaussianRandom(G4double *rndm);
|
|---|
| 526 |
|
|---|
| 527 | /**
|
|---|
| 528 | * Safe exponential function which eliminates the CPU under and overflows.
|
|---|
| 529 | * @param x a double parameter
|
|---|
| 530 | * @return a double value
|
|---|
| 531 | */
|
|---|
| 532 | G4double safeExp(G4double x);
|
|---|
| 533 |
|
|---|
| 534 | /**
|
|---|
| 535 | * Nuclear radius
|
|---|
| 536 | * @param A mass number (double parameter)
|
|---|
| 537 | */
|
|---|
| 538 | G4double radius(G4double A);
|
|---|
| 539 |
|
|---|
| 540 | /** Parametrisation de la section efficace de réaction calculée par incl4.1
|
|---|
| 541 | * iprojo=1 proton incident, iprojo=2, neutron incident).
|
|---|
| 542 | * entre al et u, entre 10 et 100 mev protons, 20 et 100 mev neutrons.
|
|---|
| 543 | * bon ordre de grandeur pour les noyaux légers (c, o ...), trés faux
|
|---|
| 544 | * a energie sup a 100 mev.
|
|---|
| 545 | * (Comment needs to be translated)
|
|---|
| 546 | * @param projectile an integer parameter (1 = proton, 2 = neutron)
|
|---|
| 547 | * @param E energy of the projectile (double parameter)
|
|---|
| 548 | * @param A target mass number (double parameter)
|
|---|
| 549 | * @return cross section (double value)
|
|---|
| 550 | */
|
|---|
| 551 | G4double crossSection(G4int projectile, G4double E, G4double A);
|
|---|
| 552 |
|
|---|
| 553 | /**
|
|---|
| 554 | * coulombTransm
|
|---|
| 555 | * subroutine coulomb_transm(e,fm1,z1,fm2,z2,proba)
|
|---|
| 556 | * calcul du coulombien dans lahet (proba de transmission ou
|
|---|
| 557 | * d'entree dans le potentiel nucleaire).
|
|---|
| 558 | * @param E energy (a double parameter)
|
|---|
| 559 | * @param fm1 a double parameter
|
|---|
| 560 | * @param z1 a double parameter
|
|---|
| 561 | * @param fm2 a double parameter
|
|---|
| 562 | * @param z2 a double parameter
|
|---|
| 563 | * @return a double value
|
|---|
| 564 | */
|
|---|
| 565 | G4double coulombTransm(G4double E, G4double fm1, G4double z1, G4double fm2, G4double z2);
|
|---|
| 566 |
|
|---|
| 567 | /**
|
|---|
| 568 | * Clmb1
|
|---|
| 569 | * @param eta a double parameter \f$\eta = c_2*z_1*z_2*\sqrt{m/E}\f$
|
|---|
| 570 | * @param rho a double parameter \f$\rho = c_3*(r_1+r_2)*\sqrt{mE}\f$
|
|---|
| 571 | * @return a double value
|
|---|
| 572 | */
|
|---|
| 573 | G4double clmb1(G4double rho, G4double eta, G4double *ml);
|
|---|
| 574 |
|
|---|
| 575 | /**
|
|---|
| 576 | * First derivative of a gaussian potential.
|
|---|
| 577 | * @param eta a double parameter \f$\eta = c_2*z_1*z_2*\sqrt{m/E}\f$
|
|---|
| 578 | * @param rho a double parameter \f$\rho = c_3*(r_1+r_2)*\sqrt{mE}\f$
|
|---|
| 579 | * @return a double value
|
|---|
| 580 | */
|
|---|
| 581 | G4double clmb2(G4double rho, G4double eta, G4double *t1);
|
|---|
| 582 |
|
|---|
| 583 | public: // Utilities
|
|---|
| 584 | /**
|
|---|
| 585 | * Returns the smaller of two numbers.
|
|---|
| 586 | * @param a a double value
|
|---|
| 587 | * @param b a double value
|
|---|
| 588 | * @return a double value
|
|---|
| 589 | */
|
|---|
| 590 | G4double min(G4double a, G4double b);
|
|---|
| 591 |
|
|---|
| 592 | /**
|
|---|
| 593 | * Returns the smaller of two numbers.
|
|---|
| 594 | * @param a an integer value
|
|---|
| 595 | * @param b an integer value
|
|---|
| 596 | * @return an integer value
|
|---|
| 597 | */
|
|---|
| 598 | G4int min(G4int a, G4int b);
|
|---|
| 599 |
|
|---|
| 600 | /**
|
|---|
| 601 | * Returns the greater of two numbers.
|
|---|
| 602 | * @param a a double value
|
|---|
| 603 | * @param b a double value
|
|---|
| 604 | * @return a double value
|
|---|
| 605 | */
|
|---|
| 606 | G4double max(G4double a, G4double b);
|
|---|
| 607 |
|
|---|
| 608 | /**
|
|---|
| 609 | * Returns the greater of two numbers.
|
|---|
| 610 | * @param a an integer value
|
|---|
| 611 | * @param b an integer value
|
|---|
| 612 | * @return an integer value
|
|---|
| 613 | */
|
|---|
| 614 | G4int max(G4int a, G4int b);
|
|---|
| 615 |
|
|---|
| 616 | /**
|
|---|
| 617 | * Rounds a double to the nearest int
|
|---|
| 618 | * @param a double parameter
|
|---|
| 619 | * @return an integer value
|
|---|
| 620 | */
|
|---|
| 621 | G4int nint(G4double number);
|
|---|
| 622 |
|
|---|
| 623 | /**
|
|---|
| 624 | * Calls a function
|
|---|
| 625 | * @param functionChoice an integer value representing the choice of
|
|---|
| 626 | * function (0 = wsax, 1 = derivWsax, 2 = dmho, 3 = derivMho, 4 = derivGaus)
|
|---|
| 627 | * @param r a double parameter
|
|---|
| 628 | * @return a double value
|
|---|
| 629 | */
|
|---|
| 630 | G4double callFunction(G4int functionChoice, G4double r);
|
|---|
| 631 |
|
|---|
| 632 | G4double am(G4double a, G4double b, G4double c, G4double d);
|
|---|
| 633 | G4double pcm(G4double e, G4double a, G4double c);
|
|---|
| 634 | G4double sign(G4double a, G4double b);
|
|---|
| 635 | G4double utilabs(G4double a);
|
|---|
| 636 | G4double amax1(G4double a, G4double b);
|
|---|
| 637 | G4double w(G4double a, G4double b, G4double c, G4double d);
|
|---|
| 638 | G4int idnint(G4double a);
|
|---|
| 639 | private:
|
|---|
| 640 |
|
|---|
| 641 | /**
|
|---|
| 642 | * Random seeds for INCL4 internal random number generators.
|
|---|
| 643 | */
|
|---|
| 644 | G4Hazard *hazard;
|
|---|
| 645 |
|
|---|
| 646 | /**
|
|---|
| 647 | * Data structure for INCL4.
|
|---|
| 648 | */
|
|---|
| 649 | G4Dton *dton;
|
|---|
| 650 |
|
|---|
| 651 | /**
|
|---|
| 652 | * Data structure for INCL4. Contains the Woods-Saxon potential
|
|---|
| 653 | * functions for target nuclei.
|
|---|
| 654 | */
|
|---|
| 655 | G4Saxw *saxw;
|
|---|
| 656 |
|
|---|
| 657 | /**
|
|---|
| 658 | * Data structure for INCL4.
|
|---|
| 659 | */
|
|---|
| 660 | G4Ws *ws;
|
|---|
| 661 |
|
|---|
| 662 | /**
|
|---|
| 663 | * G4Spl2
|
|---|
| 664 | */
|
|---|
| 665 | G4Spl2 *spl2;
|
|---|
| 666 |
|
|---|
| 667 | /**
|
|---|
| 668 | * G4LightGausNuc
|
|---|
| 669 | */
|
|---|
| 670 | G4LightGausNuc *light_gaus_nuc;
|
|---|
| 671 |
|
|---|
| 672 | /**
|
|---|
| 673 | * G4LightNuc
|
|---|
| 674 | */
|
|---|
| 675 | G4LightNuc *light_nuc;
|
|---|
| 676 |
|
|---|
| 677 | /**
|
|---|
| 678 | * G4Calincl
|
|---|
| 679 | */
|
|---|
| 680 | G4Calincl *calincl;
|
|---|
| 681 |
|
|---|
| 682 | /**
|
|---|
| 683 | * G4Mat
|
|---|
| 684 | */
|
|---|
| 685 | G4Mat *mat;
|
|---|
| 686 |
|
|---|
| 687 | /**
|
|---|
| 688 | *
|
|---|
| 689 | */
|
|---|
| 690 | G4Bl1 *bl1;
|
|---|
| 691 |
|
|---|
| 692 | /**
|
|---|
| 693 | *
|
|---|
| 694 | */
|
|---|
| 695 | G4Bl2 *bl2;
|
|---|
| 696 |
|
|---|
| 697 | /**
|
|---|
| 698 | *
|
|---|
| 699 | */
|
|---|
| 700 | G4Bl3 *bl3;
|
|---|
| 701 |
|
|---|
| 702 | /**
|
|---|
| 703 | *
|
|---|
| 704 | */
|
|---|
| 705 | G4Bl4 *bl4;
|
|---|
| 706 |
|
|---|
| 707 | /**
|
|---|
| 708 | *
|
|---|
| 709 | */
|
|---|
| 710 | G4Bl5 *bl5;
|
|---|
| 711 |
|
|---|
| 712 | /**
|
|---|
| 713 | *
|
|---|
| 714 | */
|
|---|
| 715 | G4Bl6 *bl6;
|
|---|
| 716 |
|
|---|
| 717 | /**
|
|---|
| 718 | *
|
|---|
| 719 | */
|
|---|
| 720 | G4Bl8 *bl8;
|
|---|
| 721 |
|
|---|
| 722 | /**
|
|---|
| 723 | *
|
|---|
| 724 | */
|
|---|
| 725 | G4Bl9 *bl9;
|
|---|
| 726 |
|
|---|
| 727 | /**
|
|---|
| 728 | *
|
|---|
| 729 | */
|
|---|
| 730 | G4Bl10 *bl10;
|
|---|
| 731 |
|
|---|
| 732 | /**
|
|---|
| 733 | *
|
|---|
| 734 | */
|
|---|
| 735 | G4Kind *kindstruct;
|
|---|
| 736 |
|
|---|
| 737 | /**
|
|---|
| 738 | *
|
|---|
| 739 | */
|
|---|
| 740 | G4Paul *paul;
|
|---|
| 741 |
|
|---|
| 742 | /**
|
|---|
| 743 | * Detailed information of the cascade
|
|---|
| 744 | */
|
|---|
| 745 | G4VarAvat *varavat;
|
|---|
| 746 |
|
|---|
| 747 | /**
|
|---|
| 748 | * Cascade output.
|
|---|
| 749 | */
|
|---|
| 750 | G4VarNtp *varntp;
|
|---|
| 751 |
|
|---|
| 752 | /**
|
|---|
| 753 | * For storing the results of the evaporation.
|
|---|
| 754 | */
|
|---|
| 755 | G4VarNtp *evaporationResult;
|
|---|
| 756 |
|
|---|
| 757 | /**
|
|---|
| 758 | * Defines the verbosity of console output. Values can be between 0
|
|---|
| 759 | * and 4 where 0 means silent and 4 the most verbose possible
|
|---|
| 760 | * output.
|
|---|
| 761 | */
|
|---|
| 762 | G4int verboseLevel;
|
|---|
| 763 |
|
|---|
| 764 | /**
|
|---|
| 765 | * Function ID for wsax.
|
|---|
| 766 | * @see wsax
|
|---|
| 767 | * @see integrate
|
|---|
| 768 | * @see callFunction
|
|---|
| 769 | */
|
|---|
| 770 | G4int wsaxFunction;
|
|---|
| 771 |
|
|---|
| 772 | /**
|
|---|
| 773 | * Function ID for derivWsax.
|
|---|
| 774 | * @see derivWsax
|
|---|
| 775 | * @see integrate
|
|---|
| 776 | * @see callFunction
|
|---|
| 777 | */
|
|---|
| 778 | G4int derivWsaxFunction;
|
|---|
| 779 |
|
|---|
| 780 | /**
|
|---|
| 781 | * Function ID for dmho.
|
|---|
| 782 | * @see derivWsax
|
|---|
| 783 | * @see integrate
|
|---|
| 784 | * @see callFunction
|
|---|
| 785 | */
|
|---|
| 786 | G4int dmhoFunction;
|
|---|
| 787 |
|
|---|
| 788 | /**
|
|---|
| 789 | * Function ID for derivMho.
|
|---|
| 790 | * @see derivMho
|
|---|
| 791 | * @see integrate
|
|---|
| 792 | * @see callFunction
|
|---|
| 793 | */
|
|---|
| 794 | G4int derivMhoFunction;
|
|---|
| 795 |
|
|---|
| 796 | /**
|
|---|
| 797 | * Function ID for derivGaus.
|
|---|
| 798 | * @see derivGaus
|
|---|
| 799 | * @see integrate
|
|---|
| 800 | * @see callFunction
|
|---|
| 801 | */
|
|---|
| 802 | G4int derivGausFunction;
|
|---|
| 803 |
|
|---|
| 804 | /**
|
|---|
| 805 | * Function ID for dens.
|
|---|
| 806 | * @see dens
|
|---|
| 807 | * @see integrate
|
|---|
| 808 | * @see callFunction
|
|---|
| 809 | */
|
|---|
| 810 | G4int densFunction;
|
|---|
| 811 |
|
|---|
| 812 | G4int kind[300]; //= (*kind_p);
|
|---|
| 813 | G4double ep[300]; // = (*ep_p);
|
|---|
| 814 | G4double alpha[300]; // = (*alpha_p);
|
|---|
| 815 | G4double beta[300]; // = (*beta_p);
|
|---|
| 816 | G4double gam[300]; // = (*gam_p);
|
|---|
| 817 |
|
|---|
| 818 | G4Volant *volant;
|
|---|
| 819 | G4Abla *abla;
|
|---|
| 820 | G4InclRandomInterface *randomGenerator;
|
|---|
| 821 | };
|
|---|
| 822 |
|
|---|
| 823 | #endif
|
|---|