1 #ifndef H_MARKOV_GENERATOR 
    2 #define H_MARKOV_GENERATOR 
   71     JUniformGenerator( 
double xmin, 
double ymin, 
double zmin, 
double xmax, 
double ymax, 
double zmax ) : posmin(
xmin,ymin,zmin), posmax(
xmax,ymax,zmax) {
 
   84       double x = gRandom->Uniform( posmin.getX(), posmax.getX() ) ;
 
   85       double y = gRandom->Uniform( posmin.getY(), posmax.getY() ) ;
 
   86       double z = gRandom->Uniform( posmin.getZ(), posmax.getZ() ) ;
 
   91       if( pos.
getX() < posmin.getX() ||  pos.
getX() > posmax.getX() ) 
return 0.0 ;
 
   92       if( pos.
getY() < posmin.getY() ||  pos.
getY() > posmax.getY() ) 
return 0.0 ;
 
   93       if( pos.
getZ() < posmin.getZ() ||  pos.
getZ() > posmax.getZ() ) 
return 0.0 ;
 
  100       V = (posmax.getX()-posmin.getX())*(posmax.getY()-posmin.getY())*(posmax.getZ()-posmin.getZ()) ;
 
  125       double rcube = gRandom->Uniform(0,Rcube) ;
 
  126       double r = 
pow(rcube,1.0/3.0) ;
 
  128       gRandom->Sphere(
x,
y,z,
r) ;
 
  164       double xi = gRandom->Uniform() ;
 
  165       double r = -lambda*log(1-xi) ;
 
  167       gRandom->Sphere(
x,
y,z,
r) ;
 
  173       return lambda*exp(-
r/lambda)/(
r*
r*4*M_PI) ;
 
  197       const int nbins = 1000 ;
 
  198       const double xmax = 100 ;
 
  199       const int nsamples = 10000000 ;
 
  200       h = 
new TH1F(
"h",
"",nbins,0,
xmax) ;
 
  201       for( 
int i=0 ; i<nsamples ; ++i ) {
 
  207       h->Scale( 1.0/h->Integral(
"width") ) ;
 
  215       double r = h->GetRandom() ;
 
  217       gRandom->Sphere(
x,
y,z,
r) ;
 
  223       Int_t bin = h->FindBin(
r) ;
 
  224       return h->GetBinContent(bin)/(
r*
r) ;
 
  250       double r = gRandom->Uniform(0,R) ;
 
  252       gRandom->Sphere(
x,
y,z,
r) ;
 
  290       r1(_r1), r2(_r2), L(_L) 
 
  293       ximin = getIntegrand(r1) ;
 
  294       ximax = getIntegrand(r2) ;
 
  305       gRandom->Sphere(
x,
y,z,
r) ;
 
  311       double xi = gRandom->Uniform(ximin,ximax) ;
 
  313       return getInvertedIntegrand(xi) ;
 
  317       return exp(-
r/L) / 
C ;
 
  324       return -4*M_PI*L*exp(-
r/L)*(2*L*L+2*L*
r+
r*
r) ;
 
  329       const double precision = 1e-10 ;
 
  332       double vl = getIntegrand(rl)-
x ;
 
  334       double vr = getIntegrand(rr)-
x ;
 
  338       while( rr-rl > precision ) {
 
  340         vc = getIntegrand(rc)-
x ;
 
  341         if( (vc>0) == (vr>0) ) {
 
  379       double x = gRandom->Gaus(0,
sigma) ;
 
  380       double y = gRandom->Gaus(0,
sigma) ;
 
  381       double z = gRandom->Gaus(0,
sigma) ;
 
  424       if( gRandom->Uniform()<
p1 ) {
 
  425         return g1->getPosition() ;
 
  427         return g2->getPosition() ;
 
  432       double w1 = 
g1->getWeight(pos) ;
 
  433       double w2 = g2->getWeight(pos) ;
 
  434       return p1*w1 + p2*w2 ;
 
  468       gsub(
c1,
g1,c2,g2), g(
c1+c2,&gsub,c3,g3) {}
 
  498       g(_g), shift(_shift) {}
 
  505       return g->getWeight( pos-shift ) ;
 
  532       hx = (TH1*) _hx->Clone( _hx->GetName() ) ;
 
  533       hy = (TH1*) _hy->Clone( _hy->GetName() ) ;
 
  534       hz = (TH1*) _hz->Clone( _hz->GetName() ) ;
 
  536       hx->Scale( 1.0/hx->Integral(
"width") ) ;
 
  537       hy->Scale( 1.0/hy->Integral(
"width") ) ;
 
  538       hz->Scale( 1.0/hz->Integral(
"width") ) ;
 
  548       double x = hx->GetRandom() ;
 
  549       double y = hy->GetRandom() ;
 
  550       double z = hz->GetRandom() ;
 
  558       bin = hx->GetXaxis()->FindBin( pos.
getX() ) ;
 
  559       if( bin==0 || bin==hx->GetNbinsX()+1 ) 
return 0.0 ; 
 
  560       w *= hx->GetBinContent(bin) ;
 
  562       bin = hy->GetXaxis()->FindBin( pos.
getY() ) ;
 
  563       if( bin==0 || bin==hy->GetNbinsX()+1 ) 
return 0.0 ; 
 
  564       w *= hy->GetBinContent(bin) ;
 
  566       bin = hz->GetXaxis()->FindBin( pos.
getZ() ) ;
 
  567       if( bin==0 || bin==hz->GetNbinsX()+1 ) 
return 0.0 ; 
 
  568       w *= hz->GetBinContent(bin) ;
 
  605         h = (TH2*) _h->Clone( _h->GetName() ) ;
 
  607         if( h->GetXaxis()->GetXmin()<-1 || h->GetXaxis()->GetXmax()>1 ) {
 
  608           cerr << 
"FATAL ERROR in JSphereGenerator. Invalid x-axis range." << endl ;
 
  611         if( h->GetYaxis()->GetXmin() < -M_PI || h->GetYaxis()->GetXmax() > M_PI ) {
 
  612           cerr << 
"FATAL ERROR in JSphereGenerator. Invalid y-axis range." << endl ;
 
  616         h->Scale( 1.0/h->Integral(
"width") ) ;
 
  617         h->SetOption(
"colz") ;
 
  630       if( 
r==0 ) 
return x0 ;
 
  632       double costheta, phi ;
 
  633       h->GetRandom2(costheta,phi) ;
 
  642       if( 
r==0 ) 
return 1 ;
 
  645       const double tolerance = 1e-5 ;
 
  651       double ct = dir.
getDZ() ;
 
  652       double phi = dir.
getPhi() ;
 
  654       if( ct < h->GetXaxis()->GetXmin() || ct >=h->GetXaxis()->GetXmax() ) 
return 0.0 ;
 
  655       if( phi< h->GetYaxis()->GetXmin() || phi>=h->GetYaxis()->GetXmax() ) 
return 0.0 ;
 
  657       Int_t bin = h->FindBin(ct,phi) ;
 
  658       return h->GetBinContent(bin) / (
r*
r) ;
 
  683       h = (TH3*) _h->Clone( _h->GetName() ) ;
 
  685       h->Scale( 1.0/h->Integral(
"width") ) ;
 
  694       h->GetRandom3(
x,
y,z) ;
 
  700       if( pos.
getX()<h->GetXaxis()->GetXmin() || pos.
getX()>=h->GetXaxis()->GetXmax() ) 
return 0.0 ;
 
  701       if( pos.
getY()<h->GetYaxis()->GetXmin() || pos.
getY()>=h->GetYaxis()->GetXmax() ) 
return 0.0 ;
 
  702       if( pos.
getZ()<h->GetZaxis()->GetXmin() || pos.
getZ()>=h->GetZaxis()->GetXmax() ) 
return 0.0 ;
 
  704       Int_t bin = h->FindBin( pos.
getX(), pos.
getY(), pos.
getZ() ) ;
 
  705       return h->GetBinContent(bin) ;
 
TCanvas * c1
Global variables to handle mouse events.
 
Double_t g1(const Double_t x)
Function.
 
Data structure for angles in three dimensions.
 
Data structure for direction in three dimensions.
 
Data structure for position in three dimensions.
 
const JPosition3D & getPosition() const
Get position.
 
double getY() const
Get y position.
 
double getLength() const
Get length.
 
double getLengthSquared() const
Get length squared.
 
double getDistance(const JVector3D &pos) const
Get distance to point.
 
double getZ() const
Get z position.
 
double getX() const
Get x position.
 
double getPhi() const
Get phi angle.
 
double getDZ() const
Get z direction.
 
Implementation of the JGenerator interface.
 
JPosition3D getPosition()
Return a randomly generated position.
 
J3DhistGenerator(TH3 *_h)
Constructor.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
Implementation of the JGenerator interface.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
JBallGenerator(double _R)
Constructor.
 
JPosition3D getPosition()
Return a randomly generated position.
 
Implementation of the JGenerator interface.
 
JPosition3D getPosition()
Return a randomly generated position.
 
JCombinedGenerator(double _c1, JGenerator *_g1, double _c2, JGenerator *_g2)
Constructor.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
Implementation of the JGenerator interface.
 
JPosition3D getPosition()
Return a randomly generated position.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
JExpRsqInvGenerator(double _lambda)
Constructor.
 
Implementation of the JGenerator interface.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
double getWeight(double r)
 
JExponentialGenerator(double _r1, double _r2, double _L)
Constructor.
 
double getIntegrand(double r)
 
JPosition3D getPosition()
Return a randomly generated position.
 
double getInvertedIntegrand(double x)
return value y such that getIntegrand(y) = x
 
Implementation of the JGenerator interface.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
JGaussianGenerator(double _sigma)
Constructor.
 
JPosition3D getPosition()
Return a randomly generated position.
 
Abstract interface for the generation of points in 3D space.
 
virtual JPosition3D getPosition()=0
Return a randomly generated position.
 
virtual double getWeight(JPosition3D pos)=0
return the weight (=probability density dP/dV) for the given position.
 
Implementation of the JGenerator interface.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
JHistGenerator(TH1 *_hx, TH1 *_hy, TH1 *_hz)
Constructor.
 
JPosition3D getPosition()
Return a randomly generated position.
 
The 'magical distributions' are a class of distributions.
 
JMagicalDistribution(unsigned int _N, double _lambda)
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
JPosition3D getPosition()
Return a randomly generated position.
 
Implementation of the JGenerator interface.
 
JShiftedGenerator(JGenerator *_g, JPosition3D _shift)
Constructor.
 
JPosition3D getPosition()
Return a randomly generated position.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
Implementation of the JGenerator interface.
 
JPosition3D getPosition()
Return a randomly generated position.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
JSingularityGenerator(double _R, JPosition3D _x0)
Constructor.
 
Implementation of the JGenerator interface.
 
JPosition3D getPosition()
Return a randomly generated position.
 
JSphereGenerator(const JPosition3D &_x0, double _r=0, TH2 *_h=NULL)
Constructor.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
Implementation of the JGenerator interface.
 
JTripleGenerator(double c1, JGenerator *g1, double c2, JGenerator *g2, double c3, JGenerator *g3)
Constructor.
 
JPosition3D getPosition()
Return a randomly generated position.
 
double getWeight(JPosition3D pos)
return the weight (=probability density dP/dV) for the given position.
 
double getWeight(T __begin, T __end)
Get total weight of data points.
 
Auxiliary classes and methods for 3D geometrical objects and operations.
 
T pow(const T &x, const double y)
Power .
 
static const double C
Physics constants.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).