00001
00017 #include "jbltools/sfh/CutFlow.h"
00018 #include "jbltools/sfh/FillIterator.h"
00019 #include "jbltools/sfh/IntFunPoR.h"
00020 #include "jbltools/sfh/BaseCutBase.h"
00021
00022 #include <iostream>
00023 #include <cstring>
00024
00025 static const char *ident="@(#)$Id: CutFlow.C,v 1.2 2005/07/20 10:56:41 blist Exp $";
00026
00027
00028 CutFlow::CutFlow (int nbins, const BaseCut *cuts[], const IntFunPoR& iter_, const char *name)
00029 : BaseCut ((name ? std::string(name) : "")),
00030 theCuts(nbins),
00031 iter (iter_.pif)
00032 {
00033 if (!iter) {
00034 std::cerr << "CutFlow::CutFlow warning: No iterator given for " << getName()
00035 << "!" << std::endl;
00036
00037 }
00038 for (int i = 0; i < nbins; ++i) {
00039 theCuts[i] = cuts[i];
00040 }
00041 }
00042
00043 CutFlow::CutFlow (int nbins, BaseCut *cuts[], const IntFunPoR& iter_, const char *name)
00044 : BaseCut ((name ? std::string(name) : "")),
00045 theCuts(nbins),
00046 iter (iter_.pif)
00047 {
00048 if (!iter) {
00049 std::cerr << "CutFlow::CutFlow warning: No iterator given for " << getName()
00050 << "!" << std::endl;
00051
00052 }
00053 for (int i = 0; i < nbins; ++i) {
00054 theCuts[i] = cuts[i];
00055 }
00056 }
00057
00058 bool CutFlow::operator() () const {
00059 if (!iter) return false;
00060 int i = (*iter)();
00061 const BaseCut *cut = (i >= 0 && static_cast<unsigned int>(i) < theCuts.size()) ? theCuts[i] : 0;
00062 return cut ? (*cut)() : true;
00063 }
00064
00065 const FillIterator *CutFlow::getIterator() const {
00066 return iter ? iter->getIterator() : 0;
00067 }