]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenModels/EvtSingleParticle.cxx
adding task for subtracting background after jet finding, used for all clustering...
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtSingleParticle.cxx
CommitLineData
da0e9ce3 1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtSingleParticle.cc
12//
13// Description: Special model to generate single particles.
14//
15// Modification history:
16//
17// RYD Febuary 17,1998 Module created
18//
19//------------------------------------------------------------------------
20//
21#include "EvtGenBase/EvtPatches.hh"
22#include <stdlib.h>
23#include "EvtGenBase/EvtParticle.hh"
24#include "EvtGenBase/EvtRandom.hh"
25#include "EvtGenBase/EvtPDL.hh"
26#include "EvtGenModels/EvtSingleParticle.hh"
27#include "EvtGenBase/EvtReport.hh"
28#include <string>
29#include "EvtGenBase/EvtConst.hh"
30using std::endl;
31
32EvtSingleParticle::~EvtSingleParticle() {}
33
34std::string EvtSingleParticle::getName(){
35
36 return "SINGLE";
37
38}
39
40EvtDecayBase* EvtSingleParticle::clone(){
41
42 return new EvtSingleParticle();
43
44}
45
46void EvtSingleParticle::init(){
47
48
49 //turn off checks for charge conservation
50 disableCheckQ();
51
52 if ((getNArg()==6)||(getNArg()==4)||(getNArg()==2)) {
53
54 if (getNArg()==6){
55 //copy the arguments into eaiser to remember names!
56
57 pmin=getArg(0);
58 pmax=getArg(1);
59
60 cthetamin=getArg(2);
61 cthetamax=getArg(3);
62
63 phimin=getArg(4);
64 phimax=getArg(5);
65
66 }
67
68 if (getNArg()==4){
69 //copy the arguments into eaiser to remember names!
70
71 pmin=getArg(0);
72 pmax=getArg(1);
73
74 cthetamin=getArg(2);
75 cthetamax=getArg(3);
76
77 phimin=0.0;
78 phimax=EvtConst::twoPi;
79
80 }
81
82 if (getNArg()==2){
83 //copy the arguments into eaiser to remember names!
84
85 pmin=getArg(0);
86 pmax=getArg(1);
87
88 cthetamin=-1.0;
89 cthetamax=1.0;
90
91 phimin=0.0;
92 phimax=EvtConst::twoPi;
93
94 }
95
96
97 }else{
98
99 report(ERROR,"EvtGen") << "EvtSingleParticle generator expected "
100 << " 6, 4, or 2 arguments but found:"<<getNArg()<<endl;
101 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
102 ::abort();
103
104 }
105
106
107 report(INFO,"EvtGen") << "The single particle generator has been configured:"
108 <<endl;
109 report(INFO,"EvtGen") << pmax << " > p > " << pmin <<endl;
110 report(INFO,"EvtGen") << cthetamax << " > costheta > " << cthetamin <<endl;
111 report(INFO,"EvtGen") << phimax << " > phi > " << phimin <<endl;
112
113}
114
115void EvtSingleParticle::decay( EvtParticle *p ){
116
117 EvtParticle *d;
118 EvtVector4R p4;
119
120 double mass=EvtPDL::getMass(getDaug(0));
121
122 p->makeDaughters(getNDaug(),getDaugs());
123 d=p->getDaug(0);
124
125 //generate flat distribution in p
126 //we are now in the parents restframe! This means the
127 //restframe of the e+e- collison.
128 double pcm=EvtRandom::Flat(pmin,pmax);
129 //generate flat distribution in phi.
130 double phi=EvtRandom::Flat(phimin,phimax);
131
132 double cthetalab;
133
134 do{
135 //generate flat distribution in costheta
136 double ctheta=EvtRandom::Flat(cthetamin,cthetamax);
137 double stheta=sqrt(1.0-ctheta*ctheta);
138 p4.set(sqrt(mass*mass+pcm*pcm),pcm*cos(phi)*stheta,
139 pcm*sin(phi)*stheta,pcm*ctheta);
140
141 d->init( getDaug(0),p4);
142
143 //get 4 vector in the lab frame!
144 EvtVector4R p4lab=d->getP4Lab();
145 cthetalab=p4lab.get(3)/p4lab.d3mag();
146 }while (cthetalab>cthetamax||cthetalab<cthetamin);
147
148 return ;
149}
150
151
152