File indexing completed on 2025-04-19 09:10:10
0001 #ifndef PHASIC_Channels_VHAAG_res_h
0002 #define PHASIC_Channels_VHAAG_res_h
0003
0004 #include "PHASIC++/Channels/Single_Channel.H"
0005 #include "PHASIC++/Channels/Vegas.H"
0006 #include <map>
0007
0008 namespace PHASIC {
0009 class VHAAG_res : public Single_Channel {
0010 int n_p1,m_type,n_d1,n_d2,n_b,m_rkf,n_ap;
0011 int *p_perm;
0012 double m_s0;
0013 ATOOLS::Vec4D* m_q;
0014 double* p_s;
0015 Vegas* p_vegas;
0016 bool m_ownvegas;
0017
0018 std::map<int,Vegas*>* p_sharedvegaslist;
0019
0020 double PiFunc(double a1,double a2,
0021 double s1b,double s2b,double c);
0022 void Split(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0023 ATOOLS::Vec4D& p1,ATOOLS::Vec4D& p2,int,int,double *ran);
0024 void Split0(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0025 ATOOLS::Vec4D& p1,ATOOLS::Vec4D& p2,int,int,double *ran);
0026 void SingleSplit(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0027 ATOOLS::Vec4D& p1,ATOOLS::Vec4D& p2,double,double *ran);
0028 void SingleSplitF(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0029 ATOOLS::Vec4D& p1,ATOOLS::Vec4D& p2,double,double *ran);
0030 void SingleSplitF0(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0031 ATOOLS::Vec4D& p1,ATOOLS::Vec4D& p2,double,double *ran);
0032 double SplitWeight(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0033 ATOOLS::Vec4D p1,ATOOLS::Vec4D p2,int,int,double *ran);
0034 double Split0Weight(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0035 ATOOLS::Vec4D p1,ATOOLS::Vec4D p2,int,int,double *ran);
0036 double SingleSplitWeight(ATOOLS::Vec4D q1,ATOOLS::Vec4D& Q,
0037 ATOOLS::Vec4D p1,ATOOLS::Vec4D p2,double,double *ran);
0038 double SingleSplitFWeight(ATOOLS::Vec4D q1,ATOOLS::Vec4D& Q,
0039 ATOOLS::Vec4D p1,ATOOLS::Vec4D p2,double,double *ran);
0040 double SingleSplitF0Weight(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0041 ATOOLS::Vec4D p1,ATOOLS::Vec4D p2,double,double *ran);
0042 void GenerateBosonMass(ATOOLS::Vec4D *p,double *ran);
0043 double BosonWeight(ATOOLS::Vec4D *p,double *ran);
0044 void GenerateBranch(ATOOLS::Vec4D q1,ATOOLS::Vec4D Q,
0045 ATOOLS::Vec4D* q,double*,int n,double *ran);
0046 double BranchWeight(ATOOLS::Vec4D q1,ATOOLS::Vec4D &Q,
0047 ATOOLS::Vec4D* q,double*,int n,double *ran);
0048 void ConstructMomenta(double a1,double a2,
0049 double s1,double s2,double s,
0050 ATOOLS::Vec4D q1,ATOOLS::Vec4D q2,
0051 ATOOLS::Vec4D& p1,ATOOLS::Vec4D& p2);
0052 void ConstructMomenta(double a1,double phi,
0053 double s1,double s2,double s,
0054 ATOOLS::Vec4D q1,ATOOLS::Vec4D& p1,ATOOLS::Vec4D& p2);
0055 void CalculateS0(Cut_Data *);
0056
0057 void Initialize(std::vector<int> perm, VHAAG_res* ovl);
0058
0059 public:
0060
0061 VHAAG_res(int _nin,int _nout,int pn,VHAAG_res* ovl);
0062
0063 ~VHAAG_res();
0064
0065 void AddPoint(double Value);
0066 void GenerateWeight(ATOOLS::Vec4D *,Cut_Data *);
0067 void GeneratePoint(ATOOLS::Vec4D *,Cut_Data *,double *);
0068 void MPISync() { p_vegas->MPISync(); }
0069 void Optimize() { p_vegas->Optimize(); }
0070 void EndOptimize() { p_vegas->EndOptimize(); }
0071 void WriteOut(std::string pId) { if (m_ownvegas) p_vegas->WriteOut(pId); }
0072 void ReadIn(std::string pId) { if (m_ownvegas) p_vegas->ReadIn(pId); }
0073
0074 int RKF() { return m_rkf; }
0075 int RD1() { return n_d1; }
0076 int RD2() { return n_d2; }
0077 int Type() { return m_type; }
0078 int OType();
0079 std::map<int,Vegas*>* GetSharedVegasList() { return p_sharedvegaslist; }
0080
0081 bool OptimizationFinished() { return p_vegas->Finished(); }
0082 };
0083 }
0084 #endif