CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Stage1Layer2DiTauAlgorithm.cc
Go to the documentation of this file.
1 
11 //#include "L1Trigger/L1TCalorimeter/interface/PUSubtractionMethods.h"
12 //#include "L1Trigger/L1TCalorimeter/interface/legacyGtHelper.h"
14 
16 {
17 }
18 
19 
21 
22 
23 void l1t::Stage1Layer2DiTauAlgorithm::processEvent(const std::vector<l1t::CaloRegion> & regions,
24  const std::vector<l1t::CaloEmCand> & EMCands,
25  const std::vector<l1t::Tau> * taus,
26  l1t::CaloSpare * spares) {
27 
28  std::vector<l1t::Tau> *isoTaus = new std::vector<l1t::Tau>();
29  for(std::vector<l1t::Tau>::const_iterator itTau = taus->begin();
30  itTau != taus->end(); ++itTau){
31  if( !itTau->hwIso() ) continue;
32  isoTaus->push_back( *itTau );
33  }
34 
35  int isoPtMax=0;
36  int diIsoPtMax=0;
37  int triIsoPtMax=0;
38  int quadIsoPtMax=0;
39  if(isoTaus->size()>0) {
40  isoPtMax= (*isoTaus).at(0).hwPt();
41  if (isoTaus->size()>1) diIsoPtMax = (*isoTaus).at(1).hwPt();
42  if (isoTaus->size()>2) triIsoPtMax = (*isoTaus).at(2).hwPt();
43  if (isoTaus->size()>3) quadIsoPtMax= (*isoTaus).at(3).hwPt();
44  }
45 
46  int rankIso = 0;
47  int rankDiIso = 0;
48  int rankTriIso = 0;
49  int rankQuadIso = 0;
50 
51  bool useLut=true;
52  // encode the highest pt Iso and DiIso in the HF ET rings
53  if (useLut){
54  unsigned int MAX_LUT_ADDRESS = params_->tauEtToHFRingEtLUT()->maxSize()-1;
55  unsigned int lutAddress = isoPtMax;
56  if (lutAddress > MAX_LUT_ADDRESS) lutAddress = MAX_LUT_ADDRESS;
57  rankIso=params_->tauEtToHFRingEtLUT()->data(lutAddress);
58 
59  lutAddress = diIsoPtMax;
60  if (lutAddress > MAX_LUT_ADDRESS) lutAddress = MAX_LUT_ADDRESS;
61  rankDiIso=params_->tauEtToHFRingEtLUT()->data(lutAddress);
62 
63  lutAddress = triIsoPtMax;
64  if (lutAddress > MAX_LUT_ADDRESS) lutAddress = MAX_LUT_ADDRESS;
65  rankTriIso=params_->tauEtToHFRingEtLUT()->data(lutAddress);
66 
67  lutAddress = quadIsoPtMax;
68  if (lutAddress > MAX_LUT_ADDRESS) lutAddress = MAX_LUT_ADDRESS;
69  rankQuadIso=params_->tauEtToHFRingEtLUT()->data(lutAddress);
70 
71  }else{
72  double etIso = params_->jetScale().et( isoPtMax ); // convert from hwPt to Physical pT
73  double etDiIso = params_->jetScale().et( diIsoPtMax );
74  double etTriIso = params_->jetScale().et( triIsoPtMax );
75  double etQuadIso = params_->jetScale().et( quadIsoPtMax );
76  rankIso = params_->HfRingScale().rank( etIso ); //convert to HfRingScale Rank
77  rankDiIso = params_->HfRingScale().rank( etDiIso );
78  rankTriIso = params_->HfRingScale().rank( etTriIso );
79  rankQuadIso = params_->HfRingScale().rank( etQuadIso );
80  }
81 
82  // std::cout << "Max Iso Tau pT: " << isoPtMax << "\t" << etIso << "\t" << rankIso << std::endl;
83 
85  s.setEtSum(0, rankIso);
86  s.setEtSum(1, rankDiIso);
87  s.setEtSum(2, rankTriIso);
88  s.setEtSum(3, rankQuadIso);
89  uint16_t raw = s.raw();
90  spares->setHwPt(raw);
91 
92  delete isoTaus;
93 
94 
95  const bool verbose = false;
96  if(verbose)
97  {
98  std::cout << "HF Ring Sums (Isolated Taus)" << std::endl;
99  std::cout << bitset<12>(spares->hwPt()).to_string() << std::endl;
100  }
101 }
std::string to_string(const T &t)
Definition: Logger.cc:26
virtual void processEvent(const std::vector< l1t::CaloRegion > &regions, const std::vector< l1t::CaloEmCand > &EMCands, const std::vector< l1t::Tau > *taus, l1t::CaloSpare *spare)
Stage1Layer2DiTauAlgorithm(CaloParamsHelper *params)
void setEtSum(unsigned i, uint16_t et)
set a sum
L1 GCT HF ring Et sums.
int hwPt() const
Definition: L1Candidate.cc:69
uint16_t raw() const
get the raw data
void setHwPt(int pt)
Definition: L1Candidate.cc:44
tuple cout
Definition: gather_cfg.py:121