All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
include/N3AnaBase/event/gamma_tracking.h
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         /* /\* interface i_serializable *\/ */
00095         /* virtual const std::string & get_serial_tag () const{}     */
00096         /* /\* interface i_clear *\/ */
00097         /* virtual void clear (){} */
00098         /* /\* interface i_tree_dumpable *\/ */
00099         /* virtual void tree_dump (std::ostream & out_         = std::clog,  */
00100         /*                      const std::string & title_  = "", */
00101         /*                      const std::string & indent_ = "", */
00102         /*                      bool inherit_               = false) const{} */
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             //version !!!
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                       }//2
00166                   }//1
00167               }//0
00168           }
00169 
00170       };
00171 }
00172 
00173 BOOST_CLASS_VERSION(nemo3::gamma_tracking, 3)
00174 
00175 #endif