File indexing completed on 2024-04-06 12:20:54
0001
0002 #include "CondFormats/RPCObjects/interface/RPCDeadStrips.h"
0003 #include "CondFormats/RPCObjects/interface/RPCMaskedStrips.h"
0004 #include "L1Trigger/L1TMuonCPPF/interface/EmulateCPPF.h"
0005 #include <fstream>
0006 #include <string>
0007 #include "L1Trigger/L1TMuonCPPF/src/CPPFClusterContainer.h"
0008 #include "L1Trigger/L1TMuonCPPF/src/CPPFCluster.h"
0009 #include "L1Trigger/L1TMuonCPPF/src/CPPFClusterizer.h"
0010 #include "L1Trigger/L1TMuonCPPF/src/CPPFMaskReClusterizer.h"
0011 #include "Geometry/RPCGeometry/interface/RPCRoll.h"
0012 #include "DataFormats/Common/interface/DetSetVector.h"
0013
0014 EmulateCPPF::EmulateCPPF(const edm::ParameterSet &iConfig, edm::ConsumesCollector &&iConsumes)
0015 : recHit_processors_(),
0016 rpcDigiToken_(iConsumes.consumes<RPCDigiCollection>(iConfig.getParameter<edm::InputTag>("rpcDigiLabel"))),
0017 recHitToken_(iConsumes.consumes<RPCRecHitCollection>(iConfig.getParameter<edm::InputTag>("recHitLabel"))),
0018 rpcDigiSimLinkToken_(iConsumes.consumes<edm::DetSetVector<RPCDigiSimLink> >(
0019 iConfig.getParameter<edm::InputTag>("rpcDigiSimLinkLabel"))),
0020 rpcGeomToken_(iConsumes.esConsumes()),
0021 cppfSource_(CppfSource::EventSetup),
0022 MaxClusterSize_(0) {
0023 MaxClusterSize_ = iConfig.getParameter<int>("MaxClusterSize");
0024 const std::string cppfSource = iConfig.getParameter<std::string>("cppfSource");
0025
0026 if (cppfSource == "File") {
0027 cppfSource_ = CppfSource::File;
0028 edm::FileInPath fp = iConfig.getParameter<edm::FileInPath>("cppfvecfile");
0029 std::ifstream inputFile(fp.fullPath().c_str(), std::ios::in);
0030 if (!inputFile) {
0031 throw cms::Exception("No LUT") << "Error: CPPF look up table file cannot not be opened";
0032 exit(1);
0033 }
0034 while (inputFile.good()) {
0035 RecHitProcessor::CppfItem Item;
0036 inputFile >> Item.rawId >> Item.strip >> Item.lb >> Item.halfchannel >> Item.int_phi >> Item.int_theta;
0037 if (inputFile.good())
0038 CppfVec_1.push_back(Item);
0039 }
0040 inputFile.close();
0041 }
0042
0043 else if (cppfSource == "Geo") {
0044 cppfSource_ = CppfSource::EventSetup;
0045 }
0046
0047 else {
0048 throw cms::Exception("Invalid option")
0049 << "Error: Specify in python/emulatorCppfDigis_cfi 'File' for look up table or 'Geo' for RPC Geometry";
0050 exit(1);
0051 }
0052 }
0053
0054 EmulateCPPF::~EmulateCPPF() {}
0055
0056 void EmulateCPPF::process(const edm::Event &iEvent,
0057 const edm::EventSetup &iSetup,
0058 l1t::CPPFDigiCollection &cppf_recHit) {
0059 if (cppfSource_ == CppfSource::File) {
0060 cppf_recHit.clear();
0061 for (auto &recHit_processor : recHit_processors_) {
0062 recHit_processor.processLook(iEvent,
0063 iSetup,
0064 recHitToken_,
0065 rpcDigiToken_,
0066 rpcDigiSimLinkToken_,
0067 rpcGeomToken_,
0068 CppfVec_1,
0069 cppf_recHit,
0070 MaxClusterSize_);
0071 }
0072 } else if (cppfSource_ == CppfSource::EventSetup) {
0073
0074
0075 cppf_recHit.clear();
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089 for (auto &recHit_processor : recHit_processors_) {
0090 recHit_processor.process(
0091 iEvent, iSetup, recHitToken_, rpcDigiToken_, rpcDigiSimLinkToken_, rpcGeomToken_, cppf_recHit);
0092 }
0093 }
0094 }