19 edm::LogInfo(
"L1T") <<
"EMTF using pc_lut_ver: " << pc_lut_version <<
", configured for " 20 << (pc_lut_data ?
"data" :
"MC");
23 if (pc_lut_version == 0)
24 coord_lut_dir =
"ph_lut_v1";
25 else if (pc_lut_version == 1)
26 coord_lut_dir =
"ph_lut_v2";
27 else if (pc_lut_version == 2 && pc_lut_data)
28 coord_lut_dir =
"ph_lut_v3_data";
29 else if (pc_lut_version == 2)
30 coord_lut_dir =
"ph_lut_v2";
31 else if (pc_lut_version == -1 && pc_lut_data)
32 coord_lut_dir =
"ph_lut_v3_data";
33 else if (pc_lut_version == -1)
34 coord_lut_dir =
"ph_lut_v2";
37 <<
"Trying to use EMTF pc_lut_version = " << pc_lut_version <<
", does not exist!";
40 std::string coord_lut_path =
"L1Trigger/L1TMuon/data/emtf_luts/" + coord_lut_dir +
"/";
49 std::string cppf_coord_lut_path =
"L1Trigger/L1TMuon/data/cppf/";
50 bool use_local_cppf_files = (pc_lut_version == -1);
51 if (use_local_cppf_files) {
52 cppf_coord_lut_path =
"L1Trigger/L1TMuon/data/cppf_luts/angleScale_v1/";
58 use_local_cppf_files);
61 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected ph_init_neighbor_ to get " << 2 * 6 * 61 <<
" values, " 66 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected ph_disp_neighbor_ to get " << 2 * 6 * 61 <<
" values, " 71 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected th_init_neighbor_ to get " << 2 * 6 * 61 <<
" values, " 76 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected th_disp_neighbor_ to get " << 2 * 6 * 61 <<
" values, " 81 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected th_lut_neighbor_ to get " << 2 * 6 * 61 * 128 <<
" values, " 87 <<
"Expected th_corr_lut_neighbor_ to get " << 2 * 6 * 7 * 128 <<
" values, " 95 <<
"Expected cppf_ph_lut_ to get " << 2 * 6 * 6 * 6 * 3 * 64 <<
" values, " 101 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected cppf_th_lut_ to get " << 2 * 6 * 6 * 6 * 3 <<
" values, " 108 ph_patt_corr_ = {0, 0, 5, 5, 5, 5, 2, 2, 2, 2, 0};
110 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected ph_patt_corr_ to get " << 11 <<
" values, " 114 ph_patt_corr_sign_ = {0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0};
116 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected ph_patt_corr_sign_ to get " << 11 <<
" values, " 120 ph_zone_offset_ = {39, 57, 76, 39, 58, 76, 41, 60, 79, 95, 114, 132, 95, 114, 133, 98, 116, 135,
121 38, 76, 113, 39, 58, 76, 95, 114, 132, 38, 76, 113, 39, 58, 76, 95, 114, 132,
122 38, 76, 113, 38, 57, 76, 95, 113, 132, 21, 21, 23, 1, 21, 1, 21, 1, 20};
124 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected ph_zone_offset_ to get " << 6 * 9 <<
" values, " 130 ph_init_hard_ = {39, 57, 76, 39, 58, 76, 41, 60, 79, 39, 57, 76, 21, 21, 23, 21, 95, 114, 132, 95,
131 114, 133, 98, 116, 135, 95, 114, 132, 0, 0, 0, 0, 38, 76, 113, 39, 58, 76, 95, 114,
132 132, 1, 21, 0, 0, 0, 0, 0, 38, 76, 113, 39, 58, 76, 95, 114, 132, 1, 21, 0,
133 0, 0, 0, 0, 38, 76, 113, 38, 57, 76, 95, 113, 132, 1, 20, 0, 0, 0, 0, 0};
135 throw cms::Exception(
"SectorProcessorLUT") <<
"Expected ph_init_hard_ to get " << 5 * 16 <<
" values, " 144 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
149 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
154 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
159 size_t index = (fw_endcap * 6 + fw_sector) * 61 + pc_lut_id;
164 int pc_lut_id2 = pc_lut_id;
167 if ((9 <= pc_lut_id2 && pc_lut_id2 < 12) || (25 <= pc_lut_id2 && pc_lut_id2 < 28))
170 if (pc_lut_id2 == 15)
173 size_t index = ((fw_endcap * 6 + fw_sector) * 61 + pc_lut_id2) * 128 + pc_wire_id;
178 int pc_lut_id2 = pc_lut_id;
181 if ((9 <= pc_lut_id2 && pc_lut_id2 < 12) || (25 <= pc_lut_id2 && pc_lut_id2 < 28))
184 if (pc_lut_id2 == 15)
187 if (pc_lut_id2 <= 3) {
189 }
else if (pc_lut_id2 == 12) {
191 }
else if (16 <= pc_lut_id2 && pc_lut_id2 < 19) {
194 throw cms::Exception(
"SectorProcessorLUT") <<
"get_th_corr_lut(): out of range pc_lut_id: " << pc_lut_id;
197 size_t index = ((fw_endcap * 6 + fw_sector) * 7 + pc_lut_id2) * 128 + pc_wire_strip_id;
206 size_t index = pc_station * 9 + pc_chamber;
211 size_t index = fw_station * 16 + fw_cscid;
216 int rpc_region,
int rpc_sector,
int rpc_station,
int rpc_ring,
int rpc_subsector,
int rpc_roll)
const {
217 uint32_t iendcap = (rpc_region == -1) ? 1 : 0;
218 uint32_t isector = (rpc_sector - 1);
219 uint32_t istationring = (rpc_station >= 3) ? ((rpc_station - 3) * 2 + (rpc_ring - 2) + 2) : (rpc_station - 1);
220 uint32_t isubsector = (rpc_subsector - 1);
221 uint32_t iroll = (rpc_roll - 1);
222 return ((((iendcap * 6 + isector) * 6 + istationring) * 6 + isubsector) * 3 + iroll);
232 bool is_neighbor)
const {
233 size_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
234 size_t ph_index = (th_index * 64) + (halfstrip - 1);
236 if (!is_neighbor && rpc_subsector == 2)
242 int rpc_region,
int rpc_sector,
int rpc_station,
int rpc_ring,
int rpc_subsector,
int rpc_roll)
const {
243 size_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
255 while (infile >> buf) {
256 buf = (buf == -999) ? 0 : buf;
263 std::vector<uint32_t>&
vec1,
264 std::vector<uint32_t>&
vec2,
266 auto get_rpc_region = [](uint32_t
id) {
return (static_cast<int>((
id >> 0) & 0X3) + (-1)); };
267 auto get_rpc_sector = [](uint32_t
id) {
return (static_cast<int>((
id >> 7) & 0XF) + (1)); };
268 auto get_rpc_ring = [](uint32_t
id) {
return (static_cast<int>((
id >> 2) & 0X7) + (1)); };
269 auto get_rpc_station = [](uint32_t
id) {
return (static_cast<int>((
id >> 5) & 0X3) + (1)); };
270 auto get_rpc_subsector = [](uint32_t
id) {
return (static_cast<int>((
id >> 12) & 0X7) + (1)); };
271 auto get_rpc_roll = [](uint32_t
id) {
return (static_cast<int>((
id >> 15) & 0X7) + (0)); };
273 std::vector<std::string> cppf_filenames = {
274 "angleScale_RPC_CPPFp1.txt",
275 "angleScale_RPC_CPPFp2.txt",
276 "angleScale_RPC_CPPFp3.txt",
277 "angleScale_RPC_CPPFp4.txt",
278 "angleScale_RPC_CPPFn1.txt",
279 "angleScale_RPC_CPPFn2.txt",
280 "angleScale_RPC_CPPFn3.txt",
281 "angleScale_RPC_CPPFn4.txt",
286 vec1.resize(2 * 6 * 6 * 6 * 3 * 64, 0);
287 vec2.resize(2 * 6 * 6 * 6 * 3, 0);
289 for (
size_t i = 0;
i < cppf_filenames.size(); ++
i) {
295 int buf1, buf2, buf3, buf4, buf5, buf6;
297 int buf1_prev = 0, buf2_prev = 0, halfstrip_prev = 0;
301 while ((infile >> buf1) && (infile >> buf2) && (infile >> buf3) && (infile >> buf4) && (infile >> buf5) &&
303 if ((line_num % 192) == 191)
308 if ((line_num % 2) == 1) {
313 if (local && (buf1 == 0 || buf2 == 0)) {
315 <<
"Expected non-0 values, got buf1 = " << buf1 <<
", buf2 = " << buf2;
317 if (!local && (buf1_prev == 0 || buf2_prev == 0)) {
319 <<
"Expected non-0 values, got buf1_prev = " << buf1_prev <<
", buf2_prev = " << buf2_prev;
322 uint32_t
id = (local ? buf1 : buf1_prev);
323 int32_t rpc_region = get_rpc_region(
id);
324 int32_t rpc_sector = get_rpc_sector(
id);
325 int32_t rpc_station = get_rpc_station(
id);
326 int32_t rpc_ring = get_rpc_ring(
id);
327 int32_t rpc_subsector = get_rpc_subsector(
id);
328 int32_t rpc_roll = get_rpc_roll(
id);
331 if (buf2_prev * 2 > halfstrip_prev + 8 ||
332 buf2_prev * 2 < halfstrip_prev - 8) {
339 dStrip = (buf2_prev * 2 == halfstrip_prev ? 1 : 0);
341 dStrip = (buf2_prev * 2 == halfstrip_prev + 2 ? 1 : 0);
342 if (buf2_prev * 2 < halfstrip_prev - 8 && buf2_prev == 1)
350 halfstrip_prev = halfstrip;
355 size_t th_index =
get_cppf_lut_id(rpc_region, rpc_sector, rpc_station, rpc_ring, rpc_subsector, rpc_roll);
356 size_t ph_index = (th_index * 64) + (halfstrip - 1);
361 vec1.at(ph_index) = ph;
363 vec2.at(th_index) = th;
366 if (!local && (line_num % 192) == 191)
367 vec1.at(ph_index + 1) = ph;
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_
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_