Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
#include "EventFilter/L1GlobalTriggerRawToDigi/interface/ConditionDumperInEdm.h"
#include <memory>

#include "FWCore/MessageLogger/interface/MessageLogger.h"

#include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerEvmReadoutRecord.h"
#include "DataFormats/L1GlobalTrigger/interface/L1GtfeExtWord.h"

//
// constructors and destructor
//
ConditionDumperInEdm::ConditionDumperInEdm(const edm::ParameterSet& iConfig)
    : gtEvmDigisLabel_{iConfig.getParameter<edm::InputTag>("gtEvmDigisLabel")},
      gtEvmDigisLabelToken_{consumes<L1GlobalTriggerEvmReadoutRecord>(gtEvmDigisLabel_)},
      runInfoToken_{esConsumes<edm::Transition::EndRun>()},
      //per LUMI products
      lumiToken_{produces<edm::ConditionsInLumiBlock, edm::Transition::EndLuminosityBlock>()},
      //per RUN products
      runToken_{produces<edm::ConditionsInRunBlock, edm::Transition::EndRun>()},
      //per EVENT products
      eventToken_{produces<edm::ConditionsInEventBlock>()} {}

ConditionDumperInEdm::~ConditionDumperInEdm() {}

//
// member functions
//
std::shared_ptr<edm::ConditionsInLumiBlock> ConditionDumperInEdm::globalBeginLuminosityBlock(
    edm::LuminosityBlock const&, edm::EventSetup const&) const {
  return std::make_shared<edm::ConditionsInLumiBlock>();
}

void ConditionDumperInEdm::endLuminosityBlockProduce(edm::LuminosityBlock& lumi, edm::EventSetup const& setup) {
  lumi.emplace(lumiToken_, *luminosityBlockCache(lumi.index()));
}

std::shared_ptr<edm::ConditionsInRunBlock> ConditionDumperInEdm::globalBeginRun(edm::Run const&,
                                                                                const edm::EventSetup&) const {
  return std::make_shared<edm::ConditionsInRunBlock>();
}

void ConditionDumperInEdm::endRunProduce(edm::Run& run, const edm::EventSetup& setup) {
  //dump of RunInfo
  auto& runBlock = *(runCache(run.index()));
  {
    auto const& sum = setup.getData(runInfoToken_);
    runBlock.BStartCurrent = sum.m_start_current;
    runBlock.BStopCurrent = sum.m_stop_current;
    runBlock.BAvgCurrent = sum.m_avg_current;
  }

  run.emplace(runToken_, runBlock);
}

// ------------ method called to produce the data  ------------
void ConditionDumperInEdm::produce(edm::Event& iEvent, const edm::EventSetup& iSetup) {
  //get the L1 object
  edm::Handle<L1GlobalTriggerEvmReadoutRecord> gtReadoutRecordData;
  iEvent.getByToken(gtEvmDigisLabelToken_, gtReadoutRecordData);

  if (!gtReadoutRecordData.isValid()) {
    LogDebug("ConditionDumperInEdm") << "\nWarning: L1GlobalTriggerEvmReadoutRecord with input tag " << gtEvmDigisLabel_
                                     << "\nrequested in configuration, but not found in the event."
                                     << "\nNo BST quantities retrieved." << std::endl;

    iEvent.emplace(eventToken_, eventBlock_);

    return;
  }

  const L1GtfeExtWord& gtfeBlockData = gtReadoutRecordData->gtfeWord();

  //lumi info
  auto& lumiBlock = *luminosityBlockCache(iEvent.getLuminosityBlock().index());
  lumiBlock.totalIntensityBeam1 = gtfeBlockData.totalIntensityBeam1();
  lumiBlock.totalIntensityBeam2 = gtfeBlockData.totalIntensityBeam2();

  //run info
  auto& runBlock = *runCache(iEvent.getRun().index());
  runBlock.beamMomentum = gtfeBlockData.beamMomentum();
  runBlock.beamMode = gtfeBlockData.beamMode();
  runBlock.lhcFillNumber = gtfeBlockData.lhcFillNumber();

  //event info
  eventBlock_.bstMasterStatus = gtfeBlockData.bstMasterStatus();
  eventBlock_.turnCountNumber = gtfeBlockData.turnCountNumber();

  iEvent.emplace(eventToken_, eventBlock_);
}