File indexing completed on 2025-04-19 09:09:43
0001 #ifndef AHADIC_Formations_Singlet_Checker_H
0002 #define AHADIC_Formations_Singlet_Checker_H
0003
0004 #include "AHADIC++/Formation/Trivial_Splitter.H"
0005 #include "AHADIC++/Tools/Singlet_Tools.H"
0006 #include "AHADIC++/Tools/Soft_Cluster_Handler.H"
0007 #include <list>
0008 #include <map>
0009
0010 namespace AHADIC {
0011 class Singlet_Checker : public Singlet_Tools {
0012 private:
0013 std::list<Singlet *> * p_singlets;
0014 std::list<std::list<Singlet *>::iterator> m_badones;
0015
0016 using Transition = std::pair<Singlet*, ATOOLS::Flavour>;
0017 std::vector<Transition> m_transitions;
0018 std::list<Proto_Particle *> * p_hadrons;
0019
0020 Soft_Cluster_Handler * p_softclusters;
0021 Trivial_Splitter m_splitter;
0022
0023 Proto_Particle * p_part1, * p_part2;
0024 double m_minSmass2;
0025 bool m_isring;
0026
0027 ATOOLS::Vec4D m_singletmom;
0028 double m_targetmass;
0029 Singlet * p_recoiler;
0030
0031 long int m_direct_transitions, m_errors;
0032
0033 bool CheckSinglet();
0034 bool FusePartonsInLowMassSinglet();
0035 bool DealWithProblematicSinglets();
0036 void SortProblematicSinglets();
0037 bool FindOtherSingletToTransit();
0038 bool FindRecoilerForTransit();
0039 bool TestRecoiler();
0040 bool TransitProblematicSinglets();
0041 bool TransitProblematicSingletWithRecoiler();
0042 bool BoostRecoilerInNewSystem(const ATOOLS::Vec4D & newmom);
0043 void ForcedDecays();
0044 bool ForcedDecayOfTwoPartonSinglet();
0045 bool ExtractAndCheckFlavours();
0046 bool TwoGluonSingletToHadrons();
0047 bool TwoQuarkSingletToHadrons();
0048 void AddOrUpdateTransition(Singlet*, ATOOLS::Flavour& hadron);
0049 public:
0050 Singlet_Checker(std::list<Singlet *> * p_singlets,
0051 Soft_Cluster_Handler * softclusters);
0052 ~Singlet_Checker();
0053 void Init();
0054 void Reset();
0055
0056 bool operator()();
0057 };
0058 }
0059
0060 #endif