Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
RooQuasiRandomGenerator.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Project: RooFit *
3  * Package: RooFitCore *
4  * File: $Id: RooQuasiRandomGenerator.h,v 1.7 2007/05/11 09:11:30 verkerke Exp $
5  * Authors: *
6  * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu *
7  * DK, David Kirkby, UC Irvine, dkirkby@uci.edu *
8  * *
9  * Copyright (c) 2000-2005, Regents of the University of California *
10  * and Stanford University. All rights reserved. *
11  * *
12  * Redistribution and use in source and binary forms, *
13  * with or without modification, are permitted according to the terms *
14  * listed in LICENSE (http://roofit.sourceforge.net/license.txt) *
15  *****************************************************************************/
16 #ifndef ROO_QUASI_RANDOM_GENERATOR
17 #define ROO_QUASI_RANDOM_GENERATOR
18 
19 #include "Rtypes.h"
20 
21 class RooQuasiRandomGenerator {
22 public:
23  RooQuasiRandomGenerator();
24  virtual ~RooQuasiRandomGenerator();
25  void reset();
26  Bool_t generate(UInt_t dimension, Double_t vector[]);
27  enum { MaxDimension = 12 , NBits = 31 , MaxDegree = 50 , MaxPrimitiveDegree = 5 };
28 protected:
29  void calculateCoefs(UInt_t dimension);
30  void calculateV(const int px[], int px_degree,
31  int pb[], int * pb_degree, int v[], int maxv);
32  void polyMultiply(const int pa[], int pa_degree, const int pb[],
33  int pb_degree, int pc[], int * pc_degree);
34  // Z_2 field operations
35  inline Int_t add(Int_t x, Int_t y) const { return (x+y)%2; }
36  inline Int_t mul(Int_t x, Int_t y) const { return (x*y)%2; }
37  inline Int_t sub(Int_t x, Int_t y) const { return add(x,y); }
38 private:
39  Int_t *_nextq;
40  Int_t _sequenceCount;
41 
42  static Bool_t _coefsCalculated;
43  static Int_t _cj[NBits][MaxDimension];
44  static const Int_t _primitivePoly[MaxDimension+1][MaxPrimitiveDegree+1];
45  static const Int_t _polyDegree[MaxDimension+1];
46 
47  ClassDef(RooQuasiRandomGenerator,0) // Quasi-random number generator
48 };
49 
50 #endif
51 
52