00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "L1Trigger/DTTraco/interface/DTTracoLUTs.h"
00019
00020
00021
00022
00023 #include <iostream>
00024 #include <iomanip>
00025 #include <string>
00026 #include <cmath>
00027 #include <algorithm>
00028
00029
00030
00031
00032
00033 #include "L1Trigger/DTUtilities/interface/DTTPGLutFile.h"
00034
00035 using namespace std;
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 DTTracoLUTs::DTTracoLUTs(string testfile):
00046 _testfile(testfile) {
00047 }
00048
00049
00050
00051
00052
00053
00054 DTTracoLUTs::~DTTracoLUTs() {
00055
00056 psi_lut.clear();
00057 for(int k=0;k<3;k++)
00058 phi_lut[k].clear();
00059 }
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 void DTTracoLUTs::reset() {
00070
00071 psi_lut.clear();
00072 for(int k=0;k<3;k++)
00073 phi_lut[k].clear();
00074 }
00075
00076
00077
00078
00079
00080 int DTTracoLUTs::load() {
00081
00082
00083 string ang_file = _testfile + ".anglut";
00084 string pos_file = _testfile + ".poslut";
00085
00086
00087 DTTPGLutFile filePSI(ang_file);
00088 if ( filePSI.open() != 0 ) return -1;
00089
00090
00091
00092
00093
00094 for(int u=0;u<1024;u++){
00095 int word = filePSI.readHex();
00096
00097
00098
00099
00100 psi_lut.push_back(word);
00101 }
00102 filePSI.close();
00103
00104
00105 DTTPGLutFile filePHI(pos_file);
00106 if ( filePHI.open() != 0 ) return -1;
00107
00108
00109 for(int y=0;y<3;y++){
00110 for(int h=0;h<512;h++){
00111 int phi = filePHI.readHex();
00112
00113
00114
00115
00116
00117
00118 phi_lut[y].push_back(phi);
00119 }
00120 }
00121 filePHI.close();
00122 return 0;
00123 }
00124
00125
00126
00127
00128
00129 void DTTracoLUTs::print() const {
00130
00131 cout << endl;
00132 cout << "L1 barrel Traco look-up tables :" << endl;
00133 cout << "====================================================" << endl;
00134 cout << endl;
00135
00136
00137
00138 for(int x=0;x<1024;x++)
00139 cout << "K=" << x << " ---> " << hex << psi_lut[x] << dec << endl;
00140 for(int m=0;m<512;m++)
00141 cout << "X=" << m << " ---> " << hex << (phi_lut[0])[m] << " "
00142 << (phi_lut[1])[m] << " "
00143 << (phi_lut[2])[m] << " " << dec << endl;
00144
00145 }
00146
00147
00148
00149
00150 unsigned short int DTTracoLUTs::getPhiRad(int pos,int flag) const {
00151 unsigned short int phi = (phi_lut[flag])[pos] & 0xFFF;
00152
00153
00154
00155
00156 return phi;
00157 }
00158
00159
00160
00161
00162 unsigned short int DTTracoLUTs::getPsi(int ang) const {
00163
00164 unsigned short int ipsi = (psi_lut)[ang+512];
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 return ipsi;
00177 }
00178
00179
00180
00181
00182 unsigned short int DTTracoLUTs::getBendAng(int pos, int ang, int flag) const {
00183
00184
00185
00186 unsigned short int BendAng = ( (psi_lut)[ang+512] - ((phi_lut[flag])[pos]/8) ) & 0x3FF;
00187
00188
00189
00190
00191
00192 return BendAng;
00193 }
00194
00195