3 //__________________________________________________________
4 ///////////////////////////////////////////////////////////////////
6 // class AliJetEventParticles
8 // loizides@ikf.uni-frankfurt.de
10 ///////////////////////////////////////////////////////////////////
12 #include <Riostream.h>
13 #include <TClonesArray.h>
14 #include "AliJetParticle.h"
15 #include "AliJetEventParticles.h"
17 ClassImp(AliJetEventParticles)
19 AliJetEventParticles::AliJetEventParticles(Int_t size) :
23 fParticles(new TClonesArray("AliJetParticle",size)),
37 // Default Constructor
38 for (Int_t i = 0; i < 4; i++) fZquench[i] = 0.;
39 for (Int_t i = 0; i < 10; i++)
40 for (Int_t j = 0; j < 4; j++) {
41 fJets[j][i]=0; // Trigger jets
42 fUQJets[j][i]=0; // Unquenched trigger jets
44 for (Int_t i = 0; i < 5; i++){
50 AliJetEventParticles::AliJetEventParticles(const AliJetEventParticles& source) :
53 fNParticles(source.fNParticles),
54 fParticles(new TClonesArray("AliJetParticle",source.fNParticles)),
55 fVertexX(source.GetVertexX()),
56 fVertexY(source.GetVertexY()),
57 fVertexZ(source.GetVertexZ()),
58 fTrials(source.Trials()),
59 fNJets(source.NTriggerJets()),
60 fNUQJets(source.NUQTriggerJets()),
61 fXJet(source.GetXJet()),
62 fYJet(source.GetXJet()),
63 fImpact(source.GetImpact()),
64 fNHardScatters(source.GetNhard()),
65 fNwNwColl(source.GetNpart()),
66 fEventNr(source.GetEventNr())
69 for(Int_t i =0; i<fNParticles; i++)
71 const AliJetParticle *kjp=(const AliJetParticle *)source.fParticles->At(i);
72 new((*fParticles)[i]) AliJetParticle(*(kjp));
74 for (Int_t i = 0; i < 4; i++) fZquench[i] = 0.;
75 for (Int_t i = 0; i < 10; i++)
76 for (Int_t j = 0; j < 4; j++) {
77 fJets[j][i]=0; // Trigger jets
78 fUQJets[j][i]=0; // Unquenched trigger jets
80 source.GetZQuench(fZquench);
81 for (Int_t i = 0; i < NTriggerJets(); i++){
82 source.TriggerJet(i,fJets[0][i],fJets[1][i],fJets[2][i],fJets[3][i]);
84 for (Int_t i = 0; i < NUQTriggerJets(); i++){
85 source.UQJet(i,fUQJets[0][i],fUQJets[1][i],fUQJets[2][i],fUQJets[3][i]);
88 source.Hard(0,fHard[0][0],fHard[1][0],fHard[2][0],fHard[3][0],fHard[4][0]);
89 source.Hard(1,fHard[0][1],fHard[1][1],fHard[2][1],fHard[3][1],fHard[4][1]);
92 void AliJetEventParticles::Set(const AliJetEventParticles& source)
95 fHeader=source.GetHeader();
96 fNParticles=source.fNParticles;
97 if(fParticles) delete fParticles;
98 fParticles=new TClonesArray("AliJetParticle",source.GetParticles()->GetEntries());
99 fVertexX=source.GetVertexX();
100 fVertexY=source.GetVertexY();
101 fVertexZ=source.GetVertexZ();
102 fTrials=source.Trials();
103 fNJets=source.NTriggerJets();
104 fNUQJets=source.NUQTriggerJets();
105 fXJet=source.GetXJet();
106 fYJet=source.GetXJet();
107 fImpact=source.GetImpact();
108 fNHardScatters=source.GetNhard();
109 fNwNwColl=source.GetNpart();
110 fEventNr=source.GetEventNr();
112 for(Int_t i =0; i<source.GetParticles()->GetEntries(); i++){
113 const AliJetParticle *kjp=(const AliJetParticle *)source.fParticles->At(i);
114 new((*fParticles)[i]) AliJetParticle(*(kjp));
116 for (Int_t i = 0; i < 4; i++) fZquench[i] = 0.;
117 for (Int_t i = 0; i < 10; i++)
118 for (Int_t j = 0; j < 4; j++) {
119 fJets[j][i]=0; // Trigger jets
120 fUQJets[j][i]=0; // Unquenched trigger jets
122 source.GetZQuench(fZquench);
123 for (Int_t i = 0; i < NTriggerJets(); i++){
124 source.TriggerJet(i,fJets[0][i],fJets[1][i],fJets[2][i],fJets[3][i]);
126 for (Int_t i = 0; i < NUQTriggerJets(); i++){
127 source.UQJet(i,fUQJets[0][i],fUQJets[1][i],fUQJets[2][i],fUQJets[3][i]);
130 source.Hard(0,fHard[0][0],fHard[1][0],fHard[2][0],fHard[3][0],fHard[4][0]);
131 source.Hard(1,fHard[0][1],fHard[1][1],fHard[2][1],fHard[3][1],fHard[4][1]);
134 AliJetEventParticles::~AliJetEventParticles()
141 void AliJetEventParticles::Reset(Int_t size)
144 //deletes all particles from the event
145 if(fParticles) fParticles->Clear();
146 if(size>=0) fParticles->Expand(size);
161 for (Int_t i = 0; i < 4; i++) fZquench[i] = 0.;
162 for (Int_t i = 0; i < 10; i++)
163 for (Int_t j = 0; j < 4; j++) {
164 fJets[j][i]=0; // Trigger jets
165 fUQJets[j][i]=0; // Unquenched trigger jets
167 for (Int_t i = 0; i < 5; i++){
173 void AliJetEventParticles::AddSignal(const AliJetEventParticles& source)
174 { //mark signal particles and add them to TClonesArray
175 //note that fNParticles still keeps only background particles
177 Int_t nSignalParts=source.GetNParticles();
178 for(Int_t i=0; i<nSignalParts; i++)
180 const AliJetParticle *kjp=source.GetParticle(i);
182 AliJetParticle *ap=new((*fParticles)[fNParticles+i]) AliJetParticle(*(kjp));
183 ap->SetType(-123); //mark pythia particle
185 for(Int_t i=nSignalParts+fNParticles;i<fParticles->GetEntriesFast();i++)
186 fParticles->RemoveAt(i);
187 //cout << fParticles->GetEntries() << " " << fNParticles << " " << nSignalParts << endl;
189 /* should we transform the vertex???
190 fVertexX=source.GetVertexX();
191 fVertexY=source.GetVertexY();
192 fVertexZ=source.GetVertexZ();
194 fTrials=source.Trials();
195 fNJets=source.NTriggerJets();
196 fNUQJets=source.NUQTriggerJets();
197 fXJet=source.GetXJet();
198 fYJet=source.GetXJet();
199 fEventNr=source.GetEventNr();
201 for (Int_t i = 0; i < 4; i++) fZquench[i] = 0.;
202 for (Int_t i = 0; i < 10; i++)
203 for (Int_t j = 0; j < 4; j++) {
204 fJets[j][i]=0; // Trigger jets
205 fUQJets[j][i]=0; // Unquenched trigger jets
207 source.GetZQuench(fZquench);
208 for (Int_t i = 0; i < NTriggerJets(); i++){
209 source.TriggerJet(i,fJets[0][i],fJets[1][i],fJets[2][i],fJets[3][i]);
211 for (Int_t i = 0; i < NUQTriggerJets(); i++){
212 source.UQJet(i,fUQJets[0][i],fUQJets[1][i],fUQJets[2][i],fUQJets[3][i]);
214 source.Hard(0,fHard[0][0],fHard[1][0],fHard[2][0],fHard[3][0],fHard[4][0]);
215 source.Hard(1,fHard[0][1],fHard[1][1],fHard[2][1],fHard[3][1],fHard[4][1]);
218 void AliJetEventParticles::AddParticle(AliJetParticle* part)
220 //Adds new particle to the event
221 fParticles->AddAt(part,fNParticles++);
224 void AliJetEventParticles::AddParticle(const AliJetParticle* part)
226 //Adds new particle to the event
227 new((*fParticles)[fNParticles++]) AliJetParticle(*part);
230 void AliJetEventParticles::AddParticle(const TParticle* part,Int_t idx, Int_t l, Int_t ncl)
232 //Adds new particle to the event
233 new((*fParticles)[fNParticles++]) AliJetParticle(part,idx,l,ncl);
236 void AliJetEventParticles::AddParticle(Float_t px, Float_t py, Float_t pz,
237 Float_t etot, Int_t idx, Int_t l, Int_t ncl)
239 //Adds new particle to the event
240 new((*fParticles)[fNParticles++]) AliJetParticle(px,py,pz,etot,idx,l,ncl);
243 void AliJetEventParticles::AddParticle(Float_t px, Float_t py, Float_t pz, Float_t etot, Int_t idx, Int_t l,
244 Int_t ncl, Float_t pt, Float_t phi, Float_t eta)
246 //Adds new particle to the event
247 new((*fParticles)[fNParticles++]) AliJetParticle(px,py,pz,etot,idx,l,ncl,pt,phi,eta);
250 const AliJetParticle* AliJetEventParticles::GetParticleSafely(Int_t n)
252 //returns nth particle with range check
253 if( (n<0) || (fNParticles<=n) ) return 0;
254 return (const AliJetParticle*)fParticles->At(n);
257 void AliJetEventParticles::AddJet(Float_t px, Float_t py, Float_t pz, Float_t e)
263 fJets[0][fNJets] = px;
264 fJets[1][fNJets] = py;
265 fJets[2][fNJets] = pz;
266 fJets[3][fNJets] = e;
269 printf("\nWarning: More than 10 jets triggered !!\n");
273 void AliJetEventParticles::AddJet(Float_t p[4])
279 fJets[0][fNJets] = p[0];
280 fJets[1][fNJets] = p[1];
281 fJets[2][fNJets] = p[2];
282 fJets[3][fNJets] = p[3];
285 printf("\nWarning: More than 10 jets triggered !!\n");
289 void AliJetEventParticles::AddUQJet(Float_t px, Float_t py, Float_t pz, Float_t e)
295 fUQJets[0][fNUQJets] = px;
296 fUQJets[1][fNUQJets] = py;
297 fUQJets[2][fNUQJets] = pz;
298 fUQJets[3][fNUQJets] = e;
301 printf("\nWarning: More than 10 jets triggered !!\n");
305 void AliJetEventParticles::AddUQJet(Float_t p[4])
311 fUQJets[0][fNUQJets] = p[0];
312 fUQJets[1][fNUQJets] = p[1];
313 fUQJets[2][fNUQJets] = p[2];
314 fUQJets[3][fNUQJets] = p[3];
317 printf("\nWarning: More than 10 jets triggered !!\n");
321 void AliJetEventParticles::AddHard(Int_t i,Float_t px, Float_t py, Float_t pz, Float_t e, Float_t type)
333 printf("\nWarning: More than 2 partons !!\n");
337 void AliJetEventParticles::SetZQuench(Double_t z[4])
340 // Set quenching fraction
342 for (Int_t i = 0; i < 4; i++) fZquench[i] = z[i];
345 void AliJetEventParticles::GetZQuench(Double_t z[4]) const
348 // Get quenching fraction
350 for (Int_t i = 0; i < 4; i++) z[i] = fZquench[i];
353 void AliJetEventParticles::TriggerJet(Int_t i, Float_t p[4]) const
359 printf("\nWarning: TriggerJet, index out of Range!!\n");
368 void AliJetEventParticles::TriggerJet(Int_t i, Float_t &p1, Float_t &p2, Float_t &p3, Float_t &E) const
374 printf("\nWarning: TriggerJet, index out of Range!!\n");
383 void AliJetEventParticles::UQJet(Int_t i, Float_t p[4]) const
389 printf("\nWarning: Unquenched Jets, index out of Range!!\n");
391 p[0] = fUQJets[0][i];
392 p[1] = fUQJets[1][i];
393 p[2] = fUQJets[2][i];
394 p[3] = fUQJets[3][i];
398 void AliJetEventParticles::UQJet(Int_t i, Float_t &p1, Float_t &p2, Float_t &p3, Float_t &E) const
404 printf("\nWarning: Unquenched Jets, index out of Range!!\n");
413 void AliJetEventParticles::Hard(Int_t i, Float_t &p1, Float_t &p2, Float_t &p3, Float_t &E, Float_t &type) const
419 printf("\nWarning: Hard partons, index out of Range!!\n");
429 void AliJetEventParticles::Hard(Int_t i, Float_t p[4], Float_t &type) const
435 printf("\nWarning: Hard partons, index out of Range!!\n");
445 void AliJetEventParticles::SetXYJet(Double_t x, Double_t y)
448 // Add jet production point
454 void AliJetEventParticles::Print(Option_t* /*t*/) const
456 cout << "--- AliJetEventParticles ---" << endl;
457 if(fHeader.Length()) cout << fHeader.Data() << endl;
458 cout << "Event Number: " << fEventNr << endl;
459 cout << "Particles in Event: " << fNParticles << endl;
461 cout << "Unquenched Jets: " << fNUQJets << endl;
462 for(Int_t i = 0; i<fNUQJets; i++){
463 Float_t x=fUQJets[0][i];
464 Float_t y=fUQJets[1][i];
465 Float_t z=fUQJets[2][i];
466 Float_t e=fUQJets[3][i];
467 Float_t ptj=TMath::Sqrt(x*x+y*y);
468 Float_t thj=TMath::ATan2(ptj,z);
469 Float_t etaj=-TMath::Log(TMath::Tan(thj/2));
470 Float_t phj=TMath::Pi()+TMath::ATan2(-y,-x);
471 Float_t et=e*TMath::Sin(thj);
472 cout << i << " " << et << " " << etaj << " " << phj << endl;
476 cout << "Triggered Jets: " << fNJets << endl;
477 for(Int_t i = 0; i<fNJets; i++){
478 Float_t x=fJets[0][i];
479 Float_t y=fJets[1][i];
480 Float_t z=fJets[2][i];
481 Float_t e=fJets[3][i];
482 Float_t ptj=TMath::Sqrt(x*x+y*y);
483 Float_t thj=TMath::ATan2(ptj,z);
484 Float_t etaj=-TMath::Log(TMath::Tan(thj/2));
485 Float_t phj=TMath::Pi()+TMath::ATan2(-y,-x);
486 Float_t et=e*TMath::Sin(thj);
487 cout << i << " " << et << " " << etaj << " " << phj << endl;