Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:29:34

0001 #include "DataFormats/HcalDigi/interface/HcalDigiCollections.h"
0002 #include "DataFormats/HcalDigi/interface/HcalTTPDigi.h"
0003 #include "DataFormats/L1GlobalTrigger/interface/L1GtTechnicalTriggerRecord.h"
0004 #include "DataFormats/Common/interface/Handle.h"
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006 #include "FWCore/Framework/interface/stream/EDProducer.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0008 #include "FWCore/Framework/interface/Event.h"
0009 #include "FWCore/Framework/interface/EventSetup.h"
0010 
0011 class HcalTTPTriggerRecord : public edm::stream::EDProducer<> {
0012 public:
0013   explicit HcalTTPTriggerRecord(const edm::ParameterSet& ps);
0014   ~HcalTTPTriggerRecord() override;
0015 
0016   void produce(edm::Event& e, const edm::EventSetup& c) override;
0017 
0018 private:
0019   edm::EDGetTokenT<HcalTTPDigiCollection> tok_ttp_;
0020   std::vector<unsigned int> ttpBits_;
0021   std::vector<std::string> names_;
0022 };
0023 
0024 HcalTTPTriggerRecord::HcalTTPTriggerRecord(const edm::ParameterSet& ps) {
0025   tok_ttp_ = consumes<HcalTTPDigiCollection>(ps.getParameter<edm::InputTag>("ttpDigiCollection"));
0026   ttpBits_ = ps.getParameter<std::vector<unsigned int> >("ttpBits");
0027   names_ = ps.getParameter<std::vector<std::string> >("ttpBitNames");
0028 
0029   produces<L1GtTechnicalTriggerRecord>();
0030 }
0031 
0032 HcalTTPTriggerRecord::~HcalTTPTriggerRecord() {}
0033 
0034 void HcalTTPTriggerRecord::produce(edm::Event& e, const edm::EventSetup& eventSetup) {
0035   std::vector<L1GtTechnicalTrigger> vecTT(ttpBits_.size());
0036 
0037   // Get Inputs
0038   edm::Handle<HcalTTPDigiCollection> ttpDigiCollection;
0039   e.getByToken(tok_ttp_, ttpDigiCollection);
0040 
0041   if (!ttpDigiCollection.failedToGet()) {
0042     const HcalTTPDigiCollection* ttpDigis = ttpDigiCollection.product();
0043     uint8_t ttpResults = ttpDigis->begin()->triggerOutput();
0044     bool bit8 = ttpResults & 0x1;
0045     bool bit9 = ttpResults & 0x2;
0046     bool bit10 = ttpResults & 0x4;
0047 
0048     for (unsigned int i = 0; i < ttpBits_.size(); i++) {
0049       bool bitValue = false;
0050       if (ttpBits_.at(i) == 8)
0051         bitValue = bit8;
0052       if (ttpBits_.at(i) == 9)
0053         bitValue = bit9;
0054       if (ttpBits_.at(i) == 10)
0055         bitValue = bit10;
0056       vecTT.at(i) = L1GtTechnicalTrigger(names_.at(i), ttpBits_.at(i), 0, bitValue);
0057     }
0058   } else {
0059     vecTT.clear();
0060   }
0061 
0062   // Put output into event
0063   std::unique_ptr<L1GtTechnicalTriggerRecord> output(new L1GtTechnicalTriggerRecord());
0064   output->setGtTechnicalTrigger(vecTT);
0065   e.put(std::move(output));
0066 }
0067 
0068 #include "FWCore/PluginManager/interface/ModuleDef.h"
0069 #include "FWCore/Framework/interface/MakerMacros.h"
0070 
0071 DEFINE_FWK_MODULE(HcalTTPTriggerRecord);