00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "RooFit.h"
00025
00026 #include "Riostream.h"
00027 #include "Riostream.h"
00028 #include <math.h>
00029 #include "TMath.h"
00030
00031 #include "RooRangeBoolean.h"
00032 #include "RooAbsReal.h"
00033 #include "RooRealVar.h"
00034 #include "RooArgList.h"
00035 #include "RooMsgService.h"
00036 #include "TMath.h"
00037
00038 ClassImp(RooRangeBoolean)
00039 ;
00040
00041
00042
00043 RooRangeBoolean::RooRangeBoolean()
00044 {
00045
00046 }
00047
00048
00049
00050 RooRangeBoolean::RooRangeBoolean(const char* name, const char* title, RooAbsRealLValue& x, const char* rangeName) :
00051 RooAbsReal(name, title),
00052 _x("x", "Dependent", this, x),
00053 _rangeName(rangeName)
00054 {
00055 }
00056
00057
00058
00059
00060 RooRangeBoolean::RooRangeBoolean(const RooRangeBoolean& other, const char* name) :
00061 RooAbsReal(other, name),
00062 _x("x", this, other._x),
00063 _rangeName(other._rangeName)
00064 {
00065
00066 }
00067
00068
00069
00070
00071
00072 RooRangeBoolean::~RooRangeBoolean()
00073 {
00074
00075 }
00076
00077
00078
00079
00080
00081 Double_t RooRangeBoolean::evaluate() const
00082 {
00083
00084 Double_t xmin = ((RooAbsRealLValue&)_x.arg()).getMin(_rangeName.Data()) ;
00085 Double_t xmax = ((RooAbsRealLValue&)_x.arg()).getMax(_rangeName.Data()) ;
00086
00087 Double_t ret = (_x >= xmin && _x < xmax) ? 1.0 : 0.0 ;
00088 return ret ;
00089 }
00090
00091
00092
00093
00094 std::list<Double_t>* RooRangeBoolean::plotSamplingHint(RooAbsRealLValue& obs, Double_t , Double_t ) const
00095 {
00096 if (string(obs.GetName())!=_x.arg().GetName()) {
00097 return 0 ;
00098 }
00099
00100 list<Double_t>* hint = new list<Double_t> ;
00101 hint->push_back(((RooAbsRealLValue&)_x.arg()).getMin(_rangeName.Data())-1e-6) ;
00102 hint->push_back(((RooAbsRealLValue&)_x.arg()).getMin(_rangeName.Data())+1e-6) ;
00103 hint->push_back(((RooAbsRealLValue&)_x.arg()).getMax(_rangeName.Data())-1e-6) ;
00104 hint->push_back(((RooAbsRealLValue&)_x.arg()).getMax(_rangeName.Data())+1e-6) ;
00105 return hint ;
00106 }
00107