#include <CachingNLL.h>
Classes | |
class | SimpleGaussianConstraint |
Public Member Functions | |
CachingSimNLL (RooSimultaneous *pdf, RooAbsData *data, const RooArgSet *nuis=0) | |
CachingSimNLL (const CachingSimNLL &other, const char *name=0) | |
void | clearZeroPoint () |
virtual CachingSimNLL * | clone (const char *name=0) const |
virtual Double_t | defaultErrorLevel () const |
virtual Double_t | evaluate () const |
virtual RooArgSet * | getObservables (const RooArgSet *depList, Bool_t valueOnly=kTRUE) const |
virtual RooArgSet * | getParameters (const RooArgSet *depList, Bool_t stripDisconnected=kTRUE) const |
virtual Bool_t | isDerived () const |
void | setData (const RooAbsData &data) |
void | setZeroPoint () |
void | splitWithWeights (const RooAbsData &data, const RooAbsCategory &splitCat, Bool_t createEmptyDataSets) |
~CachingSimNLL () | |
Static Public Member Functions | |
static void | setNoDeepLogEvalError (bool noDeep) |
Private Member Functions | |
void | setup_ () |
Private Attributes | |
std::vector< RooAbsPdf * > | constrainPdfs_ |
std::vector < SimpleGaussianConstraint * > | constrainPdfsFast_ |
std::vector< double > | constrainZeroPoints_ |
std::vector< double > | constrainZeroPointsFast_ |
const RooAbsData * | dataOriginal_ |
std::auto_ptr< TList > | dataSets_ |
std::vector< RooDataSet * > | datasets_ |
std::auto_ptr< RooSimultaneous > | factorizedPdf_ |
const RooArgSet * | nuis_ |
RooSetProxy | params_ |
RooSimultaneous * | pdfOriginal_ |
std::vector< CachingAddNLL * > | pdfs_ |
RooArgSet | piecesForCloning_ |
Static Private Attributes | |
static bool | hasError_ = false |
static bool | noDeepLEE_ = false |
Friends | |
class | CachingAddNLL |
Definition at line 104 of file CachingNLL.h.
cacheutils::CachingSimNLL::CachingSimNLL | ( | RooSimultaneous * | pdf, |
RooAbsData * | data, | ||
const RooArgSet * | nuis = 0 |
||
) |
Definition at line 464 of file CachingNLL.cc.
References setup_().
: pdfOriginal_(pdf), dataOriginal_(data), nuis_(nuis), params_("params","parameters",this) { setup_(); }
cacheutils::CachingSimNLL::CachingSimNLL | ( | const CachingSimNLL & | other, |
const char * | name = 0 |
||
) |
Definition at line 473 of file CachingNLL.cc.
References setup_().
: pdfOriginal_(other.pdfOriginal_), dataOriginal_(other.dataOriginal_), nuis_(other.nuis_), params_("params","parameters",this) { setup_(); }
cacheutils::CachingSimNLL::~CachingSimNLL | ( | ) |
Definition at line 488 of file CachingNLL.cc.
{ for (std::vector<SimpleGaussianConstraint*>::iterator it = constrainPdfsFast_.begin(), ed = constrainPdfsFast_.end(); it != ed; ++it) { delete *it; } }
void cacheutils::CachingSimNLL::clearZeroPoint | ( | ) |
Definition at line 667 of file CachingNLL.cc.
References lumiContext::fill.
Referenced by CascadeMinimizer::improve(), and CascadeMinimizer::improveOnce().
{ for (std::vector<CachingAddNLL*>::const_iterator it = pdfs_.begin(), ed = pdfs_.end(); it != ed; ++it) { if (*it != 0) (*it)->clearZeroPoint(); } std::fill(constrainZeroPoints_.begin(), constrainZeroPoints_.end(), 0.0); std::fill(constrainZeroPointsFast_.begin(), constrainZeroPointsFast_.end(), 0.0); setValueDirty(); }
cacheutils::CachingSimNLL * cacheutils::CachingSimNLL::clone | ( | const char * | name = 0 | ) | const [virtual] |
Definition at line 483 of file CachingNLL.cc.
{ return new cacheutils::CachingSimNLL(*this, name); }
virtual Double_t cacheutils::CachingSimNLL::defaultErrorLevel | ( | ) | const [inline, virtual] |
Definition at line 112 of file CachingNLL.h.
{ return 0.5; }
Double_t cacheutils::CachingSimNLL::evaluate | ( | ) | const [virtual] |
============= GENERIC CONSTRAINTS =========
============= FAST GAUSSIAN CONSTRAINTS =========
Definition at line 568 of file CachingNLL.cc.
References Clusterizer1DCommons::add(), alignCSCRings::e, create_public_lumi_plots::log, run_regression::ret, TRACE_NLL, and TRACE_POINT.
{ TRACE_POINT(params_) #ifdef DEBUG_CACHE PerfCounter::add("CachingSimNLL::evaluate called"); #endif double ret = 0; for (std::vector<CachingAddNLL*>::const_iterator it = pdfs_.begin(), ed = pdfs_.end(); it != ed; ++it) { if (*it != 0) { double nllval = (*it)->getVal(); // what sanity check could I put here? ret += nllval; } } if (!constrainPdfs_.empty()) { std::vector<double>::const_iterator itz = constrainZeroPoints_.begin(); for (std::vector<RooAbsPdf *>::const_iterator it = constrainPdfs_.begin(), ed = constrainPdfs_.end(); it != ed; ++it, ++itz) { double pdfval = (*it)->getVal(nuis_); if (!isnormal(pdfval) || pdfval <= 0) { if (!noDeepLEE_) logEvalError((std::string("Constraint pdf ")+(*it)->GetName()+" evaluated to zero, negative or error").c_str()); pdfval = 1e-9; } ret -= (log(pdfval) + *itz); } itz = constrainZeroPointsFast_.begin(); for (std::vector<SimpleGaussianConstraint*>::const_iterator it = constrainPdfsFast_.begin(), ed = constrainPdfsFast_.end(); it != ed; ++it, ++itz) { double logpdfval = (*it)->getLogValFast(); ret -= (logpdfval + *itz); } } #ifdef TRACE_NLL_EVALS static unsigned long _trace_ = 0; _trace_++; if (_trace_ % 10 == 0) { putchar('.'); fflush(stdout); } //if (_trace_ % 250 == 0) { printf(" NLL % 10.4f after %10lu evals.\n", ret, _trace_); fflush(stdout); } #endif TRACE_NLL("SimNLL for " << GetName() << ": " << ret) return ret; }
RooArgSet * cacheutils::CachingSimNLL::getObservables | ( | const RooArgSet * | depList, |
Bool_t | valueOnly = kTRUE |
||
) | const [virtual] |
Definition at line 677 of file CachingNLL.cc.
{ return new RooArgSet(); }
RooArgSet * cacheutils::CachingSimNLL::getParameters | ( | const RooArgSet * | depList, |
Bool_t | stripDisconnected = kTRUE |
||
) | const [virtual] |
Definition at line 683 of file CachingNLL.cc.
{ return new RooArgSet(params_); }
virtual Bool_t cacheutils::CachingSimNLL::isDerived | ( | ) | const [inline, virtual] |
Definition at line 111 of file CachingNLL.h.
{ return kTRUE; }
void cacheutils::CachingSimNLL::setData | ( | const RooAbsData & | data | ) |
Definition at line 610 of file CachingNLL.cc.
References data, and cacheutils::CachingAddNLL::setData().
{ dataOriginal_ = &data; //std::cout << "combined data has " << data.numEntries() << " dataset entries (sumw " << data.sumEntries() << ", weighted " << data.isWeighted() << ")" << std::endl; //utils::printRAD(&data); //dataSets_.reset(dataOriginal_->split(pdfOriginal_->indexCat(), true)); splitWithWeights(*dataOriginal_, pdfOriginal_->indexCat(), true); for (int ib = 0, nb = pdfs_.size(); ib < nb; ++ib) { CachingAddNLL *canll = pdfs_[ib]; if (canll == 0) continue; RooAbsData *data = datasets_[ib]; //RooAbsData *data = (RooAbsData *) dataSets_->FindObject(canll->GetName()); if (data == 0) { throw std::logic_error("Error: no data"); } //std::cout << " bin " << ib << " (label " << canll->GetName() << ") has pdf " << canll->pdf()->GetName() << " of type " << canll->pdf()->ClassName() << // " and " << (data ? data->numEntries() : -1) << " dataset entries (sumw " << data->sumEntries() << ", weighted " << data->isWeighted() << ")" << std::endl; canll->setData(*data); } }
static void cacheutils::CachingSimNLL::setNoDeepLogEvalError | ( | bool | noDeep | ) | [inline, static] |
void cacheutils::CachingSimNLL::setup_ | ( | ) | [private] |
Definition at line 496 of file CachingNLL.cc.
References dtNoiseDBValidation_cfg::cerr, createBeamHaloJobs::constraints, gather_cfg::cout, data, utils::factorizePdf(), reco::get(), i, n, and NULL.
Referenced by CachingSimNLL().
{ // Allow runtime-flag to switch off logEvalErrors noDeepLEE_ = runtimedef::get("SIMNLL_NO_LEE"); //RooAbsPdf *pdfclone = runtimedef::get("SIMNLL_CLONE") ? pdfOriginal_ : utils::fullClonePdf(pdfOriginal_, piecesForCloning_); RooAbsPdf *pdfclone = pdfOriginal_; // never clone //---- Instead of getting the parameters here, we get them from the individual constraint terms and single pdfs ---- //---- This seems to save memory. //std::auto_ptr<RooArgSet> params(pdfclone->getParameters(*dataOriginal_)); //params_.add(*params); RooArgList constraints; factorizedPdf_.reset(dynamic_cast<RooSimultaneous *>(utils::factorizePdf(*dataOriginal_->get(), *pdfclone, constraints))); RooSimultaneous *simpdf = factorizedPdf_.get(); constrainPdfs_.clear(); if (constraints.getSize()) { bool FastConstraints = runtimedef::get("SIMNLL_FASTGAUSS"); //constrainPdfs_.push_back(new RooProdPdf("constraints","constraints", constraints)); for (int i = 0, n = constraints.getSize(); i < n; ++i) { RooAbsPdf *pdfi = dynamic_cast<RooAbsPdf*>(constraints.at(i)); if (FastConstraints && typeid(*pdfi) == typeid(RooGaussian)) { constrainPdfsFast_.push_back(new SimpleGaussianConstraint(dynamic_cast<const RooGaussian&>(*pdfi))); constrainZeroPointsFast_.push_back(0); } else { constrainPdfs_.push_back(pdfi); constrainZeroPoints_.push_back(0); } //std::cout << "Constraint pdf: " << constraints.at(i)->GetName() << std::endl; std::auto_ptr<RooArgSet> params(pdfi->getParameters(*dataOriginal_)); params_.add(*params, false); } } else { std::cerr << "PDF didn't factorize!" << std::endl; std::cout << "Parameters: " << std::endl; std::auto_ptr<RooArgSet> params(pdfclone->getParameters(*dataOriginal_)); params->Print("V"); std::cout << "Obs: " << std::endl; dataOriginal_->get()->Print("V"); factorizedPdf_.release(); simpdf = dynamic_cast<RooSimultaneous *>(pdfclone); } std::auto_ptr<RooAbsCategoryLValue> catClone((RooAbsCategoryLValue*) simpdf->indexCat().Clone()); pdfs_.resize(catClone->numBins(NULL), 0); //dataSets_.reset(dataOriginal_->split(pdfOriginal_->indexCat(), true)); datasets_.resize(pdfs_.size(), 0); splitWithWeights(*dataOriginal_, simpdf->indexCat(), true); //std::cout << "Pdf " << simpdf->GetName() <<" is a SimPdf over category " << catClone->GetName() << ", with " << pdfs_.size() << " bins" << std::endl; for (int ib = 0, nb = pdfs_.size(); ib < nb; ++ib) { catClone->setBin(ib); RooAbsPdf *pdf = simpdf->getPdf(catClone->getLabel()); if (pdf != 0) { RooAbsData *data = (RooAbsData *) datasets_[ib]; //dataSets_->FindObject(catClone->getLabel()); //RooAbsData *data = (RooAbsData *) dataSets_->FindObject(catClone->getLabel()); //std::cout << " bin " << ib << " (label " << catClone->getLabel() << ") has pdf " << pdf->GetName() << " of type " << pdf->ClassName() << " and " << (data ? data->numEntries() : -1) << " dataset entries" << std::endl; if (data == 0) { throw std::logic_error("Error: no data"); } pdfs_[ib] = new CachingAddNLL(catClone->getLabel(), "", pdf, data); params_.add(pdfs_[ib]->params(), /*silent=*/true); } else { pdfs_[ib] = 0; //std::cout << " bin " << ib << " (label " << catClone->getLabel() << ") has no pdf" << std::endl; } } setValueDirty(); }
void cacheutils::CachingSimNLL::setZeroPoint | ( | ) |
Definition at line 650 of file CachingNLL.cc.
References create_public_lumi_plots::log.
Referenced by CascadeMinimizer::improveOnce().
{ for (std::vector<CachingAddNLL*>::const_iterator it = pdfs_.begin(), ed = pdfs_.end(); it != ed; ++it) { if (*it != 0) (*it)->setZeroPoint(); } std::vector<double>::iterator itz = constrainZeroPoints_.begin(); for (std::vector<RooAbsPdf *>::const_iterator it = constrainPdfs_.begin(), ed = constrainPdfs_.end(); it != ed; ++it, ++itz) { double pdfval = (*it)->getVal(nuis_); if (isnormal(pdfval) || pdfval > 0) *itz = -log(pdfval); } itz = constrainZeroPointsFast_.begin(); for (std::vector<SimpleGaussianConstraint*>::const_iterator it = constrainPdfsFast_.begin(), ed = constrainPdfsFast_.end(); it != ed; ++it, ++itz) { double logpdfval = (*it)->getLogValFast(); *itz = -logpdfval; } setValueDirty(); }
void cacheutils::CachingSimNLL::splitWithWeights | ( | const RooAbsData & | data, |
const RooAbsCategory & | splitCat, | ||
Bool_t | createEmptyDataSets | ||
) |
Definition at line 629 of file CachingNLL.cc.
References Clusterizer1DCommons::add(), cmsDownloadME::cat, i, Vispa::Plugins::EdmBrowser::EdmDataAccessor::ne(), and CommonMethods::weight().
{ RooCategory *cat = dynamic_cast<RooCategory *>(data.get()->find(splitCat.GetName())); if (cat == 0) throw std::logic_error("Error: no category"); int nb = cat->numBins((const char *)0), ne = data.numEntries(); RooArgSet obs(*data.get()); obs.remove(*cat, true, true); RooRealVar weight("_weight_","",1); RooArgSet obsplus(obs); obsplus.add(weight); if (nb != int(datasets_.size())) throw std::logic_error("Number of categories changed"); // this can happen due to bugs in RooDataSet for (int ib = 0; ib < nb; ++ib) { if (datasets_[ib] == 0) datasets_[ib] = new RooDataSet("", "", obsplus, "_weight_"); else datasets_[ib]->reset(); } //utils::printRDH((RooAbsData*)&data); for (int i = 0; i < ne; ++i) { data.get(i); if (data.weight() == 0) continue; int ib = cat->getBin(); //std::cout << "Event " << i << " of weight " << data.weight() << " is in bin " << ib << " label " << cat->getLabel() << std::endl; if (data.weight() > 0) datasets_[ib]->add(obs, data.weight()); } }
friend class CachingAddNLL [friend] |
Definition at line 120 of file CachingNLL.h.
std::vector<RooAbsPdf *> cacheutils::CachingSimNLL::constrainPdfs_ [private] |
Definition at line 139 of file CachingNLL.h.
std::vector<SimpleGaussianConstraint *> cacheutils::CachingSimNLL::constrainPdfsFast_ [private] |
Definition at line 140 of file CachingNLL.h.
std::vector<double> cacheutils::CachingSimNLL::constrainZeroPoints_ [private] |
Definition at line 146 of file CachingNLL.h.
std::vector<double> cacheutils::CachingSimNLL::constrainZeroPointsFast_ [private] |
Definition at line 147 of file CachingNLL.h.
const RooAbsData* cacheutils::CachingSimNLL::dataOriginal_ [private] |
Definition at line 134 of file CachingNLL.h.
std::auto_ptr<TList> cacheutils::CachingSimNLL::dataSets_ [private] |
Definition at line 142 of file CachingNLL.h.
std::vector<RooDataSet *> cacheutils::CachingSimNLL::datasets_ [private] |
Definition at line 143 of file CachingNLL.h.
std::auto_ptr<RooSimultaneous> cacheutils::CachingSimNLL::factorizedPdf_ [private] |
Definition at line 138 of file CachingNLL.h.
bool cacheutils::CachingSimNLL::hasError_ = false [static, private] |
Definition at line 145 of file CachingNLL.h.
Referenced by cacheutils::CachingAddNLL::evaluate().
bool cacheutils::CachingSimNLL::noDeepLEE_ = false [static, private] |
Definition at line 144 of file CachingNLL.h.
Referenced by cacheutils::CachingAddNLL::evaluate(), and setNoDeepLogEvalError().
const RooArgSet* cacheutils::CachingSimNLL::nuis_ [private] |
Definition at line 135 of file CachingNLL.h.
RooSetProxy cacheutils::CachingSimNLL::params_ [private] |
Definition at line 136 of file CachingNLL.h.
RooSimultaneous* cacheutils::CachingSimNLL::pdfOriginal_ [private] |
Definition at line 133 of file CachingNLL.h.
std::vector<CachingAddNLL*> cacheutils::CachingSimNLL::pdfs_ [private] |
Definition at line 141 of file CachingNLL.h.
RooArgSet cacheutils::CachingSimNLL::piecesForCloning_ [private] |
Definition at line 137 of file CachingNLL.h.