38 ppLabGenFrame::ppLabGenFrame(
const std::string& sname,
39 const std::string& stitle) :
40 LabGenFrame(sname, stitle)
55 ppLabGenFrame::~ppLabGenFrame() {}
62 void ppLabGenFrame::SetPDFqqbar(){
70 void ppLabGenFrame::SetPDFgg(){
78 void ppLabGenFrame::SetPDFgq(){
86 void ppLabGenFrame::SetPDFqq(){
94 void ppLabGenFrame::SetEnergyP1(
double E){
100 void ppLabGenFrame::SetEnergyP2(
double E){
106 double ppLabGenFrame::GetEnergyP1()
const {
110 double ppLabGenFrame::GetEnergyP2()
const {
114 bool ppLabGenFrame::InitializeGenAnalysis(){
116 UnSoundBody(RF_FUNCTION);
117 return SetMind(
false);
120 double sqrtS = 2.*sqrt(m_Ep1*m_Ep2);
123 double Mmin = GetMinimumMassMCMC();
126 m_Log <<
"Unable to initialize event generation. ";
127 m_Log <<
"sqrt(S) of " << sqrtS <<
" ";
128 m_Log <<
"is less than minimum child mass of " << Mmin;
130 return SetMind(
false);
135 if(!LabGenFrame::InitializeGenAnalysis())
136 return SetMind(
false);
138 return SetMind(
true);
141 bool ppLabGenFrame::IterateMCMC(){
142 double deltaLogX = GetRandom()*2.-1.;
143 double deltaLogXOld = m_deltaLogX;
145 double probOld = GetProbMCMC();
146 m_deltaLogX = deltaLogX;
147 double probNew = GetProbMCMC();
150 if(probNew/probOld < GetRandom())
151 m_deltaLogX = deltaLogXOld;
153 LabGenFrame::IterateMCMC();
155 double C = m_ChildMassMCMC*m_ChildMassMCMC/4./m_Ep1/m_Ep2;
157 double expo = -m_deltaLogX*log(C);
158 double Xp1 = sqrt(C*exp(expo));
159 double Xp2 = sqrt(C*exp(-expo));
160 SetLongitudinalMomentum(m_Ep1*Xp1 - m_Ep2*Xp2);
162 SetLongitudinalMomentum(0.);
164 return SetMind(
true);
167 double ppLabGenFrame::GetProbMCMC(
double mass)
const {
171 double C = mass*mass/(4.*m_Ep1*m_Ep2);
172 double expo = -m_deltaLogX*log(C);
174 double Xp1 = sqrt(C*exp(expo));
175 double Xp2 = sqrt(C*exp(-expo));
179 prob *= pPDF_q(Xp1)*pPDF_qbar(Xp2)+pPDF_q(Xp2)*pPDF_qbar(Xp1);
181 prob *= pPDF_g(Xp1)*pPDF_g(Xp2);
183 prob *= pPDF_q(Xp1)*pPDF_g(Xp2)+pPDF_q(Xp2)*pPDF_g(Xp1);
185 prob *= pPDF_q(Xp1)*pPDF_q(Xp2);
190 double ppLabGenFrame::pPDF_q(
double x)
const {
191 if(x <= 0. || x >= 1.)
193 return fabs((1/x)*pow(x,m_PDF_eta_1)*pow(1-x,m_PDF_eta_2)*
194 (1.+m_PDF_eps_u*sqrt(x)+m_PDF_g_u*x));
197 double ppLabGenFrame::pPDF_qbar(
double x)
const {
198 if(x <= 0. || x >= 1.)
200 return fabs((1/x)*pow(x,m_PDF_del_S)*pow(1-x,m_PDF_eta_S)*
201 (1.+m_PDF_eps_S*sqrt(x)+m_PDF_g_S*x));
204 double ppLabGenFrame::pPDF_g(
double x)
const {
205 if(x <= 0. || x >= 1.)
207 return fabs((1/x)*(m_PDF_A_g*pow(x,m_PDF_del_g)*pow(1-x,m_PDF_eta_g)*
208 (1.+m_PDF_eps_g*sqrt(x)+m_PDF_g_g*x)+
209 m_PDF_A_g1*pow(x,m_PDF_del_g1)*pow(1-x,m_PDF_eta_g1)));
212 double ppLabGenFrame::m_PDF_eta_1 = 0.27871;
213 double ppLabGenFrame::m_PDF_eta_2 = 3.3627;
214 double ppLabGenFrame::m_PDF_eps_u = 4.4343;
215 double ppLabGenFrame::m_PDF_g_u = 38.599;
216 double ppLabGenFrame::m_PDF_del_S = -0.11912;
217 double ppLabGenFrame::m_PDF_eta_S = 9.4189;
218 double ppLabGenFrame::m_PDF_eps_S = -2.6287;
219 double ppLabGenFrame::m_PDF_g_S = 18.065;
220 double ppLabGenFrame::m_PDF_A_g = 3.4055;
221 double ppLabGenFrame::m_PDF_del_g = -0.12178;
222 double ppLabGenFrame::m_PDF_eta_g = 2.9278;
223 double ppLabGenFrame::m_PDF_eps_g = -2.3210;
224 double ppLabGenFrame::m_PDF_g_g = 1.9233;
225 double ppLabGenFrame::m_PDF_A_g1 = -1.6189;
226 double ppLabGenFrame::m_PDF_del_g1 = -0.23999;
227 double ppLabGenFrame::m_PDF_eta_g1 = 24.792;
virtual void Clear()
Clears GeneratorFrame of all connections to other objects.
virtual void Clear()
Clears GeneratorFrame of all connections to other objects.
virtual double GetMass() const
Get the mass of this frame.
virtual GeneratorFrame & GetChildFrame(int i=0) const
Get the frame of the i th child.