00001 #ifndef TMBTrackCalJet_H
00002 #define TMBTrackCalJet_H
00003
00004 #include "tmb_tree/TMBLorentzVector.hpp"
00005
00006 #include "tmb_tree/TMBTrackCal.hpp"
00007 #include "tmb_tree/TMBTrack.hpp"
00008 #include "tmb_tree/TMBJet.hpp"
00009 #include "kinem_util/AnglesUtil.hpp"
00010
00011 #ifndef ROOT_TRef
00012 #include "TRef.h"
00013 #endif
00014
00015 #ifndef ROOT_TRefArray
00016 #include "TRefArray.h"
00017 #endif
00018
00019 #ifndef ROOT_TLorentzVector
00020 #include "TLorentzVector.h"
00021 #endif
00022
00023 #include <vector>
00024 #include <iostream>
00025
00026
00027
00033 class TMBTrackCalJet : public TMBLorentzVector {
00034
00035 private:
00036
00037 float _q;
00038
00039 float _Corr, _Cin, _Cout, _Csub;
00040 std::vector<float> _Efraction;
00041 std::vector<int> _Ncells;
00042
00043 TRef _jet;
00044 TRefArray _trackCalList;
00045
00046
00047 public:
00048
00049 TMBTrackCalJet();
00050 TMBTrackCalJet(TRef jet, TRefArray* trackCalList,
00051 Float_t C, Float_t Cin, Float_t Cout, Float_t Csub,
00052 std::vector<Float_t> Efraction, std::vector<Int_t> Ncells);
00053 virtual ~TMBTrackCalJet();
00054
00055
00056 TMBJet* GetJet() const {
00057 return _jet.IsValid() ? (TMBJet*)_jet.GetObject() : 0;
00058 }
00059
00060 TMBTrackCal* GetTrackCal(Int_t itrack) const {
00061 return (TMBTrackCal*)_trackCalList.At(itrack);
00062 }
00063
00064
00065 Float_t GetC() const { return _Corr; }
00066 Float_t GetCin() const { return _Cin; }
00067 Float_t GetCout() const { return _Cout; }
00068 Float_t GetCsub() const { return _Csub; }
00069
00070 Float_t GetEfraction(Int_t itrack) const {
00071 return _Efraction[itrack];
00072 }
00073 Int_t GetNcells(Int_t itrack) const {
00074 return _Ncells[itrack];
00075 }
00076
00077 Int_t GetTrackMultiplicity() const {
00078 return _trackCalList.GetLast()+1;
00079 }
00080
00081
00082
00083
00084 Float_t GetDR(Int_t itrack) const {
00085
00086 TMBTrackCal* trkcal = (TMBTrackCal*) _trackCalList.At(itrack);
00087 TMBTrack* trk = (TMBTrack*) trkcal->GetChargedTrack();
00088 TMBJet* jet = _jet.IsValid() ? (TMBJet*) _jet.GetObject() : 0;
00089 return jet->DeltaR(*trk);
00090 }
00091
00092 Float_t GetDR(Int_t itrack, Int_t layer) const {
00093
00094 if(layer>17 || layer<1) return -1.0;
00095
00096 TMBJet* jet = _jet.IsValid() ? (TMBJet*) _jet.GetObject() : 0;
00097 float jdeta = 0.1 * jet->detEta();
00098 float jdphi = (jet->detPhi() + 0.05) / 64.0 * 2.0 * kinem::PI;
00099
00100 TMBTrackCal* trkcal = (TMBTrackCal*) _trackCalList.At(itrack);
00101 Float_t trk_eta, trk_phi;
00102 trkcal->getCalEtaPhi(layer, trk_eta, trk_phi);
00103
00104 double deta = jdeta-trk_eta;
00105 double dphi = kinem::delta_phi(jdphi,trk_phi);
00106 double dr = sqrt(deta*deta + dphi*dphi);
00107
00108 return dr;
00109 }
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121 Float_t charge() const {return _q;}
00122
00123 void print(std::ostream& os) const;
00124
00125
00126 ClassDef(TMBTrackCalJet, 3);
00127 };
00128
00129 #endif // TMBTrackCalJet