84 Bool_t showProg) : _showProgress(showProg)
113 if(scaleFactor != 1) {
122 addPoints(*funcPtr,xlo,xhi,xbins+1,prec,resolution,wmode,nEvalError,doEEVal,eeVal,hint);
133 if(rawPtr)
delete rawPtr;
138 for (i=0 ; i<
GetN() ; i++) {
162 addPoints(func,xlo,xhi,minPoints+1,prec,resolution,wmode,nEvalError,doEEVal,eeVal);
168 for (i=0 ; i<
GetN() ; i++) {
191 deque<Double_t> pointList ;
196 for (i1=0 ; i1<n1 ; i1++) {
198 pointList.push_back(x) ;
203 for (i2=0 ; i2<n2 ; i2++) {
205 pointList.push_back(x) ;
209 sort(pointList.begin(),pointList.end()) ;
212 deque<double>::iterator iter ;
214 for (iter=pointList.begin() ; iter!=pointList.end() ; ++iter) {
216 if ((*iter-last)>1e-10) {
260 for (i=1 ; i<
GetN()-1 ; i++) {
263 if (y<minVal) minVal=
y ;
264 if (y>maxVal) maxVal=
y ;
268 for (i=1 ; i<
GetN()-1 ; i++) {
298 if(minPoints <= 0 || xhi <= xlo) {
308 minPoints = samplingHint->size() ;
312 Double_t dx= (xhi-xlo)/(minPoints-1.);
317 list<Double_t>* xval = samplingHint ;
319 xval =
new list<Double_t> ;
320 for(step= 0; step < minPoints; step++) {
321 xval->push_back(xlo + step*dx) ;
329 for(list<Double_t>::iterator iter = xval->begin() ; iter!=xval->end() ; ++iter,++step) {
332 if (step==minPoints-1) xx-=1e-15 ;
334 yval[step]=
func(&xx);
352 if (yval[step]>
ymax)
ymax=yval[step] ;
353 if (yval[step]<ymin) ymin=yval[step] ;
358 Double_t minDx= resolution*(xhi-xlo);
370 list<Double_t>::iterator iter2 = xval->begin() ;
376 if (iter2==xval->end()) {
384 addRange(func,x1,x2,yval[step-1],yval[step],prec*yrangeEst,minDx,numee,doEEVal,eeVal);
391 addPoint(xhi+dx,yval[minPoints-1]) ;
399 if (xval != samplingHint) {
417 if (
fabs(x2-x1)<1e-20) {
442 if((xmid - x1 >= minDx) &&
fabs(dy)>0 &&
fabs(dy) >= minDy) {
444 addRange(func,x1,xmid,y1,ymid,minDy,minDx,numee,doEEVal,eeVal);
445 addRange(func,xmid,x2,ymid,y2,minDy,minDx,numee,doEEVal,eeVal);
519 os << IsA()->GetName() ;
529 os << indent <<
"--- RooCurve ---" << endl ;
531 os << indent <<
" Contains " << n <<
" points" << endl;
532 os << indent <<
" Graph points:" << endl;
533 for(
Int_t i= 0; i <
n; i++) {
534 os << indent << setw(3) << i <<
") x = " <<
fX[i] <<
" , y = " <<
fY[i] << endl;
553 #if ROOT_VERSION_CODE >= ROOT_VERSION(4,0,1) 564 for (i=0 ; i<np ; i++) {
567 ((
RooHist&)hist).GetPoint(i,x,y) ;
582 Double_t pull = (y>avg) ? ((y-avg)/eyl) : ((y-avg)/eyh) ;
589 return chisq / (nbin-nFitParam) ;
602 <<
") invalid range (" << xFirst <<
"," << xLast <<
")" << endl ;
613 Double_t xFirstPt,yFirstPt,xLastPt,yLastPt ;
617 Double_t tolerance=1e-3*(xLast-xFirst) ;
620 if (ilast-ifirst==1 &&(xFirstPt-xFirst)<-1*tolerance && (xLastPt-xLast)>tolerance) {
621 return 0.5*(yFirst+yLast) ;
626 if ((xFirstPt-xFirst)<-1*tolerance) {
633 if ((xLastPt-xLast)>tolerance) {
641 sum += (xFirstPt-xFirst)*(yFirst+yFirstPt)/2 ;
645 for (i=ifirst ; i<ilast ; i++) {
648 sum += (x2-
x1)*(y1+y2)/2 ;
652 sum += (xLast-xLastPt)*(yLastPt+yLast)/2 ;
653 return sum/(xLast-xFirst) ;
667 for (i=0 ; i<
n ; i++) {
668 ((
RooCurve&)*
this).GetPoint(i,x,y) ;
669 if (
fabs(xvalue-x)<delta) {
670 delta =
fabs(xvalue-x) ;
675 return (delta<tolerance)?ibest:-1 ;
695 if (
fabs(xbest-xvalue)<tolerance) {
707 if (xother==xbest)
return ybest ;
708 retVal = ybest + (yother-ybest)*(xvalue-xbest)/(xother-xbest) ;
716 if (xother==xbest)
return ybest ;
717 retVal = yother + (ybest-yother)*(xvalue-xother)/(xbest-xother) ;
739 vector<double> bandLo(
GetN()) ;
740 vector<double> bandHi(
GetN()) ;
741 for (
int i=0 ; i<
GetN() ; i++) {
745 for (
int i=0 ; i<
GetN() ; i++) {
748 for (
int i=
GetN()-1 ; i>=0 ; i--) {
771 vector<double> bandLo(
GetN()) ;
772 vector<double> bandHi(
GetN()) ;
773 for (
int i=0 ; i<
GetN() ; i++) {
777 for (
int i=0 ; i<
GetN() ; i++) {
780 for (
int i=
GetN()-1 ; i>=0 ; i--) {
796 vector<double> y_plus(plusVar.size()), y_minus(minusVar.size()) ;
798 for (vector<RooCurve*>::const_iterator iter=plusVar.begin() ; iter!=plusVar.end() ; iter++) {
799 y_plus[j++] = (*iter)->interpolate(
GetX()[i]) ;
802 for (vector<RooCurve*>::const_iterator iter=minusVar.begin() ; iter!=minusVar.end() ; iter++) {
803 y_minus[j++] = (*iter)->interpolate(
GetX()[i]) ;
810 for (j=0 ; j<
n ; j++) {
811 F[j] = (y_plus[j]-y_minus[j])/2 ;
817 lo= y_cen +
sqrt(sum) ;
818 hi= y_cen -
sqrt(sum) ;
827 vector<double>
y(variations.size()) ;
829 for (vector<RooCurve*>::const_iterator iter=variations.begin() ; iter!=variations.end() ; iter++) {
830 y[j++] = (*iter)->interpolate(
GetX()[i]) ;
837 sort(
y.begin(),
y.end()) ;
839 hi =
y[
y.size()-delta] ;
843 for (
unsigned int k=0 ; k<
y.size() ; k++) {
845 sum_ysq +=
y[k]*
y[k] ;
848 sum_ysq /=
y.size() ;
851 lo =
GetY()[i] - Z*rms ;
852 hi =
GetY()[i] + Z*rms ;
868 for(
Int_t i= 0; i <
n; i++) {
872 if (
fY[i]>ymax) ymax=
fY[i] ;
877 for(
Int_t i= 2; i < n-2; i++) {
885 cout <<
"RooCurve::isIdentical[" << i <<
"] Y tolerance exceeded (" << rdy <<
">" << tol
886 <<
"), X=" << other.
fX[i] <<
"(" <<
fX[i] <<
")" <<
" Ytest=" << yTest <<
" Yref=" << other.
fY[i] <<
" range = " << Yrange << endl ;
Double_t * GetEXlow() const
void calcBandInterval(const std::vector< RooCurve *> &variations, Int_t i, Double_t Z, Double_t &lo, Double_t &hi, Bool_t approxGauss) const
virtual const char * GetName() const
Returns name of object.
virtual void SetLineWidth(Width_t lwidth)
virtual void printTitle(std::ostream &os) const
Print the title of this curve.
static Vc_ALWAYS_INLINE int_v min(const int_v &x, const int_v &y)
Int_t findPoint(Double_t value, Double_t tolerance=1e-10) const
Find the nearest point to xvalue.
const Text_t * getUnit() const
static int pull(FILE *fp, struct mg_connection *conn, char *buf, int len)
virtual void SetName(const char *name)
Change (i.e.
void shiftCurveToZero(Double_t prevYMax)
Find lowest point in curve and move all points in curve so that lowest point will go exactly through ...
static void clearEvalErrorLog()
Clear the stack of evaluation error messages.
virtual void SetTitle(const char *title="")
Set graph title.
virtual ~RooCurve()
Destructor.
virtual void printName(std::ostream &os) const
Print name of object.
Double_t chiSquare(const RooHist &hist, int nFitParam) const
Calculate the chi^2/NDOF of this curve with respect to the histogram 'hist' accounting nFitParam floa...
static const double x2[5]
RooCurve()
Default constructor.
void initialize()
Perform initialization that is common to all curves.
if on multiple lines(like in C++). **The " * configuration fragment. * * The "import myobject continue
Parses the configuration file.
Double_t getYAxisMax() const
void setYAxisLimits(Double_t ymin, Double_t ymax)
Double_t Erfc(Double_t x)
Compute the complementary error function erfc(x).
Double_t getFitRangeNEvt() const
Return the number of events associated with the plotable object, it is always 1 for curves...
virtual void SetLineColor(Color_t lcolor)
virtual void printClassName(std::ostream &os) const
Print the class name of this curve.
VecExpr< UnaryOp< Fabs< T >, VecExpr< A, T, D >, T >, T, D > fabs(const VecExpr< A, T, D > &rhs)
virtual Int_t GetPoint(Int_t i, Double_t &x, Double_t &y) const
Get x and y values for point number i.
virtual void printMultiline(std::ostream &os, Int_t contents, Bool_t verbose=kFALSE, TString indent="") const
Print the details of this curve.
static Int_t numEvalErrors()
Return the number of logged evaluation errors since the last clearing.
virtual void SetFillColor(Color_t fcolor)
Double_t interpolate(Double_t x, Double_t tolerance=1e-10) const
Return linearly interpolated value of curve at xvalue.
char * Form(const char *fmt,...)
static Double_t infinity()
Return internal infinity representation.
void updateYAxisLimits(Double_t y)
static void printEvalErrors(std::ostream &os=std::cout, Int_t maxPerNode=10000000)
Print all outstanding logged evaluation error on the given ostream.
static void indent(ostringstream &buf, int indent_level)
Double_t getYAxisMin() const
void addPoint(Double_t x, Double_t y)
Add a point with the specified coordinates. Update our y-axis limits.
static const double x1[5]
RooAbsReal is the common abstract base class for objects that represent a real value and implements f...
RooAbsFunc * bindVars(const RooArgSet &vars, const RooArgSet *nset=0, Bool_t clipInvalid=kFALSE) const
Create an interface adaptor f(vars) that binds us to the specified variables (in arbitrary order)...
double func(double *x, double *p)
void addPoints(const RooAbsFunc &func, Double_t xlo, Double_t xhi, Int_t minPoints, Double_t prec, Double_t resolution, WingMode wmode, Int_t numee=0, Bool_t doEEVal=kFALSE, Double_t eeVal=0., std::list< Double_t > *samplingHint=0)
Add points calculated with the specified function, over the range (xlo,xhi).
Bool_t isIdentical(const RooCurve &other, Double_t tol=1e-6) const
Return true if curve is identical to other curve allowing for given absolute tolerance on each point ...
static Vc_ALWAYS_INLINE int_v max(const int_v &x, const int_v &y)
virtual std::list< Double_t > * plotSamplingHint(RooAbsRealLValue &, Double_t, Double_t) const
virtual void SetPoint(Int_t i, Double_t x, Double_t y)
Set x and y values for point number i.
Double_t * GetEYlow() const
Double_t * GetEYhigh() const
void addRange(const RooAbsFunc &func, Double_t x1, Double_t x2, Double_t y1, Double_t y2, Double_t minDy, Double_t minDx, Int_t numee=0, Bool_t doEEVal=kFALSE, Double_t eeVal=0.)
Fill the range (x1,x2) with points calculated using func(&x).
Double_t average(Double_t lo, Double_t hi) const
Return average curve value in [xFirst,xLast] by integrating curve between points and dividing by xLas...
float type_of_call hi(const int &, const int &)
void setYAxisLabel(const char *label)
Double_t * GetEXhigh() const
std::complex< float_v > Z
Double_t getFitRangeBinW() const
Get the bin width associated with this plotable object.
RooCurve * makeErrorBand(const std::vector< RooCurve *> &variations, Double_t Z=1) const
Construct filled RooCurve represented error band that captures alpha% of the variations of the curves...
virtual const char * GetTitle() const
Returns title of object.