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 }
00281
00282 #endif // __N3AnaBase__hit_info_h
00283
00284
00285