Logo ROOT   master
Reference Guide
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 
22 public:
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:
41 
45  static const Int_t _polyDegree[MaxDimension+1];
46 
47  ClassDef(RooQuasiRandomGenerator,0) // Quasi-random number generator
48 };
49 
50 #endif
51 
52 
static const Int_t _polyDegree[MaxDimension+1]
static const Int_t _primitivePoly[MaxDimension+1][MaxPrimitiveDegree+1]
RooQuasiRandomGenerator()
Perform one-time initialization of our static coefficient array if necessary and initialize our works...
virtual ~RooQuasiRandomGenerator()
Destructor.
Double_t x[n]
Definition: legend1.C:17
#define ClassDef(name, id)
Definition: Rtypes.h:322
Bool_t generate(UInt_t dimension, Double_t vector[])
Generate the next number in the sequence for the specified dimension.
Int_t add(Int_t x, Int_t y) const
Int_t mul(Int_t x, Int_t y) const
static constexpr double pc
unsigned int UInt_t
Definition: RtypesCore.h:44
void reset()
Reset the workspace to its initial state.
Double_t y[n]
Definition: legend1.C:17
This class generates the quasi-random (aka "low discrepancy") sequence for dimensions up to 12 using ...
void polyMultiply(const int pa[], int pa_degree, const int pb[], int pb_degree, int pc[], int *pc_degree)
Internal function.
Int_t sub(Int_t x, Int_t y) const
static Int_t _cj[NBits][MaxDimension]
void calculateV(const int px[], int px_degree, int pb[], int *pb_degree, int v[], int maxv)
Internal function.
void calculateCoefs(UInt_t dimension)
Calculate the coefficients for the given number of dimensions.