CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/L1Trigger/DTSectorCollector/interface/DTSectColl.h

Go to the documentation of this file.
00001 //-------------------------------------------------
00002 //
00012 //--------------------------------------------------
00013 #ifndef DT_SECT_COLL_H   
00014 #define DT_SECT_COLL_H   
00015 
00016 //------------------------------------
00017 // Collaborating Class Declarations --
00018 //------------------------------------
00019 class DTTracoTrigData;
00020 class DTSectCollCand;
00021 class DTConfigSectColl;
00022 class DTTrigGeom;
00023 class DTChambPhSegm;
00024 class DTChambThSegm;
00025 class DTSectCollSegm;
00026 class DTSC;
00027 class DTTSPhi;
00028 class DTTSTheta;
00029 class DTSCTrigUnit;
00030 
00031 //----------------------
00032 // Base Class Headers --
00033 //----------------------
00034 #include "L1Trigger/DTUtilities/interface/DTCache.h"
00035 #include "L1Trigger/DTSectorCollector/interface/DTSectCollPhCand.h"
00036 #include "L1Trigger/DTSectorCollector/interface/DTSectCollThCand.h"
00037 #include "L1Trigger/DTSectorCollector/interface/DTSectCollPhSegm.h"
00038 #include "L1Trigger/DTSectorCollector/interface/DTSectCollThSegm.h"
00039 #include "DataFormats/MuonDetId/interface/DTSectCollId.h"
00040 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfigManager.h"
00041 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00042 
00043 //---------------
00044 // C++ Headers --
00045 //---------------
00046 #include <vector>
00047 
00048 //              ---------------------
00049 //              -- Class Interface --
00050 //              ---------------------
00051 
00052 typedef std::vector<DTSectCollPhSegm> DTSectCollPhVector;
00053 typedef std::vector<DTSectCollThSegm> DTSectCollThVector;
00054 typedef DTCache< DTSectCollPhSegm, DTSectCollPhVector > DTSCPhCache;
00055 typedef DTCache< DTSectCollThSegm, DTSectCollThVector > DTSCThCache;
00056 
00057 class DTSectColl : public DTSCPhCache, public DTSCThCache  {
00058 
00059  public:
00060 
00062   //DTSectColl(edm::ParameterSet& sc_pset);
00063   DTSectColl(DTSectCollId id);
00064   
00066   ~DTSectColl();
00067 
00069   void setConfig(const DTConfigManager *conf);
00070 
00072   inline DTTSPhi* getTSPhi(int istat) const { return _tsphi[istat-1]; }
00073   
00075   inline DTTSTheta* getTSTheta(int istat) const { return _tstheta[istat-1]; }
00076 
00078   inline DTConfigSectColl* config() const { return _config; }
00079 
00080   // non-const methods
00081 
00082 /*   //! Add a TSM candidate to the Sect Coll, ifs is first/second track flag  */
00083 /*   void addCandPh(DTSectCollPhCand* cand);  */
00084 
00085 /*   //! Add a TS Theta candidate to the Sect Coll, ifs is first/second track flag  */
00086 /*   void addCandTh(DTSectCollThCand* cand); */
00087 
00088 /*    //! Set a flag to skip sort2 */
00089 /*    void ignoreSecondTrack() { _ignoreSecondTrack=1; } */
00090 
00092   void localClear();
00093 
00095   void loadSectColl();
00096 
00098   void addTSPhi(int step, const DTChambPhSegm* tsmsegm, int ifs, int istat);
00099   
00101   void addTSTheta(int step, const DTChambThSegm* tsmsegm, int istat);
00102 
00104   void addTU(DTSCTrigUnit* tru);
00105 
00107   DTSC* getDTSC(int step, int istat) const;
00108 
00110   void runSectColl();
00111 
00113   DTSectCollPhCand* getDTSectCollPhCand(int ifs, unsigned n) const;
00114 
00116   DTSectCollThCand* getDTSectCollThCand(unsigned n) const;
00117 
00118   // const methods
00119 
00121   DTSectCollPhCand* getTrackPh(int n) const ; 
00122   
00124   DTSectCollThCand* getTrackTh(int n) const ;
00125 
00127   unsigned nCandPh(int ifs) const;  
00128   
00130   unsigned nCandTh() const;
00131 
00133   int nSegmPh(int step);
00134   
00136   int nSegmTh(int step);
00137 
00139   inline int nTracksPh() const { return _outcand_ph.size(); }
00140 
00142   inline int nTracksTh() const { return _outcand_th.size(); }
00143 
00145   const DTSectCollPhSegm* SectCollPhSegment(int step, unsigned n);
00146 
00148   const DTSectCollThSegm* SectCollThSegment(int step);
00149 
00151   std::vector<DTSectCollPhSegm>::const_iterator beginPh() { return  DTSCPhCache::_cache.begin(); }
00152 
00154   int sizePh() { return DTSCPhCache::_cache.size(); } 
00155 
00157   std::vector<DTSectCollPhSegm>::const_iterator endPh() { return DTSCPhCache::_cache.end(); } 
00158   
00160   std::vector<DTSectCollThSegm>::const_iterator beginTh() { return DTSCThCache::_cache.begin(); }
00161   
00163   int sizeTh() { return DTSCThCache::_cache.size(); }
00164 
00166   std::vector<DTSectCollThSegm>::const_iterator endTh() { return DTSCThCache::_cache.end(); }
00167   
00169   //  LocalPoint LocalPosition(const DTTrigData*) const;
00170 
00172   //  LocalVector LocalDirection(const DTTrigData*) const;
00173 
00175   void clearCache() { DTSCPhCache::clearCache();  DTSCThCache::clearCache(); }
00176   
00178   virtual void reconstruct() { loadSectColl(); runSectColl(); }
00179 
00181   DTSectCollId SectCollId() { return _sectcollid; }
00182  
00183  private:
00184 
00185   // Configuration
00186   DTConfigSectColl* _config;
00187 
00188   // SC Id
00189   DTSectCollId _sectcollid;
00190 
00191   DTTSPhi* _tsphi[DTConfigSectColl::NTSPSC];
00192   DTTSTheta* _tstheta[DTConfigSectColl::NTSTSC];
00193 
00194   // SM: new  sector collector 
00195   DTSC* _tsc[DTConfigSectColl::NSTEPL-DTConfigSectColl::NSTEPF+1][DTConfigSectColl::NDTSC];
00196 
00197   // input data Phi
00198   std::vector<DTSectCollPhCand*> _incand_ph[2]; 
00199 
00200   // output data Phi
00201   std::vector<DTSectCollPhCand*> _outcand_ph; 
00202   
00203   // input data Theta
00204   std::vector<DTSectCollThCand*> _incand_th;  
00205 
00206   // output data Theta
00207   std::vector<DTSectCollThCand*> _outcand_th; 
00208 
00209 };
00210 #endif