00001
00002 #include "StJet.h"
00003 #include "StJets.h"
00004
00005 #include "TrackToJetIndex.h"
00006 #include "TowerToJetIndex.h"
00007
00008 ClassImp(StJets);
00009
00010 StJets::StJets()
00011 : mDylanPoints(0)
00012 , mSumEmcE(0)
00013 , mEventId(0)
00014 , mEventNumber(0)
00015 , mRunId(0)
00016 , mRunNumber(0)
00017 , mCorrupt(false)
00018 , mJets(new TClonesArray("StJet",100))
00019 , mTrackToJetIndices(new TClonesArray("TrackToJetIndex",100))
00020 , mTowerToJetIndices(new TClonesArray("TowerToJetIndex",100))
00021 {
00022 }
00023
00024 StJets::~StJets()
00025 {
00026 mJets->Delete();
00027 mTrackToJetIndices->Delete();
00028 mTowerToJetIndices->Delete();
00029
00030 delete mJets;
00031 delete mTrackToJetIndices;
00032 delete mTowerToJetIndices;
00033
00034 mJets = 0;
00035 mTrackToJetIndices = 0;
00036 mTowerToJetIndices = 0;
00037 }
00038
00039 void StJets::Clear(bool clearAll)
00040 {
00041 mJets->Clear();
00042 mTrackToJetIndices->Clear();
00043 mTowerToJetIndices->Clear();
00044 mDylanPoints = 0;
00045 mSumEmcE = 0.;
00046 }
00047
00048 void StJets::addTrackToIndex(TrackToJetIndex& t2j)
00049 {
00050 new ((*mTrackToJetIndices)[mTrackToJetIndices->GetEntriesFast()]) TrackToJetIndex(t2j);
00051 }
00052
00053 void StJets::addTowerToIndex(TowerToJetIndex& t2j)
00054 {
00055 new ((*mTowerToJetIndices)[mTowerToJetIndices->GetEntriesFast()]) TowerToJetIndex(t2j);
00056 }
00057
00058 void StJets::addJet(StJet& jet)
00059 {
00060 new((*mJets)[nJets()]) StJet(jet);
00061 }
00062
00063 TObjArray StJets::tracks(int jetIndex) const
00064 {
00065 TObjArray a;
00066 for (int i = 0; i < mTrackToJetIndices->GetEntriesFast(); ++i) {
00067 TrackToJetIndex* track = (TrackToJetIndex*)mTrackToJetIndices->At(i);
00068 if (track->jetIndex() == jetIndex) a.Add(track);
00069 }
00070 return a;
00071 }
00072
00073 TObjArray StJets::towers(int jetIndex) const
00074 {
00075 TObjArray a;
00076 for (int i = 0; i < mTowerToJetIndices->GetEntriesFast(); ++i) {
00077 TowerToJetIndex* tower = (TowerToJetIndex*)mTowerToJetIndices->At(i);
00078 if (tower->jetIndex() == jetIndex) a.Add(tower);
00079 }
00080 return a;
00081 }
00082
00083 vector<TLorentzVector*> StJets::particles(int jetIndex) const
00084 {
00085 vector<TLorentzVector*> v;
00086 for (int i = 0; i < mTrackToJetIndices->GetEntriesFast(); ++i) {
00087 TrackToJetIndex* track = (TrackToJetIndex*)mTrackToJetIndices->At(i);
00088 if (track->jetIndex() == jetIndex) v.push_back(track);
00089 }
00090 for (int i = 0; i < mTowerToJetIndices->GetEntriesFast(); ++i) {
00091 TowerToJetIndex* tower = (TowerToJetIndex*)mTowerToJetIndices->At(i);
00092 if (tower->jetIndex() == jetIndex) v.push_back(tower);
00093 }
00094 return v;
00095 }
00096
00097 bool StJets::inBounds(int i)
00098 {
00099 return (i>0 && i<nJets());
00100 }
00101
00102 double StJets::e(int i) const
00103 {
00104 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00105 return (j) ? j->E() : -999.;
00106 }
00107
00108 double StJets::et(int i) const
00109 {
00110 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00111 return (j) ? j->et() : -999.;
00112 }
00113
00114 double StJets::p(int i) const
00115 {
00116 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00117 return (j) ? j->P() : -999.;
00118 }
00119
00120 double StJets::pt(int i) const
00121 {
00122 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00123 return (j) ? j->Pt() : -999.;
00124 }
00125
00126 double StJets::phi(int i) const
00127 {
00128 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00129 return (j) ? j->Phi() : -999.;
00130 }
00131
00132 double StJets::eta(int i) const
00133 {
00134 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00135 return (j) ? j->Eta() : -999.;
00136 }
00137
00138 int StJets::nCell(int i) const
00139 {
00140 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00141 return (j) ? j->nCell : -999;
00142 }
00143
00144 int StJets::charge(int i) const
00145 {
00146 StJet* j = dynamic_cast<StJet*>(mJets->UncheckedAt(i));
00147 return (j) ? j->charge : -999;
00148 }