CMS 3D CMS Logo

List of all members | Public Member Functions | Private Attributes
l1t::Stage2TowerDecompressAlgorithmFirmwareImp1 Class Reference

#include <Stage2TowerDecompressAlgorithmFirmware.h>

Inheritance diagram for l1t::Stage2TowerDecompressAlgorithmFirmwareImp1:
l1t::Stage2TowerDecompressAlgorithm

Public Member Functions

void processEvent (const std::vector< l1t::CaloTower > &inTowers, std::vector< l1t::CaloTower > &outTowers) override
 
 Stage2TowerDecompressAlgorithmFirmwareImp1 (CaloParamsHelper const *params)
 
 ~Stage2TowerDecompressAlgorithmFirmwareImp1 () override
 
- Public Member Functions inherited from l1t::Stage2TowerDecompressAlgorithm
virtual ~Stage2TowerDecompressAlgorithm ()
 

Private Attributes

CaloParamsHelper const * params_
 

Detailed Description

Definition at line 22 of file Stage2TowerDecompressAlgorithmFirmware.h.

Constructor & Destructor Documentation

l1t::Stage2TowerDecompressAlgorithmFirmwareImp1::Stage2TowerDecompressAlgorithmFirmwareImp1 ( CaloParamsHelper const *  params)

Definition at line 14 of file Stage2TowerDecompressAlgorithmFirmwareImp1.cc.

14  :
15  params_(params)
16 {
17 
18 }
l1t::Stage2TowerDecompressAlgorithmFirmwareImp1::~Stage2TowerDecompressAlgorithmFirmwareImp1 ( )
override

Definition at line 21 of file Stage2TowerDecompressAlgorithmFirmwareImp1.cc.

21  {
22 
23 
24 }

Member Function Documentation

void l1t::Stage2TowerDecompressAlgorithmFirmwareImp1::processEvent ( const std::vector< l1t::CaloTower > &  inTowers,
std::vector< l1t::CaloTower > &  outTowers 
)
overridevirtual

Implements l1t::Stage2TowerDecompressAlgorithm.

Definition at line 27 of file Stage2TowerDecompressAlgorithmFirmwareImp1.cc.

References l1t::CaloParamsHelper::doTowerEncoding(), createfilelist::int, params_, funct::pow(), particleFlowDisplacedVertex_cfi::ratio, l1t::L1Candidate::setHwEta(), l1t::CaloTower::setHwEtEm(), l1t::CaloTower::setHwEtHad(), l1t::CaloTower::setHwEtRatio(), l1t::L1Candidate::setHwPhi(), l1t::L1Candidate::setHwPt(), l1t::L1Candidate::setHwQual(), l1t::CaloParamsHelper::towerMaskE(), and l1t::CaloParamsHelper::towerMaskH().

28  {
29 
30 
31  for ( auto tow = inTowers.begin();
32  tow != inTowers.end();
33  ++tow ) {
34 
35  if (!params_->doTowerEncoding()) {
36 
37  outTowers.push_back( *tow );
38 
39  }
40 
41  else {
42 
43 
44  int sum = tow->hwPt();
45  int ratio = tow->hwEtRatio();
46  int qual = tow->hwQual();
47 
48  int denomCoeff = int ( ( 128./ ( 1. + pow(2,ratio) ) ) + 0.5 );
49  int numCoeff = 128 - denomCoeff;
50 
51  // if ((qual & 0x1)==0) {
52  // switch (ratio) {
53  // case 000 :
54  // numCoeff = 64;
55  // denomCoeff = 64;
56  // break;
57  // case 001 :
58  // numCoeff = 43;
59  // denomCoeff = 85;
60  // break;
61  // case 010 :
62  // numCoeff = 26;
63  // denomCoeff = 102;
64  // break;
65  // case 011 :
66  // numCoeff = 14;
67  // denomCoeff = 114;
68  // break;
69  // case 100 :
70  // numCoeff = 8;
71  // denomCoeff = 120;
72  // break;
73  // case 101 :
74  // numCoeff = 4;
75  // denomCoeff = 124;
76  // break;
77  // case 110 :
78  // numCoeff = 2;
79  // denomCoeff = 126;
80  // break;
81  // case 111 :
82  // numCoeff = 1;
83  // denomCoeff = 127;
84  // break;
85  // }
86  // }
87  // else {
88  // numCoeff = 128;
89  // denomCoeff = 0;
90  // }
91 
92  int em = 0;
93  int had = 0;
94 
95  bool denomZeroFlag = ((qual&0x1) > 0);
96  bool eOverHFlag = ((qual&0x2) > 0);
97 
98  if (denomZeroFlag && !eOverHFlag) had = sum;
99 
100  if (denomZeroFlag && eOverHFlag) em = sum;
101 
102  if (!denomZeroFlag && !eOverHFlag) { // H > E, ratio = log(H/E)
103  em = (denomCoeff * sum) >> 7;
104  had = (numCoeff * sum) >> 7;
105  }
106 
107  if (!denomZeroFlag && eOverHFlag) { // E >= H , so ratio==log(E/H)
108  em = (numCoeff * sum) >> 7;
109  had = (denomCoeff * sum) >> 7;
110  }
111 
112  em &= params_->towerMaskE();
113  had &= params_->towerMaskH();
114 
115  l1t::CaloTower newTow;
116  newTow.setHwEta( tow->hwEta() );
117  newTow.setHwPhi( tow->hwPhi() );
118  newTow.setHwEtEm( em );
119  newTow.setHwEtHad( had );
120 
121  newTow.setHwPt( sum );
122  newTow.setHwEtRatio( ratio );
123  newTow.setHwQual( qual );
124 
125  outTowers.push_back(newTow);
126 
127  }
128 
129  }
130 
131 }
bool doTowerEncoding() const
void setHwQual(int qual)
Definition: L1Candidate.h:44
void setHwEtHad(int et)
Definition: CaloTower.cc:44
void setHwEtRatio(int ratio)
Definition: CaloTower.cc:49
void setHwPhi(int phi)
Definition: L1Candidate.h:43
void setHwPt(int pt)
Definition: L1Candidate.h:41
void setHwEta(int eta)
Definition: L1Candidate.h:42
void setHwEtEm(int et)
Definition: CaloTower.cc:39
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40

Member Data Documentation

CaloParamsHelper const* l1t::Stage2TowerDecompressAlgorithmFirmwareImp1::params_
private

Definition at line 29 of file Stage2TowerDecompressAlgorithmFirmware.h.

Referenced by processEvent().