EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtVSPPwave.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
22
24#include "EvtGenBase/EvtPDL.hh"
29
30#include <stdlib.h>
31#include <string>
32
33std::string EvtVSPPwave::getName() const
34{
35 return "VSP_PWAVE";
36}
37
39{
40 return new EvtVSPPwave;
41}
42
44{
45 // check that there are 0 arguments
46 checkNArg( 0 );
47 checkNDaug( 2 );
48
50
53}
54
56{
57 setProbMax( 1 );
58}
59
61{
63
64 EvtParticle* gamma;
65 gamma = p->getDaug( 1 );
66
67 double m_p = p->mass();
68 EvtVector4R momgamma = gamma->getP4();
69
70 //work in the parent ,p, rest frame.
71 EvtVector4R p4_p;
72 p4_p.set( m_p, 0.0, 0.0, 0.0 );
73
74 // Put phase space results into the daughters.
75
76 EvtTensor4C tds;
77
78 double norm = 1 / ( m_p * momgamma.d3mag() );
79
80 tds = dual( EvtGenFunctions::directProd( norm * p4_p, momgamma ) );
81
82 vertex(
83 0, 0,
84 ( tds.cont1( p->eps( 0 ) ) ).cont( gamma->epsParentPhoton( 0 ).conj() ) );
85 vertex(
86 0, 1,
87 ( tds.cont1( p->eps( 0 ) ) ).cont( gamma->epsParentPhoton( 1 ).conj() ) );
88
89 vertex(
90 1, 0,
91 ( tds.cont1( p->eps( 1 ) ) ).cont( gamma->epsParentPhoton( 0 ).conj() ) );
92 vertex(
93 1, 1,
94 ( tds.cont1( p->eps( 1 ) ) ).cont( gamma->epsParentPhoton( 1 ).conj() ) );
95
96 vertex(
97 2, 0,
98 ( tds.cont1( p->eps( 2 ) ) ).cont( gamma->epsParentPhoton( 0 ).conj() ) );
99 vertex(
100 2, 1,
101 ( tds.cont1( p->eps( 2 ) ) ).cont( gamma->epsParentPhoton( 1 ).conj() ) );
102
103 return;
104}
EvtTensor4C dual(const EvtTensor4C &t2)
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
EvtDecayBase()=default
int getNDaug() const
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
const EvtId * getDaugs() const
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
double mass() const
virtual EvtVector4C epsParentPhoton(int i) const
virtual EvtVector4C eps(int i) const
EvtVector4C cont1(const EvtVector4C &v4) const
void decay(EvtParticle *p) override
std::string getName() const override
void initProbMax() override
void init() override
EvtDecayBase * clone() const override
EvtVector4C conj() const
double d3mag() const
void set(int i, double d)
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)