00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __n3anabase__multiplicity_cut_h
00013 #define __n3anabase__multiplicity_cut_h 1
00014
00015 #include <string>
00016 #include <algorithm>
00017
00018 #include <boost/numeric/interval.hpp>
00019 #include <N3AnaBase/measurements/cluster.h>
00020
00021 #include <N3AnaBase/cuts/i_ana_event_cut.h>
00022
00023 namespace nemo3 {
00024
00025 class multiplicity_cut : public i_ana_event_cut
00026 {
00027 public:
00028 enum mode_t
00029 {
00030 MODE_INVALID = -1,
00031 MODE_NB_SCIN = 0,
00032 MODE_NB_SCIN_FROM_INTERNAL_WALL = 1,
00033 MODE_NB_SCIN_FROM_EXTERNAL_WALL = 2,
00034 MODE_NB_SCIN_FROM_BOTTOM_CAP = 3,
00035 MODE_NB_SCIN_FROM_TOP_CAP = 4,
00036 MODE_NB_SCIN_ASSOCIATED = 5,
00037 MODE_NB_SCIN_UNASSOCIATED = 6,
00038 MODE_NB_CLUSTERS = 7,
00039 MODE_NB_GG = 8,
00040 MODE_NB_GG_UNASSOCIATED = 9,
00041 MODE_NB_DELAYED_HITS = 10,
00042 MODE_NB_TRACKS = 11,
00043 MODE_NB_DELAYED_TRACKS = 12
00044 };
00045
00046 static const int32_t RANGE_MIN;
00047 static const int32_t RANGE_MAX;
00048
00049 static const std::string CUT_ID;
00050
00051
00052
00053 private:
00054 static creator_registration<multiplicity_cut> __CR;
00055
00056 private:
00057 bool __debug;
00058 int __mode;
00059 std::string __tracking_name;
00060
00061 int __min_multiplicity;
00062 int __max_multiplicity;
00063 bool __reversed;
00064
00065 public:
00066
00067 bool is_debug () const
00068 {
00069 return __debug;
00070 }
00071
00072 bool is_reversed () const
00073 {
00074 return __reversed;
00075 }
00076
00077 multiplicity_cut (bool debug_ = false);
00078
00079 virtual ~multiplicity_cut ();
00080
00081 void set (int mode_,
00082 int min_multiplicity_,
00083 int max_multiplicity_,
00084 bool reverse_ = false);
00085
00086 bool accept ();
00087
00088 static bool in_range (int value_, int min_, int max_);
00089
00090 static bool not_in_range (int value_, int min_, int max_);
00091
00092
00093 protected:
00094 virtual void __prepare_cut ();
00095
00096 public:
00097
00098
00099 virtual std::string cut_id () const;
00100
00101 virtual cut_creator_t cut_creator () const;
00102
00103 static i_ana_event_cut * create (const nemocuts::ICutFactory::cut_properties_t & cut_properties_);
00104
00105 static void test ();
00106
00107 };
00108
00109 }
00110
00111 #endif // __n3anabase__multiplicity_cut_h
00112
00113