5 #include <TClonesArray.h>
9 #include "AliTkTowerV2.h"
10 #include "AliTkConeJet.h"
14 AliTkConeJet::AliTkConeJet() : TObject(),
15 fEta(-999),fPhi(-999),fEt(-999),fType(0),
16 fNTowers(0),fTowers(0),fPtCut(0.),
17 fCEta(-999),fCPhi(-999),fCEt(-999),
18 fPLength(0.),fXAxis(0.),fYAxis(0.),fZAxis(0.),
19 fPtLead(0.),fLeadPart(0),fNParts(0),fParts(0)
21 fTowers = new TClonesArray("AliTkTowerV2",Ntowers__);
24 AliTkConeJet::AliTkConeJet(Float_t pt, Float_t eta, Float_t phi,Int_t type)
26 fEta(eta),fPhi(phi),fEt(pt),fType(type),
27 fNTowers(0),fTowers(0),fPtCut(0.),
28 fCEta(eta),fCPhi(phi),fCEt(pt),
29 fPLength(0.),fXAxis(0.),fYAxis(0.),fZAxis(0.),
30 fPtLead(0.),fLeadPart(0),fNParts(0),fParts(0)
32 fTowers = new TClonesArray("AliTkTowerV2",0);
35 AliTkConeJet::AliTkConeJet(const AliTkConeJet &j)
37 fEta(-999), fPhi(-999), fEt(-999),fType(0),
38 fNTowers(0),fTowers(0),fPtCut(0.),
39 fCEta(-999),fCPhi(-999),fCEt(-999),
40 fPLength(0.),fXAxis(0.),fYAxis(0.),fZAxis(0.),
41 fPtLead(0.),fLeadPart(0),fNParts(0),fParts(0)
49 fNTowers = j.getNTowers();
50 fPtCut = j.getPtCut();
54 fPLength = j.getPLength();
55 fXAxis = j.getXAxis();
56 fYAxis = j.getYAxis();
57 fZAxis = j.getZAxis();
58 fPtLead = j.getPtLead();
59 fLeadPart = new TParticle(*j.getLeadPart());
60 fNParts = j.getNParts();
62 // need to build a copy of the old TClonesArray...
63 fTowers = new TClonesArray("AliTkTowerV2",Ntowers__);
64 TClonesArray *otherTowers = j.getTowerList();
65 AliTkTowerV2 *myTower;
66 TIterator *iter = otherTowers->MakeIterator();
68 while ((myTower = (AliTkTowerV2 *) iter->Next()) != NULL) {
69 new ((*fTowers)[i]) AliTkTowerV2(*myTower);
73 cerr << "AliTkConeJet: should not happen " << i << " " << fNTowers << endl;
76 // need to build a copy of the old TClonesArray...
77 fParts = new TClonesArray("TParticle",j.getNParts());
78 TClonesArray *otherParts = j.getParts();
79 TParticle *myParticle;
80 iter = otherParts->MakeIterator();
82 while ((myParticle = (TParticle *) iter->Next()) != NULL) {
83 new ((*fParts)[i]) TParticle(*myParticle);
87 cerr << "AliTkConeJet: should not happen " << i << " " << fNParts << endl;
91 AliTkConeJet::~AliTkConeJet()
94 if(fLeadPart) delete fLeadPart;
95 if(fParts) delete fParts;
98 void AliTkConeJet::addTower(AliTkTowerV2 *tower)
100 new ((*fTowers)[fNTowers]) AliTkTowerV2(*tower);
104 void AliTkConeJet::Clear(Option_t *option)
106 TObject::Clear(option);
109 if(fParts) delete fParts;
111 if(fLeadPart) delete fLeadPart;
130 void AliTkConeJet::calculateFromParticles(Float_t &et, Float_t &eta, Float_t &phi, Float_t ptcut)
132 Float_t px=0.,py=0.,pz=0.;
133 TIterator *titer = fTowers->MakeIterator();
134 AliTkTowerV2 *tower = NULL;
135 while ((tower = (AliTkTowerV2 *)titer->Next()) != NULL) {
136 TClonesArray *particles = tower->getParticleList();
137 TParticle *particle = NULL;
138 TIterator *part = particles->MakeIterator();
139 while ((particle = (TParticle *)part->Next()) != NULL) {
140 if(particle->Pt()<ptcut) continue;
149 et = TMath::Sqrt(px*px+py*py);
150 Float_t p = TMath::Sqrt(px*px+py*py+pz*pz);
151 Float_t theta = (pz==0)?TMath::PiOver2():TMath::ACos(pz/p);
152 phi = TMath::Pi()+TMath::ATan2(-py,-px);
153 eta = -TMath::Log(TMath::Tan(theta/2.));
156 /* or take e = p_t * cosh(eta) */
157 Float_t AliTkConeJet::getE(Float_t ptcut) const
161 TIterator *iter = fTowers->MakeIterator();
162 AliTkTowerV2 *tower = NULL;
163 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
164 TClonesArray *particles = tower->getParticleList();
165 TParticle *particle = NULL;
166 TIterator *part = particles->MakeIterator();
167 while ((particle = (TParticle *)part->Next()) != NULL) {
168 if(particle->Pt()<ptcut) continue;
177 /* or take e = p_t * cosh(eta) */
178 Float_t AliTkConeJet::getECharged(Float_t ptcut) const
182 TIterator *iter = fTowers->MakeIterator();
183 AliTkTowerV2 *tower = NULL;
184 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
185 TClonesArray *particles = tower->getChargedParticleList();
186 TParticle *particle = NULL;
187 TIterator *part = particles->MakeIterator();
188 while ((particle = (TParticle *)part->Next()) != NULL) {
189 if(particle->Pt()<ptcut) continue;
200 Float_t AliTkConeJet::getEtCharged() const
202 Float_t EtCharged = 0;
203 TIterator *iter = fTowers->MakeIterator();
204 AliTkTowerV2 *tower = NULL;
205 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
206 EtCharged += tower->getEtCharged();
212 /* use to get fake rate if
213 in mixed case particles were marked */
214 Float_t AliTkConeJet::getEtChargedMarked(Float_t ptcut) const
218 TIterator *iter = fTowers->MakeIterator();
219 AliTkTowerV2 *tower = NULL;
220 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
221 TClonesArray *particles = tower->getChargedParticleList();
222 TParticle *particle = NULL;
223 TIterator *part = particles->MakeIterator();
224 while ((particle = (TParticle *)part->Next()) != NULL) {
225 if(particle->GetWeight()>-100) continue; //(-123)
226 if(particle->Pt()<ptcut) continue;
237 /* use to get fake rate if
238 in mixed case particles were marked */
239 Float_t AliTkConeJet::getEtMarked(Float_t ptcut) const
242 TIterator *iter = fTowers->MakeIterator();
243 AliTkTowerV2 *tower = NULL;
244 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
245 TClonesArray *particles = tower->getParticleList();
246 TParticle *particle = NULL;
247 TIterator *part = particles->MakeIterator();
248 while ((particle = (TParticle *)part->Next()) != NULL) {
249 if(particle->GetWeight()>-100) continue; //(-123)
250 if(particle->Pt()<ptcut) continue;
259 Float_t AliTkConeJet::getEtMarkedFrac(Float_t ptcut) const
261 Float_t et=0.,etall=0.;
262 TIterator *iter = fTowers->MakeIterator();
263 AliTkTowerV2 *tower = NULL;
264 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
265 TClonesArray *particles = tower->getParticleList();
266 TParticle *particle = NULL;
267 TIterator *part = particles->MakeIterator();
268 while ((particle = (TParticle *)part->Next()) != NULL) {
269 if(particle->Pt()<ptcut) continue;
270 etall+=particle->Pt();
271 if(particle->GetWeight()>-100) continue; //(-123)
277 if(etall>0) return et/etall;
281 Float_t AliTkConeJet::getEtEM() const
284 TIterator *iter = fTowers->MakeIterator();
285 AliTkTowerV2 *tower = NULL;
286 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
287 EtEM += tower->getEtEM();
293 TClonesArray *AliTkConeJet::getParticles(Float_t ptcut) const
295 TClonesArray *allParticles = new TClonesArray("TParticle",10000);
296 Int_t nParticles = 0;
297 TIterator *iter = fTowers->MakeIterator();
298 AliTkTowerV2 *tower = NULL;
299 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
300 TClonesArray *particles = tower->getParticleList();
301 TParticle *particle = NULL;
302 TIterator *part = particles->MakeIterator();
303 while ((particle = (TParticle *)part->Next()) != NULL) {
304 if(particle->Pt()<ptcut) continue;
305 new ((*allParticles)[nParticles]) TParticle(*particle);
314 TClonesArray *AliTkConeJet::getChargedParticles(Float_t ptcut) const
316 TClonesArray *chargedParticles = new TClonesArray("TParticle",10000);
317 Int_t nChargedParticles = 0;
318 TIterator *iter = fTowers->MakeIterator();
319 AliTkTowerV2 *tower = NULL;
320 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
321 TClonesArray *particles = tower->getChargedParticleList();
322 TParticle *particle = NULL;
323 TIterator *part = particles->MakeIterator();
324 while ((particle = (TParticle *)part->Next()) != NULL) {
325 if(particle->Pt()<ptcut) continue;
326 new ((*chargedParticles)[nChargedParticles]) TParticle(*particle);
334 return chargedParticles;
337 TClonesArray *AliTkConeJet::getNeutralParticles(Float_t ptcut) const
339 TClonesArray *neutralParticles = new TClonesArray("TParticle",10000);
340 Int_t nNeutralParticles = 0;
341 TIterator *iter = fTowers->MakeIterator();
342 AliTkTowerV2 *tower = NULL;
343 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
344 TClonesArray *particles = tower->getNeutralParticleList();
345 TParticle *particle = NULL;
346 TIterator *part = particles->MakeIterator();
347 while ((particle = (TParticle *)part->Next()) != NULL) {
348 if(particle->Pt()<ptcut) continue;
349 new ((*neutralParticles)[nNeutralParticles]) TParticle(*particle);
357 return neutralParticles;
360 Int_t AliTkConeJet::getNParticles() const
363 TClonesArray *p = getParticles();
370 Int_t AliTkConeJet::getNChargedParticles() const
373 TClonesArray *p = getChargedParticles();
380 Int_t AliTkConeJet::getNNeutralParticles() const
383 TClonesArray *p = getNeutralParticles();
390 Int_t AliTkConeJet::getNParticles(Float_t ptCut) const
393 TClonesArray *particles = getParticles();
394 TIterator *iter = particles->MakeIterator();
396 while ((particle = (TParticle *)iter->Next()) != NULL) {
397 if (particle->Pt() > ptCut) {
407 Int_t AliTkConeJet::getNChargedParticles(Float_t ptCut) const
410 TClonesArray *particles = getChargedParticles();
411 TIterator *iter = particles->MakeIterator();
413 while ((particle = (TParticle *)iter->Next()) != NULL) {
414 if (particle->Pt() > ptCut) {
424 Int_t AliTkConeJet::getNNeutralParticles(Float_t ptCut) const
427 TClonesArray *particles = getNeutralParticles();
428 TIterator *iter = particles->MakeIterator();
430 while ((particle = (TParticle *)iter->Next()) != NULL) {
431 if (particle->Pt() > ptCut) {
441 void AliTkConeJet::getAxis(Float_t &x,Float_t &y,Float_t &z,Float_t ptcut) const
447 TIterator *iter = fTowers->MakeIterator();
448 AliTkTowerV2 *tower = NULL;
449 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
450 TClonesArray *particles = tower->getParticleList();
451 TParticle *particle = NULL;
452 TIterator *part = particles->MakeIterator();
453 while ((particle = (TParticle *)part->Next()) != NULL) {
454 if(particle->Pt()<ptcut) continue;
464 void AliTkConeJet::getChAxis(Float_t &x,Float_t &y,Float_t &z,Float_t ptcut) const
470 TIterator *iter = fTowers->MakeIterator();
471 AliTkTowerV2 *tower = NULL;
472 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
473 TClonesArray *particles = tower->getChargedParticleList();
474 TParticle *particle = NULL;
475 TIterator *part = particles->MakeIterator();
476 while ((particle = (TParticle *)part->Next()) != NULL) {
477 if(particle->Pt()<ptcut) continue;
487 Float_t length=TMath::Sqrt(x*x+y*y+z*z);
495 TParticle* AliTkConeJet::getLeadingPart(Float_t ptcut) const
497 TParticle* plead=new TParticle;
500 TIterator *iter = fTowers->MakeIterator();
501 AliTkTowerV2 *tower = NULL;
502 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
503 TClonesArray *particles = tower->getParticleList();
504 TParticle *particle = NULL;
505 TIterator *part = particles->MakeIterator();
506 while ((particle = (TParticle *)part->Next()) != NULL) {
507 if(particle->Pt()<ptcut) continue;
508 if(particle->Pt()>ptlead){
509 ptlead=particle->Pt();
511 plead=new TParticle(*particle);
520 TParticle* AliTkConeJet::getLeadingChPart(Float_t ptcut) const
522 TParticle* plead=new TParticle;
525 TIterator *iter = fTowers->MakeIterator();
526 AliTkTowerV2 *tower = NULL;
527 while ((tower = (AliTkTowerV2 *)iter->Next()) != NULL) {
528 TClonesArray *particles = tower->getChargedParticleList();
529 TParticle *particle = NULL;
530 TIterator *part = particles->MakeIterator();
531 while ((particle = (TParticle *)part->Next()) != NULL) {
532 if(particle->Pt()<ptcut) continue;
533 if(particle->Pt()>ptlead){
534 ptlead=particle->Pt();
536 plead=new TParticle(*particle);
547 void AliTkConeJet::calculateValues(Float_t ptcut)
550 if(fParts) delete fParts;
551 fParts=new TClonesArray("TParticle",fNTowers*25);
553 Float_t px=0.,py=0.,pz=0.;
554 TParticle* plead=new TParticle;
557 TIterator *titer = fTowers->MakeIterator();
558 AliTkTowerV2 *tower = NULL;
559 while ((tower = (AliTkTowerV2 *)titer->Next()) != NULL) {
560 TClonesArray *particles = tower->getParticleList();
562 TParticle *particle = NULL;
563 TIterator *part = particles->MakeIterator();
564 while ((particle = (TParticle *)part->Next()) != NULL) {
565 if(particle->Pt()<ptcut) continue;
569 new ((*fParts)[counter]) TParticle(*particle);
571 if(particle->Pt()>ptlead){
572 ptlead=particle->Pt();
574 plead=new TParticle(*particle);
581 fCEt = TMath::Sqrt(px*px+py*py);
582 Float_t p = TMath::Sqrt(px*px+py*py+pz*pz);
584 //Float_t theta = ((pz==0)||(p==0))?TMath::PiOver2():TMath::ACos(pz/p);
585 fCPhi = TMath::Pi()+TMath::ATan2(-py,-px);
586 //fCEta = (theta==0)?-100:TMath::Log(TMath::Tan(theta/2.));
587 fCEta = (p==pz)?-100:0.5*TMath::Log((p+pz)/(p-pz));
594 if(fLeadPart) delete fLeadPart;
595 fLeadPart=new TParticle(*plead);
600 Int_t AliTkConeJet::Compare(const TObject *obj) const
602 Double_t val=((AliTkConeJet*)obj)->getEt();
604 if(fEt>val) return -1; //qsort is ascending
605 else if (fEt<val) return 1;
609 ostream& operator<<(ostream& s,const AliTkConeJet &p)
611 return s << "AliTkConeJet info: eta=" << p.getEta()
612 << " phi=" << p.getPhi() << " Et=" << p.getEt();
615 Float_t AliTkConeJet::Diff(const AliTkConeJet *jet1, const AliTkConeJet *jet2, Float_t &etdiff, Float_t &phidiff, Float_t &etadiff)
618 phidiff=TMath::Abs(jet1->getPhi()-jet2->getPhi());
619 if(phidiff>TMath::Pi()) ret=TMath::TwoPi()-phidiff;
620 etadiff=TMath::Abs(jet1->getEta()-jet2->getEta());
621 ret=TMath::Sqrt(phidiff*phidiff+etadiff*etadiff);
622 etdiff=jet1->getEt()-jet2->getEt();
626 ClassImp(AliTkConeJet)