ROOT logo
// @(#)root/mathcore:$Id$
// Author: Rene Brun from CLHEP & CERNLIB  04/05/2006

//////////////////////////////////////////////////////////////////////////
//
// TRandom1
//
// The Ranlux Random number generator class
//
// The algorithm for this random engine has been taken from the original
// implementation in FORTRAN by Fred James as part of CLHEP.
//
// The initialisation is carried out using a Multiplicative Congruential
// generator using formula constants of L'Ecuyer as described in "F.James,
// Comp. Phys. Comm. 60 (1990) 329-344".
//
//////////////////////////////////////////////////////////////////////////

#include "TRandom1.h"
#include "TRandom3.h"
#include "TMath.h"
#include <stdlib.h>

// Number of instances with automatic seed selection
int TRandom1::fgNumEngines = 0;

// Maximum index into the seed table
int TRandom1::fgMaxIndex = 215;
#ifndef __CINT__
const UInt_t fgSeedTable[215][2] = {
                             {           9876, 54321    },
                             {     1299961164, 253987020 },
                             {      669708517, 2079157264 },
                             {      190904760, 417696270 },
                             {     1289741558, 1376336092 },
                             {     1803730167, 324952955   },
                             {      489854550, 582847132   },
                             {     1348037628, 1661577989   },
                             {      350557787, 1155446919   },
                             {      591502945, 634133404   },
                             {     1901084678, 862916278   },
                             {     1988640932, 1785523494   },
                             {     1873836227, 508007031   },
                             {     1146416592, 967585720   },
                             {     1837193353, 1522927634   },
                             {       38219936, 921609208   },
                             {      349152748, 112892610   },
                             {      744459040, 1735807920   },
                             {     1983990104, 728277902   },
                             {      309164507, 2126677523   },
                             {      362993787, 1897782044   },
                             {      556776976, 462072869   },
                             {     1584900822, 2019394912   },
                             {     1249892722, 791083656   },
                             {     1686600998, 1983731097   },
                             {     1127381380, 198976625   },
                             {     1999420861, 1810452455   },
                             {     1972906041, 664182577   },
                             {       84636481, 1291886301   },
                             {     1186362995, 954388413   },
                             {     2141621785, 61738584      },
                             {     1969581251, 1557880415   },
                             {     1150606439, 136325185   },
                             {       95187861, 1592224108   },
                             {      940517655, 1629971798   },
                             {      215350428, 922659102   },
                             {      786161212, 1121345074   },
                             {     1450830056, 1922787776   },
                             {     1696578057, 2025150487   },
                             {     1803414346, 1851324780   },
                             {     1017898585, 1452594263   },
                             {     1184497978, 82122239      },
                             {      633338765, 1829684974   },
                             {      430889421, 230039326   },
                             {      492544653, 76320266      },
                             {      389386975, 1314148944   },
                             {     1720322786, 709120323   },
                             {     1868768216, 1992898523   },
                             {      443210610, 811117710   },
                             {     1191938868, 1548484733   },
                             {      616890172, 159787986   },
                             {      935835339, 1231440405   },
                             {     1058009367, 1527613300   },
                             {     1463148129, 1970575097   },
                             {     1795336935, 434768675   },
                             {      274019517, 605098487   },
                             {      483689317, 217146977   },
                             {     2070804364, 340596558   },
                             {      930226308, 1602100969   },
                             {      989324440, 801809442   },
                             {      410606853, 1893139948   },
                             {     1583588576, 1219225407   },
                             {     2102034391, 1394921405   },
                             {     2005037790, 2031006861   },
                             {     1244218766, 923231061   },
                             {       49312790, 775496649   },
                             {      721012176, 321339902   },
                             {     1719909107, 1865748178   },
                             {     1156177430, 1257110891   },
                             {      307561322, 1918244397   },
                             {      906041433, 360476981   },
                             {     1591375755, 268492659   },
                             {      461522398, 227343256   },
                             {     2145930725, 2020665454   },
                             {     1938419274, 1331283701   },
                             {      174405412, 524140103   },
                             {      494343653,  18063908   },
                             {     1025534808, 181709577   },
                             {     2048959776, 1913665637   },
                             {      950636517, 794796256   },
                             {     1828843197, 1335757744   },
                             {      211109723, 983900607   },
                             {      825474095, 1046009991   },
                             {      374915657, 381856628   },
                             {     1241296328, 698149463   },
                             {     1260624655, 1024538273   },
                             {      900676210, 1628865823   },
                             {      697951025, 500570753   },
                             {     1007920268, 1708398558   },
                             {      264596520, 624727803   },
                             {     1977924811, 674673241   },
                             {     1440257718, 271184151   },
                             {     1928778847, 993535203   },
                             {     1307807366, 1801502463   },
                             {     1498732610, 300876954   },
                             {     1617712402, 1574250679   },
                             {     1261800762, 1556667280   },
                             {      949929273, 560721070   },
                             {     1766170474, 1953522912   },
                             {     1849939248, 19435166      },
                             {      887262858, 1219627824   },
                             {      483086133, 603728993   },
                             {     1330541052, 1582596025   },
                             {     1850591475, 723593133   },
                             {     1431775678, 1558439000   },
                             {      922493739, 1356554404   },
                             {     1058517206, 948567762   },
                             {      709067283, 1350890215   },
                             {     1044787723, 2144304941   },
                             {      999707003, 513837520   },
                             {     2140038663, 1850568788   },
                             {     1803100150, 127574047   },
                             {      867445693, 1149173981   },
                             {      408583729, 914837991   },
                             {     1166715497, 602315845   },
                             {      430738528, 1743308384   },
                             {     1388022681, 1760110496   },
                             {     1664028066, 654300326   },
                             {     1767741172, 1338181197   },
                             {     1625723550, 1742482745   },
                             {      464486085, 1507852127   },
                             {      754082421, 1187454014   },
                             {     1315342834, 425995190   },
                             {      960416608, 2004255418   },
                             {     1262630671, 671761697   },
                             {       59809238, 103525918   },
                             {     1205644919, 2107823293   },
                             {     1615183160, 1152411412   },
                             {     1024474681, 2118672937   },
                             {     1703877649, 1235091369   },
                             {     1821417852, 1098463802   },
                             {     1738806466, 1529062843   },
                             {      620780646, 1654833544   },
                             {     1070174101, 795158254   },
                             {      658537995, 1693620426   },
                             {     2055317555, 508053916   },
                             {     1647371686, 1282395762   },
                             {       29067379, 409683067   },
                             {     1763495989, 1917939635   },
                             {     1602690753, 810926582   },
                             {      885787576, 513818500   },
                             {     1853512561, 1195205756   },
                             {     1798585498, 1970460256   },
                             {     1819261032, 1306536501   },
                             {     1133245275, 37901      },
                             {      689459799, 1334389069   },
                             {     1730609912, 1854586207   },
                             {     1556832175, 1228729041   },
                             {      251375753, 683687209   },
                             {     2083946182, 1763106152   },
                             {     2142981854, 1365385561   },
                             {      763711891, 1735754548   },
                             {     1581256466, 173689858   },
                             {     2121337132, 1247108250   },
                             {     1004003636, 891894307   },
                             {      569816524, 358675254   },
                             {      626626425, 116062841   },
                             {      632086003, 861268491   },
                             {     1008211580, 779404957   },
                             {     1134217766, 1766838261   },
                             {     1423829292, 1706666192   },
                             {      942037869, 1549358884   },
                             {     1959429535, 480779114   },
                             {      778311037, 1940360875   },
                             {     1531372185, 2009078158   },
                             {      241935492, 1050047003   },
                             {      272453504, 1870883868   },
                             {      390441332, 1057903098   },
                             {     1230238834, 1548117688   },
                             {     1242956379, 1217296445   },
                             {      515648357, 1675011378   },
                             {      364477932, 355212934   },
                             {     2096008713, 1570161804   },
                             {     1409752526, 214033983   },
                             {     1288158292, 1760636178   },
                             {      407562666, 1265144848   },
                             {     1071056491, 1582316946   },
                             {     1014143949, 911406955   },
                             {      203080461, 809380052   },
                             {      125647866, 1705464126   },
                             {     2015685843, 599230667   },
                             {     1425476020, 668203729   },
                             {     1673735652, 567931803   },
                             {     1714199325, 181737617   },
                             {     1389137652, 678147926   },
                             {      288547803, 435433694   },
                             {      200159281, 654399753   },
                             {     1580828223, 1298308945   },
                             {     1832286107, 169991953   },
                             {      182557704, 1046541065   },
                             {     1688025575, 1248944426   },
                             {     1508287706, 1220577001   },
                             {       36721212, 1377275347   },
                             {     1968679856, 1675229747   },
                             {      279109231, 1835333261   },
                             {     1358617667, 1416978076   },
                             {      740626186, 2103913602   },
                             {     1882655908, 251341858   },
                             {      648016670, 1459615287   },
                             {      780255321, 154906988   },
                             {      857296483, 203375965   },
                             {     1631676846, 681204578   },
                             {     1906971307, 1623728832   },
                             {     1541899600, 1168449797   },
                             {     1267051693, 1020078717   },
                             {     1998673940, 1298394942   },
                             {     1914117058, 1381290704   },
                             {      426068513, 1381618498   },
                             {      139365577, 1598767734   },
                             {     2129910384, 952266588   },
                             {      661788054, 19661356      },
                             {     1104640222, 240506063   },
                             {      356133630, 1676634527   },
                             {      242242374, 1863206182   },
                             {      957935844, 1490681416   }};
#endif

ClassImp(TRandom1)

//______________________________________________________________________________
TRandom1::TRandom1(UInt_t seed, Int_t lux)
        : fIntModulus(0x1000000),
          fMantissaBit24( TMath::Power(0.5,24.) ),
          fMantissaBit12( TMath::Power(0.5,12.) )
{
// Luxury level is set in the same way as the original FORTRAN routine.
//  level 0  (p=24): equivalent to the original RCARRY of Marsaglia
//           and Zaman, very long period, but fails many tests.
//  level 1  (p=48): considerable improvement in quality over level 0,
//           now passes the gap test, but still fails spectral test.
//  level 2  (p=97): passes all known tests, but theoretically still
//           defective.
//  level 3  (p=223): DEFAULT VALUE.  Any theoretically possible
//           correlations have very small chance of being observed.
//  level 4  (p=389): highest possible luxury, all 24 bits chaotic.
   UInt_t seedlist[2]={0,0};

   fTheSeeds = &fSeed;
   fLuxury = lux;
   SetSeed2(seed, fLuxury);
   // in case seed = 0 SetSeed2 calls already SetSeeds
   if (seed != 0) { 
      // setSeeds() wants a zero terminated array!
      seedlist[0]=fSeed;
      seedlist[1]=0;
      SetSeeds(seedlist, fLuxury);
   }
}

//______________________________________________________________________________
TRandom1::TRandom1()
        : fIntModulus(0x1000000),
          fMantissaBit24( TMath::Power(0.5,24.) ),
          fMantissaBit12( TMath::Power(0.5,12.) )
{
   //default constructor
   fTheSeeds = &fSeed;
   UInt_t seed;
   UInt_t seedlist[2]={0,0};

   fLuxury = 3;
   int cycle = abs(int(fgNumEngines/fgMaxIndex));
   int curIndex = abs(int(fgNumEngines%fgMaxIndex));
   fgNumEngines +=1;
   UInt_t mask = ((cycle & 0x007fffff) << 8);
   GetTableSeeds( seedlist, curIndex );
   seed = seedlist[0]^mask;
   SetSeed2(seed, fLuxury);

   // setSeeds() wants a zero terminated array!
   seedlist[0]=fSeed; //<=============
   seedlist[1]=0;
   SetSeeds(seedlist, fLuxury);
}

//______________________________________________________________________________
TRandom1::TRandom1(int rowIndex, int colIndex, int lux)
        : fIntModulus(0x1000000),
          fMantissaBit24( TMath::Power(0.5,24.) ),
          fMantissaBit12( TMath::Power(0.5,12.) )
{
   //constructor
   fTheSeeds = &fSeed;
   UInt_t seed;
   UInt_t seedlist[2]={0,0};

   fLuxury = lux;
   int cycle = abs(int(rowIndex/fgMaxIndex));
   int row = abs(int(rowIndex%fgMaxIndex));
   int col = abs(int(colIndex%2));
   UInt_t mask = (( cycle & 0x000007ff ) << 20 );
   GetTableSeeds( seedlist, row );
   seed = ( seedlist[col] )^mask;
   SetSeed2(seed, fLuxury);

   // setSeeds() wants a zero terminated array!
   seedlist[0]=fSeed;
   seedlist[1]=0;
   SetSeeds(seedlist, fLuxury);
}

//______________________________________________________________________________
TRandom1::~TRandom1()
{
   //destructor
}

//______________________________________________________________________________
void TRandom1::GetTableSeeds(UInt_t* seeds, Int_t index)
{
   //static function returning the table of seeds
   if ((index >= 0) && (index < 215)) {
      seeds[0] = fgSeedTable[index][0];
      seeds[1] = fgSeedTable[index][1];
   }
   else seeds = 0;
}

//______________________________________________________________________________
Double_t TRandom1::Rndm(Int_t)
{
   //return a random number in ]0,1]
   float next_random;
   float uni;
   int i;

   uni = fFloatSeedTable[fJlag] - fFloatSeedTable[fIlag] - fCarry;
   if(uni < 0. ) {
      uni += 1.0;
      fCarry = fMantissaBit24;
   } else {
      fCarry = 0.;
   }

   fFloatSeedTable[fIlag] = uni;
   fIlag --;
   fJlag --;
   if(fIlag < 0) fIlag = 23;
   if(fJlag < 0) fJlag = 23;

   if( uni < fMantissaBit12 ){
      uni += fMantissaBit24 * fFloatSeedTable[fJlag];
      if( uni == 0) uni = fMantissaBit24 * fMantissaBit24;
   }
   next_random = uni;
   fCount24 ++;

// every 24th number generation, several random numbers are generated
// and wasted depending upon the fLuxury level.

   if(fCount24 == 24 ) {
      fCount24 = 0;
      for( i = 0; i != fNskip ; i++) {
         uni = fFloatSeedTable[fJlag] - fFloatSeedTable[fIlag] - fCarry;
         if(uni < 0. ) {
            uni += 1.0;
            fCarry = fMantissaBit24;
         } else {
            fCarry = 0.;
         }
         fFloatSeedTable[fIlag] = uni;
         fIlag --;
         fJlag --;
         if(fIlag < 0)fIlag = 23;
         if(fJlag < 0) fJlag = 23;
      }
   }
   return (double) next_random;
}

//______________________________________________________________________________
void TRandom1::RndmArray(const Int_t size, Float_t *vect)
{
   //return an array of random numbers in ]0,1]
   for (Int_t i=0;i<size;i++) vect[i] = Rndm();
}

//______________________________________________________________________________
void TRandom1::RndmArray(const Int_t size, Double_t *vect)
{
   //return an array of random numbers in ]0,1[
   float next_random;
   float uni;
   int i;
   int index;

   for (index=0; index<size; ++index) {
      uni = fFloatSeedTable[fJlag] - fFloatSeedTable[fIlag] - fCarry;
      if(uni < 0. ) {
         uni += 1.0;
         fCarry = fMantissaBit24;
      } else {
         fCarry = 0.;
      }

      fFloatSeedTable[fIlag] = uni;
      fIlag --;
      fJlag --;
      if(fIlag < 0) fIlag = 23;
      if(fJlag < 0) fJlag = 23;

      if( uni < fMantissaBit12 ){
         uni += fMantissaBit24 * fFloatSeedTable[fJlag];
         if( uni == 0) uni = fMantissaBit24 * fMantissaBit24;
      }
      next_random = uni;
      vect[index] = (double)next_random;
      fCount24 ++;

// every 24th number generation, several random numbers are generated
// and wasted depending upon the fLuxury level.

      if(fCount24 == 24 ) {
         fCount24 = 0;
         for( i = 0; i != fNskip ; i++) {
            uni = fFloatSeedTable[fJlag] - fFloatSeedTable[fIlag] - fCarry;
            if(uni < 0. ) {
               uni += 1.0;
               fCarry = fMantissaBit24;
            } else {
               fCarry = 0.;
            }
            fFloatSeedTable[fIlag] = uni;
            fIlag --;
            fJlag --;
            if(fIlag < 0)fIlag = 23;
            if(fJlag < 0) fJlag = 23;
         }
      }
   }
}


//______________________________________________________________________________
void TRandom1::SetSeeds(const UInt_t *seeds, int lux)
{
   //set seeds
   const int ecuyer_a = 53668;
   const int ecuyer_b = 40014;
   const int ecuyer_c = 12211;
   const int ecuyer_d = 2147483563;

   const int lux_levels[5] = {0,24,73,199,365};
   int i;
   UInt_t int_seed_table[24];
   Long64_t k_multiple,next_seed;
   const UInt_t *seedptr;

   fTheSeeds = seeds;
   seedptr   = seeds;

   if(seeds == 0) {
      SetSeed2(fSeed,lux);
      fTheSeeds = &fSeed;
      return;
   }

   fSeed = *seeds;

// number of additional random numbers that need to be 'thrown away'
// every 24 numbers is set using fLuxury level variable.

   if( (lux > 4)||(lux < 0) ) {
      if(lux >= 24) {
         fNskip = lux - 24;
      } else {
         fNskip = lux_levels[3]; // corresponds to default fLuxury level
      }
   } else {
      fLuxury = lux;
      fNskip  = lux_levels[fLuxury];
   }

   for( i = 0;(i != 24)&&(*seedptr != 0);i++) {
      int_seed_table[i] = *seedptr % fIntModulus;
      seedptr++;
   }

   if(i != 24){
      next_seed = int_seed_table[i-1];
      for(;i != 24;i++) {
         k_multiple = next_seed / ecuyer_a;
         next_seed = ecuyer_b * (next_seed - k_multiple * ecuyer_a)
         - k_multiple * ecuyer_c ;
         if(next_seed < 0)next_seed += ecuyer_d;
         int_seed_table[i] = next_seed % fIntModulus;
      }
   }

   for(i = 0;i != 24;i++)
      fFloatSeedTable[i] = int_seed_table[i] * fMantissaBit24;

   fIlag = 23;
   fJlag = 9;
   fCarry = 0. ;

   if( fFloatSeedTable[23] == 0. ) fCarry = fMantissaBit24;

   fCount24 = 0;
}

//______________________________________________________________________________
void TRandom1::SetSeed2(UInt_t seed, int lux)
{
// The initialisation is carried out using a Multiplicative
// Congruential generator using formula constants of L'Ecuyer
// as described in "A review of pseudorandom number generators"
// (Fred James) published in Computer Physics Communications 60 (1990)
// pages 329-344
//
// modified for the case of seed = 0. In that case a random 64 bits seed based on
// TUUID (using TRandom3(0) ) is generated in order to have a unique seed
//

   const int ecuyer_a = 53668;
   const int ecuyer_b = 40014;
   const int ecuyer_c = 12211;
   const int ecuyer_d = 2147483563;

   const int lux_levels[5] = {0,24,73,199,365};

   UInt_t int_seed_table[24];

   // case of seed == 0
   // use a random seed based on TRandom2(0) which is based on the UUID
   if (seed == 0) {
      UInt_t randSeeds[25]; 
      TRandom3 r2(0);
      for (int j = 0; j < 24; ++j) 
       randSeeds[j]  =  static_cast<UInt_t> (4294967296.*r2.Rndm());
      randSeeds[24] = 0; 
      SetSeeds(randSeeds, lux); 
      return;
   }


   Long64_t next_seed = seed;
   Long64_t k_multiple;
   int i;

   // number of additional random numbers that need to be 'thrown away'
   // every 24 numbers is set using fLuxury level variable.

   fSeed = seed;
   if( (lux > 4)||(lux < 0) ) {
      if(lux >= 24) {
         fNskip = lux - 24;
      } else {
         fNskip = lux_levels[3]; // corresponds to default fLuxury level
      }
   } else {
      fLuxury = lux;
      fNskip  = lux_levels[fLuxury];
   }


   for(i = 0;i != 24;i++) {
      k_multiple = next_seed / ecuyer_a;
      next_seed = ecuyer_b * (next_seed - k_multiple * ecuyer_a)
      - k_multiple * ecuyer_c ;
      if(next_seed < 0)next_seed += ecuyer_d;
      int_seed_table[i] = next_seed % fIntModulus;
   }

   for(i = 0;i != 24;i++)
      fFloatSeedTable[i] = int_seed_table[i] * fMantissaBit24;

   fIlag = 23;
   fJlag = 9;
   fCarry = 0. ;

   if( fFloatSeedTable[23] == 0. ) fCarry = fMantissaBit24;

   fCount24 = 0;
}

void TRandom1::SetSeed(UInt_t seed)
{
   // Set RanLux seed using default luxury level
   SetSeed2(seed);
}
 TRandom1.cxx:1
 TRandom1.cxx:2
 TRandom1.cxx:3
 TRandom1.cxx:4
 TRandom1.cxx:5
 TRandom1.cxx:6
 TRandom1.cxx:7
 TRandom1.cxx:8
 TRandom1.cxx:9
 TRandom1.cxx:10
 TRandom1.cxx:11
 TRandom1.cxx:12
 TRandom1.cxx:13
 TRandom1.cxx:14
 TRandom1.cxx:15
 TRandom1.cxx:16
 TRandom1.cxx:17
 TRandom1.cxx:18
 TRandom1.cxx:19
 TRandom1.cxx:20
 TRandom1.cxx:21
 TRandom1.cxx:22
 TRandom1.cxx:23
 TRandom1.cxx:24
 TRandom1.cxx:25
 TRandom1.cxx:26
 TRandom1.cxx:27
 TRandom1.cxx:28
 TRandom1.cxx:29
 TRandom1.cxx:30
 TRandom1.cxx:31
 TRandom1.cxx:32
 TRandom1.cxx:33
 TRandom1.cxx:34
 TRandom1.cxx:35
 TRandom1.cxx:36
 TRandom1.cxx:37
 TRandom1.cxx:38
 TRandom1.cxx:39
 TRandom1.cxx:40
 TRandom1.cxx:41
 TRandom1.cxx:42
 TRandom1.cxx:43
 TRandom1.cxx:44
 TRandom1.cxx:45
 TRandom1.cxx:46
 TRandom1.cxx:47
 TRandom1.cxx:48
 TRandom1.cxx:49
 TRandom1.cxx:50
 TRandom1.cxx:51
 TRandom1.cxx:52
 TRandom1.cxx:53
 TRandom1.cxx:54
 TRandom1.cxx:55
 TRandom1.cxx:56
 TRandom1.cxx:57
 TRandom1.cxx:58
 TRandom1.cxx:59
 TRandom1.cxx:60
 TRandom1.cxx:61
 TRandom1.cxx:62
 TRandom1.cxx:63
 TRandom1.cxx:64
 TRandom1.cxx:65
 TRandom1.cxx:66
 TRandom1.cxx:67
 TRandom1.cxx:68
 TRandom1.cxx:69
 TRandom1.cxx:70
 TRandom1.cxx:71
 TRandom1.cxx:72
 TRandom1.cxx:73
 TRandom1.cxx:74
 TRandom1.cxx:75
 TRandom1.cxx:76
 TRandom1.cxx:77
 TRandom1.cxx:78
 TRandom1.cxx:79
 TRandom1.cxx:80
 TRandom1.cxx:81
 TRandom1.cxx:82
 TRandom1.cxx:83
 TRandom1.cxx:84
 TRandom1.cxx:85
 TRandom1.cxx:86
 TRandom1.cxx:87
 TRandom1.cxx:88
 TRandom1.cxx:89
 TRandom1.cxx:90
 TRandom1.cxx:91
 TRandom1.cxx:92
 TRandom1.cxx:93
 TRandom1.cxx:94
 TRandom1.cxx:95
 TRandom1.cxx:96
 TRandom1.cxx:97
 TRandom1.cxx:98
 TRandom1.cxx:99
 TRandom1.cxx:100
 TRandom1.cxx:101
 TRandom1.cxx:102
 TRandom1.cxx:103
 TRandom1.cxx:104
 TRandom1.cxx:105
 TRandom1.cxx:106
 TRandom1.cxx:107
 TRandom1.cxx:108
 TRandom1.cxx:109
 TRandom1.cxx:110
 TRandom1.cxx:111
 TRandom1.cxx:112
 TRandom1.cxx:113
 TRandom1.cxx:114
 TRandom1.cxx:115
 TRandom1.cxx:116
 TRandom1.cxx:117
 TRandom1.cxx:118
 TRandom1.cxx:119
 TRandom1.cxx:120
 TRandom1.cxx:121
 TRandom1.cxx:122
 TRandom1.cxx:123
 TRandom1.cxx:124
 TRandom1.cxx:125
 TRandom1.cxx:126
 TRandom1.cxx:127
 TRandom1.cxx:128
 TRandom1.cxx:129
 TRandom1.cxx:130
 TRandom1.cxx:131
 TRandom1.cxx:132
 TRandom1.cxx:133
 TRandom1.cxx:134
 TRandom1.cxx:135
 TRandom1.cxx:136
 TRandom1.cxx:137
 TRandom1.cxx:138
 TRandom1.cxx:139
 TRandom1.cxx:140
 TRandom1.cxx:141
 TRandom1.cxx:142
 TRandom1.cxx:143
 TRandom1.cxx:144
 TRandom1.cxx:145
 TRandom1.cxx:146
 TRandom1.cxx:147
 TRandom1.cxx:148
 TRandom1.cxx:149
 TRandom1.cxx:150
 TRandom1.cxx:151
 TRandom1.cxx:152
 TRandom1.cxx:153
 TRandom1.cxx:154
 TRandom1.cxx:155
 TRandom1.cxx:156
 TRandom1.cxx:157
 TRandom1.cxx:158
 TRandom1.cxx:159
 TRandom1.cxx:160
 TRandom1.cxx:161
 TRandom1.cxx:162
 TRandom1.cxx:163
 TRandom1.cxx:164
 TRandom1.cxx:165
 TRandom1.cxx:166
 TRandom1.cxx:167
 TRandom1.cxx:168
 TRandom1.cxx:169
 TRandom1.cxx:170
 TRandom1.cxx:171
 TRandom1.cxx:172
 TRandom1.cxx:173
 TRandom1.cxx:174
 TRandom1.cxx:175
 TRandom1.cxx:176
 TRandom1.cxx:177
 TRandom1.cxx:178
 TRandom1.cxx:179
 TRandom1.cxx:180
 TRandom1.cxx:181
 TRandom1.cxx:182
 TRandom1.cxx:183
 TRandom1.cxx:184
 TRandom1.cxx:185
 TRandom1.cxx:186
 TRandom1.cxx:187
 TRandom1.cxx:188
 TRandom1.cxx:189
 TRandom1.cxx:190
 TRandom1.cxx:191
 TRandom1.cxx:192
 TRandom1.cxx:193
 TRandom1.cxx:194
 TRandom1.cxx:195
 TRandom1.cxx:196
 TRandom1.cxx:197
 TRandom1.cxx:198
 TRandom1.cxx:199
 TRandom1.cxx:200
 TRandom1.cxx:201
 TRandom1.cxx:202
 TRandom1.cxx:203
 TRandom1.cxx:204
 TRandom1.cxx:205
 TRandom1.cxx:206
 TRandom1.cxx:207
 TRandom1.cxx:208
 TRandom1.cxx:209
 TRandom1.cxx:210
 TRandom1.cxx:211
 TRandom1.cxx:212
 TRandom1.cxx:213
 TRandom1.cxx:214
 TRandom1.cxx:215
 TRandom1.cxx:216
 TRandom1.cxx:217
 TRandom1.cxx:218
 TRandom1.cxx:219
 TRandom1.cxx:220
 TRandom1.cxx:221
 TRandom1.cxx:222
 TRandom1.cxx:223
 TRandom1.cxx:224
 TRandom1.cxx:225
 TRandom1.cxx:226
 TRandom1.cxx:227
 TRandom1.cxx:228
 TRandom1.cxx:229
 TRandom1.cxx:230
 TRandom1.cxx:231
 TRandom1.cxx:232
 TRandom1.cxx:233
 TRandom1.cxx:234
 TRandom1.cxx:235
 TRandom1.cxx:236
 TRandom1.cxx:237
 TRandom1.cxx:238
 TRandom1.cxx:239
 TRandom1.cxx:240
 TRandom1.cxx:241
 TRandom1.cxx:242
 TRandom1.cxx:243
 TRandom1.cxx:244
 TRandom1.cxx:245
 TRandom1.cxx:246
 TRandom1.cxx:247
 TRandom1.cxx:248
 TRandom1.cxx:249
 TRandom1.cxx:250
 TRandom1.cxx:251
 TRandom1.cxx:252
 TRandom1.cxx:253
 TRandom1.cxx:254
 TRandom1.cxx:255
 TRandom1.cxx:256
 TRandom1.cxx:257
 TRandom1.cxx:258
 TRandom1.cxx:259
 TRandom1.cxx:260
 TRandom1.cxx:261
 TRandom1.cxx:262
 TRandom1.cxx:263
 TRandom1.cxx:264
 TRandom1.cxx:265
 TRandom1.cxx:266
 TRandom1.cxx:267
 TRandom1.cxx:268
 TRandom1.cxx:269
 TRandom1.cxx:270
 TRandom1.cxx:271
 TRandom1.cxx:272
 TRandom1.cxx:273
 TRandom1.cxx:274
 TRandom1.cxx:275
 TRandom1.cxx:276
 TRandom1.cxx:277
 TRandom1.cxx:278
 TRandom1.cxx:279
 TRandom1.cxx:280
 TRandom1.cxx:281
 TRandom1.cxx:282
 TRandom1.cxx:283
 TRandom1.cxx:284
 TRandom1.cxx:285
 TRandom1.cxx:286
 TRandom1.cxx:287
 TRandom1.cxx:288
 TRandom1.cxx:289
 TRandom1.cxx:290
 TRandom1.cxx:291
 TRandom1.cxx:292
 TRandom1.cxx:293
 TRandom1.cxx:294
 TRandom1.cxx:295
 TRandom1.cxx:296
 TRandom1.cxx:297
 TRandom1.cxx:298
 TRandom1.cxx:299
 TRandom1.cxx:300
 TRandom1.cxx:301
 TRandom1.cxx:302
 TRandom1.cxx:303
 TRandom1.cxx:304
 TRandom1.cxx:305
 TRandom1.cxx:306
 TRandom1.cxx:307
 TRandom1.cxx:308
 TRandom1.cxx:309
 TRandom1.cxx:310
 TRandom1.cxx:311
 TRandom1.cxx:312
 TRandom1.cxx:313
 TRandom1.cxx:314
 TRandom1.cxx:315
 TRandom1.cxx:316
 TRandom1.cxx:317
 TRandom1.cxx:318
 TRandom1.cxx:319
 TRandom1.cxx:320
 TRandom1.cxx:321
 TRandom1.cxx:322
 TRandom1.cxx:323
 TRandom1.cxx:324
 TRandom1.cxx:325
 TRandom1.cxx:326
 TRandom1.cxx:327
 TRandom1.cxx:328
 TRandom1.cxx:329
 TRandom1.cxx:330
 TRandom1.cxx:331
 TRandom1.cxx:332
 TRandom1.cxx:333
 TRandom1.cxx:334
 TRandom1.cxx:335
 TRandom1.cxx:336
 TRandom1.cxx:337
 TRandom1.cxx:338
 TRandom1.cxx:339
 TRandom1.cxx:340
 TRandom1.cxx:341
 TRandom1.cxx:342
 TRandom1.cxx:343
 TRandom1.cxx:344
 TRandom1.cxx:345
 TRandom1.cxx:346
 TRandom1.cxx:347
 TRandom1.cxx:348
 TRandom1.cxx:349
 TRandom1.cxx:350
 TRandom1.cxx:351
 TRandom1.cxx:352
 TRandom1.cxx:353
 TRandom1.cxx:354
 TRandom1.cxx:355
 TRandom1.cxx:356
 TRandom1.cxx:357
 TRandom1.cxx:358
 TRandom1.cxx:359
 TRandom1.cxx:360
 TRandom1.cxx:361
 TRandom1.cxx:362
 TRandom1.cxx:363
 TRandom1.cxx:364
 TRandom1.cxx:365
 TRandom1.cxx:366
 TRandom1.cxx:367
 TRandom1.cxx:368
 TRandom1.cxx:369
 TRandom1.cxx:370
 TRandom1.cxx:371
 TRandom1.cxx:372
 TRandom1.cxx:373
 TRandom1.cxx:374
 TRandom1.cxx:375
 TRandom1.cxx:376
 TRandom1.cxx:377
 TRandom1.cxx:378
 TRandom1.cxx:379
 TRandom1.cxx:380
 TRandom1.cxx:381
 TRandom1.cxx:382
 TRandom1.cxx:383
 TRandom1.cxx:384
 TRandom1.cxx:385
 TRandom1.cxx:386
 TRandom1.cxx:387
 TRandom1.cxx:388
 TRandom1.cxx:389
 TRandom1.cxx:390
 TRandom1.cxx:391
 TRandom1.cxx:392
 TRandom1.cxx:393
 TRandom1.cxx:394
 TRandom1.cxx:395
 TRandom1.cxx:396
 TRandom1.cxx:397
 TRandom1.cxx:398
 TRandom1.cxx:399
 TRandom1.cxx:400
 TRandom1.cxx:401
 TRandom1.cxx:402
 TRandom1.cxx:403
 TRandom1.cxx:404
 TRandom1.cxx:405
 TRandom1.cxx:406
 TRandom1.cxx:407
 TRandom1.cxx:408
 TRandom1.cxx:409
 TRandom1.cxx:410
 TRandom1.cxx:411
 TRandom1.cxx:412
 TRandom1.cxx:413
 TRandom1.cxx:414
 TRandom1.cxx:415
 TRandom1.cxx:416
 TRandom1.cxx:417
 TRandom1.cxx:418
 TRandom1.cxx:419
 TRandom1.cxx:420
 TRandom1.cxx:421
 TRandom1.cxx:422
 TRandom1.cxx:423
 TRandom1.cxx:424
 TRandom1.cxx:425
 TRandom1.cxx:426
 TRandom1.cxx:427
 TRandom1.cxx:428
 TRandom1.cxx:429
 TRandom1.cxx:430
 TRandom1.cxx:431
 TRandom1.cxx:432
 TRandom1.cxx:433
 TRandom1.cxx:434
 TRandom1.cxx:435
 TRandom1.cxx:436
 TRandom1.cxx:437
 TRandom1.cxx:438
 TRandom1.cxx:439
 TRandom1.cxx:440
 TRandom1.cxx:441
 TRandom1.cxx:442
 TRandom1.cxx:443
 TRandom1.cxx:444
 TRandom1.cxx:445
 TRandom1.cxx:446
 TRandom1.cxx:447
 TRandom1.cxx:448
 TRandom1.cxx:449
 TRandom1.cxx:450
 TRandom1.cxx:451
 TRandom1.cxx:452
 TRandom1.cxx:453
 TRandom1.cxx:454
 TRandom1.cxx:455
 TRandom1.cxx:456
 TRandom1.cxx:457
 TRandom1.cxx:458
 TRandom1.cxx:459
 TRandom1.cxx:460
 TRandom1.cxx:461
 TRandom1.cxx:462
 TRandom1.cxx:463
 TRandom1.cxx:464
 TRandom1.cxx:465
 TRandom1.cxx:466
 TRandom1.cxx:467
 TRandom1.cxx:468
 TRandom1.cxx:469
 TRandom1.cxx:470
 TRandom1.cxx:471
 TRandom1.cxx:472
 TRandom1.cxx:473
 TRandom1.cxx:474
 TRandom1.cxx:475
 TRandom1.cxx:476
 TRandom1.cxx:477
 TRandom1.cxx:478
 TRandom1.cxx:479
 TRandom1.cxx:480
 TRandom1.cxx:481
 TRandom1.cxx:482
 TRandom1.cxx:483
 TRandom1.cxx:484
 TRandom1.cxx:485
 TRandom1.cxx:486
 TRandom1.cxx:487
 TRandom1.cxx:488
 TRandom1.cxx:489
 TRandom1.cxx:490
 TRandom1.cxx:491
 TRandom1.cxx:492
 TRandom1.cxx:493
 TRandom1.cxx:494
 TRandom1.cxx:495
 TRandom1.cxx:496
 TRandom1.cxx:497
 TRandom1.cxx:498
 TRandom1.cxx:499
 TRandom1.cxx:500
 TRandom1.cxx:501
 TRandom1.cxx:502
 TRandom1.cxx:503
 TRandom1.cxx:504
 TRandom1.cxx:505
 TRandom1.cxx:506
 TRandom1.cxx:507
 TRandom1.cxx:508
 TRandom1.cxx:509
 TRandom1.cxx:510
 TRandom1.cxx:511
 TRandom1.cxx:512
 TRandom1.cxx:513
 TRandom1.cxx:514
 TRandom1.cxx:515
 TRandom1.cxx:516
 TRandom1.cxx:517
 TRandom1.cxx:518
 TRandom1.cxx:519
 TRandom1.cxx:520
 TRandom1.cxx:521
 TRandom1.cxx:522
 TRandom1.cxx:523
 TRandom1.cxx:524
 TRandom1.cxx:525
 TRandom1.cxx:526
 TRandom1.cxx:527
 TRandom1.cxx:528
 TRandom1.cxx:529
 TRandom1.cxx:530
 TRandom1.cxx:531
 TRandom1.cxx:532
 TRandom1.cxx:533
 TRandom1.cxx:534
 TRandom1.cxx:535
 TRandom1.cxx:536
 TRandom1.cxx:537
 TRandom1.cxx:538
 TRandom1.cxx:539
 TRandom1.cxx:540
 TRandom1.cxx:541
 TRandom1.cxx:542
 TRandom1.cxx:543
 TRandom1.cxx:544
 TRandom1.cxx:545
 TRandom1.cxx:546
 TRandom1.cxx:547
 TRandom1.cxx:548
 TRandom1.cxx:549
 TRandom1.cxx:550
 TRandom1.cxx:551
 TRandom1.cxx:552
 TRandom1.cxx:553
 TRandom1.cxx:554
 TRandom1.cxx:555
 TRandom1.cxx:556
 TRandom1.cxx:557
 TRandom1.cxx:558
 TRandom1.cxx:559
 TRandom1.cxx:560
 TRandom1.cxx:561
 TRandom1.cxx:562
 TRandom1.cxx:563
 TRandom1.cxx:564
 TRandom1.cxx:565
 TRandom1.cxx:566
 TRandom1.cxx:567
 TRandom1.cxx:568
 TRandom1.cxx:569
 TRandom1.cxx:570
 TRandom1.cxx:571
 TRandom1.cxx:572
 TRandom1.cxx:573
 TRandom1.cxx:574
 TRandom1.cxx:575
 TRandom1.cxx:576
 TRandom1.cxx:577
 TRandom1.cxx:578
 TRandom1.cxx:579
 TRandom1.cxx:580
 TRandom1.cxx:581
 TRandom1.cxx:582
 TRandom1.cxx:583
 TRandom1.cxx:584
 TRandom1.cxx:585
 TRandom1.cxx:586
 TRandom1.cxx:587
 TRandom1.cxx:588
 TRandom1.cxx:589
 TRandom1.cxx:590
 TRandom1.cxx:591
 TRandom1.cxx:592
 TRandom1.cxx:593
 TRandom1.cxx:594
 TRandom1.cxx:595
 TRandom1.cxx:596
 TRandom1.cxx:597
 TRandom1.cxx:598
 TRandom1.cxx:599
 TRandom1.cxx:600
 TRandom1.cxx:601
 TRandom1.cxx:602
 TRandom1.cxx:603
 TRandom1.cxx:604
 TRandom1.cxx:605
 TRandom1.cxx:606
 TRandom1.cxx:607
 TRandom1.cxx:608
 TRandom1.cxx:609
 TRandom1.cxx:610
 TRandom1.cxx:611