]> git.uio.no Git - u/mrichter/AliRoot.git/blame - JETAN/jetan2004/AliJFKtJet.cxx
SetInput call corrected for generated jets.
[u/mrichter/AliRoot.git] / JETAN / jetan2004 / AliJFKtJet.cxx
CommitLineData
b9a6a391 1// $Id$
2
3#include <Riostream.h>
4#include <vector>
5
6#include <TParticle.h>
7#include <TClonesArray.h>
8#include <TIterator.h>
9#include <TMath.h>
10
11#include "AliJFKtJet.h"
12#include "AliJFPreCluster.h"
13#include "AliJFCluster.h"
14
15ClassImp(AliJFKtJet)
16
17AliJFKtJet::AliJFKtJet(Int_t n) : AliJFJet(n)
18
19{
20}
21
22AliJFKtJet::~AliJFKtJet()
23{
24 Clean();
25}
26
27void AliJFKtJet::AddJet(AliJFCluster *c)
28{
29 if(!c) return;
30 if(!c->IsJet()){
31 cerr << "AliJFKtJet Error: Something is strange here, supposed to add a jet!" << endl;
32 return ;
33 }
34
35 vector<AliJFPreCluster*> clist=*c->GetClusterList();
36 for(vector<AliJFPreCluster*>::iterator i=clist.begin();i!=clist.end();i++){
37
38 //Get particles inside PreCluster
39 TClonesArray *ps=(*i)->GetParticles();
40
41 //Copy Particles inside PreCluster
42 TIterator *iter=ps->MakeIterator();
43 TParticle *p;
44 while((p=(TParticle*)iter->Next()) != NULL){
45 new (fParticles[fN]) TParticle(*p);
46
47 fN++;
48 }
49 }
50
51 fIsUpdated=kFALSE;
52}
53
54void AliJFKtJet::Update()
55{
56 if(fIsUpdated) return;
57
58 fIsUpdated=kTRUE;
59
60 fPhi=0;
61 fEta=0;
62 fY=0;
63 fPt=0;
64 fPx=0;
65 fPy=0;
66 fPz=0;
67 fE=0;
68 fE_=0;
69 fPtSum=0;
70 fPhiSum=0;
71 fEtaSum=0;
72
73 fPhiC=0;
74 fEtaC=0;
75 fYC=0;
76 fPtC=0;
77 fPxC=0;
78 fPyC=0;
79 fPzC=0;
80 fEC=0;
81 fE_C=0;
82 fPtSumC=0;
83 fPhiSumC=0;
84 fEtaSumC=0;
85
86 fPhiN=0;
87 fEtaN=0;
88 fYN=0;
89 fPtN=0;
90 fPxN=0;
91 fPyN=0;
92 fPzN=0;
93 fEN=0;
94 fE_N=0;
95 fPtSumN=0;
96 fPhiSumN=0;
97 fEtaSumN=0;
98
99 fPhiEM=0;
100 fEtaEM=0;
101 fYEM=0;
102 fPtEM=0;
103 fPxEM=0;
104 fPyEM=0;
105 fPzEM=0;
106 fEEM=0;
107 fE_EM=0;
108 fPtSumEM=0;
109 fPhiSumEM=0;
110 fEtaSumEM=0;
111
112 fNCharged=0;
113 fNNeutral=0;
114 fNEM=0;
115
116 Float_t fMaxParticlePt=0;
117 Float_t fMaxParticlePtC=0;
118 Float_t fMaxParticlePtN=0;
119 Float_t fMaxParticlePtEM=0;
120
121 //loop over particles in jet
122 Int_t N=0;
123 TParticle *p;
124 TIterator *iter=fParticles.MakeIterator();
125 while((p=(TParticle*)iter->Next()) != NULL){
126 N++;
127
128 Float_t px=p->Px();
129 Float_t py=p->Py();
130 Float_t pz=p->Pz();
131 Float_t E=p->Energy();
132 Float_t E_=TMath::Sqrt(px*px+py*py+pz*pz); //massless particles
133 Float_t pt=p->Pt();
134 Float_t phi=p->Phi();
135 Float_t eta=p->Eta();
136
137 fPx+=px;
138 fPy+=py;
139 fPz+=pz;
140 fE+=E;
141 fE_+=E_;
142
143 fPtSum+=pt;
144 fPhiSum+=phi*pt;
145 fEtaSum+=eta*pt;
146
147 if(pt>fMaxParticlePt){
148 fMaxParticlePt=pt;
149 fMaxParticle=*p;
150 }
151
152 Int_t pcode=p->GetPdgCode();
153 if((pcode==11)||(pcode==-11)||(pcode==22)){ //EM Particle;
154 fNEM++;
155
156 fPxEM+=px;
157 fPyEM+=py;
158 fPzEM+=pz;
159 fEEM+=E;
160 fE_EM+=E_;
161
162 fPtSumEM+=pt;
163 fPhiSumEM+=phi*pt;
164 fEtaSumEM+=eta*pt;
165
166 if(pt>fMaxParticlePtEM){
167 fMaxParticlePtEM=pt;
168 fMaxParticleEM=*p;
169 }
170 } else if(p->GetPDG()->Charge()) {//Charged Particle
171 fNCharged++;
172
173 fPxC+=px;
174 fPyC+=py;
175 fPzC+=pz;
176 fEC+=E;
177 fE_C+=E_;
178 fPtSumC+=pt;
179 fPhiSumC+=phi*pt;
180 fEtaSumC+=eta*pt;
181
182 if(pt>fMaxParticlePtC){
183 fMaxParticlePtC=pt;
184 fMaxParticleC=*p;
185 }
186 } else { //Neutral Particle
187 fNNeutral++;
188
189 fPxN+=px;
190 fPyN+=py;
191 fPzN+=pz;
192 fEN+=E;
193 fE_N+=E_;
194 fPtSumN+=pt;
195 fPhiSumN+=phi*pt;
196 fEtaSumN+=eta*pt;
197
198 if(pt>fMaxParticlePtN){
199 fMaxParticlePtN=pt;
200 fMaxParticleN=*p;
201 }
202 }
203 } //end loop
204
205 fPt=TMath::Sqrt(fPx*fPx+fPy*fPy);
206 //fPhi=TMath::ATan(fPy/fPx);
207 fPhi=TMath::Pi()+TMath::ATan2(-fPy,-fPx);
208 fY=0.5*TMath::Log((fE+fPz)/(fE-fPz));
209 fEta=0.5*TMath::Log((fE_+fPz)/(fE_-fPz));
210
211 fPtC=TMath::Sqrt(fPxC*fPxC+fPyC*fPyC);
212 //fPhiC=TMath::ATan(fPyC/fPxC);
213 fPhiC=TMath::Pi()+TMath::ATan2(-fPyC,-fPxC);
214 fYC=0.5*TMath::Log((fEC+fPzC)/(fEC-fPzC));
215 fEtaC=0.5*TMath::Log((fE_C+fPzC)/(fE_C-fPzC));
216
217 fPtN=TMath::Sqrt(fPxN*fPxN+fPyN*fPyN);
218 //fPhiN=TMath::ATan(fPyN/fPxN);
219 fPhiN=TMath::Pi()+TMath::ATan2(-fPyN,-fPxN);
220 fYN=0.5*TMath::Log((fEN+fPz)/(fEN-fPz));
221 fEtaN=0.5*TMath::Log((fE_N+fPz)/(fE_N-fPz));
222
223 fPtEM=TMath::Sqrt(fPxEM*fPxEM+fPyEM*fPyEM);
224 //fPhiEM=TMath::ATan(fPyEM/fPxEM);
225 fPhiEM=TMath::Pi()+TMath::ATan2(-fPyEM,-fPxEM);
226 fYEM=0.5*TMath::Log((fEEM+fPz)/(fEEM-fPz));
227 fEtaEM=0.5*TMath::Log((fE_EM+fPz)/(fE_EM-fPz));
228
229 fPhiSum/=fPtSum;
230 fEtaSum/=fPtSum;
231 fPhiSumEM/=fPtSumEM;
232 fEtaSumEM/=fPtSumEM;
233 fPhiSumC/=fPtSumC;
234 fEtaSumC/=fPtSumC;
235 fPhiSumN/=fPtSumN;
236 fEtaSumN/=fPtSumN;
237
238 //Do some simple checks
239 if(N!=fN){
240 cerr << "Fatal Error: Particles in Jets don't match!" << endl;
241 exit(1);
242 }
243 if(fNCharged+fNNeutral+fNEM!=fN){
244 cerr << "Fatal Error: Particles in Jets don't sum up!" << endl;
245 exit(1);
246 }
247}
248
249/*
250void AliJFKtJet::Debug()
251{
252}
253
254void AliJFKtJet::Clean()
255{
256 ::Clean();
257}
258*/