Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef L1Trigger_Phase2L1ParticleFlow_L1TCorrelatorLayer1PatternFileWriter_h
0002 #define L1Trigger_Phase2L1ParticleFlow_L1TCorrelatorLayer1PatternFileWriter_h
0003 
0004 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0005 #include "FWCore/ParameterSet/interface/ParameterSetDescription.h"
0006 #include "L1Trigger/DemonstratorTools/interface/BoardDataWriter.h"
0007 #include "L1Trigger/DemonstratorTools/interface/utilities.h"
0008 
0009 #include "DataFormats/L1TParticleFlow/interface/layer1_emulator.h"
0010 
0011 class L1TCorrelatorLayer1PatternFileWriter {
0012 public:
0013   L1TCorrelatorLayer1PatternFileWriter(const edm::ParameterSet& iConfig, const l1ct::Event& eventTemplate);
0014   ~L1TCorrelatorLayer1PatternFileWriter();
0015 
0016   static edm::ParameterSetDescription getParameterSetDescription();
0017 
0018   void write(const l1ct::Event& event);
0019   void flush();
0020 
0021 private:
0022   enum class Partition { Barrel, HGCal, HGCalNoTk, HF };
0023 
0024   Partition partition_;
0025   const unsigned int tmuxFactor_;
0026   bool writeInputs_, writeOutputs_, writeDebugs_;
0027   std::map<l1t::demo::LinkId, std::vector<size_t>> channelIdsInput_, channelIdsOutput_;
0028   std::map<std::string, l1t::demo::ChannelSpec> channelSpecsInput_, channelSpecsOutput_;
0029 
0030   // The TmuxFactor represents the Tmux of the inputs. The LinksFactor is the number of links per sector.
0031   // They are not configurable in the current architecture.
0032   const unsigned int tfTmuxFactor_ = 18, tfLinksFactor_ = 1;
0033   const unsigned int hgcTmuxFactor_ = 18, hgcLinksFactor_ = 4;
0034   const unsigned int gctEmTmuxFactor_ = 6, gctEmLinksFactor_ = 1;
0035   const unsigned int gctHadTmuxFactor_ = 6, gctHadLinksFactor_ = 1;
0036   const unsigned int gmtTmuxFactor_ = 18, gmtLinksFactor_ = 1;
0037   const unsigned int gttTmuxFactor_ = 6, gttLinksFactor_ = 1;
0038   const unsigned int tfTimeslices_, hgcTimeslices_, gctEmTimeslices_, gctHadTimeslices_, gmtTimeslices_, gttTimeslices_;
0039   uint32_t gctLinksEcal_, gctLinksHad_;
0040   bool gctSingleLink_;
0041   uint32_t gmtNumberOfMuons_;
0042   uint32_t gttNumberOfPVs_;
0043   uint32_t tfNumberOfTracks_;  // if this messes up Serenity, change to int32 and only apply if not negative?
0044   uint32_t gctNumberOfEMs_;
0045   uint32_t gctNumberOfHads_;
0046   uint32_t gttLatency_;
0047 
0048   std::vector<uint32_t> outputRegions_, outputLinksPuppi_;
0049   unsigned int nPuppiFramesPerRegion_;
0050   int32_t outputBoard_, outputLinkEgamma_;
0051   uint32_t nEgammaObjectsOut_;
0052 
0053   // for debug
0054   const uint32_t nPFInTrack_;
0055   const uint32_t nPFInEmCalo_;
0056   const uint32_t nPFInHadCalo_;
0057   const uint32_t nPFInMuon_;
0058   const uint32_t nPFOutCharged_;
0059   const uint32_t nPFOutPhoton_;
0060   const uint32_t nPFOutNeutral_;
0061   const uint32_t nPFOutMuon_;
0062 
0063   // Common stuff related to the format
0064   uint32_t nInputFramesPerBX_, nOutputFramesPerBX_;
0065   const std::string fileFormat_;
0066 
0067   // final helper
0068   const uint32_t eventsPerFile_;
0069   uint32_t eventIndex_;
0070   std::unique_ptr<l1t::demo::BoardDataWriter> inputFileWriter_, outputFileWriter_, debugFileWriter_;
0071 
0072   static Partition parsePartition(const std::string& partition);
0073 
0074   static std::unique_ptr<edm::ParameterDescriptionNode> describeTF();
0075   static std::unique_ptr<edm::ParameterDescriptionNode> describeGCTEm();
0076   static std::unique_ptr<edm::ParameterDescriptionNode> describeGCTHad();
0077   static std::unique_ptr<edm::ParameterDescriptionNode> describeHGC();
0078   static std::unique_ptr<edm::ParameterDescriptionNode> describeGMT();
0079   static std::unique_ptr<edm::ParameterDescriptionNode> describeGTT();
0080   static std::unique_ptr<edm::ParameterDescriptionNode> describePuppi();
0081   static std::unique_ptr<edm::ParameterDescriptionNode> describeEG();
0082 
0083   void configTimeSlices(const edm::ParameterSet& iConfig,
0084                         const std::string& prefix,
0085                         unsigned int nSectors,
0086                         unsigned int nTimeSlices,
0087                         unsigned int linksFactor);
0088   static std::unique_ptr<edm::ParameterDescriptionNode> describeTimeSlices(const std::string& prefix);
0089   void configSectors(const edm::ParameterSet& iConfig,
0090                      const std::string& prefix,
0091                      unsigned int nSectors,
0092                      unsigned int linksFactor);
0093   static std::unique_ptr<edm::ParameterDescriptionNode> describeSectors(const std::string& prefix);
0094   void configLinks(const edm::ParameterSet& iConfig,
0095                    const std::string& prefix,
0096                    unsigned int linksFactor,
0097                    unsigned int offset);
0098   static std::unique_ptr<edm::ParameterDescriptionNode> describeLinks(const std::string& prefix);
0099 
0100   void writeTF(const l1ct::Event& event, l1t::demo::EventData& out);
0101   void writeGCTEm(const l1ct::Event& event, l1t::demo::EventData& out);
0102   void writeGCTHad(const l1ct::Event& event, l1t::demo::EventData& out);
0103   void writeHGC(const l1ct::Event& event, l1t::demo::EventData& out);
0104   void writeGMT(const l1ct::Event& event, l1t::demo::EventData& out);
0105   void writeGTT(const l1ct::Event& event, l1t::demo::EventData& out);
0106   void writePuppi(const l1ct::Event& event, l1t::demo::EventData& out);
0107   void writeEgamma(const l1ct::OutputBoard& egboard, std::vector<ap_uint<64>>& out);
0108   void writeEgamma(const l1ct::Event& event, l1t::demo::EventData& out);
0109   void writeDebugs(const l1ct::Event& event, l1t::demo::EventData& out);
0110 };
0111 
0112 #endif