00001 //------------------------------------------------- 00002 // 00014 // 00015 //-------------------------------------------------- 00016 #ifndef L1MUDT_TRACK_H 00017 #define L1MUDT_TRACK_H 00018 00019 //--------------- 00020 // C++ Headers -- 00021 //--------------- 00022 00023 #include <iosfwd> 00024 #include <string> 00025 #include <vector> 00026 #include <functional> 00027 00028 //---------------------- 00029 // Base Class Headers -- 00030 //---------------------- 00031 00032 #include "DataFormats/L1GlobalMuonTrigger/interface/L1MuRegionalCand.h" 00033 00034 //------------------------------------ 00035 // Collaborating Class Declarations -- 00036 //------------------------------------ 00037 00038 #include <FWCore/Framework/interface/ESHandle.h> 00039 #include <FWCore/Framework/interface/EventSetup.h> 00040 #include "L1Trigger/DTTrackFinder/src/L1MuDTTrackAssParam.h" 00041 #include "L1Trigger/DTTrackFinder/src/L1MuDTAddressArray.h" 00042 #include "L1Trigger/DTTrackFinder/src/L1MuDTTrackSegPhi.h" 00043 #include "L1Trigger/DTTrackFinder/src/L1MuDTTrackSegEta.h" 00044 #include "L1Trigger/DTTrackFinder/src/L1MuDTSecProcId.h" 00045 00046 00047 // --------------------- 00048 // -- Class Interface -- 00049 // --------------------- 00050 00051 class L1MuDTTrack : public L1MuRegionalCand { 00052 00053 public: 00054 00056 L1MuDTTrack(); 00057 00059 L1MuDTTrack(const L1MuDTSecProcId&); 00060 00062 L1MuDTTrack(const L1MuDTTrack&); 00063 00065 virtual ~L1MuDTTrack(); 00066 00068 void reset(); 00069 00071 inline std::string name() const { return m_name; } 00072 00074 inline unsigned int pt() const { return pt_packed(); } 00075 00077 inline unsigned int phi() const { return phi_packed(); } 00078 00080 inline unsigned int eta() const { return eta_packed(); } 00081 00083 inline bool fineEtaBit() const { return isFineHalo(); } 00084 00086 inline int charge() const { return chargeValue(); } 00087 00089 inline TrackClass tc() const { return m_tc; } 00090 00092 inline bool empty() const { return m_empty; } 00093 00095 inline const L1MuDTSecProcId& spid() const { return m_spid; } 00096 00098 inline L1MuDTAddressArray address() const { return m_addArray; } 00099 00101 inline int address(int stat) const { return m_addArray.station(stat); } 00102 00104 inline int numberOfTSphi() const { return m_tsphiList.size(); } 00105 00107 inline int numberOfTSeta() const { return m_tsetaList.size(); } 00108 00110 const std::vector<L1MuDTTrackSegPhi>& getTSphi() const { return m_tsphiList; } 00111 00113 const L1MuDTTrackSegPhi& getStartTSphi() const; 00114 00116 const L1MuDTTrackSegPhi& getEndTSphi() const; 00117 00119 const std::vector<L1MuDTTrackSegEta>& getTSeta() const { return m_tsetaList; } 00120 00122 const L1MuDTTrackSegEta& getStartTSeta() const; 00123 00125 const L1MuDTTrackSegEta& getEndTSeta() const; 00126 00128 inline void enable() { m_empty = false; setType(0); } 00129 00131 inline void disable() { m_empty = true; } 00132 00134 inline void setName(std::string name) { m_name = name; } 00135 00137 inline void setTC(TrackClass tc) { m_tc = tc; } 00138 00140 inline void setPhi(int phi) { setPhiPacked(phi); } 00141 00143 void setEta(int eta); 00144 00146 inline void setFineEtaBit() { setFineHalo(true); } 00147 00149 inline void setPt(int pt) { setPtPacked(pt); } 00150 00152 inline void setCharge(int charge) { setChargeValue(charge); setChargeValid(true); } 00153 00155 inline void setQuality(unsigned int quality) { setQualityPacked(quality); } 00156 00158 inline void setAddresses(const L1MuDTAddressArray& addr) { m_addArray = addr; } 00159 00161 void setTSphi(const std::vector<const L1MuDTTrackSegPhi*>& tsList); 00162 00164 void setTSeta(const std::vector<const L1MuDTTrackSegEta*>& tsList); 00165 00167 unsigned int triggerScale(float value, const edm::EventSetup& c) const; 00168 00170 L1MuDTTrack& operator=(const L1MuDTTrack&); 00171 00173 bool operator==(const L1MuDTTrack&) const; 00174 00176 bool operator!=(const L1MuDTTrack&) const; 00177 00179 void print() const; 00180 00182 friend std::ostream& operator<<(std::ostream&, const L1MuDTTrack&); 00183 00185 class Rank : std::binary_function< const L1MuDTTrack*, const L1MuDTTrack*, bool> { 00186 public : 00187 bool operator()( const L1MuDTTrack* first, const L1MuDTTrack* second ) const { 00188 unsigned short int rank_f = 0; // rank of first 00189 unsigned short int rank_s = 0; // rank of second 00190 if ( first ) rank_f = 10 * first->pt() + first->quality(); 00191 if ( second ) rank_s = 10 * second->pt() + second->quality(); 00192 return rank_f > rank_s; 00193 } 00194 }; 00195 00196 00197 private: 00198 00199 L1MuDTSecProcId m_spid; // which SP found the track 00200 std::string m_name; 00201 bool m_empty; 00202 TrackClass m_tc; 00203 00204 L1MuDTAddressArray m_addArray; 00205 std::vector<L1MuDTTrackSegPhi> m_tsphiList; 00206 std::vector<L1MuDTTrackSegEta> m_tsetaList; 00207 00208 }; 00209 00210 #endif