61 ClassImp(RooAbsRealLValue);
66 RooAbsRealLValue::RooAbsRealLValue(
const char *name,
const char *title,
const char *unit) :
67 RooAbsReal(name, title, 0, 0, unit)
76 RooAbsRealLValue::RooAbsRealLValue(
const RooAbsRealLValue& other,
const char* name) :
77 RooAbsReal(other,name), RooAbsLValue(other)
85 RooAbsRealLValue::~RooAbsRealLValue()
95 Bool_t RooAbsRealLValue::inRange(Double_t value,
const char* rangeName, Double_t* clippedValPtr)
const
98 Double_t clippedValue(value);
99 Bool_t isInRange(kTRUE) ;
101 const RooAbsBinning& binning = getBinning(rangeName) ;
102 Double_t min = binning.lowBound() ;
103 Double_t max = binning.highBound() ;
106 if(!RooNumber::isInfinite(max) && value > (max+1e-6)) {
115 if(!RooNumber::isInfinite(min) && value < min-1e-6) {
124 if (clippedValPtr) *clippedValPtr=clippedValue ;
134 Bool_t RooAbsRealLValue::isValidReal(Double_t value, Bool_t verbose)
const
136 if (!inRange(value,0)) {
138 coutI(InputArguments) <<
"RooRealVar::isValid(" << GetName() <<
"): value " << value
139 <<
" out of range (" << getMin() <<
" - " << getMax() <<
")" << endl ;
150 Bool_t RooAbsRealLValue::readFromStream(istream& , Bool_t , Bool_t )
160 void RooAbsRealLValue::writeToStream(ostream& , Bool_t )
const
169 RooAbsArg& RooAbsRealLValue::operator=(Double_t newValue)
173 inRange(newValue,0,&clipValue) ;
183 RooAbsArg& RooAbsRealLValue::operator=(
const RooAbsReal& arg)
185 return operator=(arg.getVal()) ;
209 RooPlot* RooAbsRealLValue::frame(
const RooCmdArg& arg1,
const RooCmdArg& arg2,
const RooCmdArg& arg3,
const RooCmdArg& arg4,
210 const RooCmdArg& arg5,
const RooCmdArg& arg6,
const RooCmdArg& arg7,
const RooCmdArg& arg8)
const
212 RooLinkedList cmdList ;
213 cmdList.Add(const_cast<RooCmdArg*>(&arg1)) ; cmdList.Add(const_cast<RooCmdArg*>(&arg2)) ;
214 cmdList.Add(const_cast<RooCmdArg*>(&arg3)) ; cmdList.Add(const_cast<RooCmdArg*>(&arg4)) ;
215 cmdList.Add(const_cast<RooCmdArg*>(&arg5)) ; cmdList.Add(const_cast<RooCmdArg*>(&arg6)) ;
216 cmdList.Add(const_cast<RooCmdArg*>(&arg7)) ; cmdList.Add(const_cast<RooCmdArg*>(&arg8)) ;
218 return frame(cmdList) ;
226 RooPlot* RooAbsRealLValue::frame(
const RooLinkedList& cmdList)
const
229 RooCmdConfig pc(Form(
"RooAbsRealLValue::frame(%s)",GetName())) ;
230 pc.defineDouble(
"min",
"Range",0,getMin()) ;
231 pc.defineDouble(
"max",
"Range",1,getMax()) ;
232 pc.defineInt(
"nbins",
"Bins",0,getBins()) ;
233 pc.defineString(
"rangeName",
"RangeWithName",0,
"") ;
234 pc.defineString(
"name",
"Name",0,
"") ;
235 pc.defineString(
"title",
"Title",0,
"") ;
236 pc.defineMutex(
"Range",
"RangeWithName",
"AutoRange") ;
237 pc.defineObject(
"rangeData",
"AutoRange",0,0) ;
238 pc.defineDouble(
"rangeMargin",
"AutoRange",0,0.1) ;
239 pc.defineInt(
"rangeSym",
"AutoRange",0,0) ;
242 pc.process(cmdList) ;
248 Double_t xmin(getMin()),xmax(getMax()) ;
249 if (pc.hasProcessed(
"Range")) {
250 xmin = pc.getDouble(
"min") ;
251 xmax = pc.getDouble(
"max") ;
256 }
else if (pc.hasProcessed(
"RangeWithName")) {
257 const char* rangeName=pc.getString(
"rangeName",0,kTRUE) ;
258 xmin = getMin(rangeName) ;
259 xmax = getMax(rangeName) ;
260 }
else if (pc.hasProcessed(
"AutoRange")) {
261 RooTreeData* rangeData =
static_cast<RooTreeData*
>(pc.getObject(
"rangeData")) ;
262 rangeData->getRange((RooRealVar&)*
this,xmin,xmax) ;
263 if (pc.getInt(
"rangeSym")==0) {
265 Double_t margin = pc.getDouble(
"rangeMargin")*(xmax-xmin) ;
268 if (xmin<getMin()) xmin = getMin() ;
269 if (xmin>getMax()) xmax = getMax() ;
273 Double_t dmean = rangeData->moment((RooRealVar&)*
this,1) ;
274 Double_t ddelta = ((xmax-dmean)>(dmean-xmin)?(xmax-dmean):(dmean-xmin))*(1+pc.getDouble(
"rangeMargin")) ;
275 xmin = dmean-ddelta ;
276 xmax = dmean+ddelta ;
277 if (xmin<getMin()) xmin = getMin() ;
278 if (xmin>getMax()) xmax = getMax() ;
285 Int_t nbins = pc.getInt(
"nbins") ;
286 const char* name = pc.getString(
"name",0,kTRUE) ;
287 const char* title = pc.getString(
"title",0,kTRUE) ;
289 RooPlot* theFrame =
new RooPlot(*
this,xmin,xmax,nbins) ;
292 theFrame->SetName(name) ;
295 theFrame->SetTitle(title) ;
309 RooPlot *RooAbsRealLValue::frame(Double_t xlo, Double_t xhi, Int_t nbins)
const
311 return new RooPlot(*
this,xlo,xhi,nbins);
322 RooPlot *RooAbsRealLValue::frame(Double_t xlo, Double_t xhi)
const
324 return new RooPlot(*
this,xlo,xhi,getBins());
337 RooPlot *RooAbsRealLValue::frame(Int_t nbins)
const
340 if (getMin()==getMax()) {
341 coutE(InputArguments) <<
"RooAbsRealLValue::frame(" << GetName() <<
") ERROR: empty fit range, must specify plot range" << endl ;
344 if (RooNumber::isInfinite(getMin())||RooNumber::isInfinite(getMax())) {
345 coutE(InputArguments) <<
"RooAbsRealLValue::frame(" << GetName() <<
") ERROR: open ended fit range, must specify plot range" << endl ;
349 return new RooPlot(*
this,getMin(),getMax(),nbins);
362 RooPlot *RooAbsRealLValue::frame()
const
365 if (getMin()==getMax()) {
366 coutE(InputArguments) <<
"RooAbsRealLValue::frame(" << GetName() <<
") ERROR: empty fit range, must specify plot range" << endl ;
369 if (RooNumber::isInfinite(getMin())||RooNumber::isInfinite(getMax())) {
370 coutE(InputArguments) <<
"RooAbsRealLValue::frame(" << GetName() <<
") ERROR: open ended fit range, must specify plot range" << endl ;
374 return new RooPlot(*
this,getMin(),getMax(),getBins());
382 void RooAbsRealLValue::copyCache(
const RooAbsArg* source, Bool_t valueOnly, Bool_t setValDirty)
384 RooAbsReal::copyCache(source,valueOnly,setValDirty) ;
392 void RooAbsRealLValue::printMultiline(ostream& os, Int_t contents, Bool_t verbose, TString indent)
const
394 RooAbsReal::printMultiline(os,contents,verbose,indent);
395 os << indent <<
"--- RooAbsRealLValue ---" << endl;
397 if(!unit.IsNull()) unit.Prepend(
' ');
398 os << indent <<
" Fit range is [ ";
400 os << getMin() << unit <<
" , ";
406 os << getMax() << unit <<
" ]" << endl;
409 os <<
"+INF ]" << endl;
419 void RooAbsRealLValue::randomize(
const char* rangeName)
421 RooAbsBinning& binning = getBinning(rangeName) ;
422 Double_t min = binning.lowBound() ;
423 Double_t max = binning.highBound() ;
425 if(!RooNumber::isInfinite(min) && !RooNumber::isInfinite(max)) {
426 setValFast(min + RooRandom::uniform()*(max-min));
429 coutE(Generation) << fName <<
"::" << ClassName() <<
":randomize: fails with unbounded fit range" << endl;
439 void RooAbsRealLValue::setBin(Int_t ibin,
const char* rangeName)
442 if (ibin<0 || ibin>=numBins(rangeName)) {
443 coutE(InputArguments) <<
"RooAbsRealLValue::setBin(" << GetName() <<
") ERROR: bin index " << ibin
444 <<
" is out of range (0," << getBins(rangeName)-1 <<
")" << endl ;
449 setVal(getBinning(rangeName).binCenter(ibin)) ;
459 void RooAbsRealLValue::setBin(Int_t ibin,
const RooAbsBinning& binning)
462 setVal(binning.binCenter(ibin)) ;
473 void RooAbsRealLValue::randomize(
const RooAbsBinning& binning)
475 Double_t range= binning.highBound() - binning.lowBound() ;
476 setVal(binning.lowBound() + RooRandom::uniform()*range);
487 void RooAbsRealLValue::setBinFast(Int_t ibin,
const RooAbsBinning& binning)
490 setValFast(binning.binCenter(ibin)) ;
499 Bool_t RooAbsRealLValue::fitRangeOKForPlotting()
const
501 return (hasMin() && hasMax() && (getMin()!=getMax())) ;
509 Bool_t RooAbsRealLValue::inRange(
const char* name)
const
511 Double_t val = getVal() ;
512 Double_t epsilon = 1e-8 * fabs(val) ;
513 return (val >= getMin(name)-epsilon && val <= getMax(name)+epsilon) ;
520 TH1* RooAbsRealLValue::createHistogram(
const char *name,
const RooCmdArg& arg1,
const RooCmdArg& arg2,
521 const RooCmdArg& arg3,
const RooCmdArg& arg4,
const RooCmdArg& arg5,
522 const RooCmdArg& arg6,
const RooCmdArg& arg7,
const RooCmdArg& arg8)
const
545 l.Add((TObject*)&arg1) ; l.Add((TObject*)&arg2) ;
546 l.Add((TObject*)&arg3) ; l.Add((TObject*)&arg4) ;
547 l.Add((TObject*)&arg5) ; l.Add((TObject*)&arg6) ;
548 l.Add((TObject*)&arg7) ; l.Add((TObject*)&arg8) ;
550 return createHistogram(name,l) ;
564 TH1* RooAbsRealLValue::createHistogram(
const char *name,
const RooLinkedList& cmdList)
const
567 RooCmdConfig pc(Form(
"RooAbsRealLValue::createHistogram(%s)",GetName())) ;
569 pc.defineObject(
"xbinning",
"Binning",0,0) ;
570 pc.defineString(
"xbinningName",
"BinningName",0,
"") ;
571 pc.defineInt(
"nxbins",
"BinningSpec",0) ;
572 pc.defineDouble(
"xlo",
"BinningSpec",0,0) ;
573 pc.defineDouble(
"xhi",
"BinningSpec",1,0) ;
575 pc.defineObject(
"yvar",
"YVar",0,0) ;
576 pc.defineObject(
"ybinning",
"YVar::Binning",0,0) ;
577 pc.defineString(
"ybinningName",
"YVar::BinningName",0,
"") ;
578 pc.defineInt(
"nybins",
"YVar::BinningSpec",0) ;
579 pc.defineDouble(
"ylo",
"YVar::BinningSpec",0,0) ;
580 pc.defineDouble(
"yhi",
"YVar::BinningSpec",1,0) ;
582 pc.defineObject(
"zvar",
"ZVar",0,0) ;
583 pc.defineObject(
"zbinning",
"ZVar::Binning",0,0) ;
584 pc.defineString(
"zbinningName",
"ZVar::BinningName",0,
"") ;
585 pc.defineInt(
"nzbins",
"ZVar::BinningSpec",0) ;
586 pc.defineDouble(
"zlo",
"ZVar::BinningSpec",0,0) ;
587 pc.defineDouble(
"zhi",
"ZVar::BinningSpec",1,0) ;
589 pc.defineString(
"axisLabel",
"AxisLabel",0,
"Events") ;
591 pc.defineDependency(
"ZVar",
"YVar") ;
594 pc.process(cmdList) ;
600 const char* axisLabel = pc.getString(
"axisLabel") ;
601 const RooAbsBinning* binning[3] ;
602 Bool_t ownBinning[3] = { kFALSE, kFALSE, kFALSE } ;
607 if (pc.hasProcessed(
"Binning")) {
608 binning[0] =
static_cast<RooAbsBinning*
>(pc.getObject(
"xbinning")) ;
609 }
else if (pc.hasProcessed(
"BinningName")) {
610 binning[0] = &getBinning(pc.getString(
"xbinningName",0,kTRUE)) ;
611 }
else if (pc.hasProcessed(
"BinningSpec")) {
612 Double_t xlo = pc.getDouble(
"xlo") ;
613 Double_t xhi = pc.getDouble(
"xhi") ;
614 binning[0] =
new RooUniformBinning((xlo==xhi)?getMin():xlo,(xlo==xhi)?getMax():xhi,pc.getInt(
"nxbins")) ;
615 ownBinning[0] = kTRUE ;
617 binning[0] = &getBinning() ;
620 if (pc.hasProcessed(
"YVar")) {
621 RooAbsRealLValue& yvar = *
static_cast<RooAbsRealLValue*
>(pc.getObject(
"yvar")) ;
623 if (pc.hasProcessed(
"YVar::Binning")) {
624 binning[1] =
static_cast<RooAbsBinning*
>(pc.getObject(
"ybinning")) ;
625 }
else if (pc.hasProcessed(
"YVar::BinningName")) {
626 binning[1] = &yvar.getBinning(pc.getString(
"ybinningName",0,kTRUE)) ;
627 }
else if (pc.hasProcessed(
"YVar::BinningSpec")) {
628 Double_t ylo = pc.getDouble(
"ylo") ;
629 Double_t yhi = pc.getDouble(
"yhi") ;
630 binning[1] =
new RooUniformBinning((ylo==yhi)?yvar.getMin():ylo,(ylo==yhi)?yvar.getMax():yhi,pc.getInt(
"nybins")) ;
631 ownBinning[1] = kTRUE ;
633 binning[1] = &yvar.getBinning() ;
637 if (pc.hasProcessed(
"ZVar")) {
638 RooAbsRealLValue& zvar = *
static_cast<RooAbsRealLValue*
>(pc.getObject(
"zvar")) ;
640 if (pc.hasProcessed(
"ZVar::Binning")) {
641 binning[2] =
static_cast<RooAbsBinning*
>(pc.getObject(
"zbinning")) ;
642 }
else if (pc.hasProcessed(
"ZVar::BinningName")) {
643 binning[2] = &zvar.getBinning(pc.getString(
"zbinningName",0,kTRUE)) ;
644 }
else if (pc.hasProcessed(
"ZVar::BinningSpec")) {
645 Double_t zlo = pc.getDouble(
"zlo") ;
646 Double_t zhi = pc.getDouble(
"zhi") ;
647 binning[2] =
new RooUniformBinning((zlo==zhi)?zvar.getMin():zlo,(zlo==zhi)?zvar.getMax():zhi,pc.getInt(
"nzbins")) ;
648 ownBinning[2] = kTRUE ;
650 binning[2] = &zvar.getBinning() ;
655 TH1* ret = createHistogram(name, vars, axisLabel, binning) ;
657 if (ownBinning[0])
delete binning[0] ;
658 if (ownBinning[1])
delete binning[1] ;
659 if (ownBinning[2])
delete binning[2] ;
673 TH1F *RooAbsRealLValue::createHistogram(
const char *name,
const char *yAxisLabel)
const
676 if (!fitRangeOKForPlotting()) {
677 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
678 <<
") ERROR: fit range empty or open ended, must explicitly specify range" << endl ;
682 RooArgList list(*
this) ;
683 Double_t xlo = getMin() ;
684 Double_t xhi = getMax() ;
685 Int_t nbins = getBins() ;
688 return (TH1F*)createHistogram(name, list, yAxisLabel, &xlo, &xhi, &nbins);
700 TH1F *RooAbsRealLValue::createHistogram(
const char *name,
const char *yAxisLabel, Double_t xlo, Double_t xhi, Int_t nBins)
const
702 RooArgList list(*
this) ;
705 return (TH1F*)createHistogram(name, list, yAxisLabel, &xlo, &xhi, &nBins);
713 TH1F *RooAbsRealLValue::createHistogram(
const char *name,
const char *yAxisLabel,
const RooAbsBinning& bins)
const
715 RooArgList list(*
this) ;
716 const RooAbsBinning* pbins = &bins ;
719 return (TH1F*)createHistogram(name, list, yAxisLabel, &pbins);
731 TH2F *RooAbsRealLValue::createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
const char *zAxisLabel,
732 Double_t* xlo, Double_t* xhi, Int_t* nBins)
const
734 if ((!xlo && xhi) || (xlo && !xhi)) {
735 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
736 <<
") ERROR must specify either no range, or both limits" << endl ;
740 Double_t xlo_fit[2] ;
741 Double_t xhi_fit[2] ;
744 Double_t *xlo2 = xlo;
745 Double_t *xhi2 = xhi;
746 Int_t *nBins2 = nBins;
750 if (!fitRangeOKForPlotting()) {
751 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
752 <<
") ERROR: fit range empty or open ended, must explicitly specify range" << endl ;
755 if (!yvar.fitRangeOKForPlotting()) {
756 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
757 <<
") ERROR: fit range of " << yvar.GetName() <<
" empty or open ended, must explicitly specify range" << endl ;
761 xlo_fit[0] = getMin() ;
762 xhi_fit[0] = getMax() ;
764 xlo_fit[1] = yvar.getMin() ;
765 xhi_fit[1] = yvar.getMax() ;
772 nbins_fit[0] = getBins() ;
773 nbins_fit[1] = yvar.getBins() ;
778 RooArgList list(*
this,yvar) ;
780 return (TH2F*)createHistogram(name, list, zAxisLabel, xlo2, xhi2, nBins2);
789 TH2F *RooAbsRealLValue::createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
790 const char *zAxisLabel,
const RooAbsBinning** bins)
const
792 RooArgList list(*
this,yvar) ;
793 return (TH2F*)createHistogram(name, list, zAxisLabel, bins);
805 TH3F *RooAbsRealLValue::createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
const RooAbsRealLValue &zvar,
806 const char *tAxisLabel, Double_t* xlo, Double_t* xhi, Int_t* nBins)
const
808 if ((!xlo && xhi) || (xlo && !xhi)) {
809 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
810 <<
") ERROR must specify either no range, or both limits" << endl ;
814 Double_t xlo_fit[3] ;
815 Double_t xhi_fit[3] ;
818 Double_t *xlo2 = xlo;
819 Double_t *xhi2 = xhi;
820 Int_t* nBins2 = nBins;
823 if (!fitRangeOKForPlotting()) {
824 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
825 <<
") ERROR: fit range empty or open ended, must explicitly specify range" << endl ;
828 if (!yvar.fitRangeOKForPlotting()) {
829 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
830 <<
") ERROR: fit range of " << yvar.GetName() <<
" empty or open ended, must explicitly specify range" << endl ;
833 if (!zvar.fitRangeOKForPlotting()) {
834 coutE(InputArguments) <<
"RooAbsRealLValue::createHistogram(" << GetName()
835 <<
") ERROR: fit range of " << zvar.GetName() <<
" empty or open ended, must explicitly specify range" << endl ;
839 xlo_fit[0] = getMin() ;
840 xhi_fit[0] = getMax() ;
842 xlo_fit[1] = yvar.getMin() ;
843 xhi_fit[1] = yvar.getMax() ;
845 xlo_fit[2] = zvar.getMin() ;
846 xhi_fit[2] = zvar.getMax() ;
853 nbins_fit[0] = getBins() ;
854 nbins_fit[1] = yvar.getBins() ;
855 nbins_fit[2] = zvar.getBins() ;
859 RooArgList list(*
this,yvar,zvar) ;
860 return (TH3F*)createHistogram(name, list, tAxisLabel, xlo2, xhi2, nBins2);
864 TH3F *RooAbsRealLValue::createHistogram(
const char *name,
const RooAbsRealLValue &yvar,
const RooAbsRealLValue &zvar,
865 const char* tAxisLabel,
const RooAbsBinning** bins)
const
870 RooArgList list(*
this,yvar,zvar) ;
871 return (TH3F*)createHistogram(name, list, tAxisLabel, bins);
883 TH1 *RooAbsRealLValue::createHistogram(
const char *name, RooArgList &vars,
const char *tAxisLabel,
884 Double_t* xlo, Double_t* xhi, Int_t* nBins)
886 const RooAbsBinning* bin[3] ;
887 Int_t ndim = vars.getSize() ;
888 bin[0] =
new RooUniformBinning(xlo[0],xhi[0],nBins[0]) ;
889 bin[1] = (ndim>1) ?
new RooUniformBinning(xlo[1],xhi[1],nBins[1]) : 0 ;
890 bin[2] = (ndim>2) ?
new RooUniformBinning(xlo[2],xhi[2],nBins[2]) : 0 ;
892 TH1* ret = createHistogram(name,vars,tAxisLabel,bin) ;
894 if (bin[0])
delete bin[0] ;
895 if (bin[1])
delete bin[1] ;
896 if (bin[2])
delete bin[2] ;
909 TH1 *RooAbsRealLValue::createHistogram(
const char *name, RooArgList &vars,
const char *tAxisLabel,
const RooAbsBinning** bins)
912 Int_t dim= vars.getSize();
913 if(dim < 1 || dim > 3) {
914 oocoutE((TObject*)0,InputArguments) <<
"RooAbsReal::createHistogram: dimension not supported: " << dim << endl;
919 TString histName(name);
920 histName.Append(
"_");
921 const RooAbsRealLValue *xyz[3];
924 for(index= 0; index < dim; index++) {
925 const RooAbsArg *arg= vars.at(index);
926 xyz[index]=
dynamic_cast<const RooAbsRealLValue*
>(arg);
928 oocoutE((TObject*)0,InputArguments) <<
"RooAbsRealLValue::createHistogram: variable is not real lvalue: " << arg->GetName() << endl;
931 histName.Append(
"_");
932 histName.Append(arg->GetName());
934 TString histTitle(histName);
935 histTitle.Prepend(
"Histogram of ");
941 if (bins[0]->isUniform()) {
942 histogram=
new TH1F(histName.Data(), histTitle.Data(),
943 bins[0]->numBins(),bins[0]->lowBound(),bins[0]->highBound());
945 histogram=
new TH1F(histName.Data(), histTitle.Data(),
946 bins[0]->numBins(),bins[0]->array());
950 if (bins[0]->isUniform() && bins[1]->isUniform()) {
951 histogram=
new TH2F(histName.Data(), histTitle.Data(),
952 bins[0]->numBins(),bins[0]->lowBound(),bins[0]->highBound(),
953 bins[1]->numBins(),bins[1]->lowBound(),bins[1]->highBound());
955 histogram=
new TH2F(histName.Data(), histTitle.Data(),
956 bins[0]->numBins(),bins[0]->array(),
957 bins[1]->numBins(),bins[1]->array());
961 if (bins[0]->isUniform() && bins[1]->isUniform() && bins[2]->isUniform()) {
962 histogram=
new TH3F(histName.Data(), histTitle.Data(),
963 bins[0]->numBins(),bins[0]->lowBound(),bins[0]->highBound(),
964 bins[1]->numBins(),bins[1]->lowBound(),bins[1]->highBound(),
965 bins[2]->numBins(),bins[2]->lowBound(),bins[2]->highBound()) ;
967 histogram=
new TH3F(histName.Data(), histTitle.Data(),
968 bins[0]->numBins(),bins[0]->array(),
969 bins[1]->numBins(),bins[1]->array(),
970 bins[2]->numBins(),bins[2]->array()) ;
975 oocoutE((TObject*)0,InputArguments) <<
"RooAbsReal::createHistogram: unable to create a new histogram" << endl;
980 for(index= 0; index < dim; index++) {
981 TString axisTitle(xyz[index]->getTitle(kTRUE));
984 histogram->SetXTitle(axisTitle.Data());
987 histogram->SetYTitle(axisTitle.Data());
990 histogram->SetZTitle(axisTitle.Data());
999 if((0 != tAxisLabel) && (0 != strlen(tAxisLabel))) {
1000 TString axisTitle(tAxisLabel);
1001 axisTitle.Append(
" / ( ");
1002 for(Int_t index2= 0; index2 < dim; index2++) {
1003 Double_t delta= bins[index2]->averageBinWidth() ;
1004 if(index2 > 0) axisTitle.Append(
" x ");
1005 axisTitle.Append(Form(
"%g",delta));
1006 if(strlen(xyz[index2]->getUnit())) {
1007 axisTitle.Append(
" ");
1008 axisTitle.Append(xyz[index2]->getUnit());
1011 axisTitle.Append(
" )");
1014 histogram->SetYTitle(axisTitle.Data());
1017 histogram->SetZTitle(axisTitle.Data());
1032 Bool_t RooAbsRealLValue::isJacobianOK(
const RooArgSet&)
const