BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPto3P.cc
Go to the documentation of this file.
1//-----------------------------------------------------------------------
2// File and Version Information:
3// $Id: EvtPto3P.cc,v 1.1.1.2 2007/10/26 05:03:14 pingrg Exp $
4//
5// Environment:
6// This software is part of the EvtGen package developed jointly
7// for the BaBar and CLEO collaborations. If you use all or part
8// of it, please give an appropriate acknowledgement.
9//
10// Copyright Information:
11// Copyright (C) 1998 Caltech, UCSB
12//
13// Module creator:
14// Alexei Dvoretskii, Caltech, 2001-2002.
15//-----------------------------------------------------------------------
17
19#include "EvtGenBase/EvtPDL.hh"
22using namespace EvtCyclic3;
23
25{
26 // There must be 3 daughters. All particles must be pseudoscalars.
27 // Charge must be conserved. Number of arguments must be non-zero.
28
29 EvtId parent = getParentId();
30 assert(getNDaug() == 3);
31 EvtId dau0 = getDaug(0);
32 EvtId dau1 = getDaug(1);
33 EvtId dau2 = getDaug(2);
34
39 assert(EvtPDL::chg3(parent) == EvtPDL::chg3(dau0) + EvtPDL::chg3(dau1) + EvtPDL::chg3(dau2));
40 assert(getNArg() > 0);
41
43}
44
46{
47 // Compute the interval size
48
49 EvtDalitzPlot plot = dp();
51 fact->build(parser,10000);
52 return fact;
53}
54
55
56std::vector<EvtVector4R> EvtPto3P::initDaughters(const EvtDalitzPoint& x) const
57{
58 std::vector<EvtVector4R> v;
59 assert(x.isValid());
60
61 // Calculate in the r.f. of AB
62
63 double eA = x.e(A,AB);
64 double eB = x.e(B,AB);
65 double eC = x.e(C,AB);
66 double pA = x.p(A,AB);
67 double pC = x.p(C,AB);
68 double cos = x.cosTh(CA,AB);
69 double sin = sqrt(1.0-cos*cos);
70
71 EvtVector4R vA(eA,0,0,pA);
72 EvtVector4R vB(eB,0,0,-pA);
73 EvtVector4R vC(eC,0,pC*sin,pC*cos);
74
75 // Boost from rest frame of AB to rest-frame of decaying particle
76 // vboost is the 4-momentum of frame being boosted from in the frame
77 // being boosted into.
78
79 EvtVector4R vboost = vA + vB + vC;
80 vboost.set(1,-vboost.get(1));
81 vboost.set(2,-vboost.get(2));
82 vboost.set(3,-vboost.get(3));
83 vA.applyBoostTo(vboost);
84 vB.applyBoostTo(vboost);
85 vC.applyBoostTo(vboost);
86
87 // Rotate
88
90 double beta = acos(EvtRandom::Flat( -1.0, 1.0 ));
91 double gamma = EvtRandom::Flat( EvtConst::twoPi );
92
93 vA.applyRotateEuler( alpha, beta, gamma );
94 vB.applyRotateEuler( alpha, beta, gamma );
95 vC.applyRotateEuler( alpha, beta, gamma );
96
97 // Fill vector
98
99 assert(v.size() == 0);
100 v.push_back(vA);
101 v.push_back(vB);
102 v.push_back(vC);
103
104 return v;
105}
106
107
108
109
110
111
112
113
114
115
116
const double alpha
double sin(const BesAngle a)
double cos(const BesAngle a)
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition: KarLud.h:35
virtual void build(const EvtMultiChannelParser &parser, int nItg)
static const double twoPi
Definition: EvtConst.hh:29
double p(EvtCyclic3::Index i, EvtCyclic3::Pair j) const
double e(EvtCyclic3::Index i, EvtCyclic3::Pair j) const
bool isValid() const
double cosTh(EvtCyclic3::Pair pairAng, EvtCyclic3::Pair pairRes) const
EvtId getParentId()
Definition: EvtDecayBase.hh:60
EvtId getDaug(int i)
Definition: EvtDecayBase.hh:66
Definition: EvtId.hh:27
const EvtDalitzPoint & x() const
static EvtSpinType::spintype getSpinType(EvtId i)
Definition: EvtPDL.hh:61
static int chg3(EvtId i)
Definition: EvtPDL.hh:60
static double getMass(EvtId i)
Definition: EvtPDL.hh:46
EvtDalitzPlot dp()
Definition: EvtPto3P.cc:24
virtual std::vector< EvtVector4R > initDaughters(const EvtDalitzPoint &p) const
Definition: EvtPto3P.cc:56
virtual EvtAmpFactory< EvtDalitzPoint > * createFactory(const EvtMultiChannelParser &parser)
Definition: EvtPto3P.cc:45
static double Flat()
Definition: EvtRandom.cc:73
void applyRotateEuler(double alpha, double beta, double gamma)
Definition: EvtVector4R.cc:81
double get(int i) const
Definition: EvtVector4R.hh:179
void set(int i, double d)
Definition: EvtVector4R.hh:183
void applyBoostTo(const EvtVector4R &p4)
Definition: EvtVector4R.cc:108