File indexing completed on 2023-03-17 11:11:57
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0010 #include "L1Trigger/L1TCalorimeter/interface/Stage1Layer2HFRingSumAlgorithmImp.h"
0011
0012
0013 #include "DataFormats/L1GlobalCaloTrigger/interface/L1GctHFRingEtSums.h"
0014
0015 l1t::Stage1Layer2DiTauAlgorithm::Stage1Layer2DiTauAlgorithm(CaloParamsHelper const* params) : params_(params) {}
0016
0017 void l1t::Stage1Layer2DiTauAlgorithm::processEvent(const std::vector<l1t::CaloRegion>& regions,
0018 const std::vector<l1t::CaloEmCand>& EMCands,
0019 const std::vector<l1t::Tau>* taus,
0020 l1t::CaloSpare* spares) {
0021 std::vector<l1t::Tau> isoTaus;
0022 for (std::vector<l1t::Tau>::const_iterator itTau = taus->begin(); itTau != taus->end(); ++itTau) {
0023 if (!itTau->hwIso())
0024 continue;
0025 isoTaus.push_back(*itTau);
0026 }
0027
0028 int isoPtMax = 0;
0029 int diIsoPtMax = 0;
0030 int triIsoPtMax = 0;
0031 int quadIsoPtMax = 0;
0032 if (!isoTaus.empty()) {
0033 isoPtMax = isoTaus[0].hwPt();
0034 if (isoTaus.size() > 1)
0035 diIsoPtMax = isoTaus[1].hwPt();
0036 if (isoTaus.size() > 2)
0037 triIsoPtMax = isoTaus[2].hwPt();
0038 if (isoTaus.size() > 3)
0039 quadIsoPtMax = isoTaus[3].hwPt();
0040 }
0041
0042 int rankIso = 0;
0043 int rankDiIso = 0;
0044 int rankTriIso = 0;
0045 int rankQuadIso = 0;
0046
0047 bool useLut = true;
0048
0049 if (useLut) {
0050 unsigned int MAX_LUT_ADDRESS = params_->tauEtToHFRingEtLUT()->maxSize() - 1;
0051 unsigned int lutAddress = isoPtMax;
0052 if (lutAddress > MAX_LUT_ADDRESS)
0053 lutAddress = MAX_LUT_ADDRESS;
0054 rankIso = params_->tauEtToHFRingEtLUT()->data(lutAddress);
0055
0056 lutAddress = diIsoPtMax;
0057 if (lutAddress > MAX_LUT_ADDRESS)
0058 lutAddress = MAX_LUT_ADDRESS;
0059 rankDiIso = params_->tauEtToHFRingEtLUT()->data(lutAddress);
0060
0061 lutAddress = triIsoPtMax;
0062 if (lutAddress > MAX_LUT_ADDRESS)
0063 lutAddress = MAX_LUT_ADDRESS;
0064 rankTriIso = params_->tauEtToHFRingEtLUT()->data(lutAddress);
0065
0066 lutAddress = quadIsoPtMax;
0067 if (lutAddress > MAX_LUT_ADDRESS)
0068 lutAddress = MAX_LUT_ADDRESS;
0069 rankQuadIso = params_->tauEtToHFRingEtLUT()->data(lutAddress);
0070
0071 } else {
0072 double etIso = params_->jetScale().et(isoPtMax);
0073 double etDiIso = params_->jetScale().et(diIsoPtMax);
0074 double etTriIso = params_->jetScale().et(triIsoPtMax);
0075 double etQuadIso = params_->jetScale().et(quadIsoPtMax);
0076 rankIso = params_->HfRingScale().rank(etIso);
0077 rankDiIso = params_->HfRingScale().rank(etDiIso);
0078 rankTriIso = params_->HfRingScale().rank(etTriIso);
0079 rankQuadIso = params_->HfRingScale().rank(etQuadIso);
0080 }
0081
0082
0083
0084 L1GctHFRingEtSums s;
0085 s.setEtSum(0, rankIso);
0086 s.setEtSum(1, rankDiIso);
0087 s.setEtSum(2, rankTriIso);
0088 s.setEtSum(3, rankQuadIso);
0089 uint16_t raw = s.raw();
0090 spares->setHwPt(raw);
0091 }