14 const Double_t minm23, const Double_t maxm23,
15 const Double_t m13BinWidth, const Double_t m23BinWidth,
16 const Double_t precision,
18 const UInt_t nIncohAmp) :
23 m13BinWidth_(m13BinWidth),
24 m23BinWidth_(m23BinWidth),
25 nm13Points_(static_cast<UInt_t>((maxm13-minm13)/m13BinWidth)),
26 nm23Points_(static_cast<UInt_t>((maxm23-minm23)/m23BinWidth)),
30 const Double_t meanm13 = 0.5*(minm13 + maxm13);
31 const Double_t rangem13 = maxm13 - minm13;
32 const Double_t halfRangem13 = 0.5*rangem13;
34 const Double_t meanm23 = 0.5*(minm23 + maxm23);
35 const Double_t rangem23 = maxm23 - minm23;
36 const Double_t halfRangem23 = 0.5*rangem23;
38 const Double_t intFactor = halfRangem13*halfRangem23;
41 if (nm13Points_ == 0 || nm23Points_ == 0) {
42 std::cerr <<
"ERROR in LauDPPartialIntegralInfo constructor : Range has zero grid points in one or both of the dimensions!" << std::endl;
47 if ( (nm13Points_ * nm23Points_) > 8000000 ) {
48 std::cerr <<
"WARNING in LauDPPartialIntegralInfo constructor : The integration binning scheme has a very large number of bins, this could cause high memory consumption!" << std::endl;
49 std::cerr <<
" : In case of problems, consider using LauIsobarDynamics::setNarrowResonanceThreshold and/or LauIsobarDynamics::setIntegralBinningFactor to tune the binning behaviour." << std::endl;
57 Double_t totm13Weight(0.0), totm23Weight(0.0);
58 for (UInt_t i = 0; i < nm13Points_; ++i) {
59 totm13Weight += m13Weights_[i];
61 for (UInt_t i = 0; i < nm23Points_; ++i) {
62 totm23Weight += m23Weights_[i];
65 std::cout<<
"INFO in LauDPPartialIntegralInfo constructor : nm13Points = "<<nm13Points_<<
", nm23Points = "<<nm23Points_<<std::endl;
66 std::cout<<
" : m13BinWidth = "<<m13BinWidth_<<
", m23BinWidth = "<<m23BinWidth_<<std::endl;
67 std::cout<<
" : Integrating over m13 = "<<minm13_<<
" to "<<maxm13_<<
", m23 = "<<minm23_<<
" to "<<maxm23_<<std::endl;
68 std::cout<<
" : totm13Weight = "<<totm13Weight<<
", totm23Weight = "<<totm23Weight<<std::endl;
72 UInt_t midpoint = (nm13Points_ + 1)/2;
73 for (UInt_t i = 0; i < midpoint; ++i) {
75 UInt_t ii = nm13Points_ - 1 - i;
77 Double_t dm13 = halfRangem13*m13Points_[i];
78 Double_t m13Val = meanm13 - dm13;
79 m13Points_[i] = m13Val;
81 m13Val = meanm13 + dm13;
82 m13Points_[ii] = m13Val;
86 midpoint = (nm23Points_ +1)/2;
87 for (UInt_t i = 0; i < midpoint; i++) {
89 UInt_t ii = nm23Points_ - 1 - i;
91 Double_t dm23 = halfRangem23*m23Points_[i];
92 Double_t m23Val = meanm23 - dm23;
93 m23Points_[i] = m23Val;
95 m23Val = meanm23 + dm23;
96 m23Points_[ii] = m23Val;
100 weights_.resize( nm13Points_ );
101 efficiencies_.resize( nm13Points_ );
102 amplitudes_.resize( nm13Points_ );
103 incohIntensities_.resize( nm13Points_ );
104 for (UInt_t i = 0; i < nm13Points_; ++i) {
106 weights_[i].resize( nm23Points_ );
107 efficiencies_[i].resize( nm23Points_ );
108 amplitudes_[i].resize( nm23Points_ );
109 incohIntensities_[i].resize( nm23Points_ );
111 for (UInt_t j = 0; j < nm23Points_; ++j) {
113 Double_t weight = m13Weights_[i]*m23Weights_[j];
114 Double_t jacobian = 4.0*m13Points_[i]*m23Points_[j];
115 weight *= (jacobian*intFactor);
117 weights_[i][j] = weight;
119 amplitudes_[i][j].resize( nAmp_ );
120 incohIntensities_[i][j].resize( nIncohAmp_ );
132 stream <<
"minm13 = " << infoRecord.
getMinm13() <<
", ";
133 stream <<
"maxm13 = " << infoRecord.
getMaxm13() <<
", ";
134 stream <<
"minm23 = " << infoRecord.
getMinm23() <<
", ";
135 stream <<
"maxm23 = " << infoRecord.
getMaxm23() <<
", ";
136 stream <<
"m13BinWidth = " << infoRecord.
getM13BinWidth() <<
", ";
137 stream <<
"m23BinWidth = " << infoRecord.
getM23BinWidth() << std::endl;
Double_t getMinm13() const
Retrieve the minm13 of DP.
virtual ~LauDPPartialIntegralInfo()
Destructor.
Double_t getM23BinWidth() const
Retrieve the m23BinWidth of DP.
Class for defining (a section of) the Dalitz plot integration binning scheme.
Class for performing numerical integration routines.
void calcGaussLegendreWeights(const Int_t numPoints, std::vector< Double_t > &abscissas, std::vector< Double_t > &weights)
Calculate the Gauss-Legendre weights.
std::ostream & operator<<(std::ostream &os, const LauComplex &z)
File containing declaration of LauDPPartialIntegralInfo class.
Double_t getMaxm13() const
Retrieve the maxm13 of DP.
Double_t getMinm23() const
Retrieve the minm23 of DP.
Double_t getM13BinWidth() const
Retrieve the m13BinWidth of DP.
Double_t getMaxm23() const
Retrieve the maxm23 of DP.
File containing declaration of LauIntegrals class.