00001 #include <map>
00002 #include <list>
00003 #include <TH2.h>
00004
00005 #include <datatools/serialization/serialization.h>
00006
00007 #ifndef __N3AnaBase__gamma_tracking_h
00008 #define __N3AnaBase__gamma_tracking_h 1
00009
00010 namespace nemo3 {
00011
00013
00032 class gamma_tracking
00033 {
00034 public:
00035
00036 typedef std::list <int> ref_t;
00037 typedef std::list <int>::iterator ref_it;
00038 typedef std::list <int>::const_iterator ref_const_it;
00039 typedef std::list<std::list <int> > refcoll_t;
00040 typedef std::list<std::list <int> >::iterator refcoll_it;
00041 typedef std::list<std::list <int> >::const_iterator refcoll_const_it;
00042
00043 public:
00044 gamma_tracking ();
00045 gamma_tracking (const gamma_tracking&);
00046 ~gamma_tracking ();
00047 bool has_tracks () {return __serie.size();}
00048 void Add (int number1_);
00049
00050 void AddProb (int number1_, int number2_, double proba_);
00051 void AddChi2 (int number1_, int number2_, double chi2_);
00052 void AddStart (int number_);
00053
00054 void Print ();
00055 void Count ();
00056 void FillIt (TH2* h_);
00057 bool is_inside (const std::list <int>& check_, const std::list <int>& values_);
00058 bool is_inside (const ref_t& check_, int value_);
00059 void extract (std::list <int>& source_, const std::list <int>& values_);
00060 void put_inside (const std::list<int> &from_, std::list<int> &to_);
00061 void set_absolute (bool a_) {__absolute=a_;}
00062 bool is_absolute () {return __absolute;}
00063 void set_extern (bool e_) {__extern=e_;}
00064 bool is_extern () {return __extern;}
00065 void set_prob_min (double min_prob_);
00066 refcoll_t GetReflects (double prob_, const ref_t* starts_ = NULL, const ref_t *exclude_ = NULL, bool deathless_starts_ = false);
00067
00080 const refcoll_t& GetAll () {return __serie;}
00081 double GetProb (int scin_id1_, int scin_id2_);
00082 double GetProb (const ref_t &scin_ids_);
00083 double GetChi2 (int scin_id1_, int scin_id2_);
00084 double GetChi2 (ref_t &scin_ids_);
00085 static bool SortReflect (ref_t &ref1_, ref_t &ref2_);
00086 void SortProb (std::list<std::list <int> > &list_);
00087 double GetChiLimit (unsigned int);
00088 void Combine () ;
00089
00091 void Flush () ;
00092 static long factorial (int x);
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104 private:
00105 bool __absolute;
00106 bool __extern;
00107 int __max;
00108 double __min_prob;
00109 ref_t __starts;
00110 refcoll_t __serie;
00111 std::map<int,double> __min_chi2;
00112 std::map<std::list<int>* ,double> __chi2;
00113 std::map<std::list<int>* ,double> __proba;
00114 static std::map<long, double> __fact;
00115 pthread_mutex_t __mutex;
00116
00117
00118
00119 private:
00140 friend class boost::serialization::access;
00141
00142 template<class Archive>
00143 void serialize (Archive & ar_,
00144 const unsigned int version_)
00145 {
00146 ar_ & boost::serialization::make_nvp ("serie", __serie);
00147 ar_ & boost::serialization::make_nvp ("proba", __proba);
00148 ar_ & boost::serialization::make_nvp ("max", __max);
00149
00150 if (version_ > 0)
00151 {
00152 ar_ & boost::serialization::make_nvp ("starts",__starts);
00153
00154 if (version_ > 1)
00155 {
00156 ar_ & boost::serialization::make_nvp ("chi2",__chi2);
00157
00158 if (version_ > 2)
00159 {
00160 ar_ & boost::serialization::make_nvp ("absolute",__absolute);
00161 ar_ & boost::serialization::make_nvp ("extern",__extern);
00162 ar_ & boost::serialization::make_nvp ("minprob",__min_prob);
00163 ar_ & boost::serialization::make_nvp ("minchi2",__min_chi2);
00164
00165 }
00166 }
00167 }
00168 }
00169
00170 };
00171 }
00172
00173 BOOST_CLASS_VERSION(nemo3::gamma_tracking, 3)
00174
00175 #endif