Next

RawInputSource

Macros

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
#ifndef FWCore_Sources_RawInputSource_h
#define FWCore_Sources_RawInputSource_h

/*----------------------------------------------------------------------
----------------------------------------------------------------------*/

#include <memory>
#include <utility>

#include "DataFormats/Provenance/interface/EventID.h"
#include "FWCore/Framework/interface/InputSource.h"
#include "FWCore/Framework/interface/Frameworkfwd.h"

namespace edm {
  class ParameterSet;
  class Timestamp;
  class RawInputSource : public InputSource {
  public:
    explicit RawInputSource(ParameterSet const& pset, InputSourceDescription const& desc);
    ~RawInputSource() override;
    static void fillDescription(ParameterSetDescription& description);

    //Next::kFile is only needed if the ProductRegistry must be updated
    enum class Next { kEvent, kFile, kStop };

  protected:
    void makeEvent(EventPrincipal& eventPrincipal, EventAuxiliary const& eventAuxiliary);
    virtual Next checkNext() = 0;
    virtual void read(EventPrincipal& eventPrincipal) = 0;
    void setInputFileTransitionsEachEvent() { inputFileTransitionsEachEvent_ = true; }

  private:
    void readEvent_(EventPrincipal& eventPrincipal) override;
    std::shared_ptr<LuminosityBlockAuxiliary> readLuminosityBlockAuxiliary_() override;
    std::shared_ptr<RunAuxiliary> readRunAuxiliary_() override;
    virtual void reset_();
    void rewind_() override;
    ItemTypeInfo getNextItemType() override;
    void closeFile_() final;
    std::shared_ptr<FileBlock> readFile_() final;
    virtual void genuineCloseFile() {}
    virtual void genuineReadFile() {}

    bool inputFileTransitionsEachEvent_;
    bool fakeInputFileTransition_;
  };
}  // namespace edm
#endif