All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
include/N3AnaBase/event/hit_info.h
00001 #ifndef __N3AnaBase__hit_info_h
00002 #define __N3AnaBase__hit_info_h 1
00003 
00004 #include <stdexcept>
00005 #include <iostream>
00006 #include <sstream>
00007 #include <string>
00008 #include <list>
00009 #include <cmath>
00010 #include <limits>
00011 
00012 #include <datatools/serialization/serialization.h>
00013 #include <datatools/utils/i_tree_dump.h>
00014 #include <datatools/utils/i_clear.h>
00015 #include <datatools/utils/i_propinit.h>
00016 #include <datatools/utils/properties.h>
00017 
00018 #include <N3AnaBase/utils/geom_utils.h>
00019 #include <N3AnaBase/event/event_utils.h>
00020 #include <N3AnaBase/event/gg_hit.h>
00021 #include <N3AnaBase/event/scin_hit.h>
00022 
00023 namespace nemo3 {
00038 
00039   class scin_hit_info :
00040 
00042     public datatools::serialization::i_serializable
00043     {
00044     private:
00045       datatools::utils::properties __properties;
00046       scin_hit *                   __hit;
00047     public:
00048 
00050       scin_hit_info ();
00051 
00053       scin_hit_info (const scin_hit & hit_);
00054 
00056       void set (const scin_hit & hit_);
00057 
00059       void set_associated (bool);
00060 
00062       void reset ();
00063 
00065       bool is_valid () const;
00066 
00068       int32_t get_hit_number () const;
00069 
00071       bool operator== ( const scin_hit_info & ) const;
00072 
00074       const datatools::utils::properties & properties () const;
00075 
00077       datatools::utils::properties & properties ();
00078 
00080       const datatools::utils::properties & get_properties_const () const
00081       {
00082         return properties ();
00083       }
00084 
00086       const datatools::utils::properties & get_properties_ro () const
00087       {
00088         return properties ();
00089       }
00090 
00092       datatools::utils::properties & get_properties ()
00093       {
00094         return properties ();
00095       }
00096 
00098       datatools::utils::properties & get_properties_rw ()
00099       {
00100         return properties ();
00101       }
00102 
00104       const scin_hit & get_hit () const;
00105 
00107       scin_hit & get_hit_no_const ();
00108 
00110       static const std::string SERIAL_TAG;
00111 
00113       virtual const std::string & get_serial_tag () const;
00114 
00115     private:
00116       
00118       friend class boost::serialization::access;
00119 
00121       template<class Archive>
00122         void serialize (Archive            & ar_,
00123                         const unsigned int version_)
00124         {
00125           ar_ & boost::serialization::make_nvp ("properties", __properties);
00126           ar_ & boost::serialization::make_nvp ("hit",        __hit);
00127         }
00128 
00129     };
00130 
00132   typedef std::list<scin_hit_info> scin_hit_info_col;
00133 
00135   typedef enum
00136     {
00137       CHARGE_UNDEFINED = -2,
00138       CHARGE_NUL      = -1,
00139       CHARGE_POSITIVE = 0,
00140       CHARGE_NEGATIVE = 1
00141     } charge_t ;
00142 
00143 
00144 
00146   class gg_hit_info :
00147     
00149     public datatools::serialization::i_serializable
00150     {
00151     public:
00152       static const std::string HIT_CLOSE_TO_TRACK_FLAG;
00153       static const std::string HIT_ON_TRACK_FLAG;
00154       static const std::string HIT_NOT_ON_TRACK_FLAG;
00155 
00156     private:
00157       datatools::utils::properties __properties;
00158       gg_hit *                     __hit;
00159 
00160     public:
00161 
00163       gg_hit_info ();
00164 
00166       gg_hit_info (const gg_hit & hit_);
00167 
00169       void set (const gg_hit & hit_);
00170 
00172       void reset ();
00173 
00175       bool is_valid () const;
00176 
00178       int32_t get_hit_number () const;
00179 
00181       bool operator== ( const gg_hit_info & ) const;
00182 
00184       const datatools::utils::properties & properties () const;
00185 
00187       datatools::utils::properties & properties ();
00188 
00190       const gg_hit & get_hit () const;
00191       
00193       gg_hit & get_hit_no_const ();
00194 
00196       const datatools::utils::properties & get_properties_const () const
00197       {
00198         return properties ();
00199       }
00200 
00202       const datatools::utils::properties & get_properties_ro () const
00203       {
00204         return properties ();
00205       }
00206 
00208       datatools::utils::properties & get_properties ()
00209       {
00210         return properties ();
00211       }
00212 
00214       datatools::utils::properties & get_properties_rw ()
00215       {
00216         return properties ();
00217       }
00218 
00220       static const std::string SERIAL_TAG;
00221 
00223       virtual const std::string & get_serial_tag () const;
00224 
00225     private:
00226 
00228       friend class boost::serialization::access;
00229 
00231       template<class Archive>
00232         void serialize (Archive            & ar_,
00233                         const unsigned int version_)
00234         {
00235           ar_ & boost::serialization::make_nvp ("properties", __properties);
00236           ar_ & boost::serialization::make_nvp ("hit",     __hit);
00237         }
00238 
00239     };
00240 
00242   class scin_hit_info_has_number
00243     : public std::unary_function<scin_hit_info, bool>
00244   {
00245     int __number;
00246   public:
00247     explicit scin_hit_info_has_number (int number_)
00248     {
00249       __number = number_;
00250     }
00251 
00252     bool operator () (const scin_hit_info & scin_hit_info_) const
00253     {
00254       if (! scin_hit_info_.is_valid ()) return false;
00255       return (__number == scin_hit_info_.get_hit ().get_number ());
00256     }
00257   };
00258 
00260   class gg_hit_info_has_number
00261     : public std::unary_function<gg_hit_info, bool>
00262   {
00263     int __number;
00264   public:
00265     explicit gg_hit_info_has_number (int number_)
00266     {
00267       __number = number_;
00268     }
00269 
00270     bool operator () (const gg_hit_info & gg_hit_info_) const
00271     {
00272       if (! gg_hit_info_.is_valid ()) return false;
00273       return (__number == gg_hit_info_.get_hit ().get_number ());
00274     }
00275   };
00276 
00277   typedef std::list<gg_hit_info> gg_hit_info_col;
00278 
00279 
00280 } // end of namespace nemo3
00281 
00282 #endif // __N3AnaBase__hit_info_h
00283 
00284 // end of hit_info.h
00285