Go to the documentation of this file.00001 #ifndef PhysicsTools_FWLite_ScannerHelpers_h
00002 #define PhysicsTools_FWLite_ScannerHelpers_h
00003
00004 #include <string>
00005 #include <Reflex/Type.h>
00006 #include <TH1.h>
00007 #include <TH2.h>
00008 #include <TProfile.h>
00009 #include <TGraph.h>
00010
00011
00012
00013
00014 #if !defined(__CINT__) && !defined(__MAKECINT__)
00015 #include "CommonTools/Utils/src/ExpressionPtr.h"
00016 #include "CommonTools/Utils/src/SelectorPtr.h"
00017 #include "CommonTools/Utils/src/ExpressionBase.h"
00018 #include "CommonTools/Utils/src/SelectorBase.h"
00019 #endif
00020
00021 namespace helper {
00024 class Parser {
00025 public:
00027 Parser() {}
00029 static reco::parser::ExpressionPtr makeExpression(const std::string &expr, const Reflex::Type &type) ;
00031 static reco::parser::SelectorPtr makeSelector(const std::string &expr, const Reflex::Type &type) ;
00033 static Reflex::Type elementType(const Reflex::Type &wrapperType) ;
00034
00035
00036
00038 static bool test(const reco::parser::SelectorPtr &sel, const Reflex::Type type, const void * obj);
00040 static double eval(const reco::parser::ExpressionPtr &sel, const Reflex::Type type, const void * obj);
00041 };
00042
00045 class ScannerBase {
00046 public:
00048 ScannerBase() {}
00050 ScannerBase(const Reflex::Type &objType) : objType_(objType), cuts_(1), ignoreExceptions_(false) {}
00051
00054 bool addExpression(const char *expr) ;
00056 void clearExpressions() { exprs_.clear(); }
00058 size_t numberOfExpressions() const { return exprs_.size(); }
00059
00061 bool setCut(const char *cut) ;
00063 void clearCut() ;
00065 bool addExtraCut(const char *cut) ;
00067 void clearExtraCuts();
00069 size_t numberOfExtraCuts() const { return cuts_.size()-1; }
00070
00073 bool test(const void *obj, size_t icut = 0) const ;
00074
00077 double eval(const void *obj, size_t iexpr = 0) const;
00078
00081 void print(const void *obj) const ;
00082
00085 void fill1D(const void *obj, TH1 *hist) const ;
00086
00089 void fill2D(const void *obj, TH2 *hist2d) const ;
00090
00093 void fillGraph(const void *obj, TGraph *graph) const ;
00094
00097 void fillProf(const void *obj, TProfile *prof) const ;
00098
00101 void setIgnoreExceptions(bool ignoreThem) { ignoreExceptions_ = ignoreThem; }
00102 private:
00103 Reflex::Type objType_;
00104 std::vector<reco::parser::ExpressionPtr> exprs_;
00105
00107 std::vector<reco::parser::SelectorPtr> cuts_;
00108
00110 bool ignoreExceptions_;
00111 };
00112 }
00113
00114 #endif