21 #include "CLHEP/Random/RandLandau.h" 
   30 RandLandau::~RandLandau() {
 
   33 void RandLandau::shootArray( 
const int size, 
double* vect )
 
   36   for( 
double* v = vect; v != vect + size; ++v )
 
   40 void RandLandau::shootArray( HepRandomEngine* anEngine,
 
   41                             const int size, 
double* vect )
 
   43   for( 
double* v = vect; v != vect + size; ++v )
 
   47 void RandLandau::fireArray( 
const int size, 
double* vect)
 
   49   for( 
double* v = vect; v != vect + size; ++v )
 
   77 0.0f,       0.0f,       0.0f,       0.0f,       0.0f,        
 
   78 -2.244733f, -2.204365f, -2.168163f, -2.135219f, -2.104898f,  
 
   79 -2.076740f, -2.050397f, -2.025605f, -2.002150f, -1.979866f,
 
   80 -1.958612f, -1.938275f, -1.918760f, -1.899984f, -1.881879f,  
 
   81 -1.864385f, -1.847451f, -1.831030f, -1.815083f, -1.799574f,
 
   82 -1.784473f, -1.769751f, -1.755383f, -1.741346f, -1.727620f,  
 
   83 -1.714187f, -1.701029f, -1.688130f, -1.675477f, -1.663057f, 
 
   84 -1.650858f, -1.638868f, -1.627078f, -1.615477f, -1.604058f,  
 
   85 -1.592811f, -1.581729f, -1.570806f, -1.560034f, -1.549407f,
 
   86 -1.538919f, -1.528565f, -1.518339f, -1.508237f, -1.498254f,  
 
   87 -1.488386f, -1.478628f, -1.468976f, -1.459428f, -1.449979f,
 
   88 -1.440626f, -1.431365f, -1.422195f, -1.413111f, -1.404112f,  
 
   89 -1.395194f, -1.386356f, -1.377594f, -1.368906f, -1.360291f,
 
   90 -1.351746f, -1.343269f, -1.334859f, -1.326512f, -1.318229f,  
 
   91 -1.310006f, -1.301843f, -1.293737f, -1.285688f, -1.277693f,
 
   92 -1.269752f, -1.261863f, -1.254024f, -1.246235f, -1.238494f,  
 
   93 -1.230800f, -1.223153f, -1.215550f, -1.207990f, -1.200474f,
 
   94 -1.192999f, -1.185566f, -1.178172f, -1.170817f, -1.163500f,  
 
   95 -1.156220f, -1.148977f, -1.141770f, -1.134598f, -1.127459f,
 
   96 -1.120354f, -1.113282f, -1.106242f, -1.099233f, -1.092255f,  
 
   98 -1.085306f, -1.078388f, -1.071498f, -1.064636f, -1.057802f,
 
   99 -1.050996f, -1.044215f, -1.037461f, -1.030733f, -1.024029f,
 
  100 -1.017350f, -1.010695f, -1.004064f, -.997456f,  -.990871f, 
 
  101 -.984308f, -.977767f, -.971247f, -.964749f, -.958271f, 
 
  102 -.951813f, -.945375f, -.938957f, -.932558f, -.926178f, 
 
  103 -.919816f, -.913472f, -.907146f, -.900838f, -.894547f,
 
  104 -.888272f, -.882014f, -.875773f, -.869547f, -.863337f, 
 
  105 -.857142f, -.850963f, -.844798f, -.838648f, -.832512f, 
 
  106 -.826390f, -.820282f, -.814187f, -.808106f, -.802038f, 
 
  107 -.795982f, -.789940f, -.783909f, -.777891f, -.771884f,  
 
  108 -.765889f, -.759906f, -.753934f, -.747973f, -.742023f, 
 
  109 -.736084f, -.730155f, -.724237f, -.718328f, -.712429f, 
 
  110 -.706541f, -.700661f, -.694791f, -.688931f, -.683079f, 
 
  111 -.677236f, -.671402f, -.665576f, -.659759f, -.653950f, 
 
  112 -.648149f, -.642356f, -.636570f, -.630793f, -.625022f, 
 
  113 -.619259f, -.613503f, -.607754f, -.602012f, -.596276f, 
 
  114 -.590548f, -.584825f, -.579109f, -.573399f, -.567695f, 
 
  115 -.561997f, -.556305f, -.550618f, -.544937f, -.539262f,
 
  116 -.533592f, -.527926f, -.522266f, -.516611f, -.510961f, 
 
  117 -.505315f, -.499674f, -.494037f, -.488405f, -.482777f,  
 
  119 -.477153f, -.471533f, -.465917f, -.460305f, -.454697f, 
 
  120 -.449092f, -.443491f, -.437893f, -.432299f, -.426707f, 
 
  121 -.421119f, -.415534f, -.409951f, -.404372f, -.398795f, 
 
  122 -.393221f, -.387649f, -.382080f, -.376513f, -.370949f, 
 
  123 -.365387f, -.359826f, -.354268f, -.348712f, -.343157f, 
 
  124 -.337604f, -.332053f, -.326503f, -.320955f, -.315408f,
 
  125 -.309863f, -.304318f, -.298775f, -.293233f, -.287692f,
 
  126 -.282152f, -.276613f, -.271074f, -.265536f, -.259999f, 
 
  127 -.254462f, -.248926f, -.243389f, -.237854f, -.232318f, 
 
  128 -.226783f, -.221247f, -.215712f, -.210176f, -.204641f,  
 
  129 -.199105f, -.193568f, -.188032f, -.182495f, -.176957f, 
 
  130 -.171419f, -.165880f, -.160341f, -.154800f, -.149259f,
 
  131 -.143717f, -.138173f, -.132629f, -.127083f, -.121537f, 
 
  132 -.115989f, -.110439f, -.104889f, -.099336f, -.093782f, 
 
  133 -.088227f, -.082670f, -.077111f, -.071550f, -.065987f, 
 
  134 -.060423f, -.054856f, -.049288f, -.043717f, -.038144f, 
 
  135 -.032569f, -.026991f, -.021411f, -.015828f, -.010243f, 
 
  136 -.004656f,  .000934f,  .006527f,  .012123f,  .017722f,
 
  137 .023323f, .028928f,  .034535f,  .040146f,  .045759f, 
 
  138 .051376f, .056997f,  .062620f,  .068247f,  .073877f,    
 
  140 .079511f,  .085149f,  .090790f,  .096435f,  .102083f,  
 
  141 .107736f,  .113392f,  .119052f,  .124716f,  .130385f,  
 
  142 .136057f,  .141734f,  .147414f,  .153100f,  .158789f,  
 
  143 .164483f,  .170181f,  .175884f,  .181592f,  .187304f,  
 
  144 .193021f,  .198743f,  .204469f,  .210201f,  .215937f,  
 
  145 .221678f,  .227425f,  .233177f,  .238933f,  .244696f,  
 
  146 .250463f,  .256236f,  .262014f,  .267798f,  .273587f,  
 
  147 .279382f,  .285183f,  .290989f,  .296801f,  .302619f,  
 
  148 .308443f,  .314273f,  .320109f,  .325951f,  .331799f,  
 
  149 .337654f,  .343515f,  .349382f,  .355255f,  .361135f,   
 
  150 .367022f,  .372915f,  .378815f,  .384721f,  .390634f,  
 
  151 .396554f,  .402481f,  .408415f,  .414356f,  .420304f,
 
  152 .426260f,  .432222f,  .438192f,  .444169f,  .450153f,  
 
  153 .456145f,  .462144f,  .468151f,  .474166f,  .480188f,  
 
  154 .486218f,  .492256f,  .498302f,  .504356f,  .510418f,  
 
  155 .516488f,  .522566f,  .528653f,  .534747f,  .540850f,  
 
  156 .546962f,  .553082f,  .559210f,  .565347f,  .571493f,  
 
  157 .577648f,  .583811f,  .589983f,  .596164f,  .602355f,
 
  158 .608554f,  .614762f,  .620980f,  .627207f,  .633444f,  
 
  159 .639689f,  .645945f,  .652210f,  .658484f,  .664768f,   
 
  161 .671062f,  .677366f,  .683680f,  .690004f,  .696338f,  
 
  162 .702682f,  .709036f,  .715400f,  .721775f,  .728160f,  
 
  163 .734556f,  .740963f,  .747379f,  .753807f,  .760246f,  
 
  164 .766695f,  .773155f,  .779627f,  .786109f,  .792603f,  
 
  165 .799107f,  .805624f,  .812151f,  .818690f,  .825241f,  
 
  166 .831803f,  .838377f,  .844962f,  .851560f,  .858170f,
 
  167 .864791f,  .871425f,  .878071f,  .884729f,  .891399f,  
 
  168 .898082f,  .904778f,  .911486f,  .918206f,  .924940f,  
 
  169 .931686f,  .938446f,  .945218f,  .952003f,  .958802f,  
 
  170 .965614f,  .972439f,  .979278f,  .986130f,  .992996f,   
 
  171 .999875f,  1.006769f, 1.013676f, 1.020597f, 1.027533f, 
 
  172 1.034482f, 1.041446f, 1.048424f, 1.055417f, 1.062424f,
 
  173 1.069446f, 1.076482f, 1.083534f, 1.090600f, 1.097681f, 
 
  174 1.104778f, 1.111889f, 1.119016f, 1.126159f, 1.133316f, 
 
  175 1.140490f, 1.147679f, 1.154884f, 1.162105f, 1.169342f, 
 
  176 1.176595f, 1.183864f, 1.191149f, 1.198451f, 1.205770f, 
 
  177 1.213105f, 1.220457f, 1.227826f, 1.235211f, 1.242614f, 
 
  178 1.250034f, 1.257471f, 1.264926f, 1.272398f, 1.279888f,
 
  179 1.287395f, 1.294921f, 1.302464f, 1.310026f, 1.317605f, 
 
  180 1.325203f, 1.332819f, 1.340454f, 1.348108f, 1.355780f,  
 
  182 1.363472f, 1.371182f, 1.378912f, 1.386660f, 1.394429f, 
 
  183 1.402216f, 1.410024f, 1.417851f, 1.425698f, 1.433565f, 
 
  184 1.441453f, 1.449360f, 1.457288f, 1.465237f, 1.473206f, 
 
  185 1.481196f, 1.489208f, 1.497240f, 1.505293f, 1.513368f, 
 
  186 1.521465f, 1.529583f, 1.537723f, 1.545885f, 1.554068f, 
 
  187 1.562275f, 1.570503f, 1.578754f, 1.587028f, 1.595325f,
 
  188 1.603644f, 1.611987f, 1.620353f, 1.628743f, 1.637156f, 
 
  189 1.645593f, 1.654053f, 1.662538f, 1.671047f, 1.679581f, 
 
  190 1.688139f, 1.696721f, 1.705329f, 1.713961f, 1.722619f, 
 
  191 1.731303f, 1.740011f, 1.748746f, 1.757506f, 1.766293f,  
 
  192 1.775106f, 1.783945f, 1.792810f, 1.801703f, 1.810623f, 
 
  193 1.819569f, 1.828543f, 1.837545f, 1.846574f, 1.855631f,
 
  194 1.864717f, 1.873830f, 1.882972f, 1.892143f, 1.901343f, 
 
  195 1.910572f, 1.919830f, 1.929117f, 1.938434f, 1.947781f, 
 
  196 1.957158f, 1.966566f, 1.976004f, 1.985473f, 1.994972f, 
 
  197 2.004503f, 2.014065f, 2.023659f, 2.033285f, 2.042943f, 
 
  198 2.052633f, 2.062355f, 2.072110f, 2.081899f, 2.091720f, 
 
  199 2.101575f, 2.111464f, 2.121386f, 2.131343f, 2.141334f,
 
  200 2.151360f, 2.161421f, 2.171517f, 2.181648f, 2.191815f, 
 
  201 2.202018f, 2.212257f, 2.222533f, 2.232845f, 2.243195f,  
 
  203 2.253582f, 2.264006f, 2.274468f, 2.284968f, 2.295507f, 
 
  204 2.306084f, 2.316701f, 2.327356f, 2.338051f, 2.348786f, 
 
  205 2.359562f, 2.370377f, 2.381234f, 2.392131f, 2.403070f, 
 
  206 2.414051f, 2.425073f, 2.436138f, 2.447246f, 2.458397f, 
 
  207 2.469591f, 2.480828f, 2.492110f, 2.503436f, 2.514807f, 
 
  208 2.526222f, 2.537684f, 2.549190f, 2.560743f, 2.572343f,
 
  209 2.583989f, 2.595682f, 2.607423f, 2.619212f, 2.631050f, 
 
  210 2.642936f, 2.654871f, 2.666855f, 2.678890f, 2.690975f, 
 
  211 2.703110f, 2.715297f, 2.727535f, 2.739825f, 2.752168f, 
 
  212 2.764563f, 2.777012f, 2.789514f, 2.802070f, 2.814681f,  
 
  213 2.827347f, 2.840069f, 2.852846f, 2.865680f, 2.878570f, 
 
  214 2.891518f, 2.904524f, 2.917588f, 2.930712f, 2.943894f,
 
  215 2.957136f, 2.970439f, 2.983802f, 2.997227f, 3.010714f,
 
  216 3.024263f, 3.037875f, 3.051551f, 3.065290f, 3.079095f, 
 
  217 3.092965f, 3.106900f, 3.120902f, 3.134971f, 3.149107f, 
 
  218 3.163312f, 3.177585f, 3.191928f, 3.206340f, 3.220824f, 
 
  219 3.235378f, 3.250005f, 3.264704f, 3.279477f, 3.294323f, 
 
  220 3.309244f, 3.324240f, 3.339312f, 3.354461f, 3.369687f,
 
  221 3.384992f, 3.400375f, 3.415838f, 3.431381f, 3.447005f, 
 
  222 3.462711f, 3.478500f, 3.494372f, 3.510328f, 3.526370f,  
 
  224 3.542497f, 3.558711f, 3.575012f, 3.591402f, 3.607881f, 
 
  225 3.624450f, 3.641111f, 3.657863f, 3.674708f, 3.691646f, 
 
  226 3.708680f, 3.725809f, 3.743034f, 3.760357f, 3.777779f, 
 
  227 3.795300f, 3.812921f, 3.830645f, 3.848470f, 3.866400f, 
 
  228 3.884434f, 3.902574f, 3.920821f, 3.939176f, 3.957640f, 
 
  229 3.976215f, 3.994901f, 4.013699f, 4.032612f, 4.051639f,
 
  230 4.070783f, 4.090045f, 4.109425f, 4.128925f, 4.148547f,  
 
  231 4.168292f, 4.188160f, 4.208154f, 4.228275f, 4.248524f, 
 
  232 4.268903f, 4.289413f, 4.310056f, 4.330832f, 4.351745f, 
 
  233 4.372794f, 4.393982f, 4.415310f, 4.436781f, 4.458395f, 
 
  234 4.480154f, 4.502060f, 4.524114f, 4.546319f, 4.568676f,  
 
  235 4.591187f, 4.613854f, 4.636678f, 4.659662f, 4.682807f,
 
  236 4.706116f, 4.729590f, 4.753231f, 4.777041f, 4.801024f, 
 
  237 4.825179f, 4.849511f, 4.874020f, 4.898710f, 4.923582f, 
 
  238 4.948639f, 4.973883f, 4.999316f, 5.024942f, 5.050761f, 
 
  239 5.076778f, 5.102993f, 5.129411f, 5.156034f, 5.182864f, 
 
  240 5.209903f, 5.237156f, 5.264625f, 5.292312f, 5.320220f, 
 
  241 5.348354f, 5.376714f, 5.405306f, 5.434131f, 5.463193f,
 
  242 5.492496f, 5.522042f, 5.551836f, 5.581880f, 5.612178f, 
 
  243 5.642734f, 5.673552f, 5.704634f, 5.735986f, 5.767610f,  
 
  245 5.799512f, 5.831694f, 5.864161f, 5.896918f, 5.929968f, 
 
  246 5.963316f, 5.996967f, 6.030925f, 6.065194f, 6.099780f, 
 
  247 6.134687f, 6.169921f, 6.205486f, 6.241387f, 6.277630f, 
 
  248 6.314220f, 6.351163f, 6.388465f, 6.426130f, 6.464166f, 
 
  249 6.502578f, 6.541371f, 6.580553f, 6.620130f, 6.660109f, 
 
  250 6.700495f, 6.741297f, 6.782520f, 6.824173f, 6.866262f,
 
  251 6.908795f, 6.951780f, 6.995225f, 7.039137f, 7.083525f, 
 
  252 7.128398f, 7.173764f, 7.219632f, 7.266011f, 7.312910f, 
 
  253 7.360339f, 7.408308f, 7.456827f, 7.505905f, 7.555554f, 
 
  254 7.605785f, 7.656608f, 7.708035f, 7.760077f, 7.812747f,  
 
  255 7.866057f, 7.920019f, 7.974647f, 8.029953f, 8.085952f, 
 
  256 8.142657f, 8.200083f, 8.258245f, 8.317158f, 8.376837f,
 
  257 8.437300f, 8.498562f, 8.560641f, 8.623554f, 8.687319f, 
 
  258 8.751955f, 8.817481f, 8.883916f, 8.951282f, 9.019600f, 
 
  259 9.088889f, 9.159174f, 9.230477f, 9.302822f, 9.376233f, 
 
  260 9.450735f, 9.526355f, 9.603118f, 9.681054f, 9.760191f, 
 
  261  9.840558f,  9.922186f, 10.005107f, 10.089353f, 10.174959f,
 
  262 10.261958f, 10.350389f, 10.440287f, 10.531693f, 10.624646f,
 
  263 10.719188f, 10.815362f, 10.913214f, 11.012789f, 11.114137f,
 
  264 11.217307f, 11.322352f, 11.429325f, 11.538283f, 11.649285f,     
 
  266 11.762390f, 11.877664f, 11.995170f, 12.114979f, 12.237161f, 
 
  267 12.361791f, 12.488946f, 12.618708f, 12.751161f, 12.886394f, 
 
  268 13.024498f, 13.165570f, 13.309711f, 13.457026f, 13.607625f, 
 
  269 13.761625f, 13.919145f, 14.080314f, 14.245263f, 14.414134f, 
 
  270 14.587072f, 14.764233f, 14.945778f, 15.131877f, 15.322712f, 
 
  271 15.518470f, 15.719353f, 15.925570f, 16.137345f, 16.354912f, 
 
  272 16.578520f, 16.808433f, 17.044929f, 17.288305f, 17.538873f, 
 
  273 17.796967f, 18.062943f, 18.337176f, 18.620068f, 18.912049f, 
 
  274 19.213574f, 19.525133f, 19.847249f, 20.180480f, 20.525429f, 
 
  275 20.882738f, 21.253102f, 21.637266f, 22.036036f, 22.450278f,     
 
  276 22.880933f, 23.329017f, 23.795634f, 24.281981f, 24.789364f, 
 
  277 25.319207f, 25.873062f, 26.452634f, 27.059789f, 27.696581f,     
 
  278 28.365274f, 29.068370f, 29.808638f, 30.589157f, 31.413354f, 
 
  279 32.285060f, 33.208568f, 34.188705f, 35.230920f, 36.341388f,     
 
  280 37.527131f, 38.796172f, 40.157721f, 41.622399f, 43.202525f, 
 
  281 44.912465f, 46.769077f, 48.792279f, 51.005773f, 53.437996f,     
 
  282 56.123356f, 59.103894f,                                         
 
  286 double RandLandau::transform (
double r) {
 
  290   double du = u - index;
 
  309   if ( index >= 70 && index <= 800 ) {          
 
  311     double f0 = inverseLandau [index];
 
  312     double f1 = inverseLandau [index+1];
 
  313     return f0 + du * (f1 - f0);
 
  315   } 
else if ( index >= 7 && index <= 980 ) {    
 
  317     double f_1 = inverseLandau [index-1];
 
  318     double f0  = inverseLandau [index];
 
  319     double f1  = inverseLandau [index+1];
 
  320     double f2  = inverseLandau [index+2];
 
  322     return f0 + du * (f1 - f0 - .25*(1-du)* (f2 -f1 - f0 + f_1) );
 
  324   } 
else if ( index < 7 ) {                     
 
  326     const double n0 =  0.99858950;
 
  327     const double n1 = 34.5213058;       
const double d1 = 34.1760202;
 
  328     const double n2 = 17.0854528;       
const double d2 =  4.01244582;
 
  330     double logr = std::log(r);
 
  334     double pade = (n0 + n1*x + n2*x2) / (1.0 + d1*x + d2*x2);
 
  336     return ( - std::log ( -.91893853 - logr ) -1 ) * pade;
 
  338   } 
else if ( index <= 999 ) {                  
 
  340     const double n0 =    1.00060006;
 
  341     const double n1 =  263.991156;      
const double d1 =  257.368075;
 
  342     const double n2 = 4373.20068;       
const double d2 = 3414.48018;
 
  347     return (n0 + n1*x + n2*x2) / (x * (1.0 + d1*x + d2*x2));
 
  351     const double n0 =      1.00001538;
 
  352     const double n1 =   6075.14119;     
const double d1 =   6065.11919;
 
  353     const double n2 = 734266.409;       
const double d2 = 694021.044;
 
  358     return (n0 + n1*x + n2*x2) / (x * (1.0 + d1*x + d2*x2));
 
  364 std::ostream & RandLandau::put ( std::ostream & os )
 const {
 
  365   int pr=os.precision(20);
 
  366   os << 
" " << 
name() << 
"\n";
 
  371 std::istream & RandLandau::get ( std::istream & is ) {
 
  374   if (inName != 
name()) {
 
  375     is.clear(std::ios::badbit | is.rdstate());
 
  376     std::cerr << 
"Mismatch when expecting to read state of a " 
  377               << 
name() << 
" distribution\n" 
  378               << 
"Name found was " << inName
 
  379               << 
"\nistream is left in the badbit state\n";
 
ThreeVector shoot(const G4int Ap, const G4int Af)
 
static int engine(pchar, pchar, double &, pchar &, const dic_type &)
 
const char * name(G4int ptype)
 
static const float TABLE_MULTIPLIER
 
static const float inverseLandau[TABLE_END+1]
 
static const float TABLE_INTERVAL
 
static const int TABLE_END