HistoHandler.cc
Go to the documentation of this file.00001
00002 #include "Rivet/Rivet.hh"
00003 #include "Rivet/Tools/Logging.hh"
00004 #include "Rivet/HistoHandler.hh"
00005 #include "Rivet/Analysis.hh"
00006 #include <algorithm>
00007
00008 namespace Rivet {
00009
00010
00011
00012 Log& HistoHandler::getLog() const {
00013 return Log::getLog("Rivet.HistoHandler");
00014 }
00015
00016
00017 void HistoHandler::clear() {
00018 _namedhistos.clear();
00019 }
00020
00021
00022
00023 HistoHandler::~HistoHandler() {
00024 clear();
00025 }
00026
00027
00028 const AnalysisObject* HistoHandler::registerAnalysisObject(const Analysis& parent,
00029 const AnalysisObject& ao,
00030 const string& name) {
00031 getLog() << Log::TRACE << "Trying to register"
00032 << " analysis object " << &ao
00033 << " for parent " << &parent << "(" << parent.name() << ")"
00034 << " with name '" << name << "'" << endl;
00035
00036
00037 NamedHistosMap::const_iterator nhs = _namedhistos.find(&parent);
00038 if (nhs != _namedhistos.end()) {
00039 NamedHistos::const_iterator nh = nhs->second.find(name);
00040 if (nh != nhs->second.end()) {
00041 stringstream ss;
00042 ss << "Histogram \"" << name
00043 << "\" already exists for parent analysis " << &parent;
00044 throw Error(ss.str());
00045 }
00046 }
00047
00048 _namedhistos[&parent][name] = &ao;
00049
00050 return const_cast<AnalysisObject*>(_namedhistos[&parent][name]);
00051 }
00052
00053
00054
00055 AnalysisObject* HistoHandler::_getAnalysisObject(const Analysis& parent,
00056 const string& name) const {
00057 getLog() << Log::TRACE << "Searching for child histo '"
00058 << name << "' of " << &parent << endl;
00059
00060 NamedHistosMap::const_iterator nhs = _namedhistos.find(&parent);
00061 if (nhs == _namedhistos.end()) {
00062 stringstream ss;
00063 ss << "Couldn't find any histograms for parent analysis " << &parent;
00064 throw Error(ss.str());
00065 }
00066
00067 NamedHistos::const_iterator nh = nhs->second.find(name);
00068 if (nh == nhs->second.end()) {
00069 stringstream ss;
00070 ss << "Couldn't find histogram \"" << name
00071 << "\" for parent analysis " << &parent;
00072 throw Error(ss.str());
00073 }
00074
00075
00076 AnalysisObject* rtn = const_cast<AnalysisObject*>(nh->second);
00077 return rtn;
00078 }
00079
00080
00081 }