00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ST_JET_ELEMENT_H
00010 #define ST_JET_ELEMENT_H
00011
00012 #include "TVector3.h"
00013 #include "TRef.h"
00014
00015 #include "StJetCandidate.h"
00016
00017 class StJetElement : public TObject {
00018 public:
00019 StJetElement(short id = -1, short detId = -1)
00020 : mId(id)
00021 , mDetectorId(detId)
00022 , mPt(0)
00023 , mEta(0)
00024 , mPhi(0)
00025 , mJet(0)
00026 {
00027 }
00028
00029 short id () const { return mId; }
00030 short detectorId () const { return mDetectorId; }
00031 float pt () const { return mPt; }
00032 float eta () const { return mEta; }
00033 float phi () const { return mPhi; }
00034 TVector3 momentum () const;
00035 TVector3 localMomentum() const;
00036 float jt () const { return localMomentum().Perp(); }
00037 float ps () const { return localMomentum().Px(); }
00038 float pn () const { return localMomentum().Py(); }
00039 float pl () const { return localMomentum().Pz(); }
00040 float frag () const { return momentum().Mag() / jet()->momentum().Mag(); }
00041 StJetCandidate* jet () const { return (StJetCandidate*)mJet.GetObject(); }
00042
00043 void setJet(const StJetCandidate* jet) { mJet = (TObject*)jet; }
00044
00045 protected:
00046 short mId;
00047 short mDetectorId;
00048 float mPt;
00049 float mEta;
00050 float mPhi;
00051 TRef mJet;
00052
00053 ClassDef(StJetElement, 1);
00054 };
00055
00056 inline TVector3 StJetElement::momentum() const
00057 {
00058 TVector3 mom;
00059 mom.SetPtEtaPhi(mPt,mEta,mPhi);
00060 return mom;
00061 }
00062
00063 inline TVector3 StJetElement::localMomentum() const
00064 {
00065 TVector3 longUnit = jet()->momentum().Unit();
00066 TVector3 normUnit = TVector3(0,0,1).Cross(longUnit).Unit();
00067 TVector3 sideUnit = longUnit.Cross(normUnit);
00068 TVector3 mom = momentum();
00069 return TVector3(mom.Dot(sideUnit),mom.Dot(normUnit),mom.Dot(longUnit));
00070 }
00071
00072 #endif // ST_JET_ELEMENT_H