5 #include <TClonesArray.h>
9 #include "AliTkTowerV2.h"
11 #define Nparticles__ 100
13 ClassImp(AliTkTowerV2)
15 AliTkTowerV2::AliTkTowerV2() : TObject(),
16 fEta(-999), fPhi(-999), fEt(-999),
17 fNParticles(0),fEtCharged(0), fEtEM(0),
18 fUpdate(kFALSE), fParticles(0)
20 fParticles = new TClonesArray("TParticle",Nparticles__);
23 AliTkTowerV2::AliTkTowerV2(const AliTkTowerV2 &t) : TObject(),
24 fEta(-999), fPhi(-999), fEt(-999),
25 fNParticles(0),fEtCharged(0), fEtEM(0),
26 fUpdate(kFALSE), fParticles(0)
33 fNParticles = t.getNParticles();
34 if(fNParticles) fUpdate=kTRUE;
36 TClonesArray *otherParticles = t.getParticleList();
38 fParticles = new TClonesArray("TParticle",Nparticles__);
39 TIterator *iter = otherParticles->MakeIterator();
41 while ((particle = (TParticle *) iter->Next()) != NULL) {
42 new ((*fParticles)[i]) TParticle(*particle);
45 cerr << "TKTowerV2: should not happen " << i << " " << fNParticles << endl;
50 AliTkTowerV2::~AliTkTowerV2()
55 TClonesArray *AliTkTowerV2::getChargedParticleList() const
57 TClonesArray *chargedParticles = new TClonesArray("TParticle",Nparticles__);
58 Int_t nChargedParticles = 0;
59 TIterator *iter = getParticleList()->MakeIterator();
60 TParticle *particle = NULL;
61 while ((particle = (TParticle *) iter->Next()) != NULL) {
62 if (isChargedParticle(particle)) {
63 new ((*chargedParticles)[nChargedParticles]) TParticle(*particle);
68 return chargedParticles;
71 TClonesArray *AliTkTowerV2::getNeutralParticleList() const
73 TClonesArray *neutralParticles = new TClonesArray("TParticle",Nparticles__);
74 Int_t nNeutralParticles = 0;
75 TIterator *iter = getParticleList()->MakeIterator();
76 TParticle *particle = NULL;
77 while ((particle = (TParticle *) iter->Next()) != NULL) {
78 if (!isChargedParticle(particle)) {
79 new ((*neutralParticles)[nNeutralParticles]) TParticle(*particle);
84 return neutralParticles;
87 void AliTkTowerV2::addParticle(const TParticle *particle)
89 new ((*fParticles)[fNParticles]) TParticle(*particle);
91 Float_t et_=TMath::Sqrt(particle->Pt()*particle->Pt());
96 void AliTkTowerV2::setParticleList(TClonesArray *ptr)
100 fNParticles=ptr->GetEntries();
104 void AliTkTowerV2::update()
106 if(!fNParticles) return;
112 TIterator *iter = fParticles->MakeIterator();
113 TParticle *particle = NULL;
114 while ((particle = (TParticle *) iter->Next()) != NULL) {
115 Float_t et_=TMath::Sqrt(particle->Pt()*particle->Pt());
116 if (isChargedParticle(particle))
119 if (isEMParticle(particle))
125 void AliTkTowerV2::Clear(Option_t *option)
127 TObject::Clear(option);
128 fParticles->Clear("C");
138 Bool_t AliTkTowerV2::isChargedParticle(const TParticle *particle) const
140 Bool_t isCharged = kFALSE;
141 TParticle *part = new TParticle(*particle);
142 TParticlePDG *partPDG = part->GetPDG(0);
143 if (partPDG->Charge() != 0) {
150 Bool_t AliTkTowerV2::isEMParticle(const TParticle *particle) const
152 Bool_t isEM = kFALSE;
153 // define electrons and gammas as EM particles...
154 // not so sure if this is right...
155 if ((particle->GetPdgCode() == 11) ||
156 (particle->GetPdgCode() == -11) ||
157 (particle->GetPdgCode() == 22)) {
163 Int_t AliTkTowerV2::Compare(const TObject *obj) const
165 Double_t val=((AliTkTowerV2*)obj)->getEt();
167 if(fEt>val) return -1; //qsort is ascending
168 else if (fEt<val) return 1;