]> git.uio.no Git - u/mrichter/AliRoot.git/blob - STEER/AliRndm.cxx
Changes needed on Mac (F.Carminati)
[u/mrichter/AliRoot.git] / STEER / AliRndm.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////////////////
19 // Random number class for AliRoot
20 // This class allows to have different 
21 // random number generator for different
22 // elements of AliRoot                                                                          //
23 // It also allows saving and retrieving of the random number seeds
24 ///////////////////////////////////////////////////////////////////////////////
25
26 #include "TFile.h"
27 #include "TError.h"
28 #include "TRandom3.h"
29 #include "TSystem.h"
30
31 #include "AliRndm.h"
32 #include "AliLog.h"
33
34 ClassImp(AliRndm)
35
36 //_______________________________________________________________________
37 AliRndm::AliRndm():
38   fRandom(gRandom)
39 {
40   // 
41   // Default ctor
42   //
43 }
44
45 //_______________________________________________________________________
46 AliRndm::AliRndm(const AliRndm& rn):
47   fRandom(gRandom)
48 {
49   //
50   // Copy constructor
51   //
52   rn.Copy(*this);
53 }
54
55 //_______________________________________________________________________
56 void AliRndm::Copy(AliRndm&) const
57 {
58   AliFatalClass("Not implemented");
59 }
60
61
62 //_____________________________________________________________________________
63 void AliRndm::Rndm(Float_t* array, Int_t size) const
64 {
65   //
66   // Return an array of n random numbers uniformly distributed 
67   // between 0 and 1 not included
68   //
69   for(Int_t i=0; i<size; i++) 
70 #ifdef CKNONE
71     array[i]=fRandom->Rndm();
72 #else
73     do array[i]=fRandom->Rndm(); while(0>=array[i] || array[i]>=1);
74 #endif
75 }
76
77 //_____________________________________________________________________________
78 void AliRndm::ReadRandom(const char *filename)
79 {
80   //
81   // Reads saved random generator status from filename
82   //
83   char *fntmp = gSystem->ExpandPathName(filename);
84   TFile *file = new TFile(fntmp,"r");
85   delete [] fntmp;
86   if(!file) {
87     AliErrorClass(Form("Could not open file %s",filename));
88   } else {
89     if(!fRandom) fRandom = new TRandom();
90     fRandom->Read("Random");
91     file->Close();
92     delete file;
93   }
94 }
95
96 //_____________________________________________________________________________
97 void AliRndm::WriteRandom(const char *filename) const
98 {
99   //
100   // Writes random generator status to filename
101   //
102   char *fntmp = gSystem->ExpandPathName(filename);
103   TFile *file = new TFile(fntmp,"new");
104   delete [] fntmp;
105   if(!file) {
106     AliErrorClass(Form("Could not open file %s",filename));
107   } else {
108     fRandom->Write();
109     file->Close();
110     delete file;
111   }
112 }