CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Stage2Layer2DemuxSumsAlgoFirmwareImp1.cc
Go to the documentation of this file.
1 
10 
12 
13 #include <vector>
14 #include <algorithm>
15 
17  params_(params), cordic_(Cordic(14,6,8)) // These are the settings in the hardware - should probably make this configurable
18 {
19 }
20 
21 
23 
24 
25 }
26 
27 
28 void l1t::Stage2Layer2DemuxSumsAlgoFirmwareImp1::processEvent(const std::vector<l1t::EtSum> & inputSums,
29  std::vector<l1t::EtSum> & outputSums) {
30 
31  int32_t et(0), metx(0), mety(0), ht(0), mhtx(0), mhty(0), metPhi, mhtPhi;
32  uint32_t met, mht;
33 
34  // Add up the x, y and scalar components
35  for (std::vector<l1t::EtSum>::const_iterator eSum = inputSums.begin() ; eSum != inputSums.end() ; ++eSum )
36  {
37  switch (eSum->getType()) {
38 
39  case l1t::EtSum::EtSumType::kTotalEt:
40  et += eSum->hwPt();
41  break;
42 
43  case l1t::EtSum::EtSumType::kTotalEtx:
44  metx += eSum->hwPt();
45  break;
46 
47  case l1t::EtSum::EtSumType::kTotalEty:
48  mety += eSum->hwPt();
49  break;
50 
51  case l1t::EtSum::EtSumType::kTotalHt:
52  ht += eSum->hwPt();
53  break;
54 
55  case l1t::EtSum::EtSumType::kTotalHtx:
56  mhtx += eSum->hwPt();
57  break;
58 
59  case l1t::EtSum::EtSumType::kTotalHty:
60  mhty += eSum->hwPt();
61  break;
62 
63  default:
64  continue; // Should throw an exception or something?
65  }
66  }
67 
68  // Final MET calculation
69  cordic_( metx , mety , metPhi , met );
70 
71  // Final MHT calculation
72  cordic_( mhtx , mhty , mhtPhi , mht );
73 
74  // Make final collection
76 
77  l1t::EtSum etSumTotalEt(p4,l1t::EtSum::EtSumType::kTotalEt,et,0,0,0);
78  l1t::EtSum etSumMissingEt(p4,l1t::EtSum::EtSumType::kMissingEt,met,0,metPhi,0);
79  l1t::EtSum htSumht(p4,l1t::EtSum::EtSumType::kTotalHt,ht,0,0,0);
80  l1t::EtSum htSumMissingHt(p4,l1t::EtSum::EtSumType::kMissingHt,mht,0,mhtPhi,0);
81 
82  outputSums.push_back(etSumTotalEt);
83  outputSums.push_back(etSumMissingEt);
84  outputSums.push_back(htSumht);
85  outputSums.push_back(htSumMissingHt);
86 
87 }
XYZTLorentzVectorD XYZTLorentzVector
Lorentz vector with cylindrical internal representation using pseudorapidity.
Definition: LorentzVector.h:29
double p4[4]
Definition: TauolaWrapper.h:92
Definition: Cordic.h:7
virtual void processEvent(const std::vector< l1t::EtSum > &inputSums, std::vector< l1t::EtSum > &outputSums)