Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F19244264
ProductionMatrixElement.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
16 KB
Referenced Files
None
Subscribers
None
ProductionMatrixElement.h
View Options
// -*- C++ -*-
#ifndef HERWIG_ProductionMatrixElement_H
#define HERWIG_ProductionMatrixElement_H
//
// This is the declaration of the ProductionMatrixElement class.
#include
<ThePEG/Config/ThePEG.h>
#include
<ThePEG/Utilities/ClassDescription.h>
#include
<ThePEG/Helicity/RhoDMatrix.h>
// #include "ProductionMatrixElement.fh"
// #include "ProductionMatrixElement.xh"
namespace
Herwig
{
using
ThePEG
::
Helicity
::
RhoDMatrix
;
namespace
Helicity
{
using
namespace
ThePEG
;
/** \ingroup Helicity
*
* The storage of the helicity amplitude expression for the matrix element
* of a hard process. Two incoming particles and an arbitary number of
* external particles are supported.
*
* @see DecayMatrixElement
* @see RhoDMatrix
* @see HardVertex
*
* \author Peter Richardson
*/
class
ProductionMatrixElement
:
public
Base
{
public
:
/** @name Standard constructors and destructors. */
//@{
/**
* Constructor for 2-1 scattering.
* @param in1 \f$2S+1\f$ for the first incoming particle.
* @param in2 \f$2S+1\f$ for the second incoming particle.
* @param out \f$2S+1\f$ for the outgoing particle.
*/
inline
ProductionMatrixElement
(
PDT
::
Spin
in1
,
PDT
::
Spin
in2
,
PDT
::
Spin
out
);
/**
* Constructor for 2-2 scattering.
* @param in1 \f$2S+1\f$ for the first incoming particle.
* @param in2 \f$2S+1\f$ for the second incoming particle.
* @param out1 \f$2S+1\f$ for the first outgoing particle.
* @param out2 \f$2S+1\f$ for the second outgoing particle.
*/
inline
ProductionMatrixElement
(
PDT
::
Spin
in1
,
PDT
::
Spin
in2
,
PDT
::
Spin
out1
,
PDT
::
Spin
out2
);
/**
* Constructor for 2-3 scattering.
* @param in1 \f$2S+1\f$ for the first incoming particle.
* @param in2 \f$2S+1\f$ for the second incoming particle.
* @param out1 \f$2S+1\f$ for the first outgoing particle.
* @param out2 \f$2S+1\f$ for the second outgoing particle.
* @param out3 \f$2S+1\f$ for the third outgoing particle.
*/
inline
ProductionMatrixElement
(
PDT
::
Spin
in1
,
PDT
::
Spin
in2
,
PDT
::
Spin
out1
,
PDT
::
Spin
out2
,
PDT
::
Spin
out3
);
/**
* Constructor for 2-4 scattering.
* @param in1 \f$2S+1\f$ for the first incoming particle.
* @param in2 \f$2S+1\f$ for the second incoming particle.
* @param out1 \f$2S+1\f$ for the first outgoing particle.
* @param out2 \f$2S+1\f$ for the second outgoing particle.
* @param out3 \f$2S+1\f$ for the third outgoing particle.
* @param out4 \f$2S+1\f$ for the fourth outgoing particle.
*/
inline
ProductionMatrixElement
(
PDT
::
Spin
in1
,
PDT
::
Spin
in2
,
PDT
::
Spin
out1
,
PDT
::
Spin
out2
,
PDT
::
Spin
out3
,
PDT
::
Spin
out4
);
/**
* Constructor for 2-5 scattering.
* @param in1 \f$2S+1\f$ for the first incoming particle.
* @param in2 \f$2S+1\f$ for the second incoming particle.
* @param out1 \f$2S+1\f$ for the first outgoing particle.
* @param out2 \f$2S+1\f$ for the second outgoing particle.
* @param out3 \f$2S+1\f$ for the third outgoing particle.
* @param out4 \f$2S+1\f$ for the fourth outgoing particle.
* @param out5 \f$2S+1\f$ for the fifth outgoing particle.
*/
inline
ProductionMatrixElement
(
PDT
::
Spin
in1
,
PDT
::
Spin
in2
,
PDT
::
Spin
out1
,
PDT
::
Spin
out2
,
PDT
::
Spin
out3
,
PDT
::
Spin
out4
,
PDT
::
Spin
out5
);
/**
* Constructor for 2-6 scattering.
* @param in1 \f$2S+1\f$ for the first incoming particle.
* @param in2 \f$2S+1\f$ for the second incoming particle.
* @param out1 \f$2S+1\f$ for the first outgoing particle.
* @param out2 \f$2S+1\f$ for the second outgoing particle.
* @param out3 \f$2S+1\f$ for the third outgoing particle.
* @param out4 \f$2S+1\f$ for the fourth outgoing particle.
* @param out5 \f$2S+1\f$ for the fifth outgoing particle.
* @param out6 \f$2S+1\f$ for the sixth outgoing particle.
*/
inline
ProductionMatrixElement
(
PDT
::
Spin
in1
,
PDT
::
Spin
in2
,
PDT
::
Spin
out1
,
PDT
::
Spin
out2
,
PDT
::
Spin
out3
,
PDT
::
Spin
out4
,
PDT
::
Spin
out5
,
PDT
::
Spin
out6
);
/**
* Constructor for 2-n scattering.
* @param in1 \f$2S+1\f$ for the first incoming particle.
* @param in2 \f$2S+1\f$ for the second incoming particle.
* @param out A vector containing \f$2S+1\f$ for the outgoing particles.
*/
inline
ProductionMatrixElement
(
PDT
::
Spin
in1
,
PDT
::
Spin
in2
,
vector
<
PDT
::
Spin
>
out
);
/**
* Default constructor.
*/
inline
ProductionMatrixElement
();
//@}
public
:
/** @name Access to the spins of the particles. */
//@{
/**
* Get the spins of the incoming particles particle
* @return A vector containing \f$2S+1\f$ for the two incoming particles.
*/
inline
vector
<
PDT
::
Spin
>
inspin
();
/**
* Get the spins of the outgoing particles.
* @return A vector containing \f$2S+1\f$ for the outgoing particles.
*/
inline
vector
<
PDT
::
Spin
>
outspin
();
//@}
public
:
/** @name Access to the individual helicity components. */
//@{
/**
* Access the helicity components for a 2-1 scattering. This method supplies
* the component but does not allow it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel The helicity of the outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel
)
const
;
/**
* Access the helicity components for a 2-1 scattering. This method supplies
* the component and allows it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel The helicity of the outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
&
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel
);
/**
* Access the helicity components for a 2-2 scattering. This method supplies
* the component but does not allow it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
)
const
;
/**
* Access the helicity components for a 2-2 scattering. This method supplies
* the component and allows it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
&
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
);
/**
* Access the helicity components for a 2-3 scattering. This method supplies
* the component but does not allow it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
)
const
;
/**
* Access the helicity components for a 2-3 scattering. This method supplies
* the component and allows it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
&
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
);
/**
* Access the helicity components for a 2-4 scattering. This method supplies
* the component but does not allow it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @param outhel4 The helicity of the fourth outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
,
unsigned
int
outhel4
)
const
;
/**
* Access the helicity components for a 2-4 scattering. This method supplies
* the component and allows it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @param outhel4 The helicity of the fourth outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
&
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
,
unsigned
int
outhel4
);
/**
* Access the helicity components for a 2-5 scattering. This method supplies
* the component but does not allow it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @param outhel4 The helicity of the fourth outgoing particle.
* @param outhel5 The helicity of the fifth outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
,
unsigned
int
outhel4
,
unsigned
int
outhel5
)
const
;
/**
* Access the helicity components for a 2-5 scattering. This method supplies
* the component and allows it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @param outhel4 The helicity of the fourth outgoing particle.
* @param outhel5 The helicity of the fifth outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
&
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
,
unsigned
int
outhel4
,
unsigned
int
outhel5
);
/**
* Access the helicity components for a 2-6 scattering. This method supplies
* the component but does not allow it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @param outhel4 The helicity of the fourth outgoing particle.
* @param outhel5 The helicity of the fifth outgoing particle.
* @param outhel6 The helicity of the sixth outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
,
unsigned
int
outhel4
,
unsigned
int
outhel5
,
unsigned
int
outhel6
)
const
;
/**
* Access the helicity components for a 2-6 scattering. This method supplies
* the component and allows it to be changed.
* @param inhel1 The helicity of the first incoming particle.
* @param inhel2 The helicity of the second incoming particle.
* @param outhel1 The helicity of the first outgoing particle.
* @param outhel2 The helicity of the second outgoing particle.
* @param outhel3 The helicity of the third outgoing particle.
* @param outhel4 The helicity of the fourth outgoing particle.
* @param outhel5 The helicity of the fifth outgoing particle.
* @param outhel6 The helicity of the sixth outgoing particle.
* @return The matrix element for the given helicities.
*/
inline
Complex
&
operator
()
(
unsigned
int
inhel1
,
unsigned
int
inhel2
,
unsigned
int
outhel1
,
unsigned
int
outhel2
,
unsigned
int
outhel3
,
unsigned
int
outhel4
,
unsigned
int
outhel5
,
unsigned
int
outhel6
);
/**
* Access the helicity components for a 2-n scattering. This method supplies
* the component but does not allow it to be changed.
* @param hel The helicities of the incoming and outgoing particles
* @return The matrix element for the given helicities.
*/
inline
Complex
operator
()
(
vector
<
unsigned
int
>
hel
)
const
;
/**
* Access the helicity components for a 2-n scattering. This method supplies
* the component and allows it to be changed.
* @param hel The helicities of the incoming and outgoing particles
* @return The matrix element for the given helicities.
*/
inline
Complex
&
operator
()
(
vector
<
unsigned
int
>
hel
);
//@}
public
:
/**
* Calculate the decay matrix for an incoming particle.
*/
RhoDMatrix
calculateDMatrix
(
int
,
RhoDMatrix
,
vector
<
RhoDMatrix
>
);
/**
* Calculate the rho matrix for a given outgoing particle.
*/
RhoDMatrix
calculateRhoMatrix
(
int
,
RhoDMatrix
,
RhoDMatrix
,
vector
<
RhoDMatrix
>
);
public
:
/**
* Reset the matrix element.
*/
inline
void
reset
(
const
ProductionMatrixElement
&
)
const
;
public
:
/**
* Standard Init function used to initialize the interfaces.
*/
static
void
Init
();
private
:
/**
* Describe a concrete class without persistent data.
*/
static
NoPIOClassDescription
<
ProductionMatrixElement
>
initProductionMatrixElement
;
/**
* Private and non-existent assignment operator.
*/
ProductionMatrixElement
&
operator
=
(
const
ProductionMatrixElement
&
);
private
:
/**
* Set the size of the vector containing the matrix element.
*/
inline
void
setMESize
();
private
:
/**
* Number of outgoing particles.
*/
mutable
unsigned
int
_nout
;
/**
* Spin of the incoming particles as 2s+1.
*/
mutable
vector
<
PDT
::
Spin
>
_inspin
;
/**
* Spins of the outgoing particles.
*/
mutable
vector
<
PDT
::
Spin
>
_outspin
;
/**
* Storage of the matrix element, a vector is better for memory usage.
*/
mutable
vector
<
Complex
>
_matrixelement
;
/**
* Constants needed to map the index of the vector to a helicity structure.
*/
mutable
vector
<
int
>
_constants
;
};
}
}
namespace
ThePEG
{
/** @cond TRAITSPECIALIZATIONS */
/**
* The following template specialization informs ThePEG about the
* base class of ProductionMatrixElement.
*/
template
<>
struct
BaseClassTrait
<
Herwig
::
Helicity
::
ProductionMatrixElement
,
1
>
{
/** Typedef of the base class of ProductionMatrixElement. */
typedef
Base
NthBase
;
};
/**
* The following template specialization informs ThePEG about the
* name of this class and the shared object where it is defined.
*/
template
<>
struct
ClassTraits
<
Herwig
::
Helicity
::
ProductionMatrixElement
>
:
public
ClassTraitsBase
<
Herwig
::
Helicity
::
ProductionMatrixElement
>
{
/**
* Return the class name.
*/
static
string
className
()
{
return
"Herwig++::ProductionMatrixElement"
;
}
};
/** @endcond */
}
#include
"ProductionMatrixElement.icc"
#endif
/* HERWIG_ProductionMatrixElement_H */
File Metadata
Details
Attached
Mime Type
text/x-c++
Expires
Tue, Sep 30, 4:40 AM (15 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
6564752
Default Alt Text
ProductionMatrixElement.h (16 KB)
Attached To
Mode
rHERWIGHG herwighg
Attached
Detach File
Event Timeline
Log In to Comment