Implementation of JMarkovEnsembleIntegrator interface with 1D histograms.
More...
#include <JMarkovIntegrator.hh>
|
| JMarkovEnsembleIntegrator1D (const vector< JPhotonPath > &_ensemble, JTargetModel *_trg, int _nbinsx, int _nbinsy, int _nbinsz) |
|
| ~JMarkovEnsembleIntegrator1D () |
|
void | free_scattering_vertex_gens () |
|
void | writeHistograms () |
| write the histograms filled from the ensemble More...
|
|
vector< double > | integrate (int N, int nscat, JSourceModel *src, JScatteringModel *sm, JTargetModel *trg, double lambda_abs) |
| Integrate with N samples. More...
|
|
vector< double > | dummy_integrate (int N, int nscat, JSourceModel *src, JScatteringModel *sm, JTargetModel *trg, double lambda_abs) |
| Integrate a test function with N samples. More...
|
|
vector< JPhotonPath > | get_diagnostic_ensemble (int N, int nscat, JSourceModel *src, JScatteringModel *sm, JTargetModel *trg, double lambda_abs) |
| Return photon paths generated with the generatePath method. More...
|
|
Implementation of JMarkovEnsembleIntegrator interface with 1D histograms.
Definition at line 313 of file JMarkovIntegrator.hh.
◆ JMarkovEnsembleIntegrator1D()
JMARKOV::JMarkovEnsembleIntegrator1D::JMarkovEnsembleIntegrator1D |
( |
const vector< JPhotonPath > & |
_ensemble, |
|
|
JTargetModel * |
_trg, |
|
|
int |
_nbinsx, |
|
|
int |
_nbinsy, |
|
|
int |
_nbinsz |
|
) |
| |
|
inline |
◆ ~JMarkovEnsembleIntegrator1D()
JMARKOV::JMarkovEnsembleIntegrator1D::~JMarkovEnsembleIntegrator1D |
( |
| ) |
|
|
inline |
◆ free_scattering_vertex_gens()
void JMARKOV::JMarkovEnsembleIntegrator1D::free_scattering_vertex_gens |
( |
| ) |
|
|
inline |
Definition at line 324 of file JMarkovIntegrator.hh.
325 for( vector<JHistGenerator*>::iterator it=
gens.begin() ; it!=
gens.end() ; ++it ) {
326 if( *it != NULL )
delete *it ;
◆ writeHistograms()
void JMARKOV::JMarkovEnsembleIntegrator1D::writeHistograms |
( |
| ) |
|
|
inlinevirtual |
◆ init_scattering_vertex_generators()
void JMARKOV::JMarkovEnsembleIntegrator1D::init_scattering_vertex_generators |
( |
int |
nscat | ) |
|
|
inlineprotectedvirtual |
Implements JMARKOV::JMarkovEnsembleIntegrator.
Definition at line 347 of file JMarkovIntegrator.hh.
350 if( (
int)
gens.size() < ilast )
gens.resize( ilast, NULL ) ;
351 for(
int nv=1 ; nv<=nscat ; ++nv ) {
352 int index = ifirst + nv - 1 ;
354 double xmin = 1.0/0.0 ;
355 double xmax = -1.0/0.0 ;
356 double ymin = 1.0/0.0 ;
357 double ymax = -1.0/0.0 ;
358 double zmin = 1.0/0.0 ;
359 double zmax = -1.0/0.0 ;
360 for( vector<JPhotonPath>::iterator it=
ensemble.begin() ; it!=
ensemble.end() ; ++it ) {
361 if( it->n-2 != nscat ) continue ;
362 JPosition3D vtx( (*it)[nv] ) ;
363 if( vtx.getX()<xmin ) xmin = vtx.getX() ;
364 if( vtx.getX()>xmax ) xmax = vtx.getX() ;
365 if( vtx.getY()<ymin ) ymin = vtx.getY() ;
366 if( vtx.getY()>ymax ) ymax = vtx.getY() ;
367 if( vtx.getZ()<zmin ) zmin = vtx.getZ() ;
368 if( vtx.getZ()>zmax ) zmax = vtx.getZ() ;
372 sprintf( hname,
"hx_nscat%i_vtx%i", nscat, nv ) ;
373 TH1F hx(hname,
"Vertex position;X",
nbinsx,xmin,xmax) ;
374 sprintf( hname,
"hy_nscat%i_vtx%i", nscat, nv ) ;
375 TH1F hy(hname,
"Vertex position;Y",
nbinsy,ymin,ymax) ;
376 sprintf( hname,
"hz_nscat%i_vtx%i", nscat, nv ) ;
377 TH1F hz(hname,
"Vertex position;Z",
nbinsz,zmin,zmax) ;
379 for( vector<JPhotonPath>::iterator it=
ensemble.begin() ; it!=
ensemble.end() ; ++it ) {
380 if( it->n-2 != nscat ) continue ;
381 JPosition3D vtx( (*it)[nv] ) ;
382 hx.Fill( vtx.getX() ) ;
383 hy.Fill( vtx.getY() ) ;
384 hz.Fill( vtx.getZ() ) ;
387 for( Int_t bin=1 ; bin<=hx.GetNbinsX() ; ++bin )
388 hx.AddBinContent(bin,1) ;
389 for( Int_t bin=1 ; bin<=hy.GetNbinsX() ; ++bin )
390 hy.AddBinContent(bin,1) ;
391 for( Int_t bin=1 ; bin<=hz.GetNbinsX() ; ++bin )
392 hz.AddBinContent(bin,1) ;
◆ generateScatteringVertexPosition()
JPosition3D JMARKOV::JMarkovEnsembleIntegrator1D::generateScatteringVertexPosition |
( |
int |
nscat, |
|
|
int |
nv, |
|
|
double & |
winv |
|
) |
| |
|
inlineprotectedvirtual |
◆ generatePosition()
JPosition3D JMARKOV::JMarkovEnsembleIntegrator::generatePosition |
( |
int |
nscat, |
|
|
int |
nv, |
|
|
double & |
winv |
|
) |
| |
|
inlineprotectedvirtualinherited |
◆ getIndex()
int JMARKOV::JMarkovEnsembleIntegrator::getIndex |
( |
int |
nv, |
|
|
int |
nscat |
|
) |
| |
|
inlineprotectedinherited |
return the internal index for a given number of scatterings and vertex number
Definition at line 251 of file JMarkovIntegrator.hh.
259 return (nscat*(nscat-1))/2 + nv - 1 ;
◆ initgenerators()
void JMARKOV::JMarkovEnsembleIntegrator::initgenerators |
( |
int |
nscat | ) |
|
|
inlineprotectedinherited |
initialize the position generators for a given number of scatterings (i.e. create histograms and fill them from the ensemble)
Definition at line 263 of file JMarkovIntegrator.hh.
◆ init_target_generator()
void JMARKOV::JMarkovEnsembleIntegrator::init_target_generator |
( |
int |
nscat | ) |
|
|
inlineprotectedinherited |
initialize the generator for a target vertex for a given number of scatterings
Definition at line 272 of file JMarkovIntegrator.hh.
278 sprintf( hname,
"htarget_nscat%i", nscat ) ;
279 TH2D* ht =
new TH2D(hname,
";cos(#theta);#phi",100,-1,1,100,-M_PI,M_PI) ;
280 for( vector<JPhotonPath>::iterator it=
ensemble.begin() ; it!=
ensemble.end() ; ++it ) {
281 if( it->n-2 != nscat ) continue ;
283 ht->Fill( dir.getDZ(), dir.getPhi() ) ;
◆ free_target_gens()
void JMARKOV::JMarkovEnsembleIntegrator::free_target_gens |
( |
| ) |
|
|
inlineprotectedinherited |
◆ integrate()
Integrate with N samples.
Returns a vector with the contribution to the integral of each sample. The mean of those values is the estimate of the result of the integral, while the distribution itself can be used to estimate the stability of the result. In this distribution, you want to avoid
- long tails (because they make the result unstable)
- small contributions (because it means that parts of the parameter space are being oversampled, so it is less efficient) This can be achieved by tuning the sample distribution to the problem at hand.
Definition at line 130 of file JMarkovIntegrator.hh.
131 vector<double> contributions(N,-1) ;
133 for(
int i=0 ; i<N ; ++i ) {
138 contributions[i] = rho * winv ;
140 return contributions ;
◆ dummy_integrate()
Integrate a test function with N samples.
This can be used as a sanity check for derived classes of JMarkovIntegrator.
The integral should yield 1 when the complete relevant part of the volume is taken into account. If it does not, it may be a sign that the implementation is not correct.
Returns a vector with the contribution to the integral of each sample.
Definition at line 143 of file JMarkovIntegrator.hh.
144 vector<double> contributions(N,-1) ;
146 for(
int i=0 ; i<N ; ++i ) {
147 const double r = 10 ;
150 double rho = 1.0/(4.0/3.0*M_PI*
r*
r*
r) ;
151 if( p[1].getLength()>
r ) rho = 0 ;
152 contributions[i] = rho * winv ;
154 return contributions ;
◆ get_diagnostic_ensemble()
Return photon paths generated with the generatePath method.
This can be used to identify the parts of parameter space that are over- or undersampled in a given problem so that the integrator may be optimized to handle those better.
Definition at line 157 of file JMarkovIntegrator.hh.
158 vector<JPhotonPath> paths ;
160 for(
int i=0 ; i<N ; ++i ) {
◆ generatePath()
virtual JPhotonPath JMARKOV::JMarkovIntegrator::generatePath |
( |
int |
nscat, |
|
|
double & |
winv |
|
) |
| |
|
inlineprotectedvirtualinherited |
Generate a random photon path with a given number of scatterings.
winv must be set to the inverted probability density to generate this particular path.
Definition at line 94 of file JMarkovIntegrator.hh.
99 for(
int nv=0 ; nv<nscat+2 ; ++nv ) {
◆ gens
◆ target_gens
◆ ensemble
◆ nbinsx
int JMARKOV::JMarkovEnsembleIntegrator::nbinsx |
|
protectedinherited |
◆ nbinsy
int JMARKOV::JMarkovEnsembleIntegrator::nbinsy |
|
protectedinherited |
◆ nbinsz
int JMARKOV::JMarkovEnsembleIntegrator::nbinsz |
|
protectedinherited |
◆ trg
◆ source_position
JPosition3D JMARKOV::JMarkovEnsembleIntegrator::source_position |
|
protectedinherited |
The documentation for this class was generated from the following file:
double getPhotonPathProbabilityDensity(JPhotonPath &p, JSourceModel *src, JScatteringModel *sm, JTargetModel *trg, double lambda_abs)
Return the probability density for a photon path with the given ingredients.