]>
Commit | Line | Data |
---|---|---|
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 | ||
15 | ClassImp(AliJFKtJet) | |
16 | ||
17 | AliJFKtJet::AliJFKtJet(Int_t n) : AliJFJet(n) | |
18 | ||
19 | { | |
20 | } | |
21 | ||
22 | AliJFKtJet::~AliJFKtJet() | |
23 | { | |
24 | Clean(); | |
25 | } | |
26 | ||
27 | void 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 | ||
54 | void 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 | /* | |
250 | void AliJFKtJet::Debug() | |
251 | { | |
252 | } | |
253 | ||
254 | void AliJFKtJet::Clean() | |
255 | { | |
256 | ::Clean(); | |
257 | } | |
258 | */ |