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