Back to home page

Project CMSSW displayed by LXR

 
 

    


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   //      Look up table
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   //      RPC Geometry
0043   else if (cppfSource == "Geo") {
0044     cppfSource_ = CppfSource::EventSetup;
0045   }
0046   //      Error for wrong input
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) {  // Using the look up table to fill the information
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     // Clear output collections
0074     // cppf_rpcDigi.clear();
0075     cppf_recHit.clear();
0076 
0077     //Get the RPCDigis from the event
0078     // Run the CPPF clusterization+coordinate conversion algo on RPCDigis and
0079     // RecHits
0080 
0081     // For now, treat CPPF as single board
0082     // In the future, may want to treat the 4 CPPF boards in each endcap as
0083     // separate entities
0084 
0085     // for (unsigned int iBoard = 0; iBoard < rpcDigi_processors_.size();
0086     // iBoard++) { rpcDigi_processors_.at(iBoard).process( iSetup, rpcDigis,
0087     // cppf_rpcDigi );
0088     // }
0089     for (auto &recHit_processor : recHit_processors_) {
0090       recHit_processor.process(
0091           iEvent, iSetup, recHitToken_, rpcDigiToken_, rpcDigiSimLinkToken_, rpcGeomToken_, cppf_recHit);
0092     }
0093   }
0094 }  // End void EmulateCPPF::process()