15 int fw_to_gt_phi_map[] = {4, 3, 2, 1, 0, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5};
16 int gt_to_fw_phi_map[] = {4, 3, 2, 1, 0, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5};
21 return( ((pt & 0x3f)) + ((eta & 0xf) << 6) + ((phi & 0x1f) << 10));
26 return( 0x8000 + ((pt & 0x3f)) + ((eta & 0xf) << 6) + ((phi & 0x1f) << 10));
31 return( 0x8000 + ((pt & 0x3f) << 9) + ((eta & 0xf)) + ((phi & 0x1f) << 4));
35 void print2DVector(std::vector<std::vector<l1t::L1Candidate> > myVector){
36 int nrows = myVector.size();
37 int ncols = myVector[0].size();
39 std::cout <<
"rows: " << nrows << std::endl;
40 std::cout <<
"cols: " << ncols << std::endl;
42 for(
int r=0;
r<nrows;
r++){
43 for(
int c=0;
c<ncols;
c++){
44 std::cout << std::setw(5) << myVector[
r][
c].hwPt() <<
' ';
50 std::vector<l1t::L1Candidate>
sort_array(std::vector<l1t::L1Candidate> inputArray){
51 std::vector<l1t::L1Candidate> outputArray(inputArray.size());
52 for(
unsigned int i=0;
i<inputArray.size();
i++){
54 for(
unsigned int j=0;
j<inputArray.size();
j++){
55 if( (inputArray[
i].hwPt() > inputArray[
j].hwPt()) || ( (inputArray[
i].hwPt() == inputArray[
j].hwPt()) &&
i<
j) ) rank++;
57 outputArray[outputArray.size()-1-rank] = inputArray[
i];
62 std::vector<std::vector<l1t::L1Candidate> >
presort(std::vector<std::vector<l1t::L1Candidate> > energies,
int rows,
int cols){
64 int row_block_length = energies.size() / cols;
65 if(energies.size() % cols != 0) row_block_length++;
72 std::vector<std::vector<l1t::L1Candidate> > sorted_energies (rows, std::vector<l1t::L1Candidate>(cols, dummyJet));
75 unsigned int row=0,
col=0;
76 std::vector<l1t::L1Candidate> energy_feeder (cols, dummyJet);
77 std::vector<l1t::L1Candidate> energy_result (cols, dummyJet);
79 for(
int c=0;
c<cols;
c++){
81 row = (
r % row_block_length)*cols+
c;
83 if(row < energies.size()){
84 energy_feeder[
c] = energies[row][
col];
87 energy_feeder[
c] = dummyJet;
94 sorted_energies[
r] = energy_result;
96 if(
r % row_block_length == row_block_length - 1)
col++;
101 return sorted_energies;
104 std::vector<std::vector<l1t::L1Candidate> >
extract_sub_jet_energy_position_matrix(std::vector<std::vector<l1t::L1Candidate> > input_matrix,
unsigned int row_i,
unsigned int row_f,
unsigned int col_i,
unsigned int col_f){
105 std::vector<std::vector<l1t::L1Candidate> > output_matrix(row_f-row_i+1,std::vector<l1t::L1Candidate>(col_f-col_i+1));
111 for(
unsigned int i=0;
i<row_f-row_i+1;
i++){
112 for(
unsigned int j=0;
j<col_f-col_i+1;
j++){
113 if(row_i+
i > input_matrix.size()-1) output_matrix[
i][
j] = dummyJet;
114 else output_matrix[
i][
j] = input_matrix[row_i+
i][col_i+
j];
117 return output_matrix;
120 std::vector<std::vector<l1t::L1Candidate> >
sort_matrix_rows(std::vector<std::vector<l1t::L1Candidate> > input_matrix){
121 std::vector<std::vector<l1t::L1Candidate> > output_matrix( input_matrix.size(), std::vector<l1t::L1Candidate> (input_matrix[0].size()));
123 for(
unsigned int i=0;
i<input_matrix.size();
i++){
125 for (
unsigned int j=0;
j<input_matrix.size();
j++){
126 if( (input_matrix[
i][0].hwPt() > input_matrix[
j][0].hwPt()) || ((input_matrix[
i][0].hwPt() == input_matrix[
j][0].hwPt()) &&
i<
j)) rank++;
128 output_matrix[input_matrix.size()-1-rank] = input_matrix[
i];
131 return output_matrix;
134 std::vector<std::vector<l1t::L1Candidate> >
sort_by_row_in_groups(std::vector<std::vector<l1t::L1Candidate> > input_matrix,
int group_size){
135 int n_groups = input_matrix.size()/group_size + (1 - input_matrix.size()/group_size*group_size/input_matrix.size());
137 std::vector<std::vector<l1t::L1Candidate> > output_matrix(input_matrix.size()
138 +(group_size*(1 - ((input_matrix.size()/group_size)*group_size)/input_matrix.size()))
139 -(input_matrix.size() % group_size), std::vector<l1t::L1Candidate> (input_matrix[0].
size()));
141 for(
int g=0;
g<n_groups;
g++){
145 for(
unsigned int i=0;
i<small_output_matrix.size();
i++){
146 output_matrix[
g*group_size+
i]=small_output_matrix[
i];
151 return output_matrix;
155 std::vector<l1t::L1Candidate> output_array (n_keep*(n_keep+1)/2);
156 unsigned int max_row = n_keep-1;
157 unsigned int max_col = n_keep-1;
160 if(input_matrix.size() < n_keep) max_row = input_matrix.size()-1;
161 if(input_matrix[0].
size() < n_keep) max_col = input_matrix[0].size()-1;
163 unsigned int array_position = 0;
164 for(
unsigned int i=0;
i<=max_row;
i++){
165 for(
unsigned int j=0;
j<=max_col-
i;
j++){
167 output_array[array_position] = input_matrix[
i][
j];
178 for(
unsigned int k=array_position;
k<output_array.size();
k++){
179 output_array[
k]=dummyJet;
186 std::vector<std::vector<l1t::L1Candidate> >
super_sort_matrix_rows(std::vector<std::vector<l1t::L1Candidate> > input_matrix,
unsigned int group_size,
unsigned int n_keep){
187 unsigned int n_groups = input_matrix.size()/group_size + (1 - input_matrix.size()/group_size*group_size/input_matrix.size());
188 std::vector<std::vector<l1t::L1Candidate> > output_matrix(n_groups, std::vector<l1t::L1Candidate>(n_keep));
190 for(
unsigned int g=0;
g<n_groups;
g++){
193 std::vector<l1t::L1Candidate> unsorted_array_without_largest (unsorted_array.size()-1);
194 for(
unsigned int i=0;
i<unsorted_array.size()-1;
i++){
195 unsorted_array_without_largest[
i] = unsorted_array[1+
i];
197 std::vector<l1t::L1Candidate> sorted_array_without_largest =
sort_array(unsorted_array_without_largest);
199 std::vector<l1t::L1Candidate> sorted_array (n_keep);
200 sorted_array[0] = unsorted_array[0];
201 for(
unsigned int i=0;
i<n_keep-1;
i++){
202 sorted_array[1+
i]=sorted_array_without_largest[
i];
205 output_matrix[
g] = sorted_array;
209 return output_matrix;
212 std::vector<std::vector<l1t::L1Candidate> >
presort_egamma(std::vector<l1t::L1Candidate> input_egamma,
int rows,
int cols){
214 int row_block_length = input_egamma.size() / cols;
215 if(input_egamma.size() % cols != 0) row_block_length++;
223 std::vector<std::vector<l1t::L1Candidate> > sorted_energies (rows, std::vector<l1t::L1Candidate>(cols, dummyJet));
226 unsigned int row=0,
col=0;
227 std::vector<l1t::L1Candidate> energy_feeder (cols, dummyJet);
228 std::vector<l1t::L1Candidate> energy_result (cols, dummyJet);
230 for(
int c=0;
c<cols;
c++){
232 row = (
r % row_block_length)*cols+
c;
235 if(row < input_egamma.size()){
236 energy_feeder[
c] = input_egamma[row];
239 energy_feeder[
c] = dummyJet;
246 sorted_energies[
r] = energy_result;
248 if(
r % row_block_length == row_block_length - 1)
col++;
253 return sorted_energies;
259 std::vector<l1t::Jet> *
output){
261 const int CENTRAL_ETA_SLICES = 14;
262 const int N_PHI_GROUPS = 5;
263 const int N_PRESORTED_ROWS_CENTRAL = CENTRAL_ETA_SLICES*N_PHI_GROUPS;
264 const int PRESORT_DEPTH = 4;
265 const int N_KEEP_CENTRAL = 4;
266 const int N_ETA_GROUP_SIZE_CENTRAL = 4;
267 const int N_ETA_GROUPS_CENTRAL = 4;
269 const int HFM_ETA_SLICES = 4;
270 const int HFP_ETA_SLICES = 4;
271 const int N_PRESORTED_ROWS_HFM = HFM_ETA_SLICES*N_PHI_GROUPS;
272 const int N_PRESORTED_ROWS_HFP = HFP_ETA_SLICES*N_PHI_GROUPS;
273 const int N_KEEP_FORWARD = 4;
275 const int cen_nrows = 18;
276 const int cen_ncols = 14;
277 const int hfm_nrows = 18, hfp_nrows = 18;
278 const int hfm_ncols = 4, hfp_ncols = 4;
280 std::vector<std::vector<l1t::L1Candidate> > cen_input_energy (cen_nrows, std::vector<l1t::L1Candidate>(cen_ncols));
281 std::vector<std::vector<l1t::L1Candidate> > hfm_input_energy (hfm_nrows, std::vector<l1t::L1Candidate>(hfm_ncols));
282 std::vector<std::vector<l1t::L1Candidate> > hfp_input_energy (hfp_nrows, std::vector<l1t::L1Candidate>(hfp_ncols));
284 for (std::vector<l1t::Jet>::const_iterator injet = input->begin();
285 injet != input->end(); ++injet){
286 if(injet->hwEta() >= 4 && injet->hwEta() <= 17 )
289 unsigned int mycol = injet->hwEta()-4;
290 cen_input_energy[myrow][mycol] = *injet;
292 else if(injet->hwEta() < 4)
295 unsigned int mycol = injet->hwEta();
296 hfm_input_energy[myrow][mycol] = *injet;
298 else if(injet->hwEta() > 17)
301 unsigned int mycol = injet->hwEta()-18;
302 hfp_input_energy[myrow][mycol] = *injet;
305 edm::LogError(
"HardwareJetSort") <<
"Region out of bounds: " << injet->hwEta();
308 for(
int i = 0;
i < cen_nrows; ++
i)
309 for(
int j = 0;
j < cen_ncols; ++
j)
311 if(cen_input_energy[
i][
j].hwPt() == 0)
314 cen_input_energy[
i][
j].setHwEta(4+
j);
318 for(
int i = 0;
i < hfm_nrows; ++
i)
319 for(
int j = 0;
j < hfm_ncols; ++
j)
321 if(hfm_input_energy[
i][
j].hwPt() == 0)
324 hfm_input_energy[
i][
j].setHwEta(
j);
325 hfm_input_energy[
i][
j].setHwQual(2);
329 for(
int i = 0;
i < hfp_nrows; ++
i)
330 for(
int j = 0;
j < hfp_ncols; ++
j)
332 if(hfp_input_energy[
i][
j].hwPt() == 0)
335 hfp_input_energy[
i][
j].setHwEta(
j+18);
336 hfp_input_energy[
i][
j].setHwQual(2);
343 std::vector<std::vector<l1t::L1Candidate> > presorted_energies_matrix_sig =
presort(cen_input_energy, N_PRESORTED_ROWS_CENTRAL, PRESORT_DEPTH);
344 std::vector<std::vector<l1t::L1Candidate> > hfm_presorted_energies_matrix_sig =
presort(hfm_input_energy, N_PRESORTED_ROWS_HFM, PRESORT_DEPTH);
345 std::vector<std::vector<l1t::L1Candidate> > hfp_presorted_energies_matrix_sig =
presort(hfp_input_energy, N_PRESORTED_ROWS_HFP, PRESORT_DEPTH);
348 std::vector<std::vector<l1t::L1Candidate> > row_presorted_energies_matrix_sig =
sort_by_row_in_groups(presorted_energies_matrix_sig, N_PHI_GROUPS);
349 std::vector<std::vector<l1t::L1Candidate> > hfm_row_presorted_energies_matrix_sig =
sort_by_row_in_groups(hfm_presorted_energies_matrix_sig, N_PHI_GROUPS);
350 std::vector<std::vector<l1t::L1Candidate> > hfp_row_presorted_energies_matrix_sig =
sort_by_row_in_groups(hfp_presorted_energies_matrix_sig, N_PHI_GROUPS);
353 std::vector<std::vector<l1t::L1Candidate> > sorted_eta_slices_energies_matrix_sig =
super_sort_matrix_rows(row_presorted_energies_matrix_sig, N_PHI_GROUPS, N_KEEP_CENTRAL);
354 std::vector<std::vector<l1t::L1Candidate> > hfm_sorted_eta_slices_energies_matrix_sig =
super_sort_matrix_rows(hfm_row_presorted_energies_matrix_sig, N_PHI_GROUPS, N_KEEP_FORWARD);
355 std::vector<std::vector<l1t::L1Candidate> > hfp_sorted_eta_slices_energies_matrix_sig =
super_sort_matrix_rows(hfp_row_presorted_energies_matrix_sig, N_PHI_GROUPS, N_KEEP_FORWARD);
358 std::vector<std::vector<l1t::L1Candidate> > row_presorted_eta_slices_energies_matrix_sig =
sort_by_row_in_groups(sorted_eta_slices_energies_matrix_sig, N_ETA_GROUP_SIZE_CENTRAL);
359 std::vector<std::vector<l1t::L1Candidate> > hfm_row_presorted_eta_slices_energies_matrix_sig =
sort_by_row_in_groups(hfm_sorted_eta_slices_energies_matrix_sig, HFM_ETA_SLICES);
360 std::vector<std::vector<l1t::L1Candidate> > hfp_row_presorted_eta_slices_energies_matrix_sig =
sort_by_row_in_groups(hfp_sorted_eta_slices_energies_matrix_sig, HFP_ETA_SLICES);
363 std::vector<std::vector<l1t::L1Candidate> > sorted_eta_groups_energies_matrix_sig =
super_sort_matrix_rows(row_presorted_eta_slices_energies_matrix_sig, N_ETA_GROUP_SIZE_CENTRAL, N_KEEP_CENTRAL);
364 std::vector<std::vector<l1t::L1Candidate> > hfm_sorted_final_energies_matrix_sig =
super_sort_matrix_rows(hfm_row_presorted_eta_slices_energies_matrix_sig, HFM_ETA_SLICES, N_KEEP_FORWARD);
365 std::vector<std::vector<l1t::L1Candidate> > hfp_sorted_final_energies_matrix_sig =
super_sort_matrix_rows(hfp_row_presorted_eta_slices_energies_matrix_sig, HFP_ETA_SLICES, N_KEEP_FORWARD);
368 std::vector<std::vector<l1t::L1Candidate> > row_presorted_eta_groups_energies_matrix_sig =
sort_by_row_in_groups(sorted_eta_groups_energies_matrix_sig, N_ETA_GROUPS_CENTRAL);
369 std::vector<std::vector<l1t::L1Candidate> > hf_merged_plus_minus_forward_energies_matrix_sig(2, std::vector<l1t::L1Candidate>(N_KEEP_FORWARD));
370 hf_merged_plus_minus_forward_energies_matrix_sig[0] = hfm_sorted_final_energies_matrix_sig[0];
371 hf_merged_plus_minus_forward_energies_matrix_sig[1] = hfp_sorted_final_energies_matrix_sig[0];
372 std::vector<std::vector<l1t::L1Candidate> > hf_row_presorted_merged_plus_minus_forward_energies_matrix_sig =
sort_by_row_in_groups(hf_merged_plus_minus_forward_energies_matrix_sig, 2);
375 std::vector<std::vector<l1t::L1Candidate> > sorted_final_energies_matrix_sig =
super_sort_matrix_rows(row_presorted_eta_groups_energies_matrix_sig, N_ETA_GROUPS_CENTRAL, N_KEEP_CENTRAL);
376 std::vector<std::vector<l1t::L1Candidate> > hf_sorted_final_merged_plus_minus_forward_energies_matrix_sig =
super_sort_matrix_rows(hf_row_presorted_merged_plus_minus_forward_energies_matrix_sig, 2, N_KEEP_FORWARD);
378 for(
unsigned int i = 0;
i < 4; ++
i)
380 l1t::Jet *intjet =
static_cast<l1t::Jet *
>( &sorted_final_energies_matrix_sig[0][
i] );
381 output->push_back(*intjet);
383 for(
unsigned int i = 0;
i < 4; ++
i)
385 l1t::Jet *intjet =
static_cast<l1t::Jet *
>( &hf_sorted_final_merged_plus_minus_forward_energies_matrix_sig[0][
i] );
387 output->push_back(*intjet);
393 std::vector<l1t::EGamma> *
output)
396 const int FIBER_PAIRS = 18;
397 const int N_INPUT_EGAMMAS = 4;
398 const int N_PRESORTED_ROWS_EGAMMA = 36;
399 const int PRESORT_DEPTH = 4;
400 const int N_EGAMMA_FIRST_GROUP_SIZE = 6;
401 const int N_EGAMMA_SECOND_GROUP_SIZE = 6;
402 const int N_EGAMMA_FIRST_GROUPS = 6;
403 const int N_KEEP_EGAMMA = 4;
408 vector<l1t::L1Candidate> iso_egamma_array_p, iso_egamma_array_m;
409 vector<l1t::L1Candidate> noniso_egamma_array_p, noniso_egamma_array_m;
411 for(
int k=0;
k<2*N_INPUT_EGAMMAS*FIBER_PAIRS;
k++){
417 if(
k<N_INPUT_EGAMMAS*FIBER_PAIRS){
418 iso_egamma_array_p.push_back(dummyJet);
419 noniso_egamma_array_p.push_back(dummyJet);
422 iso_egamma_array_m.push_back(dummyJet);
423 noniso_egamma_array_m.push_back(dummyJet);
427 for (std::vector<l1t::EGamma>::const_iterator ineg = input->begin();
428 ineg != input->end(); ++ineg){
430 int index = ineg->hwQual();
431 bool iso = ineg->hwIso();
432 bool minus = (ineg->hwEta() < 11);
438 iso_egamma_array_m[8*fiberNum+
index] = *ineg;
439 else if (iso && !minus)
440 iso_egamma_array_p[8*fiberNum+
index] = *ineg;
441 else if (!iso && minus)
442 noniso_egamma_array_m[8*fiberNum+
index] = *ineg;
443 else if (!iso && !minus)
444 noniso_egamma_array_p[8*fiberNum+
index] = *ineg;
466 std::vector<std::vector<l1t::L1Candidate> > presorted_iso_matrix_sig_p =
presort_egamma(iso_egamma_array_p, N_PRESORTED_ROWS_EGAMMA/2, PRESORT_DEPTH);
467 std::vector<std::vector<l1t::L1Candidate> > presorted_iso_matrix_sig_m =
presort_egamma(iso_egamma_array_m, N_PRESORTED_ROWS_EGAMMA/2, PRESORT_DEPTH);
468 std::vector<std::vector<l1t::L1Candidate> > presorted_non_iso_matrix_sig_p =
presort_egamma(noniso_egamma_array_p, N_PRESORTED_ROWS_EGAMMA/2, PRESORT_DEPTH);
469 std::vector<std::vector<l1t::L1Candidate> > presorted_non_iso_matrix_sig_m =
presort_egamma(noniso_egamma_array_m, N_PRESORTED_ROWS_EGAMMA/2, PRESORT_DEPTH);
472 std::vector<std::vector<l1t::L1Candidate> > iso_row_presorted_energies_matrix_sig_p =
sort_by_row_in_groups(presorted_iso_matrix_sig_p, N_EGAMMA_FIRST_GROUP_SIZE);
473 std::vector<std::vector<l1t::L1Candidate> > iso_row_presorted_energies_matrix_sig_m =
sort_by_row_in_groups(presorted_iso_matrix_sig_m, N_EGAMMA_FIRST_GROUP_SIZE);
474 std::vector<std::vector<l1t::L1Candidate> > non_iso_row_presorted_energies_matrix_sig_p =
sort_by_row_in_groups(presorted_non_iso_matrix_sig_p, N_EGAMMA_FIRST_GROUP_SIZE);
475 std::vector<std::vector<l1t::L1Candidate> > non_iso_row_presorted_energies_matrix_sig_m =
sort_by_row_in_groups(presorted_non_iso_matrix_sig_m, N_EGAMMA_FIRST_GROUP_SIZE);
478 std::vector<std::vector<l1t::L1Candidate> > iso_super_sorted_energies_matrix_sig_p =
super_sort_matrix_rows(iso_row_presorted_energies_matrix_sig_p, N_EGAMMA_FIRST_GROUP_SIZE, N_KEEP_EGAMMA);
479 std::vector<std::vector<l1t::L1Candidate> > iso_super_sorted_energies_matrix_sig_m =
super_sort_matrix_rows(iso_row_presorted_energies_matrix_sig_m, N_EGAMMA_FIRST_GROUP_SIZE, N_KEEP_EGAMMA);
480 std::vector<std::vector<l1t::L1Candidate> > non_iso_super_sorted_energies_matrix_sig_p =
super_sort_matrix_rows(non_iso_row_presorted_energies_matrix_sig_p, N_EGAMMA_FIRST_GROUP_SIZE, N_KEEP_EGAMMA);
481 std::vector<std::vector<l1t::L1Candidate> > non_iso_super_sorted_energies_matrix_sig_m =
super_sort_matrix_rows(non_iso_row_presorted_energies_matrix_sig_m, N_EGAMMA_FIRST_GROUP_SIZE, N_KEEP_EGAMMA);
483 std::vector<std::vector<l1t::L1Candidate> > iso_super_sorted_energies_matrix_sig (N_EGAMMA_FIRST_GROUPS, std::vector<l1t::L1Candidate>(N_KEEP_EGAMMA) );
484 std::vector<std::vector<l1t::L1Candidate> > non_iso_super_sorted_energies_matrix_sig (N_EGAMMA_FIRST_GROUPS, std::vector<l1t::L1Candidate>(N_KEEP_EGAMMA) );
485 for(
int r=0;
r<N_EGAMMA_FIRST_GROUPS/2;
r++){
486 iso_super_sorted_energies_matrix_sig[
r] = iso_super_sorted_energies_matrix_sig_m[
r];
487 iso_super_sorted_energies_matrix_sig[
r+N_EGAMMA_FIRST_GROUPS/2] = iso_super_sorted_energies_matrix_sig_p[
r];
488 non_iso_super_sorted_energies_matrix_sig[
r] = non_iso_super_sorted_energies_matrix_sig_m[
r];
489 non_iso_super_sorted_energies_matrix_sig[
r+N_EGAMMA_FIRST_GROUPS/2] = non_iso_super_sorted_energies_matrix_sig_p[
r];
493 std::vector<std::vector<l1t::L1Candidate> > iso_stage2_row_sorted_matrix_sig =
sort_by_row_in_groups(iso_super_sorted_energies_matrix_sig, N_EGAMMA_SECOND_GROUP_SIZE);
494 std::vector<std::vector<l1t::L1Candidate> > non_iso_stage2_row_sorted_matrix_sig =
sort_by_row_in_groups(non_iso_super_sorted_energies_matrix_sig, N_EGAMMA_SECOND_GROUP_SIZE);
497 std::vector<std::vector<l1t::L1Candidate> > iso_stage2_super_sorted_matrix_sig =
super_sort_matrix_rows(iso_stage2_row_sorted_matrix_sig, N_EGAMMA_SECOND_GROUP_SIZE, N_KEEP_EGAMMA);
498 std::vector<std::vector<l1t::L1Candidate> > non_iso_stage2_super_sorted_matrix_sig =
super_sort_matrix_rows(non_iso_stage2_row_sorted_matrix_sig, N_EGAMMA_SECOND_GROUP_SIZE, N_KEEP_EGAMMA);
501 std::vector<l1t::L1Candidate> sorted_iso_egammas = iso_stage2_super_sorted_matrix_sig[0];
502 std::vector<l1t::L1Candidate> sorted_noniso_egammas = non_iso_stage2_super_sorted_matrix_sig[0];
506 for(
unsigned int i = 0;
i < 4; ++
i)
510 output->push_back(*ineg);
512 for(
unsigned int i = 0;
i < 4; ++
i)
515 output->push_back(*ineg);
520 std::vector<l1t::Tau> *
output){
521 const int CENTRAL_ETA_SLICES = 14;
522 const int N_PHI_GROUPS = 5;
523 const int N_PRESORTED_ROWS_CENTRAL = CENTRAL_ETA_SLICES*N_PHI_GROUPS;
524 const int PRESORT_DEPTH = 4;
525 const int N_KEEP_CENTRAL = 4;
526 const int N_ETA_GROUP_SIZE_CENTRAL = 4;
527 const int N_ETA_GROUPS_CENTRAL = 4;
529 const int cen_nrows = 18;
530 const int cen_ncols = 14;
532 std::vector<std::vector<l1t::L1Candidate> > cen_input_energy (cen_nrows, std::vector<l1t::L1Candidate>(cen_ncols));
534 for (std::vector<l1t::Tau>::const_iterator injet = input->begin();
535 injet != input->end(); ++injet){
536 if(injet->hwEta() >= 4 && injet->hwEta() <= 17 )
539 unsigned int mycol = injet->hwEta()-4;
540 cen_input_energy[myrow][mycol] = *injet;
543 edm::LogError(
"HardwareTauSort") <<
"Region out of bounds: " << injet->hwEta();
546 for(
int i = 0;
i < cen_nrows; ++
i)
547 for(
int j = 0;
j < cen_ncols; ++
j)
549 if(cen_input_energy[
i][
j].hwPt() == 0)
552 cen_input_energy[
i][
j].setHwEta(4+
j);
559 std::vector<std::vector<l1t::L1Candidate> > presorted_energies_matrix_sig =
presort(cen_input_energy, N_PRESORTED_ROWS_CENTRAL, PRESORT_DEPTH);
561 std::vector<std::vector<l1t::L1Candidate> > row_presorted_energies_matrix_sig =
sort_by_row_in_groups(presorted_energies_matrix_sig, N_PHI_GROUPS);
563 std::vector<std::vector<l1t::L1Candidate> > sorted_eta_slices_energies_matrix_sig =
super_sort_matrix_rows(row_presorted_energies_matrix_sig, N_PHI_GROUPS, N_KEEP_CENTRAL);
565 std::vector<std::vector<l1t::L1Candidate> > row_presorted_eta_slices_energies_matrix_sig =
sort_by_row_in_groups(sorted_eta_slices_energies_matrix_sig, N_ETA_GROUP_SIZE_CENTRAL);
567 std::vector<std::vector<l1t::L1Candidate> > sorted_eta_groups_energies_matrix_sig =
super_sort_matrix_rows(row_presorted_eta_slices_energies_matrix_sig, N_ETA_GROUP_SIZE_CENTRAL, N_KEEP_CENTRAL);
569 std::vector<std::vector<l1t::L1Candidate> > row_presorted_eta_groups_energies_matrix_sig =
sort_by_row_in_groups(sorted_eta_groups_energies_matrix_sig, N_ETA_GROUPS_CENTRAL);
571 std::vector<std::vector<l1t::L1Candidate> > sorted_final_energies_matrix_sig =
super_sort_matrix_rows(row_presorted_eta_groups_energies_matrix_sig, N_ETA_GROUPS_CENTRAL, N_KEEP_CENTRAL);
573 for(
unsigned int i = 0;
i < 4; ++
i)
575 l1t::Tau *intjet =
static_cast<l1t::Tau *
>( &sorted_final_energies_matrix_sig[0][
i] );
576 output->push_back(*intjet);
void SortTaus(std::vector< l1t::Tau > *input, std::vector< l1t::Tau > *output)
std::vector< std::vector< l1t::L1Candidate > > sort_matrix_rows(std::vector< std::vector< l1t::L1Candidate > > input_matrix)
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
static std::string const input
void SortJets(std::vector< l1t::Jet > *input, std::vector< l1t::Jet > *output)
unsigned int pack16bitsEgammaSpecial(int pt, int eta, int phi)
void SortEGammas(std::vector< l1t::EGamma > *input, std::vector< l1t::EGamma > *output)
void print2DVector(std::vector< std::vector< l1t::L1Candidate > > myVector)
std::vector< std::vector< l1t::L1Candidate > > extract_sub_jet_energy_position_matrix(std::vector< std::vector< l1t::L1Candidate > > input_matrix, unsigned int row_i, unsigned int row_f, unsigned int col_i, unsigned int col_f)
unsigned int pack15bits(int pt, int eta, int phi)
std::vector< std::vector< l1t::L1Candidate > > presort_egamma(std::vector< l1t::L1Candidate > input_egamma, int rows, int cols)
unsigned int pack16bits(int pt, int eta, int phi)
std::vector< std::vector< l1t::L1Candidate > > super_sort_matrix_rows(std::vector< std::vector< l1t::L1Candidate > > input_matrix, unsigned int group_size, unsigned int n_keep)
std::vector< l1t::L1Candidate > array_from_row_sorted_matrix(std::vector< std::vector< l1t::L1Candidate > > input_matrix, unsigned int n_keep)
std::vector< std::vector< l1t::L1Candidate > > presort(std::vector< std::vector< l1t::L1Candidate > > energies, int rows, int cols)
std::vector< l1t::L1Candidate > sort_array(std::vector< l1t::L1Candidate > inputArray)
std::vector< std::vector< l1t::L1Candidate > > sort_by_row_in_groups(std::vector< std::vector< l1t::L1Candidate > > input_matrix, int group_size)
tuple size
Write out results.