File indexing completed on 2025-04-19 09:10:00
0001 #ifndef COMIX_Phasespace_PS_Vertex_H
0002 #define COMIX_Phasespace_PS_Vertex_H
0003
0004 #include "METOOLS/Explicit/Vertex.H"
0005 #include "COMIX/Phasespace/PS_Info.H"
0006
0007 using namespace METOOLS;
0008
0009 namespace ATOOLS { class NLO_subevt; }
0010
0011 namespace COMIX {
0012
0013 typedef std::vector<PS_Info*> PS_Info_Vector;
0014
0015 class PS_Vertex: public Vertex {
0016 protected:
0017
0018 double m_alpha, m_oldalpha, m_weight;
0019 double m_np, m_sum, m_sum2;
0020 double m_mnp, m_msum, m_msum2;
0021
0022 int m_type;
0023
0024 ATOOLS::NLO_subevt *p_dip;
0025
0026 public:
0027
0028
0029 PS_Vertex(const Vertex_Key &key);
0030
0031
0032 void Evaluate();
0033
0034 void AddPoint(const double &weight);
0035 void Reset();
0036
0037 void MPISync();
0038
0039
0040 inline double Alpha() const { return m_alpha; }
0041 inline double OldAlpha() const { return m_oldalpha; }
0042
0043 inline double Weight() const { return m_weight; }
0044
0045 inline void SetAlpha(const double &alpha) { m_alpha=alpha; }
0046 inline void SetOldAlpha(const double &alpha) { m_oldalpha=alpha; }
0047
0048 inline void SetWeight(const double &weight) { m_weight=weight; }
0049
0050 inline double N() const { return m_np; }
0051 inline double Sum() const { return m_sum; }
0052 inline double Sum2() const { return m_sum2; }
0053
0054 inline void SetN(const double &n) { m_np=n; }
0055 inline void SetSum(const double &sum) { m_sum=sum; }
0056 inline void SetSum2(const double &sum2) { m_sum2=sum2; }
0057
0058 inline double Mean() const { return m_sum/m_np; }
0059 inline double Variance() const
0060 { return (m_sum2-m_sum*m_sum/m_np)/(m_np-1.0); }
0061 inline double Sigma() const
0062 { return sqrt(Variance()/m_np); }
0063
0064 inline void SetType(const int &type) { m_type=type; }
0065
0066 inline int Type() const { return m_type; }
0067
0068 inline void GetMPIVars(double *v)
0069 { v[0]=m_mnp; v[1]=m_msum; v[2]=m_msum2; }
0070 inline void AddMPIVars(const double *v)
0071 { m_mnp+=v[0]; m_msum+=v[1]; m_msum2+=v[2]; }
0072 inline void SetMPIVars(const double *v)
0073 { m_mnp=v[0]; m_msum=v[1]; m_msum2=v[2]; }
0074
0075 inline void SetDip(ATOOLS::NLO_subevt *const d) { p_dip=d; }
0076
0077 inline ATOOLS::NLO_subevt *Dip() const { return p_dip; }
0078
0079 };
0080
0081 }
0082
0083 #endif