00001
00002
00014
00015
00016 #ifndef DT_TRACO_CHIP_H
00017 #define DT_TRACO_CHIP_H
00018
00019
00020
00021
00022 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfig.h"
00023 #include "L1Trigger/DTBti/interface/DTBtiTrigData.h"
00024 #include "L1Trigger/DTTraco/interface/Lut.h"
00025
00026
00027
00028
00029 class DTTracoCard;
00030 class DTBtiTrigData;
00031 class DTTracoCand;
00032 class DTTracoTrig;
00033 class DTTracoTrigData;
00034
00035
00036
00037
00038 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00039 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
00040 #include "DataFormats/MuonDetId/interface/DTTracoId.h"
00041 #include "L1Trigger/DTTraco/interface/DTTracoLUTs.h"
00042 #include "L1Trigger/DTUtilities/interface/DTTrigGeom.h"
00043 #include "L1TriggerConfig/DTTPGConfig/interface/BitArray.h"
00044 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfigTraco.h"
00045
00046
00047
00048
00049 #include <vector>
00050
00051
00052
00053
00054
00055 class DTTracoChip {
00056
00057 public:
00058
00060
00061
00063 DTTracoChip(DTTracoCard* card, int n, DTConfigTraco* config);
00064
00066 DTTracoChip(const DTTracoChip& traco);
00067
00069 ~DTTracoChip();
00070
00072 DTTracoChip& operator=(const DTTracoChip& traco);
00073
00075 void add_btiT(int step, int pos, const DTBtiTrigData* btitrig);
00076
00078 void addTrig(int step, DTTracoTrig*);
00079
00081 void setPV(int step, int ntrk, int code, int K);
00082
00084 void calculateAngles(DTTracoTrig*);
00085
00087 void run();
00088
00090 void clear();
00091
00093 inline int number() const { return _id.traco(); }
00094
00096 void raiseOverlap(int step);
00097
00099 inline DTTrigGeom* geom() const { return _geom; }
00100
00102 inline DTTracoId id() const { return _id; }
00103
00105 inline int wheel() const { return _geom->wheel(); }
00106
00108 inline int station() const { return _geom->station(); }
00109
00111 inline int sector() const { return _geom->sector(); }
00112
00114
00115
00117 inline DTConfigTraco* config() const { return _config; }
00118
00120 float psiRad(int sl=0) const;
00121
00123 int KRad() const;
00124
00125
00127 int BTIC() const { return _btic; }
00128
00130 int IBTIOFF() const { return _ibtioff; }
00131
00133 int DD() const { return _dd; }
00134
00136 int nTrig(int step) const;
00137
00139 DTTracoTrig* trigger(int step, unsigned n) const;
00140
00142 DTTracoTrigData triggerData(int step, unsigned n) const;
00143
00145 int useSecondTrack(int step) const;
00146
00148 int edgeBTI(int step, int io, int lr) const;
00149
00151 LocalPoint localPosition() const { return _geom->localPosition(_id); }
00152
00154 GlobalPoint CMSPosition() const { return _geom->CMSPosition(_id); }
00155
00157 void setFlag(int step,int ext=0);
00158
00160 inline int ovlFlag(int step) {
00161 return _flag[step-DTConfigTraco::NSTEPF].element(1);}
00162
00163 private:
00164
00166 DTTracoCand* bestCand(int itk, std::vector<DTTracoCand> & tclist);
00167
00169 DTTracoTrig* setPV(int itk, DTTracoCand* inner, DTTracoCand* outer);
00170
00172 void DoAdjBtiLts(DTTracoCand* candidate, std::vector<DTTracoCand> & tclist);
00173
00175 int AdjBtiLTSuppressed(DTTracoCand* candidate);
00176
00178 int storeCorr(DTTracoTrig* tctrig, DTTracoCand* inner, DTTracoCand* outer, int tkn);
00179
00181 int storeUncorr(DTTracoTrig* tctrig, DTTracoCand* inner, DTTracoCand* outer, int tkn);
00182
00184 int insideAngWindow(DTTracoTrig* ) const;
00185
00187 void setTracoAcceptances();
00188
00189 private:
00190
00191 DTTrigGeom* _geom;
00192 DTTracoId _id;
00193
00194 DTTracoCard* _card;
00195
00196 DTConfigTraco* _config;
00197
00198 int _krad;
00199 int _btic;
00200 int _ibtioff;
00201 int _dd;
00202
00203
00204 std::vector<DTTracoCand> _innerCand[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1];
00205 std::vector<DTTracoCand> _outerCand[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1];
00206
00207
00208 std::vector<DTTracoTrig*> _tracotrig[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1];
00209
00210
00211 BitArray<DTConfigTraco::NSTEPL+2> _bxlts;
00212
00213
00214
00215
00216
00217 BitArray<32> _flag[DTConfigTraco::NSTEPL-DTConfigTraco::NSTEPF+1];
00218
00219
00220 int _PSIMIN[4*DTConfig::NBTITC];
00221 int _PSIMAX[4*DTConfig::NBTITC];
00222
00223
00224 DTTracoLUTs* _luts;
00225
00226 Lut* _lutsCCB;
00227
00228 };
00229
00230 #endif