Back to home page

EIC code displayed by LXR

 
 

    


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