Go to the documentation of this file.00001
00002
00014
00015
00016 #ifndef DT_BTI_CHIP_H
00017 #define DT_BTI_CHIP_H
00018
00019
00020
00021
00022 class DTBtiHit;
00023 class DTBtiTrig;
00024 class DTBtiTrigData;
00025 class DTDigi;
00026
00027
00028
00029
00030 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
00031 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
00032 #include "DataFormats/MuonDetId/interface/DTBtiId.h"
00033 #include "L1Trigger/DTUtilities/interface/DTTrigGeom.h"
00034 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfig.h"
00035 #include "L1TriggerConfig/DTTPGConfig/interface/BitArray.h"
00036 #include "L1TriggerConfig/DTTPGConfig/interface/DTConfigBti.h"
00037 #include "L1Trigger/DTBti/interface/DTBtiCard.h"
00038
00039
00040
00041
00042 #include <vector>
00043
00044
00045
00046
00047
00048 class DTBtiChip {
00049
00050 public:
00051
00053
00054
00056 DTBtiChip(DTBtiCard* card, DTTrigGeom* geom, int supl, int n, DTConfigBti* _config );
00057
00059 DTBtiChip(const DTBtiChip& bti);
00060
00062 ~DTBtiChip();
00063
00065 DTBtiChip& operator=(const DTBtiChip& bti);
00066
00068 void add_digi(int cell, const DTDigi* digi);
00069
00071 void add_digi_clock(int cell, int clock_digi);
00072
00074 std::vector<const DTDigi*> get_CellDigis(int cell) { return _digis[cell];}
00075
00077 void run();
00078
00080 void clear();
00081
00084 void addTrig(int step, DTBtiTrig* btitrig);
00085
00086
00087
00089 inline int number() const { return _id.bti(); }
00090
00092 inline int superlayer() const { return _id.superlayer(); }
00093
00095 inline LocalPoint localPosition() const { return _geom->localPosition(_id); }
00096
00098 inline GlobalPoint CMSPosition() const { return _geom->CMSPosition(_id); }
00099
00101 int nCellHit() const;
00102
00104 int nTrig(int step) const;
00105
00106
00107 std::vector<DTBtiTrig*> trigList(int step) const;
00108
00110 DTBtiTrig* trigger(int step, unsigned n) const;
00111
00113 DTBtiTrigData triggerData(int step, unsigned n) const;
00114
00116
00117
00119 inline DTConfigBti* config() const { return _config; }
00120
00121
00123 inline DTTrigGeom* geom() const { return _geom; }
00124
00126 inline DTBtiId id() const { return _id; }
00127
00129 inline int wheel() const { return _geom->wheel(); }
00130
00132 inline int station() const { return _geom->station(); }
00133
00135 inline int sector() const { return _geom->sector(); }
00136
00137 void init_clock();
00138
00139
00140
00141 private:
00142
00143 void init();
00144 void tick();
00145
00146 inline int currentStep() const { return (int)(((float)(_curStep)+0.5)/2); }
00147 inline int currentIntStep() const { return _curStep; }
00148 void computeSums();
00149 void sum(const int s, const int a, const int b);
00150 void computeEqs();
00151 void findTrig();
00152 int keepTrig(const int eq, const int acp, const int code);
00153 int keepTrigPatt(int flag, const int eq, const int pattType, int hlflag);
00154 bool matchEq(float eqA, float eqB, int AC);
00155 void acceptMask(BitArray<80> * BitArrPtr,int k,int accep);
00156 void doLTS();
00157 int store(const int eq, const int code, const int K, const int X,
00158 float KeqAB=0., float KeqBC=0., float KeqCD=0.,
00159 float KeqAC=0., float KeqBD=0., float KeqAD=0.);
00160 void eraseTrigger(int step, unsigned n);
00161 void setSnap();
00162 void reSumSet();
00163 int reSum(int a, int b) { return reSumAr[a][b+2];}
00164 int reSum23(int a, int b) { return reSumAr23[a][b+2];}
00165
00166 private:
00167
00168
00169 DTBtiCard* _card;
00170
00171 DTTrigGeom* _geom;
00172 DTConfigBti* _config;
00173
00174 DTBtiId _id;
00175
00176
00177 std::vector<const DTDigi*> _digis[9];
00178
00179 std::vector<int > _digis_clock[9];
00180
00181
00182 std::vector<DTBtiTrig*> _trigs[ DTConfig::NSTEPL - DTConfig::NSTEPF+1 ];
00183
00184
00185 int _curStep;
00186 std::vector<DTBtiHit*> _hits[9];
00187 int _thisStepUsedTimes[9];
00188 DTBtiHit* _thisStepUsedHit[9];
00189 int _nStepUsedHits;
00190 float _sums[25], _difs[25];
00191 float _Keq[32][6];
00192 float _Xeq[32][2];
00193 int _MinKAcc;
00194 int _MaxKAcc;
00195 int _MinKleftTraco;
00196 int _MaxKleftTraco;
00197 int _MinKcenterTraco;
00198 int _MaxKcenterTraco;
00199 int _MinKrightTraco;
00200 int _MaxKrightTraco;
00201
00202 float _XeqAC_patt0, _XeqBD_patt0;
00203 float _XeqAB_patt0, _XeqCD_patt0;
00204
00205 float _KTR[32][2];
00206 float _JTR[32][3];
00207 int init_done;
00208 int _busyStart_clock[9];
00209
00210
00211 int ST43, RE43, ST23, RE23, ST, ST2, ST3, ST4, ST5, ST7;
00212
00213 int reSumAr[3][5];
00214 int reSumAr23[3][5];
00215
00216 };
00217 #endif
00218