Commit 71306a9a authored by Marek Schoenherr's avatar Marek Schoenherr
Browse files

merged inprovements of LHOLE interface from trunk

svn merge -c 19354 svn+ssh://hepforge/hepforge/svn/sherpa/trunk/SHERPA .
parent c271afba
......@@ -7,6 +7,7 @@
#include "ATOOLS/Org/Exception.H"
#include "ATOOLS/Org/MyStrStream.H"
#include "ATOOLS/Org/Data_Reader.H"
#include "ATOOLS/Math/Poincare.H"
using namespace OLE;
using namespace PHASIC;
......@@ -19,7 +20,7 @@ extern "C" void OLP_EvalSubProcess(int,double*,double,double*,double*);
class LH_OLE_Interface : public Virtual_ME2_Base {
size_t m_pn;
bool m_active;
bool m_active, m_needcmsboost;
int m_OLE_id;
double* p_momenta;
double p_result[4];
......@@ -40,17 +41,20 @@ extern "C" void OLP_EvalSubProcess(int,double*,double,double*,double*);
int LH_OLE_Interface::s_oleinit=0;
LH_OLE_Interface::LH_OLE_Interface(const Process_Info& pi, const Flavour_Vector& flavs,bool active) :
Virtual_ME2_Base(pi, flavs), m_OLE_id(-1), p_momenta(0)
LH_OLE_Interface::LH_OLE_Interface(const Process_Info& pi,
const Flavour_Vector& flavs,bool active) :
Virtual_ME2_Base(pi, flavs), m_pn(flavs.size()), m_active(active),
m_needcmsboost(false), m_OLE_id(-1), p_momenta(NULL), m_nf(0)
{
m_active=active;
if (!m_active) return;
m_mode = 0;
m_drmode = 1;
Flavour hfl(kf_quark);
m_nf = hfl.Size()/2;
m_pn=flavs.size();
for (size_t i(0);i<Flavour(kf_quark).Size();++i) {
if (Flavour(kf_quark)[i].Strong()) ++m_nf;
}
if (m_nf%2==1) THROW(fatal_error,"Uneven number of quark and anti-quark flavours.");
m_nf/=2;
msg_Debugging()<<METHOD<<"(): nf = "<<m_nf<<std::endl;
bool contract(0);
string orderfn("OLE_order.lh");
......@@ -64,6 +68,7 @@ LH_OLE_Interface::LH_OLE_Interface(const Process_Info& pi, const Flavour_Vector&
if (reader.ReadFromFile(fname,"LHOLE_CONTRACTFILE")) {
contractfn=fname;
}
m_needcmsboost=reader.GetValue<int>("LHOLE_CMSBOOST",0);
ifstream ifile;
ifile.open(contractfn.c_str());
if (ifile) {
......@@ -89,6 +94,12 @@ LH_OLE_Interface::LH_OLE_Interface(const Process_Info& pi, const Flavour_Vector&
lhfile.AddParameter("W_width "+ToString(Flavour(kf_Wplus).Width()));
double sin_th_2=MODEL::s_model->ScalarConstant(std::string("sin2_thetaW"));
lhfile.AddParameter("sin_th_2 "+ToString(sin_th_2));
lhfile.AddParameter("H_mass "+ToString(Flavour(kf_h0).Mass()));
lhfile.AddParameter("H_width "+ToString(Flavour(kf_h0).Width()));
lhfile.AddParameter("top_mass "+ToString(Flavour(kf_t).Mass()));
lhfile.AddParameter("top_width "+ToString(Flavour(kf_t).Width()));
lhfile.AddParameter("bottom_mass "+ToString(Flavour(kf_b).Mass()));
lhfile.AddParameter("bottom_width "+ToString(Flavour(kf_b).Width()));
lhfile.AddParameter("");
lhfile.AddParameter("# process list");
}
......@@ -128,10 +139,15 @@ LH_OLE_Interface::LH_OLE_Interface(const Process_Info& pi, const Flavour_Vector&
p_result[3]=1.;
}
void LH_OLE_Interface::Calc(const Vec4D_Vector& momenta) {
void LH_OLE_Interface::Calc(const Vec4D_Vector& pp) {
if (!m_active) return;
if (m_OLE_id<0) return;
Vec4D_Vector momenta(pp);
if (m_needcmsboost) {
Poincare cms(momenta[0]+momenta[1]);
for (size_t i(0);i<momenta.size();++i) cms.Boost(momenta[i]);
}
for (size_t i=0;i<m_pn;i++) {
p_momenta[0+i*5]=momenta[i][0];
p_momenta[1+i*5]=momenta[i][1];
......
(run){
EVENTS 100000;
SHERPA_LDADD OLE
LHOLE_CMSBOOST 0
}(run);
(processes){
Process 93 93 -> 11 -12 93;
......
......@@ -34,4 +34,6 @@ In the above example, the corresponding library to be loaded would be
called @code{libOLE.so}.
@item both the factorisation and renormalisation scales are set to the
transverse mass of the electron-neutrino pair.
@item @code{LHOLE_CMSBOOST} can be set to @code{1} if the OLE requires the phase
space points to be in the CMS.
@end itemize
@node External one-loop ME
@section External one-loop ME
@cindex LHOLE_ORDERFILE
@cindex LHOLE_CONTRACTFILE
@cindex LHOLE_CMSBOOST
Sherpa includes only a very limited selection of one-loop matrix elements.
To make full use of the implemented automated dipole subtraction it is
......@@ -27,7 +30,9 @@ The interface:
one-loop processes that are needed for the NLO calculation. This information
is stored in a file, by default called @code{OLE_order.lh}.
The external one-loop code (OLE) should confirm these settings/requests
and write out a file @code{OLE_contract.lh}. For the syntax and
and write out a file @code{OLE_contract.lh}. Both filenames can be customised
using @code{LHOLE_ORDERFILE=<order-file>} and
@code{<LHOLE_CONTRACTFILE=<contract-file>}. For their syntax and
details see @mycite{Binoth2010xt}.
For Sherpa the output/input of the order/contract file is handled
......@@ -39,8 +44,13 @@ latter file via
lhfile.AddParameter(...);
@end verbatim
and might require an update for specific OLE or processes.
and might require an update for specific OLE or processes. Per default,
in addition to the standard options @code{MatrixElementSquareType},
@code{CorrectionType}, @code{IRregularisation}, @code{AlphasPower},
@code{AlphaPower} and @code{OperationMode} the masses and width of the
W, Z and Higgs bosons and the top and bottom quarks are written out
in free format, such that the respective OLE parameters can be easily
synchronised.
@item At runtime the communication is performed via function calls.
To allow Sherpa to call the external code the functions
......@@ -78,4 +88,8 @@ histograms. Thus, then when installing Sherpa the option
@code{--enable-analysis} must be include on the command line when
Sherpa is configured, see @ref{ANALYSIS}.
@item Per default, Sherpa generates phase space points in the lab frame.
If @code{LHOLE_CMSBOOST=1} is set, these phase space points are boosted to
the centre of mass system before they are passed to the OLE.
@end itemize
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment