#ifndef AHADIC_Tools_Double_Transitions_H #define AHADIC_Tools_Double_Transitions_H #include "AHADIC++/Tools/Single_Transitions.H" namespace AHADIC { class Flavour_Pair_Sorting_Mass { public : bool operator() (const Flavour_Pair & flpair1, const Flavour_Pair & flpair2) const { if ((flpair1.first==flpair2.first && flpair1.second==flpair2.second)) return false; if (ATOOLS::IsEqual(flpair1.first.HadMass()+flpair1.second.HadMass(), flpair2.first.HadMass()+flpair2.second.HadMass())) { if (flpair1.first.Kfcode()>flpair2.first.Kfcode()) return false; } if (flpair1.first.HadMass()+flpair1.second.HadMass()< flpair2.first.HadMass()+flpair2.second.HadMass()) return false; return true; } }; typedef std::map Double_Transition_List; typedef std::map Double_Transition_Map; class Double_Transitions { private: Double_Transition_Map m_transitions; double m_wtthres; double m_charm_strange_modifier, m_beauty_strange_modifier; double m_charm_baryon_modifier, m_beauty_baryon_modifier; void FillMap(Single_Transitions * singles); void Normalise(); public: Double_Transitions(Single_Transitions * singles); ~Double_Transitions(); Flavour_Pair GetLightestTransition(const Flavour_Pair & flavs); Flavour_Pair GetHeaviestTransition(const Flavour_Pair & flavs); double GetLightestMass(const Flavour_Pair & flavs); double GetHeaviestMass(const Flavour_Pair & flavs); Double_Transition_Map * GetTransitions() { return &m_transitions; } Double_Transition_List * operator[](const Flavour_Pair & flavs); void Print(const bool& full=false); }; } #endif