Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2025-06-20 01:53:34

0001 #include "L1Trigger/Phase2L1ParticleFlow/interface/egamma/pfeginput_ref.h"
0002 
0003 using namespace l1ct;
0004 
0005 #ifdef CMSSW_GIT_HASH
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0008 
0009 l1ct::EGInputSelectorEmuConfig::EGInputSelectorEmuConfig(const edm::ParameterSet &pset)
0010     : idMask(pset.getParameter<uint32_t>("emIDMask")),
0011       nHADCALO_IN(pset.getParameter<uint32_t>("nHADCALO_IN")),
0012       nEMCALO_OUT(pset.getParameter<uint32_t>("nEMCALO_OUT")),
0013       debug(pset.getUntrackedParameter<uint32_t>("debug")) {}
0014 
0015 edm::ParameterSetDescription l1ct::EGInputSelectorEmuConfig::getParameterSetDescription() {
0016   edm::ParameterSetDescription description;
0017   description.add<unsigned int>("emIDMask", 30);
0018   description.add<unsigned int>("nHADCALO_IN");
0019   description.add<unsigned int>("nEMCALO_OUT");
0020   description.addUntracked<uint32_t>("debug", 0);
0021   return description;
0022 }
0023 #endif
0024 
0025 void EGInputSelectorEmulator::toFirmware(const PFInputRegion &in, HadCaloObj hadcalo[/*nCALO*/]) const {
0026   l1ct::toFirmware(in.hadcalo, cfg.nHADCALO_IN, hadcalo);
0027 }
0028 
0029 void EGInputSelectorEmulator::toFirmware(const std::vector<EmCaloObjEmu> &emcalo_sel, EmCaloObj emcalo[]) const {
0030   l1ct::toFirmware(emcalo_sel, cfg.nEMCALO_OUT, emcalo);
0031 }
0032 
0033 void EGInputSelectorEmulator::select_eginput(const l1ct::HadCaloObjEmu &in,
0034                                              l1ct::EmCaloObjEmu &out,
0035                                              bool &valid_out) const {
0036   out.clear();
0037   out.src = in.src;
0038   out.hwPt = in.hwEmPt;
0039   out.hwEta = in.hwEta;
0040   out.hwPhi = in.hwPhi;
0041   out.hwPtErr = 0;
0042   // shift to get rid of PFEM ID bit (more usable final EG quality)
0043   out.hwEmID = (in.hwEmID >> 1);
0044 
0045   out.hwSrrTot = in.hwSrrTot;
0046   out.hwMeanZ = in.hwMeanZ;
0047   out.hwHoe = in.hwHoe;
0048   out.hwPiProb = in.hwPiProb;
0049   out.hwEmProb = in.hwEmProb;
0050   // FIXME: we protect against hwEmPt == 0 but we should understand the origin of the problem
0051   valid_out = (in.hwEmID & cfg.idMask) != 0 && out.hwPt != 0;
0052 }
0053 
0054 void EGInputSelectorEmulator::select_eginputs(const std::vector<HadCaloObjEmu> &hadcalo_in,
0055                                               std::vector<EmCaloObjEmu> &emcalo_sel) const {
0056   for (int ic = 0, nc = hadcalo_in.size(); ic < nc; ++ic) {
0057     if (emcalo_sel.size() == cfg.nEMCALO_OUT)
0058       break;
0059     bool valid = false;
0060     EmCaloObjEmu out;
0061     select_eginput(hadcalo_in[ic], out, valid);
0062     if (valid) {
0063       emcalo_sel.push_back(out);
0064     }
0065   }
0066 }
0067 
0068 void EGInputSelectorEmulator::select_or_clear(const HadCaloObjEmu &hadcalo_in, EmCaloObjEmu &emcalo_out) const {
0069   bool valid = false;
0070   select_eginput(hadcalo_in, emcalo_out, valid);
0071   if (!valid)
0072     emcalo_out.clear();
0073 }
0074 
0075 void EGInputSelectorEmulator::select_or_clear(const std::vector<HadCaloObjEmu> &hadcalo_in,
0076                                               std::vector<EmCaloObjEmu> &emcalo_out) const {
0077   emcalo_out.resize(hadcalo_in.size());
0078   for (int ic = 0, nc = hadcalo_in.size(); ic < nc; ++ic) {
0079     select_or_clear(hadcalo_in[ic], emcalo_out[ic]);
0080   }
0081 }