CMS 3D CMS Logo

HFRingPacker.cc
Go to the documentation of this file.
3 
4 #include "CaloTokens.h"
5 #include "HFRingPacker.h"
6 
7 namespace l1t {
8  namespace stage1 {
9  Blocks
11  {
13  event.getByToken(static_cast<const CaloTokens*>(toks)->getEtSumToken(), etSums);
14 
15  edm::Handle<CaloSpareBxCollection> calosparesHFBitCounts;
16  event.getByToken(static_cast<const CaloTokens*>(toks)->getCaloSpareHFBitCountsToken(), calosparesHFBitCounts);
17 
18  edm::Handle<CaloSpareBxCollection> calosparesHFRingSums;
19  event.getByToken(static_cast<const CaloTokens*>(toks)->getCaloSpareHFRingSumsToken(), calosparesHFRingSums);
20 
21  std::vector<uint32_t> load;
22 
23  for (int i = etSums->getFirstBX(); i <= etSums->getLastBX(); ++i) {
24  int n = 0;
25 
26  int hfbitcount=0;
27  int hfringsum=0;
28  int htmissphi=0;
29  int htmiss=0;
30 
31  int flaghtmiss=0;
32 
33  for (auto j = etSums->begin(i); j != etSums->end(i) && n < 4; ++j, ++n) {
34  if (j->getType()==l1t::EtSum::kMissingHt){
35 
36  flaghtmiss=j->hwQual() & 0x1;
37  htmiss=std::min(j->hwPt(),0x7F);
38  htmissphi=std::min(j->hwPhi(),0x1F);
39  }
40  }
41 
42  n=0;
43 
44  for (auto j = calosparesHFBitCounts->begin(i); j != calosparesHFBitCounts->end(i) && n < 2; ++j, ++n) {
45  hfbitcount=std::min(j->hwPt(),0xFFF);
46  }
47 
48  n=0;
49 
50  for (auto j = calosparesHFRingSums->begin(i); j != calosparesHFRingSums->end(i) && n < 2; ++j, ++n) {
51  hfringsum=std::min(j->hwPt(),0xFFF);
52  }
53 
54  uint16_t object[4]={0,0,0,0};
55 
56  object[0]=hfbitcount|((hfringsum & 0x7) << 12);
57  object[1]=htmissphi|((htmiss & 0x7F) << 5 ) |(flaghtmiss<<12)|(0x1 << 14);
58  object[2]=((hfringsum>>3) & 0x1FF) |(0x1)<<10 | (0x1)<<12 | (0x1)<<14;
59  object[3]= 0x1 | (0x1 << 2) | (0x1 << 4) | (0x1 << 6) |(0x1 << 8) | (0x1 << 10) | (0x1 << 12) | (0x1 << 14);
60 
61  uint32_t word0=(object[0] & 0xFFFF) | ((object[1] & 0xFFFF) << 16);
62  uint32_t word1=(object[2] & 0xFFFF) | ((object[3] & 0xFFFF) << 16);
63 
64  word0 |= (1 << 31) | (1 << 15);
65  word1 |= ((i == 0) << 31) | ((i == 0) << 15);
66 
67  load.push_back(word0);
68  load.push_back(word1);
69  }
70 
71  return {Block(7, load)};
72  }
73  }
74 }
75 
delete x;
Definition: CaloConfig.h:22
std::vector< Block > Blocks
Definition: Block.h:72
T min(T a, T b)
Definition: MathUtil.h:58
Blocks pack(const edm::Event &, const PackerTokens *) override
Definition: HFRingPacker.cc:10
#define DEFINE_L1T_PACKER(type)
Definition: PackerFactory.h:22
def load(fileName)
Definition: svgfig.py:547
Definition: event.py:1