Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:26

0001 #ifndef PFALGO3_REF_H
0002 #define PFALGO3_REF_H
0003 
0004 #include "pfalgo_common_ref.h"
0005 
0006 namespace edm {
0007   class ParameterSet;
0008   class ParameterSetDescription;
0009 }  // namespace edm
0010 
0011 namespace l1ct {
0012 
0013   class PFAlgo3Emulator : public PFAlgoEmulatorBase {
0014   public:
0015     PFAlgo3Emulator(unsigned int nTrack,
0016                     unsigned int nEmCalo,
0017                     unsigned int nCalo,
0018                     unsigned int nMu,
0019                     unsigned int nPhoton,
0020                     unsigned int nSelCalo,
0021                     unsigned int nAllNeutral,
0022                     unsigned int dR2Max_Tk_Mu,
0023                     unsigned int dR2Max_Tk_Em,
0024                     unsigned int dR2Max_Em_Calo,
0025                     unsigned int dR2Max_Tk_Calo,
0026                     pt_t tk_MaxInvPt_Loose,
0027                     pt_t tk_MaxInvPt_Tight)
0028         : PFAlgoEmulatorBase(
0029               nTrack, nCalo, nMu, nSelCalo, dR2Max_Tk_Mu, dR2Max_Tk_Calo, tk_MaxInvPt_Loose, tk_MaxInvPt_Tight),
0030           nEMCALO_(nEmCalo),
0031           nPHOTON_(nPhoton),
0032           nALLNEUTRAL_(nAllNeutral),
0033           dR2MAX_TK_EM_(dR2Max_Tk_Em),
0034           dR2MAX_EM_CALO_(dR2Max_Em_Calo) {}
0035 
0036     // note: this one will work only in CMSSW
0037     PFAlgo3Emulator(const edm::ParameterSet& iConfig);
0038 
0039     ~PFAlgo3Emulator() override {}
0040 
0041     static edm::ParameterSetDescription getParameterSetDescription();
0042 
0043     void run(const PFInputRegion& in, OutputRegion& out) const override;
0044 
0045     void toFirmware(const PFInputRegion& in,
0046                     PFRegion& region,
0047                     HadCaloObj calo[/*nCALO*/],
0048                     EmCaloObj emcalo[/*nEMCALO*/],
0049                     TkObj track[/*nTRACK*/],
0050                     MuObj mu[/*nMU*/]) const;
0051     void toFirmware(const OutputRegion& out,
0052                     PFChargedObj outch[/*nTRACK*/],
0053                     PFNeutralObj outpho[/*nPHOTON*/],
0054                     PFNeutralObj outne[/*nSELCALO*/],
0055                     PFChargedObj outmu[/*nMU*/]) const;
0056 
0057     /// moves all objects from out.pfphoton to the beginning of out.pfneutral
0058     void mergeNeutrals(OutputRegion& out) const override;
0059 
0060   protected:
0061     unsigned int nEMCALO_, nPHOTON_, nALLNEUTRAL_;
0062     unsigned int dR2MAX_TK_EM_;
0063     unsigned int dR2MAX_EM_CALO_;
0064 
0065     int tk_best_match_ref(unsigned int dR2MAX,
0066                           const std::vector<l1ct::EmCaloObjEmu>& calo,
0067                           const l1ct::TkObjEmu& track) const;
0068     int em_best_match_ref(unsigned int dR2MAX,
0069                           const std::vector<l1ct::HadCaloObjEmu>& calo,
0070                           const l1ct::EmCaloObjEmu& em) const;
0071 
0072     void pfalgo3_em_ref(const PFInputRegion& in,
0073                         const std::vector<int>& iMu /*[nTRACK]*/,
0074                         std::vector<int>& iEle /*[nTRACK]*/,
0075                         OutputRegion& out,
0076                         std::vector<HadCaloObjEmu>& hadcalo_out /*[nCALO]*/) const;
0077   };
0078 
0079 }  // namespace l1ct
0080 
0081 #endif