File indexing completed on 2025-04-19 09:09:48
0001 #ifndef AMISIC_Perturbative_Single_Collision_Handler_H
0002 #define AMISIC_Perturbative_Single_Collision_Handler_H
0003
0004 #include "AMISIC++/Perturbative/MI_Processes.H"
0005 #include "AMISIC++/Tools/Over_Estimator.H"
0006 #include "ATOOLS/Phys/Blob.H"
0007 #include "ATOOLS/Math/Histogram.H"
0008 #include "REMNANTS/Main/Remnant_Handler.H"
0009 #include <map>
0010 #include <string>
0011
0012 namespace AMISIC {
0013 class Single_Collision_Handler {
0014 private:
0015 REMNANTS::Remnant_Handler * p_remnants;
0016 MI_Processes * p_processes;
0017 Over_Estimator * p_overestimator;
0018 double m_pt2, m_pt2min;
0019 double m_S, m_lastpt2, m_residualx1, m_residualx2, m_Ycms;
0020
0021 MI_Process * p_proc;
0022 double m_xt, m_ymax, m_yvol, m_y3, m_y4, m_x1, m_x2;
0023 double m_shat, m_that, m_uhat;
0024 double m_muf2, m_mur2;
0025
0026 bool m_ana;
0027 std::map<std::string,ATOOLS::Histogram *> m_histos;
0028 void InitAnalysis();
0029 void FinishAnalysis();
0030 void AnalyseWeight(const double & weight);
0031 void Analyse(const double & pt2,ATOOLS::Blob * blob);
0032
0033 bool SelectPT2(const double & pt2);
0034 bool SelectRapidities();
0035 bool CalcXs();
0036 bool CalcMandelstams();
0037 ATOOLS::Blob * MakeBlob();
0038 public:
0039 Single_Collision_Handler();
0040 ~Single_Collision_Handler();
0041
0042 void Init(REMNANTS::Remnant_Handler * remnant_handler,
0043 MI_Processes * processes, Over_Estimator * overestimator);
0044 void UpdateSandY(double s, double y);
0045 ATOOLS::Blob * NextScatter();
0046 bool TestRemnants() const;
0047
0048
0049 inline void SetResidualX(const double & E1, const double & E2) {
0050 m_residualx1 = E1/InMomentum(0)[0];
0051 m_residualx2 = E2/InMomentum(1)[0];
0052 }
0053 inline void SetLastPT2(const double pt2=-1.) {
0054 m_lastpt2 = pt2<0.?m_S/4.:pt2;
0055 }
0056 inline void SetPosition(const size_t & beam,const ATOOLS::Vec4D & pos) {
0057 p_remnants->GetRemnant(beam)->SetPosition(pos);
0058 }
0059 inline REMNANTS::Remnant_Base * GetRemnant(const size_t & beam) const {
0060 return p_remnants->GetRemnant(beam);
0061 }
0062 inline ATOOLS::Vec4D Position(const size_t & beam) const {
0063 return p_remnants->GetRemnant(beam)->Position();
0064 }
0065 inline ATOOLS::Vec4D InMomentum(const size_t & beam) const {
0066 return p_remnants->GetRemnant(beam)->InMomentum();
0067 }
0068 inline const double B() const {
0069 return sqrt(ATOOLS::dabs((p_remnants->GetRemnant(0)->Position()-
0070 p_remnants->GetRemnant(1)->Position()).Abs2()));
0071 }
0072 inline const double & muF2() const { return m_muf2; }
0073 inline const double & muR2() const { return m_mur2; }
0074 inline const double & LastPT2() const { return m_lastpt2; }
0075 inline const double & PT2() const { return m_pt2; }
0076 inline const double & Y3() const { return m_y3; }
0077 inline const double & Y4() const { return m_y4; }
0078
0079
0080 void Test(const double & Q2,const long int & n);
0081 };
0082 }
0083
0084 #endif