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 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
#include "ThingExtSource.h"
#include "DataFormats/TestObjects/interface/ThingCollection.h"
#include "FWCore/Framework/interface/Event.h"
#include "FWCore/Framework/interface/LuminosityBlock.h"
#include "FWCore/Framework/interface/Run.h"
#include "FWCore/Framework/interface/InputSourceMacros.h"

namespace edmtest {
  ThingExtSource::ThingExtSource(edm::ParameterSet const& pset, edm::InputSourceDescription const& desc)
      : ProducerSourceFromFiles(pset, desc, true), alg_() {
    produces<ThingCollection>();
    produces<ThingCollection, edm::Transition::BeginLuminosityBlock>("beginLumi");
    produces<ThingCollection, edm::Transition::BeginLuminosityBlock>("endLumi");
    produces<ThingCollection, edm::Transition::BeginRun>("beginRun");
    produces<ThingCollection, edm::Transition::BeginRun>("endRun");
  }

  // Virtual destructor needed.
  ThingExtSource::~ThingExtSource() {}

  // Functions that gets called by framework every event
  bool ThingExtSource::setRunAndEventInfo(edm::EventID&, edm::TimeValue_t&, edm::EventAuxiliary::ExperimentType&) {
    // Fake running out of data.
    if (event() > 2)
      return false;
    return true;
  }

  void ThingExtSource::produce(edm::Event& e) {
    // Step A: Get Inputs

    // Step B: Create empty output
    auto result = std::make_unique<ThingCollection>();  //Empty

    // Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
    alg_.run(*result);

    // Step D: Put outputs into event
    e.put(std::move(result));
  }

  // Functions that gets called by framework every luminosity block
  void ThingExtSource::beginLuminosityBlock(edm::LuminosityBlock& lb) {
    // Step A: Get Inputs

    // Step B: Create empty output
    auto result = std::make_unique<ThingCollection>();  //Empty

    // Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
    alg_.run(*result);

    // Step D: Put outputs into lumi block
    lb.put(std::move(result), "beginLumi");

    endLuminosityBlock(lb);
  }

  void ThingExtSource::endLuminosityBlock(edm::LuminosityBlock& lb) {
    // Step A: Get Inputs

    // Step B: Create empty output
    auto result = std::make_unique<ThingCollection>();  //Empty

    // Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
    alg_.run(*result);

    // Step D: Put outputs into lumi block
    lb.put(std::move(result), "endLumi");
  }

  // Functions that gets called by framework every run
  void ThingExtSource::beginRun(edm::Run& r) {
    // Step A: Get Inputs

    // Step B: Create empty output
    auto result = std::make_unique<ThingCollection>();  //Empty

    // Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
    alg_.run(*result);

    // Step D: Put outputs into event
    r.put(std::move(result), "beginRun");

    endRun(r);
  }

  void ThingExtSource::endRun(edm::Run& r) {
    // Step A: Get Inputs

    // Step B: Create empty output
    auto result = std::make_unique<ThingCollection>();  //Empty

    // Step C: Invoke the algorithm, passing in inputs (NONE) and getting back outputs.
    alg_.run(*result);

    // Step D: Put outputs into event
    r.put(std::move(result), "endRun");
  }

  void ThingExtSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
    edm::ParameterSetDescription desc;
    desc.setComment("Creates ThingCollections from a file for testing.");
    edm::ProducerSourceFromFiles::fillDescription(desc);
    descriptions.add("source", desc);
  }

}  // namespace edmtest
using edmtest::ThingExtSource;
DEFINE_FWK_INPUT_SOURCE(ThingExtSource);