Back to home page

Project CMSSW displayed by LXR

 
 

    


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 }  // namespace l1ct
0062 #endif