00001 #ifndef DQMOFFLINE_TRIGGER_EGHLTMONELEMWITHCUT
00002 #define DQMOFFLINE_TRIGGER_EGHLTMONELEMWITHCUT
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "DQMOffline/Trigger/interface/EgHLTMonElemManager.h"
00023 #include "DQMOffline/Trigger/interface/EgHLTDQMCut.h"
00024 #include "DQMOffline/Trigger/interface/EgHLTOffEvt.h"
00025 namespace egHLT {
00026 template<class T> class MonElemWithCutBase {
00027
00028 private:
00029 MonElemWithCutBase(const MonElemWithCutBase& rhs){}
00030 MonElemWithCutBase& operator=(const MonElemWithCutBase& rhs){return *this;}
00031 public:
00032 MonElemWithCutBase(){}
00033 virtual ~MonElemWithCutBase(){}
00034
00035 virtual void fill(const T& obj,const OffEvt& evt ,float weight)=0;
00036
00037 };
00038
00039
00040 template<class T,typename varTypeX,typename varTypeY=varTypeX> class MonElemWithCut : public MonElemWithCutBase<T> {
00041
00042 private:
00043 MonElemManagerBase<T>* monElemMgr_;
00044 const EgHLTDQMCut<T>* cut_;
00045
00046 private:
00047 MonElemWithCut(const MonElemWithCut& rhs){}
00048 MonElemWithCut& operator=(const MonElemWithCut& rhs){return *this;}
00049 public:
00050
00051 MonElemWithCut(const std::string& name,const std::string& title,int nrBins,double xMin,double xMax,
00052 varTypeX (T::*varFunc)()const,const EgHLTDQMCut<T>* cut=NULL):
00053 monElemMgr_(new MonElemManager<T,varTypeX>(name,title,nrBins,xMin,xMax,varFunc)),
00054 cut_(cut){}
00055
00056 MonElemWithCut(const std::string& name,const std::string& title,int nrBinsX,double xMin,double xMax,int nrBinsY,double yMin,double yMax,
00057 varTypeX (T::*varFuncX)()const,varTypeY (T::*varFuncY)()const,const EgHLTDQMCut<T>* cut=NULL):
00058 monElemMgr_(new MonElemManager2D<T,varTypeX,varTypeY>(name,title,nrBinsX,xMin,xMax,nrBinsY,yMin,yMax,varFuncX,varFuncY)),
00059 cut_(cut){}
00060 ~MonElemWithCut();
00061
00062 void fill(const T& obj,const OffEvt& evt,float weight);
00063
00064 };
00065
00066 template<class T,typename varTypeX,typename varTypeY>
00067 MonElemWithCut<T,varTypeX,varTypeY>::~MonElemWithCut()
00068 {
00069 if(cut_) delete cut_;
00070 if(monElemMgr_) delete monElemMgr_;
00071 }
00072
00073 template<class T,typename varTypeX,typename varTypeY>
00074 void MonElemWithCut<T,varTypeX,varTypeY>::fill(const T& obj,const OffEvt& evt,float weight)
00075 {
00076 if(cut_==NULL || cut_->pass(obj,evt)) monElemMgr_->fill(obj,weight);
00077 }
00078
00079 }
00080
00081 #endif