46 double upperValue,
double precision )
51 double xLower = 0.0, xUpper = 0.0;
54 double f1 = theFunc->
value( lowerValue ) - functionValue;
55 double f2 = theFunc->
value( upperValue ) - functionValue;
57 if ( f1 * f2 > 0.0 ) {
59 <<
"EvtBtoXsgammaRootFinder: No root in specified range !" << endl;
64 if ( fabs( f1 ) < precision ) {
68 if ( fabs( f2 ) < precision ) {
82 double rootGuess = 0.5 * ( lowerValue + upperValue );
83 double dxold = fabs( upperValue - lowerValue );
86 double f = theFunc->
value( rootGuess ) - functionValue;
90 dx = 0.5 * ( xUpper - xLower );
91 rootGuess = xLower + dx;
94 if ( fabs( xLower - rootGuess ) < precision ) {
99 f = theFunc->
value( rootGuess ) - functionValue;
109 <<
"EvtBtoXsgammaRootFinder: Maximum number of iterations "
110 <<
"in EvtBtoXsgammaRootFinder::foundRoot exceeded!"
111 <<
" Returning false." << endl;
117 double integ1Precision,
double integ2Precision,
int maxLoop1,
int maxLoop2,
118 double integLower,
double integUpper,
double lowerValue,
double upperValue,
132 theFunc1->
setCoeff( 1, 0, lowerValue );
133 theFunc2->
setCoeff( 1, 0, lowerValue );
135 double f1 = func1Integ.evaluate( integLower, integUpper ) -
137 func2Integ.evaluate( integLower, integUpper );
138 theFunc1->
setCoeff( 1, 0, upperValue );
139 theFunc2->
setCoeff( 1, 0, upperValue );
140 double f2 = func1Integ.evaluate( integLower, integUpper ) -
142 func2Integ.evaluate( integLower, integUpper );
144 double xLower = 0.0, xUpper = 0.0;
147 if ( f1 * f2 > 0.0 ) {
149 <<
"EvtBtoXsgammaRootFinder: No root in specified range !" << endl;
154 if ( fabs( f1 ) < precision ) {
158 if ( fabs( f2 ) < precision ) {
172 double rootGuess = 0.5 * ( lowerValue + upperValue );
173 double dxold = fabs( upperValue - lowerValue );
176 theFunc1->
setCoeff( 1, 0, rootGuess );
177 theFunc2->
setCoeff( 1, 0, rootGuess );
178 double f = func1Integ.evaluate( integLower, integUpper ) -
180 func2Integ.evaluate( integLower, integUpper );
184 dx = 0.5 * ( xUpper - xLower );
185 rootGuess = xLower + dx;
188 if ( fabs( xLower - rootGuess ) < precision ) {
193 theFunc1->
setCoeff( 1, 0, rootGuess );
194 theFunc2->
setCoeff( 1, 0, rootGuess );
195 f = func1Integ.evaluate( integLower, integUpper ) -
197 func2Integ.evaluate( integLower, integUpper );
207 <<
"EvtBtoXsgammaRootFinder: Maximum number of iterations "
208 <<
"in EvtBtoXsgammaRootFinder::foundRoot exceeded!"
209 <<
" Returning false." << endl;
double GetGaussIntegFcnRoot(EvtItgAbsFunction *theFunc1, EvtItgAbsFunction *theFunc2, double integ1Precision, double integ2Precision, int maxLoop1, int maxLoop2, double integLower, double integUpper, double lowerValue, double upperValue, double precision)