File indexing completed on 2025-04-19 09:10:13
0001 #ifndef REMNANTS_Tools_Kinematics_Generator_H
0002 #define REMNANTS_Tools_Kinematics_Generator_H
0003
0004 #include "REMNANTS/Main/Remnant_Base.H"
0005 #include "REMNANTS/Tools/Primordial_KPerp.H"
0006 #include "ATOOLS/Phys/Blob_List.H"
0007 #include "ATOOLS/Phys/Momenta_Stretcher.H"
0008
0009 namespace REMNANTS {
0010 struct kin_type {
0011 enum code {
0012 none = 0,
0013 intact = 1,
0014 coll = 2,
0015 DIS1 = 4,
0016 DIS2 = 5,
0017 hh = 8
0018 };
0019 };
0020 class Remnant_Handler;
0021
0022 class Kinematics_Generator {
0023 private:
0024 Remnant_Handler * p_rhandler;
0025 Remnant_Base * p_remnants[2];
0026 ATOOLS::Part_List * p_extracted[2], * p_spectators[2];
0027 ATOOLS::Blob * p_softblob;
0028
0029 kin_type::code m_kintype;
0030
0031 Primordial_KPerp m_kperpGenerator;
0032 ATOOLS::Momenta_Stretcher m_stretcher;
0033
0034 ATOOLS::Poincare m_oldcmsboost, m_newcmsboost, m_rotate;
0035 std::set<ATOOLS::Blob *> m_boostedblobs;
0036
0037 double m_mass_sum;
0038 ATOOLS::Vec4D m_inmom[2], m_checkmom[2];
0039 ATOOLS::ParticleMomMap m_ktmap[2], m_shuffledmap;
0040
0041 unsigned long int m_warns, m_errors;
0042
0043 void SetKinType(Remnant_Handler * const rhandler);
0044 bool CollinearKinematics();
0045 bool TransverseKinematics();
0046 bool TransverseKinematicsHH();
0047 bool TransverseKinematicsDIS(const size_t & beam);
0048 bool AdjustShowerInitiators();
0049 bool BoostConnectedBlob(ATOOLS::Blob * blob,size_t & catcher);
0050 bool AdjustRemnants();
0051 bool AdjustFinalStateDIS(const size_t & beam);
0052
0053 bool CheckHH();
0054 bool CheckScatter(ATOOLS::Particle * p[2]);
0055 bool CheckRemnants();
0056 bool CheckDIS(const size_t & beam);
0057 const ATOOLS::Vec4D ExtractColourfulFS(const size_t & beam,
0058 std::vector<ATOOLS::Vec4D> & moms,
0059 std::vector<double> & masses,
0060 std::vector<ATOOLS::Particle *> & parts);
0061 const ATOOLS::Vec4D ExtractSpectators(const size_t & beam,
0062 std::vector<ATOOLS::Vec4D> & moms,
0063 std::vector<double> & masses,
0064 std::vector<ATOOLS::Particle *> & parts);
0065
0066 void InitKTMaps();
0067 const ATOOLS::Vec4D & ShuffledMomentum(ATOOLS::Particle *const part);
0068 public:
0069 Kinematics_Generator();
0070 ~Kinematics_Generator();
0071
0072 void Initialize(Remnant_Handler * const rhandler);
0073 ATOOLS::Blob * MakeSoftBlob();
0074 bool FillBlobs(ATOOLS::Blob_List *const bloblist);
0075
0076 inline Primordial_KPerp * GetKPerp() { return &m_kperpGenerator; }
0077 void Reset();
0078 };
0079 }
0080
0081 #endif