23 if (
version_ == pc_lut_version)
return;
25 edm::LogInfo(
"L1T") <<
"EMTF using pc_lut_ver: " << pc_lut_version;
28 if (pc_lut_version == 0)
29 coord_lut_dir =
"ph_lut_v1";
30 else if (pc_lut_version == 1)
31 coord_lut_dir =
"ph_lut_v2";
32 else if (pc_lut_version == -1)
33 coord_lut_dir =
"ph_lut_v2";
36 <<
"Trying to use EMTF pc_lut_version = " << pc_lut_version <<
", does not exist!";
39 std::string coord_lut_path =
"L1Trigger/L1TMuon/data/emtf_luts/" + coord_lut_dir +
"/";
48 std::string cppf_coord_lut_path =
"L1Trigger/L1TMuon/data/cppf/";
49 bool use_local_cppf_files = (pc_lut_version == -1);
50 if (use_local_cppf_files) {
51 cppf_coord_lut_path =
"L1Trigger/L1TMuon/data/cppf_luts/angleScale_v1/";
58 <<
"Expected ph_init_neighbor_ to get " << 2*6*61 <<
" values, " 64 <<
"Expected ph_disp_neighbor_ to get " << 2*6*61 <<
" values, " 70 <<
"Expected th_init_neighbor_ to get " << 2*6*61 <<
" values, " 76 <<
"Expected th_disp_neighbor_ to get " << 2*6*61 <<
" values, " 82 <<
"Expected th_lut_neighbor_ to get " << 2*6*61*128 <<
" values, " 88 <<
"Expected th_corr_lut_neighbor_ to get " << 2*6*7*128 <<
" values, " 94 <<
"Expected cppf_ph_lut_ to get " << 2*6*6*6*3*64 <<
" values, " 100 <<
"Expected cppf_th_lut_ to get " << 2*6*6*6*3 <<
" values, " 108 0, 0, 5, 5, 5, 5, 2, 2, 2, 2, 0
112 <<
"Expected ph_patt_corr_ to get " << 11 <<
" values, " 117 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0
121 <<
"Expected ph_patt_corr_sign_ to get " << 11 <<
" values, " 126 39,57,76,39,58,76,41,60,79,
127 95,114,132,95,114,133,98,116,135,
128 38,76,113,39,58,76,95,114,132,
129 38,76,113,39,58,76,95,114,132,
130 38,76,113,38,57,76,95,113,132,
131 21,21,23,1,21,1,21,1,20
135 <<
"Expected ph_zone_offset_ to get " << 6*9 <<
" values, " 142 39, 57, 76, 39, 58, 76, 41, 60, 79, 39, 57, 76, 21, 21, 23, 21,
143 95, 114, 132, 95, 114, 133, 98, 116, 135, 95, 114, 132, 0, 0, 0, 0,
144 38, 76, 113, 39, 58, 76, 95, 114, 132, 1, 21, 0, 0, 0, 0, 0,
145 38, 76, 113, 39, 58, 76, 95, 114, 132, 1, 21, 0, 0, 0, 0, 0,
146 38, 76, 113, 38, 57, 76, 95, 113, 132, 1, 20, 0, 0, 0, 0, 0
150 <<
"Expected ph_init_hard_ to get " << 5*16 <<
" values, " 159 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
164 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
169 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
174 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
179 int pc_lut_id2 = pc_lut_id;
182 if ((9 <= pc_lut_id2 && pc_lut_id2 < 12) || (25 <= pc_lut_id2 && pc_lut_id2 < 28))
185 if (pc_lut_id2 == 15)
188 size_t index = ((fw_endcap * 6 + fw_sector) * 61 + pc_lut_id2) * 128 + pc_wire_id;
193 int pc_lut_id2 = pc_lut_id;
196 if ((9 <= pc_lut_id2 && pc_lut_id2 < 12) || (25 <= pc_lut_id2 && pc_lut_id2 < 28))
199 if (pc_lut_id2 == 15)
202 if (pc_lut_id2 <= 3) {
204 }
else if (pc_lut_id2 == 12) {
206 }
else if (16 <= pc_lut_id2 && pc_lut_id2 < 19) {
210 <<
"get_th_corr_lut(): out of range pc_lut_id: " << pc_lut_id;
213 size_t index = ((fw_endcap * 6 + fw_sector) * 7 + pc_lut_id2) * 128 + pc_wire_strip_id;
226 size_t index = pc_station * 9 + pc_chamber;
231 size_t index = fw_station * 16 + fw_cscid;
236 uint32_t iendcap = (rpc_region == -1) ? 1 : 0;
237 uint32_t isector = (rpc_sector - 1);
238 uint32_t istationring = (rpc_station >= 3) ? ((rpc_station - 3) * 2 + (rpc_ring - 2) + 2) : (rpc_station - 1);
239 uint32_t isubsector = (rpc_subsector - 1);
240 uint32_t iroll = (rpc_roll - 1);
241 return ((((iendcap * 6 + isector) * 6 + istationring) * 6 + isubsector) * 3 + iroll);
245 size_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
246 size_t ph_index = (th_index * 64) + (halfstrip - 1);
248 if (!is_neighbor && rpc_subsector == 2)
254 size_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
262 std::ifstream infile;
266 while (infile >> buf) {
267 buf = (buf == -999) ? 0 : buf;
274 auto get_rpc_region = [](uint32_t
id) {
return (static_cast<int>((
id >> 0) & 0X3) + (-1)); };
275 auto get_rpc_sector = [](uint32_t
id) {
return (static_cast<int>((
id >> 7) & 0XF) + (1)); };
276 auto get_rpc_ring = [](uint32_t
id) {
return (static_cast<int>((
id >> 2) & 0X7) + (1)); };
277 auto get_rpc_station = [](uint32_t
id) {
return (static_cast<int>((
id >> 5) & 0X3) + (1)); };
278 auto get_rpc_subsector = [](uint32_t
id) {
return (static_cast<int>((
id >> 12) & 0X7) + (1)); };
279 auto get_rpc_roll = [](uint32_t
id) {
return (static_cast<int>((
id >> 15) & 0X7) + (0)); };
281 std::vector<std::string> cppf_filenames = {
282 "angleScale_RPC_CPPFp1.txt",
283 "angleScale_RPC_CPPFp2.txt",
284 "angleScale_RPC_CPPFp3.txt",
285 "angleScale_RPC_CPPFp4.txt",
286 "angleScale_RPC_CPPFn1.txt",
287 "angleScale_RPC_CPPFn2.txt",
288 "angleScale_RPC_CPPFn3.txt",
289 "angleScale_RPC_CPPFn4.txt",
295 vec1.resize(2*6*6*6*3*64, 0);
296 vec2.resize(2*6*6*6*3, 0);
298 for (
size_t i = 0;
i < cppf_filenames.size(); ++
i) {
299 std::ifstream infile;
300 infile.open(
edm::FileInPath(filename + cppf_filenames.at(
i)).fullPath().c_str());
304 int buf1, buf2, buf3, buf4, buf5, buf6;
306 int buf1_prev = 0, buf2_prev = 0, halfstrip_prev = 0;
310 while ((infile >> buf1) && (infile >> buf2) && (infile >> buf3) && (infile >> buf4) && (infile >> buf5) && (infile >> buf6)) {
312 if ((line_num % 192) == 191) line_num += 1;
316 if ((line_num % 2) == 1) {
321 if (local && (buf1 == 0 || buf2 == 0)) {
322 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected non-0 values, got buf1 = " << buf1 <<
", buf2 = " << buf2;
324 if (!local && (buf1_prev == 0 || buf2_prev == 0)) {
325 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected non-0 values, got buf1_prev = " << buf1_prev <<
", buf2_prev = " << buf2_prev;
328 uint32_t
id = (local ? buf1 : buf1_prev);
329 int32_t rpc_region = get_rpc_region(
id);
330 int32_t rpc_sector = get_rpc_sector(
id);
331 int32_t rpc_station = get_rpc_station(
id);
332 int32_t rpc_ring = get_rpc_ring(
id);
333 int32_t rpc_subsector = get_rpc_subsector(
id);
334 int32_t rpc_roll = get_rpc_roll(
id);
337 if ( buf2_prev*2 > halfstrip_prev + 8 ||
338 buf2_prev*2 < halfstrip_prev - 8 ) {
339 if (buf2_prev == 1) count_dir = +1;
342 if (count_dir == -1) dStrip = (buf2_prev*2 == halfstrip_prev ? 1 : 0);
343 if (count_dir == +1) dStrip = (buf2_prev*2 == halfstrip_prev + 2 ? 1 : 0);
344 if (buf2_prev*2 < halfstrip_prev - 8 && buf2_prev == 1) dStrip = 1;
347 uint32_t halfstrip = (local ? buf2 : buf2_prev*2 - dStrip);
348 halfstrip_prev = halfstrip;
353 size_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
354 size_t ph_index = (th_index * 64) + (halfstrip - 1);
359 vec1.at(ph_index) = ph;
361 vec2.at(th_index) = th;
364 if (!local && (line_num % 192) == 191)
365 vec1.at(ph_index+1) = ph;
void read(int pc_lut_version)
std::vector< uint32_t > ph_zone_offset_
std::vector< uint32_t > cppf_ph_lut_
std::vector< uint32_t > th_corr_lut_neighbor_
uint32_t get_ph_patt_corr_sign(int pattern) const
std::vector< uint32_t > cppf_th_lut_
std::vector< uint32_t > th_disp_neighbor_
uint32_t get_th_init(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > ph_patt_corr_
std::vector< double > vec1
uint32_t get_cppf_th_lut(int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll) const
std::vector< uint32_t > ph_init_hard_
uint32_t get_th_disp(int fw_endcap, int fw_sector, int pc_lut_id) const
uint32_t get_ph_disp(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > ph_patt_corr_sign_
void read_cppf_file(const std::string &filename, std::vector< uint32_t > &vec1, std::vector< uint32_t > &vec2, bool local)
std::vector< uint32_t > th_init_neighbor_
uint32_t get_ph_zone_offset(int pc_station, int pc_chamber) const
std::vector< uint32_t > ph_disp_neighbor_
uint32_t get_cppf_lut_id(int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll) const
uint32_t get_ph_patt_corr(int pattern) const
uint32_t get_th_lut(int fw_endcap, int fw_sector, int pc_lut_id, int pc_wire_id) const
std::vector< uint32_t > ph_init_neighbor_
uint32_t get_ph_init_hard(int fw_station, int fw_cscid) const
void read_file(const std::string &filename, std::vector< uint32_t > &vec)
uint32_t get_ph_init(int fw_endcap, int fw_sector, int pc_lut_id) const
uint32_t get_th_corr_lut(int fw_endcap, int fw_sector, int pc_lut_id, int pc_wire_strip_id) const
uint32_t get_cppf_ph_lut(int rpc_region, int rpc_sector, int rpc_station, int rpc_ring, int rpc_subsector, int rpc_roll, int halfstrip, bool is_neighbor) const
std::vector< uint32_t > th_lut_neighbor_