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;
uint32_t get_ph_init_hard(int fw_station, int fw_cscid) const
uint32_t get_ph_patt_corr_sign(int pattern) 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_th_lut(int fw_endcap, int fw_sector, int pc_lut_id, int pc_wire_id) const
std::vector< uint32_t > ph_zone_offset_
std::vector< uint32_t > cppf_ph_lut_
void read(bool pc_lut_data, int pc_lut_version)
std::vector< uint32_t > th_corr_lut_neighbor_
std::vector< uint32_t > cppf_th_lut_
Log< level::Error, false > LogError
std::vector< uint32_t > th_disp_neighbor_
uint32_t get_ph_patt_corr(int pattern) const
std::vector< uint32_t > ph_patt_corr_
std::vector< double > vec1
std::vector< uint32_t > ph_init_hard_
uint32_t get_ph_zone_offset(int pc_station, int pc_chamber) const
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_patt_corr_sign_
Log< level::Info, false > LogInfo
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
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_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
uint32_t get_ph_disp(int fw_endcap, int fw_sector, int pc_lut_id) const
uint32_t get_ph_init(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > ph_disp_neighbor_
uint32_t get_th_init(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > ph_init_neighbor_
void read_file(const std::string &filename, std::vector< uint32_t > &vec)
uint32_t get_th_disp(int fw_endcap, int fw_sector, int pc_lut_id) const
std::vector< uint32_t > th_lut_neighbor_