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
#include "ThingSource.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 {
  ThingSource::ThingSource(edm::ParameterSet const& pset, edm::InputSourceDescription const& desc)
      : ProducerSourceBase(pset, desc, false), 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.
  ThingSource::~ThingSource() {}

  // Functions that gets called by framework every event
  void ThingSource::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 ThingSource::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 ThingSource::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 ThingSource::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 ThingSource::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 ThingSource::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
    edm::ParameterSetDescription desc;
    desc.setComment("Creates ThingCollections for testing.");
    edm::ProducerSourceBase::fillDescription(desc);
    descriptions.add("source", desc);
  }

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