Pluto v6.3.0
Loading...
Searching...
No Matches
PEtaDoubleDalitzEnv.cc
Go to the documentation of this file.
1
2//Eta double Dalitz decay
3//
4//Envelope for the complete chain eta->gamma*gamma*->e+e-e+e-
5//
6// Author: I. Froehlich
7// Written: 30.3.2010
8//
10
11#include "PEtaDoubleDalitzEnv.h"
12
13
15 //clone the object
16 return new PEtaDoubleDalitzEnv((const PEtaDoubleDalitzEnv &)* this);
17};
18
19PEtaDoubleDalitzEnv::PEtaDoubleDalitzEnv(const Char_t *id, const Char_t *de, Int_t key) : PChannelModel(id, de, key) {
20 //Constructor
21 dil1 = dil2 = parent = NULL;
22};
23
24
26
27 parent = GetParticle("parent");
28 if (!parent) {
29 Warning("Init", "Parent not found");
30 return kFALSE;
31 }
32
33 dil1 = GetParticle("dilepton");
34 dil2 = GetParticle("dilepton");
35
36 if (!dil1 || !dil2) {
37 Warning("Init", "Dileptons not found");
38 return kFALSE;
39 }
40
41 ep1 = GetParticle("e+");
42 ep2 = GetParticle("e+");
43 em1 = GetParticle("e-");
44 em2 = GetParticle("e-");
45
46 return kTRUE;
47}
48
49
51 return kFALSE;
52}
53
55
56 //when we are at this stage, all particles are already in lab
57 //frame. We habe to boost them into the eta c.m.
58
59 //first make a copy
60 PParticle ep1_tmp(ep1);
61 PParticle ep2_tmp(ep2);
62 PParticle em1_tmp(em1);
63 PParticle em2_tmp(em2);
64
65 ep1_tmp.Boost(-parent->BoostVector());
66 ep2_tmp.Boost(-parent->BoostVector());
67 em1_tmp.Boost(-parent->BoostVector());
68 em2_tmp.Boost(-parent->BoostVector());
69
70 PParticle dil1_tmp(ep1_tmp);
71 dil1_tmp.AddTmp(em1_tmp);
72 PParticle dil2_tmp(ep2_tmp);
73 dil2_tmp.AddTmp(em2_tmp);
74
75 //rotate such that dileptons point to z-axis
76 Double_t Phi = dil1_tmp.Phi();
77 Double_t Theta = dil1_tmp.Theta();
78 ep1_tmp.RotateZ(-Phi);
79 ep1_tmp.RotateY(-Theta);
80 dil1_tmp.RotateZ(-Phi);
81 dil1_tmp.RotateY(-Theta);
82 ep1_tmp.Boost(0, 0, -dil1_tmp.Beta());
83 // em1_tmp.RotateZ(-dil1_tmp.Phi());
84 // em1_tmp.RotateY(-dil1_tmp.Theta());
85 // em1_tmp.Boost(0,0,-dil1_tmp.Beta()); --> Unused
86
87 Phi = dil2_tmp.Phi();
88 Theta = dil2_tmp.Theta();
89 ep2_tmp.RotateZ(-dil2_tmp.Phi());
90 ep2_tmp.RotateY(-dil2_tmp.Theta());
91 dil2_tmp.RotateZ(-Phi);
92 dil2_tmp.RotateY(-Theta);
93 ep2_tmp.Boost(0, 0, -dil2_tmp.Beta());
94 // em2_tmp.RotateZ(-dil2_tmp.Phi());
95 // em2_tmp.RotateY(-dil2_tmp.Theta());
96 // em2_tmp.Boost(0,0,-dil2_tmp.Beta()); --> Unused
97
98 Double_t theta1 = ep1_tmp.Theta();
99 Double_t theta2 = ep2_tmp.Theta();
100 Double_t phi = ep1_tmp.Phi() - ep2_tmp.Phi();
101
102 Double_t sin1_2 = sin(theta1)*sin(theta1);
103 Double_t sin2_2 = sin(theta2)*sin(theta2);
104
105 Double_t beta1_2 = 1 - 4* ep1->M2() / dil1_tmp.M2();
106 Double_t beta2_2 = 1 - 4* ep2->M2() / dil2_tmp.M2();
107
108 Double_t amplitude =
109 0.5*((1 + (1 - beta1_2*sin1_2) * (1 - beta2_2*sin2_2))
110 * sin(phi)* sin(phi) +
111 (2 - beta1_2*sin1_2 - beta2_2*sin2_2) * cos(phi)* cos(phi));
112
113 //cout << "EndOfChain " << amplitude << endl;
114
115 if (PUtils::sampleFlat() > amplitude) return kFALSE;
116
117 return kTRUE;
118}
119
ClassImp(PBeamLineSimulation) PBeamLineSimulation
PParticle * GetParticle(const Char_t *pflag=NULL)
PEtaDoubleDalitzEnv(const Char_t *id, const Char_t *de, Int_t key)
PDistribution * Clone(const char *delme=NULL) const
PParticle & AddTmp(const PParticle &p)
static Double_t sampleFlat()
Definition PUtils.h:121