/***************************************************************************** * Project: RooFit * * Package: RooFitModels * * File: $Id: RooKeysPdf.rdl,v 1.9 2005/02/25 14:25:06 wverkerke Exp $ * Authors: * * GR, Gerhard Raven, UC San Diego, raven@slac.stanford.edu * * DK, David Kirkby, UC Irvine, dkirkby@uci.edu * * WV, Wouter Verkerke, UC Santa Barbara, verkerke@slac.stanford.edu * * * * Copyright (c) 2000-2005, Regents of the University of California * * and Stanford University. All rights reserved. * * * * Redistribution and use in source and binary forms, * * with or without modification, are permitted according to the terms * * listed in LICENSE (http://roofit.sourceforge.net/license.txt) * *****************************************************************************/ #ifndef ROO_KEYS #define ROO_KEYS #include "RooFitCore/RooAbsPdf.hh" #include "RooFitCore/RooRealProxy.hh" class RooRealVar; class RooKeysPdf : public RooAbsPdf { public: enum Mirror { NoMirror, MirrorLeft, MirrorRight, MirrorBoth, MirrorAsymLeft, MirrorAsymLeftRight, MirrorAsymRight, MirrorLeftAsymRight, MirrorAsymBoth }; RooKeysPdf(const char *name, const char *title, RooAbsReal& x, RooDataSet& data, Mirror mirror= NoMirror, Double_t rho=1); RooKeysPdf(const RooKeysPdf& other, const char* name=0); virtual TObject* clone(const char* newname) const {return new RooKeysPdf(*this,newname); } virtual ~RooKeysPdf(); void LoadDataSet( RooDataSet& data); protected: RooRealProxy _x ; Double_t evaluate() const; private: Double_t evaluateFull(Double_t x) const; Int_t _nEvents; Double_t *_dataPts; //! Double_t *_weights; //! enum { _nPoints = 1000 }; Double_t _lookupTable[_nPoints+1]; Double_t g(Double_t x,Double_t sigma) const; Bool_t _mirrorLeft, _mirrorRight; Bool_t _asymLeft, _asymRight; // cached info on variable Char_t _varName[128]; Double_t _lo, _hi, _binWidth; Double_t _rho; ClassDef(RooKeysPdf,1) // Non-Parametric KEYS PDF }; #endif