ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

/* $Id$ */

///////////////////////////////////////////////////////////////////////////////
// Random number class for AliRoot
// This class allows to have different 
// random number generator for different
// elements of AliRoot                                                                          //
// It also allows saving and retrieving of the random number seeds
///////////////////////////////////////////////////////////////////////////////

#include <TClass.h>
#include <TFile.h>
#include <TError.h>
#include <TRandom3.h>
#include <TSystem.h>

#include "AliRndm.h"
#include "AliLog.h"

ClassImp(AliRndm)

//_______________________________________________________________________
AliRndm::AliRndm():
  fRandom(gRandom)
{
  // 
  // Default ctor
  //
}

//_______________________________________________________________________
AliRndm::AliRndm(const AliRndm& rn):
  fRandom(gRandom)
{
  //
  // Copy constructor
  //
  rn.Copy(*this);
}

//_______________________________________________________________________
void AliRndm::Copy(AliRndm&) const
{
  AliFatalClass("Not implemented");
}


//_____________________________________________________________________________
void AliRndm::Rndm(Float_t* array, Int_t size) const
{
  //
  // Return an array of n random numbers uniformly distributed 
  // between 0 and 1 not included
  //
  for(Int_t i=0; i<size; i++) 
#ifdef CKNONE
    array[i]=fRandom->Rndm();
#else
    do array[i]=fRandom->Rndm(); while(0>=array[i] || array[i]>=1);
#endif
}

//_____________________________________________________________________________
void AliRndm::ReadRandom(const char *filename)
{
  //
  // Reads saved random generator status from filename
  //
  char *fntmp = gSystem->ExpandPathName(filename);
  TFile *file = new TFile(fntmp,"r");
  delete [] fntmp;
  if(!file) {
    AliErrorClass(Form("Could not open file %s",filename));
  } else {
    if(!fRandom) fRandom = new TRandom();
    fRandom->Read("Random");
    file->Close();
    delete file;
  }
}

//_____________________________________________________________________________
void AliRndm::WriteRandom(const char *filename) const
{
  //
  // Writes random generator status to filename
  //
  char *fntmp = gSystem->ExpandPathName(filename);
  TFile *file = new TFile(fntmp,"new");
  delete [] fntmp;
  if(!file) {
    AliErrorClass(Form("Could not open file %s",filename));
  } else {
    fRandom->Write();
    file->Close();
    delete file;
  }
}
 AliRndm.cxx:1
 AliRndm.cxx:2
 AliRndm.cxx:3
 AliRndm.cxx:4
 AliRndm.cxx:5
 AliRndm.cxx:6
 AliRndm.cxx:7
 AliRndm.cxx:8
 AliRndm.cxx:9
 AliRndm.cxx:10
 AliRndm.cxx:11
 AliRndm.cxx:12
 AliRndm.cxx:13
 AliRndm.cxx:14
 AliRndm.cxx:15
 AliRndm.cxx:16
 AliRndm.cxx:17
 AliRndm.cxx:18
 AliRndm.cxx:19
 AliRndm.cxx:20
 AliRndm.cxx:21
 AliRndm.cxx:22
 AliRndm.cxx:23
 AliRndm.cxx:24
 AliRndm.cxx:25
 AliRndm.cxx:26
 AliRndm.cxx:27
 AliRndm.cxx:28
 AliRndm.cxx:29
 AliRndm.cxx:30
 AliRndm.cxx:31
 AliRndm.cxx:32
 AliRndm.cxx:33
 AliRndm.cxx:34
 AliRndm.cxx:35
 AliRndm.cxx:36
 AliRndm.cxx:37
 AliRndm.cxx:38
 AliRndm.cxx:39
 AliRndm.cxx:40
 AliRndm.cxx:41
 AliRndm.cxx:42
 AliRndm.cxx:43
 AliRndm.cxx:44
 AliRndm.cxx:45
 AliRndm.cxx:46
 AliRndm.cxx:47
 AliRndm.cxx:48
 AliRndm.cxx:49
 AliRndm.cxx:50
 AliRndm.cxx:51
 AliRndm.cxx:52
 AliRndm.cxx:53
 AliRndm.cxx:54
 AliRndm.cxx:55
 AliRndm.cxx:56
 AliRndm.cxx:57
 AliRndm.cxx:58
 AliRndm.cxx:59
 AliRndm.cxx:60
 AliRndm.cxx:61
 AliRndm.cxx:62
 AliRndm.cxx:63
 AliRndm.cxx:64
 AliRndm.cxx:65
 AliRndm.cxx:66
 AliRndm.cxx:67
 AliRndm.cxx:68
 AliRndm.cxx:69
 AliRndm.cxx:70
 AliRndm.cxx:71
 AliRndm.cxx:72
 AliRndm.cxx:73
 AliRndm.cxx:74
 AliRndm.cxx:75
 AliRndm.cxx:76
 AliRndm.cxx:77
 AliRndm.cxx:78
 AliRndm.cxx:79
 AliRndm.cxx:80
 AliRndm.cxx:81
 AliRndm.cxx:82
 AliRndm.cxx:83
 AliRndm.cxx:84
 AliRndm.cxx:85
 AliRndm.cxx:86
 AliRndm.cxx:87
 AliRndm.cxx:88
 AliRndm.cxx:89
 AliRndm.cxx:90
 AliRndm.cxx:91
 AliRndm.cxx:92
 AliRndm.cxx:93
 AliRndm.cxx:94
 AliRndm.cxx:95
 AliRndm.cxx:96
 AliRndm.cxx:97
 AliRndm.cxx:98
 AliRndm.cxx:99
 AliRndm.cxx:100
 AliRndm.cxx:101
 AliRndm.cxx:102
 AliRndm.cxx:103
 AliRndm.cxx:104
 AliRndm.cxx:105
 AliRndm.cxx:106
 AliRndm.cxx:107
 AliRndm.cxx:108
 AliRndm.cxx:109
 AliRndm.cxx:110
 AliRndm.cxx:111
 AliRndm.cxx:112
 AliRndm.cxx:113