ROOT   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
22public:
25 void reset();
26 bool generate(UInt_t dimension, double vector[]);
27 enum { MaxDimension = 12 , NBits = 31 , MaxDegree = 50 , MaxPrimitiveDegree = 5 };
28protected:
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); }
38private:
41
42 static bool _coefsCalculated;
46
47 ClassDef(RooQuasiRandomGenerator,0) // Quasi-random number generator
48};
49
50#endif
51
52
unsigned int UInt_t
Definition: RtypesCore.h:46
#define ClassDef(name, id)
Definition: Rtypes.h:335
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.
RooQuasiRandomGenerator()
Perform one-time initialization of our static coefficient array if necessary and initialize our works...
void calculateV(const int px[], int px_degree, int pb[], int *pb_degree, int v[], int maxv)
Internal function.
Int_t mul(Int_t x, Int_t y) const
void reset()
Reset the workspace to its initial state.
void calculateCoefs(UInt_t dimension)
Calculate the coefficients for the given number of dimensions.
static Int_t _cj[NBits][MaxDimension]
virtual ~RooQuasiRandomGenerator()
Destructor.
static const Int_t _polyDegree[MaxDimension+1]
static const Int_t _primitivePoly[MaxDimension+1][MaxPrimitiveDegree+1]
bool generate(UInt_t dimension, double vector[])
Generate the next number in the sequence for the specified dimension.
Int_t add(Int_t x, Int_t y) const
Int_t sub(Int_t x, Int_t y) const
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17
static constexpr double pc