All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
include/N3AnaBase/cuts/multiplicity_cut.h
00001 // multiplicity_cut.h
00002 
00003 /* A basic multiplicity cut on NEMO3 ANA event.
00004  * Cut is performed on some multiplicity among:
00005  * - number of scintillator hits
00006  * - number of Geiger hits
00007  * - number of prompt tracks
00008  * - number of delayed tracks
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       //typedef boost::numeric::interval<int> range_t;
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       //range_t __range;
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       // used in factory method:
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 } // end of namespace nemo3
00110 
00111 #endif // __n3anabase__multiplicity_cut_h
00112 
00113 // end of multiplicity_cut.h