File indexing completed on 2024-04-06 12:21:25
0001 #ifndef L1Trigger_Phase2L1ParticleFlow_L1EGPuppiIsoAlgo_h
0002 #define L1Trigger_Phase2L1ParticleFlow_L1EGPuppiIsoAlgo_h
0003
0004 #include <list>
0005 #include <string>
0006 #include <vector>
0007 #include <memory>
0008
0009 #include "DataFormats/L1TParticleFlow/interface/datatypes.h"
0010 #include "DataFormats/L1TParticleFlow/interface/layer1_emulator.h"
0011 #include "DataFormats/L1TParticleFlow/interface/egamma.h"
0012 #include "DataFormats/L1TParticleFlow/interface/puppi.h"
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014
0015 namespace l1ct {
0016
0017 struct L1EGPuppiIsoAlgoConfig {
0018 enum { kPFIso, kPuppiIso };
0019
0020 int pfIsoType_;
0021 pt_t ptMin_;
0022 ap_int<z0_t::width + 1> dZMax_;
0023 int dRMin2_;
0024 int dRMax2_;
0025 bool pfCandReuse_;
0026
0027 L1EGPuppiIsoAlgoConfig(const std::string& pfIsoTypeStr,
0028 const float ptMin,
0029 const float dZMax,
0030 const float dRMin,
0031 const float dRMax,
0032 const bool pfCandReuse)
0033 : pfIsoType_(pfIsoTypeStr == "PF" ? kPFIso : kPuppiIso),
0034 ptMin_(Scales::makePtFromFloat(ptMin)),
0035 dZMax_(Scales::makeZ0(dZMax)),
0036 dRMin2_(Scales::makeDR2FromFloatDR(dRMin)),
0037 dRMax2_(Scales::makeDR2FromFloatDR(dRMax)),
0038 pfCandReuse_(pfCandReuse) {}
0039 };
0040
0041 typedef std::vector<EGIsoObjEmu> EGIsoObjsEmu;
0042 typedef std::vector<EGIsoEleObjEmu> EGIsoEleObjsEmu;
0043 typedef std::vector<PuppiObj> PuppiObjs;
0044
0045 class L1EGPuppiIsoAlgo {
0046 public:
0047 L1EGPuppiIsoAlgo(const L1EGPuppiIsoAlgoConfig& config) : config_(config) {}
0048 L1EGPuppiIsoAlgo(const edm::ParameterSet& pSet);
0049 virtual ~L1EGPuppiIsoAlgo() = default;
0050
0051 void run(const EGIsoObjsEmu& l1EGs, const PuppiObjs& l1PFCands, EGIsoObjsEmu& outL1EGs, z0_t z0 = 0) const;
0052 void run(EGIsoObjsEmu& l1EGs, const PuppiObjs& l1PFCands, z0_t z0 = 0) const;
0053 void run(EGIsoEleObjsEmu& l1Eles, const PuppiObjs& l1PFCands) const;
0054
0055 private:
0056 iso_t calcIso(const EGIsoObj& l1EG, std::list<const PuppiObj*>& workPFCands, z0_t z0 = 0) const;
0057
0058 const L1EGPuppiIsoAlgoConfig config_;
0059 };
0060
0061 }
0062 #endif