]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenModels/EvtPto3P.cxx
adding task for subtracting background after jet finding, used for all clustering...
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtPto3P.cxx
CommitLineData
da0e9ce3 1//-----------------------------------------------------------------------
2// File and Version Information:
3// $Id: EvtPto3P.cc,v 1.13 2004/12/21 22:16:05 ryd 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//-----------------------------------------------------------------------
16#include "EvtGenBase/EvtPatches.hh"
17
18#include "EvtGenBase/EvtPatches.hh"
19#include "EvtGenBase/EvtPDL.hh"
20#include "EvtGenModels/EvtPto3P.hh"
21#include "EvtGenBase/EvtPto3PAmpFactory.hh"
22using namespace EvtCyclic3;
23
24EvtDalitzPlot EvtPto3P::dp()
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
35 assert(EvtPDL::getSpinType(parent) == EvtSpinType::SCALAR);
36 assert(EvtPDL::getSpinType(dau0) == EvtSpinType::SCALAR);
37 assert(EvtPDL::getSpinType(dau1) == EvtSpinType::SCALAR);
38 assert(EvtPDL::getSpinType(dau2) == EvtSpinType::SCALAR);
39 assert(EvtPDL::chg3(parent) == EvtPDL::chg3(dau0) + EvtPDL::chg3(dau1) + EvtPDL::chg3(dau2));
40 assert(getNArg() > 0);
41
42 return EvtDalitzPlot(EvtPDL::getMass(dau0),EvtPDL::getMass(dau1),EvtPDL::getMass(dau2),EvtPDL::getMass(parent));
43}
44
45EvtAmpFactory<EvtDalitzPoint>* EvtPto3P::createFactory(const EvtMultiChannelParser& parser)
46{
47 // Compute the interval size
48
49 EvtDalitzPlot plot = dp();
50 EvtAmpFactory<EvtDalitzPoint>* fact = new EvtPto3PAmpFactory(plot);
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
89 double alpha = EvtRandom::Flat( EvtConst::twoPi );
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