18 edm::LogInfo(
"L1T") <<
"EMTF using pc_lut_ver: " << pc_lut_version <<
", configured for "
19 << (pc_lut_data ?
"data" :
"MC");
22 if (pc_lut_version == 0)
23 coord_lut_dir =
"ph_lut_v1";
24 else if (pc_lut_version == 1)
25 coord_lut_dir =
"ph_lut_v2";
26 else if (pc_lut_version == 2 && pc_lut_data)
27 coord_lut_dir =
"ph_lut_v3_data";
28 else if (pc_lut_version == 2)
29 coord_lut_dir =
"ph_lut_v2";
30 else if (pc_lut_version == -1 && pc_lut_data)
31 coord_lut_dir =
"ph_lut_v3_data";
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/";
57 use_local_cppf_files);
60 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected ph_init_neighbor_ to get " << 2 * 6 * 61 <<
" values, "
65 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected ph_disp_neighbor_ to get " << 2 * 6 * 61 <<
" values, "
70 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected th_init_neighbor_ to get " << 2 * 6 * 61 <<
" values, "
75 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected th_disp_neighbor_ to get " << 2 * 6 * 61 <<
" values, "
80 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected th_lut_neighbor_ to get " << 2 * 6 * 61 * 128 <<
" values, "
85 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected th_corr_lut_neighbor_ to get " << 2 * 6 * 7 * 128 <<
" values, "
92 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected cppf_ph_lut_ to get " << 2 * 6 * 6 * 6 * 3 * 64 <<
" values, "
98 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected cppf_th_lut_ to get " << 2 * 6 * 6 * 6 * 3 <<
" values, "
105 ph_patt_corr_ = {0, 0, 5, 5, 5, 5, 2, 2, 2, 2, 0};
107 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected ph_patt_corr_ to get " << 11 <<
" values, "
111 ph_patt_corr_sign_ = {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0};
113 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected ph_patt_corr_sign_ to get " << 11 <<
" values, "
117 ph_zone_offset_ = {39, 57, 76, 39, 58, 76, 41, 60, 79, 95, 114, 132, 95, 114, 133, 98, 116, 135,
118 38, 76, 113, 39, 58, 76, 95, 114, 132, 38, 76, 113, 39, 58, 76, 95, 114, 132,
119 38, 76, 113, 38, 57, 76, 95, 113, 132, 21, 21, 23, 1, 21, 1, 21, 1, 20};
121 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected ph_zone_offset_ to get " << 6 * 9 <<
" values, "
127 ph_init_hard_ = {39, 57, 76, 39, 58, 76, 41, 60, 79, 39, 57, 76, 21, 21, 23, 21, 95, 114, 132, 95,
128 114, 133, 98, 116, 135, 95, 114, 132, 0, 0, 0, 0, 38, 76, 113, 39, 58, 76, 95, 114,
129 132, 1, 21, 0, 0, 0, 0, 0, 38, 76, 113, 39, 58, 76, 95, 114, 132, 1, 21, 0,
130 0, 0, 0, 0, 38, 76, 113, 38, 57, 76, 95, 113, 132, 1, 20, 0, 0, 0, 0, 0};
132 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected ph_init_hard_ to get " << 5 * 16 <<
" values, "
141 const uint32_t
index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
147 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
148 <<
", fw_sector: " << fw_sector <<
", pc_lut_id: " << pc_lut_id;
154 const uint32_t
index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
160 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
161 <<
", fw_sector: " << fw_sector <<
", pc_lut_id: " << pc_lut_id;
167 const uint32_t
index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
173 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
174 <<
", fw_sector: " << fw_sector <<
", pc_lut_id: " << pc_lut_id;
180 const uint32_t
index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
186 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
187 <<
", fw_sector: " << fw_sector <<
", pc_lut_id: " << pc_lut_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 const uint32_t
index = ((fw_endcap * 6 + fw_sector) * 61 + pc_lut_id2) * 128 + pc_wire_id;
208 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
209 <<
", fw_sector: " << fw_sector <<
", pc_lut_id: " << pc_lut_id
210 <<
", pc_wire_id: " << pc_wire_id;
216 int pc_lut_id2 = pc_lut_id;
219 if ((9 <= pc_lut_id2 && pc_lut_id2 < 12) || (25 <= pc_lut_id2 && pc_lut_id2 < 28))
222 if (pc_lut_id2 == 15)
225 if (pc_lut_id2 <= 3) {
227 }
else if (pc_lut_id2 == 12) {
229 }
else if (16 <= pc_lut_id2 && pc_lut_id2 < 19) {
232 edm::LogError(
"L1T") <<
"get_th_corr_lut(): out of range pc_lut_id: " << pc_lut_id;
235 const uint32_t
index = ((fw_endcap * 6 + fw_sector) * 7 + pc_lut_id2) * 128 + pc_wire_strip_id;
241 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. fw_endcap: " << fw_endcap
242 <<
", fw_sector: " << fw_sector <<
", pc_lut_id: " << pc_lut_id
243 <<
", pc_wire_strip_id: " << pc_wire_strip_id;
273 const uint32_t
index = pc_station * 9 + pc_chamber;
279 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. pc_station: " << pc_station
280 <<
", pc_chamber: " << pc_chamber;
286 const uint32_t
index = fw_station * 16 + fw_cscid;
292 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. fw_station: " << fw_station
293 <<
", fw_cscid: " << fw_cscid;
299 int rpc_region,
int rpc_sector,
int rpc_station,
int rpc_ring,
int rpc_subsector,
int rpc_roll)
const {
300 uint32_t iendcap = (rpc_region == -1) ? 1 : 0;
301 uint32_t isector = (rpc_sector - 1);
302 uint32_t istationring = (rpc_station >= 3) ? ((rpc_station - 3) * 2 + (rpc_ring - 2) + 2) : (rpc_station - 1);
303 uint32_t isubsector = (rpc_subsector - 1);
304 uint32_t iroll = (rpc_roll - 1);
305 return ((((iendcap * 6 + isector) * 6 + istationring) * 6 + isubsector) * 3 + iroll);
315 bool is_neighbor)
const {
316 const uint32_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
317 const uint32_t ph_index = (th_index * 64) + (halfstrip - 1);
323 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. rpc_region: " << rpc_region
324 <<
", rpc_sector: " << rpc_sector <<
", rpc_station: " << rpc_station
325 <<
", rpc_ring: " << rpc_ring <<
", rpc_subsector: " << rpc_subsector
326 <<
", rpc_roll: " << rpc_roll <<
", halfstrip: " << halfstrip
327 <<
", is_neighbor: " << is_neighbor;
330 if (!is_neighbor && rpc_subsector == 2)
336 int rpc_region,
int rpc_sector,
int rpc_station,
int rpc_ring,
int rpc_subsector,
int rpc_roll)
const {
337 const uint32_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
343 edm::LogError(
"L1T") <<
"Could not retrieve entry from LUT. rpc_region: " << rpc_region
344 <<
", rpc_sector: " << rpc_sector <<
", rpc_station: " << rpc_station
345 <<
", rpc_ring: " << rpc_ring <<
", rpc_subsector: " << rpc_subsector
346 <<
", rpc_roll: " << rpc_roll;
366 std::vector<uint32_t>&
vec1,
367 std::vector<uint32_t>&
vec2,
369 auto get_rpc_region = [](uint32_t
id) {
return (static_cast<int>((
id >> 0) & 0X3) + (-1)); };
370 auto get_rpc_sector = [](uint32_t
id) {
return (static_cast<int>((
id >> 7) & 0XF) + (1)); };
371 auto get_rpc_ring = [](uint32_t
id) {
return (static_cast<int>((
id >> 2) & 0X7) + (1)); };
372 auto get_rpc_station = [](uint32_t
id) {
return (static_cast<int>((
id >> 5) & 0X3) + (1)); };
373 auto get_rpc_subsector = [](uint32_t
id) {
return (static_cast<int>((
id >> 12) & 0X7) + (1)); };
374 auto get_rpc_roll = [](uint32_t
id) {
return (static_cast<int>((
id >> 15) & 0X7) + (0)); };
376 std::vector<std::string> cppf_filenames = {
377 "angleScale_RPC_CPPFp1.txt",
378 "angleScale_RPC_CPPFp2.txt",
379 "angleScale_RPC_CPPFp3.txt",
380 "angleScale_RPC_CPPFp4.txt",
381 "angleScale_RPC_CPPFn1.txt",
382 "angleScale_RPC_CPPFn2.txt",
383 "angleScale_RPC_CPPFn3.txt",
384 "angleScale_RPC_CPPFn4.txt",
389 vec1.resize(2 * 6 * 6 * 6 * 3 * 64, 0);
390 vec2.resize(2 * 6 * 6 * 6 * 3, 0);
392 for (
size_t i = 0;
i < cppf_filenames.size(); ++
i) {
398 int buf1, buf2, buf3, buf4, buf5, buf6;
400 int buf1_prev = 0, buf2_prev = 0, halfstrip_prev = 0;
406 if ((line_num % 192) == 191)
411 if ((line_num % 2) == 1) {
416 if (
local && (buf1 == 0 || buf2 == 0)) {
417 throw cms::Exception(
"L1TMuonEndCap") <<
"Expected non-0 values, got buf1 = " << buf1 <<
", buf2 = " << buf2;
419 if (!
local && (buf1_prev == 0 || buf2_prev == 0)) {
421 <<
"Expected non-0 values, got buf1_prev = " << buf1_prev <<
", buf2_prev = " << buf2_prev;
424 uint32_t
id = (
local ? buf1 : buf1_prev);
425 int32_t rpc_region = get_rpc_region(
id);
426 int32_t rpc_sector = get_rpc_sector(
id);
427 int32_t rpc_station = get_rpc_station(
id);
428 int32_t rpc_ring = get_rpc_ring(
id);
429 int32_t rpc_subsector = get_rpc_subsector(
id);
430 int32_t rpc_roll = get_rpc_roll(
id);
433 if (buf2_prev * 2 > halfstrip_prev + 8 ||
434 buf2_prev * 2 < halfstrip_prev - 8) {
441 dStrip = (buf2_prev * 2 == halfstrip_prev ? 1 : 0);
443 dStrip = (buf2_prev * 2 == halfstrip_prev + 2 ? 1 : 0);
444 if (buf2_prev * 2 < halfstrip_prev - 8 && buf2_prev == 1)
452 halfstrip_prev = halfstrip;
457 const uint32_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
458 const uint32_t ph_index = (th_index * 64) + (halfstrip - 1);
463 vec1.at(ph_index) = ph;
465 vec2.at(th_index) = th;
468 if (!
local && (line_num % 192) == 191)
469 vec1.at(ph_index + 1) = ph;