Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/electromagnetic/lowenergy/src/G4Generator2BN.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/electromagnetic/lowenergy/src/G4Generator2BN.cc (Version 11.3.0) and /processes/electromagnetic/lowenergy/src/G4Generator2BN.cc (Version 9.4.p1)


  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 // $Id: G4Generator2BN.cc,v 1.9 2010-10-14 14:01:02 vnivanch Exp $
                                                   >>  27 // GEANT4 tag $Name: geant4-09-04-patch-01 $
 26 //                                                 28 //
 27 // -------------------------------------------     29 // -------------------------------------------------------------------
 28 //                                                 30 //
 29 // GEANT4 Class file                               31 // GEANT4 Class file
 30 //                                                 32 //
 31 //                                                 33 //
 32 // File name:     G4Generator2BN                   34 // File name:     G4Generator2BN
 33 //                                                 35 //
 34 // Author:        Andreia Trindade (andreia@li     36 // Author:        Andreia Trindade (andreia@lip.pt)
 35 //                Pedro Rodrigues  (psilva@lip     37 //                Pedro Rodrigues  (psilva@lip.pt)
 36 //                Luis Peralta     (luis@lip.p     38 //                Luis Peralta     (luis@lip.pt)
 37 //                                                 39 //
 38 // Creation date: 21 June 2003                     40 // Creation date: 21 June 2003
 39 //                                                 41 //
 40 // Modifications:                              <<  42 // Modifications: 
 41 // 21 Jun 2003                                     43 // 21 Jun 2003                                 First implementation acording with new design
 42 // 05 Nov 2003  MGP                                44 // 05 Nov 2003  MGP                            Fixed compilation warning
 43 // 14 Mar 2004                                     45 // 14 Mar 2004                                 Code optimization
 44 //                                                 46 //
 45 // Class Description:                          <<  47 // Class Description: 
 46 //                                                 48 //
 47 // Concrete base class for Bremsstrahlung Angu <<  49 // Concrete base class for Bremsstrahlung Angular Distribution Generation 
 48 // 2BN Distribution                                50 // 2BN Distribution
 49 //                                                 51 //
 50 // Class Description: End                      <<  52 // Class Description: End 
 51 //                                                 53 //
 52 // -------------------------------------------     54 // -------------------------------------------------------------------
 53 //                                             <<  55 //   
 54                                                    56 
 55 #include "G4Generator2BN.hh"                       57 #include "G4Generator2BN.hh"
 56 #include "Randomize.hh"                            58 #include "Randomize.hh"
 57 #include "G4PhysicalConstants.hh"              <<  59 //    
 58 #include "G4SystemOfUnits.hh"                  << 
 59 #include "G4Exp.hh"                            << 
 60                                                << 
 61 //                                             << 
 62                                                    60 
 63 G4double G4Generator2BN::Atab[320] =               61 G4double G4Generator2BN::Atab[320] =
 64          { 0.0264767, 0.0260006, 0.0257112, 0.     62          { 0.0264767, 0.0260006, 0.0257112, 0.0252475, 0.024792, 0.0243443, 0.0240726, 0.0236367,
 65            0.023209,  0.0227892, 0.0225362, 0.     63            0.023209,  0.0227892, 0.0225362, 0.0221284, 0.0217282,0.0214894, 0.0211005, 0.0207189,
 66            0.0204935, 0.0201227, 0.0197588, 0.     64            0.0204935, 0.0201227, 0.0197588, 0.019546,  0.0191923,0.0188454, 0.0186445, 0.0183072,
 67            0.0179763, 0.0177866, 0.0174649, 0.     65            0.0179763, 0.0177866, 0.0174649, 0.0172828, 0.0169702,0.0166634, 0.0164915, 0.0161933,
 68            0.0160283, 0.0157384, 0.0155801, 0.     66            0.0160283, 0.0157384, 0.0155801, 0.0152981, 0.0151463,0.0148721, 0.0147263, 0.0144598,
 69            0.01432,   0.0140607, 0.0139267, 0.     67            0.01432,   0.0140607, 0.0139267, 0.0136744, 0.0135459,0.0133005, 0.0131773, 0.0129385,
 70            0.0128205, 0.0125881, 0.012475,  0.     68            0.0128205, 0.0125881, 0.012475,  0.0122488, 0.0121406,0.0119204, 0.0118167, 0.0117158,
 71            0.0115032, 0.0114067, 0.0111995, 0.     69            0.0115032, 0.0114067, 0.0111995, 0.0111072, 0.0110175,0.0108173, 0.0107316, 0.0105365,
 72            0.0104547, 0.0102646, 0.0101865, 0.     70            0.0104547, 0.0102646, 0.0101865, 0.010111,  0.00992684,0.0098548,0.00967532,0.00960671,
 73            0.00943171,0.00936643,0.00930328,0.     71            0.00943171,0.00936643,0.00930328,0.0091337, 0.00907372,0.00890831,0.00885141,0.00869003,
 74            0.00863611,0.00858428,0.00842757,0.     72            0.00863611,0.00858428,0.00842757,0.00837854,0.0082256,0.00817931,0.00803,0.00798639,
 75            0.00784058,0.00779958,0.00776046,0.     73            0.00784058,0.00779958,0.00776046,0.00761866,0.00758201,0.00744346,0.00740928,0.00727384,
 76            0.00724201,0.00710969,0.00708004,0.     74            0.00724201,0.00710969,0.00708004,0.00695074,0.00692333,0.00679688,0.00677166,0.00664801,
 77            0.00662484,0.00650396,0.00648286,0.     75            0.00662484,0.00650396,0.00648286,0.00636458,0.00634545,0.00622977,0.00621258,0.00609936,
 78            0.00608412,0.00597331,0.00595991,0.     76            0.00608412,0.00597331,0.00595991,0.00585143,0.00583988,0.0057337,0.0057239,0.00561991,
 79            0.0056119, 0.00551005,0.00550377,0.     77            0.0056119, 0.00551005,0.00550377,0.00540399,0.00539938,0.00530162,0.00529872,0.00520292,
 80            0.0051091, 0.00510777,0.00501582,0.     78            0.0051091, 0.00510777,0.00501582,0.00501608,0.00492594,0.00492781,0.00483942,0.0048429,
 81            0.00475622,0.00476127,0.00467625,0.     79            0.00475622,0.00476127,0.00467625,0.00468287,0.00459947,0.00451785,0.00452581,0.00444573,
 82            0.00445522,0.00437664,0.00438768,0.     80            0.00445522,0.00437664,0.00438768,0.00431057,0.00432316,0.00424745,0.0042616,0.00418726,
 83            0.004203,  0.00413,   0.00405869,0.     81            0.004203,  0.00413,   0.00405869,0.00407563,0.00400561,0.00402414,0.00395536,0.00397553,
 84            0.00390795,0.00392975,0.00386339,0.     82            0.00390795,0.00392975,0.00386339,0.00379862,0.00382167,0.00375805,0.00378276,0.00372031,
 85            0.00374678,0.00368538,0.00371363,0.     83            0.00374678,0.00368538,0.00371363,0.00365335,0.00359463,0.0036242, 0.00356653,0.003598,
 86            0.00354139,0.00357481,0.00351921,0.     84            0.00354139,0.00357481,0.00351921,0.00355464,0.00350005,0.0034471,0.00348403,0.00343208,
 87            0.0034712, 0.00342026,0.00346165,0.     85            0.0034712, 0.00342026,0.00346165,0.00341172,0.00345548,0.00340657,0.00335944,0.00340491,
 88            0.00335885,0.00340692,0.00336191,0.     86            0.00335885,0.00340692,0.00336191,0.00341273,0.00336879,0.00342249,0.00337962,0.00333889,
 89            0.00339463,0.00335506,0.00341401,0.     87            0.00339463,0.00335506,0.00341401,0.00337558,0.00343797,0.00340067,0.00336584,0.00343059,
 90            0.0033969, 0.00346557,0.00343302,0.     88            0.0033969, 0.00346557,0.00343302,0.00350594,0.00347448,0.00344563,0.00352163,0.00349383,
 91            0.00357485,0.00354807,0.00352395,0.     89            0.00357485,0.00354807,0.00352395,0.00360885,0.00358571,0.00367661,0.00365446,0.00375194,
 92            0.00373078,0.00371234,0.00381532,0.     90            0.00373078,0.00371234,0.00381532,0.00379787,0.00390882,0.00389241,0.00387881,0.00399675,
 93            0.00398425,0.00411183,0.00410042,0.     91            0.00398425,0.00411183,0.00410042,0.00409197,0.00422843,0.00422123,0.00436974,0.0043637,
 94            0.00436082,0.00452075,0.00451934,0.     92            0.00436082,0.00452075,0.00451934,0.00452125,0.00469406,0.00469756,0.00488741,0.00489221,
 95            0.00490102,0.00510782,0.00511801,0.     93            0.00490102,0.00510782,0.00511801,0.00513271,0.0053589, 0.00537524,0.00562643,0.00564452,
 96            0.0056677, 0.00594482,0.00596999,0.     94            0.0056677, 0.00594482,0.00596999,0.0059999, 0.00630758,0.00634014,0.00637849,0.00672136,
 97            0.00676236,0.00680914,0.00719407,0.     95            0.00676236,0.00680914,0.00719407,0.0072439, 0.00730063,0.0077349, 0.00779494,0.00786293,
 98            0.00835577,0.0084276, 0.00850759,0.     96            0.00835577,0.0084276, 0.00850759,0.00907162,0.00915592,0.00924925,0.00935226,0.00999779,
 99            0.0101059, 0.0102249, 0.0109763, 0.     97            0.0101059, 0.0102249, 0.0109763, 0.0111003, 0.0112367, 0.0113862, 0.0122637, 0.0124196,
100            0.0125898, 0.0136311, 0.0138081, 0.     98            0.0125898, 0.0136311, 0.0138081, 0.0140011, 0.0142112, 0.0154536, 0.0156723, 0.0159099,
101            0.016168,  0.0176664, 0.0179339, 0.     99            0.016168,  0.0176664, 0.0179339, 0.0182246, 0.0185396, 0.020381,  0.0207026, 0.0210558,
102            0.0214374, 0.0237377, 0.0241275, 0.    100            0.0214374, 0.0237377, 0.0241275, 0.0245528, 0.0250106, 0.0255038, 0.0284158, 0.0289213,
103            0.0294621, 0.0300526, 0.0338619, 0.    101            0.0294621, 0.0300526, 0.0338619, 0.0344537, 0.0351108, 0.0358099, 0.036554,  0.0416399
104          };                                       102          };
105                                                   103 
106 G4double G4Generator2BN::ctab[320] =              104 G4double G4Generator2BN::ctab[320] =
107     { 0.482253, 0.482253, 0.489021, 0.489021,     105     { 0.482253, 0.482253, 0.489021, 0.489021, 0.489021, 0.489021, 0.495933,
108       0.495933, 0.495933, 0.495933, 0.502993,     106       0.495933, 0.495933, 0.495933, 0.502993, 0.502993, 0.502993, 0.510204,
109       0.510204, 0.510204, 0.517572, 0.517572,     107       0.510204, 0.510204, 0.517572, 0.517572, 0.517572, 0.5251,   0.5251,
110       0.5251,   0.532793, 0.532793, 0.532793,     108       0.5251,   0.532793, 0.532793, 0.532793, 0.540657, 0.540657, 0.548697,
111       0.548697, 0.548697, 0.556917, 0.556917,     109       0.548697, 0.548697, 0.556917, 0.556917, 0.565323, 0.565323, 0.573921,
112       0.573921, 0.582717, 0.582717, 0.591716,     110       0.573921, 0.582717, 0.582717, 0.591716, 0.591716, 0.600925, 0.600925,
113       0.610352, 0.610352, 0.620001, 0.620001,     111       0.610352, 0.610352, 0.620001, 0.620001, 0.629882, 0.629882, 0.64,
114       0.64,     0.650364, 0.650364, 0.660982,     112       0.64,     0.650364, 0.650364, 0.660982, 0.660982, 0.671862, 0.683013,
115       0.683013, 0.694444, 0.694444, 0.706165,     113       0.683013, 0.694444, 0.694444, 0.706165, 0.718184, 0.718184, 0.730514,
116       0.730514, 0.743163, 0.743163, 0.756144,     114       0.730514, 0.743163, 0.743163, 0.756144, 0.769468, 0.769468, 0.783147,
117       0.783147, 0.797194, 0.797194, 0.811622,     115       0.783147, 0.797194, 0.797194, 0.811622, 0.826446, 0.826446, 0.84168,
118       0.84168,  0.857339, 0.857339, 0.873439,     116       0.84168,  0.857339, 0.857339, 0.873439, 0.889996, 0.889996, 0.907029,
119       0.907029, 0.924556, 0.924556, 0.942596,     117       0.907029, 0.924556, 0.924556, 0.942596, 0.942596, 0.961169, 0.980296,
120       0.980296, 1,        1,        1.0203,       118       0.980296, 1,        1,        1.0203,   1.0203,   1.04123,  1.04123,
121       1.06281,  1.06281,  1.08507,  1.08507,      119       1.06281,  1.06281,  1.08507,  1.08507,  1.10803,  1.10803,  1.13173,
122       1.13173,  1.1562,   1.1562,   1.18147,      120       1.13173,  1.1562,   1.1562,   1.18147,  1.18147,  1.20758,  1.20758,
123       1.23457,  1.23457,  1.26247,  1.26247,      121       1.23457,  1.23457,  1.26247,  1.26247,  1.29132,  1.29132,  1.32118,
124       1.32118,  1.35208,  1.35208,  1.38408,      122       1.32118,  1.35208,  1.35208,  1.38408,  1.38408,  1.41723,  1.41723,
125       1.45159,  1.45159,  1.45159,  1.48721,      123       1.45159,  1.45159,  1.45159,  1.48721,  1.48721,  1.52416,  1.52416,
126       1.5625,   1.5625,   1.60231,  1.60231,      124       1.5625,   1.5625,   1.60231,  1.60231,  1.64366,  1.64366,  1.68663,
127       1.68663,  1.68663,  1.7313,   1.7313,       125       1.68663,  1.68663,  1.7313,   1.7313,   1.77778,  1.77778,  1.82615,
128       1.82615,  1.87652,  1.87652,  1.92901,      126       1.82615,  1.87652,  1.87652,  1.92901,  1.92901,  1.98373,  1.98373,
129       1.98373,  2.04082,  2.04082,  2.1004,       127       1.98373,  2.04082,  2.04082,  2.1004,   2.1004,   2.16263,  2.16263,
130       2.22767,  2.22767,  2.22767,  2.29568,      128       2.22767,  2.22767,  2.22767,  2.29568,  2.29568,  2.36686,  2.36686,
131       2.44141,  2.44141,  2.51953,  2.51953,      129       2.44141,  2.44141,  2.51953,  2.51953,  2.51953,  2.60146,  2.60146,
132       2.68745,  2.68745,  2.77778,  2.77778,      130       2.68745,  2.68745,  2.77778,  2.77778,  2.87274,  2.87274,  2.87274,
133       2.97265,  2.97265,  3.07787,  3.07787,      131       2.97265,  2.97265,  3.07787,  3.07787,  3.18878,  3.18878,  3.30579,
134       3.30579,  3.30579,  3.42936,  3.42936,      132       3.30579,  3.30579,  3.42936,  3.42936,  3.55999,  3.55999,  3.69822,
135       3.69822,  3.84468,  3.84468,  3.84468,      133       3.69822,  3.84468,  3.84468,  3.84468,  4,        4,        4.16493,
136       4.16493,  4.34028,  4.34028,  4.34028,      134       4.16493,  4.34028,  4.34028,  4.34028,  4.52694,  4.52694,  4.7259,
137       4.7259,   4.93827,  4.93827,  4.93827,      135       4.7259,   4.93827,  4.93827,  4.93827,  5.16529,  5.16529,  5.40833,
138       5.40833,  5.40833,  5.66893,  5.66893,      136       5.40833,  5.40833,  5.66893,  5.66893,  5.94884,  5.94884,  6.25,
139       6.25,     6.25,     6.57462,  6.57462,      137       6.25,     6.25,     6.57462,  6.57462,  6.92521,  6.92521,  6.92521,
140       7.3046,   7.3046,   7.71605,  7.71605,      138       7.3046,   7.3046,   7.71605,  7.71605,  7.71605,  8.16327,  8.16327,
141       8.65052,  8.65052,  8.65052,  9.18274,      139       8.65052,  8.65052,  8.65052,  9.18274,  9.18274,  9.18274,  9.76562,
142       9.76562,  10.4058,  10.4058,  10.4058,      140       9.76562,  10.4058,  10.4058,  10.4058,  11.1111,  11.1111,  11.1111,
143       11.8906,  11.8906,  12.7551,  12.7551,      141       11.8906,  11.8906,  12.7551,  12.7551,  12.7551,  13.7174,  13.7174,
144       13.7174,  14.7929,  14.7929,  14.7929,      142       13.7174,  14.7929,  14.7929,  14.7929,  16,       16,       16,
145       17.3611,  17.3611,  17.3611,  18.9036,      143       17.3611,  17.3611,  17.3611,  18.9036,  18.9036,  18.9036,  20.6612,
146       20.6612,  20.6612,  22.6757,  22.6757,      144       20.6612,  20.6612,  22.6757,  22.6757,  22.6757,  22.6757,  25,
147       25,       25,       27.7008,  27.7008,      145       25,       25,       27.7008,  27.7008,  27.7008,  27.7008,  30.8642,
148       30.8642,  30.8642,  34.6021,  34.6021,      146       30.8642,  30.8642,  34.6021,  34.6021,  34.6021,  34.6021,  39.0625,
149       39.0625,  39.0625,  39.0625,  44.4444,      147       39.0625,  39.0625,  39.0625,  44.4444,  44.4444,  44.4444,  44.4444,
150       51.0204,  51.0204,  51.0204,  51.0204,      148       51.0204,  51.0204,  51.0204,  51.0204,  59.1716,  59.1716,  59.1716,
151       59.1716,  59.1716,  69.4444,  69.4444,      149       59.1716,  59.1716,  69.4444,  69.4444,  69.4444,  69.4444,  82.6446,
152       82.6446,  82.6446,  82.6446,  82.6446,      150       82.6446,  82.6446,  82.6446,  82.6446,  100
153     };                                            151     };
154                                                   152 
155 //....oooOO0OOooo........oooOO0OOooo........oo << 
156                                                   153 
157 G4Generator2BN::G4Generator2BN(const G4String&    154 G4Generator2BN::G4Generator2BN(const G4String&)
158  : G4VEmAngularDistribution("AngularGen2BN")   << 155  : G4VBremAngularDistribution("AngularGen2BN")
159 {                                                 156 {
160   b = 1.2;                                        157   b = 1.2;
161   index_min = -300;                               158   index_min = -300;
162   index_max = 319;                             << 159   index_max = 20;
163                                                   160 
164   // Set parameters minimum limits Ekelectron     161   // Set parameters minimum limits Ekelectron = 250 eV and kphoton = 100 eV
165   kmin = 100*eV;                                  162   kmin = 100*eV;
166   Ekmin = 250*eV;                                 163   Ekmin = 250*eV;
167   kcut = 100*eV;                                  164   kcut = 100*eV;
168                                                   165 
169   // Increment Theta value for surface interpo    166   // Increment Theta value for surface interpolation
170   dtheta = 0.1*rad;                               167   dtheta = 0.1*rad;
171                                                   168 
172   nwarn = 0;                                   << 
173                                                << 
174   // Construct Majorant Surface to 2BN cross-s    169   // Construct Majorant Surface to 2BN cross-section
175   // (we dont need this. Pre-calculated values    170   // (we dont need this. Pre-calculated values are used instead due to performance issues
176   // ConstructMajorantSurface();                  171   // ConstructMajorantSurface();
177 }                                                 172 }
178                                                   173 
179 //....oooOO0OOooo........oooOO0OOooo........oo << 174 //    
180                                                   175 
181 G4ThreeVector& G4Generator2BN::SampleDirection << 176 G4Generator2BN::~G4Generator2BN() 
182                  G4double out_energy,          << 177 {}
183                  G4int,                        << 
184                  const G4Material*)            << 
185 {                                              << 
186   G4double Ek  = dp->GetKineticEnergy();       << 
187   G4double Eel = dp->GetTotalEnergy();         << 
188   if(Eel > 2*MeV) {                            << 
189     return fGenerator2BS.SampleDirection(dp, o << 
190   }                                            << 
191                                                   178 
192   G4double k   = Eel - out_energy;             << 179 //
193                                                << 
194   G4double t;                                  << 
195   G4double cte2;                               << 
196   G4double y, u;                               << 
197   G4double ds;                                 << 
198   G4double dmax;                               << 
199                                                << 
200   // find table index                          << 
201   G4int index = G4int(std::log10(Ek/MeV)*100)  << 
202   if(index > index_max) { index = index_max; } << 
203   else if(index < 0) { index = 0; }            << 
204                                                << 
205   G4double c = ctab[index];                    << 
206   G4double A = Atab[index];                    << 
207   if(index < index_max) { A = std::max(A, Atab << 
208                                                << 
209   do{                                          << 
210     // generate k accordimg to std::pow(k,-b)  << 
211                                                   180 
212     // normalization constant                  << 181 G4double G4Generator2BN::PolarAngle(const G4double initial_energy,
213     //  cte1 = (1-b)/(std::pow(kmax,(1-b))-std << 182             const G4double final_energy,
214     //  y = G4UniformRand();                   << 183             const G4int) // Z
215     //  k = std::pow(((1-b)/cte1*y+std::pow(km << 184 {
216                                                << 
217     // generate theta accordimg to theta/(1+c* << 
218     // Normalization constant                  << 
219     cte2 = 2*c/std::log(1+c*pi2);              << 
220                                                << 
221     y = G4UniformRand();                       << 
222     t = std::sqrt((G4Exp(2*c*y/cte2)-1)/c);    << 
223     u = G4UniformRand();                       << 
224                                                << 
225     // point acceptance algorithm              << 
226     //fk = std::pow(k,-b);                     << 
227     //ft = t/(1+c*t*t);                        << 
228     dmax = A*std::pow(k,-b)*t/(1+c*t*t);       << 
229     ds = Calculatedsdkdt(k,t,Eel);             << 
230                                                << 
231     // violation point                         << 
232     if(ds > dmax && nwarn >= 20) {             << 
233       ++nwarn;                                 << 
234       G4cout << "### WARNING in G4Generator2BN << 
235        << "  D(Ekin,k)/Dmax-1= " << (ds/dmax - << 
236        << "  results are not reliable!"        << 
237        << G4endl;                              << 
238       if(20 == nwarn) {                        << 
239   G4cout << "   WARNING in G4Generator2BN is c << 
240       }                                        << 
241     }                                          << 
242                                                   185 
243   } while(u*dmax > ds || t > CLHEP::pi);       << 186   G4double theta = 0;
244                                                   187 
245   G4double sint = std::sin(t);                 << 188   G4double k = initial_energy - final_energy;
246   G4double phi  = twopi*G4UniformRand();       << 
247                                                   189 
248   fLocalDirection.set(sint*std::cos(phi), sint << 190   theta = Generate2BN(initial_energy, k);
249   fLocalDirection.rotateUz(dp->GetMomentumDire << 
250                                                   191 
251   return fLocalDirection;                      << 192   return theta;
252 }                                                 193 }
253                                                << 194 //
254 //....oooOO0OOooo........oooOO0OOooo........oo << 
255                                                   195 
256 G4double G4Generator2BN::CalculateFkt(G4double    196 G4double G4Generator2BN::CalculateFkt(G4double k, G4double theta, G4double A, G4double c) const
257 {                                                 197 {
258   G4double Fkt_value = 0;                         198   G4double Fkt_value = 0;
259   Fkt_value = A*std::pow(k,-b)*theta/(1+c*thet    199   Fkt_value = A*std::pow(k,-b)*theta/(1+c*theta*theta);
260   return Fkt_value;                               200   return Fkt_value;
261 }                                                 201 }
262                                                   202 
263 //....oooOO0OOooo........oooOO0OOooo........oo << 
264                                                << 
265 G4double G4Generator2BN::Calculatedsdkdt(G4dou    203 G4double G4Generator2BN::Calculatedsdkdt(G4double kout, G4double theta, G4double Eel) const
266 {                                                 204 {
                                                   >> 205 
267   G4double dsdkdt_value = 0.;                     206   G4double dsdkdt_value = 0.;
268   G4double Z = 1;                                 207   G4double Z = 1;
269   // classic radius (in cm)                       208   // classic radius (in cm)
270   G4double r0 = 2.82E-13;                         209   G4double r0 = 2.82E-13;
271   //squared classic radius (in barn)              210   //squared classic radius (in barn)
272   G4double r02 = r0*r0*1.0E+24;                   211   G4double r02 = r0*r0*1.0E+24;
273                                                   212 
274   // Photon energy cannot be greater than elec    213   // Photon energy cannot be greater than electron kinetic energy
275   if(kout > (Eel-electron_mass_c2)){              214   if(kout > (Eel-electron_mass_c2)){
276     dsdkdt_value = 0;                             215     dsdkdt_value = 0;
277     return dsdkdt_value;                          216     return dsdkdt_value;
278   }                                               217   }
279                                                   218 
280   G4double E0 = Eel/electron_mass_c2;          << 219      G4double E0 = Eel/electron_mass_c2;
281   G4double k =  kout/electron_mass_c2;         << 220      G4double k =  kout/electron_mass_c2;
282   G4double E =  E0 - k;                        << 221      G4double E =  E0 - k;
283                                                << 222 
284   if(E <= 1*MeV ){                             << 223      if(E <= 1*MeV ){                                 // Kinematic limit at 1 MeV !!
285     dsdkdt_value = 0;                          << 224        dsdkdt_value = 0;
286     return dsdkdt_value;                       << 225        return dsdkdt_value;
287   }                                            << 226      }
288                                                << 227 
289   G4double p0 = std::sqrt(E0*E0-1);            << 228 
290   G4double p = std::sqrt(E*E-1);               << 229      G4double p0 = std::sqrt(E0*E0-1);
291   G4double LL = std::log((E*E0-1+p*p0)/(E*E0-1 << 230      G4double p = std::sqrt(E*E-1);
292   G4double delta0 = E0 - p0*std::cos(theta);   << 231      G4double L = std::log((E*E0-1+p*p0)/(E*E0-1-p*p0));
293   G4double epsilon = std::log((E+p)/(E-p));    << 232      G4double delta0 = E0 - p0*std::cos(theta);
294   G4double Z2 = Z*Z;                           << 233      G4double epsilon = std::log((E+p)/(E-p));
295   G4double sintheta2 = std::sin(theta)*std::si << 234      G4double Z2 = Z*Z;
296   G4double E02 = E0*E0;                        << 235      G4double sintheta2 = std::sin(theta)*std::sin(theta);
297   G4double E2 = E*E;                           << 236      G4double E02 = E0*E0;
298   G4double p02 = E0*E0-1;                      << 237      G4double E2 = E*E;
299   G4double k2 = k*k;                           << 238      G4double p02 = E0*E0-1;
300   G4double delta02 = delta0*delta0;            << 239      G4double k2 = k*k;
301   G4double delta04 =  delta02* delta02;        << 240      G4double delta02 = delta0*delta0;
302   G4double Q = std::sqrt(p02+k2-2*k*p0*std::co << 241      G4double delta04 =  delta02* delta02;
303   G4double Q2 = Q*Q;                           << 242      G4double Q = std::sqrt(p02+k2-2*k*p0*std::cos(theta));
304   G4double epsilonQ = std::log((Q+p)/(Q-p));   << 243      G4double Q2 = Q*Q;
305                                                << 244      G4double epsilonQ = std::log((Q+p)/(Q-p));
306                                                << 245 
307   dsdkdt_value = Z2 * (r02/(8*pi*137)) * (1/k) << 246 
308     ( (8 * (sintheta2*(2*E02+1))/(p02*delta04) << 247      dsdkdt_value = Z2 * (r02/(8*pi*137)) * (1/k) * (p/p0) *
309       ((2*(5*E02+2*E*E0+3))/(p02 * delta02)) - << 248        ( (8 * (sintheta2*(2*E02+1))/(p02*delta04)) -
310       ((2*(p02-k2))/((Q2*delta02))) +          << 249          ((2*(5*E02+2*E*E0+3))/(p02 * delta02)) -
311       ((4*E)/(p02*delta0)) +                   << 250          ((2*(p02-k2))/((Q2*delta02))) +
312       (LL/(p*p0))*(                            << 251          ((4*E)/(p02*delta0)) +
313        ((4*E0*sintheta2*(3*k-p02*E))/(p02*delt << 252          (L/(p*p0))*(
314        ((4*E02*(E02+E2))/(p02*delta02)) +      << 253                  ((4*E0*sintheta2*(3*k-p02*E))/(p02*delta04)) +
315        ((2-2*(7*E02-3*E*E0+E2))/(p02*delta02)) << 254                  ((4*E02*(E02+E2))/(p02*delta02)) +
316        (2*k*(E02+E*E0-1))/((p02*delta0))       << 255                  ((2-2*(7*E02-3*E*E0+E2))/(p02*delta02)) +
317        ) -                                     << 256                  (2*k*(E02+E*E0-1))/((p02*delta0))
318       ((4*epsilon)/(p*delta0)) +               << 257                  ) -
319       ((epsilonQ)/(p*Q))*                      << 258          ((4*epsilon)/(p*delta0)) +
320       (4/delta02-(6*k/delta0)-(2*k*(p02-k2))/( << 259          ((epsilonQ)/(p*Q))*
321       );                                       << 260          (4/delta02-(6*k/delta0)-(2*k*(p02-k2))/(Q2*delta0))
322                                                << 261          );
323   dsdkdt_value = dsdkdt_value*std::sin(theta); << 262 
324   return dsdkdt_value;                         << 
325 }                                              << 
326                                                   263 
327 //....oooOO0OOooo........oooOO0OOooo........oo << 264 
                                                   >> 265      dsdkdt_value = dsdkdt_value*std::sin(theta);
                                                   >> 266      return dsdkdt_value;
                                                   >> 267 }
328                                                   268 
329 void G4Generator2BN::ConstructMajorantSurface(    269 void G4Generator2BN::ConstructMajorantSurface()
330 {                                                 270 {
                                                   >> 271 
331   G4double Eel;                                   272   G4double Eel;
332   G4int vmax;                                     273   G4int vmax;
333   G4double Ek;                                    274   G4double Ek;
334   G4double k, theta, k0, theta0, thetamax;        275   G4double k, theta, k0, theta0, thetamax;
335   G4double ds, df, dsmax, dk, dt;                 276   G4double ds, df, dsmax, dk, dt;
336   G4double ratmin;                                277   G4double ratmin;
337   G4double ratio = 0;                             278   G4double ratio = 0;
338   G4double Vds, Vdf;                              279   G4double Vds, Vdf;
339   G4double A, c;                                  280   G4double A, c;
340                                                   281 
341   G4cout << "**** Constructing Majorant Surfac    282   G4cout << "**** Constructing Majorant Surface for 2BN Distribution ****" << G4endl;
342                                                   283 
343   if(kcut > kmin) kmin = kcut;                    284   if(kcut > kmin) kmin = kcut;
344                                                   285 
345   G4int i = 0;                                    286   G4int i = 0;
346   // Loop on energy index                         287   // Loop on energy index
347   for(G4int index = index_min; index < index_m    288   for(G4int index = index_min; index < index_max; index++){
348                                                   289 
349   G4double fraction = index/100.;                 290   G4double fraction = index/100.;
350   Ek = std::pow(10.,fraction);                    291   Ek = std::pow(10.,fraction);
351   Eel = Ek + electron_mass_c2;                    292   Eel = Ek + electron_mass_c2;
352                                                   293 
353   // find x-section maximum at k=kmin             294   // find x-section maximum at k=kmin
354   dsmax = 0.;                                     295   dsmax = 0.;
355   thetamax = 0.;                                  296   thetamax = 0.;
356                                                   297 
357   for(theta = 0.; theta < pi; theta = theta +     298   for(theta = 0.; theta < pi; theta = theta + dtheta){
358                                                   299 
359     ds = Calculatedsdkdt(kmin, theta, Eel);       300     ds = Calculatedsdkdt(kmin, theta, Eel);
360                                                   301 
361     if(ds > dsmax){                               302     if(ds > dsmax){
362       dsmax = ds;                                 303       dsmax = ds;
363       thetamax = theta;                           304       thetamax = theta;
364     }                                             305     }
365   }                                               306   }
366                                                   307 
367   // Compute surface paremeters at kmin           308   // Compute surface paremeters at kmin
368   if(Ek < kmin || thetamax == 0){                 309   if(Ek < kmin || thetamax == 0){
369     c = 0;                                        310     c = 0;
370     A = 0;                                        311     A = 0;
371   }else{                                          312   }else{
372     c = 1/(thetamax*thetamax);                    313     c = 1/(thetamax*thetamax);
373     A = 2*std::sqrt(c)*dsmax/(std::pow(kmin,-b    314     A = 2*std::sqrt(c)*dsmax/(std::pow(kmin,-b));
374   }                                               315   }
375                                                   316 
376   // look for correction factor to normalizati << 317   // look for correction factor to normalization at kmin 
377   ratmin = 1.;                                    318   ratmin = 1.;
378                                                   319 
379   // Volume under surfaces                        320   // Volume under surfaces
380   Vds = 0.;                                       321   Vds = 0.;
381   Vdf = 0.;                                       322   Vdf = 0.;
382   k0 = 0.;                                        323   k0 = 0.;
383   theta0 = 0.;                                    324   theta0 = 0.;
384                                                   325 
385   vmax = G4int(100.*std::log10(Ek/kmin));         326   vmax = G4int(100.*std::log10(Ek/kmin));
386                                                   327 
387   for(G4int v = 0; v < vmax; v++){                328   for(G4int v = 0; v < vmax; v++){
388     G4double fractionLocal = (v/100.);         << 329     G4double fraction = (v/100.);
389     k = std::pow(10.,fractionLocal)*kmin;      << 330     k = std::pow(10.,fraction)*kmin;
390                                                   331 
391     for(theta = 0.; theta < pi; theta = theta     332     for(theta = 0.; theta < pi; theta = theta + dtheta){
392       dk = k - k0;                                333       dk = k - k0;
393       dt = theta - theta0;                        334       dt = theta - theta0;
394       ds = Calculatedsdkdt(k,theta, Eel);         335       ds = Calculatedsdkdt(k,theta, Eel);
395       Vds = Vds + ds*dk*dt;                       336       Vds = Vds + ds*dk*dt;
396       df = CalculateFkt(k,theta, A, c);           337       df = CalculateFkt(k,theta, A, c);
397       Vdf = Vdf + df*dk*dt;                       338       Vdf = Vdf + df*dk*dt;
398                                                   339 
399       if(ds != 0.){                               340       if(ds != 0.){
400   if(df != 0.) ratio = df/ds;                     341   if(df != 0.) ratio = df/ds;
401       }                                           342       }
402                                                   343 
403       if(ratio < ratmin && ratio != 0.){          344       if(ratio < ratmin && ratio != 0.){
404   ratmin = ratio;                                 345   ratmin = ratio;
405       }                                           346       }
406     }                                             347     }
407   }                                               348   }
408                                                   349 
                                                   >> 350 
409   // sampling efficiency                          351   // sampling efficiency
410   Atab[i] = A/ratmin * 1.04;                      352   Atab[i] = A/ratmin * 1.04;
411   ctab[i] = c;                                    353   ctab[i] = c;
412                                                   354 
413 //  G4cout << Ek << " " << i << " " << index <    355 //  G4cout << Ek << " " << i << " " << index << " " << Atab[i] << " " << ctab[i] << " " << G4endl;
414   i++;                                            356   i++;
415   }                                               357   }
                                                   >> 358 
416 }                                                 359 }
417                                                   360 
418 //....oooOO0OOooo........oooOO0OOooo........oo << 361 G4double G4Generator2BN::Generate2BN(G4double Ek, G4double k) const 
                                                   >> 362 {
                                                   >> 363 
                                                   >> 364   G4double Eel;
                                                   >> 365   G4double kmin2; 
                                                   >> 366   G4double kmax, t;
                                                   >> 367   G4double cte2;
                                                   >> 368   G4double y, u;
                                                   >> 369   G4double fk, ft;
                                                   >> 370   G4double ds;
                                                   >> 371   G4double A2;
                                                   >> 372   G4double A, c;
                                                   >> 373 
                                                   >> 374   G4int trials = 0;
                                                   >> 375   G4int index;
                                                   >> 376 
                                                   >> 377   // find table index
                                                   >> 378   index = G4int(std::log10(Ek)*100) - index_min;
                                                   >> 379   Eel = Ek + electron_mass_c2;
                                                   >> 380 
                                                   >> 381   kmax = Ek;
                                                   >> 382   kmin2 = kcut;
                                                   >> 383 
                                                   >> 384   c = ctab[index];
                                                   >> 385   A = Atab[index];
                                                   >> 386   if(index < index_max){
                                                   >> 387     A2 = Atab[index+1];
                                                   >> 388     if(A2 > A) A = A2;
                                                   >> 389   }
                                                   >> 390 
                                                   >> 391   do{
                                                   >> 392   // generate k accordimg to std::pow(k,-b)
                                                   >> 393   trials++;
                                                   >> 394 
                                                   >> 395   // normalization constant 
                                                   >> 396 //  cte1 = (1-b)/(std::pow(kmax,(1-b))-std::pow(kmin2,(1-b)));
                                                   >> 397 //  y = G4UniformRand();
                                                   >> 398 //  k = std::pow(((1-b)/cte1*y+std::pow(kmin2,(1-b))),(1/(1-b)));
                                                   >> 399 
                                                   >> 400   // generate theta accordimg to theta/(1+c*std::pow(theta,2)
                                                   >> 401   // Normalization constant
                                                   >> 402   cte2 = 2*c/std::log(1+c*pi2);
                                                   >> 403 
                                                   >> 404   y = G4UniformRand();
                                                   >> 405   t = std::sqrt((std::exp(2*c*y/cte2)-1)/c);
                                                   >> 406   u = G4UniformRand();
                                                   >> 407 
                                                   >> 408   // point acceptance algorithm
                                                   >> 409   fk = std::pow(k,-b);
                                                   >> 410   ft = t/(1+c*t*t);
                                                   >> 411   ds = Calculatedsdkdt(k,t,Eel);
                                                   >> 412 
                                                   >> 413   // violation point
                                                   >> 414   if(ds > (A*fk*ft)) G4cout << "WARNING IN G4Generator2BN !!!" << Ek << " " <<  (ds-A*fk*ft)/ds << G4endl;
                                                   >> 415 
                                                   >> 416   }while(u*A*fk*ft > ds);
                                                   >> 417 
                                                   >> 418   return t;
                                                   >> 419 
                                                   >> 420 }
419                                                   421 
420 void G4Generator2BN::PrintGeneratorInformation    422 void G4Generator2BN::PrintGeneratorInformation() const
421 {                                                 423 {
422   G4cout << "\n" << G4endl;                       424   G4cout << "\n" << G4endl;
423   G4cout << "Bremsstrahlung Angular Generator     425   G4cout << "Bremsstrahlung Angular Generator is 2BN Generator from 2BN Koch & Motz distribution (Rev Mod Phys 31(4), 920 (1959))" << G4endl;
424   G4cout << "\n" << G4endl;                       426   G4cout << "\n" << G4endl;
425 }                                              << 427 } 
                                                   >> 428 
426                                                   429