00001
00002
00012
00013 #ifndef DT_SECT_COLL_H
00014 #define DT_SECT_COLL_H
00015
00016
00017
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
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
00045
00046 #include <vector>
00047
00048
00049
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
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
00081
00082
00083
00084
00085
00086
00087
00088
00089
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
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
00170
00172
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
00186 DTConfigSectColl* _config;
00187
00188
00189 DTSectCollId _sectcollid;
00190
00191 DTTSPhi* _tsphi[DTConfigSectColl::NTSPSC];
00192 DTTSTheta* _tstheta[DTConfigSectColl::NTSTSC];
00193
00194
00195 DTSC* _tsc[DTConfigSectColl::NSTEPL-DTConfigSectColl::NSTEPF+1][DTConfigSectColl::NDTSC];
00196
00197
00198 std::vector<DTSectCollPhCand*> _incand_ph[2];
00199
00200
00201 std::vector<DTSectCollPhCand*> _outcand_ph;
00202
00203
00204 std::vector<DTSectCollThCand*> _incand_th;
00205
00206
00207 std::vector<DTSectCollThCand*> _outcand_th;
00208
00209 };
00210 #endif